90 lines
2.7 KiB
C
90 lines
2.7 KiB
C
#pragma once
|
|
// --- System registers ---
|
|
#include <stdint.h>
|
|
#include "keymap.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);
|
|
|
|
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); |