-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathKeysDataHandler.h
More file actions
101 lines (82 loc) · 3.14 KB
/
Copy pathKeysDataHandler.h
File metadata and controls
101 lines (82 loc) · 3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#ifndef __KEY_HANDLER_H__
#define __KEY_HANDLER_H__
#include <stdint.h>
#ifdef __cplusplus
extern "C"
{
#endif
// 定义按键类别
#define KEY_TYPE_INVALID 0x00
#define KEY_TYPE_KB 0x01 // 键盘(8位值)
#define KEY_TYPE_MEDIA 0x02 // 媒体(16位值)
#define KEY_TYPE_MOUSE 0x03 // 鼠标(8位值)
#define KEY_TYPE_MACRO 0x05 // 宏 (valueHi=trigger, valueLo=slot)
// EEPROM 布局 (多层)
// [0x00] FW_VERSION
// [0x01] DEVICE_TYPE
// [0x02] CURRENT_LAYER
// [0x03..] Layer data: MAX_LAYERS × KEY_CONFIG_SLOTS × 3 bytes
// [RGB_BASE..] RGB config: 10 bytes
// KEY_CONFIG_SLOTS 由 config.h 按变体定义 (BASIC=4, KNOB=7, 5KEY=5)
#define EEPROM_VERSION_ADDR 0x00
#define EEPROM_DEVTYPE_ADDR 0x01
#define EEPROM_LAYER_ADDR 0x02
#define EEPROM_KEYDATA_START 0x03
#define KEY_CONFIG_SIZE 3
#define LAYER_DATA_SIZE (KEY_CONFIG_SLOTS * KEY_CONFIG_SIZE)
#define HOST_CMD_READ 0x01
#define HOST_CMD_WRITE 0x02
#define HOST_CMD_READ_LAYER 0x03
#define HOST_CMD_SET_LAYER 0x04
#define HOST_CMD_READ_META 0x05
#define HOST_CMD_READ_RGB 0x06
#define HOST_CMD_WRITE_RGB 0x07
#define HOST_CMD_FACTORY_RESET 0x08
#define HOST_CMD_READ_OS_MODE 0x09
#define HOST_CMD_WRITE_OS_MODE 0x0A
#define HOST_CMD_MACRO_INFO 0x40
#define OS_MODE_WIN 0
#define OS_MODE_MAC 1
// RGB EEPROM 地址 (紧接层数据后面, 动态计算)
#define EEPROM_RGB_BASE_ADDR (EEPROM_KEYDATA_START + MAX_LAYERS * LAYER_DATA_SIZE)
#define EEPROM_RGB_ENABLED_ADDR (EEPROM_RGB_BASE_ADDR + 0)
#define EEPROM_RGB_MODE_ADDR (EEPROM_RGB_BASE_ADDR + 1)
#define EEPROM_RGB_BRIGHTNESS_ADDR (EEPROM_RGB_BASE_ADDR + 2)
#define EEPROM_RGB_SPEED_ADDR (EEPROM_RGB_BASE_ADDR + 3)
#define EEPROM_RGB_COLOR_R_ADDR (EEPROM_RGB_BASE_ADDR + 4)
#define EEPROM_RGB_COLOR_G_ADDR (EEPROM_RGB_BASE_ADDR + 5)
#define EEPROM_RGB_COLOR_B_ADDR (EEPROM_RGB_BASE_ADDR + 6)
#define EEPROM_RGB_PRESS_EFFECT_ADDR (EEPROM_RGB_BASE_ADDR + 9)
// MeowFS 格式化标记
#define EEPROM_MEOWFS_FMT_ADDR (EEPROM_RGB_BASE_ADDR + 10)
#define MEOWFS_FMT_MAGIC 0x4D /* 'M' — 区别旧固件残留的 0xAA/0xFF */
// USB HID 轮询率 (bInterval: 1=1000Hz, 2=500Hz, 10=100Hz)
#define EEPROM_POLL_RATE_ADDR (EEPROM_RGB_BASE_ADDR + 11)
#define EEPROM_OS_MODE_ADDR (EEPROM_RGB_BASE_ADDR + 12)
// 函数声明
void KeysDataInit(void);
void setKey(uint8_t layer, uint8_t index, uint8_t type, uint16_t value);
uint8_t getKeyType(uint8_t index); // 从当前层读
uint16_t getKeyValue(uint8_t index); // 从当前层读
uint8_t getKeyTypeAt(uint8_t layer, uint8_t index);
uint16_t getKeyValueAt(uint8_t layer, uint8_t index);
// 层管理
extern __xdata uint8_t osMode;
uint8_t getCurrentLayer(void);
void setCurrentLayer(uint8_t layer);
void setOsMode(uint8_t mode);
// EEPROM 接口
void saveLayerToEEPROM(uint8_t layer);
void saveCurrentLayerToEEPROM(void);
void loadAllFromEEPROM(void);
// 恢复出厂设置
void KeysDataFactoryReset(void);
// HID 协议响应
void fillSysInfoResponse(uint8_t *__xdata buf);
void fillLayerResponse(uint8_t *__xdata buf, uint8_t layer);
void fillRgbResponse(uint8_t *__xdata buf);
void applyRgbConfig(void);
#ifdef __cplusplus
}
#endif
#endif // KEY_HANDLER_H