Archived
1
0

rename StateLayers to LayerState

This commit is contained in:
wolfv6 2016-05-28 15:16:32 -06:00
parent f97ae6d23d
commit 0f511d5229
21 changed files with 91 additions and 91 deletions

View File

@ -12,7 +12,7 @@ keybrd version 1.0.0 will be released when the public API is stable.
* Restructured the project directory to conform to Arduino library manager specifications * Restructured the project directory to conform to Arduino library manager specifications
* Moved keybrd_DH library extension (for DodoHand) to its own repository * Moved keybrd_DH library extension (for DodoHand) to its own repository
* Moved sketches to examples directory * Moved sketches to examples directory
* Replaced Key_Layered dependency on LayerManager with StateLayers class * Replaced Key_Layered dependency on LayerManager with LayerState class
### Added ### Added
* Tutorials * Tutorials

View File

@ -34,9 +34,9 @@ Keybrd library class inheritance diagram
LED_AVR LED_MCP23018 LED_PCA9655E (one LED class for each type of IC) LED_AVR LED_MCP23018 LED_PCA9655E (one LED class for each type of IC)
StateLayersInterface LayerStateInterface
| |
StateLayers LayerState
Key __ Key __
@ -81,7 +81,7 @@ single-layer dependency diagram with LEDs
multi-layer dependency diagram with LEDs and I/O Expander multi-layer dependency diagram with LEDs and I/O Expander
``` ```
matrix[1..*] matrix[1..*]
| stateLayers[1..*] | layerStates[1..*]
row[1..*]_________________________________________/__ | \ row[1..*]_________________________________________/__ | \
| \ \ \ / \ | \ | \ \ \ / \ | \
rowPort[1] rowPin[1] colPort[1] keys[1] / code_layer[1..*] LED[0..*] rowPort[1] rowPin[1] colPort[1] keys[1] / code_layer[1..*] LED[0..*]
@ -116,11 +116,11 @@ Example Code_Layer class names:
* Code_LayerHold * Code_LayerHold
* Code_LayerLock * Code_LayerLock
*StateLayer* class names start with "StateLayer" and end with a descriptive name. *LayerState* class names start with "LayerState" and end with a descriptive name.
Example StateLayer class names: Example LayerState class names:
* StateLayer - basic StateLayer class in keybrd library * LayerState - basic LayerState class in keybrd library
* StateLayer_DH - main StateLayer for the keybrd_DH library * LayerState_DH - main LayerState for the keybrd_DH library
* StateLayer_MF - StateLayer for Mouse Function sub-layers in the keybrd_DH library * LayerState_MF - LayerState for Mouse Function sub-layers in the keybrd_DH library
*Code_Layered* class names start with "Code_Layered" and end with a descriptive name. *Code_Layered* class names start with "Code_Layered" and end with a descriptive name.
Example Code_Layered class names: Example Code_Layered class names:

View File

@ -19,7 +19,7 @@ Uses the same variable naming convention as keybrd_DH.
#include <Code_ScS.h> #include <Code_ScS.h>
#include <Code_Shift.h> #include <Code_Shift.h>
#include <StateLayers.h> #include <LayerState.h>
//#include <Code_LayerLock.h> //#include <Code_LayerLock.h>
#include <Code_LayerHold.h> #include <Code_LayerHold.h>
@ -49,9 +49,9 @@ const uint8_t COL_PORT_L_COUNT = sizeof(ptrsColPorts_L)/sizeof(*ptrsColPorts_L);
// ================= CODES ===================== // ================= CODES =====================
// -------------- LAYER CODES ------------------ // -------------- LAYER CODES ------------------
StateLayers stateLayer; LayerState layerState;
//Code_LayerLock l_alpha(0, stateLayer); //Code_LayerLock l_alpha(0, layerState);
Code_LayerHold l_fn(1, stateLayer); Code_LayerHold l_fn(1, layerState);
// --------------- SHIFT CODE ------------------ // --------------- SHIFT CODE ------------------
Code_Shift s_shift(MODIFIERKEY_LEFT_SHIFT); Code_Shift s_shift(MODIFIERKEY_LEFT_SHIFT);
@ -65,7 +65,7 @@ Code_Sc s_b(KEY_B);
Code_ScS s_exclamation(KEY_1); Code_ScS s_exclamation(KEY_1);
Code_ScS s_at(KEY_2); Code_ScS s_at(KEY_2);
StateLayersInterface& Key_LayeredKeysArray::refStateLayers = stateLayer; LayerStateInterface& Key_LayeredKeysArray::refLayerState = layerState;
// ============== LEFT MATRIX ================== // ============== LEFT MATRIX ==================
// --------------- LEFT KEYS ------------------- // --------------- LEFT KEYS -------------------

