Initialize repository and implement low-power sleep wakeup

This commit is contained in:
Antigravity IDE
2026-07-15 15:57:37 +08:00
commit 30a2e1680b
70 changed files with 86332 additions and 0 deletions

110
App/config.h Normal file
View File

@@ -0,0 +1,110 @@
#ifndef __CONFIG_H__
#define __CONFIG_H__
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
/* ====== 系统状态 ====== */
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;
#define MAIN_Fosc 24000000UL
#define CLONED_ADDR 0x37A86UL
#endif

17
App/isr_jump.asm Normal file
View File

@@ -0,0 +1,17 @@
; 端口中断 0 / 2 的硬件中转绝对定位汇编 (A251)
; 目的Keil C251 编译器只支持 interrupt 0~31
; 而 STC32G 的端口中断硬件向量号为 37(Port0) 和 39(Port2)
; 超出范围无法用 C 直接声明。
; 本文件在绝对地址处放置 LJMP 指令,将硬件向量重定向到
; Keil 可以生成的 13 号和 15 号中断服务函数入口。
NAME ISR_JUMP
; 端口 0 中断 (向量 37, 硬件绝对地址 00012BH) 跳转到 13 号中断 (地址 00006BH)
CSEG AT 00012BH
LJMP 00006BH
; 端口 2 中断 (向量 39, 硬件绝对地址 00013BH) 跳转到 15 号中断 (地址 00007BH)
CSEG AT 00013BH
LJMP 00007BH
END

2242
App/main.c Normal file

File diff suppressed because it is too large Load Diff