316 lines
14 KiB
C
316 lines
14 KiB
C
#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>鈭蝝W<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>脫Z蝻𤥁<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>亥行𧒄蝥X<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 瘜Y鸌<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>敶Y<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>頧霂W僎憭<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>W<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>脫W<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>脫X<E884AB><EFBCB8>憭<EFBFBD><E686AD>雿𡒊㩞撟單<E6929F><E596AE>游<EFBFBD>憭滩圻<E6BBA9> ISR 撖潸稲<E6BDB8><E7A8B2><EFBFBD>皞W枂
|
||
}
|
||
|
||
/**
|
||
* @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>嚗屸俈甇W<E79487>憭漤<E686AD><E6BCA4>
|
||
}
|