]> git.donarmstrong.com Git - kiibohd-controller.git/commitdiff
Adding variable width state variable width.
authorJacob Alexander <haata@kiibohd.com>
Thu, 11 Sep 2014 17:54:50 +0000 (10:54 -0700)
committerJacob Alexander <haata@kiibohd.com>
Thu, 11 Sep 2014 17:54:50 +0000 (10:54 -0700)
- Allows for RAM space savings on small microcontrollers at the expense of macro length and number of macros/key assignments

Macro/PartialMap/kll.h
Macro/PartialMap/macro.c

index ca8b8651693e5a092b6b1b0e94d850eddc2bfeb7..1d3f70b50222fee7fe2f781ef5f771584ed6602c 100644 (file)
 
 
 
+// ----- Types -----
+
+// - NOTE -
+// It is possible to change the maximum state and indexing positions of the state machine.
+// This usually affects the SRAM usage quite a bit, so it can be used to fit the code on smaller uCs
+// Or to allow for nearly infinite states.
+// TODO Make selectable from layout variable
+//typedef uint32_t var_uint_t;
+typedef uint16_t var_uint_t;
+//typedef uint8_t  var_uint_t;
+
+// - NOTE -
+// Native pointer length
+// This needs to be defined per microcontroller
+// e.g. mk20s  -> 32 bit
+//      atmega -> 16 bit
+typedef uint32_t nat_ptr_t;
+//typedef uint16_t nat_ptr_t;
+
+
+
 // ----- Structs -----
 
 // -- Result Macro
@@ -47,7 +68,7 @@
 // ResultMacro struct, one is created per ResultMacro, no duplicates
 typedef struct ResultMacro {
        const uint8_t *guide;
-       unsigned int pos;
+       var_uint_t pos;
        uint8_t  state;
        uint8_t  stateType;
 } ResultMacro;
@@ -94,8 +115,8 @@ typedef enum TriggerMacroState {
 // TriggerMacro struct, one is created per TriggerMacro, no duplicates
 typedef struct TriggerMacro {
        const uint8_t *guide;
-       unsigned int result;
-       unsigned int pos;
+       var_uint_t result;
+       var_uint_t pos;
        TriggerMacroState state;
 } TriggerMacro;
 
@@ -168,7 +189,7 @@ typedef struct Capability {
 //  * layer       - basename of the layer
 //  * scanCode    - Hex value of the scanCode
 //  * triggerList - Trigger List (see Trigger Lists)
-#define Define_TL( layer, scanCode ) const unsigned int layer##_tl_##scanCode[]
+#define Define_TL( layer, scanCode ) const nat_ptr_t layer##_tl_##scanCode[]
 
 
 
@@ -192,7 +213,7 @@ typedef struct Capability {
 // The name is defined for cli debugging purposes (Null terminated string)
 
 typedef struct Layer {
-       const unsigned int **triggerMap;
+       const nat_ptr_t **triggerMap;
        const char *name;
        const uint8_t max;
        uint8_t state;
index 072ce8d461a98dfecfb9b5f9d784c3a124180e13..b81c76a267d64c93b185c0af20c96879808e09ab 100644 (file)
@@ -285,8 +285,6 @@ void Macro_layerShift_capability( uint8_t state, uint8_t stateType, uint8_t *arg
        if ( stateType == 0x00 && ( state == 0x00 || state == 0x02 ) ) // Only pass press or release conditions
                return;
 
-       print("YAY");
-
        // 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]);
@@ -300,7 +298,7 @@ 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)
 // NOTE: Calling function must handle the NULL pointer case
-unsigned int *Macro_layerLookup( uint8_t scanCode )
+nat_ptr_t *Macro_layerLookup( uint8_t scanCode )
 {
        // If no trigger macro is defined at the given layer, fallthrough to the next layer
        for ( unsigned int layerIndex = 0; layerIndex < macroLayerIndexStackSize; layerIndex++ )
@@ -322,7 +320,7 @@ unsigned int *Macro_layerLookup( uint8_t scanCode )
                if ( (layer->state & 0x01) ^ (latch>>1) ^ ((layer->state & 0x04)>>2) )
                {
                        // Lookup layer
-                       unsigned int **map = (unsigned int**)layer->triggerMap;
+                       nat_ptr_t **map = (nat_ptr_t**)layer->triggerMap;
 
                        // Determine if layer has key defined
                        if ( map != 0 && *map[ scanCode ] != 0 )
@@ -331,7 +329,7 @@ unsigned int *Macro_layerLookup( uint8_t scanCode )
        }
 
        // Do lookup on default layer
-       unsigned int **map = (unsigned int**)LayerIndex[0].triggerMap;
+       nat_ptr_t **map = (nat_ptr_t**)LayerIndex[0].triggerMap;
 
        // Determine if layer has key defined
        if ( map == 0 && *map[ scanCode ] == 0 )
@@ -806,10 +804,10 @@ inline void Macro_updateTriggerMacroPendingList()
                        continue;
 
                // Lookup Trigger List
-               unsigned int *triggerList = Macro_layerLookup( macroTriggerListBuffer[ key ].scanCode );
+               nat_ptr_t *triggerList = Macro_layerLookup( macroTriggerListBuffer[ key ].scanCode );
 
                // Number of Triggers in list
-               unsigned int triggerListSize = triggerList[0];
+               nat_ptr_t triggerListSize = triggerList[0];
 
                // Iterate over triggerList to see if any TriggerMacros need to be added
                // First item is the number of items in the TriggerList