View File

@ -2,10 +2,10 @@
void Code_LayerHold::press() void Code_LayerHold::press()
{ {
refStateLayers.hold(layer); refLayerState.hold(layer);
} }
void Code_LayerHold::release() void Code_LayerHold::release()
{ {
refStateLayers.unhold(layer); refLayerState.unhold(layer);
} }

View File

@ -3,18 +3,18 @@
#include <inttypes.h> #include <inttypes.h>
#include <Code.h> #include <Code.h>
#include "StateLayers.h" #include "LayerState.h"
/* Code_LayerHold calls StateLayers when pressed to change activeLayer. /* Code_LayerHold calls LayerState when pressed to change activeLayer.
*/ */
class Code_LayerHold : public Code class Code_LayerHold : public Code
{ {
private: private:
const uint8_t layer; const uint8_t layer;
StateLayers& refStateLayers; LayerState& refLayerState;
public: public:
Code_LayerHold(const uint8_t layer, StateLayers& refStateLayers) Code_LayerHold(const uint8_t layer, LayerState& refLayerState)
: layer(layer), refStateLayers(refStateLayers) {} : layer(layer), refLayerState(refLayerState) {}
virtual void press(); virtual void press();
virtual void release(); virtual void release();
}; };

View File

@ -2,7 +2,7 @@
void Code_LayerLock::press() void Code_LayerLock::press()
{ {
refStateLayers.lock(layer); refLayerState.lock(layer);
} }
void Code_LayerLock::release() void Code_LayerLock::release()

View File

@ -3,18 +3,18 @@
#include <inttypes.h> #include <inttypes.h>
#include <Code.h> #include <Code.h>
#include "StateLayers.h" #include "LayerState.h"
/* Code_LayerLock calls StateLayers when pressed to change activeLayer. /* Code_LayerLock calls LayerState when pressed to change activeLayer.
*/ */
class Code_LayerLock : public Code class Code_LayerLock : public Code
{ {
private: private:
const uint8_t layer; const uint8_t layer;
StateLayers& refStateLayers; LayerState& refLayerState;
public: public:
Code_LayerLock(const uint8_t layer, StateLayers& refStateLayers) Code_LayerLock(const uint8_t layer, LayerState& refLayerState)
: layer(layer), refStateLayers(refStateLayers) {} : layer(layer), refLayerState(refLayerState) {}
virtual void press(); virtual void press();
virtual void release(); virtual void release();
}; };

View File

@ -2,6 +2,6 @@
void Code_LayeredCodeSc::press() void Code_LayeredCodeSc::press()
{ {
layer = refStateLayers.getActiveLayer(); layer = refLayerState.getActiveLayer();
pressCode(); pressCode();
} }

View File

