From 1b2a11301d9feecdcb94e7182c06fd2459463351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=5F666?= <13089258+pony-six-hundred-and-sixty-six@user.noreply.gitee.com> Date: Sat, 4 Jan 2025 17:19:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E6=89=80=E6=9C=89BSP=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6=E5=88=9D=E5=A7=8B=E5=8C=96,?= =?UTF-8?q?=E6=94=BE=E5=9C=A8=E4=BA=86user=5Fsys.c=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .settings/org.eclipse.core.resources.prefs | 1 + applications/main.c | 507 +++++++++++---------- applications/user_sys.c | 41 +- applications/user_sys.h | 2 +- bsp/inc/at_device_ml307.h | 2 +- bsp/inc/bsp_bt.h | 2 +- bsp/inc/bsp_emv.h | 1 + bsp/inc/bsp_led.h | 1 + bsp/inc/bsp_ml307.h | 2 + bsp/inc/bsp_rng.h | 28 ++ bsp/src/at_device_ml307.c | 4 +- bsp/src/bsp_adc.c | 2 +- bsp/src/bsp_beep.c | 2 +- bsp/src/bsp_bt.c | 4 +- bsp/src/bsp_button.c | 2 +- bsp/src/bsp_emv.c | 2 +- bsp/src/bsp_flash.c | 2 +- bsp/src/bsp_hr.c | 2 +- bsp/src/bsp_led.c | 2 +- bsp/src/bsp_ml307.c | 6 +- bsp/src/bsp_mq.c | 4 +- bsp/src/bsp_rng.c | 27 ++ bsp/src/bsp_rtc.c | 2 +- bsp/src/bsp_vin_detection.c | 2 +- bsp/src/bsp_wdg.c | 2 +- 25 files changed, 377 insertions(+), 275 deletions(-) create mode 100644 bsp/inc/bsp_rng.h create mode 100644 bsp/src/bsp_rng.c diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index b987da2..db8a4c0 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -9,6 +9,7 @@ encoding//bsp/inc/at_device_ml307.h=UTF-8 encoding//bsp/inc/bsp_bt.h=UTF-8 encoding//bsp/inc/bsp_hr.h=GBK encoding//bsp/inc/bsp_led.h=UTF-8 +encoding//bsp/inc/bsp_rng.h=GBK encoding//bsp/src/at_device_ml307.c=UTF-8 encoding//bsp/src/bsp_bt.c=UTF-8 encoding//bsp/src/bsp_button.c=GBK diff --git a/applications/main.c b/applications/main.c index 5b1d861..712f5eb 100644 --- a/applications/main.c +++ b/applications/main.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-10-23 17:14:16 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-04 16:01:41 + * @LastEditTime: 2025-01-04 17:13:09 * @FilePath: \ble_bjq_ch303rct6_ml307\applications\main.c * @Descrt_thread_ * @@ -149,17 +149,60 @@ void Preheat_Timer_Callback(void *parameter) int main(void) { // 定义超时时间,单位为毫秒 -#define TIMEOUT_MS 3 * 60 * 1000 +#define TIMEOUT_MS 3 * 60 * 1000 // #define TIMEOUT_MS 8 * 1000 #define WORK_TIMER_CNT (1000 * 60 * 60 * 24) rt_err_t result = RT_EINVAL; rt_uint32_t received_event; - rt_kprintf("JT-DT-YD4N02A Software version: %02X\r\n", (uint8_t)Flash_Get_SysCfg(kSwVerId)); - // 读取历史记录总数 - Flash_GetTotalRecord(&TotalRecords); - g_Calibration_status = Flash_Get_Calibration_State(); - rt_thread_mdelay(10); + BSP_ADC_Init(); + BSP_VIN_Detection_Init(); + + if (Get_VIN_VoltageInt1000x() > 10000) + { + BSP_SYS_Init(); + rt_kprintf("JT-DT-YD4N02A Software version: %02X\r\n", (uint8_t)Flash_Get_SysCfg(kSwVerId)); + // 读取历史记录总数 + Flash_GetTotalRecord(&TotalRecords); + g_Calibration_status = Flash_Get_Calibration_State(); + rt_thread_mdelay(10); + if (g_Calibration_status == kSysGasCalibStatus) + { + SYS_EventInit(); + work_duration = Flash_Get_WorkDuration(); + rt_timer_init(&work_cnt_timer, + "work_cnt_timer", + Work_Cnt_Timer_Callback, + RT_NULL, + WORK_TIMER_CNT, + RT_TIMER_FLAG_PERIODIC); + rt_timer_start(&work_cnt_timer); + rt_timer_init(&preheat_timer, + "preheat_timer", + Preheat_Timer_Callback, + RT_NULL, + TIMEOUT_MS, + RT_TIMER_FLAG_SOFT_TIMER | RT_TIMER_FLAG_ONE_SHOT); + // 检测上电/掉电复位标志 + if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET) // TODO:这块超级电容会造成掉电重启,并且标志是上电复位,只能通过其超级电容造成复位时事件创建失败进行判断,不治本 + { + Send_Laser_Alarm_Event(kPowerOnEvent); + TotalRecords.power_on++; + RCC_ClearFlag(); + } + else + { + Send_Laser_Alarm_Event(kPreheatingEvent); // 这一句的作用是设备不是掉电重启的情况,直接进入预热模式 + } + } + } + else + { + LOG_D("欠压复位\r\n"); + RCC_ClearFlag(); + NVIC_SystemReset(); // 直接重启系统 + } + while (1) { if (g_Calibration_status == kNotCalibrated) // 没标定 @@ -202,143 +245,74 @@ int main(void) } else { - SYS_EventInit(); - work_duration = Flash_Get_WorkDuration(); - rt_timer_init(&work_cnt_timer, - "work_cnt_timer", - Work_Cnt_Timer_Callback, - RT_NULL, - WORK_TIMER_CNT, - RT_TIMER_FLAG_SOFT_TIMER | RT_TIMER_FLAG_PERIODIC); - rt_timer_start(&work_cnt_timer); - rt_timer_init(&preheat_timer, - "preheat_timer", - Preheat_Timer_Callback, - RT_NULL, - TIMEOUT_MS, - RT_TIMER_FLAG_SOFT_TIMER | RT_TIMER_FLAG_ONE_SHOT); - if (Get_VIN_VoltageInt1000x() > 10000) + result = rt_event_recv(&alarm_event, + Get_Sys_Event_Flag(kPowerOnEvent) | // 上电 + Get_Sys_Event_Flag(kPowerDownEvent) | // 掉电 + Get_Sys_Event_Flag(kPreheatingEvent) | // 预热 + Get_Sys_Event_Flag(kNormalDetectionEvents) | // 正常检测 + Get_Sys_Event_Flag(kSensorFailureEvent) | // 寿命到期 + Get_Sys_Event_Flag(kAlarmEvent) | // 报警 + Get_Sys_Event_Flag(kAlarmRcyEvent) | // 报警恢复 + Get_Sys_Event_Flag(kSelfCheckEvent) | // 自检 + Get_Sys_Event_Flag(kFaultEvent) | // 故障模式 + Get_Sys_Event_Flag(kFaultRcyEvent) | // 故障恢复 + Get_Sys_Event_Flag(KMuteEvent), // 消音 + RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, + RT_WAITING_FOREVER, &received_event); + if (result == RT_EOK) { - // 检测上电/掉电复位标志 - if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET) // TODO:这块超级电容会造成掉电重启,并且标志是上电复位,只能通过其超级电容造成复位时事件创建失败进行判断,不治本 + if (is_event_initialized == RT_TRUE) { - Send_Laser_Alarm_Event(kPowerOnEvent); - TotalRecords.power_on++; - RCC_ClearFlag(); - } - else - { - Send_Laser_Alarm_Event(kPreheatingEvent); // 这一句的作用是设备不是掉电重启的情况,直接进入预热模式 - } - } - else - { - LOG_D("欠压复位\r\n"); - } - - while (1) - { - result = rt_event_recv(&alarm_event, - Get_Sys_Event_Flag(kPowerOnEvent) | // 上电 - Get_Sys_Event_Flag(kPowerDownEvent) | // 掉电 - Get_Sys_Event_Flag(kPreheatingEvent) | // 预热 - Get_Sys_Event_Flag(kNormalDetectionEvents) | // 正常检测 - Get_Sys_Event_Flag(kSensorFailureEvent) | // 寿命到期 - Get_Sys_Event_Flag(kAlarmEvent) | // 报警 - Get_Sys_Event_Flag(kAlarmRcyEvent) | // 报警恢复 - Get_Sys_Event_Flag(kSelfCheckEvent) | // 自检 - Get_Sys_Event_Flag(kFaultEvent) | // 故障模式 - Get_Sys_Event_Flag(kFaultRcyEvent) | // 故障恢复 - Get_Sys_Event_Flag(KMuteEvent), // 消音 - RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, - RT_WAITING_FOREVER, &received_event); - if (result == RT_EOK) - { - if (is_event_initialized == RT_TRUE) + if (received_event & Get_Sys_Event_Flag(kPowerOnEvent)) // 上电 { - if (received_event & Get_Sys_Event_Flag(kPowerOnEvent)) // 上电 - { - LOG_D("上电模式"); - LOG_D("is_event_initialized :%d", is_event_initialized); - SysControl.status = kPowerOnEvent; + LOG_D("上电模式"); + LOG_D("is_event_initialized :%d", is_event_initialized); + SysControl.status = kPowerOnEvent; - Flash_Write_Record(kRecordPowerOn); - Send_Laser_Alarm_Event(kPreheatingEvent); + Flash_Write_Record(kRecordPowerOn); + Send_Laser_Alarm_Event(kPreheatingEvent); + } + else if (received_event & Get_Sys_Event_Flag(kPreheatingEvent)) // 预热 + { + LOG_D("预热模式"); + + SysControl.last_status = SysControl.status; + SysControl.status = kPreheatingEvent; + LED_G_PREAT; + rt_timer_start(&preheat_timer); + } + else if (received_event & Get_Sys_Event_Flag(kNormalDetectionEvents)) // 正常检测 + { + SysControl.last_status = SysControl.status; + SysControl.status = kNormalDetectionEvents; + + if (Sensor_device.detection_flag == kSensorAlarm) + { + LED_G_NORMAL; + rt_thread_mdelay(500); + Send_Laser_Alarm_Event(kAlarmEvent); } - else if (received_event & Get_Sys_Event_Flag(kPreheatingEvent)) // 预热 + if (Sensor_device.end_of_life == 1) { - LOG_D("预热模式"); - - SysControl.last_status = SysControl.status; - SysControl.status = kPreheatingEvent; - LED_G_PREAT; - rt_timer_start(&preheat_timer); + Send_Laser_Alarm_Event(kSensorFailureEvent); } - else if (received_event & Get_Sys_Event_Flag(kNormalDetectionEvents)) // 正常检测 + else if (Sensor_device.detection_flag == kSensorFault) { - SysControl.last_status = SysControl.status; - SysControl.status = kNormalDetectionEvents; - - if (Sensor_device.detection_flag == kSensorAlarm) - { - LED_G_NORMAL; - rt_thread_mdelay(500); - Send_Laser_Alarm_Event(kAlarmEvent); - } - if (Sensor_device.end_of_life == 1) - { - Send_Laser_Alarm_Event(kSensorFailureEvent); - } - else if (Sensor_device.detection_flag == kSensorFault) - { - LED_G_NORMAL; - rt_thread_mdelay(500); - Send_Laser_Alarm_Event(kFaultEvent); - } - if (SysControl.last_status == kSelfCheckEvent) - { - rt_thread_mdelay(5000); - // 第5s关闭电磁阀 - LOG_I("自检机械手动作"); - EMV_FORWARD_ON(50); - rt_thread_mdelay(10); - EMV_BACKWARD_ON(50); - if (Flash_Get_Valve_Num()) - { - Bt_Valve_Handler(kValveCmdCtr, 0, RT_NULL); // 自检无线阀门 - if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK) - { - LOG_D("电磁阀动作完成"); - } - else - { - LOG_E("电磁阀动作失败"); - } - } - } + LED_G_NORMAL; + rt_thread_mdelay(500); + Send_Laser_Alarm_Event(kFaultEvent); } - else if (received_event & Get_Sys_Event_Flag(kAlarmExceptionEvent)) // 浓度异常 + if (SysControl.last_status == kSelfCheckEvent) { - LOG_D("浓度异常模式"); - - SysControl.last_status = SysControl.status; - SysControl.status = kAlarmExceptionEvent; - - LED_R_ALARM; - LOG_D("LED_R_ALARM"); - } - else if (received_event & Get_Sys_Event_Flag(kAlarmEvent)) // 报警 - { - LOG_D("报警模式"); - - SysControl.last_status = SysControl.status; - SysControl.status = kAlarmEvent; - LED_R_ALARM; - BEEP_ALARM; - Flash_Write_Record(kRecordAlarm); // 写入flash报警信息 + rt_thread_mdelay(5000); + // 第5s关闭电磁阀 + LOG_I("自检机械手动作"); + EMV_FORWARD_ON(50); + rt_thread_mdelay(10); + EMV_BACKWARD_ON(50); if (Flash_Get_Valve_Num()) { - Bt_Valve_Handler(kValveCmdCtr, 0, RT_NULL); + Bt_Valve_Handler(kValveCmdCtr, 0, RT_NULL); // 自检无线阀门 if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK) { LOG_D("电磁阀动作完成"); @@ -348,139 +322,170 @@ int main(void) LOG_E("电磁阀动作失败"); } } - - -#if (IOT_MODULE_SWITCH == 1) - Ml307_Send_Event(kMl307AlarmEvent); -#endif } - else if (received_event & Get_Sys_Event_Flag(kAlarmRcyEvent)) // 报警恢复 + } + else if (received_event & Get_Sys_Event_Flag(kAlarmExceptionEvent)) // 浓度异常 + { + LOG_D("浓度异常模式"); + + SysControl.last_status = SysControl.status; + SysControl.status = kAlarmExceptionEvent; + + LED_R_ALARM; + LOG_D("LED_R_ALARM"); + } + else if (received_event & Get_Sys_Event_Flag(kAlarmEvent)) // 报警 + { + LOG_D("报警模式"); + + SysControl.last_status = SysControl.status; + SysControl.status = kAlarmEvent; + LED_R_ALARM; + BEEP_ALARM; + Flash_Write_Record(kRecordAlarm); // 写入flash报警信息 + if (Flash_Get_Valve_Num()) { - LOG_D("报警恢复模式"); - - SysControl.last_status = SysControl.status; - SysControl.status = kAlarmRcyEvent; - - Flash_Write_Record(kRecordAlarmRcy); - - BEEP_STOP; - -#if (IOT_MODULE_SWITCH == 1) - Ml307_Send_Event(kMl307AlarmRcyEvent); -#endif - - Send_Laser_Alarm_Event(kNormalDetectionEvents); - } - else if (received_event & Get_Sys_Event_Flag(kFaultEvent)) // 故障 - { - LOG_D("故障模式"); - - SysControl.last_status = SysControl.status; - SysControl.status = kFaultEvent; - - Flash_Write_Record(kRecordFault); - - LED_Y_FAULT; - // BEEP_FAULT; - -#if (IOT_MODULE_SWITCH == 1) - Ml307_Send_Event(kMl307FaultEvent); -#endif - } - else if (received_event & Get_Sys_Event_Flag(kFaultRcyEvent)) // 故障恢复 - { - LOG_D("故障恢复模式"); - - SysControl.last_status = SysControl.status; - SysControl.status = kFaultRcyEvent; - - Flash_Write_Record(kRecordFaultRcy); - - BEEP_STOP; - - Send_Laser_Alarm_Event(kNormalDetectionEvents); -#if (IOT_MODULE_SWITCH == 1) - Ml307_Send_Event(kMl307FaultRcyEvent); -#endif - } - else if (received_event & Get_Sys_Event_Flag(KMuteEvent)) // 消音 - { - LOG_D("消音模式"); - SysControl.last_status = SysControl.status; - SysControl.status = KMuteEvent; - -#if (IOT_MODULE_SWITCH == 1) - Ml307_Send_Event(kMl307SilenceEvent); -#endif - BEEP_STOP; - } - - else if (received_event & Get_Sys_Event_Flag(kPowerDownEvent)) // 掉电 - { - LOG_D("掉电模式"); - - SysControl.last_status = SysControl.status; - SysControl.status = kPowerDownEvent; - GAS_POWER_CLOSE; - // 写入掉电记录 - Flash_Write_Record(kRecordPowerDown); - - Flash_Set_WorkDuration(work_duration); // 写入工作时长 -#if (IOT_MODULE_SWITCH == 1) - Ml307_Send_Event(kMl307PowerDownEvent); -#endif - if (Flash_Get_Valve_Num()) + Bt_Valve_Handler(kValveCmdCtr, 0, RT_NULL); + if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK) { - rt_uint8_t mac_addr[6]; - Flash_Get_Mac_Addr(mac_addr, 1); - Bt_Valve_Handler(kValveCmdCtr, 1, mac_addr); - if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK) - { - LOG_D("电磁阀动作完成"); - } - else - { - LOG_E("电磁阀动作失败"); - } + LOG_D("电磁阀动作完成"); } - - LOG_D("Enter AnalogWatchdog Interrupt"); - // 等待30s,要是还没断电就重启 - for (uint8_t i = 0; i < 30; i++) + else { - rt_thread_mdelay(1000); - LOG_D(" %d s", i); + LOG_E("电磁阀动作失败"); } - NVIC_SystemReset(); // 直接重启系统 } - else if (received_event & Get_Sys_Event_Flag(kSelfCheckEvent)) // 自检 - { - LOG_D("自检模式"); - SysControl.last_status = SysControl.status; - LOG_D("Self Check Mode SysControl.last_status:%d", SysControl.last_status); - SysControl.status = kSelfCheckEvent; - - _Self_Check_Mode(); #if (IOT_MODULE_SWITCH == 1) - Ml307_Send_Event(kMl307SelfCheckEvent); + Ml307_Send_Event(kMl307AlarmEvent); #endif - Send_Laser_Alarm_Event(kNormalDetectionEvents); - } - else if (received_event & Get_Sys_Event_Flag(kSensorFailureEvent)) // 失效 + } + else if (received_event & Get_Sys_Event_Flag(kAlarmRcyEvent)) // 报警恢复 + { + LOG_D("报警恢复模式"); + + SysControl.last_status = SysControl.status; + SysControl.status = kAlarmRcyEvent; + + Flash_Write_Record(kRecordAlarmRcy); + + BEEP_STOP; + +#if (IOT_MODULE_SWITCH == 1) + Ml307_Send_Event(kMl307AlarmRcyEvent); +#endif + + Send_Laser_Alarm_Event(kNormalDetectionEvents); + } + else if (received_event & Get_Sys_Event_Flag(kFaultEvent)) // 故障 + { + LOG_D("故障模式"); + + SysControl.last_status = SysControl.status; + SysControl.status = kFaultEvent; + + Flash_Write_Record(kRecordFault); + + LED_Y_FAULT; + // BEEP_FAULT; + +#if (IOT_MODULE_SWITCH == 1) + Ml307_Send_Event(kMl307FaultEvent); +#endif + } + else if (received_event & Get_Sys_Event_Flag(kFaultRcyEvent)) // 故障恢复 + { + LOG_D("故障恢复模式"); + + SysControl.last_status = SysControl.status; + SysControl.status = kFaultRcyEvent; + + Flash_Write_Record(kRecordFaultRcy); + + BEEP_STOP; + + Send_Laser_Alarm_Event(kNormalDetectionEvents); +#if (IOT_MODULE_SWITCH == 1) + Ml307_Send_Event(kMl307FaultRcyEvent); +#endif + } + else if (received_event & Get_Sys_Event_Flag(KMuteEvent)) // 消音 + { + LOG_D("消音模式"); + SysControl.last_status = SysControl.status; + SysControl.status = KMuteEvent; + +#if (IOT_MODULE_SWITCH == 1) + Ml307_Send_Event(kMl307SilenceEvent); +#endif + BEEP_STOP; + } + + else if (received_event & Get_Sys_Event_Flag(kPowerDownEvent)) // 掉电 + { + LOG_D("掉电模式"); + + SysControl.last_status = SysControl.status; + SysControl.status = kPowerDownEvent; + GAS_POWER_CLOSE; + // 写入掉电记录 + Flash_Write_Record(kRecordPowerDown); + + Flash_Set_WorkDuration(work_duration); // 写入工作时长 +#if (IOT_MODULE_SWITCH == 1) + Ml307_Send_Event(kMl307PowerDownEvent); +#endif + if (Flash_Get_Valve_Num()) { - LOG_D("传感器失效模式"); - - SysControl.last_status = SysControl.status; - SysControl.status = kSensorFailureEvent; - - if (Flash_GetNum_Records(kRecordSensoEndOfLife) == 0) + rt_uint8_t mac_addr[6]; + Flash_Get_Mac_Addr(mac_addr, 1); + Bt_Valve_Handler(kValveCmdCtr, 1, mac_addr); + if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK) { - Flash_Write_Record(kRecordSensoEndOfLife); + LOG_D("电磁阀动作完成"); + } + else + { + LOG_E("电磁阀动作失败"); } - BEEP_END_OF_LIFE; - LED_Y_END_OF_LIFE; } + + LOG_D("Enter AnalogWatchdog Interrupt"); + // 等待30s,要是还没断电就重启 + for (uint8_t i = 0; i < 30; i++) + { + rt_thread_mdelay(1000); + LOG_D(" %d s", i); + } + NVIC_SystemReset(); // 直接重启系统 + } + else if (received_event & Get_Sys_Event_Flag(kSelfCheckEvent)) // 自检 + { + LOG_D("自检模式"); + + SysControl.last_status = SysControl.status; + LOG_D("Self Check Mode SysControl.last_status:%d", SysControl.last_status); + SysControl.status = kSelfCheckEvent; + + _Self_Check_Mode(); +#if (IOT_MODULE_SWITCH == 1) + Ml307_Send_Event(kMl307SelfCheckEvent); +#endif + Send_Laser_Alarm_Event(kNormalDetectionEvents); + } + else if (received_event & Get_Sys_Event_Flag(kSensorFailureEvent)) // 失效 + { + LOG_D("传感器失效模式"); + + SysControl.last_status = SysControl.status; + SysControl.status = kSensorFailureEvent; + + if (Flash_GetNum_Records(kRecordSensoEndOfLife) == 0) + { + Flash_Write_Record(kRecordSensoEndOfLife); + } + BEEP_END_OF_LIFE; + LED_Y_END_OF_LIFE; } } } diff --git a/applications/user_sys.c b/applications/user_sys.c index 94cb0cf..c72cc0a 100644 --- a/applications/user_sys.c +++ b/applications/user_sys.c @@ -2,8 +2,8 @@ * @Author: mbw * @Date: 2024-10-10 15:50:39 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-11-29 11:27:21 - * @FilePath: \JT-DT-YD4N02A_RTT_MRS\applications\user_sys.c + * @LastEditTime: 2025-01-04 17:16:04 + * @FilePath: \ble_bjq_ch303rct6_ml307\applications\user_sys.c * @Description: * * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. @@ -13,7 +13,24 @@ #include "ctype.h" #include "rtthread.h" #include "stdlib.h" + +#include "bsp_adc.h" +#include "bsp_beep.h" +#include "bsp_bt.h" +#include"bsp_button.h" +#include "bsp_emv.h" #include "bsp_flash.h" +#include "bsp_hr.h" +#include "bsp_led.h" +#include "bsp_ml307.h" +#include "bsp_mq.h" +#include "bsp_rtc.h" +#include "bsp_vin_detection.h" +#include "bsp_wdg.h" +#include "bsp_rng.h" + + + volatile rt_uint16_t work_duration = 1; // 工作时长 volatile rt_uint8_t device_life_check = 0; @@ -227,3 +244,23 @@ rt_uint8_t XOR_CheckSum(const rt_uint8_t *data, rt_size_t len) } return sum; } + +int BSP_SYS_Init(void) +{ + BSP_Flash_Init(); + BSP_RTC_Init(); + BSP_Rng_Init(); + BSP_WDG_Init(); + BSP_LED_Init(); + BSP_BEEP_Init(); + BSP_EMV_Init(); + BSP_BUTTON_Init(); + BSP_MQ_Init(); + BSP_HR_Init(); + BSP_Bt_Init(); + ml307_device_class_register(); + ml307_device_register(); + BSP_Ml307_Thread_Init(); + + return 0; +} diff --git a/applications/user_sys.h b/applications/user_sys.h index 6645f1c..15c0f72 100644 --- a/applications/user_sys.h +++ b/applications/user_sys.h @@ -81,7 +81,7 @@ int Extract_Value(const char *str, const char *key); int _Self_Check_Mode(void); rt_uint8_t XOR_CheckSum(const rt_uint8_t *data, rt_size_t len); - +int BSP_SYS_Init(void); #endif //!__USER_SYS_H__ diff --git a/bsp/inc/at_device_ml307.h b/bsp/inc/at_device_ml307.h index ee1fabc..e93f956 100644 --- a/bsp/inc/at_device_ml307.h +++ b/bsp/inc/at_device_ml307.h @@ -83,7 +83,7 @@ typedef struct __attribute__((packed)) extern ml307_sys_info ml307; extern rt_uint8_t ml307_init_complate_flag; extern struct rt_completion ml307_init_complate; - +int ml307_device_class_register(void); int at_send_data(struct at_device *device, const char *data, rt_size_t size); rt_err_t Ml307_Reset(struct at_device *device); int Time_Calibration(struct at_device *device); diff --git a/bsp/inc/bsp_bt.h b/bsp/inc/bsp_bt.h index ab85ba4..c70436b 100644 --- a/bsp/inc/bsp_bt.h +++ b/bsp/inc/bsp_bt.h @@ -71,6 +71,6 @@ extern struct rt_semaphore bt_reg_sem; //注册阀门信号量 extern struct rt_semaphore bt_rem_sem; //移除阀门信号量 extern struct rt_semaphore bt_rep_sem; //更换阀门信号量 - +int BSP_Bt_Init(void); int Bt_Valve_Handler(ValveCmdType type, rt_uint8_t id, rt_uint8_t *data); #endif // BSP_BT_H__ diff --git a/bsp/inc/bsp_emv.h b/bsp/inc/bsp_emv.h index a7df1ed..19ed87d 100644 --- a/bsp/inc/bsp_emv.h +++ b/bsp/inc/bsp_emv.h @@ -59,5 +59,6 @@ while (0); // extern volatile rt_uint16_t emv_state_flag; // int BSP_Set_Emv_Status(rt_bool_t status); +int BSP_EMV_Init(void); #endif // !__BSP_EMV__ diff --git a/bsp/inc/bsp_led.h b/bsp/inc/bsp_led.h index 96b7b48..d9fd5f7 100644 --- a/bsp/inc/bsp_led.h +++ b/bsp/inc/bsp_led.h @@ -108,4 +108,5 @@ extern agile_led_t *led_y; LED_START(r); \ } while (0U) +int BSP_LED_Init(void); #endif //!__BSP_LED_H__ diff --git a/bsp/inc/bsp_ml307.h b/bsp/inc/bsp_ml307.h index d662603..db5cfa5 100644 --- a/bsp/inc/bsp_ml307.h +++ b/bsp/inc/bsp_ml307.h @@ -235,3 +235,5 @@ extern rt_uint8_t power_on_send_flag; extern rt_sem_t ml307_disconnect_sem; void Ml307_Send_Event(Ml307Event event_type); +int ml307_device_register(void); +int BSP_Ml307_Thread_Init(void); diff --git a/bsp/inc/bsp_rng.h b/bsp/inc/bsp_rng.h new file mode 100644 index 0000000..4aff280 --- /dev/null +++ b/bsp/inc/bsp_rng.h @@ -0,0 +1,28 @@ +#ifndef __BSP_RNG_H__ +#define __BSP_RNG_H__ + +#include "rtthread.h" + + + +int BSP_Rng_Init(void); +int Get_RandomNumber(void); + + + + + + + + + + + + + + + + + +#endif + diff --git a/bsp/src/at_device_ml307.c b/bsp/src/at_device_ml307.c index 8562df8..892ada3 100644 --- a/bsp/src/at_device_ml307.c +++ b/bsp/src/at_device_ml307.c @@ -1427,7 +1427,7 @@ const struct at_device_ops ml307_device_ops = ml307_control, }; -static int ml307_device_class_register(void) +int ml307_device_class_register(void) { struct at_device_class *class = RT_NULL; @@ -1442,7 +1442,7 @@ static int ml307_device_class_register(void) return at_device_class_register(class, AT_DEVICE_CLASS_ML307); } -INIT_DEVICE_EXPORT(ml307_device_class_register); +// INIT_DEVICE_EXPORT(ml307_device_class_register); #endif //! IOT_MODULE_SWITCH #endif /* AT_DEVICE_USING_ML307 */ diff --git a/bsp/src/bsp_adc.c b/bsp/src/bsp_adc.c index 8d9f2de..db3708f 100644 --- a/bsp/src/bsp_adc.c +++ b/bsp/src/bsp_adc.c @@ -146,7 +146,7 @@ int BSP_ADC_Init(void) return 0; } #ifdef RT_USING_COMPONENTS_INIT -INIT_DEVICE_EXPORT(BSP_ADC_Init); +// INIT_DEVICE_EXPORT(BSP_ADC_Init); #endif /** diff --git a/bsp/src/bsp_beep.c b/bsp/src/bsp_beep.c index 4e8cfb3..29efec7 100644 --- a/bsp/src/bsp_beep.c +++ b/bsp/src/bsp_beep.c @@ -29,7 +29,7 @@ int BSP_BEEP_Init(void) LOG_D("BSP_BEEP_Init"); return RT_EOK; } -INIT_DEVICE_EXPORT(BSP_BEEP_Init); +// INIT_DEVICE_EXPORT(BSP_BEEP_Init); #ifdef TEST_ENABLE static void TEST_BEEP(int argc, char **argv) diff --git a/bsp/src/bsp_bt.c b/bsp/src/bsp_bt.c index bf77873..7a64e37 100644 --- a/bsp/src/bsp_bt.c +++ b/bsp/src/bsp_bt.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-12-03 10:31:45 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-04 15:42:19 + * @LastEditTime: 2025-01-04 16:49:26 * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_bt.c * @Description: * @@ -515,7 +515,7 @@ int BSP_Bt_Init(void) return ret; } -INIT_COMPONENT_EXPORT(BSP_Bt_Init); +// INIT_COMPONENT_EXPORT(BSP_Bt_Init); #ifdef TEST_ENABLE static void TEST_BT_Send_Data(int argc, char **argv) diff --git a/bsp/src/bsp_button.c b/bsp/src/bsp_button.c index 9b24543..b021e21 100644 --- a/bsp/src/bsp_button.c +++ b/bsp/src/bsp_button.c @@ -187,5 +187,5 @@ int BSP_BUTTON_Init(void) return -RT_ERROR; } #ifdef FINSH_USING_MSH -INIT_DEVICE_EXPORT(BSP_BUTTON_Init); +// INIT_DEVICE_EXPORT(BSP_BUTTON_Init); #endif diff --git a/bsp/src/bsp_emv.c b/bsp/src/bsp_emv.c index b663849..d4dd894 100644 --- a/bsp/src/bsp_emv.c +++ b/bsp/src/bsp_emv.c @@ -147,7 +147,7 @@ int BSP_EMV_Init(void) // rt_timer_start(&emv_timer); // 启动定时器 return RT_EOK; } -INIT_DEVICE_EXPORT(BSP_EMV_Init); +// INIT_DEVICE_EXPORT(BSP_EMV_Init); static void TEST_Jxs(int argc, char **argv) { diff --git a/bsp/src/bsp_flash.c b/bsp/src/bsp_flash.c index 9180c22..4117c75 100644 --- a/bsp/src/bsp_flash.c +++ b/bsp/src/bsp_flash.c @@ -930,7 +930,7 @@ int BSP_Flash_Init(void) return 0; } #ifdef RT_USING_COMPONENTS_INIT -INIT_PREV_EXPORT(BSP_Flash_Init); +// INIT_PREV_EXPORT(BSP_Flash_Init); #endif #ifdef TEST_ENABLE diff --git a/bsp/src/bsp_hr.c b/bsp/src/bsp_hr.c index d09659b..a9e01aa 100644 --- a/bsp/src/bsp_hr.c +++ b/bsp/src/bsp_hr.c @@ -636,7 +636,7 @@ int BSP_HR_Init(void) return ret; } -INIT_PREV_EXPORT(BSP_HR_Init); +// INIT_PREV_EXPORT(BSP_HR_Init); void USART2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); void USART2_IRQHandler(void) diff --git a/bsp/src/bsp_led.c b/bsp/src/bsp_led.c index 53455f3..2bdb828 100644 --- a/bsp/src/bsp_led.c +++ b/bsp/src/bsp_led.c @@ -90,7 +90,7 @@ int BSP_LED_Init(void) LOG_D("BSP_LED_Init"); return RT_EOK; } -INIT_DEVICE_EXPORT(BSP_LED_Init); +// INIT_DEVICE_EXPORT(BSP_LED_Init); #ifdef TEST_ENABLE static void TEST_LED(int argc, char **argv) diff --git a/bsp/src/bsp_ml307.c b/bsp/src/bsp_ml307.c index 5c9f96b..cf1d43e 100644 --- a/bsp/src/bsp_ml307.c +++ b/bsp/src/bsp_ml307.c @@ -1779,9 +1779,9 @@ int BSP_Ml307_Thread_Init(void) return ret; } -INIT_APP_EXPORT(BSP_Ml307_Thread_Init); +// INIT_APP_EXPORT(BSP_Ml307_Thread_Init); -static int ml307_device_register(void) +int ml307_device_register(void) { struct at_device_ml307 *ml307 = &_dev; @@ -1791,6 +1791,6 @@ static int ml307_device_register(void) AT_DEVICE_CLASS_ML307, (void *)ml307); } -INIT_DEVICE_EXPORT(ml307_device_register); +// INIT_DEVICE_EXPORT(ml307_device_register); #endif // IOT_MODULE_SWITCH diff --git a/bsp/src/bsp_mq.c b/bsp/src/bsp_mq.c index b0b3015..6eeb1de 100644 --- a/bsp/src/bsp_mq.c +++ b/bsp/src/bsp_mq.c @@ -193,7 +193,7 @@ int BSP_MQ_Init(void) return 0; } #ifdef RT_USING_COMPONENTS_INIT -INIT_DEVICE_EXPORT(BSP_MQ_Init); +// INIT_DEVICE_EXPORT(BSP_MQ_Init); #endif #ifdef TEST_ENABLE @@ -201,5 +201,5 @@ static void TEST_MQ_EndOfLife(void) { Sensor_device.end_of_life = 1; } -MSH_CMD_EXPORT(TEST_MQ_EndOfLife, TEST_MQ_EndOfLife); +// MSH_CMD_EXPORT(TEST_MQ_EndOfLife, TEST_MQ_EndOfLife); #endif diff --git a/bsp/src/bsp_rng.c b/bsp/src/bsp_rng.c new file mode 100644 index 0000000..44fedc7 --- /dev/null +++ b/bsp/src/bsp_rng.c @@ -0,0 +1,27 @@ +#include "bsp_rng.h" +#include "ch32v30x_rng.h" +#include "rtdef.h" + +#define LOG_LVL LOG_LVL_DBG +#include + +int BSP_Rng_Init(void) +{ + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_RNG, ENABLE); + RNG_Cmd(ENABLE); + + return 0; +} +// INIT_PREV_EXPORT(BSP_Rng_Init); + +int Get_RandomNumber(void) +{ + u32 random = 0; + while(RNG_GetFlagStatus(RNG_FLAG_DRDY) == RESET); + random = RNG_GetRandomNumber(); + + LOG_D("random = %d\r\n", random % 31); + + // 生成0到1000之间的随机数 + return random % 1000; +} diff --git a/bsp/src/bsp_rtc.c b/bsp/src/bsp_rtc.c index 3de0bc6..debdb25 100644 --- a/bsp/src/bsp_rtc.c +++ b/bsp/src/bsp_rtc.c @@ -378,7 +378,7 @@ int BSP_RTC_Init(void) return 0; } -INIT_PREV_EXPORT(BSP_RTC_Init); +// INIT_PREV_EXPORT(BSP_RTC_Init); #if 1 void RTC_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); diff --git a/bsp/src/bsp_vin_detection.c b/bsp/src/bsp_vin_detection.c index 1cb40a1..743885a 100644 --- a/bsp/src/bsp_vin_detection.c +++ b/bsp/src/bsp_vin_detection.c @@ -122,7 +122,7 @@ int BSP_VIN_Detection_Init(void) return RT_EOK; } #ifdef RT_USING_COMPONENTS_INIT -INIT_APP_EXPORT(BSP_VIN_Detection_Init); +// INIT_APP_EXPORT(BSP_VIN_Detection_Init); #endif void ADC1_2_IRQHandler(void) __attribute__((interrupt())); diff --git a/bsp/src/bsp_wdg.c b/bsp/src/bsp_wdg.c index e252918..2632627 100644 --- a/bsp/src/bsp_wdg.c +++ b/bsp/src/bsp_wdg.c @@ -165,7 +165,7 @@ int BSP_WDG_Init(void) return 0; } #ifdef RT_USING_COMPONENTS_INIT -INIT_APP_EXPORT(BSP_WDG_Init); +// INIT_APP_EXPORT(BSP_WDG_Init); #endif #if USED_WWDG