/* * storage.h * * Created on: Aug 27, 2024 * Author: Thinkpad */ #ifndef INCLUDE_STORAGE_H_ #define INCLUDE_STORAGE_H_ #include // #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_BT_Close_TIMEOUT_Offset 0x10 #define Addr_RS485_Baud_Offset 0x11 // 3 byte #define Addr_RS485_ID_Offset 0x14 // 1 byte #define Addr_Loop_Sens_List_Offset 0x20 #define Addr_Sens_Array_In 0x20 #define Addr_Sens_Array_Out 0x30 #define RS_BAUD_DEFAULT 9600 #define MAX_LOOP_SENS_AMOUNT 4 // 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; int32_t variation; uint32_t event_counter; uint32_t report_counter; } Loop_ACS_Info; extern Loop_ACS_Info g_loop_acs_info; typedef enum _DLD_OUTPUT_MODE { OUTPUT_MODE_LOOP_OR_RADAR = 0, // 地感或雷达,雷达的输出信号接光耦输入,雷达或地感有信号,车检器的继电器输出。 OUTPUT_MODE_HUMAN_VD_MIX, // 人车混行,雷达的输出信号接光耦输入,刚开始屏蔽雷达信号,当地感检测有车、车检器继电器输出后,车检器对地感 或雷达信号都有效(或的关系),车辆离开地感与雷达检测区域后,三秒内雷达检测有效,车检器继电器立即输出,起到防砸人的效果,连续进入持续防砸、人走落杆。 OUTPUT_MODE_ETC, // ETC模式,雷达的输出信号接光耦输入,刚开始屏蔽雷达信号,当地感检测有车、车检器继电器输出后,车检器对地感 或雷达信号都有效(或的关系),雷达输出断开后会有500ms的防抖超时时间,超时时间结束后,车检器才确定释放继电器。 OUTPUT_MODE_LOOP_AND_RADAR, // 地感和雷达,雷达的输出信号接光耦输入,雷达 并且 地感都有信号,车检器继电器才输出。 OUTPUT_MODE_LOOP_ONLY, // 仅地感输出 有效,光耦输入 无效 OUTPUT_MODE_RADAR_ONLY, // 仅光耦输入有效,雷达的输出信号接光耦输入,雷达有输出,车检器的继电器输出;地感信号 无效。 OUTPUT_MODE_LOOP_X_RESET, // 光耦输入为 设备 复位信号,仅地感检测 输出 }DLD_OUTPUT_MODE; #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_ */