Files
aw410k_rgb/aw410k.h
2025-09-06 12:15:42 -04:00

163 lines
3.7 KiB
C

#ifndef AW410K_H_
#define AW410K_H_
#define LDR_PIN 28
#define LDR_ADC 2
#define AW410K_VID 0x04F2
#define AW410K_PID 0x1968
#define RGB_ITF 1
#define RGB_REPORT_ID 0
#define NUM_KEYS 107
#define BUF_SIZE 64
#define ADC_MAX 4096
#define ADC_MAX_LOG2 log2(ADC_MAX)
enum {
RGG_MODE_INVALID=0,
RGB_MODE_SOLID,
RGB_MODE_ADAPTIVE,
RGB_MODE_MUTE,
};
struct key {
unsigned char name[15];
uint8_t val;
uint8_t red;
uint8_t green;
uint8_t blue;
uint8_t mode;
};
void get_light();
void rgb_task(uint8_t dev_addr);
void startADC();
bool forward_report(uint8_t instance, uint8_t const* report, uint16_t len);
void parse_colors(char * data, uint16_t len);
void get_color(char * data, uint16_t len);
void save_rgb_config(void);
bool load_rgb_config(void);
#define KEY_ESC 0xB0
#define KEY_F1 0x98
#define KEY_F2 0x90
#define KEY_F3 0x88
#define KEY_F4 0x80
#define KEY_F5 0x70
#define KEY_F6 0x68
#define KEY_F7 0x60
#define KEY_F8 0x58
#define KEY_F9 0x50
#define KEY_F10 0x48
#define KEY_F11 0x40
#define KEY_F12 0x38
#define KEY_SYSRQ 0x30 // printscreen
#define KEY_SCROLLLOCK 0x28
#define KEY_PAUSE 0x20
#define KEY_MUTE 0x18
#define KEY_VOLUMEDOWN 0x10
#define KEY_VOLUMEUP 0x08
#define KEY_GRAVE 0xB1 // ` and ~
#define KEY_1 0xA1
#define KEY_2 0x99
#define KEY_3 0x91
#define KEY_4 0x89
#define KEY_5 0x81
#define KEY_6 0x79
#define KEY_7 0x71
#define KEY_8 0x69
#define KEY_9 0x61
#define KEY_0 0x59
#define KEY_MINUS 0x51
#define KEY_EQUAL 0x49
#define KEY_BACKSPACE 0x39
#define KEY_INSERT 0x31
#define KEY_HOME 0x29
#define KEY_PAGEUP 0x21
#define KEY_NUMLOCK 0x19
#define KEY_KPSLASH 0x11
#define KEY_KPASTERISK 0x09
#define KEY_KPMINUS 0x01
#define KEY_TAB 0xB2
#define KEY_Q 0xA2
#define KEY_W 0x9A
#define KEY_E 0x92
#define KEY_R 0x8A
#define KEY_T 0x82
#define KEY_Y 0x7A
#define KEY_U 0x72
#define KEY_I 0x6A
#define KEY_O 0x62
#define KEY_P 0x5A
#define KEY_LEFTBRACE 0x52
#define KEY_RIGHTBRACE 0x4A
#define KEY_BACKSLASH 0x42
#define KEY_DELETE 0x32
#define KEY_END 0x2A
#define KEY_PAGEDOWN 0x22
#define KEY_KP7 0x1A
#define KEY_KP8 0x12
#define KEY_KP9 0x0A
#define KEY_KPPLUS 0x03
#define KEY_CAPSLOCK 0xB3
#define KEY_A 0xA3
#define KEY_S 0x9B
#define KEY_D 0x93
#define KEY_F 0x8B
#define KEY_G 0x83
#define KEY_H 0x7B
#define KEY_J 0x73
#define KEY_K 0x6B
#define KEY_L 0x63
#define KEY_SEMICOLON 0x5B
#define KEY_APOSTROPHE 0x53
#define KEY_ENTER 0x43
#define KEY_KP4 0x1B
#define KEY_KP5 0x13
#define KEY_KP6 0x0B
#define KEY_LEFTSHIFT 0xB4
#define KEY_Z 0xA4
#define KEY_X 0x9C
#define KEY_C 0x94
#define KEY_V 0x8C
#define KEY_B 0x84
#define KEY_N 0x7C
#define KEY_M 0x74
#define KEY_COMMA 0x6C
#define KEY_DOT 0x64
#define KEY_SLASH 0x5C
#define KEY_RIGHTSHIFT 0x4C
#define KEY_UP 0x2C
#define KEY_KP1 0x1C
#define KEY_KP2 0x14
#define KEY_KP3 0x0C
#define KEY_KPENTER 0x05
#define KEY_LEFTCTRL 0xB5
#define KEY_LEFTMETA 0xAD
#define KEY_LEFTALT 0xA5
#define KEY_SPACE 0x85
#define KEY_RIGHTALT 0x65
#define KEY_RIGHTMETA 0x5D // FN
#define KEY_MENU 0x55
#define KEY_RIGHTCTRL 0x4D
#define KEY_LEFT 0x35
#define KEY_DOWN 0x2D
#define KEY_RIGHT 0x25
#define KEY_KP0 0x1D
#define KEY_KPDOT 0x0D
#define INIT_KEY(name, code) {name, code, 0x80, 0x80, 0x80, RGB_MODE_ADAPTIVE}
#define INIT_KEY_MUTE(name, code) {name, code, 0x80, 0x80, 0x80, RGB_MODE_MUTE}
#define CFG_SIGNATURE 0xa22e
#if PICO_RP2040
#define FLASH_TARGET_OFFSET (PICO_FLASH_SIZE_BYTES - FLASH_SECTOR_SIZE)
#elif PICO_RP2350
#define FLASH_TARGET_OFFSET (PICO_FLASH_SIZE_BYTES - FLASH_BLOCK_SIZE - FLASH_SECTOR_SIZE)
#else
#error "Unsupported device. Expected RP2040 or RP2350."
#endif
#endif