From aae4c67e5d2a617144069bd3a61bdb3045938811 Mon Sep 17 00:00:00 2001
From: Roxy-3D <Roxy-3D@users.noreply.github.com>
Date: Wed, 15 Aug 2018 21:22:28 -0500
Subject: [PATCH] Max7219 Clean Up (#11563)

Some of the Rotations did not do the right thing with setting and clearing pixels.
I think it is correct now.   But if not...  It is much closer to being correct.
---
 Marlin/src/feature/Max7219_Debug_LEDs.cpp |  4 ++--
 Marlin/src/feature/Max7219_Debug_LEDs.h   | 16 ++++++++--------
 Marlin/src/gcode/feature/leds/M7219.cpp   | 12 +++++++++---
 3 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/Marlin/src/feature/Max7219_Debug_LEDs.cpp b/Marlin/src/feature/Max7219_Debug_LEDs.cpp
index c69be41d4e..1eb1280ee4 100644
--- a/Marlin/src/feature/Max7219_Debug_LEDs.cpp
+++ b/Marlin/src/feature/Max7219_Debug_LEDs.cpp
@@ -243,9 +243,9 @@ void Max7219_Set_Column(const uint8_t col, const uint32_t val) {
   uint32_t mask = 0x0000001;
   for (uint8_t y = 0; y < MAX7219_Y_LEDS; y++) {
     if (val & mask)
-      SET_PIXEL_7219(col, MAX7219_Y_LEDS-1-y);
+      SET_PIXEL_7219(col, MAX7219_Y_LEDS - y - 1);
     else
-      CLEAR_PIXEL_7219(col, MAX7219_Y_LEDS-1-y);
+      CLEAR_PIXEL_7219(col, MAX7219_Y_LEDS - y - 1);
     mask <<= 1;
   }
   #if _ROT == 90 || _ROT == 270
diff --git a/Marlin/src/feature/Max7219_Debug_LEDs.h b/Marlin/src/feature/Max7219_Debug_LEDs.h
index d1b11d10b2..435a1cd02d 100644
--- a/Marlin/src/feature/Max7219_Debug_LEDs.h
+++ b/Marlin/src/feature/Max7219_Debug_LEDs.h
@@ -116,19 +116,19 @@ void Max7219_idle_tasks();
   #define MAX7219_UPDATE_AXIS     x   // Fast line update axis for this orientation of the matrix display
   #define MAX7219_X_LEDS          8
   #define MAX7219_Y_LEDS          (MAX7219_X_LEDS * (MAX7219_NUMBER_UNITS))
-  #define XOR_7219(x, y)          LEDs[x + ((MAX7219_Y_LEDS - 1 - y) & 0xF8)] ^= _BV((y & 0x7))
-  #define SET_PIXEL_7219(x, y)    LEDs[x + ((MAX7219_Y_LEDS - 1 - y) & 0xF8)] |= _BV((y & 0x7))
-  #define CLEAR_PIXEL_7219(x, y)  LEDs[x + ((MAX7219_Y_LEDS - 1 - y) & 0xF8)] &= (_BV((y & 0x7)) ^ 0xFF)
-  #define BIT_7219(x, y)          TEST(LEDs[x + ((MAX7219_Y_LEDS - 1 - y) & 0xF8)], (y & 0x7))
+  #define XOR_7219(x, y)          LEDs[x + (y & 0xF8)] ^= _BV((y & 0x7))
+  #define SET_PIXEL_7219(x, y)    LEDs[x + (y & 0xF8)] |= _BV((y & 0x7))
+  #define CLEAR_PIXEL_7219(x, y)  LEDs[x + (y & 0xF8)] &= (_BV((y & 0x7)) ^ 0xFF)
+  #define BIT_7219(x, y)          TEST(LEDs[x + (y & 0xF8)], (y & 0x7))
   #define SEND_7219(R) do {for(int8_t jj = 0; jj < MAX7219_NUMBER_UNITS; jj++) Max7219(max7219_reg_digit0 + (R & 0x7), LEDs[(R & 0x7) + jj * 8]); Max7219_pulse_load(); } while (0);
 #elif _ROT == 180
   #define MAX7219_UPDATE_AXIS     y   // Fast line update axis for this orientation of the matrix display
   #define MAX7219_Y_LEDS          8
   #define MAX7219_X_LEDS          (MAX7219_Y_LEDS * (MAX7219_NUMBER_UNITS))
-  #define XOR_7219(x, y)          LEDs[y + (MAX7219_X_LEDS - 1 - (x)) & 0xF8] ^= _BV((x & 0x07))
-  #define SET_PIXEL_7219(x, y)    LEDs[y + (MAX7219_X_LEDS - 1 - (x)) & 0xF8] |= _BV((x & 0x07))
-  #define CLEAR_PIXEL_7219(x, y)  LEDs[y + (MAX7219_X_LEDS - 1 - (x)) & 0xF8] &= (_BV((x & 0x07)) ^ 0xFF)
-  #define BIT_7219(x, y)          TEST(LEDs[y + (MAX7219_X_LEDS - 1 - (x)) & 0xF8], ((x & 0x07)))
+  #define XOR_7219(x, y)          LEDs[x + (y & 0xF8)] ^= _BV((x & 0x07))
+  #define SET_PIXEL_7219(x, y)    LEDs[x + (y & 0xF8)] |= _BV((x & 0x07))
+  #define CLEAR_PIXEL_7219(x, y)  LEDs[x + (y & 0xF8)] &= (_BV((x & 0x07)) ^ 0xFF)
+  #define BIT_7219(x, y)          TEST(LEDs[x + (y & 0xF8)], ((x & 0x07)))
   #define SEND_7219(R) do {for(int8_t jj = 0; jj < MAX7219_NUMBER_UNITS; jj++) Max7219(max7219_reg_digit7 - (R & 0x7), LEDs[(R & 0x7) + jj * 8]); Max7219_pulse_load(); } while (0);
 #elif _ROT == 270
   #define MAX7219_UPDATE_AXIS     x   // Fast line update axis for this orientation of the matrix display
diff --git a/Marlin/src/gcode/feature/leds/M7219.cpp b/Marlin/src/gcode/feature/leds/M7219.cpp
index 8fb5379122..fe0a0cde15 100644
--- a/Marlin/src/gcode/feature/leds/M7219.cpp
+++ b/Marlin/src/gcode/feature/leds/M7219.cpp
@@ -71,12 +71,18 @@ void GcodeSuite::M7219() {
   }
 
   if (parser.seen('P')) {
-    for (uint8_t x = 0; x < COUNT(LEDs); x++) {
+    for (int8_t x = 0; x < 8 * MAX7219_NUMBER_UNITS; x++) {
       SERIAL_ECHOPAIR("LEDs[", x);
-      SERIAL_ECHOPAIR("]=", LEDs[x]);
-      SERIAL_EOL();
+    SERIAL_ECHO("]=");
+    for (int8_t j = 7; j >= 0; j--) {
+      if ( LEDs[x] & (0x01<<j) )
+        SERIAL_ECHO("1");
+      else
+        SERIAL_ECHO("0");
     }
+    SERIAL_EOL();
     return;
+    }
   }
 }
 
-- 
GitLab