Skip to content

Commit 8948bbe

Browse files
author
Louis Beaudoin
committed
Add SM_PANELTYPE_HUB75_16ROW_32COL_MOD2SCAN_V2 support for Teensy 3/4, ready for testing
- Added PANEL_USES_ALT_ADDRESSING_MODE as there is more than one panel type using this new method
1 parent 2c264a0 commit 8948bbe

File tree

4 files changed

+55
-11
lines changed

4 files changed

+55
-11
lines changed

src/MatrixCommonHub75.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
#define SM_PANELTYPE_HUB75_64ROW_64COL_MOD16SCAN 11
4242
#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V3 12
4343
#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V4 13 // Applied patch from https://community.pixelmatix.com/t/mapping-assistance-32x16-p10/889/23 not fully integrated (ESP32 only)
44+
#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD2SCAN_V2 14
4445

4546
#define SMARTMATRIX_HUB75_32ROW_MOD16SCAN SM_PANELTYPE_HUB75_32ROW_MOD16SCAN
4647
#define SMARTMATRIX_HUB75_16ROW_MOD8SCAN SM_PANELTYPE_HUB75_16ROW_MOD8SCAN
@@ -56,6 +57,7 @@
5657
#define SMARTMATRIX_HUB75_64ROW_64COL_MOD16SCAN SM_PANELTYPE_HUB75_64ROW_64COL_MOD16SCAN
5758
#define SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3 SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V3
5859
#define SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4 SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V4
60+
#define SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2 SM_PANELTYPE_HUB75_16ROW_32COL_MOD2SCAN_V2
5961

6062
#define CONVERT_PANELTYPE_TO_MATRIXPANELHEIGHT(x) ((x == SMARTMATRIX_HUB75_32ROW_MOD16SCAN ? 32 : 0) | \
6163
(x == SMARTMATRIX_HUB75_64ROW_64COL_MOD16SCAN ? 64 : 0) | \
@@ -69,6 +71,7 @@
6971
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V2 ? 16 : 0) | \
7072
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3 ? 16 : 0) | \
7173
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4 ? 16 : 0) | \
74+
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2 ? 16 : 0) | \
7275
(x == SMARTMATRIX_HUB75_2ROW_MOD1SCAN ? 2 : 0) | \
7376
(x == SMARTMATRIX_HUB75_64ROW_MOD32SCAN ? 64 : 0))
7477

@@ -84,6 +87,7 @@
8487
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V2 ? 8 : 0) | \
8588
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3 ? 8 : 0) | \
8689
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4 ? 8 : 0) | \
90+
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2 ? 8 : 0) | \
8791
(x == SMARTMATRIX_HUB75_2ROW_MOD1SCAN ? 1 : 0) | \
8892
(x == SMARTMATRIX_HUB75_64ROW_MOD32SCAN ? 32 : 0))
8993

@@ -98,6 +102,7 @@
98102
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V2 ? 4 : 0) | \
99103
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3 ? 4 : 0) | \
100104
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4 ? 4 : 0) | \
105+
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2 ? 2 : 0) | \
101106
(x == SMARTMATRIX_HUB75_32ROW_64COL_MOD8SCAN ? 8 : 0) | \
102107
(x == SMARTMATRIX_HUB75_2ROW_MOD1SCAN ? 1 : 0) | \
103108
(x == SMARTMATRIX_HUB75_64ROW_MOD32SCAN ? 32 : 0))
@@ -114,9 +119,14 @@
114119
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V2 ? 32 : 0) | \
115120
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3 ? 32 : 0) | \
116121
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4 ? 32 : 0) | \
122+
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2 ? 32 : 0) | \
117123
(x == SMARTMATRIX_HUB75_2ROW_MOD1SCAN ? DEFAULT_PANEL_WIDTH_FOR_LINEAR_PANELS : 0) | \
118124
(x == SMARTMATRIX_HUB75_64ROW_MOD32SCAN ? DEFAULT_PANEL_WIDTH_FOR_LINEAR_PANELS : 0))
119125

126+
// Some panels (usually MOD2/MOD4 panels) use an alt address mode and ground one address line per row, instead of using all the bits. Identify those panels here. Thanks to Eric: https://community.pixelmatix.com/t/mapping-assistance-32x16-p10/889/23
127+
#define PANEL_USES_ALT_ADDRESSING_MODE(x) ((x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4 ? 1 : 0) | \
128+
(x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2 ? 1 : 0))
129+
120130
#define MATRIX_PANEL_HEIGHT (CONVERT_PANELTYPE_TO_MATRIXPANELHEIGHT(panelType))
121131
#define MATRIX_STACK_HEIGHT (matrixHeight / MATRIX_PANEL_HEIGHT)
122132

src/MatrixPanelMaps.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,27 @@ const PanelMappingEntry panelMap32x16Mod4V4[] =
140140
{0, 0, 0} // last entry is all zeros
141141
};
142142

