annotate Macro/PartialMap/macro.c @ 201:326f75709d10

Fixing release state for keys - Layers were not disabling because function was only called on press/hold - Disabled layer shift function on key hold - Fixed the press/hold/release states for other layer capabilities and USB code send
author Jacob Alexander <jacob.alexander@virtualinstruments.com>
date Wed, 10 Sep 2014 20:53:30 -0700
parents 559a467f6d57
children 1a68a9a04ad3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1 /* Copyright (C) 2014 by Jacob Alexander
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
2 *
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
3 * This file is free software: you can redistribute it and/or modify
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
4 * it under the terms of the GNU General Public License as published by
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
5 * the Free Software Foundation, either version 3 of the License, or
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
6 * (at your option) any later version.
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
7 *
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
8 * This file is distributed in the hope that it will be useful,
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
11 * GNU General Public License for more details.
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
12 *
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
13 * You should have received a copy of the GNU General Public License
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
14 * along with this file. If not, see <http://www.gnu.org/licenses/>.
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
15 */
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
16
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
17 // ----- Includes -----
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
18
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
19 // Compiler Includes
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
20 #include <Lib/MacroLib.h>
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
21
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
22 // Project Includes
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
23 #include <cli.h>
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
24 #include <led.h>
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
25 #include <print.h>
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
26 #include <scan_loop.h>
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
27
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
28 // Keymaps
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
29 #include "usb_hid.h"
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
30 #include <defaultMap.h>
199
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
31 #include "templateKeymap.h" // TODO Use actual generated version
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
32 //#include "generatedKeymap.h" // TODO Use actual generated version
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
33
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
34 // Local Includes
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
35 #include "macro.h"
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
36
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
37
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
38
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
39 // ----- Function Declarations -----
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
40
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
41 void cliFunc_capList ( char* args );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
42 void cliFunc_capSelect ( char* args );
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
43 void cliFunc_keyHold ( char* args );
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
44 void cliFunc_keyPress ( char* args );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
45 void cliFunc_keyRelease( char* args );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
46 void cliFunc_layerList ( char* args );
183
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
47 void cliFunc_layerState( char* args );
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
48 void cliFunc_macroDebug( char* args );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
49 void cliFunc_macroList ( char* args );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
50 void cliFunc_macroProc ( char* args );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
51 void cliFunc_macroShow ( char* args );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
52 void cliFunc_macroStep ( char* args );
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
53
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
54
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
55
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
56 // ----- Enums -----
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
57
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
58 // Bit positions are important, passes (correct key) always trump incorrect key votes
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
59 typedef enum TriggerMacroVote {
197
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
60 TriggerMacroVote_Release = 0x10, // Correct key
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
61 TriggerMacroVote_PassRelease = 0x18, // Correct key (both pass and release)
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
62 TriggerMacroVote_Pass = 0x8, // Correct key
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
63 TriggerMacroVote_DoNothingRelease = 0x4, // Incorrect key
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
64 TriggerMacroVote_DoNothing = 0x2, // Incorrect key
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
65 TriggerMacroVote_Fail = 0x1, // Incorrect key
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
66 TriggerMacroVote_Invalid = 0x0, // Invalid state
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
67 } TriggerMacroVote;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
68
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
69 typedef enum TriggerMacroEval {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
70 TriggerMacroEval_DoNothing,
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
71 TriggerMacroEval_DoResult,
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
72 TriggerMacroEval_DoResultAndRemove,
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
73 TriggerMacroEval_Remove,
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
74 } TriggerMacroEval;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
75
190
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
76 typedef enum ResultMacroEval {
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
77 ResultMacroEval_DoNothing,
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
78 ResultMacroEval_Remove,
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
79 } ResultMacroEval;
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
80
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
81
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
82
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
83 // ----- Variables -----
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
84
132
e08d7b586ea3 Adding analog.c lib from teensyduino.
Jacob Alexander <haata@kiibohd.com>
parents: 126
diff changeset
85 // Macro Module command dictionary
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
86 const char macroCLIDictName[] = "Macro Module Commands";
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
87 const CLIDictItem macroCLIDict[] = {
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
88 { "capList", "Prints an indexed list of all non USB keycode capabilities.", cliFunc_capList },
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
89 { "capSelect", "Triggers the specified capabilities. First two args are state and stateType." NL "\t\t\033[35mK11\033[0m Keyboard Capability 0x0B", cliFunc_capSelect },
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
90 { "keyHold", "Send key-hold events to the macro module. Duplicates have undefined behaviour." NL "\t\t\033[35mS10\033[0m Scancode 0x0A", cliFunc_keyHold },
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
91 { "keyPress", "Send key-press events to the macro module. Duplicates have undefined behaviour." NL "\t\t\033[35mS10\033[0m Scancode 0x0A", cliFunc_keyPress },
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
92 { "keyRelease", "Send key-release event to macro module. Duplicates have undefined behaviour." NL "\t\t\033[35mS10\033[0m Scancode 0x0A", cliFunc_keyRelease },
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
93 { "layerList", "List available layers.", cliFunc_layerList },
183
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
94 { "layerState", "Modify specified indexed layer state <layer> <state byte>." NL "\t\t\033[35mL2\033[0m Indexed Layer 0x02" NL "\t\t0 Off, 1 Shift, 2 Latch, 4 Lock States", cliFunc_layerState },
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
95 { "macroDebug", "Disables/Enables sending USB keycodes to the Output Module and prints U/K codes.", cliFunc_macroDebug },
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
96 { "macroList", "List the defined trigger and result macros.", cliFunc_macroList },
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
97 { "macroProc", "Pause/Resume macro processing.", cliFunc_macroProc },
181
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
98 { "macroShow", "Show the macro corresponding to the given index." NL "\t\t\033[35mT16\033[0m Indexed Trigger Macro 0x10, \033[35mR12\033[0m Indexed Result Macro 0x0C", cliFunc_macroShow },
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
99 { "macroStep", "Do N macro processing steps. Defaults to 1.", cliFunc_macroStep },
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
100 { 0, 0, 0 } // Null entry for dictionary end
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
101 };
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
102
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
103
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
104 // Macro debug flag - If set, clears the USB Buffers after signalling processing completion
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
105 uint8_t macroDebugMode = 0;
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
106
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
107 // Macro pause flag - If set, the macro module pauses processing, unless unset, or the step counter is non-zero
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
108 uint8_t macroPauseMode = 0;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
109
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
110 // Macro step counter - If non-zero, the step counter counts down every time the macro module does one processing loop
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
111 unsigned int macroStepCounter = 0;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
112
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
113
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
114 // Key Trigger List Buffer
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
115 TriggerGuide macroTriggerListBuffer[ MaxScanCode ];
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
116 uint8_t macroTriggerListBufferSize = 0;
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
117
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
118 // Pending Trigger Macro Index List
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
119 // * Any trigger macros that need processing from a previous macro processing loop
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
120 // TODO, figure out a good way to scale this array size without wasting too much memory, but not rejecting macros
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
121 // Possibly could be calculated by the KLL compiler
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
122 // XXX It may be possible to calculate the worst case using the KLL compiler
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
123 unsigned int macroTriggerMacroPendingList[ TriggerMacroNum ] = { 0 };
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
124 unsigned int macroTriggerMacroPendingListSize = 0;
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
125
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
126 // Layer Index Stack
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
127 // * When modifying layer state and the state is non-0x0, the stack must be adjusted
199
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
128 unsigned int macroLayerIndexStack[ LayerNum + 1 ] = { 0 };
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
129 unsigned int macroLayerIndexStackSize = 0;
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
130
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
131 // Pending Result Macro Index List
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
132 // * Any result macro that needs processing from a previous macro processing loop
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
133 unsigned int macroResultMacroPendingList[ ResultMacroNum ] = { 0 };
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
134 unsigned int macroResultMacroPendingListSize = 0;
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
135
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
136
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
137
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
138 // ----- Capabilities -----
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
139
199
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
140 // Sets the given layer with the specified layerState
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
141 void Macro_layerState( uint8_t state, uint8_t stateType, uint16_t layer, uint8_t layerState )
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
142 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
143 // Is layer in the LayerIndexStack?
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
144 uint8_t inLayerIndexStack = 0;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
145 unsigned int stackItem = 0;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
146 while ( stackItem < macroLayerIndexStackSize )
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
147 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
148 // Flag if layer is already in the LayerIndexStack
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
149 if ( macroLayerIndexStack[ stackItem ] == layer )
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
150 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
151 inLayerIndexStack = 1;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
152 break;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
153 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
154
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
155 // Increment to next item
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
156 stackItem++;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
157 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
158
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
159 // Toggle Layer State Byte
199
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
160 if ( LayerIndex[ layer ].state & layerState )
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
161 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
162 // Unset
199
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
163 LayerIndex[ layer ].state &= ~layerState;
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
164 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
165 else
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
166 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
167 // Set
199
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
168 LayerIndex[ layer ].state |= layerState;
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
169 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
170
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
171 // If the layer was not in the LayerIndexStack add it
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
172 if ( !inLayerIndexStack )
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
173 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
174 macroLayerIndexStack[ macroLayerIndexStackSize++ ] = layer;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
175 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
176
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
177 // If the layer is in the LayerIndexStack and the state is 0x00, remove
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
178 if ( LayerIndex[ layer ].state == 0x00 && inLayerIndexStack )
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
179 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
180 // Remove the layer from the LayerIndexStack
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
181 // Using the already positioned stackItem variable from the loop above
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
182 while ( stackItem < macroLayerIndexStackSize )
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
183 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
184 macroLayerIndexStack[ stackItem ] = macroLayerIndexStack[ stackItem + 1 ];
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
185 stackItem++;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
186 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
187
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
188 // Reduce LayerIndexStack size
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
189 macroLayerIndexStackSize--;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
190 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
191 }
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
192
199
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
193 // Modifies the specified Layer control byte
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
194 // Argument #1: Layer Index -> uint16_t
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
195 // Argument #2: Layer State -> uint8_t
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
196 void Macro_layerState_capability( uint8_t state, uint8_t stateType, uint8_t *args )
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
197 {
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
198 // Display capability name
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
199 if ( stateType == 0xFF && state == 0xFF )
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
200 {
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
201 print("Macro_layerState(layerIndex,layerState)");
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
202 return;
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
203 }
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
204
201
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
205 // Only use capability on press or release
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
206 // TODO Analog
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
207 // XXX This may cause issues, might be better to implement state table here to decide -HaaTa
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
208 if ( stateType == 0x00 && state == 0x02 ) // Hold condition
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
209 return;
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
210
199
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
211 // Get layer index from arguments
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
212 // Cast pointer to uint8_t to unsigned int then access that memory location
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
213 uint16_t layer = *(uint16_t*)(&args[0]);
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
214
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
215 // Get layer toggle byte
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
216 uint8_t layerState = args[ sizeof(uint16_t) ];
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
217
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
218 Macro_layerState( state, stateType, layer, layerState );
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
219 }
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
220
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
221
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
222 // Latches given layer
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
223 // Argument #1: Layer Index -> uint16_t
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
224 void Macro_layerLatch_capability( uint8_t state, uint8_t stateType, uint8_t *args )
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
225 {
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
226 // Display capability name
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
227 if ( stateType == 0xFF && state == 0xFF )
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
228 {
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
229 print("Macro_layerLatch(layerIndex)");
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
230 return;
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
231 }
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
232
201
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
233 // Only use capability on press
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
234 // TODO Analog
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
235 // XXX To make sense, this code be on press or release. Or it could even be a sticky shift (why? dunno) -HaaTa
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
236 if ( stateType == 0x00 && state != 0x01 ) // All normal key conditions except press
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
237 return;
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
238
199
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
239 // Get layer index from arguments
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
240 // Cast pointer to uint8_t to unsigned int then access that memory location
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
241 uint16_t layer = *(uint16_t*)(&args[0]);
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
242
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
243 Macro_layerState( state, stateType, layer, 0x02 );
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
244 }
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
245
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
246
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
247 // Locks given layer
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
248 // Argument #1: Layer Index -> uint16_t
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
249 void Macro_layerLock_capability( uint8_t state, uint8_t stateType, uint8_t *args )
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
250 {
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
251 // Display capability name
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
252 if ( stateType == 0xFF && state == 0xFF )
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
253 {
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
254 print("Macro_layerLock(layerIndex)");
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
255 return;
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
256 }
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
257
201
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
258 // Only use capability on press
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
259 // TODO Analog
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
260 // XXX Could also be on release, but that's sorta dumb -HaaTa
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
261 if ( stateType == 0x00 && state != 0x01 ) // All normal key conditions except press
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
262 return;
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
263
199
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
264 // Get layer index from arguments
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
265 // Cast pointer to uint8_t to unsigned int then access that memory location
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
266 uint16_t layer = *(uint16_t*)(&args[0]);
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
267
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
268 Macro_layerState( state, stateType, layer, 0x04 );
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
269 }
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
270
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
271
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
272 // Shifts given layer
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
273 // Argument #1: Layer Index -> uint16_t
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
274 void Macro_layerShift_capability( uint8_t state, uint8_t stateType, uint8_t *args )
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
275 {
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
276 // Display capability name
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
277 if ( stateType == 0xFF && state == 0xFF )
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
278 {
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
279 print("Macro_layerShift(layerIndex)");
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
280 return;
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
281 }
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
282
201
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
283 // Only use capability on press or release
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
284 // TODO Analog
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
285 if ( stateType == 0x00 && ( state == 0x00 || state == 0x02 ) ) // Only pass press or release conditions
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
286 return;
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
287
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
288 print("YAY");
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
289
199
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
290 // Get layer index from arguments
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
291 // Cast pointer to uint8_t to unsigned int then access that memory location
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
292 uint16_t layer = *(uint16_t*)(&args[0]);
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
293
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
294 Macro_layerState( state, stateType, layer, 0x01 );
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
295 }
559a467f6d57 Preparing for kll compiler usage
Jacob Alexander <haata@kiibohd.com>
parents: 197
diff changeset
296
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
297
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
298
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
299 // ----- Functions -----
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
300
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
301 // Looks up the trigger list for the given scan code (from the active layer)
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
302 // NOTE: Calling function must handle the NULL pointer case
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
303 unsigned int *Macro_layerLookup( uint8_t scanCode )
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
304 {
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
305 // If no trigger macro is defined at the given layer, fallthrough to the next layer
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
306 for ( unsigned int layerIndex = 0; layerIndex < macroLayerIndexStackSize; layerIndex++ )
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
307 {
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
308 // Lookup Layer
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
309 Layer *layer = &LayerIndex[ macroLayerIndexStack[ layerIndex ] ];
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
310
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
311 // Check if latch has been pressed for this layer
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
312 // XXX Regardless of whether a key is found, the latch is removed on first lookup
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
313 uint8_t latch = layer->state & 0x02;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
314 if ( latch )
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
315 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
316 layer->state &= ~0x02;
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
317 }
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
318
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
319 // Only use layer, if state is valid
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
320 // XOR each of the state bits
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
321 // If only two are enabled, do not use this state
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
322 if ( (layer->state & 0x01) ^ (latch>>1) ^ ((layer->state & 0x04)>>2) )
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
323 {
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
324 // Lookup layer
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
325 unsigned int **map = (unsigned int**)layer->triggerMap;
191
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
326
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
327 // Determine if layer has key defined
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
328 if ( map != 0 && *map[ scanCode ] != 0 )
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
329 return map[ scanCode ];
3404be65670b Adding generic layerToggle and USB Key Output capabilities.
Jacob Alexander <haata@kiibohd.com>
parents: 190
diff changeset
330 }
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
331 }
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
332
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
333 // Do lookup on default layer
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
334 unsigned int **map = (unsigned int**)LayerIndex[0].triggerMap;
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
335
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
336 // Determine if layer has key defined
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
337 if ( map == 0 && *map[ scanCode ] == 0 )
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
338 {
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
339 erro_msg("Scan Code has no defined Trigger Macro: ");
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
340 printHex( scanCode );
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
341 return 0;
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
342 }
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
343
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
344 // Return lookup result
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
345 return map[ scanCode ];
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
346 }
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
347
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
348
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
349 // Update the scancode key state
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
350 // States:
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
351 // * 0x00 - Off
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
352 // * 0x01 - Pressed
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
353 // * 0x02 - Held
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
354 // * 0x03 - Released
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
355 // * 0x04 - Unpressed (this is currently ignored)
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
356 inline void Macro_keyState( uint8_t scanCode, uint8_t state )
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
357 {
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
358 // Only add to macro trigger list if one of three states
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
359 switch ( state )
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
360 {
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
361 case 0x01: // Pressed
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
362 case 0x02: // Held
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
363 case 0x03: // Released
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
364 macroTriggerListBuffer[ macroTriggerListBufferSize ].scanCode = scanCode;
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
365 macroTriggerListBuffer[ macroTriggerListBufferSize ].state = state;
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
366 macroTriggerListBuffer[ macroTriggerListBufferSize ].type = 0x00; // Normal key
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
367 macroTriggerListBufferSize++;
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
368 break;
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
369 }
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
370 }
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
371
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
372
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
373 // Update the scancode analog state
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
374 // States:
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
375 // * 0x00 - Off
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
376 // * 0x01 - Released
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
377 // * 0x02-0xFF - Analog value (low to high)
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
378 inline void Macro_analogState( uint8_t scanCode, uint8_t state )
166
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
379 {
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
380 // Only add to macro trigger list if non-off
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
381 if ( state != 0x00 )
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
382 {
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
383 macroTriggerListBuffer[ macroTriggerListBufferSize ].scanCode = scanCode;
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
384 macroTriggerListBuffer[ macroTriggerListBufferSize ].state = state;
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
385 macroTriggerListBuffer[ macroTriggerListBufferSize ].type = 0x02; // Analog key
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
386 macroTriggerListBufferSize++;
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
387 }
166
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
388 }
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
389
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
390
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
391 // Update led state
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
392 // States:
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
393 // * 0x00 - Off
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
394 // * 0x01 - On
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
395 inline void Macro_ledState( uint8_t ledCode, uint8_t state )
166
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
396 {
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
397 // Only add to macro trigger list if non-off
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
398 if ( state != 0x00 )
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
399 {
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
400 macroTriggerListBuffer[ macroTriggerListBufferSize ].scanCode = ledCode;
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
401 macroTriggerListBuffer[ macroTriggerListBufferSize ].state = state;
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
402 macroTriggerListBuffer[ macroTriggerListBufferSize ].type = 0x01; // LED key
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
403 macroTriggerListBufferSize++;
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
404 }
166
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
405 }
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
406
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
407
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
408 // Append result macro to pending list, checking for duplicates
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
409 // Do nothing if duplicate
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
410 inline void Macro_appendResultMacroToPendingList( TriggerMacro *triggerMacro )
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
411 {
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
412 // Lookup result macro index
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
413 unsigned int resultMacroIndex = triggerMacro->result;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
414
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
415 // Iterate through result macro pending list, making sure this macro hasn't been added yet
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
416 for ( unsigned int macro = 0; macro < macroResultMacroPendingListSize; macro++ )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
417 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
418 // If duplicate found, do nothing
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
419 if ( macroResultMacroPendingList[ macro ] == resultMacroIndex )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
420 return;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
421 }
166
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
422
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
423 // No duplicates found, add to pending list
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
424 macroResultMacroPendingList[ macroResultMacroPendingListSize++ ] = resultMacroIndex;
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
425
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
426 // Lookup scanCode of the last key in the last combo
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
427 unsigned int pos = 0;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
428 for ( uint8_t comboLength = triggerMacro->guide[0]; comboLength > 0; )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
429 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
430 pos += TriggerGuideSize * comboLength + 1;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
431 comboLength = triggerMacro->guide[ pos ];
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
432 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
433
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
434 uint8_t scanCode = ((TriggerGuide*)&triggerMacro->guide[ pos - TriggerGuideSize ])->scanCode;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
435
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
436 // Lookup scanCode in buffer list for the current state and stateType
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
437 for ( uint8_t keyIndex = 0; keyIndex < macroTriggerListBufferSize; keyIndex++ )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
438 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
439 if ( macroTriggerListBuffer[ keyIndex ].scanCode == scanCode )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
440 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
441 ResultMacroList[ resultMacroIndex ].state = macroTriggerListBuffer[ keyIndex ].state;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
442 ResultMacroList[ resultMacroIndex ].stateType = macroTriggerListBuffer[ keyIndex ].type;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
443 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
444 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
445
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
446 // Reset the macro position
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
447 ResultMacroList[ resultMacroIndex ].pos = 0;
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
448 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
449
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
450
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
451 // Determine if long ResultMacro (more than 1 seqence element)
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
452 inline uint8_t Macro_isLongResultMacro( ResultMacro *macro )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
453 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
454 // Check the second sequence combo length
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
455 // If non-zero return non-zero (long sequence)
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
456 // 0 otherwise (short sequence)
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
457 unsigned int position = 1;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
458 for ( unsigned int result = 0; result < macro->guide[0]; result++ )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
459 position += ResultGuideSize( (ResultGuide*)&macro->guide[ position ] );
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
460 return macro->guide[ position ];
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
461 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
462
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
463
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
464 // Determine if long TriggerMacro (more than 1 sequence element)
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
465 inline uint8_t Macro_isLongTriggerMacro( TriggerMacro *macro )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
466 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
467 // Check the second sequence combo length
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
468 // If non-zero return non-zero (long sequence)
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
469 // 0 otherwise (short sequence)
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
470 return macro->guide[ macro->guide[0] * TriggerGuideSize + 1 ];
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
471 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
472
166
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
473
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
474 // Votes on the given key vs. guide, short macros
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
475 inline TriggerMacroVote Macro_evalShortTriggerMacroVote( TriggerGuide *key, TriggerGuide *guide )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
476 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
477 // Depending on key type
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
478 switch ( guide->type )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
479 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
480 // Normal State Type
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
481 case 0x00:
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
482 // For short TriggerMacros completely ignore incorrect keys
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
483 if ( guide->scanCode == key->scanCode )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
484 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
485 switch ( key->state )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
486 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
487 // Correct key, pressed, possible passing
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
488 case 0x01:
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
489 return TriggerMacroVote_Pass;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
490
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
491 // Correct key, held, possible passing or release
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
492 case 0x02:
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
493 return TriggerMacroVote_PassRelease;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
494
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
495 // Correct key, released, possible release
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
496 case 0x03:
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
497 return TriggerMacroVote_Release;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
498 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
499 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
500
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
501 return TriggerMacroVote_DoNothing;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
502
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
503 // LED State Type
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
504 case 0x01:
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
505 erro_print("LED State Type - Not implemented...");
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
506 break;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
507
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
508 // Analog State Type
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
509 case 0x02:
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
510 erro_print("Analog State Type - Not implemented...");
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
511 break;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
512
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
513 // Invalid State Type
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
514 default:
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
515 erro_print("Invalid State Type. This is a bug.");
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
516 break;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
517 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
518
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
519 // XXX Shouldn't reach here
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
520 return TriggerMacroVote_Invalid;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
521 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
522
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
523
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
524 // Votes on the given key vs. guide, long macros
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
525 // A long macro is defined as a guide with more than 1 combo
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
526 inline TriggerMacroVote Macro_evalLongTriggerMacroVote( TriggerGuide *key, TriggerGuide *guide )
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
527 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
528 // Depending on key type
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
529 switch ( guide->type )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
530 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
531 // Normal State Type
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
532 case 0x00:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
533 // Depending on the state of the buffered key, make voting decision
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
534 // Incorrect key
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
535 if ( guide->scanCode != key->scanCode )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
536 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
537 switch ( key->state )
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
538 {
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
539 // Wrong key, pressed, fail
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
540 case 0x01:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
541 return TriggerMacroVote_Fail;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
542
197
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
543 // Wrong key, held, do not pass (no effect)
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
544 case 0x02:
197
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
545 return TriggerMacroVote_DoNothing;
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
546
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
547 // Wrong key released, fail out if pos == 0
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
548 case 0x03:
197
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
549 return TriggerMacroVote_DoNothing | TriggerMacroVote_DoNothingRelease;
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
550 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
551 }
166
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
552
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
553 // Correct key
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
554 else
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
555 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
556 switch ( key->state )
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
557 {
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
558 // Correct key, pressed, possible passing
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
559 case 0x01:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
560 return TriggerMacroVote_Pass;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
561
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
562 // Correct key, held, possible passing or release
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
563 case 0x02:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
564 return TriggerMacroVote_PassRelease;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
565
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
566 // Correct key, released, possible release
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
567 case 0x03:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
568 return TriggerMacroVote_Release;
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
569 }
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
570 }
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
571
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
572 break;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
573
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
574 // LED State Type
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
575 case 0x01:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
576 erro_print("LED State Type - Not implemented...");
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
577 break;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
578
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
579 // Analog State Type
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
580 case 0x02:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
581 erro_print("Analog State Type - Not implemented...");
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
582 break;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
583
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
584 // Invalid State Type
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
585 default:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
586 erro_print("Invalid State Type. This is a bug.");
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
587 break;
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
588 }
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
589
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
590 // XXX Shouldn't reach here
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
591 return TriggerMacroVote_Invalid;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
592 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
593
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
594
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
595 // Evaluate/Update TriggerMacro
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
596 inline TriggerMacroEval Macro_evalTriggerMacro( unsigned int triggerMacroIndex )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
597 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
598 // Lookup TriggerMacro
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
599 TriggerMacro *macro = &TriggerMacroList[ triggerMacroIndex ];
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
600
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
601 // Check if macro has finished and should be incremented sequence elements
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
602 if ( macro->state == TriggerMacro_Release )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
603 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
604 macro->state = TriggerMacro_Waiting;
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
605 macro->pos = macro->pos + macro->guide[ macro->pos ] * TriggerGuideSize + 1;
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
606 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
607
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
608 // Current Macro position
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
609 unsigned int pos = macro->pos;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
610
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
611 // Length of the combo being processed
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
612 uint8_t comboLength = macro->guide[ pos ] * TriggerGuideSize;
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
613
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
614 // If no combo items are left, remove the TriggerMacro from the pending list
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
615 if ( comboLength == 0 )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
616 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
617 return TriggerMacroEval_Remove;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
618 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
619
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
620 // Check if this is a long Trigger Macro
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
621 uint8_t longMacro = Macro_isLongTriggerMacro( macro );
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
622
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
623 // Iterate through the items in the combo, voting the on the key state
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
624 // If any of the pressed keys do not match, fail the macro
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
625 //
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
626 // The macro is waiting for input when in the TriggerMacro_Waiting state
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
627 // Once all keys have been pressed/held (only those keys), entered TriggerMacro_Press state (passing)
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
628 // Transition to the next combo (if it exists) when a single key is released (TriggerMacro_Release state)
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
629 // On scan after position increment, change to TriggerMacro_Waiting state
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
630 // TODO Add support for system LED states (NumLock, CapsLock, etc.)
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
631 // TODO Add support for analog key states
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
632 // TODO Add support for 0x00 Key state (not pressing a key, not all that useful in general)
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
633 // TODO Add support for Press/Hold/Release differentiation when evaluating (not sure if useful)
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
634 TriggerMacroVote overallVote = TriggerMacroVote_Invalid;
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
635 for ( uint8_t comboItem = pos + 1; comboItem < pos + comboLength + 1; comboItem += TriggerGuideSize )
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
636 {
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
637 // Assign TriggerGuide element (key type, state and scancode)
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
638 TriggerGuide *guide = (TriggerGuide*)(&macro->guide[ comboItem ]);
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
639
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
640 TriggerMacroVote vote = TriggerMacroVote_Invalid;
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
641 // Iterate through the key buffer, comparing to each key in the combo
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
642 for ( uint8_t key = 0; key < macroTriggerListBufferSize; key++ )
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
643 {
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
644 // Lookup key information
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
645 TriggerGuide *keyInfo = &macroTriggerListBuffer[ key ];
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
646
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
647 // If vote is a pass (>= 0x08, no more keys in the combo need to be looked at)
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
648 // Also mask all of the non-passing votes
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
649 vote |= longMacro
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
650 ? Macro_evalLongTriggerMacroVote( keyInfo, guide )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
651 : Macro_evalShortTriggerMacroVote( keyInfo, guide );
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
652 if ( vote >= TriggerMacroVote_Pass )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
653 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
654 vote &= TriggerMacroVote_Release | TriggerMacroVote_PassRelease | TriggerMacroVote_Pass;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
655 break;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
656 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
657 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
658
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
659 // If no pass vote was found after scanning all of the keys
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
660 // Fail the combo, if this is a short macro (long macros already will have a fail vote)
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
661 if ( !longMacro && vote < TriggerMacroVote_Pass )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
662 vote |= TriggerMacroVote_Fail;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
663
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
664 // After voting, append to overall vote
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
665 overallVote |= vote;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
666 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
667
197
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
668 // If no pass vote was found after scanning the entire combo
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
669 // And this is the first position in the combo, just remove it (nothing important happened)
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
670 if ( longMacro && overallVote & TriggerMacroVote_DoNothingRelease && pos == 0 )
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
671 overallVote |= TriggerMacroVote_Fail;
1ebb6fb5f74f All basic macros tested and working!
Jacob Alexander <haata@kiibohd.com>
parents: 196
diff changeset
672
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
673 // Decide new state of macro after voting
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
674 // Fail macro, remove from pending list
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
675 if ( overallVote & TriggerMacroVote_Fail )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
676 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
677 return TriggerMacroEval_Remove;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
678 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
679 // Do nothing, incorrect key is being held or released
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
680 else if ( overallVote & TriggerMacroVote_DoNothing && longMacro )
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
681 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
682 // Just doing nothing :)
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
683 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
684 // If passing and in Waiting state, set macro state to Press
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
685 else if ( overallVote & TriggerMacroVote_Pass
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
686 && ( macro->state == TriggerMacro_Waiting || macro->state == TriggerMacro_Press ) )
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
687 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
688 macro->state = TriggerMacro_Press;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
689
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
690 // If in press state, and this is the final combo, send request for ResultMacro
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
691 // Check to see if the result macro only has a single element
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
692 // If this result macro has more than 1 key, only send once
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
693 // TODO Add option to have long macro repeat rate
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
694 if ( macro->guide[ pos + comboLength + 1 ] == 0 )
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
695 {
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
696 // Long result macro (more than 1 combo)
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
697 if ( Macro_isLongResultMacro( &ResultMacroList[ macro->result ] ) )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
698 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
699 // Only ever trigger result once, on press
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
700 if ( overallVote == TriggerMacroVote_Pass )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
701 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
702 return TriggerMacroEval_DoResultAndRemove;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
703 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
704 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
705 // Short result macro
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
706 else
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
707 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
708 // Only trigger result once, on press, if long trigger (more than 1 combo)
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
709 if ( Macro_isLongTriggerMacro( macro ) )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
710 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
711 return TriggerMacroEval_DoResultAndRemove;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
712 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
713 // Otherwise, trigger result continuously
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
714 else
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
715 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
716 return TriggerMacroEval_DoResult;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
717 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
718 }
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
719 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
720 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
721 // If ready for transition and in Press state, set to Waiting and increment combo position
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
722 // Position is incremented (and possibly remove the macro from the pending list) on the next iteration
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
723 else if ( overallVote & TriggerMacroVote_Release && macro->state == TriggerMacro_Press )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
724 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
725 macro->state = TriggerMacro_Release;
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
726
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
727 // If this is the last combo in the sequence, remove from the pending list
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
728 if ( macro->guide[ macro->pos + macro->guide[ macro->pos ] * TriggerGuideSize + 1 ] == 0 )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
729 return TriggerMacroEval_Remove;
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
730 }
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
731 // Otherwise, just remove the macro on key release
201
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
732 // One more result has to be called to indicate to the ResultMacro that the key transitioned to the release state
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
733 else if ( overallVote & TriggerMacroVote_Release )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
734 {
201
326f75709d10 Fixing release state for keys
Jacob Alexander <jacob.alexander@virtualinstruments.com>
parents: 199
diff changeset
735 return TriggerMacroEval_DoResultAndRemove;
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
736 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
737
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
738 // If this is a short macro, just remove it
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
739 // The state can be rebuilt on the next iteration
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
740 if ( !longMacro )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
741 return TriggerMacroEval_Remove;
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
742
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
743 return TriggerMacroEval_DoNothing;
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
744 }
166
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
745
2fba36caf039 Initial work for KLL macro support
Jacob Alexander <haata@kiibohd.com>
parents: 159
diff changeset
746
185
68f3dc0cddd0 Macro cleanup.
Jacob Alexander <haata@kiibohd.com>
parents: 184
diff changeset
747 // Evaluate/Update ResultMacro
190
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
748 inline ResultMacroEval Macro_evalResultMacro( unsigned int resultMacroIndex )
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
749 {
190
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
750 // Lookup ResultMacro
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
751 ResultMacro *macro = &ResultMacroList[ resultMacroIndex ];
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
752
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
753 // Current Macro position
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
754 unsigned int pos = macro->pos;
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
755
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
756 // Length of combo being processed
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
757 uint8_t comboLength = macro->guide[ pos ];
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
758
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
759 // Function Counter, used to keep track of the combo items processed
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
760 unsigned int funcCount = 0;
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
761
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
762 // Combo Item Position within the guide
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
763 unsigned int comboItem = pos + 1;
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
764
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
765 // Iterate through the Result Combo
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
766 while ( funcCount < comboLength )
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
767 {
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
768 // Assign TriggerGuide element (key type, state and scancode)
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
769 ResultGuide *guide = (ResultGuide*)(&macro->guide[ comboItem ]);
190
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
770
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
771 // Do lookup on capability function
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
772 void (*capability)(uint8_t, uint8_t, uint8_t*) = (void(*)(uint8_t, uint8_t, uint8_t*))(CapabilitiesList[ guide->index ].func);
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
773
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
774 // Call capability
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
775 capability( macro->state, macro->stateType, &guide->args );
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
776
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
777 // Increment counters
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
778 funcCount++;
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
779 comboItem += ResultGuideSize( (ResultGuide*)(&macro->guide[ comboItem ]) );
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
780 }
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
781
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
782 // Move to next item in the sequence
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
783 macro->pos = comboItem;
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
784
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
785 // If the ResultMacro is finished, remove
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
786 if ( macro->guide[ comboItem ] == 0 )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
787 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
788 return ResultMacroEval_Remove;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
789 }
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
790
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
791 // Otherwise leave the macro in the list
190
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
792 return ResultMacroEval_DoNothing;
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
793 }
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
794
159
84beeecd2c94 Kishsaver is fully working with DPH!
Jacob Alexander <haata@kiibohd.com>
parents: 150
diff changeset
795
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
796 // Update pending trigger list
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
797 inline void Macro_updateTriggerMacroPendingList()
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
798 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
799 // Iterate over the macroTriggerListBuffer to add any new Trigger Macros to the pending list
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
800 for ( uint8_t key = 0; key < macroTriggerListBufferSize; key++ )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
801 {
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
802 // TODO LED States
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
803 // TODO Analog Switches
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
804 // Only add TriggerMacro to pending list if key was pressed (not held, released or off)
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
805 if ( macroTriggerListBuffer[ key ].state == 0x00 && macroTriggerListBuffer[ key ].state != 0x01 )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
806 continue;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
807
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
808 // Lookup Trigger List
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
809 unsigned int *triggerList = Macro_layerLookup( macroTriggerListBuffer[ key ].scanCode );
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
810
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
811 // Number of Triggers in list
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
812 unsigned int triggerListSize = triggerList[0];
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
813
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
814 // Iterate over triggerList to see if any TriggerMacros need to be added
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
815 // First item is the number of items in the TriggerList
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
816 for ( unsigned int macro = 1; macro < triggerListSize + 1; macro++ )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
817 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
818 // Lookup trigger macro index
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
819 unsigned int triggerMacroIndex = triggerList[ macro ];
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
820
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
821 // Iterate over macroTriggerMacroPendingList to see if any macro in the scancode's
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
822 // triggerList needs to be added
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
823 unsigned int pending = 0;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
824 for ( ; pending < macroTriggerMacroPendingListSize; pending++ )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
825 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
826 // Stop scanning if the trigger macro index is found in the pending list
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
827 if ( macroTriggerMacroPendingList[ pending ] == triggerMacroIndex )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
828 break;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
829 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
830
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
831 // If the triggerMacroIndex (macro) was not found in the macroTriggerMacroPendingList
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
832 // Add it to the list
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
833 if ( pending == macroTriggerMacroPendingListSize )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
834 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
835 macroTriggerMacroPendingList[ macroTriggerMacroPendingListSize++ ] = triggerMacroIndex;
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
836
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
837 // Reset macro position
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
838 TriggerMacroList[ triggerMacroIndex ].pos = 0;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
839 TriggerMacroList[ triggerMacroIndex ].state = TriggerMacro_Waiting;
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
840 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
841 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
842 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
843 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
844
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
845
185
68f3dc0cddd0 Macro cleanup.
Jacob Alexander <haata@kiibohd.com>
parents: 184
diff changeset
846 // Macro Procesing Loop
68f3dc0cddd0 Macro cleanup.
Jacob Alexander <haata@kiibohd.com>
parents: 184
diff changeset
847 // Called once per USB buffer send
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
848 inline void Macro_process()
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
849 {
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
850 // Only do one round of macro processing between Output Module timer sends
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
851 if ( USBKeys_Sent != 0 )
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
852 return;
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
853
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
854 // If the pause flag is set, only process if the step counter is non-zero
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
855 if ( macroPauseMode )
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
856 {
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
857 if ( macroStepCounter == 0 )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
858 return;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
859
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
860 // Proceed, decrementing the step counter
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
861 macroStepCounter--;
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
862 dbug_print("Macro Step");
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
863 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
864
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
865 // Update pending trigger list, before processing TriggerMacros
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
866 Macro_updateTriggerMacroPendingList();
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
867
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
868 // Tail pointer for macroTriggerMacroPendingList
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
869 // Macros must be explicitly re-added
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
870 unsigned int macroTriggerMacroPendingListTail = 0;
185
68f3dc0cddd0 Macro cleanup.
Jacob Alexander <haata@kiibohd.com>
parents: 184
diff changeset
871
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
872 // Iterate through the pending TriggerMacros, processing each of them
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
873 for ( unsigned int macro = 0; macro < macroTriggerMacroPendingListSize; macro++ )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
874 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
875 switch ( Macro_evalTriggerMacro( macroTriggerMacroPendingList[ macro ] ) )
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
876 {
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
877 // Trigger Result Macro (purposely falling through)
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
878 case TriggerMacroEval_DoResult:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
879 // Append ResultMacro to PendingList
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
880 Macro_appendResultMacroToPendingList( &TriggerMacroList[ macroTriggerMacroPendingList[ macro ] ] );
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
881
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
882 default:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
883 macroTriggerMacroPendingList[ macroTriggerMacroPendingListTail++ ] = macroTriggerMacroPendingList[ macro ];
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
884 break;
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
885
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
886 // Trigger Result Macro and Remove (purposely falling through)
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
887 case TriggerMacroEval_DoResultAndRemove:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
888 // Append ResultMacro to PendingList
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
889 Macro_appendResultMacroToPendingList( &TriggerMacroList[ macroTriggerMacroPendingList[ macro ] ] );
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
890
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
891 // Remove Macro from Pending List, nothing to do, removing by default
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
892 case TriggerMacroEval_Remove:
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
893 break;
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
894 }
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
895 }
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
896
190
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
897 // Update the macroTriggerMacroPendingListSize with the tail pointer
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
898 macroTriggerMacroPendingListSize = macroTriggerMacroPendingListTail;
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
899
190
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
900
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
901 // Tail pointer for macroResultMacroPendingList
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
902 // Macros must be explicitly re-added
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
903 unsigned int macroResultMacroPendingListTail = 0;
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
904
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
905 // Iterate through the pending ResultMacros, processing each of them
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
906 for ( unsigned int macro = 0; macro < macroResultMacroPendingListSize; macro++ )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
907 {
190
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
908 switch ( Macro_evalResultMacro( macroResultMacroPendingList[ macro ] ) )
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
909 {
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
910 // Re-add macros to pending list
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
911 case ResultMacroEval_DoNothing:
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
912 default:
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
913 macroResultMacroPendingList[ macroResultMacroPendingListTail++ ] = macroResultMacroPendingList[ macro ];
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
914 break;
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
915
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
916 // Remove Macro from Pending List, nothing to do, removing by default
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
917 case ResultMacroEval_Remove:
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
918 break;
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
919 }
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
920 }
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
921
190
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
922 // Update the macroResultMacroPendingListSize with the tail pointer
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
923 macroResultMacroPendingListSize = macroResultMacroPendingListTail;
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
924
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
925 // Signal buffer that we've used it
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
926 Scan_finishedWithMacro( macroTriggerListBufferSize );
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
927
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
928 // Reset TriggerList buffer
7a71c6e38d56 Macro processing is now feature complete.
Jacob Alexander <haata@kiibohd.com>
parents: 189
diff changeset
929 macroTriggerListBufferSize = 0;
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
930
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
931 // If Macro debug mode is set, clear the USB Buffer
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
932 if ( macroDebugMode )
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
933 {
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
934 USBKeys_Modifiers = 0;
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
935 USBKeys_Sent = 0;
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
936 }
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
937 }
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
938
185
68f3dc0cddd0 Macro cleanup.
Jacob Alexander <haata@kiibohd.com>
parents: 184
diff changeset
939
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
940 inline void Macro_setup()
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
941 {
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
942 // Register Macro CLI dictionary
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
943 CLI_registerDictionary( macroCLIDict, macroCLIDictName );
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
944
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
945 // Disable Macro debug mode
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
946 macroDebugMode = 0;
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
947
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
948 // Disable Macro pause flag
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
949 macroPauseMode = 0;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
950
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
951 // Set Macro step counter to zero
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
952 macroStepCounter = 0;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
953
176
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
954 // Make sure macro trigger buffer is empty
d3ae6b409cfa Initial work for partial layers and macros.
Jacob Alexander <haata@kiibohd.com>
parents: 166
diff changeset
955 macroTriggerListBufferSize = 0;
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
956
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
957 // Initialize TriggerMacro states
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
958 for ( unsigned int macro = 0; macro < TriggerMacroNum; macro++ )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
959 {
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
960 TriggerMacroList[ macro ].pos = 0;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
961 TriggerMacroList[ macro ].state = TriggerMacro_Waiting;
189
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
962 }
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
963
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
964 // Initialize ResultMacro states
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
965 for ( unsigned int macro = 0; macro < ResultMacroNum; macro++ )
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
966 {
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
967 ResultMacroList[ macro ].pos = 0;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
968 ResultMacroList[ macro ].state = 0;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
969 ResultMacroList[ macro ].stateType = 0;
4493d8d2c959 Adding TriggerMacro processing.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
970 }
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
971 }
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
972
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
973
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
974 // ----- CLI Command Functions -----
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
975
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
976 void cliFunc_capList( char* args )
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
977 {
180
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
978 print( NL );
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
979 info_msg("Capabilities List");
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
980 printHex( CapabilitiesNum );
180
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
981
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
982 // Iterate through all of the capabilities and display them
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
983 for ( unsigned int cap = 0; cap < CapabilitiesNum; cap++ )
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
984 {
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
985 print( NL "\t" );
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
986 printHex( cap );
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
987 print(" - ");
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
988
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
989 // Display/Lookup Capability Name (utilize debug mode of capability)
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
990 void (*capability)(uint8_t, uint8_t, uint8_t*) = (void(*)(uint8_t, uint8_t, uint8_t*))(CapabilitiesList[ cap ].func);
180
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
991 capability( 0xFF, 0xFF, 0 );
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
992 }
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
993 }
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
994
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
995 void cliFunc_capSelect( char* args )
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
996 {
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
997 // Parse code from argument
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
998 char* curArgs;
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
999 char* arg1Ptr;
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1000 char* arg2Ptr = args;
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1001
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1002 // Total number of args to scan (must do a lookup if a keyboard capability is selected)
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1003 unsigned int totalArgs = 2; // Always at least two args
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1004 unsigned int cap = 0;
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1005
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1006 // Arguments used for keyboard capability function
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1007 unsigned int argSetCount = 0;
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1008 uint8_t *argSet = (uint8_t*)args;
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1009
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1010 // Process all args
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1011 for ( unsigned int c = 0; argSetCount < totalArgs; c++ )
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1012 {
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1013 curArgs = arg2Ptr;
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1014 CLI_argumentIsolation( curArgs, &arg1Ptr, &arg2Ptr );
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1015
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1016 // Stop processing args if no more are found
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1017 // Extra arguments are ignored
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1018 if ( *arg1Ptr == '\0' )
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1019 break;
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1020
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1021 // For the first argument, choose the capability
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1022 if ( c == 0 ) switch ( arg1Ptr[0] )
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1023 {
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1024 // Keyboard Capability
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1025 case 'K':
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1026 // Determine capability index
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
1027 cap = numToInt( &arg1Ptr[1] );
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1028
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1029 // Lookup the number of args
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1030 totalArgs += CapabilitiesList[ cap ].argCount;
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1031 continue;
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1032 }
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1033
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1034 // Because allocating memory isn't doable, and the argument count is arbitrary
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1035 // The argument pointer is repurposed as the argument list (much smaller anyways)
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
1036 argSet[ argSetCount++ ] = (uint8_t)numToInt( arg1Ptr );
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1037
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1038 // Once all the arguments are prepared, call the keyboard capability function
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1039 if ( argSetCount == totalArgs )
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1040 {
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1041 // Indicate that the capability was called
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1042 print( NL );
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1043 info_msg("K");
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1044 printInt8( cap );
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1045 print(" - ");
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1046 printHex( argSet[0] );
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1047 print(" - ");
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1048 printHex( argSet[1] );
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1049 print(" - ");
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1050 printHex( argSet[2] );
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1051 print( "..." NL );
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1052
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1053 void (*capability)(uint8_t, uint8_t, uint8_t*) = (void(*)(uint8_t, uint8_t, uint8_t*))(CapabilitiesList[ cap ].func);
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1054 capability( argSet[0], argSet[1], &argSet[2] );
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1055 }
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1056 }
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1057 }
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1058
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1059 void cliFunc_keyHold( char* args )
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1060 {
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1061 // Parse codes from arguments
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1062 char* curArgs;
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1063 char* arg1Ptr;
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1064 char* arg2Ptr = args;
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1065
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1066 // Process all args
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1067 for ( ;; )
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1068 {
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1069 curArgs = arg2Ptr;
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1070 CLI_argumentIsolation( curArgs, &arg1Ptr, &arg2Ptr );
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1071
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1072 // Stop processing args if no more are found
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1073 if ( *arg1Ptr == '\0' )
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1074 break;
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1075
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1076 // Ignore non-Scancode numbers
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1077 switch ( arg1Ptr[0] )
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1078 {
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1079 // Scancode
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1080 case 'S':
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
1081 Macro_keyState( (uint8_t)numToInt( &arg1Ptr[1] ), 0x02 ); // Hold scancode
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1082 break;
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1083 }
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1084 }
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1085 }
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1086
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1087 void cliFunc_keyPress( char* args )
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1088 {
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1089 // Parse codes from arguments
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1090 char* curArgs;
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1091 char* arg1Ptr;
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1092 char* arg2Ptr = args;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1093
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1094 // Process all args
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1095 for ( ;; )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1096 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1097 curArgs = arg2Ptr;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1098 CLI_argumentIsolation( curArgs, &arg1Ptr, &arg2Ptr );
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1099
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1100 // Stop processing args if no more are found
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1101 if ( *arg1Ptr == '\0' )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1102 break;
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1103
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1104 // Ignore non-Scancode numbers
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1105 switch ( arg1Ptr[0] )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1106 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1107 // Scancode
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1108 case 'S':
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
1109 Macro_keyState( (uint8_t)numToInt( &arg1Ptr[1] ), 0x01 ); // Press scancode
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1110 break;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1111 }
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1112 }
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1113 }
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1114
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1115 void cliFunc_keyRelease( char* args )
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1116 {
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1117 // Parse codes from arguments
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1118 char* curArgs;
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1119 char* arg1Ptr;
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1120 char* arg2Ptr = args;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1121
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1122 // Process all args
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1123 for ( ;; )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1124 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1125 curArgs = arg2Ptr;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1126 CLI_argumentIsolation( curArgs, &arg1Ptr, &arg2Ptr );
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1127
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1128 // Stop processing args if no more are found
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1129 if ( *arg1Ptr == '\0' )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1130 break;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1131
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1132 // Ignore non-Scancode numbers
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1133 switch ( arg1Ptr[0] )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1134 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1135 // Scancode
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1136 case 'S':
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
1137 Macro_keyState( (uint8_t)numToInt( &arg1Ptr[1] ), 0x03 ); // Release scancode
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1138 break;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1139 }
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1140 }
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1141 }
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1142
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1143 void cliFunc_layerList( char* args )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1144 {
183
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1145 print( NL );
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1146 info_msg("Layer List");
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1147
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1148 // Iterate through all of the layers and display them
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1149 for ( unsigned int layer = 0; layer < LayerNum; layer++ )
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1150 {
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1151 print( NL "\t" );
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1152 printHex( layer );
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1153 print(" - ");
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1154
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1155 // Display layer name
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1156 dPrint( (char*)LayerIndex[ layer ].name );
183
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1157
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1158 // Default map
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1159 if ( layer == 0 )
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1160 print(" \033[1m(default)\033[0m");
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1161
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1162 // Layer State
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1163 print( NL "\t\t Layer State: " );
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1164 printHex( LayerIndex[ layer ].state );
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1165
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1166 // Max Index
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1167 print(" Max Index: ");
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1168 printHex( LayerIndex[ layer ].max );
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1169 }
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1170 }
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1171
183
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1172 void cliFunc_layerState( char* args )
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1173 {
183
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1174 // Parse codes from arguments
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1175 char* curArgs;
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1176 char* arg1Ptr;
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1177 char* arg2Ptr = args;
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1178
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1179 uint8_t arg1 = 0;
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1180 uint8_t arg2 = 0;
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1181
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1182 // Process first two args
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1183 for ( uint8_t c = 0; c < 2; c++ )
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1184 {
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1185 curArgs = arg2Ptr;
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1186 CLI_argumentIsolation( curArgs, &arg1Ptr, &arg2Ptr );
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1187
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1188 // Stop processing args if no more are found
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1189 if ( *arg1Ptr == '\0' )
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1190 break;
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1191
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1192 switch ( c )
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1193 {
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1194 // First argument (e.g. L1)
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1195 case 0:
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1196 if ( arg1Ptr[0] != 'L' )
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1197 return;
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1198
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
1199 arg1 = (uint8_t)numToInt( &arg1Ptr[1] );
183
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1200 break;
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1201 // Second argument (e.g. 4)
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1202 case 1:
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
1203 arg2 = (uint8_t)numToInt( arg1Ptr );
183
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1204
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1205 // Display operation (to indicate that it worked)
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1206 print( NL );
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1207 info_msg("Setting Layer L");
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1208 printInt8( arg1 );
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1209 print(" to - ");
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1210 printHex( arg2 );
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1211
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1212 // Set the layer state
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1213 LayerIndex[ arg1 ].state = arg2;
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1214 break;
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1215 }
bb96551a3065 Added layerList and layerState functions
Jacob Alexander <haata@kiibohd.com>
parents: 182
diff changeset
1216 }
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1217 }
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1218
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1219 void cliFunc_macroDebug( char* args )
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1220 {
126
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1221 // Toggle macro debug mode
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1222 macroDebugMode = macroDebugMode ? 0 : 1;
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1223
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1224 print( NL );
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1225 info_msg("Macro Debug Mode: ");
670fc9c3a739 Added CLI DefaultMap lookup command.
Jacob Alexander <haata@kiibohd.com>
parents: 125
diff changeset
1226 printInt8( macroDebugMode );
125
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1227 }
8dab4014c398 Major code cleanup and preparation for PartialMap Macro Module
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
1228
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1229 void cliFunc_macroList( char* args )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1230 {
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1231 // Show pending key events
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1232 print( NL );
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1233 info_msg("Pending Key Events: ");
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1234 printInt16( (uint16_t)macroTriggerListBufferSize );
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1235 print(" : ");
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1236 for ( uint8_t key = 0; key < macroTriggerListBufferSize; key++ )
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1237 {
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1238 printHex( macroTriggerListBuffer[ key ].scanCode );
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1239 print(" ");
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1240 }
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1241
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1242 // Show pending trigger macros
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1243 print( NL );
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1244 info_msg("Pending Trigger Macros: ");
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1245 printInt16( (uint16_t)macroTriggerMacroPendingListSize );
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1246 print(" : ");
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1247 for ( unsigned int macro = 0; macro < macroTriggerMacroPendingListSize; macro++ )
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1248 {
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1249 printHex( macroTriggerMacroPendingList[ macro ] );
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1250 print(" ");
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1251 }
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1252
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1253 // Show pending result macros
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1254 print( NL );
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1255 info_msg("Pending Result Macros: ");
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1256 printInt16( (uint16_t)macroResultMacroPendingListSize );
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1257 print(" : ");
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1258 for ( unsigned int macro = 0; macro < macroResultMacroPendingListSize; macro++ )
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1259 {
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1260 printHex( macroResultMacroPendingList[ macro ] );
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1261 print(" ");
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1262 }
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1263
181
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1264 // Show available trigger macro indices
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1265 print( NL );
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1266 info_msg("Trigger Macros Range: T0 -> T");
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1267 printInt16( (uint16_t)TriggerMacroNum - 1 ); // Hopefully large enough :P (can't assume 32-bit)
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1268
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1269 // Show available result macro indices
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1270 print( NL );
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1271 info_msg("Result Macros Range: R0 -> R");
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1272 printInt16( (uint16_t)ResultMacroNum - 1 ); // Hopefully large enough :P (can't assume 32-bit)
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1273
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1274 // Show Trigger to Result Macro Links
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1275 print( NL );
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1276 info_msg("Trigger : Result Macro Pairs");
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1277 for ( unsigned int macro = 0; macro < TriggerMacroNum; macro++ )
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1278 {
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1279 print( NL );
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1280 print("\tT");
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1281 printInt16( (uint16_t)macro ); // Hopefully large enough :P (can't assume 32-bit)
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1282 print(" : R");
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1283 printInt16( (uint16_t)TriggerMacroList[ macro ].result ); // Hopefully large enough :P (can't assume 32-bit)
80a44dcdafaf Adding macroList debug function
Jacob Alexander <haata@kiibohd.com>
parents: 180
diff changeset
1284 }
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1285 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1286
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1287 void cliFunc_macroProc( char* args )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1288 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1289 // Toggle macro pause mode
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1290 macroPauseMode = macroPauseMode ? 0 : 1;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1291
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1292 print( NL );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1293 info_msg("Macro Processing Mode: ");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1294 printInt8( macroPauseMode );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1295 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1296
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1297 void macroDebugShowTrigger( unsigned int index )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1298 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1299 // Only proceed if the macro exists
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1300 if ( index >= TriggerMacroNum )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1301 return;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1302
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1303 // Trigger Macro Show
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1304 TriggerMacro *macro = &TriggerMacroList[ index ];
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1305
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1306 print( NL );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1307 info_msg("Trigger Macro Index: ");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1308 printInt16( (uint16_t)index ); // Hopefully large enough :P (can't assume 32-bit)
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1309 print( NL );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1310
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1311 // Read the comboLength for combo in the sequence (sequence of combos)
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1312 unsigned int pos = 0;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1313 uint8_t comboLength = macro->guide[ pos ];
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1314
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1315 // Iterate through and interpret the guide
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1316 while ( comboLength != 0 )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1317 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1318 // Initial position of the combo
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1319 unsigned int comboPos = ++pos;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1320
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1321 // Iterate through the combo
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1322 while ( pos < comboLength * TriggerGuideSize + comboPos )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1323 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1324 // Assign TriggerGuide element (key type, state and scancode)
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1325 TriggerGuide *guide = (TriggerGuide*)(&macro->guide[ pos ]);
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1326
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1327 // Display guide information about trigger key
184
f9ef267ccc8b Adding layer fall-through lookup
Jacob Alexander <haata@kiibohd.com>
parents: 183
diff changeset
1328 printHex( guide->scanCode );
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1329 print("|");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1330 printHex( guide->type );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1331 print("|");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1332 printHex( guide->state );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1333
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1334 // Increment position
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1335 pos += TriggerGuideSize;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1336
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1337 // Only show combo separator if there are combos left in the sequence element
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1338 if ( pos < comboLength * TriggerGuideSize + comboPos )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1339 print("+");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1340 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1341
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1342 // Read the next comboLength
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1343 comboLength = macro->guide[ pos ];
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1344
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1345 // Only show sequence separator if there is another combo to process
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1346 if ( comboLength != 0 )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1347 print(";");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1348 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1349
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1350 // Display current position
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1351 print( NL "Position: " );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1352 printInt16( (uint16_t)macro->pos ); // Hopefully large enough :P (can't assume 32-bit)
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1353
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1354 // Display result macro index
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1355 print( NL "Result Macro Index: " );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1356 printInt16( (uint16_t)macro->result ); // Hopefully large enough :P (can't assume 32-bit)
196
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
1357
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
1358 // Display trigger macro state
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
1359 print( NL "Trigger Macro State: " );
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
1360 switch ( macro->state )
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
1361 {
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
1362 case TriggerMacro_Press: print("Press"); break;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
1363 case TriggerMacro_Release: print("Release"); break;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
1364 case TriggerMacro_Waiting: print("Waiting"); break;
8ecfdaa27234 Basic Trigger and Result Macros are now working.
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
1365 }
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1366 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1367
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1368 void macroDebugShowResult( unsigned int index )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1369 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1370 // Only proceed if the macro exists
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1371 if ( index >= ResultMacroNum )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1372 return;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1373
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1374 // Trigger Macro Show
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1375 ResultMacro *macro = &ResultMacroList[ index ];
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1376
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1377 print( NL );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1378 info_msg("Result Macro Index: ");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1379 printInt16( (uint16_t)index ); // Hopefully large enough :P (can't assume 32-bit)
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1380 print( NL );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1381
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1382 // Read the comboLength for combo in the sequence (sequence of combos)
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1383 unsigned int pos = 0;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1384 uint8_t comboLength = macro->guide[ pos++ ];
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1385
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1386 // Iterate through and interpret the guide
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1387 while ( comboLength != 0 )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1388 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1389 // Function Counter, used to keep track of the combos processed
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1390 unsigned int funcCount = 0;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1391
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1392 // Iterate through the combo
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1393 while ( funcCount < comboLength )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1394 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1395 // Assign TriggerGuide element (key type, state and scancode)
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1396 ResultGuide *guide = (ResultGuide*)(&macro->guide[ pos ]);
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1397
180
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
1398 // Display Function Index
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
1399 printHex( guide->index );
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
1400 print("|");
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
1401
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1402 // Display Function Ptr Address
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1403 printHex( (unsigned int)CapabilitiesList[ guide->index ].func );
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1404 print("|");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1405
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1406 // Display/Lookup Capability Name (utilize debug mode of capability)
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1407 void (*capability)(uint8_t, uint8_t, uint8_t*) = (void(*)(uint8_t, uint8_t, uint8_t*))(CapabilitiesList[ guide->index ].func);
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1408 capability( 0xFF, 0xFF, 0 );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1409
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1410 // Display Argument(s)
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1411 print("(");
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1412 for ( unsigned int arg = 0; arg < CapabilitiesList[ guide->index ].argCount; arg++ )
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1413 {
180
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
1414 // Arguments are only 8 bit values
ed56f7873645 Added capabilities list debug option
Jacob Alexander <haata@kiibohd.com>
parents: 179
diff changeset
1415 printHex( (&guide->args)[ arg ] );
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1416
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1417 // Only show arg separator if there are args left
182
880c33236cd1 Added capSelect function that can arbitrary run a keyboard capability
Jacob Alexander <haata@kiibohd.com>
parents: 181
diff changeset
1418 if ( arg + 1 < CapabilitiesList[ guide->index ].argCount )
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1419 print(",");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1420 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1421 print(")");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1422
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1423 // Increment position
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1424 pos += ResultGuideSize( guide );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1425
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1426 // Increment function count
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1427 funcCount++;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1428
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1429 // Only show combo separator if there are combos left in the sequence element
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1430 if ( funcCount < comboLength )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1431 print("+");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1432 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1433
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1434 // Read the next comboLength
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1435 comboLength = macro->guide[ pos++ ];
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1436
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1437 // Only show sequence separator if there is another combo to process
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1438 if ( comboLength != 0 )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1439 print(";");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1440 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1441
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1442 // Display current position
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1443 print( NL "Position: " );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1444 printInt16( (uint16_t)macro->pos ); // Hopefully large enough :P (can't assume 32-bit)
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1445
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1446 // Display final trigger state/type
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1447 print( NL "Final Trigger State (State/Type): " );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1448 printHex( macro->state );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1449 print("/");
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1450 printHex( macro->stateType );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1451 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1452
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1453 void cliFunc_macroShow( char* args )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1454 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1455 // Parse codes from arguments
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1456 char* curArgs;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1457 char* arg1Ptr;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1458 char* arg2Ptr = args;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1459
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1460 // Process all args
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1461 for ( ;; )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1462 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1463 curArgs = arg2Ptr;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1464 CLI_argumentIsolation( curArgs, &arg1Ptr, &arg2Ptr );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1465
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1466 // Stop processing args if no more are found
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1467 if ( *arg1Ptr == '\0' )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1468 break;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1469
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1470 // Ignore invalid codes
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1471 switch ( arg1Ptr[0] )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1472 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1473 // Indexed Trigger Macro
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1474 case 'T':
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
1475 macroDebugShowTrigger( numToInt( &arg1Ptr[1] ) );
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1476 break;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1477 // Indexed Result Macro
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1478 case 'R':
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
1479 macroDebugShowResult( numToInt( &arg1Ptr[1] ) );
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1480 break;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1481 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1482 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1483 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1484
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1485 void cliFunc_macroStep( char* args )
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1486 {
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1487 // Parse number from argument
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1488 // NOTE: Only first argument is used
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1489 char* arg1Ptr;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1490 char* arg2Ptr;
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1491 CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1492
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1493 // Default to 1, if no argument given
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
1494 unsigned int count = (unsigned int)numToInt( arg1Ptr );
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1495
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1496 if ( count == 0 )
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1497 count = 1;
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1498
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1499 // Set the macro step counter, negative int's are cast to uint
192
6ac92b8614c0 Fixing RAM calculator and reduced actual SRAM usage
Jacob Alexander <haata@kiibohd.com>
parents: 191
diff changeset
1500 macroStepCounter = count;
179
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1501 }
e5cf79b516e4 Basic debug trigger/result macro viewer
Jacob Alexander <haata@kiibohd.com>
parents: 176
diff changeset
1502