]> git.donarmstrong.com Git - kiibohd-controller.git/blob - Scan/MatrixARM/matrix_scan.h
Code cleanup
[kiibohd-controller.git] / Scan / MatrixARM / matrix_scan.h
1 /* Copyright (C) 2014-2015 by Jacob Alexander
2  *
3  * Permission is hereby granted, free of charge, to any person obtaining a copy
4  * of this software and associated documentation files (the "Software"), to deal
5  * in the Software without restriction, including without limitation the rights
6  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7  * copies of the Software, and to permit persons to whom the Software is
8  * furnished to do so, subject to the following conditions:
9  *
10  * The above copyright notice and this permission notice shall be included in
11  * all copies or substantial portions of the Software.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19  * THE SOFTWARE.
20  */
21
22 #pragma once
23
24 // ----- Includes -----
25
26 // KLL Generated Defines
27 #include <kll_defs.h>
28
29
30
31 // ----- Defines -----
32
33 #if   ( DebounceDivThreshold_define < 0xFF + 1 )
34 #define DebounceCounter uint8_t
35 #elif ( DebounceDivThreshold_define < 0xFFFF + 1 )
36 #define DebounceCounter uint16_t
37 #elif ( DebounceDivThreshold_define < 0xFFFFFFFF + 1 )
38 #define DebounceCounter uint32_t
39 #else
40 #error "Debounce threshold is too high... 32 bit max. Check .kll defines."
41 #endif
42
43
44
45 // ----- Enums -----
46
47 // Freescale MK20s have GPIO ports A...E
48 typedef enum Port {
49         Port_A = 0,
50         Port_B = 1,
51         Port_C = 2,
52         Port_D = 3,
53         Port_E = 4,
54 } Port;
55
56 // Each port has a possible 32 pins
57 typedef enum Pin {
58         Pin_0  = 0,
59         Pin_1  = 1,
60         Pin_2  = 2,
61         Pin_3  = 3,
62         Pin_4  = 4,
63         Pin_5  = 5,
64         Pin_6  = 6,
65         Pin_7  = 7,
66         Pin_8  = 8,
67         Pin_9  = 9,
68         Pin_10 = 10,
69         Pin_11 = 11,
70         Pin_12 = 12,
71         Pin_13 = 13,
72         Pin_14 = 14,
73         Pin_15 = 15,
74         Pin_16 = 16,
75         Pin_17 = 17,
76         Pin_18 = 18,
77         Pin_19 = 19,
78         Pin_20 = 20,
79         Pin_21 = 21,
80         Pin_22 = 22,
81         Pin_23 = 23,
82         Pin_24 = 24,
83         Pin_25 = 25,
84         Pin_26 = 26,
85         Pin_27 = 27,
86         Pin_28 = 28,
87         Pin_29 = 29,
88         Pin_30 = 30,
89         Pin_31 = 31,
90 } Pin;
91
92 // Type of pin
93 typedef enum Type {
94         Type_StrobeOn,
95         Type_StrobeOff,
96         Type_StrobeSetup,
97         Type_Sense,
98         Type_SenseSetup,
99 } Type;
100
101 // Sense/Strobe configuration
102 typedef enum Config {
103         Config_Pullup,    // Internal pull-up
104         Config_Pulldown,  // Internal pull-down
105         Config_Opendrain, // External pull resistor
106 } Config;
107
108 // Keypress States
109 typedef enum KeyPosition {
110         KeyState_Off     = 0,
111         KeyState_Press   = 1,
112         KeyState_Hold    = 2,
113         KeyState_Release = 3,
114         KeyState_Invalid,
115 } KeyPosition;
116
117
118
119 // ----- Structs -----
120
121 // Struct container for defining Rows (Sense) and Columns (Strobes)
122 typedef struct GPIO_Pin {
123         Port port;
124         Pin  pin;
125 } GPIO_Pin;
126
127 // Debounce Element
128 typedef struct KeyState {
129         KeyPosition     prevState;
130         KeyPosition     curState;
131         DebounceCounter activeCount;
132         DebounceCounter inactiveCount;
133 } KeyState;
134
135
136
137 // ----- Functions -----
138
139 void Matrix_setup();
140 void Matrix_scan( uint16_t scanNum );
141