P10 MOD 4 Custom Mapper Help

I just got a new style P10 32x16 board in that did not match any of the existing maps,

Attached is an image of my reverse engineering and the resulting map (if i am doing it correctly) is

const PanelMappingEntry panelMap32x16Mod4V6[] =
{
	{ 0, 7, -8 },
	{ 0, 23, -8 },
	{ 0, 39, -8 },
	{ 0, 55, -8 },
	{ 1, 71, -8 },
	{ 1, 87, -8 },
	{ 1, 103, -8 },
	{ 1, 119, -8 },
	{ 4, 8, 8 },
	{ 4, 24, 8 },
	{ 4, 40, 8 },
	{ 4, 56, 8 },
	{ 5, 72, 8 },
	{ 5, 88, 8 },
	{ 5, 104, 8 },
	{ 5, 120, 8 },
	{ 0, 0, 0 } // last entry is all zeros
};

however, when I try this map it faults. I think I have everything else setup correctly, because if I comment out the odd number rows, I get a display (but it’s missing rows)

For example this “works” in that i get a display, but i am missing some rows, and some rows are out of place.

const PanelMappingEntry panelMap32x16Mod4V6[] =
{
   { 0, 7, -8 },
   { 0, 23, -8 },
   { 0, 39, -8 },
   { 0, 55, -8 },
//	{ 1, 71, -8 },
//	{ 1, 87, -8 },
//	{ 1, 103, -8 },
//	{ 1, 119, -8 },
   { 4, 8, 8 },
   { 4, 24, 8 },
   { 4, 40, 8 },
   { 4, 56, 8 },
//	{ 5, 72, 8 },
//	{ 5, 88, 8 },
//	{ 5, 104, 8 },
//	{ 5, 120, 8 },
   { 0, 0, 0 } // last entry is all zeros
};

Am I converting the mapping correctly? Anything else I should be looking at? I don’t see any other mappings with odd number rows, so it makes me think I am missing something.

What is the scan of your panel? Is it a 32x16 s4 panel or s2 panel?
Mote that your pixel map is for 32x16 s2 panel

It is a /4 scan based on the markings: YS-P10-320X160-4S-2735-V2 D2024 04-P10-1418-200, the 4S

Fresh eyes this morning, I figured it out. This panel works with the same mapping as v4, but DOES NOT use alternate addressing, so V6 is defined with the v4 map, but not included in PANEL_USES_ALT_ADDRESSING_MODE

here are the relevant changes

const PanelMappingEntry panelMap32x16Mod4V4[] =
{
	{ 0, 7, -8 },
	{ 0, 23, -8 },
	{ 0, 39, -8 },
	{ 0, 55, -8 },
	{ 4, 8, 8 },
	{ 4, 24, 8 },
	{ 4, 40, 8 },
	{ 4, 56, 8 }, 
	{ 0, 0, 0 }   // last entry is all zeros
};

however, it DOES NOT use alternate addressing.

working code / MatrixPanelMaps.cpp:

const PanelMappingEntry * getMultiRowRefreshPanelMap(unsigned char panelType) {
	switch (panelType) {
	case SMARTMATRIX_HUB75_64ROW_64COL_MOD16SCAN:
		return panelMap64x64Mod16;
	case SMARTMATRIX_HUB75_32ROW_64COL_MOD8SCAN:
		return panelMap64x32Mod8;
	case SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN:
		return panelMap32x16Mod2;
	case SMARTMATRIX_HUB12_16ROW_32COL_MOD4SCAN:
		return panelMapHub12_32x16Mod4;
	case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN:
		return panelMap32x16Mod4;
	case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V2:
		return panelMap32x16Mod4V2;
	case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3:
		return panelMap32x16Mod4V3;
	case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4:		
		return panelMap32x16Mod4V4;
	case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V5:
		return panelMap32x16Mod4V5;	
	case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V6:
		return panelMap32x16Mod4V4;  //V6 uses the same map as V4, but does not use alternate addressing				
	case SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2:
		return panelMap32x16Mod2V2;
	default:
		return defaultPanelMap;            
	}
}

