测试服务器和蓝牙之间的交互通过
This commit is contained in:
parent
0a494a737a
commit
bb4e10bf74
|
@ -1,4 +1,5 @@
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
|
encoding//.git/objects/54/7f302e8700e84e20866af42cd1486f10f532a1=GBK
|
||||||
encoding//Ld/Link.ld=GBK
|
encoding//Ld/Link.ld=GBK
|
||||||
encoding//applications/main.c=UTF-8
|
encoding//applications/main.c=UTF-8
|
||||||
encoding//applications/user_sys.h=UTF-8
|
encoding//applications/user_sys.h=UTF-8
|
||||||
|
@ -15,6 +16,7 @@ encoding//bsp/src/bsp_flash.c=UTF-8
|
||||||
encoding//bsp/src/bsp_led.c=GBK
|
encoding//bsp/src/bsp_led.c=GBK
|
||||||
encoding//bsp/src/bsp_rtc.c=UTF-8
|
encoding//bsp/src/bsp_rtc.c=UTF-8
|
||||||
encoding//bsp/src/bsp_vin_detection.c=UTF-8
|
encoding//bsp/src/bsp_vin_detection.c=UTF-8
|
||||||
|
encoding//libcpu/cpu/context_gcc.S=GBK
|
||||||
encoding//libraries/hal_drivers/drv_gpio.c=GBK
|
encoding//libraries/hal_drivers/drv_gpio.c=GBK
|
||||||
encoding//libraries/hal_drivers/drv_gpio.h=GBK
|
encoding//libraries/hal_drivers/drv_gpio.h=GBK
|
||||||
encoding//libraries/hal_drivers/drv_usart.c=UTF-8
|
encoding//libraries/hal_drivers/drv_usart.c=UTF-8
|
||||||
|
|
|
@ -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: 2024-12-05 16:42:07
|
* @LastEditTime: 2024-12-17 11:47:24
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\applications\main.c
|
* @FilePath: \ble_bjq_ch303rct6_ml307\applications\main.c
|
||||||
* @Descrt_thread_
|
* @Descrt_thread_
|
||||||
*
|
*
|
||||||
|
@ -25,6 +25,7 @@
|
||||||
#include "bsp_ml307.h"
|
#include "bsp_ml307.h"
|
||||||
#include "bsp_vin_detection.h"
|
#include "bsp_vin_detection.h"
|
||||||
#include "user_sys.h"
|
#include "user_sys.h"
|
||||||
|
#include "bsp_bt.h"
|
||||||
|
|
||||||
#define LOG_TAG "main"
|
#define LOG_TAG "main"
|
||||||
#define LOG_LVL LOG_LVL_DBG
|
#define LOG_LVL LOG_LVL_DBG
|
||||||
|
@ -121,9 +122,15 @@ int _Self_Check_Mode(void)
|
||||||
rt_thread_mdelay(2000);
|
rt_thread_mdelay(2000);
|
||||||
// 第5s关闭电磁阀
|
// 第5s关闭电磁阀
|
||||||
LOG_I("自检电磁阀动作");
|
LOG_I("自检电磁阀动作");
|
||||||
|
Bt_Valve_Handler(kValveCmdCtr, 0, RT_NULL);
|
||||||
LOG_I("自检风机动作");
|
if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK)
|
||||||
|
{
|
||||||
|
LOG_D("电磁阀动作完成");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_E("电磁阀动作失败");
|
||||||
|
}
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,7 +160,7 @@ 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;
|
||||||
|
@ -173,7 +180,7 @@ int main(void)
|
||||||
uint32_t ticks = 0, gas_calibration_voltage;
|
uint32_t ticks = 0, gas_calibration_voltage;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
gas_calibration_voltage = Get_Gas_VoltageInt1000x();
|
gas_calibration_voltage = Get_Gas_VoltageAdcInt1000x();
|
||||||
LOG_D("ticks[%d] gas_calibration_voltage = %d", ticks++, gas_calibration_voltage);
|
LOG_D("ticks[%d] gas_calibration_voltage = %d", ticks++, gas_calibration_voltage);
|
||||||
|
|
||||||
if (g_Calibration_status == kNotCalibrated)//没标定
|
if (g_Calibration_status == kNotCalibrated)//没标定
|
||||||
|
@ -299,11 +306,18 @@ int main(void)
|
||||||
|
|
||||||
SysControl.last_status = SysControl.status;
|
SysControl.last_status = SysControl.status;
|
||||||
SysControl.status = kAlarmEvent;
|
SysControl.status = kAlarmEvent;
|
||||||
|
|
||||||
Flash_Write_Record(kRecordAlarm); // 写入flash报警信息
|
|
||||||
|
|
||||||
LED_R_ALARM;
|
LED_R_ALARM;
|
||||||
BEEP_ALARM;
|
BEEP_ALARM;
|
||||||
|
Flash_Write_Record(kRecordAlarm); // 写入flash报警信息
|
||||||
|
Bt_Valve_Handler(kValveCmdCtr, 0, RT_NULL);
|
||||||
|
if (rt_sem_take(&bt_ctr_sem, 10000) == RT_EOK)
|
||||||
|
{
|
||||||
|
LOG_D("电磁阀动作完成");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_E("电磁阀动作失败");
|
||||||
|
}
|
||||||
|
|
||||||
#if (IOT_MODULE_SWITCH == 1)
|
#if (IOT_MODULE_SWITCH == 1)
|
||||||
Ml307_Send_Event(kMl307AlarmEvent);
|
Ml307_Send_Event(kMl307AlarmEvent);
|
||||||
|
|
|
@ -74,7 +74,7 @@ extern agile_led_t *led_y;
|
||||||
LED_STOP(r); \
|
LED_STOP(r); \
|
||||||
LED_STOP(g); \
|
LED_STOP(g); \
|
||||||
LED_STOP(y); \
|
LED_STOP(y); \
|
||||||
LED_CTRL(g, "200,200", -1);\
|
LED_CTRL(g, "200,200", 3);\
|
||||||
LED_START(g);\
|
LED_START(g);\
|
||||||
} while (0U)
|
} while (0U)
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author: mbw
|
* @Author: mbw
|
||||||
* @Date: 2024-11-30 16:46:31
|
* @Date: 2024-11-30 16:46:31
|
||||||
* @LastEditors: mbw && 1600520629@qq.com
|
* @LastEditors: mbw && 1600520629@qq.com
|
||||||
* @LastEditTime: 2024-12-04 16:18:21
|
* @LastEditTime: 2024-12-17 11:35:28
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_mq.h
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_mq.h
|
||||||
* @Description:
|
* @Description:
|
||||||
* @
|
* @
|
||||||
|
@ -95,6 +95,7 @@ typedef enum
|
||||||
|
|
||||||
int BSP_MQ_Init(void);
|
int BSP_MQ_Init(void);
|
||||||
uint16_t Get_Gas_VoltageInt1000x(void);
|
uint16_t Get_Gas_VoltageInt1000x(void);
|
||||||
|
uint16_t Get_Gas_VoltageAdcInt1000x(void);
|
||||||
uint8_t IS_EndOfLife(void);
|
uint8_t IS_EndOfLife(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
119
bsp/src/bsp_bt.c
119
bsp/src/bsp_bt.c
|
@ -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: 2024-12-16 19:00:53
|
* @LastEditTime: 2024-12-17 15:40:10
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_bt.c
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_bt.c
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
|
@ -30,7 +30,7 @@ struct rt_semaphore bt_reg_sem; // 注册阀门信号量
|
||||||
struct rt_semaphore bt_rem_sem; // 移除阀门信号量
|
struct rt_semaphore bt_rem_sem; // 移除阀门信号量
|
||||||
struct rt_semaphore bt_rep_sem; // 更换阀门信号量
|
struct rt_semaphore bt_rep_sem; // 更换阀门信号量
|
||||||
|
|
||||||
#define BT_THREAD_TIMESLICE (5)
|
#define BT_THREAD_TIMESLICE (20)
|
||||||
#define BT_THREAD_PRIORITY (10)
|
#define BT_THREAD_PRIORITY (10)
|
||||||
#define BT_THREAD_STACK_SIZE (2048)
|
#define BT_THREAD_STACK_SIZE (2048)
|
||||||
|
|
||||||
|
@ -39,10 +39,10 @@ static rt_uint8_t bt_thread_stack[BT_THREAD_STACK_SIZE] = {0};
|
||||||
static struct rt_thread bt_thread = {0};
|
static struct rt_thread bt_thread = {0};
|
||||||
|
|
||||||
lwrb_t bt_lwrb_rx;
|
lwrb_t bt_lwrb_rx;
|
||||||
static char bt_rx_buffer[256] = {0};
|
static char bt_rx_buffer[1024] = {0};
|
||||||
BTFrameData bt_frame = {0};
|
BTFrameData bt_frame = {0};
|
||||||
|
|
||||||
valve_data valve[MAX_VALVE_NUM];
|
valve_data valve[MAX_VALVE_NUM] = {0};
|
||||||
|
|
||||||
rt_size_t BSP_Bt_Send_Data(uint8_t *data, size_t size)
|
rt_size_t BSP_Bt_Send_Data(uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
|
@ -53,31 +53,6 @@ rt_size_t BSP_Bt_Recv_Data(uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
return lwrb_read(&bt_lwrb_rx, data, size);
|
return lwrb_read(&bt_lwrb_rx, data, size);
|
||||||
}
|
}
|
||||||
int BSP_BT_Init(void)
|
|
||||||
{
|
|
||||||
rt_uint8_t num = Flash_Get_Valve_Num();
|
|
||||||
rt_uint8_t mac_buf[FLASH_VALVE_MAC_ADDR_LEN] = {0};
|
|
||||||
if (num != 0)
|
|
||||||
{
|
|
||||||
for (size_t i = 0; i < MAX_VALVE_NUM; i++)
|
|
||||||
{
|
|
||||||
valve[i].valve_id = (i + 1); // 1-8
|
|
||||||
if (Flash_Get_Mac_Addr(valve[i].valve_mac, i) == RT_EOK)
|
|
||||||
{
|
|
||||||
rt_memcpy(valve[i].valve_mac, mac_buf, 6);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (size_t i = 0; i < MAX_VALVE_NUM; i++)
|
|
||||||
{
|
|
||||||
rt_memset(&valve[i], 0, sizeof(struct valve_t));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return RT_EOK;
|
|
||||||
}
|
|
||||||
INIT_PREV_EXPORT(BSP_BT_Init);
|
|
||||||
|
|
||||||
static rt_err_t bt_getchar(char *ch, rt_int32_t timeout)
|
static rt_err_t bt_getchar(char *ch, rt_int32_t timeout)
|
||||||
{
|
{
|
||||||
|
@ -255,11 +230,6 @@ int Bt_Valve_Handler(ValveCmdType type, rt_uint8_t id, rt_uint8_t *data)
|
||||||
break;
|
break;
|
||||||
case kValveCmdRep: // 阀门更换
|
case kValveCmdRep: // 阀门更换
|
||||||
ret = BSP_Bt_Replace_Valve(valve[id].valve_id, valve[id].valve_mac, data);
|
ret = BSP_Bt_Replace_Valve(valve[id].valve_id, valve[id].valve_mac, data);
|
||||||
if (ret == RT_EOK)
|
|
||||||
{
|
|
||||||
rt_memcpy(valve[id].valve_mac, data, 6);
|
|
||||||
Flash_Set_Mac_Addr(valve[id].valve_mac, valve[id].valve_id - 1);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ret = -RT_ERROR;
|
ret = -RT_ERROR;
|
||||||
|
@ -274,10 +244,11 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
uint16_t index = 0;
|
uint16_t index = 0;
|
||||||
|
rt_uint8_t end_index = 0;
|
||||||
uint8_t data_buf[256] = {0};
|
uint8_t data_buf[256] = {0};
|
||||||
// 解析接收到的数据帧,先寻找AA开头,然后再找AA下一个字节,其代表了数据长度,然后找到代表长度的值的长度的下一位,其为校验码,校验码后为结束码0x55,
|
// 解析接收到的数据帧,先寻找AA开头,然后再找AA下一个字节,其代表了数据长度,然后找到代表长度的值的长度的下一位,其为校验码,校验码后为结束码0x55,
|
||||||
// 如果数据正确,则提取数据,不正确,则不处理
|
// 如果数据正确,则提取数据,不正确,则不处理
|
||||||
// LOG_HEX("BT_RX_DATA", 16, data, len);
|
LOG_HEX("BT_RX_DATA", 16, data, len);
|
||||||
LOG_D("len = %d", len);
|
LOG_D("len = %d", len);
|
||||||
if (len < 4)
|
if (len < 4)
|
||||||
{ // 至少需要 4 个字节:起始码、长度、校验码、结束码
|
{ // 至少需要 4 个字节:起始码、长度、校验码、结束码
|
||||||
|
@ -289,7 +260,21 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
||||||
{
|
{
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
LOG_D("index = %d", index);
|
for (size_t i = 0; i < len - 3; i++)//发现了一种情况,会出现两个AA,用这种方法排除一下
|
||||||
|
{
|
||||||
|
if (data[index + i + 1] == 0XAA)
|
||||||
|
{
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (end_index < len && data[end_index] != 0x55) // 寻找起始码 0xAA
|
||||||
|
{
|
||||||
|
end_index++;
|
||||||
|
}
|
||||||
uint16_t datalength = data[index + 1]; // 读取数据长度
|
uint16_t datalength = data[index + 1]; // 读取数据长度
|
||||||
LOG_D("datalength = %d", datalength);
|
LOG_D("datalength = %d", datalength);
|
||||||
|
|
||||||
|
@ -299,12 +284,15 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
||||||
{
|
{
|
||||||
LOG_E("校验和不对 rx_sum[%02X] != calculated_sum[%02X]", rx_sum, calculated_sum);
|
LOG_E("校验和不对 rx_sum[%02X] != calculated_sum[%02X]", rx_sum, calculated_sum);
|
||||||
LOG_HEX("bt_rx_data:", 16, data, len);
|
LOG_HEX("bt_rx_data:", 16, data, len);
|
||||||
|
lwrb_reset(&bt_lwrb_rx);
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data[index + 2 + datalength + 1] != 0x55) // 检查结束码
|
if (data[index + 1 + datalength + 2] != data[end_index])// 检查结束码
|
||||||
{
|
{
|
||||||
LOG_E("结束码错误");
|
LOG_E("结束码位置错误");
|
||||||
|
LOG_HEX("bt_rx_data:", 16, data, len);
|
||||||
|
lwrb_reset(&bt_lwrb_rx);
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
rt_uint8_t fram_len = datalength + 4;
|
rt_uint8_t fram_len = datalength + 4;
|
||||||
|
@ -340,11 +328,15 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case kValveEventRep:
|
case kValveEventRep:
|
||||||
if (data_buf[index + datalength - 3] == RT_TRUE) // 更换成功
|
if (data_buf[fram_len - 3] == RT_TRUE) // 更换成功
|
||||||
{
|
{
|
||||||
LOG_D("阀门更换响应成功");
|
LOG_D("阀门更换响应成功");
|
||||||
rt_sem_release(&bt_rep_sem);
|
rt_sem_release(&bt_rep_sem);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_E("阀门更换失败");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case kValveEventStatus:
|
case kValveEventStatus:
|
||||||
LOG_I("接收到阀门心跳数据:");
|
LOG_I("接收到阀门心跳数据:");
|
||||||
|
@ -365,25 +357,32 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len)
|
||||||
static void BSP_Bt_Parse_Data(void)
|
static void BSP_Bt_Parse_Data(void)
|
||||||
{
|
{
|
||||||
rt_size_t len = lwrb_get_full(&bt_lwrb_rx);
|
rt_size_t len = lwrb_get_full(&bt_lwrb_rx);
|
||||||
char *rx_ptr = rt_calloc(1, len + 1);
|
// char *rx_ptr = rt_malloc(len + 1);
|
||||||
BSP_Bt_Recv_Data(rx_ptr, len);
|
rt_uint8_t bt_rx_buf[256] = {0};
|
||||||
|
|
||||||
|
BSP_Bt_Recv_Data(bt_rx_buf, len);
|
||||||
// 发送过来的数据格式为:帧头 + 数据长度 + 事件类型 + 数据 + 校验码 + 帧尾
|
// 发送过来的数据格式为:帧头 + 数据长度 + 事件类型 + 数据 + 校验码 + 帧尾
|
||||||
BSP_Bt_Process(rx_ptr, len);
|
BSP_Bt_Process(bt_rx_buf, len);
|
||||||
rt_free(rx_ptr);
|
// rt_free(rx_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Bt_Thread_Entry(void *parameter)
|
static void Bt_Thread_Entry(void *parameter)
|
||||||
{
|
{
|
||||||
// 初始化阀门信息
|
// 初始化阀门信息
|
||||||
valve[0].valve_id = 1;
|
// valve[0].valve_id = 1;
|
||||||
valve[0].valve_mac[0] = 0XA2;
|
// valve[0].valve_mac[0] = 0X93;
|
||||||
valve[0].valve_mac[1] = 0xB4;
|
// valve[0].valve_mac[1] = 0xB4;
|
||||||
valve[0].valve_mac[2] = 0x8F;
|
// valve[0].valve_mac[2] = 0x8F;
|
||||||
valve[0].valve_mac[3] = 0x10;
|
// valve[0].valve_mac[3] = 0x10;
|
||||||
valve[0].valve_mac[4] = 0x53;
|
// valve[0].valve_mac[4] = 0x53;
|
||||||
valve[0].valve_mac[5] = 0x5C;
|
// valve[0].valve_mac[5] = 0x5C;
|
||||||
Flash_Set_Mac_Addr(valve[0].valve_mac, 0);
|
//
|
||||||
Flash_Set_Valve_Num(1);
|
Flash_Set_Mac_Addr(valve[0].valve_mac, 0);
|
||||||
|
Flash_Set_Valve_Num(1);
|
||||||
|
|
||||||
|
lwrb_init(&bt_lwrb_rx, bt_rx_buffer, sizeof(bt_rx_buffer));
|
||||||
|
lwrb_reset(&bt_lwrb_rx);
|
||||||
|
|
||||||
LOG_D("Bt_Thread_Entry");
|
LOG_D("Bt_Thread_Entry");
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
@ -406,8 +405,11 @@ int BSP_Bt_Init(void)
|
||||||
{
|
{
|
||||||
rt_err_t ret = RT_EOK;
|
rt_err_t ret = RT_EOK;
|
||||||
|
|
||||||
lwrb_init(&bt_lwrb_rx, bt_rx_buffer, sizeof(bt_rx_buffer));
|
rt_sem_init(&bt_rx_sem, "bt_rx_sem", 0, RT_IPC_FLAG_PRIO); /* 接收来自蓝牙主机的信号量 */
|
||||||
lwrb_reset(&bt_lwrb_rx);
|
rt_sem_init(&bt_ctr_sem, "bt_ctr_sem", 0, RT_IPC_FLAG_PRIO);
|
||||||
|
rt_sem_init(&bt_reg_sem, "bt_reg_sem", 0, RT_IPC_FLAG_PRIO);
|
||||||
|
rt_sem_init(&bt_rem_sem, "bt_rem_sem", 0, RT_IPC_FLAG_PRIO);
|
||||||
|
rt_sem_init(&bt_rep_sem, "bt_rep_sem", 0, RT_IPC_FLAG_PRIO);
|
||||||
|
|
||||||
/* 查找系统中的串口设备 */
|
/* 查找系统中的串口设备 */
|
||||||
rt_bt_device = rt_device_find(BT_UART);
|
rt_bt_device = rt_device_find(BT_UART);
|
||||||
|
@ -422,11 +424,6 @@ int BSP_Bt_Init(void)
|
||||||
LOG_E("rt_device_open failed!\n");
|
LOG_E("rt_device_open failed!\n");
|
||||||
return RT_ERROR;
|
return RT_ERROR;
|
||||||
}
|
}
|
||||||
rt_sem_init(&bt_rx_sem, "bt_rx_sem", 0, RT_IPC_FLAG_PRIO); /* 接收来自蓝牙主机的信号量 */
|
|
||||||
rt_sem_init(&bt_ctr_sem, "bt_ctr_sem", 0, RT_IPC_FLAG_PRIO);
|
|
||||||
rt_sem_init(&bt_reg_sem, "bt_reg_sem", 0, RT_IPC_FLAG_PRIO);
|
|
||||||
rt_sem_init(&bt_rem_sem, "bt_rem_sem", 0, RT_IPC_FLAG_PRIO);
|
|
||||||
rt_sem_init(&bt_rep_sem, "bt_rep_sem", 0, RT_IPC_FLAG_PRIO);
|
|
||||||
/* 设置接收回调函数 */
|
/* 设置接收回调函数 */
|
||||||
if (rt_device_set_rx_indicate(rt_bt_device, Bt_Rcv_Cb) != RT_EOK)
|
if (rt_device_set_rx_indicate(rt_bt_device, Bt_Rcv_Cb) != RT_EOK)
|
||||||
{
|
{
|
||||||
|
@ -447,7 +444,7 @@ int BSP_Bt_Init(void)
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
INIT_DEVICE_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)
|
||||||
|
|
|
@ -824,7 +824,7 @@ size_t Flash_Get_SysCfg(TeFlashCfgInfoId id)
|
||||||
rt_memcpy(&buf, (rt_uint8_t *)hr_sys_cfg_info_addr[id], hr_sys_cfg_info_len[id]);
|
rt_memcpy(&buf, (rt_uint8_t *)hr_sys_cfg_info_addr[id], hr_sys_cfg_info_len[id]);
|
||||||
value = buf[0] | (buf[1] << 8);
|
value = buf[0] | (buf[1] << 8);
|
||||||
|
|
||||||
LOG_D("buf[0]= %u, buf[1]: %u", buf[0], buf[1]);
|
// LOG_D("buf[0]= %u, buf[1]: %u", buf[0], buf[1]);
|
||||||
}
|
}
|
||||||
LOG_D("value: %u", value);
|
LOG_D("value: %u", value);
|
||||||
return value;
|
return value;
|
||||||
|
@ -947,7 +947,7 @@ int BSP_Flash_Init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#ifdef RT_USING_COMPONENTS_INIT
|
#ifdef RT_USING_COMPONENTS_INIT
|
||||||
INIT_BOARD_EXPORT(BSP_Flash_Init);
|
INIT_PREV_EXPORT(BSP_Flash_Init);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author: mbw
|
* @Author: mbw
|
||||||
* @Date: 2024-11-30 15:46:21
|
* @Date: 2024-11-30 15:46:21
|
||||||
* @LastEditors: mbw && 1600520629@qq.com
|
* @LastEditors: mbw && 1600520629@qq.com
|
||||||
* @LastEditTime: 2024-12-16 19:40:43
|
* @LastEditTime: 2024-12-17 15:12:17
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
|
@ -329,7 +329,7 @@ int BSP_Ml307_Update(struct Ml307_Ops *ops, rt_uint8_t device_type, rt_uint8_t e
|
||||||
ops->body->hw = (rt_uint8_t)Flash_Get_SysCfg(kHwVerId);
|
ops->body->hw = (rt_uint8_t)Flash_Get_SysCfg(kHwVerId);
|
||||||
ops->body->sw = (rt_uint8_t)Flash_Get_SysCfg(kSwVerId);
|
ops->body->sw = (rt_uint8_t)Flash_Get_SysCfg(kSwVerId);
|
||||||
rt_memcpy(ops->body->imei, &ml307, sizeof(ml307_sys_info)); // 直接赋值结构体数据
|
rt_memcpy(ops->body->imei, &ml307, sizeof(ml307_sys_info)); // 直接赋值结构体数据
|
||||||
ops->body->gas_voltage = Get_Gas_VoltageInt1000x();
|
ops->body->gas_voltage = Get_Gas_VoltageAdcInt1000x();
|
||||||
ops->body->product_work_temperature = 0x32;
|
ops->body->product_work_temperature = 0x32;
|
||||||
ops->body->work_duration = work_duration;
|
ops->body->work_duration = work_duration;
|
||||||
ops->body->device_status = device_state_flag;
|
ops->body->device_status = device_state_flag;
|
||||||
|
@ -1196,6 +1196,7 @@ void Handle_Sever_Addr_Set(struct Ml307_Ops *ops)
|
||||||
/*新增阀门设备*/
|
/*新增阀门设备*/
|
||||||
rt_err_t Handle_Valve_Add(struct Ml307_Ops *ops)
|
rt_err_t Handle_Valve_Add(struct Ml307_Ops *ops)
|
||||||
{
|
{
|
||||||
|
LOG_D("服务器下发注册阀门指令\n");
|
||||||
rt_uint8_t data[7] = {0};
|
rt_uint8_t data[7] = {0};
|
||||||
char imei[16] = {0};
|
char imei[16] = {0};
|
||||||
char temp[32] = "0";
|
char temp[32] = "0";
|
||||||
|
@ -1267,10 +1268,11 @@ rt_err_t Handle_Valve_Replace(struct Ml307_Ops *ops)
|
||||||
rt_uint8_t mac_addr[FLASH_VALVE_MAC_ADDR_LEN] = {0};
|
rt_uint8_t mac_addr[FLASH_VALVE_MAC_ADDR_LEN] = {0};
|
||||||
char imei[16] = {0};
|
char imei[16] = {0};
|
||||||
char temp[32] = "0";
|
char temp[32] = "0";
|
||||||
|
LOG_I("服务器下发更换阀门设备");
|
||||||
Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
Get_Iot_Imei(imei, FLASH_NB_IMEI_LEN);
|
||||||
String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
String2Hex(temp, imei); // 将字符串转为十六进制字符串
|
||||||
rt_memcpy(data, (ops->recv->recv_data.res_data + 3), (2 * FLASH_VALVE_MAC_ADDR_LEN + 1));
|
rt_memcpy(data, (ops->recv->recv_data.res_data + 2), (2 * FLASH_VALVE_MAC_ADDR_LEN + 1));
|
||||||
|
LOG_HEX("data", 16, data, sizeof(data));
|
||||||
/*设备编号(1byte)+ 新MAC地址(6)+ 旧阀门MAC地址(6) + 补零字节= 15byte*/
|
/*设备编号(1byte)+ 新MAC地址(6)+ 旧阀门MAC地址(6) + 补零字节= 15byte*/
|
||||||
if (Flash_Get_Mac_Addr(mac_addr, data[0] - 1) == RT_EOK)
|
if (Flash_Get_Mac_Addr(mac_addr, data[0] - 1) == RT_EOK)
|
||||||
{
|
{
|
||||||
|
@ -1278,7 +1280,7 @@ rt_err_t Handle_Valve_Replace(struct Ml307_Ops *ops)
|
||||||
{
|
{
|
||||||
if (mac_addr[i] != data[i + 7])
|
if (mac_addr[i] != data[i + 7])
|
||||||
{
|
{
|
||||||
LOG_E("旧阀门MAC地址错误\n");
|
LOG_E("旧阀门地址错误\n");
|
||||||
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_OTHER_ERROR);
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_OTHER_ERROR);
|
||||||
|
|
||||||
return RT_ERROR;
|
return RT_ERROR;
|
||||||
|
@ -1288,7 +1290,7 @@ rt_err_t Handle_Valve_Replace(struct Ml307_Ops *ops)
|
||||||
data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11], data[12]);
|
data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11], data[12]);
|
||||||
if (i == FLASH_VALVE_MAC_ADDR_LEN)
|
if (i == FLASH_VALVE_MAC_ADDR_LEN)
|
||||||
{
|
{
|
||||||
if (Bt_Valve_Handler(kValveCmdRep, data[0] - 1, &data[2]) != RT_EOK)
|
if (Bt_Valve_Handler(kValveCmdRep, data[0] - 1, &data[1]) != RT_EOK)
|
||||||
{
|
{
|
||||||
LOG_E("更换阀门设备失败\n");
|
LOG_E("更换阀门设备失败\n");
|
||||||
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_ACTION_FAILURE);
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_ACTION_FAILURE);
|
||||||
|
@ -1302,7 +1304,7 @@ rt_err_t Handle_Valve_Replace(struct Ml307_Ops *ops)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (Flash_Set_Mac_Addr(&data[2], data[0]) == RESET)
|
if (Flash_Set_Mac_Addr(&data[1], data[0] - 1) == RESET)
|
||||||
{
|
{
|
||||||
LOG_E("更换阀门设备失败\n");
|
LOG_E("更换阀门设备失败\n");
|
||||||
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_ACTION_FAILURE);
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_ACTION_FAILURE);
|
||||||
|
@ -1313,7 +1315,20 @@ rt_err_t Handle_Valve_Replace(struct Ml307_Ops *ops)
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_E("旧阀门MAC地址错误\n");
|
||||||
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_OTHER_ERROR);
|
||||||
|
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_E("该阀门设备错误\n");
|
||||||
|
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REPLACE, temp, RESPONSE_CODE_PARSE_FAIL);
|
||||||
|
}
|
||||||
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*移除阀门设备*/
|
/*移除阀门设备*/
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author : stark1898y 1658608470@qq.com
|
* @Author : stark1898y 1658608470@qq.com
|
||||||
* @Date : 2024-06-18 15:48:01
|
* @Date : 2024-06-18 15:48:01
|
||||||
* @LastEditors: mbw && 1600520629@qq.com
|
* @LastEditors: mbw && 1600520629@qq.com
|
||||||
* @LastEditTime: 2024-12-11 09:00:40
|
* @LastEditTime: 2024-12-17 11:36:52
|
||||||
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_mq.c
|
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_mq.c
|
||||||
* @Description :
|
* @Description :
|
||||||
*
|
*
|
||||||
|
@ -41,10 +41,17 @@ TsSensor_t Sensor_device;
|
||||||
uint16_t Get_Gas_VoltageInt1000x(void)
|
uint16_t Get_Gas_VoltageInt1000x(void)
|
||||||
{
|
{
|
||||||
uint16_t voltage = (Get_ADC_Average(kGasAdc) * 3.3 / 4096) * MQ_VOLTAGE_RATIO * 1000;
|
uint16_t voltage = (Get_ADC_Average(kGasAdc) * 3.3 / 4096) * MQ_VOLTAGE_RATIO * 1000;
|
||||||
// LOG_D("Get_Gas_VoltageInt1000x = %04d", voltage);
|
LOG_D("Get_Gas_VoltageInt1000x = %04d", voltage);
|
||||||
return voltage;
|
return voltage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t Get_Gas_VoltageAdcInt1000x(void)
|
||||||
|
{
|
||||||
|
rt_uint16_t voltage_adc = (Get_ADC_Average(kGasAdc) * 3.3 / 4096) * 1000;
|
||||||
|
LOG_D("Get_Gas_VoltageAdcInt1000x = %04d", voltage_adc);
|
||||||
|
return voltage_adc;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef TEST_ENABLE
|
#ifdef TEST_ENABLE
|
||||||
static void TEST_Get_Gas_VoltageInt1000x(void)
|
static void TEST_Get_Gas_VoltageInt1000x(void)
|
||||||
{
|
{
|
||||||
|
@ -103,9 +110,9 @@ static uint8_t Sensor_CheckData(void)
|
||||||
static rt_uint8_t index = 0;
|
static rt_uint8_t index = 0;
|
||||||
static rt_uint8_t alarm_status_buffer[SENSOR_SAMPLING_TIMS] = {0};
|
static rt_uint8_t alarm_status_buffer[SENSOR_SAMPLING_TIMS] = {0};
|
||||||
static rt_uint8_t fault_buf[SENSOR_SAMPLING_TIMS] = {0};
|
static rt_uint8_t fault_buf[SENSOR_SAMPLING_TIMS] = {0};
|
||||||
rt_uint16_t voltage = Get_Gas_VoltageInt1000x();
|
rt_uint16_t voltage = Get_Gas_VoltageAdcInt1000x();
|
||||||
|
|
||||||
alarm_status_buffer[index] = (voltage < Sensor_device.alarm_value) ? kSensorNormal : kSensorAlarm;
|
alarm_status_buffer[index] = ((voltage > Sensor_device.alarm_value) && (voltage < MQ_VOLTAGE_HIGH_LIMIT)) ? kSensorAlarm : kSensorNormal;
|
||||||
fault_buf[index] = ((voltage < MQ_VOLTAGE_LOW_LIMIT) || (voltage > MQ_VOLTAGE_HIGH_LIMIT)) ? kSensorFault : kSensorNormal;
|
fault_buf[index] = ((voltage < MQ_VOLTAGE_LOW_LIMIT) || (voltage > MQ_VOLTAGE_HIGH_LIMIT)) ? kSensorFault : kSensorNormal;
|
||||||
index++;
|
index++;
|
||||||
if (index >= SENSOR_SAMPLING_TIMS)
|
if (index >= SENSOR_SAMPLING_TIMS)
|
||||||
|
|
Loading…
Reference in New Issue