2026-07-15 15:57:37 +08:00
|
|
|
#ifndef __CONFIG_H__
|
|
|
|
|
#define __CONFIG_H__
|
|
|
|
|
|
2026-07-15 16:14:30 +08:00
|
|
|
#include "stc32g.h"
|
|
|
|
|
#include "intrins.h"
|
|
|
|
|
|
2026-07-15 15:57:37 +08:00
|
|
|
typedef unsigned char u8;
|
|
|
|
|
typedef unsigned int u16;
|
|
|
|
|
typedef unsigned long u32;
|
|
|
|
|
|
2026-07-15 16:14:30 +08:00
|
|
|
/* ====== 硬件引脚定义 (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)
|
|
|
|
|
|
2026-07-15 15:57:37 +08:00
|
|
|
/* ====== 系统状态 ====== */
|
|
|
|
|
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;
|
|
|
|
|
|
2026-07-15 16:14:30 +08:00
|
|
|
/* ====== 全局变量 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;
|
|
|
|
|
|
2026-07-15 15:57:37 +08:00
|
|
|
#define MAIN_Fosc 24000000UL
|
|
|
|
|
#define CLONED_ADDR 0x37A86UL
|
|
|
|
|
|
|
|
|
|
#endif
|
2026-07-15 16:14:30 +08:00
|
|
|
|