This commit is contained in:
小马_666 2024-12-13 19:07:17 +08:00
parent 38e3d15677
commit 6b0ae4194e
13 changed files with 380 additions and 213 deletions

View File

@ -22,6 +22,8 @@ encoding//libraries/hal_drivers/drv_usart.h=GBK
encoding//libraries/hal_libraries/bmsis/include/core_riscv.h=GBK encoding//libraries/hal_libraries/bmsis/include/core_riscv.h=GBK
encoding//libraries/hal_libraries/bmsis/source/startup_ch32v30x.S=GBK encoding//libraries/hal_libraries/bmsis/source/startup_ch32v30x.S=GBK
encoding//libraries/hal_libraries/ch32v303_hal/include/ch32v30x_gpio.h=GBK encoding//libraries/hal_libraries/ch32v303_hal/include/ch32v30x_gpio.h=GBK
encoding//libraries/hal_libraries/ch32v303_hal/include/ch32v30x_rcc.h=GBK
encoding//libraries/hal_libraries/ch32v303_hal/source/ch32v30x_gpio.c=GBK
encoding//packages/at_device-2.1.0/at_device.c=GBK encoding//packages/at_device-2.1.0/at_device.c=GBK
encoding//packages/at_device-2.1.0/at_device.h=GBK encoding//packages/at_device-2.1.0/at_device.h=GBK
encoding//packages/rt_vsnprintf_full-master/rt_vsnprintf.c=GBK encoding//packages/rt_vsnprintf_full-master/rt_vsnprintf.c=GBK

View File

@ -15,7 +15,11 @@
//#define TEST_BSP_ADC //#define TEST_BSP_ADC
#define GAS_POWER_SWITCH_GPIO_PIN GPIO_Pin_9
#define GAS_POWER_SWITCH_GPIO_PORT GPIOC
#define GAS_POWER_OPEN GPIO_WriteBit(GAS_POWER_SWITCH_GPIO_PORT, GAS_POWER_SWITCH_GPIO_PIN, Bit_SET)
#define GAS_POWER_CLOSE GPIO_WriteBit(GAS_POWER_SWITCH_GPIO_PORT, GAS_POWER_SWITCH_GPIO_PIN, Bit_RESET)
// ADC要采集的通道个数 // ADC要采集的通道个数
#define NUM_OF_CHANNEL (2U) #define NUM_OF_CHANNEL (2U)
// ADC要采集的次数 // ADC要采集的次数

View File

