Files
stc32g128k/App/main.c

316 lines
14 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "config.h"
#include "rgb.h"
#include "event.h"
#include "app_manager.h"
#include "database.h"
#include "ui.h"
#include "system.h"
#include "../Drivers/rf.h"
#include "../Drivers/lcd.h"
/* =========================================================================
* 蝟餌<E89D9F><E9A48C><EFBFBD><E585B8><EFBFBD>摰帋<E691B0>
* ========================================================================= */
SystemState current_state = STATE_NORMAL; // 蝟餌<E89D9F><E9A48C><EFBFBD><E6B8AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵𣬚𠶖<F0A3AC9A><F0A0B696><EFBFBD>暺䁅支蛹甇<E89BB9><EFBFBD><EFBFBD><EFBFBD>㦤憿
u8 menu_select = 0; // 銝餉<E98A9D><E9A489><EFBFBD><E8A8AB>漤劐葉<E58A90><E89189><EFBFBD>鈭蝝<E89D9D> (0~2)
u32 captured_addr = 0; // <20>滚寞<E6BB9A><E5AF9E>亥行𧒄嚗峕<E59A97><E5B395><EFBFBD><E79195><EFBFBD><EFBFBD><EFBFBD>笔膥 24 雿 EV1527 撠<>𤑳<EFBFBD><F0A491B3><EFBFBD>𧑐<EFBFBD>
u8 captured_type = 0; // 甇<>銁撖寧<E69296><E5AFA7>𤥁圻<F0A4A581>𤏸行𥁒<E8A18C><F0A58192><EFBFBD><EFBFBD>笔膥霈曉<E99C88><EFBFBD> (0:<3A>函, 1:PIR...)
u8 alarm_sensor_slot = 0; // 閫血<E996AB>霅行𥁒<E8A18C><F0A58192><EFBFBD><EFBFBD>笔膥<E7AC94> sensor_list <20><EFBFBD><EFBFBD><E98A9D>揣撘閙局雿滚噡
// 隡䭾<E99AA1><E4ADBE><EFBFBD><E585B8><EFBFBD>銵冽㺭<E586BD>摨橒<E691A8>雿滢<E99BBF><E6BBA2><EFBFBD><E996A7>箏㚚<E7AE8F> XDATA 摮睃<E691AE>蝛粹𡢿嚗峕餃<E5B395> 16 銝瑽賭<E791BD>
Sensor_Slot xdata sensor_list[16];
// <20><EFBFBD>皛渡<E79A9B>銝𤾸<E98A9D><F0A4BEB8>嗡葉<E597A1>霈⊥㺭<E28AA5><EFBFBD>嚗䔶<E59A97>鈭 volatile <20>蝻𤥁<E89DBB><F0A4A581><EFBFBD><E585B6>
volatile u16 ms_tick = 0; // 摰𡁏𧒄銝<F0A79284> 1ms <20><EFBFBD>皛渡<E79A9B><EFBFBD>惩膥
volatile u16 inactivity_timer = 0; // <20><EFBFBD><E586BD>脩蔭霈⊥𧒄<E28AA5>嚗𣬚鍂鈭擧<E988AD><E693A7><EFBFBD><E6BBA2><EFBFBD><EFBFBD><E59A97>雿: 10ms嚗
volatile u32 pair_timeout_ms = 0; // 隡䭾<E99AA1><E4ADBE><EFBFBD>撖孵寧<E5ADB5><EFBFBD>𧒄瘥蝘坿⊥𧒄<E28AA5> (銝𢠃<E98A9D> 30000ms <20> 30s)
volatile u16 alarm_timer_ms = 0; // <20>乩噩<E4B9A9>亥阡帕颲暸<E9A2B2><E69AB8>冽𧒄摨讛⊥㺭<E28AA5>
volatile u16 motor_timer_ms = 0; // <20>蝡钅帕颲暸<E9A2B2><E69AB8>冽𧒄<E586BD>輯⊥㺭<E28AA5>
volatile bit alarm_flash_flag = 0; // <20>亥行𧒄蝥<E89DA5>𪂹<EFBFBD><F0AA82B9>折緾<E68A98><E7B7BE><EFBFBD><E6BC81><EFBFBD><EFBFBD>
// <20><EFBFBD><E68B8D>厰睸<E58EB0><E79DB8><EFBFBD><EFBFBD><E798A8><EFBFBD><EFBFBD>霈⊥㺭<E28AA5> (10ms <20><><EFBFBD>甈)
volatile u16 key_scan_timer = 0; // 10ms <20><>誩𪂹<E8AAA9><EFBFBD>憸穃膥
volatile u16 key_up_hold = 0; // <20> (KEY_UP) <20><EFBFBD><E58A90>園鵭蝝<E9B5AD>
volatile u16 key_down_hold = 0; // <20> (KEY_DOWN) <20><EFBFBD><E58A90>園鵭蝝<E9B5AD>
volatile u16 key_confirm_hold = 0; // <20> (KEY_CONFIRM) <20><EFBFBD><E58A90>園鵭蝝<E9B5AD>
volatile u16 key_sos_hold = 0; // SOS <20><EFBFBD><E58A90>園鵭蝝<E9B5AD>
volatile u16 comb_hold = 0; // <20> + <20><><E89D8F><EFBFBD><EFBFBD><EFBFBD><E58A90>園鵭蝝<E9B5AD>
/* =========================================================================
* 銝脣藁靚<E89781><E99D9A><EFBFBD><EFBFBD>誘閫<E8AA98><E996AB>銝𦒘<E98A9D>隞嗆晷<E59786><EFBFBD>
* ========================================================================= */
/**
* @brief 閫<><E996AB><EFBFBD><EFBFBD>銝脣藁 1 <20><EFBFBD><EFBFBD><E49489><EFBFBD><EFBFBD>瘚贝<E7989A>璅⊥<E79285><E28AA5><EFBFBD>
* @param cmd <20>交𤣰<E4BAA4><EFBFBD> ASCII 摮㛖血𦶢隞
* @details 韐蠘提撠<E68F90><E692A0>蝚行<E89D9A>隞方蓮<E696B9>硋孵<E7A18B><E5ADB5><EFBFBD>頂蝏<E9A082><E89D8F><EFBFBD><EFBFBD><EFBFBD>憸睲<E686B8>隞塚<E99A9E>撟嗆綫<E59786><EFBFBD>隞園<E99A9E><E59C92>𦯀誑瘚贝<E7989A>頧隞嗆沲<E59786><E6B2B2><EFBFBD>
* - 'u'/'U': 璅⊥<E79285><E28AA5><EFBFBD>/<2F><EFBFBD> <20> <20><>
* - 'd'/'D': 璅⊥<E79285><E28AA5><EFBFBD>/<2F><EFBFBD> <20> <20><>
* - 's'/'S': 璅⊥<E79285><E28AA5><EFBFBD>/<2F><EFBFBD> SOS <20><EFBFBD><E68B8D><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD><EFBFBD>仿<EFBFBD>擐吔<E69390><E59094>
* - 'c'/'C': 璅⊥<E79285><EFBFBD><E89D8F><EFBFBD>閫血<E996AB><E8A180>
* - 'a'/'A': 璅⊥<E79285><E28AA5>删瑪隡䭾<E99AA1><E4ADBE><EFBFBD>靘菔圻<E88F94>𤏸行𥁒靽噡嚗<E599A1>𧑐<EFBFBD><F0A79190><EFBFBD>銝 0x123456嚗庒one=1<>
* - 'p'/'P': 璅⊥<E79285>撖寧<E69296><E5AFA7>罸𡢿<E7BDB8>閗繮<E99697> 24 雿齿<E99BBF>蝥踹寧<E8B8B9>噡嚗<E599A1>𧑐<EFBFBD><F0A79190><EFBFBD>銝 0x789ABC<42>
* - '1'/'2'/'3': 璅⊥<E79285>蝟餌<E89D9F><E9A48C><EFBFBD><EFBFBD><EFBFBD><E8999C>歇撣<E6AD87><EFBFBD><E4BF88><EFBFBD>日俈<E697A5><EFBFBD><E59786><EFBFBD><EFBFBD>
* - 'z'/'Z': 璅⊥<E79285><EFBFBD>𧒄嚗<F0A79284>撩銵䔶蝙<E494B6>脩蔭霈⊥㺭<E28AA5>函蔭 6000嚗諹圻<E8ABB9>𤏸䌊<F0A48FB8>冽楛摨虫<E691A8><E899AB>𨬭
* - 't'/'T': 閫血<E996AB>撅誩<E69285>銝擧<E98A9D>蝥踵綉<E8B8B5><EFBFBD><E59785>𡁏<EFBFBD>霂𨰻
*/
/**
* @brief 揹諳覃彸蚳扽ㄩRGB 昜燴晇伎籵耋齬脤聆彸
* @details 甡棒楷冞曾綻﹜曾蟯﹜曾懦腔杅擂霜ㄛ藩跺晇伎謠お 2 鏃ㄛ堆翑⺧桉苺勤昜燴腑紩腔妗暱晇伎茬扞壽炵
*/
void RGB_Diagnostic_Test(void)
{
Uart_SendString("\r\n=== RGB LED Color Channel Test Starting ===\r\n");
// 1. 郭彸楷冞綻伎諷秶杅擂 (G=0, R=150, B=0)
Uart_SendString("[RGB-TEST] 1. Sending RED command -> G=0, R=150, B=0\r\n");
RGB_Send(0, 150, 0, 0, 150, 0);
Delay_ms(2000);
// 洠鏢
RGB_Send(0, 0, 0, 0, 0, 0);
Delay_ms(300);
// 2. 郭彸楷冞蟯伎諷秶杅擂 (G=150, R=0, B=0)
Uart_SendString("[RGB-TEST] 2. Sending GREEN command -> G=150, R=0, B=0\r\n");
RGB_Send(150, 0, 0, 150, 0, 0);
Delay_ms(2000);
// 洠鏢
RGB_Send(0, 0, 0, 0, 0, 0);
Delay_ms(300);
// 3. 郭彸楷冞懦伎諷秶杅擂 (G=0, R=0, B=150)
Uart_SendString("[RGB-TEST] 3. Sending BLUE command -> G=0, R=0, B=150\r\n");
RGB_Send(0, 0, 150, 0, 0, 150);
Delay_ms(2000);
// 章菁洠鏢
RGB_Send(0, 0, 0, 0, 0, 0);
Uart_SendString("=== RGB LED Color Channel Test Ended ===\r\n");
}
void Debug_ProcessCommand(char cmd)
{
SystemEvent debug_evt;
inactivity_timer = 0; // <20><EFBFBD><E59785><EFBFBD>誘嚗𣬚<E59A97><F0A3AC9A><EFBFBD><EFBFBD><EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BBA2>脩蔭霈⊥𧒄<E28AA5>
debug_evt.extra_data = 0;
debug_evt.extra_size = 0;
if (cmd == 'u') {
debug_evt.key_event = KEY_EVENT_UP_CLICK;
debug_evt.priority = EVENT_PRIORITY_NORMAL;
EventQueue_Push(debug_evt); // <20><EFBFBD><E8A781>笔偏
Uart_SendString("[UART] KEY_UP Clicked\r\n");
} else if (cmd == 'U') {
debug_evt.key_event = KEY_EVENT_UP_LONG;
debug_evt.priority = EVENT_PRIORITY_NORMAL;
EventQueue_Push(debug_evt);
Uart_SendString("[UART] KEY_UP Long Pressed\r\n");
} else if (cmd == 'd') {
debug_evt.key_event = KEY_EVENT_DOWN_CLICK;
debug_evt.priority = EVENT_PRIORITY_NORMAL;
EventQueue_Push(debug_evt);
Uart_SendString("[UART] KEY_DOWN Clicked\r\n");
} else if (cmd == 'D') {
debug_evt.key_event = KEY_EVENT_DOWN_LONG;
debug_evt.priority = EVENT_PRIORITY_NORMAL;
EventQueue_Push(debug_evt);
Uart_SendString("[UART] KEY_DOWN Long Pressed\r\n");
} else if (cmd == 's') {
debug_evt.key_event = KEY_EVENT_SOS_CLICK;
debug_evt.priority = EVENT_PRIORITY_URGENT;
EventQueue_InsertFront(debug_evt); // 蝝扳乩<E689B3>隞嗆<E99A9E><E59786>仿<EFBFBD>
Uart_SendString("[UART] KEY_SOS Clicked\r\n");
} else if (cmd == 'S') {
debug_evt.key_event = KEY_EVENT_SOS_LONG;
debug_evt.priority = EVENT_PRIORITY_URGENT;
EventQueue_InsertFront(debug_evt);
Uart_SendString("[UART] KEY_SOS Long Pressed\r\n");
} else if (cmd == 'c' || cmd == 'C') {
debug_evt.key_event = KEY_EVENT_UP_DOWN_COMB;
debug_evt.priority = EVENT_PRIORITY_NORMAL;
EventQueue_Push(debug_evt);
Uart_SendString("[UART] KEY_UP+DOWN Combined\r\n");
} else if (cmd == 'a' || cmd == 'A') {
u32 mock_addr = 0x123456; // 霈曉<E99C88>璅⊥<E79285><E28AA5><EFBFBD>𥁒霅血<E99C85>憸烐<E686B8><E78390><EFBFBD>
u8 mock_slot;
// 憒<><E68692><EFBFBD><EFBFBD>唳㺭<E594B3>摨㮖葉瘝⊥<E7989D><E28AA5><EFBFBD>霂亙<E99C82>憸𡢅<E686B8><F0A1A285>坔撩<E59D94>嗥蒈霈啗<E99C88> 1 <20>琿俈<E790BF>
if (!Check_Sensor_ID(mock_addr, &mock_slot)) {
Add_Sensor_With_Zone(mock_addr, 0, 1);
}
debug_evt.key_event = KEY_EVENT_NONE;
debug_evt.priority = EVENT_PRIORITY_HIGH; // <20>乩噩<E4B9A9>亥西曆蛹 HIGH 隡睃<E99AA1>
debug_evt.extra_data = mock_addr;
debug_evt.extra_size = 4;
EventQueue_InsertFront(debug_evt); // 擃䀝<E69383><E4809D><EFBFBD><EFBFBD><EFBFBD>
Uart_SendString("[UART] Mock RF Alarm\r\n");
} else if (cmd == 'p' || cmd == 'P') {
// <20><><EFBFBD><E58CA7>讠㴓<E8AEA0><E3B493><EFBFBD> Pair 璅<E79285><E288AA><EFBFBD>璅⊥<E79285>撖寧<E69296><E288AA>齿<EFBFBD><E9BDBF>
if (AppManager_GetActiveAppID() == APP_ID_PAIR) {
debug_evt.key_event = KEY_EVENT_NONE;
debug_evt.priority = EVENT_PRIORITY_NORMAL;
debug_evt.extra_data = 0x789ABC; // 霈曉<E99C88>璅⊥<E79285>撖寧<E69296>蝖隞嗅𧑐<E59785>
debug_evt.extra_size = 4;
EventQueue_Push(debug_evt);
Uart_SendString("[UART] Mock RF Pair Signal\r\n");
} else {
Uart_SendString("[UART] Not in PAIR mode\r\n");
}
} else if (cmd == '1') {
// 璅⊥<E79285><E28AA5><EFBFBD><EFBFBD><><EFBFBD>日俈 (NORMAL) <20><EFBFBD><EFBFBD>瑟鰵<E7919F><EFBFBD>
if (AppManager_GetActiveAppID() == APP_ID_CLOCK) {
current_state = STATE_NORMAL;
UI_ShowClockPage(current_state, current_hour, current_min);
}
Uart_SendString("[UART] State: NORMAL\r\n");
} else if (cmd == '2') {
// 璅⊥<E79285><E28AA5><EFBFBD><EFBFBD> 撌脣<E6928C><E884A3> (ARMED) <20><EFBFBD><E59786><EFBFBD><EFBFBD>𡁻秄蝤<E7A784>虾閫血<E996AB>霅行𥁒
if (AppManager_GetActiveAppID() == APP_ID_CLOCK) {
current_state = STATE_ARMED;
UI_ShowClockPage(current_state, current_hour, current_min);
}
Uart_SendString("[UART] State: ARMED\r\n");
} else if (cmd == '3') {
// 璅⊥<E79285><E28AA5><EFBFBD><EFBFBD> 撌脫伃<E884AB> (DISARMED) <20><EFBFBD><E59786>敹賜裦<E8B39C><E8A3A6>𡁏𥁒霅
if (AppManager_GetActiveAppID() == APP_ID_CLOCK) {
current_state = STATE_DISARMED;
UI_ShowClockPage(current_state, current_hour, current_min);
}
Uart_SendString("[UART] State: DISARMED\r\n");
} else if (cmd == 'z' || cmd == 'Z') {
inactivity_timer = 6000; // 璅⊥<E79285><E28AA5>脩蔭 60 蝘坿<E89D98><E59DBF><EFBFBD>撘箏<E69298>閫血<E996AB>銝餃儐<E9A483>瘛勗漲隡𤑳<E99AA1>
Uart_SendString("[UART] Force Entering Sleep mode!\r\n");
} else if (cmd == 'q' || cmd == 'Q') {
RGB_Diagnostic_Test(); // ぎ雄 RGB 昜燴晇伎籵耋齬脤聆彸
} else if (cmd == 't' || cmd == 'T') {
RF_DiagnosticMode('t'); // 閫血<E996AB><EFBFBD>𤏸<EFBFBD><EFBFBD><EFBFBD>霂𦠜鱏 (蝏輯𠧧<E8BCAF><F0A0A7A7>緾)
} else if (cmd == 'r' || cmd == 'R') {
RF_DiagnosticMode('r'); // 閫血<E996AB> 5 蝘鍦<E89D98>憸烐𦻖<E78390><EFBFBD><E597A5>霂𦠜鱏
} else if (cmd == 'l' || cmd == 'L') {
Loopback_Test(); // 閫血<E996AB><E8A180><EFBFBD><E68B8D><EFBFBD><E88F9C>䂿㴓瘚贝<E7989A> (<28>頝 P2.1 <20> P3.6 <20>璉)
}
}
/* =========================================================================
* 銝餃遆<E9A483> (<28>亙藁)
* ========================================================================= */
void main(void)
{
char cmd;
// ====== STC32G <20><EFBFBD><E5AF9E><EFBFBD><EFBFBD><E69296><EFBFBD><EFBFBD><E585B8>詨抅蝖<E68A85>嘥见<E598A5> ======
WTST = 0; // 霈曄蔭蝔见<E89D94> Flash 霈輸䔮蝑匧<E89D91><E58CA7>園𡢿銝 0 (<28>擃㗛蠘<E3979B>銵)
EAXFR = 1; // <20><>貉輸䔮<E8BCB8><EFBFBD><E68B99><EFBFBD><E5AF9E><EFBFBD><EFBFBD><E69296><EFBFBD> (XSFR)
CKCON = 0; // 憭㚚<E686AD><E39A9A>餌瑪<E9A48C><EFBFBD>霈曉<E99C88>銝箸<E98A9D>
WDT_CONTR = 0x00; // <20>喲𡡒<E596B2>钅秄<E99285><EFBFBD><E5A092>嗅膥
// ====== 蝖隞嗅<E99A9E><E79285><E288AA><EFBFBD>嘥见<E598A5> ======
GPIO_Init(); // <20>滨蔭<E6BBA8><E894AD>葵撘閗<E69298><E99697><EFBFBD><EFBFBD><EFBFBD><E8B3AA>/<2F><><EFBFBD><EFBFBD>烐芋撘誩<E69298><E8AAA9><EFBFBD><EFBFBD>銝𦠜<E98A9D> (<28><><EFBFBD> PWR_HOLD=1)
RGB_Send(0, 0, 0, 0, 0, 0); // <20>鞾𤥁<E99EBE>耨甇<E880A8>𡢅<EFBFBD>銝羓㩞蝚銝<E89D9A>園𡢿撘箏<E69298><E7AE8F>煾 0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E288B4><EFBFBD><EFBFBD>銝羓㩞<E7BE93><E3A99E><EFBFBD><EFBFBD>韏瑞<E99F8F><E7919E>𤩺㦤<F0A4A9BA><EFBFBD>
RF_Init(); // <20>嘥见<E598A5><EFBFBD>𤏸塳<F0A48FB8><E5A1B3><EFBFBD>撘閗<E69298><E99697><EFBFBD>
Delay_ms(500); // 頧<><E9A0A7>典辣<E585B8><EFBFBD>蝑匧<E89D91>靘𤤿㩞<F0A4A4BF>萄寧迅摰
LCD_Init(); // <20>嘥见<E598A5> LHS114TC-IF03 (ST7789V) 撅誩<E69285><E8AAA9><EFBFBD><EFBFBD><E69296><EFBFBD><EFBFBD><E585B8>堒僎撘<E5838E><E69298><EFBFBD><EFBFBD>
Uart1_Init(); // <20>嘥见<E598A5>銝脣藁 1 瘜<EFBCB9> 115200 靘𥡝<E99D98>霂閙𠯫敹
Uart_SendString("Wristband System Initialized!\r\n");
Self_Test(); // <20>扯䔶<E689AF><E494B6>隞嗉䌊璉 (PWR_HOLD<4C><44><EFBFBD><EFBFBD><EFBFBD>0.3 ADC<44>厰睸撣豢<E692A3><E8B1A2>1.3 <20><EFBFBD><E88F9C><EFBFBD>)
Load_Database(); // 隞 IAP Flash 蝚 254 <20><>躹霂餃<E99C82><E9A483><EFBFBD>匧歇蝏穃<E89D8F><E7A983><EFBFBD><EFBFBD><EFBFBD>笔膥<E7AC94>唳旿<E594B3> RAM
/* 甇仿 1: <20>嘥见<E598A5>鈭衤辣<E8A1A4><E695B6><EFBCB9>脣躹<E884A3><EFBFBD> */
EventQueue_Init();
/* 甇仿 2+5: <20>嘥见<E598A5>摨𠉛鍂蝞∠<E89D9E><E288A0>典僎<E585B8>餉唳<E9A489><E594B3><EFBFBD><E58CA7><EFBFBD><E595A3>嚗屸<E59A97>霈文<E99C88>頧 ClockApp */
AppManager_Init();
/* <20><>典僎<E585B8><E5838E><EFBFBD>𤾸蝱撠<E89DB1>𤑳<EFBFBD><F0A491B3><EFBFBD><E689B9><EFBFBD><E59A97>憪衤齒<E8A1A4><E9BD92>删瑪隡䭾<E99AA1><E4ADBE>其縑<E585B6> */
AppManager_AttachToBackground(&rf_monitor_app);
/* <20><> 1ms 蝟餌<E89D9F><E9A48C><EFBFBD>摰𡁏𧒄<F0A1818F> Timer1 */
Timer1_Init();
/* 撘<>箄䌊<E7AE84><EFBFBD>頧賢僎餈鞱<E9A488><E99EB1><EFBFBD>箸𧒄<E7AEB8><EFBFBD><E7AC94>唳暑頝<E69A91><E9A09D><EFBFBD> */
AppManager_StartApp(APP_ID_CLOCK);
Uart_SendString("[SYS] Event-driven framework ready\r\n");
// ====== 銝餃儐<E9A483> ======
while (1) {
/* 0. 璉<>乩蜓敺<E89C93><E695BA>厰睸摰𡁏𧒄<F0A1818F><F0A79284><EFBFBD> (<28> 1ms 銝<>蝵雿㵪<E99BBF>銝餃儐<E9A483><E58490><EFBFBD><EFBFBD>膄撟嗅<E6929F><E59785>) */
if (key_scan_flag) {
key_scan_flag = 0;
Event_KeyScan_Poll();
}
/* 1. 銝脣藁<E884A3>鮋獈憛墧<E6869B>隞斗<E99A9E><E69697> -> 鋆<><E98B86>銝箔<E98A9D>隞嗆䲮撘誩<E69298><E8AAA9> */
cmd = Uart_RxChar();
if (cmd != '\0') {
Debug_ProcessCommand(cmd);
}
/* 2. 鈭衤辣<E8A1A4><E8BEA3><EFBFBD><EFBFBD>餌瑪嚗𡁜儐<F0A1819C>頧霂僎憭<E5838E><E686AD><EFBFBD><EFBFBD><EFBFBD><E98A9D><EFBFBD><EFBFBD><EFBFBD><E39787><EFBFBD><EFBFBD>隞 */
while (!EventQueue_IsEmpty()) {
Event_Dispatcher_Loop();
}
/* 3. 摨𠉛鍂靚<E98D82>漲銝敹<E98A9D><E695B9>餈鞱<E9A488><E99EB1><EFBFBD><EFBFBD><E6BB9A><EFBFBD>滚蝱瘣餉<E798A3><E9A489><EFBFBD><E59786>摨𠉛鍂嚗<E98D82><E59A97><EFBFBD>𣂷<EFBFBD> CPU 餈鞱峕𧒄<E5B395><EFBFBD><E6B8B2><EFBFBD>韏瑚<E99F8F><E7919A><EFBFBD> */
AppManager_RunActiveApp();
/* 4. <20><><EFBFBD><E585B6>惩ế摰𡄯<E691B0>撣豢<E692A3><E8B1A2><EFBFBD><EFBFBD><E6BBA2>脩蔭颲曉<E9A2B2> 60 蝘 (6000 * 10ms = 60s) <20><EFBFBD><E5A19A><EFBFBD><EFBFBD>雿𤾸<E99BBF><F0A4BEB8><EFBFBD><E5A092><EFBFBD><E7AE94> */
if (inactivity_timer >= 6000) {
inactivity_timer = 0;
current_state = STATE_SLEEP; // 蝟餌<E89D9F>蝵銝箔<E98A9D><E7AE94>删𠶖<E588A0>
Enter_Low_Power_Sleep(); // 霂亙遆<E4BA99>唳糓<E594B3>餃䂿<E9A483>嚗愢CU 撠<>銁甇斗<E79487>韏瑯<E99F8F>𤧅<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E585B6><EFBFBD>蝏抒賒<E68A92>
current_state = STATE_NORMAL; // <20><EFBFBD><E697A5>𡡞<EFBFBD><F0A1A19E>啁蔭銝箸<E98A9D>虜敺<E8999C><EFBFBD>
AppManager_StartApp(APP_ID_CLOCK); // <20>齿鰵撘<E9B0B5><E69298><EFBFBD>摨𠉛鍂隞亙<E99A9E><E4BA99>啁𤫇<E59581><EFBFBD><EFBCB7><EFBFBD><EFBFBD>
}
}
}
// <20><EFBFBD>皞𣂷<E79A9E>隞嗆<E99A9E>敹梹<E695B9><E6A2B9>勗孵<E58B97><E5ADB5><EFBFBD><EFBFBD><EFBFBD> ISR <20><EFBFBD>
volatile u8 p0_wakeup_flag = 0; // P0 蝡<><E89DA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E697A5><EFBFBD><EFBFBD>
volatile u8 p2_wakeup_flag = 0; // P2 蝡<><E89DA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E697A5><EFBFBD><EFBFBD>
volatile u8 p3_wakeup_flag = 0; // P3 蝡<><E89DA1><EFBFBD>憸睲葉<E79DB2><E89189><EFBFBD><E697A5><EFBFBD><EFBFBD>
volatile u8 rf_wakeup_flag = 0; // 撠<>睲葉<E79DB2><E89189><EFBFBD><E697A5><EFBFBD><EFBFBD>
/* =========================================================================
* STC32G 蝡<><E89DA1><EFBFBD><EFBFBD>萄㚚<E89084><EFBFBD><E98A9D><EFBFBD><EFBFBD><E98A9D>滚𦛚蝔见<E89D94> (ISR)
* ========================================================================= */
/**
* @brief Port0 蝡<><E89DA1><EFBFBD><EFBFBD>萎葉<E8908E><E89189>滚𦛚<E6BB9A>賣㺭 (<28> isr_jump.asm 撘訫澆<E8A8AB>雿滩秐甇)
* @details 韐蠘提憭<E68F90><E686AD> P0.1, P0.2, P0.3 <20>厰睸<E58EB0><EFBFBD><E585B6>䭾芋撘譍<E69298><E8AD8D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𡢅<EFBFBD>撟嗥<E6929F><E597A5><EFBFBD>鍂銝<E98D82><E98A9D><E884AB>憭齿<E686AD>銵䎚
*/
void Port0_Isr(void) interrupt 13
{
EAXFR = 1; // 雿輯<E99BBF>霈輸䔮<E8BCB8><EFBFBD><EFBFBD><E69296><EFBFBD>
p0_wakeup_flag = P0INTF | 0x01;// 霂餃<E99C82>撟嗅<E6929F>遢 P0 銝<><E98A9D><EFBFBD><EFBFBD><EFBFBD><E69296><EFBFBD>典 (0x01雿𨅯<E99BBF><F0A885AF>冽焵<E586BD>)
P0INTF = 0x00; // 皜<>膄 P0 蝡<><E89DA1><EFBFBD><E89189><EFBFBD><EFBFBD><EFBFBD>敹𦯀<E695B9>
P0INTE = 0x00; // <20>𣂼<EFBFBD><F0A382BC>靽脲擪<E884B2>𡢅<EFBFBD>蝡见朖<E8A781>喲𡡒 P0 銝<><E98A9D><EFBFBD><EFBFBD><E8B382><E884AB><EFBCB8><EFBFBD><E686AD>雿𡒊㩞撟單<E6929F><E596AE><EFBFBD>憭滩圻<E6BBA9> ISR 撖潸稲<E6BDB8><E7A8B2><EFBFBD>
}
/**
* @brief Port2 蝡<><E89DA1><EFBFBD><EFBFBD>萎葉<E8908E><E89189>滚𦛚<E6BB9A>賣㺭 (<28> isr_jump.asm 撘訫澆<E8A8AB>雿滩秐甇)
* @details 韐蠘提憭<E68F90><E686AD> P2.6 (SOS<4F>厰睸) 銝 P2.1 (撠<>烐㺭<E78390><E3BAAD>) <20><EFBFBD><E585B6>䭾芋撘譍<E69298><E8AD8D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>睃𤧅<E79D83>
*/
void Port2_Isr(void) interrupt 15
{
EAXFR = 1; // 雿輯<E99BBF><E8BCAF><EFBFBD><EFBFBD><E69296><EFBFBD>
p2_wakeup_flag = P2INTF | 0x01;// 霂餃<E99C82>撟嗅<E6929F>遢 P2 銝<><E98A9D><EFBFBD><EFBFBD><EFBFBD><E69296><EFBFBD><EFBFBD><E7AE87>
P2INTF = 0x00; // 皜<>膄 P2 蝡<><E89DA1><EFBFBD><E89189><EFBFBD><EFBFBD><EFBFBD>敹𦯀<E695B9>
P2INTE = 0x00; // 蝡见朖<E8A781>喲𡡒 P2 銝<><E98A9D>𡁻<EFBFBD>嚗屸俈甇雿𡒊㩞撟單<E6929F><E596AE><EFBFBD>憭漤<E686AD><E6BCA4>
}
/**
* @brief Port3 蝡<><E89DA1><EFBFBD><EFBFBD>萎葉<E8908E><E89189>滚𦛚<E6BB9A>賣㺭 (<28> isr_jump.asm 撘訫澆<E8A8AB>雿滩秐甇)
* @details 韐蠘提憭<E68F90><E686AD> P3.6 (<28><EFBFBD>憸烐㺭<E78390><E3BAAD>) <20><EFBFBD><E585B6>䭾芋撘譍<E69298><E8AD8D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>睃𤧅<E79D83>
*/
void Port3_Isr(void) interrupt 16
{
EAXFR = 1; // 雿輯<E99BBF>霈輸䔮<E8BCB8><EFBFBD><EFBFBD><E69296><EFBFBD>
p3_wakeup_flag = P3INTF | 0x01;// 霂餃<E99C82>撟嗅<E6929F>遢 P3 銝<><E98A9D><EFBFBD><EFBFBD><EFBFBD><E69296><EFBFBD>典 (0x01雿𨅯<E99BBF><F0A885AF>冽焵<E586BD>)
P3INTF = 0x00; // 皜<>膄 P3 蝡<><E89DA1><EFBFBD><E89189><EFBFBD><EFBFBD><EFBFBD>敹𦯀<E695B9>
P3INTE = 0x00; // 蝡见朖<E8A781>喲𡡒 P3 銝<><E98A9D>𡁻<EFBFBD>嚗屸俈甇<E79487>憭漤<E686AD><E6BCA4>
}