From 2a6c2a9c7892c7ca16b0ab64b66f24af9510782a Mon Sep 17 00:00:00 2001 From: Jacob Alexander Date: Sun, 7 Sep 2014 21:10:49 -0700 Subject: [PATCH] Preparing for kll compiler usage - Split layer capability into different parts - Convenience Shift, Latch, Lock - Keeping the original capability because it also allows specifically turning layers off and is useful for debugging --- Macro/PartialMap/macro.c | 110 +++++++++++++++++++++++++++++++-------- Macro/PartialMap/macro.h | 5 +- 2 files changed, 91 insertions(+), 24 deletions(-) diff --git a/Macro/PartialMap/macro.c b/Macro/PartialMap/macro.c index 7144684..06c5d41 100644 --- a/Macro/PartialMap/macro.c +++ b/Macro/PartialMap/macro.c @@ -28,7 +28,8 @@ // Keymaps #include "usb_hid.h" #include -#include "generatedKeymap.h" // TODO Use actual generated version +#include "templateKeymap.h" // TODO Use actual generated version +//#include "generatedKeymap.h" // TODO Use actual generated version // Local Includes #include "macro.h" @@ -124,7 +125,7 @@ unsigned int macroTriggerMacroPendingListSize = 0; // Layer Index Stack // * When modifying layer state and the state is non-0x0, the stack must be adjusted -unsigned int macroLayerIndexStack[ LayerNum ] = { 0 }; +unsigned int macroLayerIndexStack[ LayerNum + 1 ] = { 0 }; unsigned int macroLayerIndexStackSize = 0; // Pending Result Macro Index List @@ -136,25 +137,9 @@ unsigned int macroResultMacroPendingListSize = 0; // ----- Capabilities ----- -// Modifies the specified Layer control byte -// Argument #1: Layer Index -> unsigned int -// Argument #2: Toggle byte -> uint8_t -void Macro_layerStateToggle_capability( uint8_t state, uint8_t stateType, uint8_t *args ) +// Sets the given layer with the specified layerState +void Macro_layerState( uint8_t state, uint8_t stateType, uint16_t layer, uint8_t layerState ) { - // Display capability name - if ( stateType == 0xFF && state == 0xFF ) - { - print("Macro_layerState(layerIndex,toggleByte)"); - return; - } - - // Get layer index from arguments - // Cast pointer to uint8_t to unsigned int then access that memory location - unsigned int layer = *(unsigned int*)(&args[0]); - - // Get layer toggle byte - uint8_t toggleByte = args[ sizeof(unsigned int) ]; - // Is layer in the LayerIndexStack? uint8_t inLayerIndexStack = 0; unsigned int stackItem = 0; @@ -172,15 +157,15 @@ void Macro_layerStateToggle_capability( uint8_t state, uint8_t stateType, uint8_ } // Toggle Layer State Byte - if ( LayerIndex[ layer ].state & toggleByte ) + if ( LayerIndex[ layer ].state & layerState ) { // Unset - LayerIndex[ layer ].state &= ~toggleByte; + LayerIndex[ layer ].state &= ~layerState; } else { // Set - LayerIndex[ layer ].state |= toggleByte; + LayerIndex[ layer ].state |= layerState; } // If the layer was not in the LayerIndexStack add it @@ -205,6 +190,85 @@ void Macro_layerStateToggle_capability( uint8_t state, uint8_t stateType, uint8_ } } +// Modifies the specified Layer control byte +// Argument #1: Layer Index -> uint16_t +// Argument #2: Layer State -> uint8_t +void Macro_layerState_capability( uint8_t state, uint8_t stateType, uint8_t *args ) +{ + // Display capability name + if ( stateType == 0xFF && state == 0xFF ) + { + print("Macro_layerState(layerIndex,layerState)"); + 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]); + + // Get layer toggle byte + uint8_t layerState = args[ sizeof(uint16_t) ]; + + Macro_layerState( state, stateType, layer, layerState ); +} + + +// Latches given layer +// Argument #1: Layer Index -> uint16_t +void Macro_layerLatch_capability( uint8_t state, uint8_t stateType, uint8_t *args ) +{ + // Display capability name + if ( stateType == 0xFF && state == 0xFF ) + { + print("Macro_layerLatch(layerIndex)"); + 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]); + + Macro_layerState( state, stateType, layer, 0x02 ); +} + + +// Locks given layer +// Argument #1: Layer Index -> uint16_t +void Macro_layerLock_capability( uint8_t state, uint8_t stateType, uint8_t *args ) +{ + // Display capability name + if ( stateType == 0xFF && state == 0xFF ) + { + print("Macro_layerLock(layerIndex)"); + 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]); + + Macro_layerState( state, stateType, layer, 0x04 ); +} + + +// Shifts given layer +// Argument #1: Layer Index -> uint16_t +void Macro_layerShift_capability( uint8_t state, uint8_t stateType, uint8_t *args ) +{ + // Display capability name + if ( stateType == 0xFF && state == 0xFF ) + { + print("Macro_layerShift(layerIndex)"); + 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]); + + Macro_layerState( state, stateType, layer, 0x01 ); +} + // ----- Functions ----- diff --git a/Macro/PartialMap/macro.h b/Macro/PartialMap/macro.h index 11b40bc..e8355c2 100644 --- a/Macro/PartialMap/macro.h +++ b/Macro/PartialMap/macro.h @@ -26,7 +26,10 @@ // ----- Capabilities ----- -void Macro_layerStateToggle_capability( uint8_t state, uint8_t stateType, uint8_t *args ); +void Macro_layerState_capability( uint8_t state, uint8_t stateType, uint8_t *args ); +void Macro_layerLatch_capability( uint8_t state, uint8_t stateType, uint8_t *args ); +void Macro_layerLock_capability( uint8_t state, uint8_t stateType, uint8_t *args ); +void Macro_layerShift_capability( uint8_t state, uint8_t stateType, uint8_t *args );