MatrixCommonHub75.h

#ifndef SmartMatrixCommonHUB75_h
#define SmartMatrixCommonHUB75_h

#define DEFAULT_PANEL_WIDTH_FOR_LINEAR_PANELS       32
#define HUB75_RGB_COLOR_CHANNELS_IN_PARALLEL        2

#define SM_PANELTYPE_HUB75_32ROW_MOD16SCAN          0
#define SM_PANELTYPE_HUB75_16ROW_MOD8SCAN           1
#define SM_PANELTYPE_HUB75_64ROW_MOD32SCAN          2
#define SM_PANELTYPE_HUB75_4ROW_MOD2SCAN            3
#define SM_PANELTYPE_HUB75_8ROW_MOD4SCAN            4
#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD2SCAN     5
#define SM_PANELTYPE_HUB12_16ROW_32COL_MOD4SCAN     6   // HUB12 panels have limited support, the height needs to be doubled to account for the fact they only use one RGB channel, though SmartMatrix Library will fill the second channel
#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN     7
#define SM_PANELTYPE_HUB75_2ROW_MOD1SCAN            8
#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V2  9
#define SM_PANELTYPE_HUB75_32ROW_64COL_MOD8SCAN     10
#define SM_PANELTYPE_HUB75_64ROW_64COL_MOD16SCAN    11
#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V3  12
#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V4  13 
#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD2SCAN_V2  14
#define SM_PANELTYPE_HUB75_4ROW_MOD2SCAN_ALT_ADDX   15
#define SM_PANELTYPE_HUB75_8ROW_MOD4SCAN_ALT_ADDX   16
#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V5  17  // Uses ALT ADDX BOARD MARKINGS: P10-4S-3535-3216-JA1 2017.09.18
#define SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V6  18  // 1/23/2025 YS-P10-320X160-4S-2735-V2 D2024 04-P10-1418-200

#define SMARTMATRIX_HUB75_32ROW_MOD16SCAN           SM_PANELTYPE_HUB75_32ROW_MOD16SCAN        
#define SMARTMATRIX_HUB75_16ROW_MOD8SCAN            SM_PANELTYPE_HUB75_16ROW_MOD8SCAN         
#define SMARTMATRIX_HUB75_64ROW_MOD32SCAN           SM_PANELTYPE_HUB75_64ROW_MOD32SCAN        
#define SMARTMATRIX_HUB75_4ROW_MOD2SCAN             SM_PANELTYPE_HUB75_4ROW_MOD2SCAN          
#define SMARTMATRIX_HUB75_8ROW_MOD4SCAN             SM_PANELTYPE_HUB75_8ROW_MOD4SCAN          
#define SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN      SM_PANELTYPE_HUB75_16ROW_32COL_MOD2SCAN   
#define SMARTMATRIX_HUB12_16ROW_32COL_MOD4SCAN      SM_PANELTYPE_HUB12_16ROW_32COL_MOD4SCAN   
#define SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN      SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN   
#define SMARTMATRIX_HUB75_2ROW_MOD1SCAN             SM_PANELTYPE_HUB75_2ROW_MOD1SCAN          
#define SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V2   SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V2

#define SMARTMATRIX_HUB75_32ROW_64COL_MOD8SCAN      SM_PANELTYPE_HUB75_32ROW_64COL_MOD8SCAN
#define SMARTMATRIX_HUB75_64ROW_64COL_MOD16SCAN     SM_PANELTYPE_HUB75_64ROW_64COL_MOD16SCAN
#define SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3   SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V3
#define SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4   SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V4
#define SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2   SM_PANELTYPE_HUB75_16ROW_32COL_MOD2SCAN_V2
#define SMARTMATRIX_HUB75_4ROW_MOD2SCAN_ALT_ADDX    SM_PANELTYPE_HUB75_4ROW_MOD2SCAN_ALT_ADDX
#define SMARTMATRIX_HUB75_8ROW_MOD4SCAN_ALT_ADDX    SM_PANELTYPE_HUB75_8ROW_MOD4SCAN_ALT_ADDX
#define SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V5   SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V5
#define SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V6   SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V6


