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
This commit is contained in:
parent
121525e2cb
commit
2a6c2a9c78
@ -28,7 +28,8 @@
|
|||||||
// Keymaps
|
// Keymaps
|
||||||
#include "usb_hid.h"
|
#include "usb_hid.h"
|
||||||
#include <defaultMap.h>
|
#include <defaultMap.h>
|
||||||
#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
|
// Local Includes
|
||||||
#include "macro.h"
|
#include "macro.h"
|
||||||
@ -124,7 +125,7 @@ unsigned int macroTriggerMacroPendingListSize = 0;
|
|||||||
|
|
||||||
// Layer Index Stack
|
// Layer Index Stack
|
||||||
// * When modifying layer state and the state is non-0x0, the stack must be adjusted
|
// * 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;
|
unsigned int macroLayerIndexStackSize = 0;
|
||||||
|
|
||||||
// Pending Result Macro Index List
|
// Pending Result Macro Index List
|
||||||
@ -136,25 +137,9 @@ unsigned int macroResultMacroPendingListSize = 0;
|
|||||||
|
|
||||||
// ----- Capabilities -----
|
// ----- Capabilities -----
|
||||||
|
|
||||||
// Modifies the specified Layer control byte
|
// Sets the given layer with the specified layerState
|
||||||
// Argument #1: Layer Index -> unsigned int
|
void Macro_layerState( uint8_t state, uint8_t stateType, uint16_t layer, uint8_t layerState )
|
||||||
// Argument #2: Toggle byte -> uint8_t
|
|
||||||
void Macro_layerStateToggle_capability( uint8_t state, uint8_t stateType, uint8_t *args )
|
|
||||||
{
|
{
|
||||||
// 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?
|
// Is layer in the LayerIndexStack?
|
||||||
uint8_t inLayerIndexStack = 0;
|
uint8_t inLayerIndexStack = 0;
|
||||||
unsigned int stackItem = 0;
|
unsigned int stackItem = 0;
|
||||||
@ -172,15 +157,15 @@ void Macro_layerStateToggle_capability( uint8_t state, uint8_t stateType, uint8_
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Toggle Layer State Byte
|
// Toggle Layer State Byte
|
||||||
if ( LayerIndex[ layer ].state & toggleByte )
|
if ( LayerIndex[ layer ].state & layerState )
|
||||||
{
|
{
|
||||||
// Unset
|
// Unset
|
||||||
LayerIndex[ layer ].state &= ~toggleByte;
|
LayerIndex[ layer ].state &= ~layerState;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Set
|
// Set
|
||||||
LayerIndex[ layer ].state |= toggleByte;
|
LayerIndex[ layer ].state |= layerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the layer was not in the LayerIndexStack add it
|
// 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 -----
|
// ----- Functions -----
|
||||||
|
@ -26,7 +26,10 @@
|
|||||||
|
|
||||||
// ----- Capabilities -----
|
// ----- 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 );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user