@ -2,7 +2,7 @@
* @Author: mbw * @Author: mbw
* @Date: 2024-12-03 10:31:59 * @Date: 2024-12-03 10:31:59
* @LastEditors: mbw && 1600520629@qq.com * @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-12-07 17:07:51 * @LastEditTime: 2024-12-10 14:51:37
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_bt.h * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\inc\bsp_bt.h
* @Description: * @Description:
* @ * @
@ -23,11 +23,12 @@
typedef enum typedef enum
{ {
WirelessValveClose, WirelessValveClose = 0x01,
WirelessValveOpen, WirelessValveOpen,
} WireLessState; } WireLessState;
typedef enum { typedef enum
{
kValveCmdCtr = 0X01, kValveCmdCtr = 0X01,
kValveCmdReg, kValveCmdReg,
kValveCmdRem, kValveCmdRem,
@ -35,6 +36,22 @@ typedef enum {
kValveCmdMax kValveCmdMax
} ValveCmdType; } ValveCmdType;
/*事件类型: 1: 阀门控制响应
2:
3:
4:
5
*/
typedef enum
{
kValveEventCtr = 0x01,
kValveEventReg,
kValveEventRem,
kValveEventRep,
kValveEventStatus,
kValveEventMax
}ValveEventType;
typedef struct __attribute__((packed)) typedef struct __attribute__((packed))
{ {
@ -42,39 +59,17 @@ typedef struct __attribute__((packed))
uint8_t buf[]; uint8_t buf[];
} BtData_t; } BtData_t;
typedef struct __attribute__((packed)) typedef struct __attribute__((packed))
{ {
rt_uint8_t len; rt_uint8_t len;
rt_uint8_t buf[256]; rt_uint8_t buf[256];
} BTFrameData; } BTFrameData;
extern struct rt_semaphore bt_ctr_sem; //控制阀门信号量
extern struct rt_semaphore bt_reg_sem; //注册阀门信号量
extern struct rt_semaphore bt_rem_sem; //移除阀门信号量
extern struct rt_semaphore bt_rep_sem; //更换阀门信号量
int Bt_Valve_Handler(ValveCmdType type, rt_uint8_t id, rt_uint8_t *data);
#endif // BSP_BT_H__ #endif // BSP_BT_H__

View File

@ -5,7 +5,11 @@
#include "drv_gpio.h" #include "drv_gpio.h"
#ifndef BUTTON_0 #ifndef BUTTON_0
#define BUTTON_0 GET_PIN(B, 15) #define BUTTON_0 GET_PIN(B, 15)//自检按键
#endif
#ifndef BUTTON_1
#define BUTTON_1 GET_PIN(C, 4) //消音按键
#endif #endif
// 不然就是用 timer 实现按键扫描处理 // 不然就是用 timer 实现按键扫描处理

View File

@ -233,5 +233,5 @@ struct Ml307_Ops
extern struct Ml307_Ops ml307_ops; extern struct Ml307_Ops ml307_ops;
extern rt_sem_t ml307_recv_sem; extern rt_sem_t ml307_recv_sem;
extern rt_uint8_t ml307_conncet_tcp_flag; extern rt_uint8_t ml307_conncet_tcp_flag;
extern rt_sem_t ml307_life_sem;
void Ml307_Send_Event(Ml307Event event_type); void Ml307_Send_Event(Ml307Event event_type);

View File

@ -314,13 +314,16 @@ static void urc_tcp_disconnect(struct at_client *client, const char *data, rt_si
switch (state) switch (state)
{ {
case 1: case 1:
LOG_D("ml307 tcp server disconnect"); LOG_D("服务器断开连接");
rt_sem_release(ml307_life_sem);
break; break;
case 2: // 连接异常 case 2: // 连接异常
LOG_D("ml307 tcp server connect error"); LOG_D("连接异常");
rt_sem_release(ml307_life_sem);
break; break;
case 3: // PDP去激活 case 3: // PDP去激活
LOG_D("ml307 tcp server PDP deactivate"); LOG_D("ml307 tcp server PDP deactivate");
rt_sem_release(ml307_life_sem);
break; break;
default: default:
break; break;
@ -438,7 +441,7 @@ int at_device_ml307_socket_creat(struct at_device *device)
static int at_device_ml307_connect_tcp(struct at_device *device) static int at_device_ml307_connect_tcp(struct at_device *device)
{ {
rt_err_t ret = RT_EOK; rt_err_t ret = RT_ERROR;
ASSERT(device); ASSERT(device);
rt_uint8_t retry = (rt_uint8_t)Flash_Get_SysCfg(kIotRetryId); rt_uint8_t retry = (rt_uint8_t)Flash_Get_SysCfg(kIotRetryId);
at_response_t resp = at_create_resp(64, 2, 2000); at_response_t resp = at_create_resp(64, 2, 2000);
@ -488,6 +491,7 @@ static int at_device_ml307_connect_tcp(struct at_device *device)
if (ml307_conncet_tcp_flag == RT_TRUE) if (ml307_conncet_tcp_flag == RT_TRUE)
{ {
LOG_D("ml307 connect to tcp server success"); LOG_D("ml307 connect to tcp server success");
ret = RT_EOK;
break; break;
} }
} }
@ -777,7 +781,7 @@ static void ml307_check_link_status_entry(void *parameter)
} }
} }
static int ml307_netdev_check_link_status(struct netdev *netdev) int ml307_netdev_check_link_status(struct netdev *netdev)
{ {
#define ML307_LINK_THREAD_TICK 20 #define ML307_LINK_THREAD_TICK 20
#define ML307_LINK_THREAD_STACK_SIZE (1024) #define ML307_LINK_THREAD_STACK_SIZE (1024)

View File

@ -2,13 +2,15 @@
* @Author : yzy * @Author : yzy
* @Date : 2023-01-30 12:50:12 * @Date : 2023-01-30 12:50:12
* @LastEditors: mbw && 1600520629@qq.com * @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-12-03 17:42:59 * @LastEditTime: 2024-12-11 09:23:14
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_adc.c * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_adc.c
* @Description : * @Description :
* *
* Copyright (c) 2023 by yzy, All Rights Reserved. * Copyright (c) 2023 by yzy, All Rights Reserved.
*/ */
#include "bsp_adc.h" #include "bsp_adc.h"
#include "finsh.h"
#define LOG_TAG "bsp_adc" // 该模块对应的标签。不定义时默认NO_TAG #define LOG_TAG "bsp_adc" // 该模块对应的标签。不定义时默认NO_TAG
#define LOG_LVL LOG_LVL_DBG // 该模块对应的日志输出级别。不定义时,默认:调试级别 #define LOG_LVL LOG_LVL_DBG // 该模块对应的日志输出级别。不定义时,默认:调试级别
@ -42,19 +44,29 @@ static void _USED_ADC_GPIO_Init(void)
{ {
GPIO_InitTypeDef GPIO_InitStructure = {0}; GPIO_InitTypeDef GPIO_InitStructure = {0};
// 使能 GPIO 时钟 GPIOA // 使能 GPIO 时钟 GPIOC
USED_ADC_GPIO_CLK_ENABLE(); USED_ADC_GPIO_CLK_ENABLE();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GAS_POWER_SWITCH_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GAS_POWER_SWITCH_GPIO_PORT, &GPIO_InitStructure);
// 配置 IO // 配置 IO
GPIO_InitStructure.GPIO_Pin = VIN_ADC_GPIO_PIN; GPIO_InitStructure.GPIO_Pin = VIN_ADC_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(USED_ADC_GPIO_PORT, &GPIO_InitStructure); GPIO_Init(USED_ADC_GPIO_PORT, &GPIO_InitStructure);
// 配置 IO // 配置 IO
GPIO_InitStructure.GPIO_Pin = GAS_ADC_GPIO_PIN; GPIO_InitStructure.GPIO_Pin = GAS_ADC_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GAS_ADC_GPIO_PORT, &GPIO_InitStructure); GPIO_Init(GAS_ADC_GPIO_PORT, &GPIO_InitStructure);
GAS_POWER_OPEN;
} }
static void _USED_ADC_DMA_Init(void) static void _USED_ADC_DMA_Init(void)

View File

