#ifndef __CONFIG_H__ #define __CONFIG_H__ #include "stc32g.h" #include "intrins.h" typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32; /* ====== 硬件引脚定义 (sbit) ====== */ sbit MOTOR = P2^5; // 振动马达控制端 (推挽输出,与 SPI SCLK 物理共享引脚) sbit KEY_UP = P0^1; // 侧边按键 ▲ (高阻输入 + 上拉) sbit KEY_CONFIRM = P0^2; // 侧边按键 ■ (高阻输入 + 上拉) sbit KEY_DOWN = P0^3; // 侧边按键 ▼ (高阻输入 + 上拉) sbit KEY_SOS = P2^6; // 物理 SOS 求救按键 (高阻输入 + 上拉) sbit RGB_DIN = P2^3; // FCOB 幻彩灯条 DIN 控制线 sbit SHUT = P2^2; // LR690L 射频芯片休眠/工作控制引脚 (低使能开启工作) sbit SGM_CTRL = P3^4; // SGM3833 PMIC 屏幕负压供电使能脚 sbit LCD_RST = P1^0; // Truly AMOLED 屏幕复位脚 (RESET) sbit LCD_DCX = P1^1; // Truly AMOLED 屏幕数据/指令选择脚 (D/C) sbit LCD_SDI = P1^4; // Truly AMOLED 屏幕 SPI 数据脚 (MOSI) sbit LCD_SCL = P1^5; // Truly AMOLED 屏幕 SPI 时钟脚 (SCLK) sbit LCD_CS = P1^6; // Truly AMOLED 屏幕 SPI 片选脚 (CS) /* ====== 系统状态 ====== */ typedef enum { STATE_NORMAL, STATE_ARMED, STATE_DISARMED, STATE_PAIR_MENU, STATE_PAIR_WAIT, STATE_PAIR_CONFIRM, STATE_PAIR_SUCCESS, STATE_PAIR_FAIL, STATE_ALARM, STATE_SOS_EMITTED, STATE_SET_TIME, // 新增:时间调整编辑状态 STATE_IPC_BIND, // 新增:摄像机绑定状态 STATE_SLEEP // 新增:低功耗休眠挂起状态 } SystemState; /* ====== 按键事件类型 ====== */ typedef enum { KEY_EVENT_NONE, KEY_EVENT_UP_CLICK, KEY_EVENT_DOWN_CLICK, KEY_EVENT_SOS_CLICK, KEY_EVENT_UP_LONG, KEY_EVENT_DOWN_LONG, KEY_EVENT_SOS_LONG, KEY_EVENT_UP_DOWN_COMB, KEY_EVENT_CONFIRM_CLICK, // 新增:确认键短按 KEY_EVENT_CONFIRM_LONG // 新增:确认键长按 } KeyEvent; /* ====== 事件优先级 (步骤4) ====== */ typedef enum { EVENT_PRIORITY_LOW, // 0: 低优先级-系统内部事件 EVENT_PRIORITY_NORMAL, // 1: 正常优先级-用户交互 EVENT_PRIORITY_HIGH, // 2: 高优先级-报警事件 EVENT_PRIORITY_URGENT // 3: 紧急优先级-SOS } EventPriority; /* ====== 系统事件 (步骤4) ====== */ typedef struct { KeyEvent key_event; // 按键事件类型 EventPriority priority; // 事件优先级 u32 extra_data; // 额外数据(射频地址等) u8 extra_size; // 额外数据有效字节数(0~4) } SystemEvent; /* ====== 事件处理返回值 (步骤5) ====== */ typedef enum { EVENT_HANDLED, // 事件已处理,停止分发 EVENT_IGNORED // 事件未处理,继续传递 } EventResult; /* ====== 应用ID枚举 (步骤2) ====== */ typedef enum { APP_ID_CLOCK, // 0: 待机时钟 APP_ID_MENU, // 1: 主菜单 APP_ID_PAIR, // 2: 配对 APP_ID_ALARM, // 3: 传感器报警 APP_ID_SOS, // 4: 主动求救 APP_ID_MAX // 5: 应用数量上限 } AppID; /* ====== 应用类型 (步骤5) ====== */ typedef enum { APP_TYPE_FOREGROUND, // 前台应用:独占屏幕 APP_TYPE_BACKGROUND // 后台应用:无屏幕,监听事件 } AppType; /* ====== 应用描述符 ====== */ struct WristbandApp; typedef struct WristbandApp WristbandApp; typedef void (*AppStartFunc)(void); typedef void (*AppRunFunc)(void); typedef void (*AppCloseFunc)(void); typedef EventResult (*AppEventFunc)(SystemEvent *evt); struct WristbandApp { AppID app_id; AppType app_type; char *app_name; void (*OnStart)(void); void (*onRun)(void); void (*onClose)(void); EventResult (*onEvent)(SystemEvent *evt); u8 is_active; // 是否当前活跃 u8 is_running; // 是否允许运行 onRun }; /* ====== 传感器存储结构 ====== */ typedef struct { unsigned char is_used; unsigned char addr[3]; unsigned char type; unsigned char zone; unsigned char name_gbk[16]; } Sensor_Slot; /* ====== 全局变量 extern 声明 ====== */ extern SystemState current_state; extern u8 current_hour; extern u8 current_min; extern u8 current_sec; extern volatile u8 clock_updated; extern u8 menu_select; extern u32 captured_addr; extern u8 captured_type; extern u8 alarm_sensor_slot; extern Sensor_Slot xdata sensor_list[16]; extern char *code sensor_names_fr[5]; extern volatile u16 ms_tick; extern volatile u16 inactivity_timer; // 无操作闲置计时器 extern volatile u32 pair_timeout_ms; extern volatile u16 alarm_timer_ms; extern volatile u16 motor_timer_ms; extern volatile bit alarm_flash_flag; extern volatile u16 key_scan_timer; extern volatile u16 key_up_hold; extern volatile u16 key_down_hold; extern volatile u16 key_confirm_hold; extern volatile u16 key_sos_hold; extern volatile u16 comb_hold; extern volatile u8 isr_p0_flag; extern volatile u8 isr_p2_flag; #define MAIN_Fosc 24000000UL #define CLONED_ADDR 0x37A86UL #endif