]> git.donarmstrong.com Git - kiibohd-controller.git/blobdiff - Macro/PartialMap/macro.c
Fixing layer stack evaluation
[kiibohd-controller.git] / Macro / PartialMap / macro.c
index 89444dcfc1e390f0f3ec0753853ba7658cf0a545..7161fbf9e495d92eb9ec5d6c42f50afae355555a 100644 (file)
@@ -374,7 +374,7 @@ nat_ptr_t *Macro_layerLookup( TriggerGuide *guide, uint8_t latch_expire )
        }
 
        // If no trigger macro is defined at the given layer, fallthrough to the next layer
-       for ( uint16_t layerIndex = 0; layerIndex < macroLayerIndexStackSize; layerIndex++ )
+       for ( uint16_t layerIndex = macroLayerIndexStackSize; layerIndex != 0xFFFF; layerIndex-- )
        {
                // Lookup Layer
                const Layer *layer = &LayerIndex[ macroLayerIndexStack[ layerIndex ] ];
@@ -456,7 +456,7 @@ inline void Macro_interconnectAdd( void *trigger_ptr )
                case 0x03:
                        break;
                default:
-                       erro_print("Invalid key state");
+                       erro_msg("Invalid key state - ");
                        error = 1;
                        break;
                }
@@ -464,11 +464,18 @@ inline void Macro_interconnectAdd( void *trigger_ptr )
 
        // Invalid TriggerGuide type
        default:
-               erro_print("Invalid type");
+               erro_msg("Invalid type - ");
                error = 1;
                break;
        }
 
+       // Check if ScanCode is out of range
+       if ( trigger->scanCode > MaxScanCode )
+       {
+               warn_msg("ScanCode is out of range/not defined - ");
+               error = 1;
+       }
+
        // Display TriggerGuide
        if ( error )
        {
@@ -529,6 +536,15 @@ inline void Macro_keyState( uint8_t scanCode, uint8_t state )
        case 0x01: // Pressed
        case 0x02: // Held
        case 0x03: // Released
+               // Check if ScanCode is out of range
+               if ( scanCode > MaxScanCode )
+               {
+                       warn_msg("ScanCode is out of range/not defined: ");
+                       printHex( scanCode );
+                       print( NL );
+                       return;
+               }
+
                macroTriggerListBuffer[ macroTriggerListBufferSize ].scanCode = scanCode;
                macroTriggerListBuffer[ macroTriggerListBufferSize ].state    = state;
                macroTriggerListBuffer[ macroTriggerListBufferSize ].type     = 0x00; // Normal key
@@ -549,6 +565,15 @@ inline void Macro_analogState( uint8_t scanCode, uint8_t state )
        // TODO Handle change for interconnect
        if ( state != 0x00 )
        {
+               // Check if ScanCode is out of range
+               if ( scanCode > MaxScanCode )
+               {
+                       warn_msg("ScanCode is out of range/not defined: ");
+                       printHex( scanCode );
+                       print( NL );
+                       return;
+               }
+
                macroTriggerListBuffer[ macroTriggerListBufferSize ].scanCode = scanCode;
                macroTriggerListBuffer[ macroTriggerListBufferSize ].state    = state;
                macroTriggerListBuffer[ macroTriggerListBufferSize ].type     = 0x02; // Analog key
@@ -567,6 +592,9 @@ inline void Macro_ledState( uint8_t ledCode, uint8_t state )
        // TODO Handle change for interconnect
        if ( state != 0x00 )
        {
+               // Check if LedCode is out of range
+               // TODO
+
                macroTriggerListBuffer[ macroTriggerListBufferSize ].scanCode = ledCode;
                macroTriggerListBuffer[ macroTriggerListBufferSize ].state    = state;
                macroTriggerListBuffer[ macroTriggerListBufferSize ].type     = 0x01; // LED key