|
|
@ -102,12 +102,9 @@ void Max7219(const uint8_t reg, const uint8_t data) { |
|
|
|
|
|
|
|
void Max7219_LED_Set(const uint8_t row, const uint8_t col, const bool on) { |
|
|
|
if (row > 7 || col > 7) { |
|
|
|
int r,c; |
|
|
|
r = row; |
|
|
|
c = col; |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_LED_Set(",r); |
|
|
|
SERIAL_ECHOPAIR(",",c); |
|
|
|
SERIAL_ECHO(")\n"); |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_LED_Set(", (int)row); |
|
|
|
SERIAL_ECHOPAIR(",", (int)col); |
|
|
|
SERIAL_ECHOLNPGM(")"); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (TEST(LEDs[row], col) == on) return; // if LED is already on/off, leave alone
|
|
|
@ -117,12 +114,9 @@ void Max7219_LED_Set(const uint8_t row, const uint8_t col, const bool on) { |
|
|
|
|
|
|
|
void Max7219_LED_On(const uint8_t col, const uint8_t row) { |
|
|
|
if (row > 7 || col > 7) { |
|
|
|
int r,c; |
|
|
|
r = row; |
|
|
|
c = col; |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_LED_On(",c); |
|
|
|
SERIAL_ECHOPAIR(",",r); |
|
|
|
SERIAL_ECHO(")\n"); |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_LED_On(", (int)col); |
|
|
|
SERIAL_ECHOPAIR(",", (int)row); |
|
|
|
SERIAL_ECHOLNPGM(")"); |
|
|
|
return; |
|
|
|
} |
|
|
|
Max7219_LED_Set(col, row, true); |
|
|
@ -130,12 +124,9 @@ void Max7219_LED_On(const uint8_t col, const uint8_t row) { |
|
|
|
|
|
|
|
void Max7219_LED_Off(const uint8_t col, const uint8_t row) { |
|
|
|
if (row > 7 || col > 7) { |
|
|
|
int r,c; |
|
|
|
r = row; |
|
|
|
c = col; |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_LED_Off(",r); |
|
|
|
SERIAL_ECHOPAIR(",",c); |
|
|
|
SERIAL_ECHO(")\n"); |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_LED_Off(", (int)row); |
|
|
|
SERIAL_ECHOPAIR(",", (int)col); |
|
|
|
SERIAL_ECHOLNPGM(")"); |
|
|
|
return; |
|
|
|
} |
|
|
|
Max7219_LED_Set(col, row, false); |
|
|
@ -143,12 +134,9 @@ void Max7219_LED_Off(const uint8_t col, const uint8_t row) { |
|
|
|
|
|
|
|
void Max7219_LED_Toggle(const uint8_t col, const uint8_t row) { |
|
|
|
if (row > 7 || col > 7) { |
|
|
|
int r,c; |
|
|
|
r = row; |
|
|
|
c = col; |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_LED_Toggle(",r); |
|
|
|
SERIAL_ECHOPAIR(",",c); |
|
|
|
SERIAL_ECHO(")\n"); |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_LED_Toggle(", (int)row); |
|
|
|
SERIAL_ECHOPAIR(",", (int)col); |
|
|
|
SERIAL_ECHOLNPGM(")"); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (TEST(LEDs[row], col)) |
|
|
@ -159,10 +147,8 @@ void Max7219_LED_Toggle(const uint8_t col, const uint8_t row) { |
|
|
|
|
|
|
|
void Max7219_Clear_Column(const uint8_t col) { |
|
|
|
if (col > 7) { |
|
|
|
int c; |
|
|
|
c = col; |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Clear_Column(",c); |
|
|
|
SERIAL_ECHO(")\n"); |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Clear_Column(", (int)col); |
|
|
|
SERIAL_ECHOLNPGM(")"); |
|
|
|
return; |
|
|
|
} |
|
|
|
LEDs[col] = 0; |
|
|
@ -171,10 +157,8 @@ void Max7219_Clear_Column(const uint8_t col) { |
|
|
|
|
|
|
|
void Max7219_Clear_Row(const uint8_t row) { |
|
|
|
if (row > 7) { |
|
|
|
int r; |
|
|
|
r = row; |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Clear_Row(",r); |
|
|
|
SERIAL_ECHO(")\n"); |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Clear_Row(", (int)row); |
|
|
|
SERIAL_ECHOLNPGM(")"); |
|
|
|
return; |
|
|
|
} |
|
|
|
for (uint8_t c = 0; c <= 7; c++) |
|
|
@ -182,13 +166,10 @@ void Max7219_Clear_Row(const uint8_t row) { |
|
|
|
} |
|
|
|
|
|
|
|
void Max7219_Set_Row(const uint8_t row, const uint8_t val) { |
|
|
|
if (row > 7 || val>255) { |
|
|
|
int r, v; |
|
|
|
r = row; |
|
|
|
v = val; |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Set_Row(",r); |
|
|
|
SERIAL_ECHOPAIR(",",v); |
|
|
|
SERIAL_ECHO(")\n"); |
|
|
|
if (row > 7) { |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Set_Row(", (int)row); |
|
|
|
SERIAL_ECHOPAIR(",", (int)val); |
|
|
|
SERIAL_ECHOLNPGM(")"); |
|
|
|
return; |
|
|
|
} |
|
|
|
for (uint8_t b = 0; b <= 7; b++) |
|
|
@ -199,44 +180,34 @@ void Max7219_Set_Row(const uint8_t row, const uint8_t val) { |
|
|
|
} |
|
|
|
|
|
|
|
void Max7219_Set_2_Rows(const uint8_t row, const uint16_t val) { |
|
|
|
if (row > 6 || val>65535) { |
|
|
|
int r, v; |
|
|
|
r = row; |
|
|
|
v = val; |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Set_2_Rows(",r); |
|
|
|
SERIAL_ECHOPAIR(",",v); |
|
|
|
SERIAL_ECHO(")\n"); |
|
|
|
if (row > 6) { |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Set_2_Rows(", (int)row); |
|
|
|
SERIAL_ECHOPAIR(",", (int)val); |
|
|
|
SERIAL_ECHOLNPGM(")"); |
|
|
|
return; |
|
|
|
} |
|
|
|
Max7219_Set_Row(row+1, (val & 0xff00) >> 8 ); |
|
|
|
Max7219_Set_Row(row+0, (val & 0xff)); |
|
|
|
Max7219_Set_Row(row + 1, (val >> 8) & 0xFF); |
|
|
|
Max7219_Set_Row(row + 0, (val ) & 0xFF); |
|
|
|
} |
|
|
|
|
|
|
|
void Max7219_Set_4_Rows(const uint8_t row, const uint32_t val) { |
|
|
|
if (row > 4 ) { |
|
|
|
int r; |
|
|
|
long v; |
|
|
|
r = row; |
|
|
|
v = val; |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Set_4_Rows(",r); |
|
|
|
SERIAL_ECHOPAIR(",",v); |
|
|
|
SERIAL_ECHO(")\n"); |
|
|
|
if (row > 4) { |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Set_4_Rows(", (int)row); |
|
|
|
SERIAL_ECHOPAIR(",", (long)val); |
|
|
|
SERIAL_ECHOLNPGM(")"); |
|
|
|
return; |
|
|
|
} |
|
|
|
Max7219_Set_Row(row+3, (val & 0xff000000) >> 24); |
|
|
|
Max7219_Set_Row(row+2, (val & 0xff0000) >> 16); |
|
|
|
Max7219_Set_Row(row+1, (val & 0xff00) >> 8); |
|
|
|
Max7219_Set_Row(row+0, (val & 0xff)); |
|
|
|
Max7219_Set_Row(row + 3, (val >> 24) & 0xFF); |
|
|
|
Max7219_Set_Row(row + 2, (val >> 16) & 0xFF); |
|
|
|
Max7219_Set_Row(row + 1, (val >> 8) & 0xFF); |
|
|
|
Max7219_Set_Row(row + 0, (val ) & 0xFF); |
|
|
|
} |
|
|
|
|
|
|
|
void Max7219_Set_Column(const uint8_t col, const uint8_t val) { |
|
|
|
if (val > 255 || col > 7) { |
|
|
|
int v,c; |
|
|
|
v = val; |
|
|
|
c = col; |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Column(",c); |
|
|
|
SERIAL_ECHOPAIR(",",v); |
|
|
|
SERIAL_ECHO(")\n"); |
|
|
|
if (col > 7) { |
|
|
|
SERIAL_ECHOPAIR("??? Max7219_Column(", (int)col); |
|
|
|
SERIAL_ECHOPAIR(",", (int)val); |
|
|
|
SERIAL_ECHOLNPGM(")"); |
|
|
|
return; |
|
|
|
} |
|
|
|
LEDs[col] = val; |
|
|
@ -304,12 +275,10 @@ void Max7219_idle_tasks() { |
|
|
|
#if MAX7219_DEBUG_STEPPER_HEAD || MAX7219_DEBUG_STEPPER_TAIL || MAX7219_DEBUG_STEPPER_QUEUE |
|
|
|
CRITICAL_SECTION_START |
|
|
|
#if MAX7219_DEBUG_STEPPER_HEAD || MAX7219_DEBUG_STEPPER_QUEUE |
|
|
|
uint8_t head; |
|
|
|
head = planner.block_buffer_head; |
|
|
|
const uint8_t head = planner.block_buffer_head; |
|
|
|
#endif |
|
|
|
#if MAX7219_DEBUG_STEPPER_TAIL || MAX7219_DEBUG_STEPPER_QUEUE |
|
|
|
uint8_t tail; |
|
|
|
tail = planner.block_buffer_tail; |
|
|
|
const uint8_t tail = planner.block_buffer_tail; |
|
|
|
#endif |
|
|
|
CRITICAL_SECTION_END |
|
|
|
#endif |
|
|
@ -323,34 +292,34 @@ void Max7219_idle_tasks() { |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef MAX7219_DEBUG_STEPPER_HEAD |
|
|
|
static int16_t last_head_cnt=0; |
|
|
|
static int16_t last_head_cnt = 0; |
|
|
|
if (last_head_cnt != head) { |
|
|
|
if (last_head_cnt < 8) |
|
|
|
Max7219_LED_Off( last_head_cnt, MAX7219_DEBUG_STEPPER_HEAD); |
|
|
|
Max7219_LED_Off(last_head_cnt, MAX7219_DEBUG_STEPPER_HEAD); |
|
|
|
else |
|
|
|
Max7219_LED_Off( last_head_cnt-8, MAX7219_DEBUG_STEPPER_HEAD+1); |
|
|
|
Max7219_LED_Off(last_head_cnt - 8, MAX7219_DEBUG_STEPPER_HEAD + 1); |
|
|
|
|
|
|
|
last_head_cnt = head; |
|
|
|
if (head < 8) |
|
|
|
Max7219_LED_On(head, MAX7219_DEBUG_STEPPER_HEAD); |
|
|
|
else |
|
|
|
Max7219_LED_On(head-8, MAX7219_DEBUG_STEPPER_HEAD+1); |
|
|
|
Max7219_LED_On(head - 8, MAX7219_DEBUG_STEPPER_HEAD + 1); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef MAX7219_DEBUG_STEPPER_TAIL |
|
|
|
static int16_t last_tail_cnt=0; |
|
|
|
static int16_t last_tail_cnt = 0; |
|
|
|
if (last_tail_cnt != tail) { |
|
|
|
if (last_tail_cnt < 8) |
|
|
|
Max7219_LED_Off( last_tail_cnt, MAX7219_DEBUG_STEPPER_TAIL); |
|
|
|
Max7219_LED_Off(last_tail_cnt, MAX7219_DEBUG_STEPPER_TAIL); |
|
|
|
else |
|
|
|
Max7219_LED_Off( last_tail_cnt-8, MAX7219_DEBUG_STEPPER_TAIL+1); |
|
|
|
Max7219_LED_Off(last_tail_cnt - 8, MAX7219_DEBUG_STEPPER_TAIL + 1); |
|
|
|
|
|
|
|
last_tail_cnt = tail; |
|
|
|
if (tail < 8) |
|
|
|
Max7219_LED_On(tail, MAX7219_DEBUG_STEPPER_TAIL); |
|
|
|
else |
|
|
|
Max7219_LED_On(tail-8, MAX7219_DEBUG_STEPPER_TAIL+1); |
|
|
|
Max7219_LED_On(tail - 8, MAX7219_DEBUG_STEPPER_TAIL + 1); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
@ -367,10 +336,10 @@ void Max7219_idle_tasks() { |
|
|
|
en = max(current_depth, last_depth); |
|
|
|
if (current_depth < last_depth) |
|
|
|
for (uint8_t i = st; i <= en; i++) // clear the highest order LEDs
|
|
|
|
Max7219_LED_Off(i/2, MAX7219_DEBUG_STEPPER_QUEUE + (i & 1)); |
|
|
|
Max7219_LED_Off(i / 2, MAX7219_DEBUG_STEPPER_QUEUE + (i & 1)); |
|
|
|
else |
|
|
|
for (uint8_t i = st; i <= en; i++) // set the LEDs to current depth
|
|
|
|
Max7219_LED_On(i/2, MAX7219_DEBUG_STEPPER_QUEUE + (i & 1)); |
|
|
|
Max7219_LED_On(i / 2, MAX7219_DEBUG_STEPPER_QUEUE + (i & 1)); |
|
|
|
|
|
|
|
last_depth = current_depth; |
|
|
|
} |
|
|
|