#define CONVERT_PANELTYPE_TO_MATRIXPANELHEIGHT(x)   ((x == SMARTMATRIX_HUB75_32ROW_MOD16SCAN ? 32 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_64ROW_64COL_MOD16SCAN ? 64 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_MOD8SCAN ? 16 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN ? 16 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_4ROW_MOD2SCAN ? 4 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_8ROW_MOD4SCAN ? 8 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_4ROW_MOD2SCAN_ALT_ADDX ? 4 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_8ROW_MOD4SCAN_ALT_ADDX ? 8 : 0) | \
                                                    (x == SMARTMATRIX_HUB12_16ROW_32COL_MOD4SCAN ? 16*2 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_32ROW_64COL_MOD8SCAN ? 32 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN ? 16 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V2 ? 16 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3 ? 16 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4 ? 16 : 0) | \
	                                                (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V5 ? 16 : 0) | \
	                                                (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V6 ? 16 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2 ? 16 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_2ROW_MOD1SCAN ? 2 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_64ROW_MOD32SCAN ? 64 : 0))

#define CONVERT_PANELTYPE_TO_MATRIXROWPAIROFFSET(x) ((x == SMARTMATRIX_HUB75_32ROW_MOD16SCAN ? 16 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_64ROW_64COL_MOD16SCAN ? 32 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_MOD8SCAN ? 8 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN ? 8 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_4ROW_MOD2SCAN ? 2 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_8ROW_MOD4SCAN ? 4 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_4ROW_MOD2SCAN_ALT_ADDX ? 2 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_8ROW_MOD4SCAN_ALT_ADDX ? 4 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_32ROW_64COL_MOD8SCAN ? 16 : 0) | \
                                                    (x == SMARTMATRIX_HUB12_16ROW_32COL_MOD4SCAN ? 8*2 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN ? 8 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V2 ? 8 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3 ? 8 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4 ? 8 : 0) | \
	                                                (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V5 ? 8 : 0) | \
	                                                (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V6 ? 8 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2 ? 8 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_2ROW_MOD1SCAN ? 1 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_64ROW_MOD32SCAN ? 32 : 0))

#define CONVERT_PANELTYPE_TO_MATRIXSCANMOD(x)  ((x == SMARTMATRIX_HUB75_32ROW_MOD16SCAN ? 16 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_64ROW_64COL_MOD16SCAN ? 16 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_MOD8SCAN ? 8 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN ? 2 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_4ROW_MOD2SCAN ? 2 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_8ROW_MOD4SCAN ? 4 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_4ROW_MOD2SCAN_ALT_ADDX ? 2 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_8ROW_MOD4SCAN_ALT_ADDX ? 4 : 0) | \
                                                    (x == SMARTMATRIX_HUB12_16ROW_32COL_MOD4SCAN ? 4 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN ? 4 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V2 ? 4 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3 ? 4 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4 ? 4 : 0) | \
	                                                (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V5 ? 4 : 0) | \
	                                                (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V6 ? 4 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2 ? 2 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_32ROW_64COL_MOD8SCAN ? 8 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_2ROW_MOD1SCAN ? 1 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_64ROW_MOD32SCAN ? 32 : 0))

