annotate Scan/MatrixARM/matrix_scan.c @ 436:ac7a07c54b70

Revert "Fixed ghosting matrix check (did send bad keys on release), now using…"
author Jacob Alexander <haata@kiibohd.com>
date Fri, 13 May 2016 14:38:05 -0700
parents eae9fd6acc9a
children 94ef7b561d7d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
1 /* Copyright (C) 2014-2016 by Jacob Alexander
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
2 *
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
4 * of this software and associated documentation files (the "Software"), to deal
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
5 * in the Software without restriction, including without limitation the rights
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
7 * copies of the Software, and to permit persons to whom the Software is
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
8 * furnished to do so, subject to the following conditions:
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
9 *
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
10 * The above copyright notice and this permission notice shall be included in
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
11 * all copies or substantial portions of the Software.
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
12 *
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
19 * THE SOFTWARE.
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
20 */
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
21
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
22 // ----- Includes -----
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
23
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
24 // Compiler Includes
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
25 #include <Lib/ScanLib.h>
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
26
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
27 // Project Includes
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
28 #include <cli.h>
357
86b937945313 Fixing CMake dependency checking for kll_defs.h
Jacob Alexander <haata@kiibohd.com>
parents: 343
diff changeset
29 #include <kll_defs.h>
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
30 #include <led.h>
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
31 #include <print.h>
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
32 #include <macro.h>
423
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
33 #include <Lib/delay.h>
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
34
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
35 // Local Includes
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
36 #include "matrix_scan.h"
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
37
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
38 // Matrix Configuration
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
39 #include <matrix.h>
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
40
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
41
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
42
299
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
43 // ----- Defines -----
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
44
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
45 #if ( DebounceThrottleDiv_define > 0 )
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
46 nat_ptr_t Matrix_divCounter = 0;
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
47 #endif
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
48
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
49
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
50
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
51 // ----- Function Declarations -----
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
52
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
53 // CLI Functions
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
54 void cliFunc_matrixDebug( char* args );
431
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
55 void cliFunc_matrixInfo( char* args );
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
56 void cliFunc_matrixState( char* args );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
57
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
58
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
59
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
60 // ----- Variables -----
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
61
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
62 // Scan Module command dictionary
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
63 CLIDict_Entry( matrixDebug, "Enables matrix debug mode, prints out each scan code." NL "\t\tIf argument \033[35mT\033[0m is given, prints out each scan code state transition." );
431
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
64 CLIDict_Entry( matrixInfo, "Print info about the configured matrix." );
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
65 CLIDict_Entry( matrixState, "Prints out the current scan table N times." NL "\t\t \033[1mO\033[0m - Off, \033[1;33mP\033[0m - Press, \033[1;32mH\033[0m - Hold, \033[1;35mR\033[0m - Release, \033[1;31mI\033[0m - Invalid" );
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
66
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
67 CLIDict_Def( matrixCLIDict, "Matrix Module Commands" ) = {
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
68 CLIDict_Item( matrixDebug ),
431
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
69 CLIDict_Item( matrixInfo ),
239
2a4c99da1276 HUGE AVR RAM optimization (~28%).
Jacob Alexander <haata@kiibohd.com>
parents: 195
diff changeset
70 CLIDict_Item( matrixState ),
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
71 { 0, 0, 0 } // Null entry for dictionary end
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
72 };
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
73
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
74 // Debounce Array
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
75 KeyState Matrix_scanArray[ Matrix_colsNum * Matrix_rowsNum ];
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
76
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
77 // Ghost Arrays
416
060aa589b307 Minor styling fixes.
CryHam <cryham@gmail.com>
parents: 415
diff changeset
78 #ifdef GHOSTING_MATRIX
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
79 KeyGhost Matrix_ghostArray[ Matrix_colsNum * Matrix_rowsNum ];
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
80
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
81 uint8_t col_use[Matrix_colsNum], row_use[Matrix_rowsNum]; // used count
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
82 uint8_t col_ghost[Matrix_colsNum], row_ghost[Matrix_rowsNum]; // marked as having ghost if 1
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
83 #endif
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
84
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
85
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
86 // Matrix debug flag - If set to 1, for each keypress the scan code is displayed in hex
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
87 // If set to 2, for each key state change, the scan code is displayed along with the state
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
88 uint8_t matrixDebugMode = 0;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
89
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
90 // Matrix State Table Debug Counter - If non-zero display state table after every matrix scan
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
91 uint16_t matrixDebugStateCounter = 0;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
92
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
93 // Matrix Scan Counters
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
94 uint16_t matrixMaxScans = 0;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
95 uint16_t matrixCurScans = 0;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
96 uint16_t matrixPrevScans = 0;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
97
343
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
98 // System Timer used for delaying debounce decisions
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
99 extern volatile uint32_t systick_millis_count;
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
100
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
101
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
102
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
103 // ----- Functions -----
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
104
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
105 // Pin action (Strobe, Sense, Strobe Setup, Sense Setup)
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
106 // NOTE: This function is highly dependent upon the organization of the register map
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
107 // Only guaranteed to work with Freescale MK20 series uCs
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
108 uint8_t Matrix_pin( GPIO_Pin gpio, Type type )
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
109 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
110 // Register width is defined as size of a pointer
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
111 unsigned int gpio_offset = gpio.port * 0x40 / sizeof(unsigned int*);
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
112 unsigned int port_offset = gpio.port * 0x1000 / sizeof(unsigned int*) + gpio.pin;
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
113
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
114 // Assumes 0x40 between GPIO Port registers and 0x1000 between PORT pin registers
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
115 // See Lib/mk20dx.h
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
116 volatile unsigned int *GPIO_PDDR = (unsigned int*)(&GPIOA_PDDR) + gpio_offset;
423
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
117 #ifndef GHOSTING_MATRIX
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
118 volatile unsigned int *GPIO_PSOR = (unsigned int*)(&GPIOA_PSOR) + gpio_offset;
423
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
119 #endif
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
120 volatile unsigned int *GPIO_PCOR = (unsigned int*)(&GPIOA_PCOR) + gpio_offset;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
121 volatile unsigned int *GPIO_PDIR = (unsigned int*)(&GPIOA_PDIR) + gpio_offset;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
122 volatile unsigned int *PORT_PCR = (unsigned int*)(&PORTA_PCR0) + port_offset;
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
123
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
124 // Operation depends on Type
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
125 switch ( type )
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
126 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
127 case Type_StrobeOn:
423
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
128 #ifdef GHOSTING_MATRIX
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
129 *GPIO_PCOR |= (1 << gpio.pin);
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
130 *GPIO_PDDR |= (1 << gpio.pin); // output, low
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
131 #else
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
132 *GPIO_PSOR |= (1 << gpio.pin);
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
133 #endif
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
134 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
135
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
136 case Type_StrobeOff:
416
060aa589b307 Minor styling fixes.
CryHam <cryham@gmail.com>
parents: 415
diff changeset
137 #ifdef GHOSTING_MATRIX
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
138 // Ghosting martix needs to put not used (off) strobes in high impedance state
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
139 *GPIO_PDDR &= ~(1 << gpio.pin); // input, high Z state
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
140 #endif
423
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
141 *GPIO_PCOR |= (1 << gpio.pin);
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
142 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
143
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
144 case Type_StrobeSetup:
423
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
145 #ifdef GHOSTING_MATRIX
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
146 *GPIO_PDDR &= ~(1 << gpio.pin); // input, high Z state
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
147 *GPIO_PCOR |= (1 << gpio.pin);
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
148 #else
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
149 // Set as output pin
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
150 *GPIO_PDDR |= (1 << gpio.pin);
423
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
151 #endif
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
152
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
153 // Configure pin with slow slew, high drive strength and GPIO mux
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
154 *PORT_PCR = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1);
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
155
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
156 // Enabling open-drain if specified
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
157 switch ( Matrix_type )
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
158 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
159 case Config_Opendrain:
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
160 *PORT_PCR |= PORT_PCR_ODE;
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
161 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
162
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
163 // Do nothing otherwise
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
164 default:
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
165 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
166 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
167 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
168
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
169 case Type_Sense:
423
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
170 #ifdef GHOSTING_MATRIX // inverted
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
171 return *GPIO_PDIR & (1 << gpio.pin) ? 0 : 1;
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
172 #else
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
173 return *GPIO_PDIR & (1 << gpio.pin) ? 1 : 0;
423
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
174 #endif
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
175
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
176 case Type_SenseSetup:
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
177 // Set as input pin
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
178 *GPIO_PDDR &= ~(1 << gpio.pin);
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
179
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
180 // Configure pin with passive filter and GPIO mux
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
181 *PORT_PCR = PORT_PCR_PFE | PORT_PCR_MUX(1);
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
182
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
183 // Pull resistor config
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
184 switch ( Matrix_type )
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
185 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
186 case Config_Pullup:
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
187 *PORT_PCR |= PORT_PCR_PE | PORT_PCR_PS;
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
188 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
189
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
190 case Config_Pulldown:
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
191 *PORT_PCR |= PORT_PCR_PE;
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
192 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
193
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
194 // Do nothing otherwise
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
195 default:
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
196 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
197 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
198 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
199 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
200
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
201 return 0;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
202 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
203
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
204 // Setup GPIO pins for matrix scanning
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
205 void Matrix_setup()
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
206 {
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
207 // Register Matrix CLI dictionary
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
208 CLI_registerDictionary( matrixCLIDict, matrixCLIDictName );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
209
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
210 // Setup Strobe Pins
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
211 for ( uint8_t pin = 0; pin < Matrix_colsNum; pin++ )
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
212 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
213 Matrix_pin( Matrix_cols[ pin ], Type_StrobeSetup );
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
214 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
215
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
216 // Setup Sense Pins
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
217 for ( uint8_t pin = 0; pin < Matrix_rowsNum; pin++ )
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
218 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
219 Matrix_pin( Matrix_rows[ pin ], Type_SenseSetup );
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
220 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
221
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
222 // Clear out Debounce Array
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
223 for ( uint8_t item = 0; item < Matrix_maxKeys; item++ )
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
224 {
343
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
225 Matrix_scanArray[ item ].prevState = KeyState_Off;
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
226 Matrix_scanArray[ item ].curState = KeyState_Off;
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
227 Matrix_scanArray[ item ].activeCount = 0;
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
228 Matrix_scanArray[ item ].inactiveCount = DebounceDivThreshold_define; // Start at 'off' steady state
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
229 Matrix_scanArray[ item ].prevDecisionTime = 0;
416
060aa589b307 Minor styling fixes.
CryHam <cryham@gmail.com>
parents: 415
diff changeset
230 #ifdef GHOSTING_MATRIX
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
231 Matrix_ghostArray[ item ].prev = KeyState_Off;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
232 Matrix_ghostArray[ item ].cur = KeyState_Off;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
233 Matrix_ghostArray[ item ].saved = KeyState_Off;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
234 #endif
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
235 }
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
236
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
237 // Clear scan stats counters
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
238 matrixMaxScans = 0;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
239 matrixPrevScans = 0;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
240 }
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
241
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
242 void Matrix_keyPositionDebug( KeyPosition pos )
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
243 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
244 // Depending on the state, use a different flag + color
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
245 switch ( pos )
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
246 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
247 case KeyState_Off:
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
248 print("\033[1mO\033[0m");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
249 break;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
250
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
251 case KeyState_Press:
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
252 print("\033[1;33mP\033[0m");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
253 break;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
254
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
255 case KeyState_Hold:
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
256 print("\033[1;32mH\033[0m");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
257 break;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
258
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
259 case KeyState_Release:
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
260 print("\033[1;35mR\033[0m");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
261 break;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
262
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
263 case KeyState_Invalid:
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
264 default:
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
265 print("\033[1;31mI\033[0m");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
266 break;
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
267 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
268 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
269
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
270
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
271 // Scan the matrix for keypresses
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
272 // NOTE: scanNum should be reset to 0 after a USB send (to reset all the counters)
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
273 void Matrix_scan( uint16_t scanNum )
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
274 {
299
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
275 #if ( DebounceThrottleDiv_define > 0 )
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
276 // Scan-rate throttling
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
277 // By scanning using a divider, the scan rate slowed down
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
278 // DebounceThrottleDiv_define == 1 means -> /2 or half scan rate
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
279 // This helps with bouncy switches on fast uCs
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
280 if ( !( Matrix_divCounter++ & (1 << ( DebounceThrottleDiv_define - 1 )) ) )
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
281 return;
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
282 #endif
c856f826bd49 Adding DebounceThrottleDiv define to slow down the debounce rate.
Jacob Alexander <haata@kiibohd.com>
parents: 293
diff changeset
283
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
284 // Increment stats counters
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
285 if ( scanNum > matrixMaxScans ) matrixMaxScans = scanNum;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
286 if ( scanNum == 0 )
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
287 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
288 matrixPrevScans = matrixCurScans;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
289 matrixCurScans = 0;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
290 }
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
291 else
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
292 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
293 matrixCurScans++;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
294 }
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
295
343
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
296 // Read systick for event scheduling
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
297 uint8_t currentTime = (uint8_t)systick_millis_count;
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
298
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
299 // For each strobe, scan each of the sense pins
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
300 for ( uint8_t strobe = 0; strobe < Matrix_colsNum; strobe++ )
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
301 {
423
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
302 #ifdef STROBE_DELAY
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
303 uint32_t start = micros();
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
304 while ((micros() - start) < STROBE_DELAY);
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
305 #endif
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
306
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
307 // Strobe Pin
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
308 Matrix_pin( Matrix_cols[ strobe ], Type_StrobeOn );
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
309
423
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
310 #ifdef STROBE_DELAY
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
311 start = micros();
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
312 while ((micros() - start) < STROBE_DELAY);
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
313 #endif
be6b57c5b438 Changed CK3 matrix scan to Config_Pullup, inverted rows and columns
CryHam <cryham@gmail.com>
parents: 416
diff changeset
314
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
315 // Scan each of the sense pins
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
316 for ( uint8_t sense = 0; sense < Matrix_rowsNum; sense++ )
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
317 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
318 // Key position
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
319 uint8_t key = Matrix_colsNum * sense + strobe;
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
320 KeyState *state = &Matrix_scanArray[ key ];
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
321
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
322 // If first scan, reset state
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
323 if ( scanNum == 0 )
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
324 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
325 // Set previous state, and reset current state
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
326 state->prevState = state->curState;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
327 state->curState = KeyState_Invalid;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
328 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
329
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
330 // Signal Detected
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
331 // Increment count and right shift opposing count
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
332 // This means there is a maximum of scan 13 cycles on a perfect off to on transition
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
333 // (coming from a steady state 0xFFFF off scans)
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
334 // Somewhat longer with switch bounciness
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
335 // The advantage of this is that the count is ongoing and never needs to be reset
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
336 // State still needs to be kept track of to deal with what to send to the Macro module
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
337 if ( Matrix_pin( Matrix_rows[ sense ], Type_Sense ) )
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
338 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
339 // Only update if not going to wrap around
293
57f40871c726 Adding configurable DebounceDivThreshold
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
340 if ( state->activeCount < DebounceDivThreshold_define ) state->activeCount += 1;
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
341 state->inactiveCount >>= 1;
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
342 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
343 // Signal Not Detected
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
344 else
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
345 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
346 // Only update if not going to wrap around
293
57f40871c726 Adding configurable DebounceDivThreshold
Jacob Alexander <haata@kiibohd.com>
parents: 239
diff changeset
347 if ( state->inactiveCount < DebounceDivThreshold_define ) state->inactiveCount += 1;
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
348 state->activeCount >>= 1;
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
349 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
350
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
351 // Check for state change if it hasn't been set
343
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
352 // But only if enough time has passed since last state change
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
353 // Only check if the minimum number of scans has been met
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
354 // the current state is invalid
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
355 // and either active or inactive count is over the debounce threshold
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
356 if ( state->curState == KeyState_Invalid )
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
357 {
343
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
358 // Determine time since last decision
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
359 uint8_t lastTransition = currentTime - state->prevDecisionTime;
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
360
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
361 // Attempt state transition
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
362 switch ( state->prevState )
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
363 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
364 case KeyState_Press:
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
365 case KeyState_Hold:
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
366 if ( state->activeCount > state->inactiveCount )
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
367 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
368 state->curState = KeyState_Hold;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
369 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
370 else
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
371 {
343
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
372 // If not enough time has passed since Hold
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
373 // Keep previous state
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
374 if ( lastTransition < MinDebounceTime_define )
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
375 {
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
376 //warn_print("FAST Release stopped");
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
377 state->curState = state->prevState;
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
378 continue;
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
379 }
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
380
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
381 state->curState = KeyState_Release;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
382 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
383 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
384
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
385 case KeyState_Release:
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
386 case KeyState_Off:
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
387 if ( state->activeCount > state->inactiveCount )
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
388 {
343
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
389 // If not enough time has passed since Hold
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
390 // Keep previous state
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
391 if ( lastTransition < MinDebounceTime_define )
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
392 {
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
393 //warn_print("FAST Press stopped");
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
394 state->curState = state->prevState;
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
395 continue;
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
396 }
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
397
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
398 state->curState = KeyState_Press;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
399 }
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
400 else
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
401 {
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
402 state->curState = KeyState_Off;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
403 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
404 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
405
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
406 case KeyState_Invalid:
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
407 default:
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
408 erro_print("Matrix scan bug!! Report me!");
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
409 break;
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
410 }
416
060aa589b307 Minor styling fixes.
CryHam <cryham@gmail.com>
parents: 415
diff changeset
411
343
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
412 // Update decision time
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
413 state->prevDecisionTime = currentTime;
e464aaa4730f Adding timing based debounce code
Jacob Alexander <haata@kiibohd.com>
parents: 299
diff changeset
414
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
415 // Send keystate to macro module
416
060aa589b307 Minor styling fixes.
CryHam <cryham@gmail.com>
parents: 415
diff changeset
416 #ifndef GHOSTING_MATRIX
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
417 Macro_keyState( key, state->curState );
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
418 #endif
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
419
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
420 // Matrix Debug, only if there is a state change
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
421 if ( matrixDebugMode && state->curState != state->prevState )
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
422 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
423 // Basic debug output
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
424 if ( matrixDebugMode == 1 && state->curState == KeyState_Press )
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
425 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
426 printHex( key );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
427 print(" ");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
428 }
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
429 // State transition debug output
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
430 else if ( matrixDebugMode == 2 )
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
431 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
432 printHex( key );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
433 Matrix_keyPositionDebug( state->curState );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
434 print(" ");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
435 }
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
436 }
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
437 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
438 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
439
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
440 // Unstrobe Pin
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
441 Matrix_pin( Matrix_cols[ strobe ], Type_StrobeOff );
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
442 }
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
443
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
444
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
445 // Matrix ghosting check and elimination
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
446 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
416
060aa589b307 Minor styling fixes.
CryHam <cryham@gmail.com>
parents: 415
diff changeset
447 #ifdef GHOSTING_MATRIX
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
448 // strobe = column, sense = row
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
449
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
450 // Count (rows) use for columns
436
ac7a07c54b70 Revert "Fixed ghosting matrix check (did send bad keys on release), now using…"
Jacob Alexander <haata@kiibohd.com>
parents: 434
diff changeset
451 //print("C ");
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
452 for ( uint8_t col = 0; col < Matrix_colsNum; col++ )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
453 {
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
454 uint8_t used = 0;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
455 for ( uint8_t row = 0; row < Matrix_rowsNum; row++ )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
456 {
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
457 uint8_t key = Matrix_colsNum * row + col;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
458 KeyState *state = &Matrix_scanArray[ key ];
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
459 if ( keyOn(state->curState) )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
460 used++;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
461 }
436
ac7a07c54b70 Revert "Fixed ghosting matrix check (did send bad keys on release), now using…"
Jacob Alexander <haata@kiibohd.com>
parents: 434
diff changeset
462 //printInt8(used);
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
463 col_use[col] = used;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
464 col_ghost[col] = 0; // clear
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
465 }
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
466
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
467 // Count (columns) use for rows
436
ac7a07c54b70 Revert "Fixed ghosting matrix check (did send bad keys on release), now using…"
Jacob Alexander <haata@kiibohd.com>
parents: 434
diff changeset
468 //print(" R ");
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
469 for ( uint8_t row = 0; row < Matrix_rowsNum; row++ )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
470 {
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
471 uint8_t used = 0;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
472 for ( uint8_t col = 0; col < Matrix_colsNum; col++ )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
473 {
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
474 uint8_t key = Matrix_colsNum * row + col;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
475 KeyState *state = &Matrix_scanArray[ key ];
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
476 if ( keyOn(state->curState) )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
477 used++;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
478 }
436
ac7a07c54b70 Revert "Fixed ghosting matrix check (did send bad keys on release), now using…"
Jacob Alexander <haata@kiibohd.com>
parents: 434
diff changeset
479 //printInt8(used);
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
480 row_use[row] = used;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
481 row_ghost[row] = 0; // clear
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
482 }
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
483
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
484 // Check if matrix has ghost
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
485 // Happens when key is pressed and some other key is pressed in same row and another in same column
436
ac7a07c54b70 Revert "Fixed ghosting matrix check (did send bad keys on release), now using…"
Jacob Alexander <haata@kiibohd.com>
parents: 434
diff changeset
486 //print(" G ");
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
487 for ( uint8_t col = 0; col < Matrix_colsNum; col++ )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
488 {
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
489 for ( uint8_t row = 0; row < Matrix_rowsNum; row++ )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
490 {
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
491 uint8_t key = Matrix_colsNum * row + col;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
492 KeyState *state = &Matrix_scanArray[ key ];
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
493 if ( keyOn(state->curState) && col_use[col] >= 2 && row_use[row] >= 2 )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
494 {
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
495 // mark col and row as having ghost
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
496 col_ghost[col] = 1;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
497 row_ghost[row] = 1;
436
ac7a07c54b70 Revert "Fixed ghosting matrix check (did send bad keys on release), now using…"
Jacob Alexander <haata@kiibohd.com>
parents: 434
diff changeset
498 //print(" "); printInt8(col); print(","); printInt8(row);
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
499 }
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
500 }
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
501 }
436
ac7a07c54b70 Revert "Fixed ghosting matrix check (did send bad keys on release), now using…"
Jacob Alexander <haata@kiibohd.com>
parents: 434
diff changeset
502 //print( NL );
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
503
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
504 // Send keys
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
505 for ( uint8_t col = 0; col < Matrix_colsNum; col++ )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
506 {
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
507 for ( uint8_t row = 0; row < Matrix_rowsNum; row++ )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
508 {
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
509 uint8_t key = Matrix_colsNum * row + col;
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
510 KeyState *state = &Matrix_scanArray[ key ];
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
511 KeyGhost *st = &Matrix_ghostArray[ key ];
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
512
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
513 // col or row is ghosting (crossed)
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
514 uint8_t ghost = (col_ghost[col] > 0 || row_ghost[row] > 0) ? 1 : 0;
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
515
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
516 st->prev = st->cur; // previous
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
517 // save state if no ghost or outside ghosted area
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
518 if ( ghost == 0 )
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
519 st->saved = state->curState; // save state if no ghost
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
520 // final
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
521 // use saved state if ghosting, or current if not
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
522 st->cur = ghost > 0 ? st->saved : state->curState;
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
523
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
524 // Send keystate to macro module
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
525 KeyPosition k = !st->cur
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
526 ? (!st->prev ? KeyState_Off : KeyState_Release)
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
527 : ( st->prev ? KeyState_Hold : KeyState_Press);
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
528 Macro_keyState( key, k );
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
529 }
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
530 }
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
531 #endif
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
532 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
415
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
533
293154e4aafe Added support for ghosting matrices and code for elimination.
CryHam <cryham@gmail.com>
parents: 389
diff changeset
534
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
535 // State Table Output Debug
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
536 if ( matrixDebugStateCounter > 0 )
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
537 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
538 // Decrement counter
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
539 matrixDebugStateCounter--;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
540
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
541 // Output stats on number of scans being done per USB send
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
542 print( NL );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
543 info_msg("Max scans: ");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
544 printHex( matrixMaxScans );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
545 print( NL );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
546 info_msg("Previous scans: ");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
547 printHex( matrixPrevScans );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
548 print( NL );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
549
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
550 // Output current scan number
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
551 info_msg("Scan Number: ");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
552 printHex( scanNum );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
553 print( NL );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
554
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
555 // Display the state info for each key
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
556 print("<key>:<previous state><current state> <active count> <inactive count>");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
557 for ( uint8_t key = 0; key < Matrix_maxKeys; key++ )
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
558 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
559 // Every 4 keys, put a newline
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
560 if ( key % 4 == 0 )
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
561 print( NL );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
562
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
563 print("\033[1m0x");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
564 printHex_op( key, 2 );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
565 print("\033[0m");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
566 print(":");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
567 Matrix_keyPositionDebug( Matrix_scanArray[ key ].prevState );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
568 Matrix_keyPositionDebug( Matrix_scanArray[ key ].curState );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
569 print(" 0x");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
570 printHex_op( Matrix_scanArray[ key ].activeCount, 4 );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
571 print(" 0x");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
572 printHex_op( Matrix_scanArray[ key ].inactiveCount, 4 );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
573 print(" ");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
574 }
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
575
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
576 print( NL );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
577 }
186
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
578 }
50702debf278 Initial MatrixARM implementation
Jacob Alexander <haata@kiibohd.com>
parents:
diff changeset
579
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
580
420
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
581 // Called by parent scan module whenever the available current changes
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
582 // current - mA
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
583 void Matrix_currentChange( unsigned int current )
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
584 {
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
585 // TODO - Any potential power savings?
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
586 }
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
587
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
588
23a1868b4ac2 Adding dynamic USB power support
Jacob Alexander <haata@kiibohd.com>
parents: 416
diff changeset
589
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
590 // ----- CLI Command Functions -----
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
591
431
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
592 void cliFunc_matrixInfo( char* args )
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
593 {
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
594 print( NL );
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
595 info_msg("Columns: ");
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
596 printHex( Matrix_colsNum );
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
597
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
598 print( NL );
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
599 info_msg("Rows: ");
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
600 printHex( Matrix_rowsNum );
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
601
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
602 print( NL );
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
603 info_msg("Max Keys: ");
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
604 printHex( Matrix_maxKeys );
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
605 }
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
606
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
607 void cliFunc_matrixDebug( char* args )
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
608 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
609 // Parse number from argument
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
610 // NOTE: Only first argument is used
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
611 char* arg1Ptr;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
612 char* arg2Ptr;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
613 CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
614
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
615 // Set the matrix debug flag depending on the argument
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
616 // If no argument, set to scan code only
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
617 // If set to T, set to state transition
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
618 switch ( arg1Ptr[0] )
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
619 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
620 // T as argument
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
621 case 'T':
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
622 case 't':
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
623 matrixDebugMode = matrixDebugMode != 2 ? 2 : 0;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
624 break;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
625
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
626 // No argument
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
627 case '\0':
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
628 matrixDebugMode = matrixDebugMode != 1 ? 1 : 0;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
629 break;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
630
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
631 // Invalid argument
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
632 default:
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
633 return;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
634 }
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
635
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
636 print( NL );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
637 info_msg("Matrix Debug Mode: ");
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
638 printInt8( matrixDebugMode );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
639 }
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
640
431
7bc4c6249dff Move matrix information to a cli command
Jacob Alexander <haata@kiibohd.com>
parents: 424
diff changeset
641 void cliFunc_matrixState( char* args )
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
642 {
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
643 // Parse number from argument
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
644 // NOTE: Only first argument is used
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
645 char* arg1Ptr;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
646 char* arg2Ptr;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
647 CLI_argumentIsolation( args, &arg1Ptr, &arg2Ptr );
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
648
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
649 // Default to 1 if no argument is given
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
650 matrixDebugStateCounter = 1;
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
651
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
652 if ( arg1Ptr[0] != '\0' )
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
653 {
195
58cfcb7bac88 Changing decToInt to numToInt (adds support for Hex number interpreter)
Jacob Alexander <haata@kiibohd.com>
parents: 192
diff changeset
654 matrixDebugStateCounter = (uint16_t)numToInt( arg1Ptr );
187
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
655 }
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
656 }
b250056298df Matrix scanning for ARM now functional.
Jacob Alexander <haata@kiibohd.com>
parents: 186
diff changeset
657