Adding layer rotation (next/prev) capability
- Requires kll update - Including udev id update
This commit is contained in:
parent
3f83274f86
commit
893231b355
@ -5,6 +5,7 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", MODE:=
|
|||||||
# Kiibohd Serial Interface
|
# Kiibohd Serial Interface
|
||||||
KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", MODE:="0666"
|
KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", MODE:="0666"
|
||||||
KERNEL=="ttyACM*", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b04d", MODE:="0666"
|
KERNEL=="ttyACM*", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b04d", MODE:="0666"
|
||||||
|
KERNEL=="ttyACM*", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="f05c", MODE:="0666"
|
||||||
# Kiibohd Device
|
# Kiibohd Device
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b04d", MODE:="0666"
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b04d", MODE:="0666"
|
||||||
# DFU Bootloader (MCHCK)
|
# DFU Bootloader (MCHCK)
|
||||||
|
@ -1,17 +1,22 @@
|
|||||||
Name = PartialMapCapabilities;
|
Name = PartialMapCapabilities;
|
||||||
Version = 0.1;
|
Version = 0.2;
|
||||||
Author = "HaaTa (Jacob Alexander) 2014";
|
Author = "HaaTa (Jacob Alexander) 2014-2015";
|
||||||
KLL = 0.3a;
|
KLL = 0.3b;
|
||||||
|
|
||||||
# Modified Date
|
# Modified Date
|
||||||
Date = 2014-11-21;
|
Date = 2015-09-24;
|
||||||
|
|
||||||
|
|
||||||
# Capabilties available to the PartialMap module
|
# Capabilties available to the PartialMap module
|
||||||
layerState => Macro_layerState_capability( layer : 2, state : 1 );
|
layerState => Macro_layerState_capability( layer : 2, state : 1 );
|
||||||
layerLatch => Macro_layerLatch_capability( layer : 2 );
|
layerLatch => Macro_layerLatch_capability( layer : 2 );
|
||||||
layerLock => Macro_layerLock_capability( layer : 2 );
|
layerLock => Macro_layerLock_capability( layer : 2 );
|
||||||
layerShift => Macro_layerShift_capability( layer : 2 );
|
layerShift => Macro_layerShift_capability( layer : 2 );
|
||||||
|
# By default, rotate to the next layer
|
||||||
|
# The current rotating layer is stored separately to the layer stack
|
||||||
|
# But still sets the layer stack using the layerLock/unlock mechanism
|
||||||
|
# Argument 0 -> Next, 1 -> Previous
|
||||||
|
layerRotate => Macro_layerRotate_capability( previous : 1 );
|
||||||
|
|
||||||
# Defines available to the PartialMap module
|
# Defines available to the PartialMap module
|
||||||
stateWordSize => StateWordSize_define;
|
stateWordSize => StateWordSize_define;
|
||||||
|
@ -170,8 +170,8 @@ uint8_t macroInterconnectCacheSize = 0;
|
|||||||
// Sets the given layer with the specified layerState
|
// Sets the given layer with the specified layerState
|
||||||
void Macro_layerState( uint8_t state, uint8_t stateType, uint16_t layer, uint8_t layerState )
|
void Macro_layerState( uint8_t state, uint8_t stateType, uint16_t layer, uint8_t layerState )
|
||||||
{
|
{
|
||||||
// Ignore if layer does not exist
|
// Ignore if layer does not exist or trying to manipulate layer 0/Default layer
|
||||||
if ( layer >= LayerNum )
|
if ( layer >= LayerNum || layer == 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Is layer in the LayerIndexStack?
|
// Is layer in the LayerIndexStack?
|
||||||
@ -350,6 +350,58 @@ void Macro_layerShift_capability( uint8_t state, uint8_t stateType, uint8_t *arg
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Rotate layer to next/previous
|
||||||
|
// Uses state variable to keep track of the current layer position
|
||||||
|
// Layers are still evaluated using the layer stack
|
||||||
|
uint16_t Macro_rotationLayer;
|
||||||
|
void Macro_layerRotate_capability( uint8_t state, uint8_t stateType, uint8_t *args )
|
||||||
|
{
|
||||||
|
// Display capability name
|
||||||
|
if ( stateType == 0xFF && state == 0xFF )
|
||||||
|
{
|
||||||
|
print("Macro_layerRotate(previous)");
|
||||||
|
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;
|
||||||
|
|
||||||
|
// Unset previous rotation layer if not 0
|
||||||
|
if ( Macro_rotationLayer != 0 )
|
||||||
|
{
|
||||||
|
Macro_layerState( state, stateType, Macro_rotationLayer, 0x04 );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get direction of rotation, 0, next, non-zero previous
|
||||||
|
uint8_t direction = *args;
|
||||||
|
|
||||||
|
// Next
|
||||||
|
if ( !direction )
|
||||||
|
{
|
||||||
|
Macro_rotationLayer++;
|
||||||
|
|
||||||
|
// Invalid layer
|
||||||
|
if ( Macro_rotationLayer >= LayerNum )
|
||||||
|
Macro_rotationLayer = 0;
|
||||||
|
}
|
||||||
|
// Previous
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Macro_rotationLayer--;
|
||||||
|
|
||||||
|
// Layer wrap
|
||||||
|
if ( Macro_rotationLayer >= LayerNum )
|
||||||
|
Macro_rotationLayer = LayerNum - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Toggle the computed layer rotation
|
||||||
|
Macro_layerState( state, stateType, Macro_rotationLayer, 0x04 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----- Functions -----
|
// ----- Functions -----
|
||||||
|
|
||||||
@ -398,9 +450,9 @@ nat_ptr_t *Macro_layerLookup( TriggerGuide *guide, uint8_t latch_expire )
|
|||||||
// Determine if layer has key defined
|
// Determine if layer has key defined
|
||||||
// Make sure scanCode is between layer first and last scancodes
|
// Make sure scanCode is between layer first and last scancodes
|
||||||
if ( map != 0
|
if ( map != 0
|
||||||
&& scanCode <= layer->last
|
&& scanCode <= layer->last
|
||||||
&& scanCode >= layer->first
|
&& scanCode >= layer->first
|
||||||
&& *map[ scanCode - layer->first ] != 0 )
|
&& *map[ scanCode - layer->first ] != 0 )
|
||||||
{
|
{
|
||||||
// Set the layer cache
|
// Set the layer cache
|
||||||
macroTriggerListLayerCache[ scanCode ] = macroLayerIndexStack[ layerIndex ];
|
macroTriggerListLayerCache[ scanCode ] = macroLayerIndexStack[ layerIndex ];
|
||||||
@ -418,9 +470,9 @@ nat_ptr_t *Macro_layerLookup( TriggerGuide *guide, uint8_t latch_expire )
|
|||||||
|
|
||||||
// Make sure scanCode is between layer first and last scancodes
|
// Make sure scanCode is between layer first and last scancodes
|
||||||
if ( map != 0
|
if ( map != 0
|
||||||
&& scanCode <= layer->last
|
&& scanCode <= layer->last
|
||||||
&& scanCode >= layer->first
|
&& scanCode >= layer->first
|
||||||
&& *map[ scanCode - layer->first ] != 0 )
|
&& *map[ scanCode - layer->first ] != 0 )
|
||||||
{
|
{
|
||||||
// Set the layer cache to default map
|
// Set the layer cache to default map
|
||||||
macroTriggerListLayerCache[ scanCode ] = 0;
|
macroTriggerListLayerCache[ scanCode ] = 0;
|
||||||
@ -892,7 +944,7 @@ TriggerMacroEval Macro_evalTriggerMacro( var_uint_t triggerMacroIndex )
|
|||||||
}
|
}
|
||||||
// If passing and in Waiting state, set macro state to Press
|
// If passing and in Waiting state, set macro state to Press
|
||||||
else if ( overallVote & TriggerMacroVote_Pass
|
else if ( overallVote & TriggerMacroVote_Pass
|
||||||
&& ( record->state == TriggerMacro_Waiting || record->state == TriggerMacro_Press ) )
|
&& ( record->state == TriggerMacro_Waiting || record->state == TriggerMacro_Press ) )
|
||||||
{
|
{
|
||||||
record->state = TriggerMacro_Press;
|
record->state = TriggerMacro_Press;
|
||||||
|
|
||||||
@ -1212,6 +1264,9 @@ inline void Macro_setup()
|
|||||||
// Make sure macro trigger buffer is empty
|
// Make sure macro trigger buffer is empty
|
||||||
macroTriggerListBufferSize = 0;
|
macroTriggerListBufferSize = 0;
|
||||||
|
|
||||||
|
// Set the current rotated layer to 0
|
||||||
|
Macro_rotationLayer = 0;
|
||||||
|
|
||||||
// Initialize TriggerMacro states
|
// Initialize TriggerMacro states
|
||||||
for ( var_uint_t macro = 0; macro < TriggerMacroNum; macro++ )
|
for ( var_uint_t macro = 0; macro < TriggerMacroNum; macro++ )
|
||||||
{
|
{
|
||||||
|
@ -345,6 +345,7 @@ inline uint8_t LCD_scan()
|
|||||||
// ----- Capabilities -----
|
// ----- Capabilities -----
|
||||||
|
|
||||||
uint16_t LCD_layerStack_prevSize = 0;
|
uint16_t LCD_layerStack_prevSize = 0;
|
||||||
|
uint16_t LCD_layerStack_prevTop = 0;
|
||||||
void LCD_layerStack_capability( uint8_t state, uint8_t stateType, uint8_t *args )
|
void LCD_layerStack_capability( uint8_t state, uint8_t stateType, uint8_t *args )
|
||||||
{
|
{
|
||||||
// Display capability name
|
// Display capability name
|
||||||
@ -358,12 +359,14 @@ void LCD_layerStack_capability( uint8_t state, uint8_t stateType, uint8_t *args
|
|||||||
extern uint16_t macroLayerIndexStack[];
|
extern uint16_t macroLayerIndexStack[];
|
||||||
extern uint16_t macroLayerIndexStackSize;
|
extern uint16_t macroLayerIndexStackSize;
|
||||||
|
|
||||||
// Only process if the stack size has changed
|
// Ignore if the stack size hasn't changed and the top of the stack is the same
|
||||||
if ( macroLayerIndexStackSize == LCD_layerStack_prevSize )
|
if ( macroLayerIndexStackSize == LCD_layerStack_prevSize
|
||||||
|
&& macroLayerIndexStack[macroLayerIndexStackSize - 1] == LCD_layerStack_prevTop )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LCD_layerStack_prevSize = macroLayerIndexStackSize;
|
LCD_layerStack_prevSize = macroLayerIndexStackSize;
|
||||||
|
LCD_layerStack_prevTop = macroLayerIndexStack[macroLayerIndexStackSize - 1];
|
||||||
|
|
||||||
// Number data for LCD
|
// Number data for LCD
|
||||||
const uint8_t numbers[10][128] = {
|
const uint8_t numbers[10][128] = {
|
||||||
|
Reference in New Issue
Block a user