#define CONVERT_PANELTYPE_TO_MATRIXPANELWIDTH(x)  ((x == SMARTMATRIX_HUB75_32ROW_MOD16SCAN ? DEFAULT_PANEL_WIDTH_FOR_LINEAR_PANELS : 0) | \
                                                    (x == SMARTMATRIX_HUB75_64ROW_64COL_MOD16SCAN ? 64 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_MOD8SCAN ? DEFAULT_PANEL_WIDTH_FOR_LINEAR_PANELS : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN ? 32 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_4ROW_MOD2SCAN ? DEFAULT_PANEL_WIDTH_FOR_LINEAR_PANELS : 0) | \
                                                    (x == SMARTMATRIX_HUB75_8ROW_MOD4SCAN ? DEFAULT_PANEL_WIDTH_FOR_LINEAR_PANELS : 0) | \
                                                    (x == SMARTMATRIX_HUB75_4ROW_MOD2SCAN_ALT_ADDX ? DEFAULT_PANEL_WIDTH_FOR_LINEAR_PANELS : 0) | \
                                                    (x == SMARTMATRIX_HUB75_8ROW_MOD4SCAN_ALT_ADDX ? DEFAULT_PANEL_WIDTH_FOR_LINEAR_PANELS : 0) | \
                                                    (x == SMARTMATRIX_HUB12_16ROW_32COL_MOD4SCAN ? 32 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_32ROW_64COL_MOD8SCAN ? 64 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN ? 32 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V2 ? 32 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3 ? 32 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4 ? 32 : 0) | \
	                                                (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V5 ? 32 : 0) | \
	                                                (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V6 ? 32 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2 ? 32 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_2ROW_MOD1SCAN ? DEFAULT_PANEL_WIDTH_FOR_LINEAR_PANELS : 0) | \
                                                    (x == SMARTMATRIX_HUB75_64ROW_MOD32SCAN ? DEFAULT_PANEL_WIDTH_FOR_LINEAR_PANELS : 0))

// 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
#define PANEL_USES_ALT_ADDRESSING_MODE(x)           ((x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4 ? 1 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2 ? 1 : 0) | \
	                                                (x == SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V5 ? 1 : 0) | \	                                                
                                                    (x == SMARTMATRIX_HUB75_4ROW_MOD2SCAN_ALT_ADDX ? 1 : 0) | \
                                                    (x == SMARTMATRIX_HUB75_8ROW_MOD4SCAN_ALT_ADDX ? 1 : 0))

#define MATRIX_PANEL_HEIGHT (CONVERT_PANELTYPE_TO_MATRIXPANELHEIGHT(panelType))
#define MATRIX_STACK_HEIGHT (matrixHeight / MATRIX_PANEL_HEIGHT)

#define COLOR_CHANNELS_PER_PIXEL        3
#define LATCHES_PER_ROW (refreshDepth/COLOR_CHANNELS_PER_PIXEL)
#define COLOR_DEPTH_BITS (refreshDepth/COLOR_CHANNELS_PER_PIXEL)
#define MATRIX_SCAN_MOD (CONVERT_PANELTYPE_TO_MATRIXSCANMOD(panelType))
#define COLS_PER_PANEL (CONVERT_PANELTYPE_TO_MATRIXPANELWIDTH(panelType))
#define PHYSICAL_ROWS_PER_REFRESH_ROW (MATRIX_PANEL_HEIGHT / MATRIX_SCAN_MOD / HUB75_RGB_COLOR_CHANNELS_IN_PARALLEL)
#define ROW_PAIR_OFFSET (CONVERT_PANELTYPE_TO_MATRIXROWPAIROFFSET(panelType))
#define MULTI_ROW_REFRESH_REQUIRED (PHYSICAL_ROWS_PER_REFRESH_ROW > 1)

#define PIXELS_PER_LATCH    ((matrixWidth * matrixHeight) / MATRIX_PANEL_HEIGHT * PHYSICAL_ROWS_PER_REFRESH_ROW)

#define SM_HUB75_OPTIONS_NONE                       0
#define SM_HUB75_OPTIONS_C_SHAPE_STACKING           (1 << 0)
#define SM_HUB75_OPTIONS_BOTTOM_TO_TOP_STACKING     (1 << 1)
#define SM_HUB75_OPTIONS_HUB12_MODE                 (1 << 2)
#define SM_HUB75_OPTIONS_MATRIXCALC_LOWPRIORITY     (1 << 3)
#define SM_HUB75_OPTIONS_ESP32_INVERT_CLK           (1 << 4)
#define SM_HUB75_OPTIONS_ESP32_CALC_TASK_CORE_1     (1 << 5)
#define SM_HUB75_OPTIONS_FM6126A_RESET_AT_START     (1 << 6)
#define SM_HUB75_OPTIONS_T4_CLK_PIN_ALT             (1 << 7)

