将所有BSP下的文件初始化,放在了user_sys.c中

This commit is contained in:
小马_666 2025-01-04 17:19:34 +08:00
parent 9a7c78302f
commit 1b2a11301d
25 changed files with 377 additions and 275 deletions

View File

@ -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_bt.h=UTF-8
encoding//bsp/inc/bsp_hr.h=GBK encoding//bsp/inc/bsp_hr.h=GBK
encoding//bsp/inc/bsp_led.h=UTF-8 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/at_device_ml307.c=UTF-8
encoding//bsp/src/bsp_bt.c=UTF-8 encoding//bsp/src/bsp_bt.c=UTF-8
encoding//bsp/src/bsp_button.c=GBK encoding//bsp/src/bsp_button.c=GBK

View File

@ -2,7 +2,7 @@
* @Author: mbw * @Author: mbw
* @Date: 2024-10-23 17:14:16 * @Date: 2024-10-23 17:14:16
* @LastEditors: mbw && 1600520629@qq.com * @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 * @FilePath: \ble_bjq_ch303rct6_ml307\applications\main.c
* @Descrt_thread_ * @Descrt_thread_
* *
@ -149,17 +149,60 @@ void Preheat_Timer_Callback(void *parameter)
int main(void) int main(void)
{ {
// 定义超时时间,单位为毫秒 // 定义超时时间,单位为毫秒
#define TIMEOUT_MS 3 * 60 * 1000 #define TIMEOUT_MS 3 * 60 * 1000
// #define TIMEOUT_MS 8 * 1000 // #define TIMEOUT_MS 8 * 1000
#define WORK_TIMER_CNT (1000 * 60 * 60 * 24) #define WORK_TIMER_CNT (1000 * 60 * 60 * 24)
rt_err_t result = RT_EINVAL; rt_err_t result = RT_EINVAL;
rt_uint32_t received_event; rt_uint32_t received_event;
rt_kprintf("JT-DT-YD4N02A Software version: %02X\r\n", (uint8_t)Flash_Get_SysCfg(kSwVerId)); BSP_ADC_Init();
// 读取历史记录总数 BSP_VIN_Detection_Init();
Flash_GetTotalRecord(&TotalRecords);
g_Calibration_status = Flash_Get_Calibration_State(); if (Get_VIN_VoltageInt1000x() > 10000)
rt_thread_mdelay(10); {
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) while (1)
{ {
if (g_Calibration_status == kNotCalibrated) // 没标定 if (g_Calibration_status == kNotCalibrated) // 没标定
@ -202,143 +245,74 @@ int main(void)
} }
else else
{ {
SYS_EventInit(); result = rt_event_recv(&alarm_event,
work_duration = Flash_Get_WorkDuration(); Get_Sys_Event_Flag(kPowerOnEvent) | // 上电
rt_timer_init(&work_cnt_timer, Get_Sys_Event_Flag(kPowerDownEvent) | // 掉电
"work_cnt_timer", Get_Sys_Event_Flag(kPreheatingEvent) | // 预热
Work_Cnt_Timer_Callback, Get_Sys_Event_Flag(kNormalDetectionEvents) | // 正常检测
RT_NULL, Get_Sys_Event_Flag(kSensorFailureEvent) | // 寿命到期
WORK_TIMER_CNT, Get_Sys_Event_Flag(kAlarmEvent) | // 报警
RT_TIMER_FLAG_SOFT_TIMER | RT_TIMER_FLAG_PERIODIC); Get_Sys_Event_Flag(kAlarmRcyEvent) | // 报警恢复
rt_timer_start(&work_cnt_timer); Get_Sys_Event_Flag(kSelfCheckEvent) | // 自检
rt_timer_init(&preheat_timer, Get_Sys_Event_Flag(kFaultEvent) | // 故障模式
"preheat_timer", Get_Sys_Event_Flag(kFaultRcyEvent) | // 故障恢复
Preheat_Timer_Callback, Get_Sys_Event_Flag(KMuteEvent), // 消音
RT_NULL, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
TIMEOUT_MS, RT_WAITING_FOREVER, &received_event);
RT_TIMER_FLAG_SOFT_TIMER | RT_TIMER_FLAG_ONE_SHOT); if (result == RT_EOK)
if (Get_VIN_VoltageInt1000x() > 10000)
{ {
// 检测上电/掉电复位标志 if (is_event_initialized == RT_TRUE)
if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET) // TODO:这块超级电容会造成掉电重启,并且标志是上电复位,只能通过其超级电容造成复位时事件创建失败进行判断,不治本
{ {
Send_Laser_Alarm_Event(kPowerOnEvent); if (received_event & Get_Sys_Event_Flag(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)) // 上电 LOG_D("上电模式");
{ LOG_D("is_event_initialized :%d", is_event_initialized);
LOG_D("上电模式"); SysControl.status = kPowerOnEvent;
LOG_D("is_event_initialized :%d", is_event_initialized);
SysControl.status = kPowerOnEvent;
Flash_Write_Record(kRecordPowerOn); Flash_Write_Record(kRecordPowerOn);
Send_Laser_Alarm_Event(kPreheatingEvent); 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("预热模式"); Send_Laser_Alarm_Event(kSensorFailureEvent);
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)) // 正常检测 else if (Sensor_device.detection_flag == kSensorFault)
{ {
SysControl.last_status = SysControl.status; LED_G_NORMAL;
SysControl.status = kNormalDetectionEvents; rt_thread_mdelay(500);
Send_Laser_Alarm_Event(kFaultEvent);
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("电磁阀动作失败");
}
}
}
} }
else if (received_event & Get_Sys_Event_Flag(kAlarmExceptionEvent)) // 浓度异常 if (SysControl.last_status == kSelfCheckEvent)
{ {
LOG_D("浓度异常模式"); rt_thread_mdelay(5000);
// 第5s关闭电磁阀
SysControl.last_status = SysControl.status; LOG_I("自检机械手动作");
SysControl.status = kAlarmExceptionEvent; EMV_FORWARD_ON(50);
rt_thread_mdelay(10);
LED_R_ALARM; EMV_BACKWARD_ON(50);
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()) 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) if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK)
{ {
LOG_D("电磁阀动作完成"); LOG_D("电磁阀动作完成");
@ -348,139 +322,170 @@ int main(void)
LOG_E("电磁阀动作失败"); 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("报警恢复模式"); Bt_Valve_Handler(kValveCmdCtr, 0, RT_NULL);
if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK)
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())
{ {
rt_uint8_t mac_addr[6]; LOG_D("电磁阀动作完成");
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("电磁阀动作失败");
}
} }
else
LOG_D("Enter AnalogWatchdog Interrupt");
// 等待30s,要是还没断电就重启
for (uint8_t i = 0; i < 30; i++)
{ {
rt_thread_mdelay(1000); LOG_E("电磁阀动作失败");
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) #if (IOT_MODULE_SWITCH == 1)
Ml307_Send_Event(kMl307SelfCheckEvent); Ml307_Send_Event(kMl307AlarmEvent);
#endif #endif
Send_Laser_Alarm_Event(kNormalDetectionEvents); }
} else if (received_event & Get_Sys_Event_Flag(kAlarmRcyEvent)) // 报警恢复
else if (received_event & Get_Sys_Event_Flag(kSensorFailureEvent)) // 失效 {
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("传感器失效模式"); rt_uint8_t mac_addr[6];
Flash_Get_Mac_Addr(mac_addr, 1);
SysControl.last_status = SysControl.status; Bt_Valve_Handler(kValveCmdCtr, 1, mac_addr);
SysControl.status = kSensorFailureEvent; if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK)
if (Flash_GetNum_Records(kRecordSensoEndOfLife) == 0)
{ {
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;
} }
} }
} }

