按用户 2026-09-10 四条指示: 1) 0x8F 下行的"本地处理"明确为 CH32V208GBU6 私有指令 —— 只作用在自身读写配置上, 一般不转发。实现: 不再留空壳计数, 直接复用 BLE 侧同一个分发器 manage_dbn_ble_default() (dbn_ble_srv.c:729)。两侧帧布局完全一致 (pkg[1]=Addr, pkg[2]=LEN, pkg[3]=CMD, pkg[4..]=Value), 零适配。 响应仍走 g_buf_ble_response -> BLE 通知; 不回 4G —— Air780 侧 parser 只认 0x7F, 回 0x8F 也没人接。 增加 OTA 门控: g_flag_counter_ota.flag != 0 时拒绝私有指令 —— 私有指令会写自身配置(碰 flash), 与 OTA 刷写并发是自找麻烦。 魔数宏改用 dbn_ble_srv.h 的 MAGIC_BYTE_DBN_DEFAULT, 不再硬编码 0x8F。 2) 0x7D 帧: 删除/不理会。V1.11 曾提的 DBN<->Air780 握手/配置同步构想作废, 代码里本就没实现, 正式协议也从未收录。devlog 待办项移除, 记入"已定案"。 3) net_srv.c:125 裸 printf() -> PRINT。该文件本已用 PRINT 53 处, 无需补 include。 DEBUG=0 时随 PRINT 一起消失, 不再出现"往未初始化的 USART1 写字节"。 4) devlog.md 行尾统一 CRLF (修复 132 个孤立 LF: 顶部 V1.13 条目原为 LF)。 验证 (host 单测, 代码从 usart_biz.c 原样抽取, gcc -Wall -Wextra -Werror 零警告): 15 组用例全部通过, 其中新增: - 0x8F -> manage_dbn_ble_default 被调用 1 次, 传入 len==全帧长, 内容逐字节一致, 未转发 - OTA 期间 0x8F -> 处理器未被调用, 但仍计数 (可观测) 原有 13 组 (魔数分流/最大帧/坏帧回找魔数/截断帧不丢帧/LEN 非法/0x9F 忽略...) 保持通过。 待板级验证: 需 MounRiver 工具链编译 + 实机 (本机无 riscv 工具链)。
170 lines
5.0 KiB
C
170 lines
5.0 KiB
C
/*
|
|
* cmcng.h
|
|
*
|
|
* Created on: Aug 27, 2024
|
|
* Author: Thinkpad
|
|
*/
|
|
|
|
#ifndef INCLUDE_CMCNG_H_
|
|
#define INCLUDE_CMCNG_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
#define PRODUCT_MODEL "DLD960GA"
|
|
#define FIRMWARE_VER "1.02.05"
|
|
#define HARDWARE_VER "1.0"
|
|
#define FIRMWARE_VER_MAIN 1
|
|
#define FIRMWARE_VER_SUB 2
|
|
#define FIRMWARE_VER_SUBSUB 5
|
|
#define HARDWARE_VER_MAIN 1
|
|
#define HARDWARE_VER_SUB 1
|
|
|
|
|
|
#define BUFF_STACK_SIZE 64
|
|
|
|
#define MAX_UART_TXRX_LEN 32
|
|
|
|
#define MAX_TOUCHUAN_DISABLE_TIME 15
|
|
#define BT_DISABLE_IDLE_TIMEOUT 0 //10 // 蓝牙空闲超时 关闭时间,默认10 min
|
|
|
|
|
|
typedef enum
|
|
{
|
|
DDType_DNT900 = 1, //1 区位有线 DNT900
|
|
DDType_WireDUS, //2超声波车位有线 DG
|
|
DDType_4G_1,
|
|
DDType_WireDus_Wb, //4 超声波车位有线 万泊
|
|
DDType_LoraAreaMain, //5 Lora 区位主机
|
|
DDType_LoraAreaSub, //6 Lora 区位从机
|
|
DDType_LoraLotMain, //7 Lora 车位主机
|
|
DDType_LoraLotSub, //8 Lora 车位从机
|
|
DDType_LoraBroadcast, //9 Lora 广播模式
|
|
DDType_LoraRelay, //10 Lora 中继, 使用 DLR101
|
|
DDType_Relay, //11 中继模式, 通过RS485-2 收发
|
|
DDType_4G_IOT, //12 4G 上报传感数据,使用MQTT
|
|
DDType_Wire_Collect_IOT, //13 有线,上报传感数据,使用MQTT
|
|
DDType_Wire_Display_IOT, //14 有线显示发布,使用MQTT
|
|
DDType_Radar_Lot, //15 雷达车位
|
|
|
|
DDType_DLD950 = 20, //DLD950
|
|
DDType_DBN101 = 21,
|
|
DDType_DNT910 = 22, //DNT910,DNT920
|
|
DDType_DNT920 = 23,
|
|
DDType_DLD950V4 = 24, // DLD960
|
|
}DG_Device_Type;
|
|
|
|
typedef enum
|
|
{
|
|
KEY_ET_None = 0,
|
|
KEY_ET_BLE_ENABLE, //1
|
|
KEY_ET_REBOOT,
|
|
KEY_ET_FACTORY,
|
|
KEY_ET_NETBLE_FACTORY
|
|
} KEY_EVENT_Type;
|
|
|
|
typedef struct _SUB_CODE_ENABLE_
|
|
{
|
|
uint16_t code_set;
|
|
uint8_t net_enable;
|
|
uint8_t iot_enable;
|
|
uint8_t custom_enable;
|
|
uint8_t loop_enable; // 流量计数
|
|
uint8_t dgdus_enable;
|
|
uint8_t wbdus_enable;
|
|
uint8_t radar_enable;
|
|
uint8_t laser_enable; // lora激光雷达车位
|
|
uint8_t lora_enable; // Lora 车位
|
|
//uint8_t input_enable;
|
|
} Sub_Code_Enable;
|
|
|
|
extern Sub_Code_Enable g_sub_code_enable;
|
|
|
|
|
|
typedef struct _PKG_UART_
|
|
{
|
|
uint8_t flag;
|
|
uint16_t offset;
|
|
uint16_t len;
|
|
uint8_t pkg[BUFF_STACK_SIZE];
|
|
uint32_t tick;
|
|
}Pkg_Uart;
|
|
extern Pkg_Uart g_pkg_uart_1;
|
|
extern Pkg_Uart g_pkg_uart_2;
|
|
|
|
|
|
|
|
|
|
typedef struct _DBN_BLE_STATE_
|
|
{
|
|
uint8_t flag; // if need to report
|
|
uint8_t enable; // 使能
|
|
uint8_t send_flag;
|
|
uint8_t obj_amount;
|
|
uint8_t cmd;
|
|
uint8_t sens_type;
|
|
uint8_t dat_len ;
|
|
uint8_t dat_offset;
|
|
uint8_t pkg_amount;
|
|
uint8_t pkg_seq;
|
|
uint16_t interval;
|
|
uint32_t counter;
|
|
uint8_t timeout_min; // minute
|
|
uint32_t timeout_counter;
|
|
} DBN_BLE_State;
|
|
|
|
extern DBN_BLE_State g_dbn_ble_state_acs_enable;
|
|
|
|
typedef struct _FLAG_COUNTER_
|
|
{
|
|
uint32_t flag;
|
|
uint32_t timeout;
|
|
uint32_t tick;
|
|
} Flag_Counter;
|
|
extern Flag_Counter g_flag_counter_key;
|
|
extern Flag_Counter g_flag_counter_ota;
|
|
|
|
|
|
extern char g_flag_debug;
|
|
extern uint8_t g_dev_number[6];
|
|
extern uint8_t g_dev_password[6];
|
|
extern uint8_t g_ble_safe_flag;
|
|
extern uint32_t g_ble_safe_counter_ori;
|
|
extern uint32_t g_ble_safe_counter_dst;
|
|
// extern uint8_t MACAddr[6];
|
|
extern uint8_t gMacAddr[6];
|
|
extern char g_dev_number_str[13];
|
|
extern uint32_t g_activ_counter;
|
|
extern uint8_t g_dg_sub_dev_type;
|
|
extern uint8_t g_dg_device_type;
|
|
extern uint8_t g_max_counter_bt_min;
|
|
extern uint32_t g_max_counter_bt_timeout;
|
|
|
|
extern uint8_t g_storage_uart_num;
|
|
extern uint8_t g_storage_uart_num_2;
|
|
extern uint32_t g_storage_uart_baud;
|
|
extern uint32_t g_storage_uart_baud_2;
|
|
|
|
extern uint8_t g_flag_bt_state;
|
|
|
|
uint32_t mstick(void);
|
|
void InitPkgUart(Pkg_Uart * pkg);
|
|
|
|
void uart_init(void);
|
|
void uart_srv(void);
|
|
void UART2_SendString(uint8_t *buf, uint16_t len);
|
|
void UART1_SendString(uint8_t *buf, uint16_t len);
|
|
|
|
/* ---- 4G 通道: UART1 <-> Air780 (协议 §6.1 纯字节流透传) ---- */
|
|
void uart1_dma_init(void); /* 初始化 (DEBUG!=0 时为空实现) */
|
|
void uart1_dma_poll(void);
|
|
|
|
/* DBN(CH32V208GBU6) 私有指令分发器 (dbn_ble_srv.c) —— 0x8F 帧, 4G 下行本地指令复用同一入口 */
|
|
void manage_dbn_ble_default(uint8_t *pkg, uint8_t len); /* 主循环轮询: 消费 DMA 缓冲 -> 分流 */
|
|
extern uint32_t g_uart1_fwd_to_air; /* 上行转发帧数 (UART2->UART1) */
|
|
extern uint32_t g_uart1_fwd_to_loop; /* 下行转发帧数 (UART1->UART2, 0x7F) */
|
|
extern uint32_t g_uart1_local_cnt; /* 下行本地处理帧数 (0x8F) */
|
|
extern uint32_t g_uart1_badchk; /* 下行校验失败帧数 */
|
|
extern uint32_t g_uart1_drop; /* 下行 DMA 溢出丢弃次数 */
|
|
|
|
#endif /* INCLUDE_CMCNG_H_ */
|