Files
cardputerfw/main/drivers/tca8418.h
2026-05-08 15:09:47 +02:00

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);