View File

@ -2,8 +2,8 @@
* @Author: mbw * @Author: mbw
* @Date: 2024-10-10 15:50:39 * @Date: 2024-10-10 15:50:39
* @LastEditors: mbw && 1600520629@qq.com * @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-11-29 11:27:21 * @LastEditTime: 2025-01-04 17:16:04
* @FilePath: \JT-DT-YD4N02A_RTT_MRS\applications\user_sys.c * @FilePath: \ble_bjq_ch303rct6_ml307\applications\user_sys.c
* @Description: * @Description:
* *
* Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
@ -13,7 +13,24 @@
#include "ctype.h" #include "ctype.h"
#include "rtthread.h" #include "rtthread.h"
#include "stdlib.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_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_uint16_t work_duration = 1; // 工作时长
volatile rt_uint8_t device_life_check = 0; 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; 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;
}

View File

@ -81,7 +81,7 @@ int Extract_Value(const char *str, const char *key);
int _Self_Check_Mode(void); int _Self_Check_Mode(void);
rt_uint8_t XOR_CheckSum(const rt_uint8_t *data, rt_size_t len); rt_uint8_t XOR_CheckSum(const rt_uint8_t *data, rt_size_t len);
int BSP_SYS_Init(void);
#endif //!__USER_SYS_H__ #endif //!__USER_SYS_H__

View File

