Fixing releasing Function key and holding layered key
- Pressed key will remain on the same layer until released regardless of the layer changes that happen in the meantime
This commit is contained in:
parent
a737e36b3b
commit
f07e9342dd
@ -49,7 +49,7 @@ done
|
|||||||
if [[ "$SERIAL_PORT" != "" ]] && [[ -e "$SERIAL_PORT" ]]; then
|
if [[ "$SERIAL_PORT" != "" ]] && [[ -e "$SERIAL_PORT" ]]; then
|
||||||
echo "NOTE: This may fail if the uC is in a bad state or does not support remote flashing"
|
echo "NOTE: This may fail if the uC is in a bad state or does not support remote flashing"
|
||||||
printf "reload\r" > $SERIAL_PORT
|
printf "reload\r" > $SERIAL_PORT
|
||||||
sleep 1
|
sleep 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Load via dfu-util
|
# Load via dfu-util
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2014 by Jacob Alexander
|
/* Copyright (C) 2014-2015 by Jacob Alexander
|
||||||
*
|
*
|
||||||
* This file is free software: you can redistribute it and/or modify
|
* This file is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -121,9 +121,11 @@ uint8_t macroPauseMode = 0;
|
|||||||
uint16_t macroStepCounter = 0;
|
uint16_t macroStepCounter = 0;
|
||||||
|
|
||||||
|
|
||||||
// Key Trigger List Buffer
|
// Key Trigger List Buffer and Layer Cache
|
||||||
|
// The layer cache is set on press only, hold and release events refer to the value set on press
|
||||||
TriggerGuide macroTriggerListBuffer[ MaxScanCode ];
|
TriggerGuide macroTriggerListBuffer[ MaxScanCode ];
|
||||||
uint8_t macroTriggerListBufferSize = 0;
|
uint8_t macroTriggerListBufferSize = 0;
|
||||||
|
var_uint_t macroTriggerListLayerCache[ MaxScanCode ];
|
||||||
|
|
||||||
// Pending Trigger Macro Index List
|
// Pending Trigger Macro Index List
|
||||||
// * Any trigger macros that need processing from a previous macro processing loop
|
// * Any trigger macros that need processing from a previous macro processing loop
|
||||||
@ -311,8 +313,24 @@ void Macro_layerShift_capability( uint8_t state, uint8_t stateType, uint8_t *arg
|
|||||||
|
|
||||||
// Looks up the trigger list for the given scan code (from the active layer)
|
// Looks up the trigger list for the given scan code (from the active layer)
|
||||||
// NOTE: Calling function must handle the NULL pointer case
|
// NOTE: Calling function must handle the NULL pointer case
|
||||||
nat_ptr_t *Macro_layerLookup( uint8_t scanCode, uint8_t latch_expire )
|
nat_ptr_t *Macro_layerLookup( TriggerGuide *guide, uint8_t latch_expire )
|
||||||
{
|
{
|
||||||
|
uint8_t scanCode = guide->scanCode;
|
||||||
|
|
||||||
|
// TODO Analog
|
||||||
|
// If a normal key, and not pressed, do a layer cache lookup
|
||||||
|
if ( guide->type == 0x00 && guide->state != 0x01 )
|
||||||
|
{
|
||||||
|
// Cached layer
|
||||||
|
var_uint_t cachedLayer = macroTriggerListLayerCache[ scanCode ];
|
||||||
|
|
||||||
|
// Lookup map, then layer
|
||||||
|
nat_ptr_t **map = (nat_ptr_t**)LayerIndex[ cachedLayer ].triggerMap;
|
||||||
|
const Layer *layer = &LayerIndex[ cachedLayer ];
|
||||||
|
|
||||||
|
return map[ scanCode - layer->first ];
|
||||||
|
}
|
||||||
|
|
||||||
// If no trigger macro is defined at the given layer, fallthrough to the next layer
|
// 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 = 0; layerIndex < macroLayerIndexStackSize; layerIndex++ )
|
||||||
{
|
{
|
||||||
@ -342,6 +360,9 @@ nat_ptr_t *Macro_layerLookup( uint8_t scanCode, uint8_t latch_expire )
|
|||||||
&& scanCode >= layer->first
|
&& scanCode >= layer->first
|
||||||
&& *map[ scanCode - layer->first ] != 0 )
|
&& *map[ scanCode - layer->first ] != 0 )
|
||||||
{
|
{
|
||||||
|
// Set the layer cache
|
||||||
|
macroTriggerListLayerCache[ scanCode ] = macroLayerIndexStack[ layerIndex ];
|
||||||
|
|
||||||
return map[ scanCode - layer->first ];
|
return map[ scanCode - layer->first ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -359,6 +380,9 @@ nat_ptr_t *Macro_layerLookup( uint8_t scanCode, uint8_t latch_expire )
|
|||||||
&& scanCode >= layer->first
|
&& scanCode >= layer->first
|
||||||
&& *map[ scanCode - layer->first ] != 0 )
|
&& *map[ scanCode - layer->first ] != 0 )
|
||||||
{
|
{
|
||||||
|
// Set the layer cache to default map
|
||||||
|
macroTriggerListLayerCache[ scanCode ] = 0;
|
||||||
|
|
||||||
return map[ scanCode - layer->first ];
|
return map[ scanCode - layer->first ];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -836,7 +860,7 @@ inline void Macro_updateTriggerMacroPendingList()
|
|||||||
uint8_t latch_expire = macroTriggerListBuffer[ key ].state == 0x03;
|
uint8_t latch_expire = macroTriggerListBuffer[ key ].state == 0x03;
|
||||||
|
|
||||||
// Lookup Trigger List
|
// Lookup Trigger List
|
||||||
nat_ptr_t *triggerList = Macro_layerLookup( macroTriggerListBuffer[ key ].scanCode, latch_expire );
|
nat_ptr_t *triggerList = Macro_layerLookup( ¯oTriggerListBuffer[ key ], latch_expire );
|
||||||
|
|
||||||
// Number of Triggers in list
|
// Number of Triggers in list
|
||||||
nat_ptr_t triggerListSize = triggerList[0];
|
nat_ptr_t triggerListSize = triggerList[0];
|
||||||
|
Reference in New Issue
Block a user