Init
This commit is contained in:
@@ -0,0 +1,459 @@
|
||||
#pragma once
|
||||
// --- System registers ---
|
||||
#include <stdint.h>
|
||||
#define TCA8418_REG_CFG 0x01
|
||||
#define TCA8418_REG_INT_STAT 0x02
|
||||
#define TCA8418_REG_KEY_LCK_EC 0x03
|
||||
#define TCA8418_REG_KEY_EVENT_A 0x04
|
||||
#define TCA8418_REG_KEY_EVENT_B 0x05
|
||||
#define TCA8418_REG_KEY_EVENT_C 0x06
|
||||
#define TCA8418_REG_KEY_EVENT_D 0x07
|
||||
#define TCA8418_REG_KEY_EVENT_E 0x08
|
||||
#define TCA8418_REG_KEY_EVENT_F 0x09
|
||||
#define TCA8418_REG_KEY_EVENT_G 0x0A
|
||||
#define TCA8418_REG_KEY_EVENT_H 0x0B
|
||||
#define TCA8418_REG_KEY_EVENT_I 0x0C
|
||||
#define TCA8418_REG_KEY_EVENT_J 0x0D
|
||||
#define TCA8418_REG_KP_LCK_TIMER 0x0E
|
||||
#define TCA8418_REG_UNLOCK1 0x0F
|
||||
#define TCA8418_REG_UNLOCK2 0x10
|
||||
#define TCA8418_REG_GPIO_INT_STAT1 0x11
|
||||
#define TCA8418_REG_GPIO_INT_STAT2 0x12
|
||||
#define TCA8418_REG_GPIO_INT_STAT3 0x13
|
||||
#define TCA8418_REG_DAT_STAT1 0x14
|
||||
#define TCA8418_REG_DAT_STAT2 0x15
|
||||
#define TCA8418_REG_DAT_STAT3 0x16
|
||||
#define TCA8418_REG_DAT_OUT1 0x17
|
||||
#define TCA8418_REG_DAT_OUT2 0x18
|
||||
#define TCA8418_REG_DAT_OUT3 0x19
|
||||
#define TCA8418_REG_GPIO_INT_EN1 0x1A
|
||||
#define TCA8418_REG_GPIO_INT_EN2 0x1B
|
||||
#define TCA8418_REG_GPIO_INT_EN3 0x1C
|
||||
#define TCA8418_REG_KP_GPIO1 0x1D
|
||||
#define TCA8418_REG_KP_GPIO2 0x1E
|
||||
#define TCA8418_REG_KP_GPIO3 0x1F
|
||||
#define TCA8418_REG_GPI_EM1 0x20
|
||||
#define TCA8418_REG_GPI_EM2 0x21
|
||||
#define TCA8418_REG_GPI_EM3 0x22
|
||||
#define TCA8418_REG_GPIO_DIR1 0x23
|
||||
#define TCA8418_REG_GPIO_DIR2 0x24
|
||||
#define TCA8418_REG_GPIO_DIR3 0x25
|
||||
#define TCA8418_REG_GPIO_INT_LVL1 0x26
|
||||
#define TCA8418_REG_GPIO_INT_LVL2 0x27
|
||||
#define TCA8418_REG_GPIO_INT_LVL3 0x28
|
||||
#define TCA8418_REG_DEBOUNCE_DIS1 0x29
|
||||
#define TCA8418_REG_DEBOUNCE_DIS2 0x2A
|
||||
#define TCA8418_REG_DEBOUNCE_DIS3 0x2B
|
||||
#define TCA8418_REG_GPIO_PULL1 0x2C
|
||||
#define TCA8418_REG_GPIO_PULL2 0x2D
|
||||
#define TCA8418_REG_GPIO_PULL3 0x2E
|
||||
|
||||
// --- Keypad configuration ---
|
||||
|
||||
|
||||
// --- Interrupt bits ---
|
||||
#define TCA8418_INT_KEY_EVENT (1 << 0)
|
||||
#define TCA8418_INT_GPIO (1 << 1)
|
||||
#define TCA8418_INT_KP_LOCK (1 << 2)
|
||||
#define TCA8418_INT_OVR_FLOW (1 << 3)
|
||||
#define TCA8418_INT_CAD (1 << 4)
|
||||
|
||||
// --- Config bits ---
|
||||
#define TCA8418_CFG_INT_ENABLE (1 << 0)
|
||||
#define TCA8418_CFG_GPIO_INT_ENABLE (1 << 1)
|
||||
#define TCA8418_CFG_LOCK_INT_ENABLE (1 << 2)
|
||||
#define TCA8418_CFG_OVF_INT_ENABLE (1 << 3)
|
||||
#define TCA8418_CFG_INT_CFG (1 << 4)
|
||||
#define TCA8418_CFG_OVERFLOW_MODE (1 << 5)
|
||||
#define TCA8418_CFG_GPIO_TRACK_LOCKED (1 << 6)
|
||||
#define TCA8418_CFG_AUTO_INCREMENT (1 << 7)
|
||||
|
||||
void tca8418_init(void);
|
||||
|
||||
int tca8418_read(uint8_t *key, uint8_t *pressed);
|
||||
/* test
|
||||
|
||||
key= 2 pressed
|
||||
key= 3 pressed
|
||||
key= 4 pressed
|
||||
key=1 5 pressed
|
||||
key=q 6 pressed
|
||||
key= 7 pressed
|
||||
key= 8 pressed
|
||||
|
||||
key=a 11 pressed
|
||||
key= 12 pressed
|
||||
key=3 13 pressed
|
||||
key=e 14 pressed
|
||||
key=s 15 pressed
|
||||
key=z 16 pressed
|
||||
key=4 17 pressed
|
||||
key=r 18 pressed
|
||||
|
||||
key=5 21 pressed
|
||||
key=t 22 pressed
|
||||
key=f 23 pressed
|
||||
key=c 24 pressed
|
||||
key=6 25 pressed
|
||||
key=y 26 pressed
|
||||
key=g 27 pressed
|
||||
key=v 28 pressed
|
||||
|
||||
key=h 31 pressed
|
||||
key=b 32 pressed
|
||||
key=8 33 pressed
|
||||
key=i 34 pressed
|
||||
key=j 35 pressed
|
||||
key=n 36 pressed
|
||||
key=9 37 pressed
|
||||
key=o 38 pressed
|
||||
|
||||
key=0 41 pressed
|
||||
key=p 42 pressed
|
||||
key=l 43 pressed
|
||||
key= 44 pressed
|
||||
key= 45 pressed
|
||||
key= 46 pressed
|
||||
key= 47 pressed
|
||||
key= 48 pressed
|
||||
|
||||
key= 51 pressed
|
||||
key= 52 pressed
|
||||
key= 53 pressed
|
||||
key= 54 pressed
|
||||
key= 55 pressed
|
||||
key= 56 pressed
|
||||
key= 57 pressed
|
||||
key= 58 pressed
|
||||
|
||||
key=s 61 pressed
|
||||
key=2 62 pressed
|
||||
key=8 63 pressed
|
||||
key=1 64 pressed
|
||||
key=2 65 pressed
|
||||
key=_ 66 pressed
|
||||
key=s 67 pressed
|
||||
key=e 68 pressed
|
||||
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
KEYBOARD_GPIO0 = 0,
|
||||
|
||||
KEYBOARD_ESC = 1,
|
||||
KEYBOARD_TAB = 2,
|
||||
KEYBOARD_MOD_FN = 3,
|
||||
KEYBOARD_MOD_CTRL = 4,
|
||||
KEYBOARD_1 = 5,
|
||||
KEYBOARD_Q = 6,
|
||||
KEYBOARD_MOD_SHIFT = 7,
|
||||
KEYBOARD_MOD_OPT = 8,
|
||||
|
||||
KEYBOARD_2 = 11,
|
||||
KEYBOARD_W = 12,
|
||||
KEYBOARD_A = 13,
|
||||
KEYBOARD_MOD_ALT = 14,
|
||||
KEYBOARD_3 = 15,
|
||||
KEYBOARD_E = 16,
|
||||
KEYBOARD_S = 17,
|
||||
KEYBOARD_Z = 18,
|
||||
|
||||
KEYBOARD_4 = 21,
|
||||
KEYBOARD_R = 22,
|
||||
KEYBOARD_D = 23,
|
||||
KEYBOARD_X = 24,
|
||||
KEYBOARD_5 = 25,
|
||||
KEYBOARD_T = 26,
|
||||
KEYBOARD_F = 27,
|
||||
KEYBOARD_C = 28,
|
||||
|
||||
KEYBOARD_6 = 31,
|
||||
KEYBOARD_Y = 32,
|
||||
KEYBOARD_G = 33,
|
||||
KEYBOARD_V = 34,
|
||||
KEYBOARD_7 = 35,
|
||||
KEYBOARD_U = 36,
|
||||
KEYBOARD_H = 37,
|
||||
KEYBOARD_B = 38,
|
||||
|
||||
KEYBOARD_8 = 41,
|
||||
KEYBOARD_I = 42,
|
||||
KEYBOARD_J = 43,
|
||||
KEYBOARD_N = 44,
|
||||
KEYBOARD_9 = 45,
|
||||
KEYBOARD_O = 46,
|
||||
KEYBOARD_K = 47,
|
||||
KEYBOARD_M = 48,
|
||||
|
||||
KEYBOARD_0 = 51,
|
||||
KEYBOARD_P = 52,
|
||||
KEYBOARD_L = 53,
|
||||
KEYBOARD_LEFT = 54, //also comma
|
||||
KEYBOARD_UNDERSCORE = 55,
|
||||
KEYBOARD_LEFT_BRACKET = 56,
|
||||
KEYBOARD_UP = 57, //also semicolon
|
||||
KEYBOARD_DOWN = 58,
|
||||
|
||||
KEYBOARD_EQUALS = 61,
|
||||
KEYBOARD_RIGHT_BRACKET = 62,
|
||||
KEYBOARD_APOSTROPHE = 63,
|
||||
KEYBOARD_RIGHT = 64, //also slash
|
||||
KEYBOARD_BACKSPACE = 65,
|
||||
KEYBOARD_BACKSLASH = 66,
|
||||
KEYBOARD_RETURN = 67,
|
||||
KEYBOARD_SPACE = 68
|
||||
}
|
||||
KEYMAP_MAP;
|
||||
|
||||
#define KEYBOARD_KEYS_COUNT 80
|
||||
|
||||
typedef enum {
|
||||
KEYBOARD_SHIFT_TILDE = KEYBOARD_ESC,
|
||||
KEYBOARD_SHIFT_EXCLAMATION = KEYBOARD_1,
|
||||
KEYBOARD_SHIFT_AT = KEYBOARD_2,
|
||||
KEYBOARD_SHIFT_HASH = KEYBOARD_3,
|
||||
KEYBOARD_SHIFT_DOLLAR = KEYBOARD_4,
|
||||
KEYBOARD_SHIFT_PERCENT = KEYBOARD_5,
|
||||
KEYBOARD_SHIFT_POWER = KEYBOARD_6,
|
||||
KEYBOARD_SHIFT_AMPERSAND = KEYBOARD_7,
|
||||
KEYBOARD_SHIFT_STAR = KEYBOARD_8,
|
||||
KEYBOARD_SHIFT_OPENPARETHESIS = KEYBOARD_9,
|
||||
KEYBOARD_SHIFT_CLOSEPARENTHESIS = KEYBOARD_0,
|
||||
KEYBOARD_SHIFT_LESS = KEYBOARD_LEFT,
|
||||
KEYBOARD_SHIFT_DASH = KEYBOARD_UNDERSCORE,
|
||||
KEYBOARD_SHIFT_LEFT_CURLY_BRACKET = KEYBOARD_LEFT_BRACKET,
|
||||
KEYBOARD_SHIFT_COLON = KEYBOARD_UP,
|
||||
KEYBOARD_SHIFT_GREATER = KEYBOARD_DOWN,
|
||||
KEYBOARD_SHIFT_PLUS = KEYBOARD_EQUALS,
|
||||
KEYBOARD_SHIFT_RIGHT_CURLY_BRACKET = KEYBOARD_RIGHT_BRACKET,
|
||||
KEYBOARD_SHIFT_APOSTROPHES = KEYBOARD_APOSTROPHE,
|
||||
KEYBOARD_SHIFT_QUESTIONMARK = KEYBOARD_LEFT, //also slash
|
||||
KEYBOARD_SHIFT_DELETE = KEYBOARD_BACKSPACE,
|
||||
KEYBOARD_SHIFT_PIPE = KEYBOARD_BACKSLASH,
|
||||
} KEYMAP_SHIFT;
|
||||
|
||||
static const char keymap_normal[] = {
|
||||
[KEYBOARD_ESC] = 27,
|
||||
[KEYBOARD_TAB] = '\t',
|
||||
[KEYBOARD_SPACE] = ' ',
|
||||
[KEYBOARD_RETURN] = '\n',
|
||||
[KEYBOARD_BACKSPACE] = '\b',
|
||||
|
||||
[KEYBOARD_1] = '1',
|
||||
[KEYBOARD_2] = '2',
|
||||
[KEYBOARD_3] = '3',
|
||||
[KEYBOARD_4] = '4',
|
||||
[KEYBOARD_5] = '5',
|
||||
[KEYBOARD_6] = '6',
|
||||
[KEYBOARD_7] = '7',
|
||||
[KEYBOARD_8] = '8',
|
||||
[KEYBOARD_9] = '9',
|
||||
[KEYBOARD_0] = '0',
|
||||
|
||||
[KEYBOARD_Q] = 'q',
|
||||
[KEYBOARD_W] = 'w',
|
||||
[KEYBOARD_E] = 'e',
|
||||
[KEYBOARD_R] = 'r',
|
||||
[KEYBOARD_T] = 't',
|
||||
[KEYBOARD_Y] = 'y',
|
||||
[KEYBOARD_U] = 'u',
|
||||
[KEYBOARD_I] = 'i',
|
||||
[KEYBOARD_O] = 'o',
|
||||
[KEYBOARD_P] = 'p',
|
||||
|
||||
[KEYBOARD_A] = 'a',
|
||||
[KEYBOARD_S] = 's',
|
||||
[KEYBOARD_D] = 'd',
|
||||
[KEYBOARD_F] = 'f',
|
||||
[KEYBOARD_G] = 'g',
|
||||
[KEYBOARD_H] = 'h',
|
||||
[KEYBOARD_J] = 'j',
|
||||
[KEYBOARD_K] = 'k',
|
||||
[KEYBOARD_L] = 'l',
|
||||
|
||||
[KEYBOARD_Z] = 'z',
|
||||
[KEYBOARD_X] = 'x',
|
||||
[KEYBOARD_C] = 'c',
|
||||
[KEYBOARD_V] = 'v',
|
||||
[KEYBOARD_B] = 'b',
|
||||
[KEYBOARD_N] = 'n',
|
||||
[KEYBOARD_M] = 'm',
|
||||
|
||||
[KEYBOARD_LEFT] = ',',
|
||||
[KEYBOARD_RIGHT] = '/',
|
||||
[KEYBOARD_UP] = ';',
|
||||
[KEYBOARD_DOWN] = '.',
|
||||
|
||||
[KEYBOARD_UNDERSCORE] = '-',
|
||||
[KEYBOARD_EQUALS] = '=',
|
||||
[KEYBOARD_LEFT_BRACKET] = '[',
|
||||
[KEYBOARD_RIGHT_BRACKET] = ']',
|
||||
[KEYBOARD_APOSTROPHE] = '\'',
|
||||
[KEYBOARD_BACKSLASH] = '\\',
|
||||
};
|
||||
|
||||
static const char keymap_shift[] = {
|
||||
[KEYBOARD_ESC] = '~',
|
||||
|
||||
[KEYBOARD_1] = '!',
|
||||
[KEYBOARD_2] = '@',
|
||||
[KEYBOARD_3] = '#',
|
||||
[KEYBOARD_4] = '$',
|
||||
[KEYBOARD_5] = '%',
|
||||
[KEYBOARD_6] = '^',
|
||||
[KEYBOARD_7] = '&',
|
||||
[KEYBOARD_8] = '*',
|
||||
[KEYBOARD_9] = '(',
|
||||
[KEYBOARD_0] = ')',
|
||||
|
||||
[KEYBOARD_Q] = 'Q',
|
||||
[KEYBOARD_W] = 'W',
|
||||
[KEYBOARD_E] = 'E',
|
||||
[KEYBOARD_R] = 'R',
|
||||
[KEYBOARD_T] = 'T',
|
||||
[KEYBOARD_Y] = 'Y',
|
||||
[KEYBOARD_U] = 'U',
|
||||
[KEYBOARD_I] = 'I',
|
||||
[KEYBOARD_O] = 'O',
|
||||
[KEYBOARD_P] = 'P',
|
||||
|
||||
[KEYBOARD_A] = 'A',
|
||||
[KEYBOARD_S] = 'S',
|
||||
[KEYBOARD_D] = 'D',
|
||||
[KEYBOARD_F] = 'F',
|
||||
[KEYBOARD_G] = 'G',
|
||||
[KEYBOARD_H] = 'H',
|
||||
[KEYBOARD_J] = 'J',
|
||||
[KEYBOARD_K] = 'K',
|
||||
[KEYBOARD_L] = 'L',
|
||||
|
||||
[KEYBOARD_Z] = 'Z',
|
||||
[KEYBOARD_X] = 'X',
|
||||
[KEYBOARD_C] = 'C',
|
||||
[KEYBOARD_V] = 'V',
|
||||
[KEYBOARD_B] = 'B',
|
||||
[KEYBOARD_N] = 'N',
|
||||
[KEYBOARD_M] = 'M',
|
||||
|
||||
[KEYBOARD_LEFT] = '<',
|
||||
[KEYBOARD_RIGHT] = '?',
|
||||
[KEYBOARD_UP] = ':',
|
||||
[KEYBOARD_DOWN] = '>',
|
||||
|
||||
[KEYBOARD_UNDERSCORE] = '_',
|
||||
[KEYBOARD_EQUALS] = '+',
|
||||
[KEYBOARD_LEFT_BRACKET] = '{',
|
||||
[KEYBOARD_RIGHT_BRACKET] = '}',
|
||||
[KEYBOARD_APOSTROPHE] = '"',
|
||||
[KEYBOARD_BACKSLASH] = '|',
|
||||
};
|
||||
|
||||
static const char * keymap_normal_name[] = {
|
||||
[KEYBOARD_ESC] = "ESC",
|
||||
[KEYBOARD_TAB] = "TAB",
|
||||
[KEYBOARD_SPACE] = "SPACE",
|
||||
[KEYBOARD_MOD_FN] = "FN",
|
||||
[KEYBOARD_MOD_CTRL] = "CTRL",
|
||||
[KEYBOARD_MOD_SHIFT] = "SHIFT",
|
||||
[KEYBOARD_MOD_OPT] = "OPT",
|
||||
[KEYBOARD_MOD_ALT] = "ALT",
|
||||
|
||||
[KEYBOARD_LEFT] = ",",
|
||||
[KEYBOARD_RIGHT] = "/",
|
||||
[KEYBOARD_UP] = ";",
|
||||
[KEYBOARD_DOWN] = ".",
|
||||
|
||||
[KEYBOARD_UNDERSCORE] = "-",
|
||||
[KEYBOARD_EQUALS] = "=",
|
||||
[KEYBOARD_LEFT_BRACKET] = "[",
|
||||
[KEYBOARD_RIGHT_BRACKET] = "]",
|
||||
[KEYBOARD_APOSTROPHE] = "'",
|
||||
[KEYBOARD_BACKSLASH] = "\\",
|
||||
|
||||
[KEYBOARD_SHIFT_DELETE] = "DELETE",
|
||||
[KEYBOARD_RETURN] = "RETURN",
|
||||
|
||||
[KEYBOARD_1] = "1",
|
||||
[KEYBOARD_2] = "2",
|
||||
[KEYBOARD_3] = "3",
|
||||
[KEYBOARD_4] = "4",
|
||||
[KEYBOARD_5] = "5",
|
||||
[KEYBOARD_6] = "6",
|
||||
[KEYBOARD_7] = "7",
|
||||
[KEYBOARD_8] = "8",
|
||||
[KEYBOARD_9] = "9",
|
||||
[KEYBOARD_0] = "0",
|
||||
|
||||
[KEYBOARD_Q] = "q",
|
||||
[KEYBOARD_W] = "w",
|
||||
[KEYBOARD_E] = "e",
|
||||
[KEYBOARD_R] = "r",
|
||||
[KEYBOARD_T] = "t",
|
||||
[KEYBOARD_Y] = "y",
|
||||
[KEYBOARD_U] = "u",
|
||||
[KEYBOARD_I] = "i",
|
||||
[KEYBOARD_O] = "o",
|
||||
[KEYBOARD_P] = "p",
|
||||
|
||||
[KEYBOARD_A] = "a",
|
||||
[KEYBOARD_S] = "s",
|
||||
[KEYBOARD_D] = "d",
|
||||
[KEYBOARD_F] = "f",
|
||||
[KEYBOARD_G] = "g",
|
||||
[KEYBOARD_H] = "h",
|
||||
[KEYBOARD_J] = "j",
|
||||
[KEYBOARD_K] = "k",
|
||||
[KEYBOARD_L] = "l",
|
||||
|
||||
[KEYBOARD_Z] = "z",
|
||||
[KEYBOARD_X] = "x",
|
||||
[KEYBOARD_C] = "c",
|
||||
[KEYBOARD_V] = "v",
|
||||
[KEYBOARD_B] = "b",
|
||||
[KEYBOARD_N] = "n",
|
||||
[KEYBOARD_M] = "m",
|
||||
};
|
||||
|
||||
static const char * keymap_shift_name[] = {
|
||||
[KEYBOARD_ESC] = "~",
|
||||
|
||||
[KEYBOARD_1] = "!",
|
||||
[KEYBOARD_2] = "@",
|
||||
[KEYBOARD_3] = "#",
|
||||
[KEYBOARD_4] = "$",
|
||||
[KEYBOARD_5] = "%",
|
||||
[KEYBOARD_6] = "^",
|
||||
[KEYBOARD_7] = "&",
|
||||
[KEYBOARD_8] = "*",
|
||||
[KEYBOARD_9] = "(",
|
||||
[KEYBOARD_0] = ")",
|
||||
|
||||
[KEYBOARD_LEFT] = "<",
|
||||
[KEYBOARD_RIGHT] = "?",
|
||||
[KEYBOARD_UP] = ":",
|
||||
[KEYBOARD_DOWN] = ">",
|
||||
|
||||
[KEYBOARD_UNDERSCORE] = "_",
|
||||
[KEYBOARD_EQUALS] = "+",
|
||||
[KEYBOARD_LEFT_BRACKET] = "{",
|
||||
[KEYBOARD_RIGHT_BRACKET] = "}",
|
||||
[KEYBOARD_APOSTROPHE] = "\"",
|
||||
[KEYBOARD_BACKSLASH] = "|",
|
||||
};
|
||||
|
||||
|
||||
typedef struct {
|
||||
bool fnPressed;
|
||||
bool ctrlPressed;
|
||||
bool shiftPressed;
|
||||
bool altPressed;
|
||||
bool optPressed;
|
||||
//for convenience
|
||||
bool pressedKeys[KEYBOARD_KEYS_COUNT];
|
||||
} KeyboardState_t;
|
||||
|
||||
extern KeyboardState_t keyboardState;
|
||||
|
||||
char getKeyboardChar(const uint8_t code);
|
||||
|
||||
const char * getKeyboardKeyName(const uint8_t code);
|
||||
Reference in New Issue
Block a user