@ -83,7 +83,7 @@ typedef struct __attribute__((packed))
extern ml307_sys_info ml307; extern ml307_sys_info ml307;
extern rt_uint8_t ml307_init_complate_flag; extern rt_uint8_t ml307_init_complate_flag;
extern struct rt_completion ml307_init_complate; 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); int at_send_data(struct at_device *device, const char *data, rt_size_t size);
rt_err_t Ml307_Reset(struct at_device *device); rt_err_t Ml307_Reset(struct at_device *device);
int Time_Calibration(struct at_device *device); int Time_Calibration(struct at_device *device);

View File

@ -71,6 +71,6 @@ extern struct rt_semaphore bt_reg_sem; //注册阀门信号量
extern struct rt_semaphore bt_rem_sem; //移除阀门信号量 extern struct rt_semaphore bt_rem_sem; //移除阀门信号量
extern struct rt_semaphore bt_rep_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); int Bt_Valve_Handler(ValveCmdType type, rt_uint8_t id, rt_uint8_t *data);
#endif // BSP_BT_H__ #endif // BSP_BT_H__

View File

@ -59,5 +59,6 @@ while (0);
// extern volatile rt_uint16_t emv_state_flag; // extern volatile rt_uint16_t emv_state_flag;
// int BSP_Set_Emv_Status(rt_bool_t status); // int BSP_Set_Emv_Status(rt_bool_t status);
int BSP_EMV_Init(void);
#endif // !__BSP_EMV__ #endif // !__BSP_EMV__

View File

@ -108,4 +108,5 @@ extern agile_led_t *led_y;
LED_START(r); \ LED_START(r); \
} while (0U) } while (0U)
int BSP_LED_Init(void);
#endif //!__BSP_LED_H__ #endif //!__BSP_LED_H__

View File

@ -235,3 +235,5 @@ extern rt_uint8_t power_on_send_flag;
extern rt_sem_t ml307_disconnect_sem; extern rt_sem_t ml307_disconnect_sem;
void Ml307_Send_Event(Ml307Event event_type); void Ml307_Send_Event(Ml307Event event_type);
int ml307_device_register(void);
int BSP_Ml307_Thread_Init(void);

28
bsp/inc/bsp_rng.h Normal file
View File

@ -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

View File