@ -1,27 +1,39 @@
/*
* @Author: mbw
* @Date: 2024-12-03 10:31:45
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-12-13 18:09:14
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_bt.c
* @Description:
*
* Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
*/
#include "bsp_bt.h" #include "bsp_bt.h"
#include "bsp_ml307.h" #include "bsp_ml307.h"
#include "bsp_flash.h" #include "bsp_flash.h"
#include "rtdef.h" #include "rtdef.h"
#include "lwrb.h" #include "lwrb.h"
#include "finsh.h"
#include "user_sys.h" #include "user_sys.h"
#define LOG_TAG "bsp_bt" #define LOG_TAG "bsp_bt"
#define LOG_LVL LOG_LVL_DBG #define LOG_LVL LOG_LVL_DBG
#include <ulog.h> #include <ulog.h>
#define BT_UART "uart5" #define BT_UART "uart5"
rt_timer_t bt_timer;
struct rt_semaphore bt_rx_sem;
static rt_device_t rt_bt_device; static rt_device_t rt_bt_device;
static struct rt_semaphore bt_rx_sem; //
struct rt_semaphore bt_ctr_sem; // 控制阀门信号量
struct rt_semaphore bt_reg_sem; // 注册阀门信号量
struct rt_semaphore bt_rem_sem; // 移除阀门信号量
struct rt_semaphore bt_rep_sem; // 更换阀门信号量
#define BT_THREAD_TIMESLICE (5) #define BT_THREAD_TIMESLICE (5)
#define BT_THREAD_PRIORITY (10) #define BT_THREAD_PRIORITY (10)
#define BT_THREAD_STACK_SIZE (2048) #define BT_THREAD_STACK_SIZE (2048)
ALIGN(RT_ALIGN_SIZE) ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t bt_thread_stack[BT_THREAD_STACK_SIZE] = {0}; 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};
@ -32,10 +44,9 @@ BTFrameData bt_frame = {0};
valve_data_t valve_t[MAX_VALVE_NUM]; valve_data_t valve_t[MAX_VALVE_NUM];
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)
{ {
return rt_device_write(rt_bt_device, 0, data, size);; return rt_device_write(rt_bt_device, 0, data, size);
} }
rt_size_t BSP_Bt_Recv_Data(uint8_t *data, size_t size) rt_size_t BSP_Bt_Recv_Data(uint8_t *data, size_t size)
@ -68,9 +79,6 @@ int BSP_BT_Init(void)
} }
INIT_PREV_EXPORT(BSP_BT_Init); 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)
{ {
rt_err_t result = RT_EOK; rt_err_t result = RT_EOK;
@ -91,17 +99,10 @@ static int bt_recv_readline(void)
rt_size_t read_len = 0; rt_size_t read_len = 0;
char ch = 0, last_ch = 0; char ch = 0, last_ch = 0;
rt_bool_t is_full = RT_FALSE; rt_bool_t is_full = RT_FALSE;
rt_err_t result = RT_EOK;
while (1) while (1)
{ {
result = bt_getchar(&ch, RT_WAITING_FOREVER); bt_getchar(&ch, RT_WAITING_FOREVER);
if (result != RT_EOK)
{
LOG_D("get sem bt_rx_sem error");
}
else
{
if (read_len < lwrb_get_free(&bt_lwrb_rx)) if (read_len < lwrb_get_free(&bt_lwrb_rx))
{ {
lwrb_write(&bt_lwrb_rx, &ch, 1); lwrb_write(&bt_lwrb_rx, &ch, 1);
@ -110,18 +111,18 @@ static int bt_recv_readline(void)
{ {
is_full = RT_TRUE; is_full = RT_TRUE;
} }
if (ch == '\n' && last_ch == '\r') if ((ch == '\n' && last_ch == '\r') || ch == 0x55)
{ {
if (is_full) if (is_full)
{ {
LOG_E("read line failed. The line data length is out of buffer size(%d)!", lwrb_get_free(&bt_lwrb_rx)); LOG_E("read line failed. The line data length is out of buffer size(%d)!", lwrb_get_free(&bt_lwrb_rx));
return -RT_EFULL; return -RT_EFULL;
} }
break; break;
} }
last_ch = ch; last_ch = ch;
} }
}
return lwrb_get_full(&bt_lwrb_rx); return lwrb_get_full(&bt_lwrb_rx);
} }
@ -147,7 +148,6 @@ rt_uint8_t BT_GenerateRawFrame(BTFrameData *pRawData, const rt_uint8_t *p_src, r
return RT_EOK; return RT_EOK;
} }
/*用于控制阀门的状态 /*用于控制阀门的状态
* id: 1-8 * id: 1-8
* mac_addr: 6 * mac_addr: 6
@ -155,6 +155,8 @@ rt_uint8_t BT_GenerateRawFrame(BTFrameData *pRawData, const rt_uint8_t *p_src, r
*/ */
int BSP_Bt_Valve_Ctr(rt_uint8_t id, rt_uint8_t *mac_addr, WireLessState status) int BSP_Bt_Valve_Ctr(rt_uint8_t id, rt_uint8_t *mac_addr, WireLessState status)
{ {
rt_uint8_t ret = 0;
BtData_t *ptr = (BtData_t *)rt_malloc(sizeof(BtData_t) + 8); BtData_t *ptr = (BtData_t *)rt_malloc(sizeof(BtData_t) + 8);
ptr->cmd = kValveCmdCtr; ptr->cmd = kValveCmdCtr;
ptr->buf[0] = id; ptr->buf[0] = id;
@ -163,25 +165,39 @@ int BSP_Bt_Valve_Ctr(rt_uint8_t id, rt_uint8_t *mac_addr, WireLessState status)
BT_GenerateRawFrame(&bt_frame, (rt_uint8_t *)ptr, 9); BT_GenerateRawFrame(&bt_frame, (rt_uint8_t *)ptr, 9);
rt_free(ptr); rt_free(ptr);
return BSP_Bt_Send_Data((rt_uint8_t *)&bt_frame.buf[0], bt_frame.len); ret = BSP_Bt_Send_Data((rt_uint8_t *)&bt_frame.buf[0], bt_frame.len);
if (ret == bt_frame.len)
{
return RT_EOK;
}
return RT_ERROR;
} }
/*注册阀门信息*/ /*注册阀门信息*/
int BSP_Bt_Register_Valve(rt_uint8_t id, rt_uint8_t *mac_addr) int BSP_Bt_Register_Valve(rt_uint8_t id, rt_uint8_t *mac_addr)
{ {
rt_uint8_t ret = 0;
BtData_t *ptr = (BtData_t *)rt_malloc(sizeof(BtData_t) + 7); BtData_t *ptr = (BtData_t *)rt_malloc(sizeof(BtData_t) + 7);
ptr->cmd = kValveCmdReg; ptr->cmd = kValveCmdReg;
ptr->buf[0] = id; ptr->buf[0] = id;
rt_memcpy(&ptr->buf[1], mac_addr, 6); rt_memcpy(&ptr->buf[1], mac_addr, 6);
BT_GenerateRawFrame(&bt_frame, (rt_uint8_t *)ptr, 8); BT_GenerateRawFrame(&bt_frame, (rt_uint8_t *)ptr, 8);
rt_free(ptr); rt_free(ptr);
ret = BSP_Bt_Send_Data((rt_uint8_t *)&bt_frame.buf[0], bt_frame.len);
if (ret == bt_frame.len)
{
return RT_EOK;
}
return BSP_Bt_Send_Data((rt_uint8_t *)&bt_frame.buf[0], bt_frame.len); return RT_ERROR;
} }
/*移除阀门信息*/ /*移除阀门信息*/
int BSP_Bt_Remove_Valve(rt_uint8_t id, rt_uint8_t *mac_addr) int BSP_Bt_Remove_Valve(rt_uint8_t id, rt_uint8_t *mac_addr)
{ {
rt_uint8_t ret = 0;
BtData_t *ptr = (BtData_t *)rt_malloc(sizeof(BtData_t) + 7); BtData_t *ptr = (BtData_t *)rt_malloc(sizeof(BtData_t) + 7);
ptr->cmd = kValveCmdRem; ptr->cmd = kValveCmdRem;
ptr->buf[0] = id; ptr->buf[0] = id;
@ -189,12 +205,20 @@ int BSP_Bt_Remove_Valve(rt_uint8_t id, rt_uint8_t *mac_addr)
BT_GenerateRawFrame(&bt_frame, (rt_uint8_t *)ptr, 8); BT_GenerateRawFrame(&bt_frame, (rt_uint8_t *)ptr, 8);
rt_free(ptr); rt_free(ptr);
return BSP_Bt_Send_Data((rt_uint8_t *)&bt_frame.buf[0], bt_frame.len); ret = BSP_Bt_Send_Data((rt_uint8_t *)&bt_frame.buf[0], bt_frame.len);
if (ret == bt_frame.len)
{
return RT_EOK;
}
return RT_ERROR;
} }
/*更换阀门信息*/ /*更换阀门信息*/
int BSP_Bt_Replace_Valve(rt_uint8_t id, rt_uint8_t *mac_addr, rt_uint8_t *new_mac_addr) int BSP_Bt_Replace_Valve(rt_uint8_t id, rt_uint8_t *mac_addr, rt_uint8_t *new_mac_addr)
{ {
rt_uint8_t ret = 0;
BtData_t *ptr = (BtData_t *)rt_malloc(sizeof(BtData_t) + 14); BtData_t *ptr = (BtData_t *)rt_malloc(sizeof(BtData_t) + 14);
ptr->cmd = kValveCmdRep; ptr->cmd = kValveCmdRep;
ptr->buf[0] = id; ptr->buf[0] = id;
@ -203,50 +227,161 @@ int BSP_Bt_Replace_Valve(rt_uint8_t id, rt_uint8_t *mac_addr, rt_uint8_t *new_ma
BT_GenerateRawFrame(&bt_frame, (rt_uint8_t *)ptr, (sizeof(BtData_t) + 14)); BT_GenerateRawFrame(&bt_frame, (rt_uint8_t *)ptr, (sizeof(BtData_t) + 14));
rt_free(ptr); rt_free(ptr);
return BSP_Bt_Send_Data((rt_uint8_t *)&bt_frame.buf[0], bt_frame.len); ret = BSP_Bt_Send_Data((rt_uint8_t *)&bt_frame.buf[0], bt_frame.len);
if (ret == bt_frame.len)
{
return RT_EOK;
} }
int Bt_Valve_Handler(ValveCmdType type) return RT_ERROR;
}
// 这个ID是真实id减一第一个阀门则为 1 - 1 = 0
/*data 数据用作阀门更换时的新MAC参数6字节*/
int Bt_Valve_Handler(ValveCmdType type, rt_uint8_t id, rt_uint8_t *data)
{ {
int ret = RT_EOK;
switch (type) switch (type)
{ {
case kValveCmdCtr: // 阀门控制 case kValveCmdCtr: // 阀门控制
BSP_Bt_Valve_Ctr(valve_t[0].valve_id, valve_t[0].valve_mac, WirelessValveClose);//关阀门 ret = BSP_Bt_Valve_Ctr(valve_t[id].valve_id, valve_t[id].valve_mac, WirelessValveClose); // 关阀门
break; break;
case kValveCmdReg: // 阀门注册 case kValveCmdReg: // 阀门注册
BSP_Bt_Register_Valve(valve_t[0].valve_id, valve_t[0].valve_mac); ret = BSP_Bt_Register_Valve(valve_t[id].valve_id, valve_t[id].valve_mac);
break; break;
case kValveCmdRem: // 阀门移除 case kValveCmdRem: // 阀门移除
BSP_Bt_Remove_Valve(valve_t[0].valve_id, valve_t[0].valve_mac); ret = BSP_Bt_Remove_Valve(valve_t[id].valve_id, valve_t[id].valve_mac);
break; break;
case kValveCmdRep: // 阀门更换 case kValveCmdRep: // 阀门更换
BSP_Bt_Replace_Valve(valve_t[0].valve_id, valve_t[0].valve_mac, valve_t[0].valve_mac); ret = BSP_Bt_Replace_Valve(valve_t[id].valve_id, valve_t[id].valve_mac, data);
if (ret == RT_EOK)
{
rt_memcpy(valve_t[id].valve_mac, data, 6);
Flash_Set_Mac_Addr(valve_t[id].valve_mac, valve_t[id].valve_id - 1);
}
break; break;
default: default:
ret = -RT_ERROR;
LOG_E("unknown valve command type"); LOG_E("unknown valve command type");
break; break;
} }
return RT_EOK;
return ret;
} }
int BSP_Bt_Process(uint8_t *data, uint16_t len)
{
int ret = 0;
uint16_t index = 0;
uint8_t data_buf[256] = {0};
// 解析接收到的数据帧先寻找AA开头然后再找AA下一个字节其代表了数据长度然后找到代表长度的值的长度的下一位其为校验码校验码后为结束码0x55
// 如果数据正确,则提取数据,不正确,则不处理
LOG_HEX("BT_RX_DATA", 16, data, len);
if (len < 4)
{ // 至少需要 4 个字节:起始码、长度、校验码、结束码
LOG_E("BT_RX_DATA_LEN_ERROR");
return 1;
}
while (index < len && data[index] != 0xAA) // 寻找起始码 0xAA
{
index++;
}
if (index >= len - 3) // 不够空间容纳长度、校验码和结束码
{
LOG_E("BT_RX_DATA_LEN_ERROR");
return 2;
}
uint16_t datalength = data[index + 1]; // 读取数据长度
if (index + 2 + datalength + 1 >= len) // 检查数据长度是否合理 数据长度 + 校验码 + 结束码
{
LOG_E("BT_RX_DATA_LEN_ERROR");
return 3; //
}
uint8_t rx_sum = data[index + 2 + datalength]; // 读取校验码
uint8_t calculated_sum = XOR_CheckSum(&data[0], datalength + 2); // 计算校验码
if (rx_sum != calculated_sum)
{
LOG_E("BT_RX_DATA_SUM_ERROR");
return 4;
}
if (data[index + 2 + datalength + 1] != 0x55) // 检查结束码
{
LOG_E("BT_RX_DATA_END_ERROR");
return 5;
}
// 当程序走到这里时,就说明接收到了正确的数据帧,开始解析响应
rt_memcpy(data_buf, &data[index + 3], datalength);
switch (data[index + 2])
{
case kValveEventCtr:
LOG_D("valve control event");
if (data[index + datalength - 3] == WirelessValveClose) // 关闭成功
{
rt_sem_release(&bt_ctr_sem);
}
break;
case kValveEventReg:
LOG_D("valve register event");
if (data[index + datalength - 3] == RT_TRUE) // 注册成功
{
rt_sem_release(&bt_reg_sem);
}
break;
case kValveEventRem:
LOG_D("valve remove event");
if (data[index + datalength - 3] == RT_TRUE) // 移除成功
{
rt_sem_release(&bt_rem_sem);
}
break;
case kValveEventRep:
LOG_D("valve replace event");
if (data[index + datalength - 3] == RT_TRUE) // 更换成功
{
rt_sem_release(&bt_rep_sem);
}
break;
case kValveEventStatus:
LOG_D("valve status event");
// TODO:添加阀门数据处理函数
break;
default:
LOG_W("unknow cmd: %02X", data[index + 2]);
break;
}
return ret;
}
static void BSP_Bt_Parse_Data(void) static void BSP_Bt_Parse_Data(void)
{ {
rt_size_t size = lwrb_get_full(&bt_lwrb_rx); LOG_D("parse data:");
char *rx_ptr = rt_calloc(1, size + 1); rt_size_t len = lwrb_get_full(&bt_lwrb_rx);
BSP_Bt_Recv_Data(rx_ptr, size); char *rx_ptr = rt_calloc(1, len + 1);
LOG_D("data: %s\r\n", rx_ptr); BSP_Bt_Recv_Data(rx_ptr, len);
// 发送过来的数据格式为:帧头 + 数据长度 + 事件类型 + 数据 + 校验码 + 帧尾
BSP_Bt_Process(rx_ptr, len);
rt_free(rx_ptr); rt_free(rx_ptr);
} }
static void Bt_Thread_Entry(void *parameter) static void Bt_Thread_Entry(void *parameter)
{ {
//初始化阀门信息
valve_t[0].valve_id = 1;
valve_t[0].valve_mac[0] = 0xb6;
valve_t[0].valve_mac[1] = 0xb4;
valve_t[0].valve_mac[2] = 0x8f;
valve_t[0].valve_mac[3] = 0x10;
valve_t[0].valve_mac[4] = 0x53;
valve_t[0].valve_mac[5] = 0x5c;
LOG_D("Bt_Thread_Entry");
while (1) while (1)
{ {
if (bt_recv_readline() > 0) if (bt_recv_readline())
{ {
BSP_Bt_Parse_Data(); BSP_Bt_Parse_Data();
} }
@ -281,16 +416,17 @@ 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_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)
{ {
LOG_E("rt_device_set_rx_indicate failed!\n"); LOG_E("rt_device_set_rx_indicate failed!\n");
return RT_ERROR; return RT_ERROR;
} }
rt_device_write(rt_bt_device, 0, "test bt_uart send\r\n", strlen("test bt_uart send\r\n"));
rt_uint8_t buf_test[3] = {0x01, 0x02, 0x03};
BSP_Bt_Send_Data(buf_test, 3);
/* 静态初始化线程 1*/ /* 静态初始化线程 1*/
ret = rt_thread_init(&bt_thread, // 该线程用于数据解析 ret = rt_thread_init(&bt_thread, // 该线程用于数据解析
"bt_thread", "bt_thread",
@ -308,25 +444,25 @@ int BSP_Bt_Init(void)
INIT_DEVICE_EXPORT(BSP_Bt_Init); INIT_DEVICE_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)
{ {
if (argc == 2) if (argc == 3)
{ {
int mode = atoi(argv[1]); int mode = atoi(argv[1]);
int id = atoi(argv[2]) - 1;
switch (mode) switch (mode)
{ {
case 1: case 1:
Bt_Valve_Handler(kValveCmdCtr); Bt_Valve_Handler(kValveCmdCtr, id, RT_NULL);
break; break;
case 2: case 2:
Bt_Valve_Handler(kValveCmdReg); Bt_Valve_Handler(kValveCmdReg, id, RT_NULL);
break; break;
case 3: case 3:
Bt_Valve_Handler(kValveCmdRem); Bt_Valve_Handler(kValveCmdRem, id, RT_NULL);
break; break;
case 4: case 4:
Bt_Valve_Handler(kValveCmdRep); Bt_Valve_Handler(kValveCmdRep, id, RT_NULL);
break; break;
default: default:
break; break;
@ -334,6 +470,4 @@ static void TEST_BT_Send_Data(int argc, char **argv)
} }
} }
MSH_CMD_EXPORT(TEST_BT_Send_Data, "TEST_BT_Send_Data"); MSH_CMD_EXPORT(TEST_BT_Send_Data, "TEST_BT_Send_Data");
#endif #endif

View File

@ -23,6 +23,7 @@ static rt_timer_t button_timer;
typedef enum typedef enum
{ {
USER_BUTTON_0 = 0, USER_BUTTON_0 = 0,
USER_BUTTON_1 ,
USER_BUTTON_MAX USER_BUTTON_MAX
} user_button_t; } user_button_t;
@ -37,9 +38,10 @@ static uint8_t _CommonBtnRead(void *arg)
{ {
case USER_BUTTON_0: case USER_BUTTON_0:
value = rt_pin_read(BUTTON_0); value = rt_pin_read(BUTTON_0);
// return rt_pin_read(BUTTON_0);
break; break;
case USER_BUTTON_1:
value = rt_pin_read(BUTTON_1);
break;
default: default:
RT_ASSERT(0); RT_ASSERT(0);
} }
@ -58,12 +60,12 @@ static void _CommonBtnEvtCb(void *arg)
{ {
static rt_uint8_t button_cnt = 0; static rt_uint8_t button_cnt = 0;
if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_DOUBLE_CLICK) if (flex_button_event_read(&user_button[USER_BUTTON_1]) == FLEX_BTN_PRESS_CLICK)
{ {
Send_Laser_Alarm_Event(KMuteEvent); Send_Laser_Alarm_Event(kSelfCheckEvent);
} }
#if 1 #if 1
if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_CLICK) if ((flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_DOUBLE_CLICK)|| (flex_button_event_read(&user_button[USER_BUTTON_1]) == FLEX_BTN_PRESS_DOUBLE_CLICK))
{ {
button_cnt++; button_cnt++;
if (button_cnt == 1) if (button_cnt == 1)
@ -84,10 +86,9 @@ static void _CommonBtnEvtCb(void *arg)
} }
} }
#endif #endif
else if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_CLICK)
else if (flex_button_event_read(&user_button[USER_BUTTON_0]) == FLEX_BTN_PRESS_LONG_HOLD)
{ {
Send_Laser_Alarm_Event(kSelfCheckEvent); Send_Laser_Alarm_Event(KMuteEvent);
} }
} }
@ -112,6 +113,7 @@ int BSP_BUTTON_Init(void)
rt_memset(&user_button[0], 0x0, sizeof(user_button)); rt_memset(&user_button[0], 0x0, sizeof(user_button));
rt_pin_mode(BUTTON_0, PIN_MODE_INPUT_PULLUP); /* set KEY pin mode to input */ rt_pin_mode(BUTTON_0, PIN_MODE_INPUT_PULLUP); /* set KEY pin mode to input */
rt_pin_mode(BUTTON_1, PIN_MODE_INPUT_PULLUP); /* set KEY pin mode to input */
for (uint8_t i = 0; i < USER_BUTTON_MAX; i++) for (uint8_t i = 0; i < USER_BUTTON_MAX; i++)
{ {

View File

@ -12,6 +12,17 @@
#include <stdlib.h> #include <stdlib.h>
//在此修改默认的服务器地址
struct flash_sever_info sever_info =
{
.server_url = "8.130.122.162",
.server_port = "7153",
// .server_port = "36078",
// .server_url = "8.135.10.183",
};
extern int Convert_To_Hex(const struct flash_sever_info *sever_info, uint8_t *hex_array); extern int Convert_To_Hex(const struct flash_sever_info *sever_info, uint8_t *hex_array);
#define GETATTR(info, id) ((id) == kHwVerId ? (&(info)->hw_ver) \ #define GETATTR(info, id) ((id) == kHwVerId ? (&(info)->hw_ver) \
: (id) == kSwVerId ? (&(info)->sw_ver) \ : (id) == kSwVerId ? (&(info)->sw_ver) \
@ -89,13 +100,6 @@ rt_uint8_t sys_temp_alarm_threshold = 0x32;
rt_uint8_t sys_emagnetic_switch = 0x04; // 具备阀门功能 rt_uint8_t sys_emagnetic_switch = 0x04; // 具备阀门功能
rt_uint8_t sys_relay_switch = 0x04; // 具备继电器功能 rt_uint8_t sys_relay_switch = 0x04; // 具备继电器功能
struct flash_sever_info sever_info =
{
.server_url = "47.94.169.135",
.server_port = "7150",
// .server_port = "36078",
// .server_url = "8.135.10.183",
};
static void BSP_Flash_UnLock(void) static void BSP_Flash_UnLock(void)

View File

@ -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-06 16:48:54 * @LastEditTime: 2024-12-11 13:04:23
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_ml307.c
* @Description: * @Description:
* *
@ -52,9 +52,8 @@ rt_sem_t ml307_life_sem;
static rt_timer_t ml307_timer; // 上报心跳 static rt_timer_t ml307_timer; // 上报心跳
static rt_timer_t ml307_upload_timer; // 更新本地时间定时器 static rt_timer_t ml307_upload_timer; // 更新本地时间定时器
static rt_timer_t ml307_power_error_timer; // 上电失败情况下启动定时器 static rt_timer_t ml307_power_error_timer; // 上电失败情况下启动定时器
/*生命周期窗口定时器用于管理tcp连接的断开*/
static rt_timer_t ml307_life_timer;
static rt_timer_t ml307_heartbeat_check_timer; // 用于检测定时器是否工作 static rt_timer_t ml307_heartbeat_check_timer; // 用于检测定时器是否工作
rt_uint8_t ml307_conncet_tcp_flag; rt_uint8_t ml307_conncet_tcp_flag;
Ml307EventIndex ml307_event_index; Ml307EventIndex ml307_event_index;
@ -173,13 +172,6 @@ static void Ml307_Ht_Timer_Cb(void *parameter)
Ml307_Send_Event(kMl307HeartbeatEvent); Ml307_Send_Event(kMl307HeartbeatEvent);
} }
// 定时器回调函数,当1分钟内没有数据交互时关闭tcp连接
static void Ml307_Life_Timer_Cb(void *parameter)
{
// rt_sem_release(ml307_life_sem);
}
// 定时器回调函数,当1分钟内没有数据交互时关闭tcp连接
static void Ml307_Error_Timer_Cb(void *parameter) static void Ml307_Error_Timer_Cb(void *parameter)
{ {
if (power_on_send_flag) // 上电成功时,停止定时器 if (power_on_send_flag) // 上电成功时,停止定时器
@ -211,15 +203,6 @@ static void Ml307_Heartbeat_check_Timer_Cb(void *parameter)
// } // }
} }
// 重置定时器
void Reset_Ml307_Life_Timer(void)
{
if (ml307_life_timer != RT_NULL)
{
rt_timer_start(ml307_life_timer);
}
}
int _Pack_Send(struct Ml307_Ops *ops, char *buf) int _Pack_Send(struct Ml307_Ops *ops, char *buf)
{ {
char ml307_send_buf[1024] = {0}; // 发送缓冲区,用于存储最终发送的数据 char ml307_send_buf[1024] = {0}; // 发送缓冲区,用于存储最终发送的数据
@ -1229,7 +1212,6 @@ rt_err_t Handle_Valve_Add(struct Ml307_Ops *ops)
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_ACTION_FAILURE); ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR; return RT_ERROR;
} }
rt_memcpy(data, (ops->recv->recv_data.res_data + 8), FLASH_VALVE_MAC_ADDR_LEN + 1); rt_memcpy(data, (ops->recv->recv_data.res_data + 8), FLASH_VALVE_MAC_ADDR_LEN + 1);
LOG_D("data[0] = %x data[1] = %x data[2] = %x data[3] = %x data[4] = %x, data[5] = %x data[6] = %x", data[0], data[1], data[2], data[3], data[4], data[5], data[6]); LOG_D("data[0] = %x data[1] = %x data[2] = %x data[3] = %x data[4] = %x, data[5] = %x data[6] = %x", data[0], data[1], data[2], data[3], data[4], data[5], data[6]);
@ -1239,17 +1221,35 @@ rt_err_t Handle_Valve_Add(struct Ml307_Ops *ops)
{ {
if (mac_addr[0] == 0) // 无MAC地址数据写入MAC地址数据 if (mac_addr[0] == 0) // 无MAC地址数据写入MAC地址数据
{ {
if (Flash_Set_Mac_Addr(&data[1], (data[0] - 1)) == RESET) valve_t[data[0] - 1].valve_id = data[0];
rt_memcpy(valve_t[data[0] - 1].valve_mac, &data[1], FLASH_VALVE_MAC_ADDR_LEN);//将信息更新
if (Bt_Valve_Handler(kValveCmdReg, data[0] - 1, RT_NULL) != RT_EOK)
{ {
LOG_E("新增阀门设备失败\n"); LOG_E("新增阀门设备失败\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_ACTION_FAILURE); ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR; return RT_ERROR;
} }
//TODO:此处需要等待蓝牙响应数据
if(rt_sem_take(&bt_reg_sem, 10000) != RT_EOK) //等待十秒获取信号量
{
LOG_E("获取信号量失败\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR;
}
else
{
if (Flash_Set_Mac_Addr(&data[1], (data[0] - 1)) == RESET)
{
LOG_E("阀门设备写入FLash失败\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR;
}
LOG_D("新增阀门设备成功\n"); LOG_D("新增阀门设备成功\n");
Flash_Set_Valve_Num(cnt + 1); Flash_Set_Valve_Num(cnt + 1);
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_SUCCESS); ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_ADD, temp, RESPONSE_CODE_SUCCESS);
return RT_EOK; return RT_EOK;
} }
}
else // 不为空,不添加 else // 不为空,不添加
{ {
LOG_E("该阀门设备已存在,请选择更换阀门编号后重试\n"); LOG_E("该阀门设备已存在,请选择更换阀门编号后重试\n");
@ -1257,6 +1257,8 @@ rt_err_t Handle_Valve_Add(struct Ml307_Ops *ops)
return RT_EOK; return RT_EOK;
} }
} }
return RT_EOK;
} }
/*更换阀门设备*/ /*更换阀门设备*/
@ -1288,6 +1290,12 @@ 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)
{
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);
return RT_ERROR;
}
if (Flash_Set_Mac_Addr(&data[2], data[0]) == RESET) if (Flash_Set_Mac_Addr(&data[2], data[0]) == RESET)
{ {
LOG_E("更换阀门设备失败\n"); LOG_E("更换阀门设备失败\n");
@ -1332,6 +1340,13 @@ rt_err_t Handle_Remove_Valve(struct Ml307_Ops *ops)
rt_memcpy(data, (ops->recv->recv_data.res_data + 8), FLASH_VALVE_MAC_ADDR_LEN + 1); rt_memcpy(data, (ops->recv->recv_data.res_data + 8), FLASH_VALVE_MAC_ADDR_LEN + 1);
LOG_D("data[0] = %x data[1] = %x data[2] = %x data[3] = %x data[4] = %x, data[5] = %x", data[0], data[1], data[2], data[3], data[4], data[5], data[6]); LOG_D("data[0] = %x data[1] = %x data[2] = %x data[3] = %x data[4] = %x, data[5] = %x", data[0], data[1], data[2], data[3], data[4], data[5], data[6]);
rt_memset(&data[1], 0, sizeof(data) - 1); rt_memset(&data[1], 0, sizeof(data) - 1);
if (Bt_Valve_Handler(kValveCmdRem, data[0] - 1, RT_NULL) != RT_EOK)
{
LOG_E("移除阀门设备失败\n");
ops->Resp(ops, DATA_SERIAL_NUM, CMD_TYPE_INSTRUCTION_REPLY, DEVICE_TYPE_ML307, INSTRUCTION_DOWN_VALVE_REMOVE, temp, RESPONSE_CODE_ACTION_FAILURE);
return RT_ERROR;
}
if (Flash_Set_Mac_Addr(&data[1], data[0] - 1) == RESET) if (Flash_Set_Mac_Addr(&data[1], data[0] - 1) == RESET)
{ {
LOG_E("移除阀门设备失败\n"); LOG_E("移除阀门设备失败\n");
@ -1518,7 +1533,6 @@ static void Ml307_Send_Thread_Entry(void *param)
if (device->class->device_ops->control(device, AT_DEVICE_CTRL_NET_CONN, RT_NULL) == RT_EOK) // 打开连接 if (device->class->device_ops->control(device, AT_DEVICE_CTRL_NET_CONN, RT_NULL) == RT_EOK) // 打开连接
{ {
LOG_I("ml307 connect tcp success\n"); LOG_I("ml307 connect tcp success\n");
// rt_timer_start(ml307_life_timer);
} }
else else
{ {
@ -1755,16 +1769,6 @@ int BSP_Ml307_Thread_Init(void)
rt_kprintf("创建定时器失败\n"); rt_kprintf("创建定时器失败\n");
return -1; return -1;
} }
// ml307_life_timer = rt_timer_create("ml307_life",
// Ml307_Life_Timer_Cb,
// RT_NULL,
// 30 * RT_TICK_PER_SECOND,
// RT_TIMER_FLAG_ONE_SHOT);
// if (ml307_life_timer == RT_NULL)
// {
// rt_kprintf("创建定时器失败\n");
// return -1;
// }
ml307_power_error_timer = rt_timer_create("ml307_error_timer", ml307_power_error_timer = rt_timer_create("ml307_error_timer",
Ml307_Error_Timer_Cb, Ml307_Error_Timer_Cb,
RT_NULL, RT_NULL,
@ -1814,7 +1818,7 @@ int BSP_Ml307_Thread_Init(void)
sizeof(ml307_life_thread_stack), sizeof(ml307_life_thread_stack),
ML307_LIFE_THREAD_PRIORITY, ML307_LIFE_THREAD_PRIORITY,
ML307_LIFE_THREAD_TICKS); ML307_LIFE_THREAD_TICKS);
// rt_thread_startup(&ml307_life_thread); rt_thread_startup(&ml307_life_thread);
return ret; return ret;
} }

View File

@ -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-06 16:09:12 * @LastEditTime: 2024-12-11 09:00:40
* @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_mq.c * @FilePath: \ble_bjq_ch303rct6_ml307\bsp\src\bsp_mq.c
* @Description : * @Description :
* *
@ -23,6 +23,8 @@
#include "bsp_flash.h" #include "bsp_flash.h"
#include "bsp_rtc.h" #include "bsp_rtc.h"
#include "user_sys.h" #include "user_sys.h"
#include "finsh.h"
#define LOG_TAG "bsp_mq" // 该模块对应的标签。不定义时默认NO_TAG #define LOG_TAG "bsp_mq" // 该模块对应的标签。不定义时默认NO_TAG

View File

@ -149,7 +149,7 @@
#define AT_SW_VERSION_NUM 0x10301 #define AT_SW_VERSION_NUM 0x10301
/* end of Network */ /* end of Network */
#define IOT_MODULE_SWITCH 1 // 开启NB物联网功能 #define IOT_MODULE_SWITCH 0 // 开启NB物联网功能
/* Utilities */ /* Utilities */
#define TEST_ENABLE //打开所有的终端测试程序 #define TEST_ENABLE //打开所有的终端测试程序