// old naming convention kept for compatibility
#define SMARTMATRIX_OPTIONS_NONE                    SM_HUB75_OPTIONS_NONE                   
#define SMARTMATRIX_OPTIONS_C_SHAPE_STACKING        SM_HUB75_OPTIONS_C_SHAPE_STACKING       
#define SMARTMATRIX_OPTIONS_BOTTOM_TO_TOP_STACKING  SM_HUB75_OPTIONS_BOTTOM_TO_TOP_STACKING 
#define SMARTMATRIX_OPTIONS_HUB12_MODE              SM_HUB75_OPTIONS_HUB12_MODE             
#define SMARTMATRIX_OPTIONS_MATRIXCALC_LOWPRIORITY  SM_HUB75_OPTIONS_MATRIXCALC_LOWPRIORITY 
#define SMARTMATRIX_OPTIONS_ESP32_INVERT_CLK        SM_HUB75_OPTIONS_ESP32_INVERT_CLK       
#define SMARTMATRIX_OPTIONS_ESP32_CALC_TASK_CORE_1  SM_HUB75_OPTIONS_ESP32_CALC_TASK_CORE_1 
#define SMARTMATRIX_OPTIONS_FM6126A_RESET_AT_START  SM_HUB75_OPTIONS_FM6126A_RESET_AT_START 
#define SMARTMATRIX_OPTIONS_T4_CLK_PIN_ALT          SM_HUB75_OPTIONS_T4_CLK_PIN_ALT         


// defines data bit order from bit 0-7, four times to fit in uint32_t
#define PACKED_HUB75_WORD_ORDER p0r1:1, p0g1:1, p0b1:1, p0r2:1, p0g2:1, p0b2:1, p1r1:1, p1g1:1, \
    p1b1:1, p1r2:1, p1g2:1, p1b2:1, p2r1:1, p2g1:1, p2b1:1, p2r2:1, \
    p2g2:1, p2b2:1, p3r1:1, p3g1:1, p3b1:1, p3r2:1, p3g2:1, p3b2:1 
    
#endif

What’s “alternate addressing” means?

From the MultiRowRefreshMapping.ino file

 * Panels Using Alt Addressing:
 * If you see a column of pixels (2 or 4) lighting up, instead of a single pixel, your panel likely uses an alt addressing mode (where instead
 * of the address being output binary encoded over the address lines, each address line corresponds to a row, and you ground a single
 * address line to select a row).  This has only been seen on /2 and /4 panels.  Choose a panel type with alt addressing,
 * e.g. SMARTMATRIX_HUB75_4ROW_MOD2SCAN_ALT_ADDX for reverse engineering, and you should see only one pixel light up instead of a column at a time.
 * If your panel uses alt addressing, make sure you follow the step for PANEL_USES_ALT_ADDRESSING_MODE when you add a new map.

So SM_PANELTYPE_HUB75_16ROW_32COL_MOD4SCAN_V4 is setup to use alternate addressing, which is why it did not work when I tried it with my panel. After doing the map manually I noticed it was very close, but I did not fully understand how to take my observed map and convert it to the array map needed by the code which is what i was struggling with and led me to post.

Since V4 was so close, and my map was causing faults I decided to mimic V4 and tweak things. When I used the V4 map, but did not include my V6 in the alternate addressing list PANEL_USES_ALT_ADDRESSING_MODE it worked perfectly. In hind site this makes perfect sense since I did not see double pixels when doing the mapping test, so I should have immediately kept it out of the alt addressing list… oh well, got there!

but finally it works and it is great :slight_smile:

1 Like