diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 72bacfc..6dd64c0 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -2,6 +2,7 @@ eclipse.preferences.version=1 encoding//APP/peripheral_main.c=UTF-8 encoding//BSP/inc/bsp_valve.h=UTF-8 encoding//BSP/src/bsp_adc.c=UTF-8 +encoding//BSP/src/bsp_beep_led_emv.c=UTF-8 encoding//BSP/src/bsp_i2c.c=UTF-8 encoding//BSP/src/bsp_key.c=UTF-8 encoding//BSP/src/bsp_valve.c=UTF-8 diff --git a/.vscode/settings.json b/.vscode/settings.json index e68282e..8d5f378 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -17,6 +17,7 @@ "stdarg.h": "c", "bsp_flash.h": "c", "bsp_valve.h": "c", - "log.h": "c" + "log.h": "c", + "hal.h": "c" } } diff --git a/APP/peripheral.c b/APP/peripheral.c index a8e7ab0..7fa91a2 100644 --- a/APP/peripheral.c +++ b/APP/peripheral.c @@ -27,6 +27,10 @@ #include "bsp_i2c.h" #include "bsp_adc.h" +#include "bsp_beep_led_emv.h" + +#include "SLEEP.h" + #undef LOG_ENABLE #define LOG_ENABLE 1 @@ -48,7 +52,7 @@ void BSP_NoNeeedReplyCMd(void) } // How often to perform periodic event -#define SBP_PERIODIC_EVT_PERIOD (160 * 10 * 5) // (160 = 100ms) +#define SBP_PERIODIC_EVT_PERIOD (1600 * 60) // (160 = 100ms) // How often to perform read rssi event #define SBP_READ_RSSI_EVT_PERIOD (1600 * 3) // (160 = 100ms) @@ -721,6 +725,29 @@ static void performPeriodicTask(void) { gValveData.bat = BSP_ReadVbat(); + BSP_BlockSleep(); + BSP_RequestBoost(); + // DelayMs(1); + ShowLed(); + + DelayMs(5); + LED_ALL_OFF_DEINIT; + // BEEP_OFF_DEINIT; + + BSP_NoNeedBoost(); + BSP_RequestSleep(); + + // ѹ;͹ط + if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE) + { + gValveData.switch_status = kClosed; + tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); + } + else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) + { + tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT); + } + float _humi, _temp; if (BSP_ReadTempHumi(&_humi, &_temp) == 0) { diff --git a/APP/peripheral_main.c b/APP/peripheral_main.c index 5f7c015..7f8f5ca 100644 --- a/APP/peripheral_main.c +++ b/APP/peripheral_main.c @@ -41,27 +41,58 @@ __attribute__((aligned(4))) uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4]; -static uint8_t key_cnt = 0; + +static uint8_t key_press_cnt = 0; + + void app_task_handler(TeAppEvtType app_evt_type) { + BSP_BlockSleep(); + switch(app_evt_type) { case kKeyShort: logDebug("button short press"); - key_cnt++; - if (key_cnt == 1) + key_press_cnt++; + logDebug("key_press_cnt = %d", key_press_cnt); + if (key_press_cnt == 1) { - // TODO:LED显示状态 + logDebug("LED显示状态"); + // tmos_set_event(led_task_id, LED_SHOW_START_EVT); + BSP_BlockSleep(); + BSP_RequestBoost(); + DelayMs(1); + ShowLed(); + // tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT); + // tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000); } - else if (key_cnt == 2) + else if (key_press_cnt >= 2) { if (gValveData.switch_status == kClosed) { + logDebug("kClosed-->kOpened"); + // tmos_set_event(led_task_id, LED_SHOW_START_EVT); gValveData.switch_status = kOpened; + BSP_BlockSleep(); + BSP_RequestBoost(); + DelayMs(1); + ShowLed(); + // tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT); + // tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000); } - else if (gValveData.switch_status == kOpened) + else if (gValveData.switch_status != kClosed) { + logDebug("kOpened-->kClosed"); + gValveData.switch_status = kClosed; + tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); + // tmos_set_event(led_task_id, LED_SHOW_START_EVT); + BSP_BlockSleep(); + BSP_RequestBoost(); + DelayMs(1); + ShowLed(); + // tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT); + // tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000); } } break; @@ -73,8 +104,16 @@ void app_task_handler(TeAppEvtType app_evt_type) case kKeyRelease: // BSP_KEY_EnterLowpower(); // DelayMs(10); - key_cnt = 0; + key_press_cnt = 0; + // BSP_RequestSleep(); + // tmos_set_event(led_task_id, LED_SHOW_END_EVT); + + LED_ALL_OFF_DEINIT; + BEEP_OFF_DEINIT; + + BSP_NoNeedBoost(); BSP_RequestSleep(); + logDebug("gpio relase;BSP_RequestSleep"); break; @@ -193,33 +232,19 @@ int main(void) #endif SetSysClock(CLK_SOURCE_PLL_60MHz); - #if (defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE) GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PD); GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PD); #endif #ifdef DEBUG - // GPIOA_SetBits(bTXD1); - // GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA); - - // UART1_DefInit(); - // 改成1500000波特率了 BSP_UART1_Init(1500000); logDebug("Start @ChipID=%02X\n", R8_CHIP_ID); logError("中文测试 %2.2f", 123.456); - #endif - DelayMs(1000 * 3); + BSP_BEEP_LED_EMV_Init(); - BOOST_OFF_DEINIT; - BEEP_OFF_DEINIT; - LED_ALL_OFF_DEINIT; - EMV_CHARGE_OFF_DEINIT; - EMV_OFF_DEINIT; - - // BSP_ADC_Init(); CH59x_BLEInit(); logDebug("%s\n", VER_LIB); @@ -234,25 +259,51 @@ int main(void) // { // DelayMs(1000); // } - HAL_Init(); - GAPRole_PeripheralInit(); - Peripheral_Init(); - - // 在连接间隔和广播间隔到来时,会进入回调中喂狗 - // LL_AdvertiseEventRegister(BLE_AdvertiseEventCB); - // LL_ConnectEventRegister(BLE_ConnectEventCB); BSP_FLASH_Init(); + DelayMs(100); GXHTC3C_Init(); BSP_KEY_Init(app_task_handler); + + // IWDG_Init(1500); + DelayMs(1000 * 3); + + BSP_ADC_Init(); BSP_VAVLE_Init(); + + + HAL_Init(); + GAPRole_PeripheralInit(); + Peripheral_Init(); + + BSP_BlockSleep(); + BSP_RequestBoost(); + DelayMs(1); + ShowLed(); + BEEP_ON; + + DelayMs(1000 * 1); + + LED_ALL_OFF_DEINIT; + BEEP_OFF_DEINIT; + + BSP_NoNeedBoost(); + BSP_RequestSleep(); + + // 在连接间隔和广播间隔到来时,会进入回调中喂狗 + // LL_AdvertiseEventRegister(BLE_AdvertiseEventCB); + // LL_ConnectEventRegister(BLE_ConnectEventCB); + + + + Main_Circulation(); } diff --git a/BSP/inc/bsp_beep_led_emv.h b/BSP/inc/bsp_beep_led_emv.h index f009f8c..8c7304e 100644 --- a/BSP/inc/bsp_beep_led_emv.h +++ b/BSP/inc/bsp_beep_led_emv.h @@ -2,8 +2,8 @@ * @Author : stark1898y 1658608470@qq.com * @Date : 2024-12-09 09:50:56 * @LastEditors : stark1898y 1658608470@qq.com - * @LastEditTime : 2024-12-15 15:37:31 - * @FilePath : \BLE_TYQ_CH592F - 副本\BSP\inc\bsp_beep_led_emv.h + * @LastEditTime : 2024-12-17 10:49:46 + * @FilePath : \BLE_TYQ_CH592F\BSP\inc\bsp_beep_led_emv.h * @Description : * * Copyright (c) 2024 by yzy, All Rights Reserved. @@ -14,6 +14,17 @@ #include "CONFIG.h" +extern tmosTaskID led_task_id; + +#define LED_SHOW_START_EVT (0x0001 << 0) +#define LED_SHOW_ONCE_EVT (0x0001 << 1) + +#define LED_SHOW_END_EVT (0x0001 << 2) + +#define CLOSE_VALVE_ACTION_EVT (0x0001 << 3) +#define LOW_VBAT_EVT (0x0001 << 4) +#define HIGH_TEMP_EVT (0x0001 << 5) + /**********************BOOST 12V_EN************************ */ #define BOOST_EN \ @@ -106,5 +117,8 @@ GPIOB_ModeCfg(GPIO_Pin_12, GPIO_ModeIN_Floating); \ } while (0); +void BSP_BEEP_LED_EMV_Init(void); + +void ShowLed(); #endif // !__BSP_BEEP_LED_EMV_H__ diff --git a/BSP/inc/bsp_key.h b/BSP/inc/bsp_key.h index 4aa94cc..ae1bb2c 100644 --- a/BSP/inc/bsp_key.h +++ b/BSP/inc/bsp_key.h @@ -6,14 +6,14 @@ #include #include -#define KEY_TIMOUT_MS 1000 +#define KEY_TIMOUT_MS 3000 #define KEY_LONG_PRESS_MS 5000 #define KEY_SACN_MS 40 #define KEY_SCAN_EVT (0x0001 << 0) #define KEY_WAKEUP_EVT (0x0001 << 1) #define KEY_RELEASE_EVT (0x0001 << 2) -#define KEY_IDLE_TIMEOUT_EVT (0x0001 << 2) +#define KEY_IDLE_TIMEOUT_EVT (0x0001 << 3) // KEY_B_PIN at PB7,low->active #define KEY_B_PIN GPIO_Pin_7 diff --git a/BSP/inc/bsp_valve.h b/BSP/inc/bsp_valve.h index 226fbc8..d9a39c5 100644 --- a/BSP/inc/bsp_valve.h +++ b/BSP/inc/bsp_valve.h @@ -2,7 +2,7 @@ * @Author : stark1898y 1658608470@qq.com * @Date : 2024-12-12 15:55:38 * @LastEditors : stark1898y 1658608470@qq.com - * @LastEditTime : 2024-12-16 21:00:37 + * @LastEditTime : 2024-12-17 14:14:36 * @FilePath : \BLE_TYQ_CH592F\BSP\inc\bsp_valve.h * @Description : * @@ -23,9 +23,24 @@ extern tmosTaskID vavle_task_id; #define VAVLE_CLOSE_ACTION_EVT (0x0001 << 3) // 关阀,动作 #define VAVLE_CLOSE_END_EVT (0x0001 << 4) // 关阀结束 +#define VAVLE_LOW_VBAT_ALARM_EVT (0x0001 << 5) // 低电压提醒 + +#define VAVLE_DECT_EVT (0x0001 << 6) // 循环检测 + + +#define VALVE_LOW_VBAT_ALARM_PERIOD_MS (1600 * 60 * 10) + +#define VALVE_DECT_PERIOD_MS (1600 * 60 * 10) + + #define CHARGE_TIME_MS 1000 +// 2.2V +#define LOW_VABAT_ALARM_VALUE 22 + +#define LOW_VABAT_CLOSE_VALUE 20 + #define FRAME_HEADER 0xAA #define FRAME_TAIL 0x55 diff --git a/BSP/src/bsp_beep_led_emv.c b/BSP/src/bsp_beep_led_emv.c index 016fa21..e1b55df 100644 --- a/BSP/src/bsp_beep_led_emv.c +++ b/BSP/src/bsp_beep_led_emv.c @@ -1,80 +1,118 @@ #include "bsp_beep_led_emv.h" -#if 0 -void BSP_BOOST_Init(void) +#include "bsp_uart.h" +#include "log.h" + +#include "bsp_beep_led_emv.h" +#include "bsp_valve.h" + +#include "SLEEP.h" + +#include "bsp_adc.h" + +#undef LOG_ENABLE +#define LOG_ENABLE 1 + +#undef LOG_TAG +#define LOG_TAG "led" + +tmosTaskID led_task_id = INVALID_TASK_ID; + + + + +void ShowLed() { + gValveData.bat = BSP_ReadVbat(); + + // 电压过低就关阀 + if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) + { + LED_ALL_OFF_DEINIT; + LED_Y_ON; + + BEEP_ON; + logDebug("LED_Y_ON"); + } + else if (gValveData.switch_status == kUnknown || gValveData.switch_status == kClosed) + { + LED_ALL_OFF_DEINIT; + LED_R_ON; + + logDebug("LED_R_ON"); + } + else if (gValveData.switch_status == kOpened) + { + LED_ALL_OFF_DEINIT; + + LED_G_ON; + + logDebug("LED_G_ON"); + } +} + +static tmosEvents LED_Task_ProcessEvent(tmosTaskID taskID, tmosEvents event) +{ + //event 处理 + if(event & LED_SHOW_START_EVT) + { + logDebug("LED_SHOW_START_EVT"); + BSP_BlockSleep(); + BSP_RequestBoost(); + DelayMs(1); + ShowLed(); + tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT); + tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000); + return (event ^ LED_SHOW_START_EVT); + } + if (event & LED_SHOW_ONCE_EVT) + { + logDebug("LED_SHOW_ONCE_EVT"); + + LED_ALL_OFF_DEINIT; + BEEP_OFF_DEINIT; + + tmos_set_event(led_task_id, LED_SHOW_END_EVT); + + return (event ^ LED_SHOW_ONCE_EVT); + } + if(event & LED_SHOW_END_EVT) + { + logDebug("LED_SHOW_END_EVT"); + + LED_ALL_OFF_DEINIT; + BEEP_OFF_DEINIT; + + BSP_NoNeedBoost(); + BSP_RequestSleep(); + + // BEEP_OFF_DEINIT; + // EMV_CHARGE_OFF_DEINIT; + // EMV_OFF_DEINIT; + + return (event ^ LED_SHOW_END_EVT); + } + if (event & LOW_VBAT_EVT) + { + logDebug("LOW_VBAT_EVT"); + LED_Y_ON; + return (event ^ LOW_VBAT_EVT); + } + + } -void BSP_BOOST_DeInit(void) + +void BSP_BEEP_LED_EMV_Init(void) { - // 12V_EN - GPIOB_ResetBits(GPIO_Pin_14); - GPIOB_ModeCfg(GPIO_Pin_14, GPIO_ModeIN_PD); + BOOST_OFF_DEINIT; + BEEP_OFF_DEINIT; + LED_ALL_OFF_DEINIT; + EMV_CHARGE_OFF_DEINIT; + EMV_OFF_DEINIT; + + led_task_id = TMOS_ProcessEventRegister(LED_Task_ProcessEvent); + logDebug("BSP_BEEP_LED_EMV_Init"); } - -void BSP_BEEP_Init(void) -{ - // BEEP - GPIOA_ResetBits(GPIO_Pin_14); - GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA); -} - -void BSP_BEEP_DeInit(void) -{ - // BEEP - GPIOA_ResetBits(GPIO_Pin_14); - // 有数字晶体管的下拉 - GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeIN_Floating); -} - -void BSP_LED_Init(void) -{ - // LED_R - GPIOA_ResetBits(GPIO_Pin_4); - GPIOA_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA); - - // LED_G - GPIOA_ResetBits(GPIO_Pin_5); - GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeOut_PP_5mA); - - // LED_Y - GPIOA_ResetBits(GPIO_Pin_15); - GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeOut_PP_5mA); -} - -void BEP_LED_DeInit(void) -{ - // LED - GPIOA_ResetBits(GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_15); - // 有数字晶体管的下拉 - GPIOA_ModeCfg(GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_15, GPIO_ModeIN_Floating); -} - -void BSP_EMV_Init(void) -{ - // EMV_CHARGE - GPIOB_ResetBits(GPIO_Pin_13); - GPIOB_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA); - - // EMV_EN - GPIOB_ResetBits(GPIO_Pin_12); - GPIOB_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA); -} - -void BSP_EMV_DeInit(void) -{ - // EMV_CHARGE - GPIOB_ResetBits(GPIO_Pin_13); - // 有数字晶体管的下拉 - GPIOB_ModeCfg(GPIO_Pin_13, GPIO_ModeIN_Floating); - - // EMV_EN - GPIOB_ResetBits(GPIO_Pin_12); - // 有外部下拉电阻 - GPIOB_ModeCfg(GPIO_Pin_12, GPIO_ModeIN_Floating); -} -#endif - - diff --git a/BSP/src/bsp_key.c b/BSP/src/bsp_key.c index 8369b02..2f3676e 100644 --- a/BSP/src/bsp_key.c +++ b/BSP/src/bsp_key.c @@ -70,11 +70,10 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events) { key_vaild_times++; } - key_timeout_cnt = 10; + key_timeout_cnt = KEY_TIMOUT_MS / KEY_SACN_MS; } else { // button release - if (key_vaild_times) { if ((key_vaild_times) < (KEY_LONG_PRESS_MS / KEY_SACN_MS)) @@ -90,7 +89,7 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events) if (key_timeout_cnt) { key_timeout_cnt--; - logDebug("key_timeout_cnt %d", key_timeout_cnt); + // logDebug("key_timeout_cnt %d", key_timeout_cnt); tmos_start_task(key_task_id, KEY_SCAN_EVT, MS1_TO_SYSTEM_TIME(KEY_SACN_MS)); // 40ms } else @@ -109,19 +108,6 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 由按键中断唤醒后开启按键扫描 void BSP_KEY_EnterLowpower(void) { - // key_wakeup_flag = 0; - // tmos_stop_task(key_task_id, KEY_SCAN_EVT); - - // R16_PB_INT_MODE |= KEY_B_PIN; // edge mode - // GPIOB_ResetBits(KEY_B_PIN); // edge fall - // R16_PB_INT_IF = KEY_B_PIN; - // R16_PB_INT_EN |= KEY_B_PIN; - - // 由外部上拉电阻了 - // 设置为浮空输入模式 - // GPIOB_SetBits(KEY_B_PIN); - // GPIOB_ModeCfg(KEY_B_PIN, GPIO_ModeIN_PU); - // TODO:按键电平触发设置 // 下降沿触发 GPIOB_ITModeCfg(KEY_B_PIN, GPIO_ITMode_FallEdge); @@ -253,7 +239,7 @@ void BSP_KEY_Init(app_task_evt_handler_t handler) // 由外部上拉电阻了 // 设置为浮空输入模式 // GPIOB_SetBits(KEY_B_PIN); - GPIOB_ModeCfg(KEY_B_PIN, GPIO_ModeIN_PU); + GPIOB_ModeCfg(KEY_B_PIN, GPIO_ModeIN_Floating); // 下降沿触发 GPIOB_ITModeCfg(KEY_B_PIN, GPIO_ITMode_FallEdge); @@ -266,42 +252,18 @@ void BSP_KEY_Init(app_task_evt_handler_t handler) PFIC_EnableIRQ(GPIO_B_IRQn); tmos_start_task(key_task_id, KEY_SCAN_EVT, MS1_TO_SYSTEM_TIME(KEY_SACN_MS)); - - // tmos_start_task(key_task_id, KEY_SCAN_EVT, MS1_TO_SYSTEM_TIME(5)); - - //开始一个定时事件,不断的执行,除非运行tmos_stop_task关掉, - //tmosTimer具体是 1600 = 1s - // BSP_KEY_EnterLowpower(); } __HIGH_CODE __attribute__((noinline)) void KEY_ProcessLoop(void) { - // { - // if (R16_PB_INT_IF & KEY_B_PIN) - // { - // R16_PB_INT_IF = KEY_B_PIN; - // tmos_set_event(key_task_id, KEY_SCAN_EVT); - // logDebug("KEY_ProcessLoop"); - // } - // } if (key_wakeup_flag) { key_wakeup_flag = 0; tmos_set_event(key_task_id, KEY_SCAN_EVT); logDebug("KEY_ProcessLoop"); } - - - // if (key_wakeup_flag) - // { - // key_wakeup_flag = 0; - // tmos_set_event(key_task_id, KEY_SCAN_EVT); - // // tmos_start_task(key_task_id, KEY_SCAN_EVT, MS1_TO_SYSTEM_TIME(20)); - // // tmos_start_task(key_task_id, KEY_IDLE_TIMEOUT_EVT, MS1_TO_SYSTEM_TIME(1000 * 10)); - // logDebug("key_wakeup_flag"); - // } } @@ -318,16 +280,8 @@ void GPIOB_IRQHandler(void) GPIOB_ClearITFlagBit(KEY_B_PIN); + // tmos_set_event(key_task_id, KEY_SCAN_EVT); + // logDebug("KEY_ProcessLoop"); + key_wakeup_flag = 1; - // key_timeout_flag = 0; - - // BSP_BlockSleep(); - - // if (R16_PB_INT_IF & KEY_B_PIN) - // { - // R16_PB_INT_IF = KEY_B_PIN; - // // tmos_set_event(key_task_id, KEY_SCAN_EVT); - // BSP_KEY_ExitLowpower(); - // } - // tmos_set_event(key_task_id,KEY_SCAN_EVT); } diff --git a/BSP/src/bsp_valve.c b/BSP/src/bsp_valve.c index a3ecf59..0579fe7 100644 --- a/BSP/src/bsp_valve.c +++ b/BSP/src/bsp_valve.c @@ -2,7 +2,7 @@ * @Author : stark1898y 1658608470@qq.com * @Date : 2024-12-15 15:01:15 * @LastEditors : stark1898y 1658608470@qq.com - * @LastEditTime : 2024-12-16 21:11:32 + * @LastEditTime : 2024-12-17 14:36:52 * @FilePath : \BLE_TYQ_CH592F\BSP\src\bsp_valve.c * @Description : * @@ -19,6 +19,10 @@ #include "peripheral.h" +#include "SLEEP.h" + +#include "bsp_adc.h" + #undef LOG_ENABLE #define LOG_ENABLE 1 @@ -336,7 +340,7 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) { logDebug("VAVLE_CLOSE_START_EVT"); - BOOST_EN; + BSP_RequestBoost(); DelayMs(1); // EMV_CHARGE @@ -352,6 +356,7 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) if (events & VAVLE_CLOSE_ACTION_EVT) { logDebug("VAVLE_CLOSE_ACTION_EVT"); + BEEP_ON; // 关阀动作 EMV_CHARGE_OFF_DEINIT; logDebug("EMV_CHARGE_OFF_DEINIT"); @@ -365,18 +370,53 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) } if (events & VAVLE_CLOSE_END_EVT) { + BEEP_OFF_DEINIT; + + EMV_CHARGE_OFF_DEINIT; + EMV_OFF_DEINIT; + + BSP_NoNeedBoost(); + gValveData.switch_status = kClosed; tmos_memset(&RelyData, 0, sizeof(RelyData)); BSP_VALVE_Generate_ValveResponse(&RelyData, kCmdCloseVavle, 1); - - tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT); logDebug("VAVLE_CLOSE_END_EVT"); return (events ^ VAVLE_CLOSE_END_EVT); } + if (events & VAVLE_LOW_VBAT_ALARM_EVT) + { + logDebug("VAVLE_LOW_VBAT_ALARM_EVT"); + + tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); + + // tmos_start_task(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT, MS1_TO_SYSTEM_TIME(VALVE_LOW_VBAT_ALARM_PERIOD_MS)); + + return (events ^ VAVLE_LOW_VBAT_ALARM_EVT); + } + if (events & VAVLE_DECT_EVT) + { + logDebug("VAVLE_DECT_EVT"); + + gValveData.bat = BSP_ReadVbat(); + + // 电压过低就关阀 + if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE) + { + gValveData.switch_status = kClosed; + tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); + } + else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) + { + tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT); + } + tmos_start_task(vavle_task_id, VAVLE_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS)); + + return (events ^ VAVLE_DECT_EVT); + } // Discard unknown events return 0; @@ -395,10 +435,12 @@ void BSP_VAVLE_Init(void) gValveData.atm_pressure = 0; gValveData.type = kTyq; - gValveData.bat = 0; + gValveData.bat = BSP_ReadVbat(); // //立即开始一个event // tmos_set_event(vavle_task_id, VAVLE_RX_DATA_EVT); + tmos_start_task(vavle_task_id, VAVLE_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS)); + logInfo("BSP_Valve_Init"); } diff --git a/HAL/LED.c b/HAL/LED.c index a55d8df..fb59eb6 100644 --- a/HAL/LED.c +++ b/HAL/LED.c @@ -6,7 +6,7 @@ * Description : ********************************************************************************* * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * Attention: This software (modified or not) and binary are used for + * Attention: This software (modified or not) and binary are used for * microcontroller manufactured by Nanjing Qinheng Microelectronics. *******************************************************************************/ @@ -14,6 +14,8 @@ /* ͷļ */ #include "HAL.h" +#include "bsp_beep_led_emv.h" + /* LED control structure */ typedef struct { @@ -58,10 +60,16 @@ void HalLedOnOff(uint8_t leds, uint8_t mode); void HAL_LedInit(void) { /* Initialize all LEDs to OFF */ - LED1_DDR; + LEDR_DDR; + LEDG_DDR; + LEDY_DDR; + BEEP_DDR; + HalLedSet(HAL_LED_ALL, HAL_LED_MODE_OFF); + + BOOST_EN; // just test - HalLedBlink(HAL_LED_1, 10, 30, 4000); + HalLedBlink(HAL_LED_R, 10, 50, 200); /* Initialize sleepActive to FALSE */ HalLedStatusControl.sleepActive = FALSE; } @@ -101,7 +109,7 @@ uint8_t HalLedSet(uint8_t leds, uint8_t mode) case HAL_LED_MODE_OFF: case HAL_LED_MODE_TOGGLE: { - led = HAL_LED_1; + led = HAL_LED_R; leds &= HAL_LED_ALL; sts = HalLedStatusControl.HalLedControlTable; while(leds) @@ -152,7 +160,7 @@ void HalLedBlink(uint8_t leds, uint8_t numBlinks, uint8_t percent, uint16_t peri { if(percent < 100) { - led = HAL_LED_1; + led = HAL_LED_R; leds &= HAL_LED_ALL; sts = HalLedStatusControl.HalLedControlTable; while(leds) @@ -204,7 +212,7 @@ void HalLedUpdate(void) HalLedControl_t *sts; next = 0; - led = HAL_LED_1; + led = HAL_LED_R; leds = HAL_LED_ALL; sts = HalLedStatusControl.HalLedControlTable; @@ -291,48 +299,48 @@ void HalLedUpdate(void) */ void HalLedOnOff(uint8_t leds, uint8_t mode) { - if(leds & HAL_LED_1) + if(leds & HAL_LED_R) { if(mode == HAL_LED_MODE_ON) { - HAL_TURN_ON_LED1(); + HAL_TURN_ON_LEDR(); } else { - HAL_TURN_OFF_LED1(); + HAL_TURN_OFF_LEDR(); } } - if(leds & HAL_LED_2) + if(leds & HAL_LED_G) { if(mode == HAL_LED_MODE_ON) { - HAL_TURN_ON_LED2(); + HAL_TURN_ON_LEDG(); } else { - HAL_TURN_OFF_LED2(); + HAL_TURN_OFF_LEDG(); } } - if(leds & HAL_LED_3) + if(leds & HAL_LED_Y) { if(mode == HAL_LED_MODE_ON) { - HAL_TURN_ON_LED3(); + HAL_TURN_ON_LEDY(); } else { - HAL_TURN_OFF_LED3(); + HAL_TURN_OFF_LEDY(); } } - if(leds & HAL_LED_4) + if(leds & HAL_LED_BEEP) { if(mode == HAL_LED_MODE_ON) { - HAL_TURN_ON_LED4(); + HAL_TURN_ON_BEEP(); } else { - HAL_TURN_OFF_LED4(); + HAL_TURN_OFF_BEEP(); } } /* Remember current state */ diff --git a/HAL/SLEEP.c b/HAL/SLEEP.c index 97be725..eaa460c 100644 --- a/HAL/SLEEP.c +++ b/HAL/SLEEP.c @@ -19,6 +19,8 @@ #include "log.h" #include "bsp_uart.h" +#include "bsp_beep_led_emv.h" + #undef LOG_ENABLE #define LOG_ENABLE 1 @@ -27,6 +29,7 @@ #define LOG_TAG "sleep" static volatile bool block_sleep_flag = false; +static volatile bool block_boost_flag = false; void BSP_RequestSleep(void) { @@ -38,6 +41,18 @@ void BSP_BlockSleep(void) block_sleep_flag = true; } +void BSP_RequestBoost(void) +{ + BOOST_EN; + block_boost_flag = false; +} + +void BSP_NoNeedBoost(void) +{ + block_boost_flag = true; +} + + /******************************************************************************* * @fn CH59x_LowPower @@ -50,6 +65,14 @@ void BSP_BlockSleep(void) */ uint32_t CH59x_LowPower(uint32_t time) { + if (block_boost_flag == false) + { + BOOST_EN; + } + else + { + BOOST_OFF_DEINIT; + } if( true == block_sleep_flag) { // logDebug("block_sleep"); diff --git a/HAL/include/HAL.h b/HAL/include/HAL.h index 0047143..c5d3b38 100644 --- a/HAL/include/HAL.h +++ b/HAL/include/HAL.h @@ -6,7 +6,7 @@ * Description : ********************************************************************************* * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. - * Attention: This software (modified or not) and binary are used for + * Attention: This software (modified or not) and binary are used for * microcontroller manufactured by Nanjing Qinheng Microelectronics. *******************************************************************************/ diff --git a/HAL/include/LED.h b/HAL/include/LED.h index e09087a..48393bc 100644 --- a/HAL/include/LED.h +++ b/HAL/include/LED.h @@ -23,11 +23,12 @@ extern "C" { */ /* LEDS - The LED number is the same as the bit position */ -#define HAL_LED_1 0x01 -#define HAL_LED_2 0x02 -#define HAL_LED_3 0x04 -#define HAL_LED_4 0x08 -#define HAL_LED_ALL (HAL_LED_1 | HAL_LED_2 | HAL_LED_3 | HAL_LED_4) +#define HAL_LED_R 0x01 +#define HAL_LED_G 0x02 +#define HAL_LED_Y 0x04 +// BEEP +#define HAL_LED_BEEP 0x08 +#define HAL_LED_ALL (HAL_LED_R | HAL_LED_G | HAL_LED_Y | HAL_LED_BEEP) /* Modes */ #define HAL_LED_MODE_OFF 0x00 @@ -49,33 +50,42 @@ extern "C" { /* һLEDڼʾĽ,͵ƽLED */ /* 1 - LED */ -#define LED1_BV BV(15) -#define LED2_BV -#define LED3_BV +#define LEDR_BV BV(4) // PA4 +#define LEDG_BV BV(5) // PA5 +#define LEDY_BV BV(15) // PA15 -#define LED1_OUT (R32_PB_OUT) -#define LED2_OUT 0 -#define LED3_OUT 0 -#define LED4_OUT 0 +#define BEEP_BV BV(14) // PA14 -#define LED1_DDR (R32_PB_DIR |= LED1_BV) -#define LED2_DDR 0 -#define LED3_DDR 0 +#define LEDR_OUT (R32_PA_OUT) +#define LEDG_OUT (R32_PA_OUT) +#define LEDY_OUT (R32_PA_OUT) -#define HAL_TURN_OFF_LED1() (LED1_OUT |= LED1_BV) -#define HAL_TURN_OFF_LED2() -#define HAL_TURN_OFF_LED3() -#define HAL_TURN_OFF_LED4() +#define BEEP_OUT (R32_PA_OUT) -#define HAL_TURN_ON_LED1() (LED1_OUT &= (~LED1_BV)) -#define HAL_TURN_ON_LED2() -#define HAL_TURN_ON_LED3() -#define HAL_TURN_ON_LED4() +#define LEDR_DDR (R32_PA_DIR |= LEDR_BV) +#define LEDG_DDR (R32_PA_DIR |= LEDG_BV) +#define LEDY_DDR (R32_PA_DIR |= LEDY_BV) -#define HAL_STATE_LED1() 0 -#define HAL_STATE_LED2() 0 -#define HAL_STATE_LED3() 0 -#define HAL_STATE_LED4() 0 +#define BEEP_DDR (R32_PA_DIR |= BEEP_BV) + + +#define HAL_TURN_OFF_LEDR() (LEDR_OUT &= (~LEDR_BV)) +#define HAL_TURN_OFF_LEDG() (LEDG_OUT &= (~LEDG_BV)) +#define HAL_TURN_OFF_LEDY() (LEDY_OUT &= (~LEDY_BV)) + +#define HAL_TURN_OFF_BEEP() (BEEP_OUT |= BEEP_BV) + +#define HAL_TURN_ON_LEDR() (LEDR_OUT |= LEDR_BV) +#define HAL_TURN_ON_LEDG() (LEDG_OUT |= LEDG_BV) +#define HAL_TURN_ON_LEDY() (LEDY_OUT |= LEDY_BV) + +#define HAL_TURN_ON_BEEP() (BEEP_OUT |= BEEP_BV) + +#define HAL_STATE_LEDR() GPIOA_ReadPortPin(LEDR_BV) +#define HAL_STATE_LEDG() GPIOA_ReadPortPin(LEDG_BV) +#define HAL_STATE_LEDY() GPIOA_ReadPortPin(LEDY_BV) + +#define HAL_STATE_BEEP() GPIOA_ReadPortPin(BEEP_BV) /********************************************************************* * GLOBAL VARIABLES diff --git a/HAL/include/SLEEP.h b/HAL/include/SLEEP.h index 1e798dc..2fd5a41 100644 --- a/HAL/include/SLEEP.h +++ b/HAL/include/SLEEP.h @@ -25,6 +25,8 @@ extern "C" { void BSP_RequestSleep(void); void BSP_BlockSleep(void); +void BSP_RequestBoost(void); +void BSP_NoNeedBoost(void); /********************************************************************* * FUNCTIONS