@ -1427,7 +1427,7 @@ const struct at_device_ops ml307_device_ops =
ml307_control, ml307_control,
}; };
static int ml307_device_class_register(void) int ml307_device_class_register(void)
{ {
struct at_device_class *class = RT_NULL; 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); 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 //! IOT_MODULE_SWITCH
#endif /* AT_DEVICE_USING_ML307 */ #endif /* AT_DEVICE_USING_ML307 */

View File

@ -146,7 +146,7 @@ int BSP_ADC_Init(void)
return 0; return 0;
} }
#ifdef RT_USING_COMPONENTS_INIT #ifdef RT_USING_COMPONENTS_INIT
INIT_DEVICE_EXPORT(BSP_ADC_Init); // INIT_DEVICE_EXPORT(BSP_ADC_Init);
#endif #endif
/** /**

View File

@ -29,7 +29,7 @@ int BSP_BEEP_Init(void)
LOG_D("BSP_BEEP_Init"); LOG_D("BSP_BEEP_Init");
return RT_EOK; return RT_EOK;
} }
INIT_DEVICE_EXPORT(BSP_BEEP_Init); // INIT_DEVICE_EXPORT(BSP_BEEP_Init);
#ifdef TEST_ENABLE #ifdef TEST_ENABLE
static void TEST_BEEP(int argc, char **argv) static void TEST_BEEP(int argc, char **argv)

View File

@ -2,7 +2,7 @@
* @Author: mbw * @Author: mbw
* @Date: 2024-12-03 10:31:45 * @Date: 2024-12-03 10:31:45
* @LastEditors: mbw && 1600520629@qq.com * @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 * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_bt.c
* @Description: * @Description:
* *
@ -515,7 +515,7 @@ int BSP_Bt_Init(void)
return ret; return ret;
} }
INIT_COMPONENT_EXPORT(BSP_Bt_Init); // INIT_COMPONENT_EXPORT(BSP_Bt_Init);
#ifdef TEST_ENABLE #ifdef TEST_ENABLE
static void TEST_BT_Send_Data(int argc, char **argv) static void TEST_BT_Send_Data(int argc, char **argv)

View File

@ -187,5 +187,5 @@ int BSP_BUTTON_Init(void)
return -RT_ERROR; return -RT_ERROR;
} }
#ifdef FINSH_USING_MSH #ifdef FINSH_USING_MSH
INIT_DEVICE_EXPORT(BSP_BUTTON_Init); // INIT_DEVICE_EXPORT(BSP_BUTTON_Init);
#endif #endif

View File

@ -147,7 +147,7 @@ int BSP_EMV_Init(void)
// rt_timer_start(&emv_timer); // 启动定时器 // rt_timer_start(&emv_timer); // 启动定时器
return RT_EOK; return RT_EOK;
} }
INIT_DEVICE_EXPORT(BSP_EMV_Init); // INIT_DEVICE_EXPORT(BSP_EMV_Init);
static void TEST_Jxs(int argc, char **argv) static void TEST_Jxs(int argc, char **argv)
{ {

View File

@ -930,7 +930,7 @@ int BSP_Flash_Init(void)
return 0; return 0;
} }
#ifdef RT_USING_COMPONENTS_INIT #ifdef RT_USING_COMPONENTS_INIT
INIT_PREV_EXPORT(BSP_Flash_Init); // INIT_PREV_EXPORT(BSP_Flash_Init);
#endif #endif
#ifdef TEST_ENABLE #ifdef TEST_ENABLE

View File

@ -636,7 +636,7 @@ int BSP_HR_Init(void)
return ret; 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) __attribute__((interrupt("WCH-Interrupt-fast")));
void USART2_IRQHandler(void) void USART2_IRQHandler(void)

View File

@ -90,7 +90,7 @@ int BSP_LED_Init(void)
LOG_D("BSP_LED_Init"); LOG_D("BSP_LED_Init");
return RT_EOK; return RT_EOK;
} }
INIT_DEVICE_EXPORT(BSP_LED_Init); // INIT_DEVICE_EXPORT(BSP_LED_Init);
#ifdef TEST_ENABLE #ifdef TEST_ENABLE
static void TEST_LED(int argc, char **argv) static void TEST_LED(int argc, char **argv)

View File

@ -1779,9 +1779,9 @@ int BSP_Ml307_Thread_Init(void)
return ret; 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; struct at_device_ml307 *ml307 = &_dev;
@ -1791,6 +1791,6 @@ static int ml307_device_register(void)
AT_DEVICE_CLASS_ML307, AT_DEVICE_CLASS_ML307,
(void *)ml307); (void *)ml307);
} }
INIT_DEVICE_EXPORT(ml307_device_register); // INIT_DEVICE_EXPORT(ml307_device_register);
#endif // IOT_MODULE_SWITCH #endif // IOT_MODULE_SWITCH

View File

@ -193,7 +193,7 @@ int BSP_MQ_Init(void)
return 0; return 0;
} }
#ifdef RT_USING_COMPONENTS_INIT #ifdef RT_USING_COMPONENTS_INIT
INIT_DEVICE_EXPORT(BSP_MQ_Init); // INIT_DEVICE_EXPORT(BSP_MQ_Init);
#endif #endif
#ifdef TEST_ENABLE #ifdef TEST_ENABLE
@ -201,5 +201,5 @@ static void TEST_MQ_EndOfLife(void)
{ {
Sensor_device.end_of_life = 1; 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 #endif

27
bsp/src/bsp_rng.c Normal file
View File

@ -0,0 +1,27 @@
#include "bsp_rng.h"
#include "ch32v30x_rng.h"
#include "rtdef.h"
#define LOG_LVL LOG_LVL_DBG
#include <ulog.h>
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;
}

View File

@ -378,7 +378,7 @@ int BSP_RTC_Init(void)
return 0; return 0;
} }
INIT_PREV_EXPORT(BSP_RTC_Init); // INIT_PREV_EXPORT(BSP_RTC_Init);
#if 1 #if 1
void RTC_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); void RTC_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

View File

@ -122,7 +122,7 @@ int BSP_VIN_Detection_Init(void)
return RT_EOK; return RT_EOK;
} }
#ifdef RT_USING_COMPONENTS_INIT #ifdef RT_USING_COMPONENTS_INIT
INIT_APP_EXPORT(BSP_VIN_Detection_Init); // INIT_APP_EXPORT(BSP_VIN_Detection_Init);
#endif #endif
void ADC1_2_IRQHandler(void) __attribute__((interrupt())); void ADC1_2_IRQHandler(void) __attribute__((interrupt()));

View File

@ -165,7 +165,7 @@ int BSP_WDG_Init(void)
return 0; return 0;
} }
#ifdef RT_USING_COMPONENTS_INIT #ifdef RT_USING_COMPONENTS_INIT
INIT_APP_EXPORT(BSP_WDG_Init); // INIT_APP_EXPORT(BSP_WDG_Init);
#endif #endif
#if USED_WWDG #if USED_WWDG