changeset 199:559a467f6d57

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
author Jacob Alexander <haata@kiibohd.com>
date Sun, 07 Sep 2014 21:10:49 -0700
parents c011d5a6c26c
children 048c8a266a08 326f75709d10
files Macro/PartialMap/macro.c Macro/PartialMap/macro.h
diffstat 2 files changed, 91 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- 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 <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
 #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 -----
--- 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 );