init: DLD110SV4 单线圈蓝牙车检器原始代码 (CH591R, BLE OTA 三段式)
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
* cmcng.h
|
||||
*
|
||||
* Created on: Aug 27, 2024
|
||||
* Author: Thinkpad
|
||||
*/
|
||||
|
||||
#ifndef INCLUDE_CMCNG_H_
|
||||
#define INCLUDE_CMCNG_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define PRODUCT_MODEL "DLD110S"
|
||||
#define FIRMWARE_VER "4.00"
|
||||
#define HARDWARE_VER "4.01"
|
||||
#define FIRMWARE_VER_MAIN 4
|
||||
#define FIRMWARE_VER_SUB 12
|
||||
#define HARDWARE_VER_MAIN 4
|
||||
#define HARDWARE_VER_SUB 1
|
||||
|
||||
#define FUNCTION_A 0x01 // 二次判断
|
||||
#define FUNCTION_B 0x02 // 二次判断增强条件判断
|
||||
#define FUNCTION_C 0x04 //
|
||||
#define FUNCTION_D 0x08 //
|
||||
|
||||
// 二阶变化量计算状态结构体
|
||||
typedef struct {
|
||||
int16_t delta_prev; // 上一次的一阶变化量
|
||||
int16_t delta2_flt; // 滤波后的二阶变化量
|
||||
} SecondOrderState;
|
||||
extern SecondOrderState second_order_state;
|
||||
#define SECOND_ORDER_FILTER_COEF 64 // 滤波系数(64/256=0.25)
|
||||
|
||||
// 一阶滤波管理全局状态
|
||||
typedef struct {
|
||||
uint8_t flag_not_idle;
|
||||
uint32_t counter_not_idle;
|
||||
uint8_t flag_init_value;
|
||||
uint32_t stable_init_value; // 开机稳定初始值
|
||||
uint8_t flag_5sec;
|
||||
uint16_t counter_5sec;
|
||||
uint32_t recent_5sec;
|
||||
// uint8_t flag_5min;
|
||||
// uint32_t counter_5min;
|
||||
// uint16_t recent_5min; // 最近5分钟的一阶滤波值
|
||||
// uint8_t flag_10min;
|
||||
// uint32_t counter_10min;
|
||||
// uint16_t recent_10min; // 最近10分钟的一阶滤波值
|
||||
// uint8_t flag_30min;
|
||||
// uint32_t counter_30min;
|
||||
// uint16_t recent_30min; // 最近半小时的一阶滤波值
|
||||
// uint8_t flag_60min;
|
||||
// uint32_t counter_60min;
|
||||
// uint16_t recent_60min; // 最近1小时的一阶滤波值
|
||||
uint32_t init_sum; // 初始化累加值
|
||||
uint16_t init_samples; // 初始化采样计数器
|
||||
uint8_t is_initialized; // 初始化完成标志
|
||||
uint32_t init_freq; // 初始频率
|
||||
|
||||
uint16_t cnt_sec_samples;
|
||||
uint32_t sum_sec_samples;
|
||||
uint16_t cnt_samples;
|
||||
uint32_t sum_samples;
|
||||
|
||||
uint8_t flag_flat_release;
|
||||
uint16_t cnt_flat_release;
|
||||
uint16_t max_cnt_flat_release;
|
||||
|
||||
uint32_t last_loop_Origin;
|
||||
uint8_t flag_loop_reconnect; // 线圈重连
|
||||
uint16_t cnt_loop_reconnect;
|
||||
uint8_t last_loop_vd_flag;
|
||||
|
||||
uint8_t flag_second_judge; // 进入第二轮判断;由于第一轮判定为有车状态超时了,那么进入第二轮判定,第二轮判定会默认当前无车开始
|
||||
|
||||
uint32_t second_loop_Origin;
|
||||
uint32_t second_loop_ORG_SUM; // for option use
|
||||
uint16_t second_loop_ORG_CNT;
|
||||
uint32_t second_loop_dlt_ORG;
|
||||
uint8_t second_loop_vd_flag;
|
||||
|
||||
// 二次判断增强条件
|
||||
uint32_t second_judge_enter_time; // 进入二次判断的时间戳(单位:5ms)
|
||||
uint16_t second_judge_min_time; // 二次判断最小时间限制(单位:5ms),默认10秒=2000
|
||||
uint16_t cnt_stable_to_idle; // 连续检测到恢复到空闲值的计数
|
||||
uint16_t stable_to_idle_threshold; // 恢复到空闲值的阈值次数
|
||||
|
||||
uint16_t cnt_not_idle;
|
||||
uint16_t cnt_idle;
|
||||
|
||||
uint16_t cnt_simple_release;
|
||||
uint16_t cnt_simple_busy;
|
||||
|
||||
|
||||
// 从无车到有车 从有车到无车
|
||||
// 频率的变化趋势: 频率变大 频率变小
|
||||
// 捕获值的变化趋势: 值变小 值变大
|
||||
// 电感量的变化趋势 值变小 值变大
|
||||
uint16_t cnt_release_Up; // 从有车到无车时,一阶变化量 正数,一阶变化量是新捕获值与上一次捕捉值的差,
|
||||
uint16_t cnt_release_Down; // 从有车到无车时,一阶变化量 负数,此时可能倒车?或者出车的过程中有其他更有影响的部件,如前轮和后轮部分
|
||||
uint16_t min_release_capvd; // 从有车到无车时,U字形 拐点处的 一阶滤波值
|
||||
} FltHistoryManager;
|
||||
extern FltHistoryManager flt_mgr ; // 初始化为0
|
||||
|
||||
// 初始化采样次数(例如100次)
|
||||
#define INIT_SAMPLE_COUNT 10 //40 // 200
|
||||
#define TMP_SAMPLE_COUNT 50
|
||||
|
||||
// 区间类型定义(绝对差值或百分比)
|
||||
typedef enum {
|
||||
RANGE_ABSOLUTE, // 绝对差值(如 ±50)
|
||||
RANGE_PERCENT // 百分比(如 ±10%)
|
||||
} RangeType;
|
||||
|
||||
// 阶段配置结构体(每个时间窗口的区间规则)
|
||||
typedef struct {
|
||||
uint32_t base_value; // 基准值(例如开机稳定值、最近5分钟值等)
|
||||
uint32_t lower;
|
||||
uint32_t upper;
|
||||
uint16_t range_size; // 区间大小(绝对值或百分比数值)
|
||||
RangeType range_type; // 区间类型(绝对或百分比)
|
||||
} StageRangeConfig;
|
||||
|
||||
// 全局阶段配置数组(示例:开机、5分钟、10分钟、30分钟、1小时)
|
||||
#define STAGE_COUNT 2
|
||||
#define STAGE_COUNT_SHORT 2
|
||||
extern StageRangeConfig stage_config[STAGE_COUNT];
|
||||
|
||||
|
||||
|
||||
extern uint16_t g_hold_time;
|
||||
extern char g_flag_debug;
|
||||
extern uint8_t g_dev_number[6];
|
||||
extern uint8_t MACAddr[6];
|
||||
|
||||
extern uint8_t g_loop_cut_last;
|
||||
extern uint32_t g_loop_cut_amount;
|
||||
extern uint8_t g_loop_power_up_state;
|
||||
|
||||
extern uint8_t g_function_mode;
|
||||
|
||||
uint32_t mstick(void);
|
||||
void reload_lower_upper(uint8_t sens_level);
|
||||
|
||||
#endif /* INCLUDE_CMCNG_H_ */
|
||||
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* dbn_ble_srv.h
|
||||
*
|
||||
* Created on: Aug 27, 2024
|
||||
* Author: Thinkpad
|
||||
*/
|
||||
|
||||
#ifndef INCLUDE_DBN_BLE_SRV_H_
|
||||
#define INCLUDE_DBN_BLE_SRV_H_
|
||||
|
||||
#include "CONFIG.h"
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* Magic | Header | Data | CheckByte
|
||||
* | Addr/Sub Len CMD | | Xor Sum
|
||||
* 1Byte | 1B 1B 1B | xx | 1B 1B
|
||||
*
|
||||
* * Len = len(CMD) + len(Data)
|
||||
*/
|
||||
#define MAGIC_BYTE_DBN_DEFAULT 0x8F
|
||||
#define MAGIC_BYTE_DBN_TRANSPARENT 0x7F // 用于 显示屏协议、地感协议、探头协议等
|
||||
|
||||
#define CMD_DBN_GET_DEV_INFO 0x10
|
||||
|
||||
#define CMD_DBN_CHECK_PASS 0x1C
|
||||
#define CMD_DBN_MODIFY_PASS 0x1D
|
||||
|
||||
|
||||
#define CMD_DBN_SET_FACTORY 0x1E
|
||||
#define CMD_DBN_RESET_DEV 0x1F
|
||||
|
||||
#define CMD_DBN_SET_NOTIFY 0x20
|
||||
#define CMD_DBN_SET_NOTIFY_LOOP 0x21
|
||||
#define CMD_DBN_SET_SUB_CODE 0x22 //使能 子功能
|
||||
#define CMD_DBN_SET_CJQ_PARAM 0x23 // 设置 车检器参数
|
||||
#define CMD_DBN_GET_CJQ_PARAM 0x24 // 读取 车检器参数
|
||||
|
||||
#define CMD_DBN_DEV_RESET 0x6D
|
||||
|
||||
#define CMD_DBN_LOOP_SAMPLE_PARAM 0x87
|
||||
#define CMD_DBN_LOOP_BALANCE_PARAM 0x88
|
||||
#define CMD_DBN_LOOP_RELEASE_PLANB 0x89
|
||||
#define CMD_DBN_LOOP_SENS_LIST 0x8A
|
||||
#define CMD_DBN_SET_CJQ_FACTORY 0x92
|
||||
|
||||
|
||||
#define CMD_SUB_SENS_REPORT 0xC0 //设备主动上报传感信息
|
||||
// #define CMD_REQUIRE_DEV_MAC_ADDR 0xC1
|
||||
// #define CMD_CHANGE_DEV_ADDR_BY_MAC 0xC2
|
||||
// #define CMD_SET_LED 0xC3
|
||||
// #define CMD_SET_RELAY 0xC4
|
||||
#define CMD_SENS_ACS_ENABLE 0xC5 // 设备主动上报 使能
|
||||
|
||||
|
||||
|
||||
|
||||
#define MAX_BLE_DAT_RESPONSE_LEN (BLE_BUFF_MAX_LEN - 4) // 14 //返回 的所有字节数不能超过20个字节,除去 magic、header和ckb校验字节,剩下数据的字节数为14
|
||||
#define MAX_BLE_Notify_Buf_LEN BLE_BUFF_MAX_LEN //24
|
||||
#define MAX_BLE_BUF_LEN BLE_BUFF_MAX_LEN //128
|
||||
#define MAX_BLE_TMP_BUF_LEN BLE_BUFF_MAX_LEN
|
||||
|
||||
typedef struct _BLE_Notify_Buf_
|
||||
{
|
||||
uint8_t flag; //0 idle, 1 buf ready
|
||||
uint8_t len;
|
||||
uint8_t buf[MAX_BLE_Notify_Buf_LEN];
|
||||
}BLE_Notify_Buf;
|
||||
|
||||
typedef struct _BUF_DBN_BLE_
|
||||
{
|
||||
uint8_t flag;
|
||||
uint8_t magic;
|
||||
uint8_t cmd;
|
||||
uint8_t dat_len ;
|
||||
uint8_t dat_offset;
|
||||
uint8_t pkg_amount;
|
||||
uint8_t pkg_seq;
|
||||
uint8_t dat[MAX_BLE_BUF_LEN];
|
||||
} Buf_DBN_BLE;
|
||||
|
||||
extern Buf_DBN_BLE g_buf_ble_response;
|
||||
|
||||
extern BLE_Notify_Buf g_notify_buftemp;
|
||||
extern uint8_t g_flag_notify_temp;
|
||||
extern BLE_Notify_Buf g_ble_rcv_buf;
|
||||
|
||||
|
||||
extern uint16_t loop1_LPCNT;
|
||||
extern uint8_t g_freq_sens;
|
||||
extern uint8_t loop1_SensLevel;
|
||||
extern uint8_t g_freq_level;
|
||||
extern uint32_t g_sys_freq;
|
||||
extern float g_freq_tmp;
|
||||
|
||||
|
||||
|
||||
void clear_ble_notify_buf(BLE_Notify_Buf * buf);
|
||||
|
||||
void poll_dbn_ble(void);
|
||||
void report_sens_acs(void);
|
||||
|
||||
void set_factory_param(void);
|
||||
void factory_dev(void);
|
||||
void para_store_init(void);
|
||||
|
||||
|
||||
#endif /* INCLUDE_DBN_BLE_SRV_H_ */
|
||||
@@ -0,0 +1,67 @@
|
||||
/********************************** (C) COPYRIGHT *******************************
|
||||
* File Name : peripheral.h
|
||||
* Author : WCH
|
||||
* Version : V1.0
|
||||
* Date : 2018/12/11
|
||||
* Description :
|
||||
*********************************************************************************
|
||||
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
|
||||
* Attention: This software (modified or not) and binary are used for
|
||||
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef PERIPHERAL_H
|
||||
#define PERIPHERAL_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************************************************************
|
||||
* INCLUDES
|
||||
*/
|
||||
#include "dbn_ble_srv.h"
|
||||
|
||||
/*********************************************************************
|
||||
* CONSTANTS
|
||||
*/
|
||||
|
||||
// Peripheral Task Events
|
||||
#define SBP_START_DEVICE_EVT 0x0001
|
||||
#define SBP_PERIODIC_EVT 0x0002
|
||||
#define SBP_READ_RSSI_EVT 0x0004
|
||||
#define SBP_PARAM_UPDATE_EVT 0x0008
|
||||
|
||||
/*********************************************************************
|
||||
* MACROS
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint16_t connHandle; // Connection handle of current connection
|
||||
uint16_t connInterval;
|
||||
uint16_t connSlaveLatency;
|
||||
uint16_t connTimeout;
|
||||
} peripheralConnItem_t;
|
||||
|
||||
/*********************************************************************
|
||||
* FUNCTIONS
|
||||
*/
|
||||
|
||||
/*
|
||||
* Task Initialization for the BLE Application
|
||||
*/
|
||||
extern void Peripheral_Init(void);
|
||||
|
||||
/*
|
||||
* Task Event Processor for the BLE Application
|
||||
*/
|
||||
extern uint16_t Peripheral_ProcessEvent(uint8_t task_id, uint16_t events);
|
||||
|
||||
/*********************************************************************
|
||||
*********************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,187 @@
|
||||
/*
|
||||
* storage.h
|
||||
*
|
||||
* Created on: Aug 27, 2024
|
||||
* Author: Thinkpad
|
||||
*/
|
||||
|
||||
#ifndef INCLUDE_STORAGE_H_
|
||||
#define INCLUDE_STORAGE_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
// #define Addr_Loop_PlanB_Cng_Offset 0x10
|
||||
// #define Addr_Flag_Sample_In 0x10
|
||||
// #define Addr_Sample_Max_Amplitude 0x11
|
||||
// #define Addr_Flag_Balance_Ori_In 0x13
|
||||
// #define Addr_Balance_Ori_In_Max_Cnt 0x14
|
||||
// #define Addr_Flag_Release_Ori_PlanB 0x16
|
||||
// #define Addr_Release_Ori_PlanB_TimeOut 0x17
|
||||
// #define Addr_Release_Ori_PlanB_Weight 0x18
|
||||
// #define Addr_Release_Ori_Amplitude 0x19
|
||||
// #define Addr_Flag_Release_Rate 0x1B
|
||||
// #define Addr_Release_Rate_First 0x1C
|
||||
// #define Addr_Release_Rate_Second 0x1D
|
||||
// #define Addr_Release_Rate_Weight 0x1E
|
||||
// #define Addr_Release_Rate_Mode 0x1F
|
||||
|
||||
#define Addr_Loop_Sens_List_Offset 0x20
|
||||
|
||||
#define Addr_Sens_Array_In 0x20
|
||||
#define Addr_Sens_Array_Out 0x30
|
||||
|
||||
|
||||
#define MAX_LOOP_SENS_AMOUNT 3 // 4 // 5
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
typedef struct _Loop_Sample_CNG_
|
||||
{
|
||||
uint8_t flag;
|
||||
uint16_t max_amplitude; // 最大幅值
|
||||
}Loop_Sample_Cng;
|
||||
|
||||
typedef struct _Loop_Balance_Ori_CNG_
|
||||
{
|
||||
uint8_t flag;
|
||||
uint16_t max_cnt ; // 最大补偿次数
|
||||
}Loop_Balance_Ori_Cng; // 漂移补偿
|
||||
|
||||
typedef struct _Loop_Release_Ori_PlanB_
|
||||
{
|
||||
uint8_t flag_weight;
|
||||
uint16_t max_amplitude; //最大幅值
|
||||
uint8_t timeout; // 单位:分钟
|
||||
}Loop_Release_Ori_PlanB;
|
||||
|
||||
typedef struct _Loop_Release_Change_Rate_
|
||||
{
|
||||
uint8_t flag_weight;
|
||||
uint8_t rate_first;
|
||||
uint8_t rate_second;
|
||||
uint8_t mode;
|
||||
}Loop_Release_Change_Rate;
|
||||
|
||||
|
||||
typedef struct _Loop_Balance_PlanB_
|
||||
{
|
||||
Loop_Sample_Cng sample_cng;
|
||||
Loop_Balance_Ori_Cng balance_ori_cng;
|
||||
Loop_Release_Ori_PlanB release_ori_planB;
|
||||
Loop_Release_Change_Rate release_change_rate;
|
||||
}Loop_Balance_PlanB;
|
||||
|
||||
extern Loop_Balance_PlanB g_loop_balance_planB;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t sensitvity; // 高四位表示灵敏度的数量,低四位表示当前灵敏度的序号(从0开始)
|
||||
uint8_t delay_time;
|
||||
uint8_t output_mode;
|
||||
uint8_t direction_mode; // 方向判别模式,0 触发模式, 非0 表示方向判别模式
|
||||
uint8_t loopFreq_Level; // 高低频
|
||||
uint8_t loopSafe_Timeout; // 线圈安全模式, 0表示关闭,非0表示开启,以10秒为单位
|
||||
uint8_t exist_mode; // 0 永久存在,非0,表示有限存在的时间,单位为10秒
|
||||
}Loop_Cng_Unit;
|
||||
extern Loop_Cng_Unit g_loop_cng_unit;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t sens_in;
|
||||
uint16_t sens_out;
|
||||
}Loop_Single_Sens;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t total;
|
||||
Loop_Single_Sens sens[MAX_LOOP_SENS_AMOUNT];
|
||||
}Loop_Sens_List;
|
||||
extern Loop_Sens_List g_loop_sens_list;
|
||||
|
||||
|
||||
|
||||
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 enum
|
||||
{
|
||||
SENS_NONE = 0,
|
||||
SENS_SUB_INFO = 1, // 传感器设备信息
|
||||
SENS_OBJ_DYNAMIC = 2, // 动态目标类型
|
||||
SENS_SOUTPUT_STATUS = 3, // 当前开关量输出的状态
|
||||
SENS_DETAIL_CNG = 4, // 详细配置
|
||||
SENS_LOOP_DYNAMIC = 5, // 线圈动态信息
|
||||
SENS_OBJ_BackGround = 6, //
|
||||
SENS_OBJ_INSIDE = 7, //
|
||||
SENS_LOOP_TREND,
|
||||
SENS_OBJ_DYNAMIC_SIMPLE,
|
||||
SENS_OBJ_STATIC_XuJing, //10, 0x0A
|
||||
SENS_DOBULE_LOOP_ESTIMATE //0x0B, 线圈环境评估
|
||||
} SUB_SENS_TYPE; // 传感数据类型
|
||||
|
||||
|
||||
|
||||
typedef struct _LOOP_ACS_INFO
|
||||
{
|
||||
uint8_t flag_event;
|
||||
uint8_t loop_num;
|
||||
uint8_t freq_level;
|
||||
uint8_t sensity;
|
||||
uint8_t relay1_cng;
|
||||
uint8_t relay1_state;
|
||||
uint8_t relay2_cng;
|
||||
uint8_t relay2_state;
|
||||
uint8_t loop_state;
|
||||
uint8_t output_mode;
|
||||
uint8_t dir_mode;
|
||||
uint8_t delay;
|
||||
uint8_t car_state;
|
||||
uint8_t direction;
|
||||
uint8_t flag_loop_safe;
|
||||
uint32_t loop_safe_counter;
|
||||
uint8_t condition;
|
||||
uint8_t flag_change;
|
||||
uint32_t frequent;
|
||||
uint32_t loop_capvd;
|
||||
int16_t variation;
|
||||
uint32_t event_counter;
|
||||
uint32_t report_counter;
|
||||
} Loop_ACS_Info;
|
||||
extern Loop_ACS_Info g_loop_acs_info;
|
||||
|
||||
|
||||
#pragma pack()
|
||||
|
||||
|
||||
#define HOLD_TIME 5*1200
|
||||
#define LC_HOLD_TIME 4*1200 //时间4分钟
|
||||
#define IN_DELAY 10
|
||||
#define OUT_DELAY 39
|
||||
#define PLUSE_DELAY 10
|
||||
|
||||
|
||||
void write_cfg_to_store(uint32_t wAddr, uint8_t * p, uint32_t len);
|
||||
void read_cfg_from_store(uint32_t addr, uint8_t *p, uint32_t len);
|
||||
|
||||
|
||||
#endif /* INCLUDE_STORAGE_H_ */
|
||||
Reference in New Issue
Block a user