# HG changeset patch # User Jacob Alexander # Date 1410149449 25200 # Node ID 559a467f6d57b4bb22f0f3f05e0a2d1e61cfa260 # Parent c011d5a6c26c6e9f93acdcc0c6556c5d95e6a2e1 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 diff -r c011d5a6c26c -r 559a467f6d57 Macro/PartialMap/macro.c --- a/Macro/PartialMap/macro.c Sat Aug 23 11:32:46 2014 -0700 +++ b/Macro/PartialMap/macro.c Sun Sep 07 21:10:49 2014 -0700 @@ -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 @@ // 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 @@ // ----- 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 @@ } // 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 @@ } } +// 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 -r c011d5a6c26c -r 559a467f6d57 Macro/PartialMap/macro.h --- a/Macro/PartialMap/macro.h Sat Aug 23 11:32:46 2014 -0700 +++ b/Macro/PartialMap/macro.h Sun Sep 07 21:10:49 2014 -0700 @@ -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 );