143+
const PanelMappingEntry panelMap32x16Mod2V2[] =
144+
{
145+
{0, 31, -8},
146+
{0, 63, -8},
147+
{0, 95, -8},
148+
{0, 127, -8},
149+
{2, 16, 8},
150+
{2, 48, 8},
151+
{2, 80, 8},
152+
{2, 112, 8},
153+
{4, 15, -8},
154+
{4, 47, -8},
155+
{4, 79, -8},
156+
{4, 111, -8},
157+
{6, 0, 8},
158+
{6, 32, 8},
159+
{6, 64, 8},
160+
{6, 96, 8},
161+
{0, 0, 0} // last entry is all zeros
162+
};
163+
143164
const PanelMappingEntry * getMultiRowRefreshPanelMap(unsigned char panelType) {
144165
switch(panelType) {
145166
case SMARTMATRIX_HUB75_64ROW_64COL_MOD16SCAN:
@@ -158,6 +179,8 @@ const PanelMappingEntry * getMultiRowRefreshPanelMap(unsigned char panelType) {
158179
return panelMap32x16Mod4V3;
159180
case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4:
160181
return panelMap32x16Mod4V4;
182+
case SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2:
183+
return panelMap32x16Mod2V2;
161184
default:
162185
return defaultPanelMap;
163186
}

src/MatrixTeensy3Hub75Calc_Impl.h

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -536,16 +536,23 @@ INLINE void SmartMatrixHub75Calc<refreshDepth, matrixWidth, matrixHeight, panelT
536536
}
537537
}
538538

539+
unsigned int addressbits;
540+
541+
if(PANEL_USES_ALT_ADDRESSING_MODE(panelType))
542+
addressbits = ~(0x01 << currentRow);
543+
else
544+
addressbits = currentRow;
545+
539546
for (int bitindex = 0; bitindex < COLOR_DEPTH_BITS; bitindex++)
540-
currentRowDataPtr->rowbits[bitindex].rowAddress = currentRow;
547+
currentRowDataPtr->rowbits[bitindex].rowAddress = addressbits;
541548

542549
#ifdef ADDX_UPDATE_ON_DATA_PINS
543550
o0.word = 0x00000000;
544-
o0.hub75_addx0 = (currentRow & 0x01) ? 1 : 0;
545-
o0.hub75_addx1 = (currentRow & 0x02) ? 1 : 0;
546-
o0.hub75_addx2 = (currentRow & 0x04) ? 1 : 0;
547-
o0.hub75_addx3 = (currentRow & 0x08) ? 1 : 0;
548-
o0.hub75_addx4 = (currentRow & 0x10) ? 1 : 0;
551+
o0.hub75_addx0 = (addressbits & 0x01) ? 1 : 0;
552+
o0.hub75_addx1 = (addressbits & 0x02) ? 1 : 0;
553+
o0.hub75_addx2 = (addressbits & 0x04) ? 1 : 0;
554+
o0.hub75_addx3 = (addressbits & 0x08) ? 1 : 0;
555+
o0.hub75_addx4 = (addressbits & 0x10) ? 1 : 0;
549556

550557
for(int bitindex=0; bitindex<COLOR_DEPTH_BITS; bitindex++) {
551558
currentRowDataPtr->rowbits[bitindex].rowAddress = o0.word;

src/MatrixTeensy4Hub75Calc_Impl.h

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -533,12 +533,16 @@ FASTRUN INLINE void SmartMatrixHub75Calc<refreshDepth, matrixWidth, matrixHeight
533533
advanceMultiRowRefreshMapToNextPixelGroup();
534534
}
535535
}
536-
// record the address in the first rowAddress field in the rowBitStruct (other rowAddress fields are unused)
537-
currentRowDataPtr->rowbits[0].rowAddress = currentRow;
538536

539-
// Applied patch from https://community.pixelmatix.com/t/mapping-assistance-32x16-p10/889/23 not fully integrated (ESP32 only)
540-
if(panelType == SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V4)
541-
currentRowDataPtr->rowbits[0].rowAddress = ~(0x01 << currentRow);
537+
unsigned int addressbits;
538+
539+
if(PANEL_USES_ALT_ADDRESSING_MODE(panelType))
540+
addressbits = ~(0x01 << currentRow);
541+
else
542+
addressbits = currentRow;
543+
544+
// record the address in the first rowAddress field in the rowBitStruct (other rowAddress fields are unused)
545+
currentRowDataPtr->rowbits[0].rowAddress = addressbits;
542546

543547
if(MULTI_ROW_REFRESH_REQUIRED) {
544548
c += numPixelsPerTempRow; // keep track of cumulative number of pixels filled in refresh buffer before this temp buffer

0 commit comments

Comments
 (0)