]> git.donarmstrong.com Git - kiibohd-controller.git/commitdiff
Fixing release state for keys
authorJacob Alexander <jacob.alexander@virtualinstruments.com>
Thu, 11 Sep 2014 03:53:30 +0000 (20:53 -0700)
committerJacob Alexander <jacob.alexander@virtualinstruments.com>
Thu, 11 Sep 2014 03:53:30 +0000 (20:53 -0700)
- Layers were not disabling because function was only called on press/hold
- Disabled layer shift function on key hold
- Fixed the press/hold/release states for other layer capabilities and USB code send

Macro/PartialMap/macro.c
Output/pjrcUSB/output_com.c

index 06c5d410fa08fa5d30d4d1efba2853312e80f68e..072ce8d461a98dfecfb9b5f9d784c3a124180e13 100644 (file)
@@ -202,6 +202,12 @@ void Macro_layerState_capability( uint8_t state, uint8_t stateType, uint8_t *arg
                return;
        }
 
+       // Only use capability on press or release
+       // TODO Analog
+       // XXX This may cause issues, might be better to implement state table here to decide -HaaTa
+       if ( stateType == 0x00 && state == 0x02 ) // Hold condition
+               return;
+
        // Get layer index from arguments
        // Cast pointer to uint8_t to unsigned int then access that memory location
        uint16_t layer = *(uint16_t*)(&args[0]);
@@ -224,6 +230,12 @@ void Macro_layerLatch_capability( uint8_t state, uint8_t stateType, uint8_t *arg
                return;
        }
 
+       // Only use capability on press
+       // TODO Analog
+       // XXX To make sense, this code be on press or release. Or it could even be a sticky shift (why? dunno) -HaaTa
+       if ( stateType == 0x00 && state != 0x01 ) // All normal key conditions except press
+               return;
+
        // Get layer index from arguments
        // Cast pointer to uint8_t to unsigned int then access that memory location
        uint16_t layer = *(uint16_t*)(&args[0]);
@@ -243,6 +255,12 @@ void Macro_layerLock_capability( uint8_t state, uint8_t stateType, uint8_t *args
                return;
        }
 
+       // Only use capability on press
+       // TODO Analog
+       // XXX Could also be on release, but that's sorta dumb -HaaTa
+       if ( stateType == 0x00 && state != 0x01 ) // All normal key conditions except press
+               return;
+
        // Get layer index from arguments
        // Cast pointer to uint8_t to unsigned int then access that memory location
        uint16_t layer = *(uint16_t*)(&args[0]);
@@ -262,6 +280,13 @@ void Macro_layerShift_capability( uint8_t state, uint8_t stateType, uint8_t *arg
                return;
        }
 
+       // Only use capability on press or release
+       // TODO Analog
+       if ( stateType == 0x00 && ( state == 0x00 || state == 0x02 ) ) // Only pass press or release conditions
+               return;
+
+       print("YAY");
+
        // Get layer index from arguments
        // Cast pointer to uint8_t to unsigned int then access that memory location
        uint16_t layer = *(uint16_t*)(&args[0]);
@@ -704,10 +729,10 @@ inline TriggerMacroEval Macro_evalTriggerMacro( unsigned int triggerMacroIndex )
                        return TriggerMacroEval_Remove;
        }
        // Otherwise, just remove the macro on key release
-       // XXX Might cause some issues
+       // One more result has to be called to indicate to the ResultMacro that the key transitioned to the release state
        else if ( overallVote & TriggerMacroVote_Release )
        {
-               return TriggerMacroEval_Remove;
+               return TriggerMacroEval_DoResultAndRemove;
        }
 
        // If this is a short macro, just remove it
index 6336a408655d23f1d3c7793d69d9879bac16ced0..35e0603e36dfa71331e4b63d1e8189ad30011aa2 100644 (file)
@@ -110,6 +110,11 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a
                return;
        }
 
+       // TODO Analog inputs
+       // Only send keypresses if press or hold state
+       if ( stateType == 0x00 && state == 0x03 ) // Release state
+               return;
+
        // Get the keycode from arguments
        uint8_t key = args[0];