@ -3,18 +3,18 @@
#include <Arduino.h> #include <Arduino.h>
#include <inttypes.h> #include <inttypes.h>
#include <Code_LayeredCodeScBase.h> #include <Code_LayeredCodeScBase.h>
#include <StateLayersInterface.h> #include <LayerStateInterface.h>
/* Class Code_LayeredCodeSc is a 2-layer code, one object for each layer e.g. /* Class Code_LayeredCodeSc is a 2-layer code, one object for each layer e.g.
layer0: ms_up //mouse up layer0: ms_up //mouse up
layer1: KEY_UP //up arrow layer1: KEY_UP //up arrow
When the key is pressed, the active layer is retrieved from refStateLayers, When the key is pressed, the active layer is retrieved from refLayerState,
and the object for the active layer is sent to USB. and the object for the active layer is sent to USB.
*/ */
class Code_LayeredCodeSc : public Code_LayeredCodeScBase class Code_LayeredCodeSc : public Code_LayeredCodeScBase
{ {
private: private:
static StateLayersInterface& refStateLayers; static LayerStateInterface& refLayerState;
public: public:
Code_LayeredCodeSc(Code& refCode0, const uint16_t scancode1) Code_LayeredCodeSc(Code& refCode0, const uint16_t scancode1)
: Code_LayeredCodeScBase(refCode0, scancode1, 0) { } : Code_LayeredCodeScBase(refCode0, scancode1, 0) { }

View File

@ -7,7 +7,7 @@
/* Class Code_LayeredCodeScBase is a 2-layer code, one object for each layer e.g. /* Class Code_LayeredCodeScBase is a 2-layer code, one object for each layer e.g.
layer0: ms_up //mouse up layer0: ms_up //mouse up
layer1: KEY_UP //up arrow layer1: KEY_UP //up arrow
When the key is pressed, the active layer is retrieved from refStateLayers, When the key is pressed, the active layer is retrieved from refLayerState,
and the object for the active layer is sent to USB. and the object for the active layer is sent to USB.
*/ */
class Code_LayeredCodeScBase : public Code class Code_LayeredCodeScBase : public Code

View File

@ -2,6 +2,6 @@
void Code_LayeredScSc::press() void Code_LayeredScSc::press()
{ {
layer = refStateLayers.getActiveLayer(); layer = refLayerState.getActiveLayer();
pressScancode(); pressScancode();
} }

View File

@ -2,18 +2,18 @@
#define CODE_LAYEREDSCSC_H #define CODE_LAYEREDSCSC_H
#include <Arduino.h> #include <Arduino.h>
#include <inttypes.h> #include <inttypes.h>
#include <StateLayersInterface.h> #include <LayerStateInterface.h>
#include <Code_LayeredScScBase.h> #include <Code_LayeredScScBase.h>
/* Class Code_LayeredScSc is composed of two scancodes; "S" stands for Scancode. /* Class Code_LayeredScSc is composed of two scancodes; "S" stands for Scancode.
layer is retreived from refStateLayers. layer is retreived from refLayerState.
when layer=0, press sends scancode0 when layer=0, press sends scancode0
when layer=1, press sends scancode1 when layer=1, press sends scancode1
*/ */
class Code_LayeredScSc : public Code_LayeredScScBase class Code_LayeredScSc : public Code_LayeredScScBase
{ {
private: private:
static StateLayersInterface& refStateLayers; static LayerStateInterface& refLayerState;
public: public:
Code_LayeredScSc(const uint16_t scancode0, const uint16_t scancode1) Code_LayeredScSc(const uint16_t scancode0, const uint16_t scancode1)
: Code_LayeredScScBase(scancode0, scancode1) { } : Code_LayeredScScBase(scancode0, scancode1) { }

View File

@ -2,7 +2,7 @@
void Key_LayeredKeysArray::press() void Key_LayeredKeysArray::press()
{ {
layer = refStateLayers.getActiveLayer(); layer = refLayerState.getActiveLayer();
ptrsKeys[layer]->press(); ptrsKeys[layer]->press();
} }

View File

@ -2,13 +2,13 @@
#define KEY_LAYEREDKEYSARRAY_H #define KEY_LAYEREDKEYSARRAY_H
#include <Arduino.h> #include <Arduino.h>
#include <inttypes.h> #include <inttypes.h>
#include <StateLayersInterface.h> #include <LayerStateInterface.h>
#include <Key.h> #include <Key.h>
/* Class Key_LayeredKeysArray contains an array of Key pointers, one pointer per layer. /* Class Key_LayeredKeysArray contains an array of Key pointers, one pointer per layer.
Codes are a kind of Key, so the Key pointers can point to Codes as well. Codes are a kind of Key, so the Key pointers can point to Codes as well.
When the key is pressed, active layer is retreived from refStateLayers and When the key is pressed, active layer is retreived from refLayerState and
the Key object of the active layer is called. the Key object of the active layer is called.
*/ */
class Key_LayeredKeysArray : public Key class Key_LayeredKeysArray : public Key
@ -16,7 +16,7 @@ class Key_LayeredKeysArray : public Key
private: private:
Key *const *const ptrsKeys; //array of Key pointers, one Key per layer Key *const *const ptrsKeys; //array of Key pointers, one Key per layer
uint8_t layer; //active layer when key was pressed uint8_t layer; //active layer when key was pressed
static StateLayersInterface& refStateLayers; static LayerStateInterface& refLayerState;
public: public:
Key_LayeredKeysArray(Key *const ptrsKeys[]): ptrsKeys(ptrsKeys) {} Key_LayeredKeysArray(Key *const ptrsKeys[]): ptrsKeys(ptrsKeys) {}
virtual void press(); virtual void press();

View File

@ -1,11 +1,11 @@
#include "StateLayers.h" #include "LayerState.h"
void StateLayers::hold(const uint8_t layer) void LayerState::hold(const uint8_t layer)
{ {
setActiveLayer(layer); setActiveLayer(layer);
} }
void StateLayers::unhold(const uint8_t layer) void LayerState::unhold(const uint8_t layer)
{ {
if (layer == activeLayer); if (layer == activeLayer);
{ {
@ -13,19 +13,19 @@ void StateLayers::unhold(const uint8_t layer)
} }
} }
void StateLayers::lock(const uint8_t layer) void LayerState::lock(const uint8_t layer)
{ {
setActiveLayer(layer); setActiveLayer(layer);
lockedLayer = layer; lockedLayer = layer;
} }
//Derived classes override setActiveLayer() to also set LED indicator lights. //Derived classes override setActiveLayer() to also set LED indicator lights.
void StateLayers::setActiveLayer(const uint8_t layer) void LayerState::setActiveLayer(const uint8_t layer)
{ {
activeLayer = layer; activeLayer = layer;
} }
uint8_t StateLayers::getActiveLayer() uint8_t LayerState::getActiveLayer()
{ {
return activeLayer; return activeLayer;
} }

View File

@ -2,20 +2,20 @@
#define LAYERSTATE_H #define LAYERSTATE_H
#include <inttypes.h> #include <inttypes.h>
#include <StateLayersInterface.h> #include <LayerStateInterface.h>
/* basic StateLayers for keyboard. /* basic LayerState for keyboard.
When pressed, Code_Layer objects call StateLayers functions lock() or hold(). When pressed, Code_Layer objects call LayerState functions lock() or hold().
When pressed, Layered objects call StateLayers function getActiveLayer(). When pressed, Layered objects call LayerState function getActiveLayer().
*/ */
class StateLayers : public StateLayersInterface class LayerState : public LayerStateInterface
{ {
protected: protected:
uint8_t activeLayer; //currently active layer uint8_t activeLayer; //currently active layer
uint8_t lockedLayer; //most recently pressed lock layer uint8_t lockedLayer; //most recently pressed lock layer
virtual void setActiveLayer(const uint8_t layer); virtual void setActiveLayer(const uint8_t layer);
public: public:
StateLayers() : activeLayer(0), lockedLayer(0) {} LayerState() : activeLayer(0), lockedLayer(0) {}
virtual void hold(uint8_t layer); //set activeLayer virtual void hold(uint8_t layer); //set activeLayer
virtual void unhold(const uint8_t layer); //restore activeLayer to lockedLayer virtual void unhold(const uint8_t layer); //restore activeLayer to lockedLayer
virtual void lock(uint8_t layer); //set activeLayer and lock it virtual void lock(uint8_t layer); //set activeLayer and lock it

11
src/LayerStateInterface.h Normal file
View File

@ -0,0 +1,11 @@
#ifndef LAYERSTATEINTERFACE_H
#define LAYERSTATEINTERFACE_H
/* LayerStateInterface in an interface class
*/
class LayerStateInterface
{
public:
virtual uint8_t getActiveLayer()=0;
};
#endif

View File

@ -1,11 +0,0 @@
#ifndef STATELAYERSINTERFACE_H
#define STATELAYERSINTERFACE_H
/* StateLayersInterface in an interface class
*/
class StateLayersInterface
{
public:
virtual uint8_t getActiveLayer()=0;
};
#endif

View File

@ -26,7 +26,7 @@ Holding the fn key down makes it the active layer. Releasing the fn key restore
//Codes //Codes
#include <Code_Sc.h> #include <Code_Sc.h>
#include <StateLayers.h> #include <LayerState.h>
#include <Code_LayerHold.h> #include <Code_LayerHold.h>
#include <Key_LayeredKeysArray.h> #include <Key_LayeredKeysArray.h>
@ -57,15 +57,15 @@ enum assings Id numbers to the layers.
*/ */
enum layers { NORMAL, FN }; enum layers { NORMAL, FN };
/* /*
stateLayer keeps track of the active layer. The default layer number is 0. layerState keeps track of the active layer. The default layer number is 0.
*/ */
StateLayers stateLayer; LayerState layerState;
/* /*
The Code_LayerHold constructor parameter specifies a layer Id number and a StateLayer. The Code_LayerHold constructor parameter specifies a layer Id number and a LayerState.
When l_fn is pressed, it tells stateLayer to change the active layer to 1. When l_fn is pressed, it tells layerState to change the active layer to 1.
When l_fn is released, it tells stateLayer to restore the normal layer. When l_fn is released, it tells layerState to restore the normal layer.
*/ */
Code_LayerHold l_fn(FN, stateLayer); Code_LayerHold l_fn(FN, layerState);
// ---------------- SCAN CODES ----------------- // ---------------- SCAN CODES -----------------
Code_Sc s_a(KEY_A); Code_Sc s_a(KEY_A);
@ -102,15 +102,15 @@ Key* const ptrsCodes_01[] = { &s_b, &s_2 };
Key_LayeredKeysArray k_01(ptrsCodes_01); Key_LayeredKeysArray k_01(ptrsCodes_01);
/* /*
Key_LayeredKeysArray has a static variable refStateLayers defined here. Key_LayeredKeysArray has a static variable refLayerState defined here.
It is a reference to stateLayer. It is a reference to layerState.
*/ */
StateLayersInterface& Key_LayeredKeysArray::refStateLayers = stateLayer; LayerStateInterface& Key_LayeredKeysArray::refLayerState = layerState;
/* /*
HOW LAYERED OBJECTS WORK HOW LAYERED OBJECTS WORK
When a Key_LayeredKeysArray object is pressed, When a Key_LayeredKeysArray object is pressed,
it gets the active layer from stateLayer and then sends the scancode for the active layer. it gets the active layer from layerState and then sends the scancode for the active layer.
*/ */
// ------------------- ROWS -------------------- // ------------------- ROWS --------------------

View File

@ -26,7 +26,7 @@ Holding the fn key down makes it the active layer. Releasing the fn key restore
#include <Code_Sc.h> #include <Code_Sc.h>
#include <Code_ScS.h> #include <Code_ScS.h>
#include <Code_Shift.h> #include <Code_Shift.h>
#include <StateLayers.h> #include <LayerState.h>
#include <Code_LayerHold.h> #include <Code_LayerHold.h>
#include <Key_LayeredKeysArray.h> #include <Key_LayeredKeysArray.h>
@ -54,8 +54,8 @@ The CODES section instantiates six codes, one for each item in the layout:
// ---------------- LAYER CODE ----------------- // ---------------- LAYER CODE -----------------
enum layers { NORMAL, FN }; enum layers { NORMAL, FN };
StateLayers stateLayer; LayerState layerState;
Code_LayerHold l_fn(FN, stateLayer); Code_LayerHold l_fn(FN, layerState);
// ---------------- SCAN CODES ----------------- // ---------------- SCAN CODES -----------------
/* /*
@ -115,7 +115,7 @@ Key_LayeredKeysArray k_00(ptrsCodes_00);
Key* const ptrsCodes_01[] = { &s_b, &s_at }; Key* const ptrsCodes_01[] = { &s_b, &s_at };
Key_LayeredKeysArray k_01(ptrsCodes_01); Key_LayeredKeysArray k_01(ptrsCodes_01);
StateLayersInterface& Key_LayeredKeysArray::refStateLayers = stateLayer; LayerStateInterface& Key_LayeredKeysArray::refLayerState = layerState;
// ------------------- ROWS -------------------- // ------------------- ROWS --------------------
Key* const ptrsKeys_0[] = { &k_00, &k_01 }; Key* const ptrsKeys_0[] = { &k_00, &k_01 };

View File

@ -19,20 +19,20 @@ The following pseudo code has just enough detail to show how layer schemes work.
**Key_Layer** objects select the active layer. **Key_Layer** objects select the active layer.
The "layer" variable is a layer id number. The "layer" variable is a layer id number.
When a Key_Layer object is pressed, it tells StateLayer to update the active layer. When a Key_Layer object is pressed, it tells LayerState to update the active layer.
``` ```
class Key_Layer class Key_Layer
{ {
int layer int layer
StateLayer& refStateLayer LayerState& refLayerState
press() { refStateLayer.setActiveLayer(layer) } press() { refLayerState.setActiveLayer(layer) }
} }
``` ```
**StateLayer** objects keep track of the active layer. **LayerState** objects keep track of the active layer.
A StateLayer's activeLayer is always up to date. A LayerState's activeLayer is always up to date.
``` ```
class StateLayer class LayerState
{ {
int activeLayer int activeLayer
setActiveLayer(int layer) { activeLayer = layer } setActiveLayer(int layer) { activeLayer = layer }
@ -42,13 +42,13 @@ class StateLayer
**Key_Layered** objects contain multiple Key pointers, one Key pointer for each layer. **Key_Layered** objects contain multiple Key pointers, one Key pointer for each layer.
Layer ids are used like indexes to select the appropriate key. Layer ids are used like indexes to select the appropriate key.
When a Key_Layered object is pressed, it gets the active layer from StateLayer, and then sends the key of the active layer. When a Key_Layered object is pressed, it gets the active layer from LayerState, and then sends the key of the active layer.
``` ```
class Key_Layered class Key_Layered
{ {
Key** ptrsKeys //array of Key pointers, one Key pointer per layer Key** ptrsKeys //array of Key pointers, one Key pointer per layer
StateLayer& refStateLayer LayerState& refLayerState
press() { layer = refStateLayer.getActiveLayer() press() { layer = refLayerState.getActiveLayer()
ptrsKeys[layer]->press() } ptrsKeys[layer]->press() }
} }
``` ```
@ -63,7 +63,7 @@ Dependency diagram
| |
v v
+------------+ +------------+
| StateLayer | | LayerState |
+------------+ +------------+
^ ^
| |
@ -81,8 +81,8 @@ Key_Layer classes include:
* Code_LayerHold * Code_LayerHold
* Code_LayerLock * Code_LayerLock
A basic StateLayer class is: A basic LayerState class is:
* StateLayer * LayerState
Key_Layered classes include: Key_Layered classes include:
* Code_LayeredScSc * Code_LayeredScSc
@ -108,7 +108,7 @@ Example single-layer Code classes include:
## A simple multi-layer keybrd sketch ## A simple multi-layer keybrd sketch
The [keybrd_3a_multi-layer_annotated.ino](keybrd_3a_multi-layer_annotated/keybrd_3a_multi-layer_annotated.ino) The [keybrd_3a_multi-layer_annotated.ino](keybrd_3a_multi-layer_annotated/keybrd_3a_multi-layer_annotated.ino)
sketch uses three layer-scheme classes: sketch uses three layer-scheme classes:
* StateLayers * LayerState
* Code_LayerHold * Code_LayerHold
* Key_LayeredKeysArray * Key_LayeredKeysArray