nat_ptr_t **map = (nat_ptr_t**)LayerIndex[ cachedLayer ].triggerMap;
const Layer *layer = &LayerIndex[ cachedLayer ];
- return map[ scanCode - layer->first ];
+ // Cache trigger list before attempting to expire latch
+ nat_ptr_t *trigger_list = map[ scanCode - layer->first ];
+
+ // Check if latch has been pressed for this layer
+ uint8_t latch = LayerState[ cachedLayer ] & 0x02;
+ if ( latch && latch_expire )
+ {
+ Macro_layerState( 0, 0, cachedLayer, 0x02 );
+#if defined(ConnectEnabled_define) && defined(LCDEnabled_define)
+ // Evaluate the layerStack capability if available (LCD + Interconnect)
+ extern void LCD_layerStack_capability( uint8_t state, uint8_t stateType, uint8_t *args );
+ LCD_layerStack_capability( 0, 0, 0 );
+#endif
+ }
+
+ return trigger_list;
}
// If no trigger macro is defined at the given layer, fallthrough to the next layer
printHex( argSet[2] );
print( "..." NL );
+ // Make sure this isn't the reload capability
+ // If it is, and the remote reflash define is not set, ignore
+ if ( flashModeEnabled_define == 0 ) for ( uint32_t cap = 0; cap < CapabilitiesNum; cap++ )
+ {
+ if ( CapabilitiesList[ cap ].func == (const void*)Output_flashMode_capability )
+ {
+ print( NL );
+ warn_print("flashModeEnabled not set, cancelling firmware reload...");
+ info_msg("Set flashModeEnabled to 1 in your kll configuration.");
+ return;
+ }
+ }
+
void (*capability)(uint8_t, uint8_t, uint8_t*) = (void(*)(uint8_t, uint8_t, uint8_t*))(CapabilitiesList[ cap ].func);
capability( argSet[0], argSet[1], &argSet[2] );
}