#ifndef __PARAMX_H #define __PARAMX_H #ifndef DEV_ID_LEN #define DEV_ID_LEN (6) #endif #ifndef CHECK_CORRECT_ENABLE #define CHECK_CORRECT_ENABLE #endif #ifndef Q1 #define Q1 (0.0126f) //modified by yuewei 20260610 0.2f->0.0126f #endif #ifndef Q3 #define Q3 (6.3f) //modified by yuewei 20260610 100->6.3f #endif #ifndef CHECK_Q_VALUE #define CHECK_Q_VALUE (32) #endif #ifndef CHECK_C_VALUE #define CHECK_C_VALUE (1340) #endif #ifndef CHECK_POINT_NUM #define CHECK_POINT_NUM (8) #define CHECK_TEMP_POINT (3) #define EEPROM_MAX_WRITE_SIZE 128 #define EEPROM_MAX_READ_SIZE 128 #define EEPROM_PAGE_SIZE 256 #define EEPROM_MAX_SIZE 128 * 1024 #define PARAMX_START_ADDR 00000 // #define CUM_FLOW_START_ADDR (0x17c00u)//循环存储最新流量记录的eeprom地址 // #define MAX_CUM_FLOW_NUM 256 //循环存储数量 // #define CUM_FLOW_SIZE 40 //每个记录占用的空间大小 #define QUAD_CELL_START_ADDR 0x1B000 #define QUAD_CELL_LEN 500 ///////////////////////FLASH 空间划分//////////////////////// #define FLASH_BOOT_LOADER_START 0x00000 #define FLASH_BOOT_LOADER_SIZE 0x08000 // 32KB bootloader代码空间 #define DIFF_PATCH_PACKET_START 0x38000 #define DIFF_PATCH_PACKET_SIZE 0x7c00 // 31KB//差分包空间 #define DIFF_UPDATE_INFO_START (DIFF_PATCH_PACKET_START + DIFF_PATCH_PACKET_SIZE) // 差分升级相关信息 #define DIFF_UPDATE_INFO_SIZE 0x200 //(APP1_CODE_START-DIFF_UPDATE_INFO_START) #define APP1_CODE_START 0x08000 #define APP1_CODE_SIZE 0x18000 #define APP2_CODE_START 0x20000 #define APP2_CODE_SIZE 0x18000 #include "stdint.h" typedef struct { uint16_t spd_lvl[CHECK_POINT_NUM]; uint16_t cur_c[CHECK_POINT_NUM]; uint16_t base_c[CHECK_POINT_NUM]; } CheckSpdLvlC_t; #endif typedef struct { uint32_t para_len; uint32_t para_crc32; float path_skew[4]; // 偏差修正系数 float pipe_coe; // coe系数 //char imei[16]; // 设备imei号 //char ccid[32]; // 设备ccid号 uint8_t mux_ch_no[4]; // 多路通道地址 uint8_t dev_id[DEV_ID_LEN]; // 设备地址,6字节 uint8_t reserved1[2]; // 保留 4字节对齐 // uint8_t ver_type; // 水表类型 // uint8_t ver_operator; // 运营商 // uint8_t ver_module; // 模组 // uint8_t ver_firmware; // 软件版本号 uint16_t diameter; // 直径 uint8_t chan_num; // 超声波通道数 uint8_t pressure_sensor; // 是否带压力传感器 uint8_t settlement_day; // 结算日 uint8_t report_base_hour; // 上报时间小时 uint8_t report_base_min; // 分 uint8_t report_base_sec; // 秒 uint16_t report_interval; // 上报时间间隔 uint16_t reserved2; int16_t high_temp_alarm_thres; // 高温报警阈值 int16_t low_temp_alarm_thres; // 低温报警阈值 uint32_t large_flow_alarm_thres; // 大流量报警阈值 uint16_t large_flow_cnti_moni_time; // 大流量监测持续时间 uint16_t cnti_flow_cnti_moni_time; // 持续流量持续监测时间 uint32_t leak_flow_alarm_thres; // 渗流报警阈值 uint16_t leak_flow_cnti_moni_time; // 渗漏监测持续时间 uint16_t high_press_alarm_thres; // 高压力告警阈值 uint16_t low_press_alarm_thres; // 低压力报警阈值 uint16_t q_value; // q值 uint8_t main_server_ip[4]; // 主服务器ip地址 uint8_t sub_server_ip[4]; // 备用服务器ip地址 uint16_t main_server_port; // 主服务器端口号 uint16_t sub_server_port; // 备用服务器端口号 uint8_t dma_report_start[4]; // DMA上报开始时间,时分秒 第四个字节未用 // uint8_t dma_report_start_min; // uint8_t dma_report_start_sec; // uint8_t reserv3; uint8_t dma_report_end[3]; // DMA上报结束时间,时分秒 // uint8_t dma_report_end_min; // uint8_t dma_report_end_sec; uint8_t dma_interval; // DMA上报间隔 分钟单位 uint8_t total_positive_water[4]; // 表底读数 uint8_t cmp_thers[8]; // 自动匹配电平参数 uint8_t cmp_thers_width[8]; uint8_t buffer_config; uint8_t reserv4[13]; uint8_t reserv5[2]; CheckSpdLvlC_t check_spdLvl_c[CHECK_TEMP_POINT]; // 数据校正参数 uint16_t n; // 新增q3值 uint16_t b; // n始动值 uint16_t q; // q值 uint16_t r; // 量程比 uint8_t nb_band_flag; } Param_t; typedef struct { uint8_t pressure_sensor; float pipe_coe; } HardWareParaDef; // 硬件参数 #include "eeprom.h" #define DIFF_PACKET_LEN 512 typedef struct { uint8_t update_status; uint8_t cur_ver[5]; // 上位机送下来的当前版本号,校对当前版本号 uint8_t new_ver[5]; // 目标版本号,仅用于比较 // uint8_t reserv[2]; uint32_t patch_len; // 升级包总长度 uint16_t per_packet_len; // 每包大小 uint16_t packet_crc; // crc值(上位机写入的) // 写入控制的相关参数 uint16_t cur_num; // 当前包序号 uint16_t res_crc16; // 累计当前校验值 uint16_t com_crc16H_next(uint16_t crc_cur, uint8_t *data, uint32_t len, uint16_t pattern)//pattern=0x1021 uint32_t flash_addr_ptr; // 当前flash写入地址 // uint8_t reserv2[3]; uint32_t run_app_ver_addr; // uint32_t new_app_addr; // uint8_t run_app_ver[5];//当前正在运行的应用代码版本号 // uint8_t reserv3[3]; } PATCH_INFO_DEF; typedef struct { uint16_t packet_numb; uint16_t packet_size; uint8_t data[DIFF_PACKET_LEN]; } DIFF_PACKET_DEF; typedef struct { uint8_t main_server_ip[4]; uint16_t main_server_port; uint8_t sub_server_ip[4]; uint16_t sub_server_port; } SERVER_IP_PORT_DEF; typedef struct { uint8_t report_base_hour; // 上报时间小时 uint8_t report_base_min; // 分 uint8_t report_base_sec; // 秒 uint16_t report_interval; // 上报时间间隔 } REGULAR_REPORT_DEF; typedef struct { uint8_t dma_report_start_hour; // DMA上报开始时间,时分秒 第四个字节未用 uint8_t dma_report_start_min; uint8_t dma_report_start_sec; uint8_t reserv1; uint8_t dma_report_end_hour; // DMA上报结束时间,时分秒 uint8_t dma_report_end_min; uint8_t dma_report_end_sec; uint8_t dma_interval; // DMA上报间隔 分钟单位 } DMA_REGULAR_REPORT_DEF; typedef struct { uint32_t large_flow_alarm_thres; // 大流量报警阈值 uint16_t large_flow_cnti_moni_time; // 大流量监测持续时间 uint16_t cnti_flow_cnti_moni_time; // 持续流量持续监测时间 uint32_t leak_flow_alarm_thres; // 渗流报警阈值 uint16_t leak_flow_cnti_moni_time; // 渗漏监测持续时间 } FLOW_ALARM_PARA_DEF; typedef struct { uint8_t high_press_alarm_thres; // 高压力告警阈值 uint8_t low_press_alarm_thres; // 低压力报警阈值 } PRESS_ALARM_PARA_DEF; typedef struct { int16_t high_temp_alarm_thres; // 高温报警阈值 int16_t low_temp_alarm_thres; // 低温报警阈值 } TEMP_ALARM_PARA_DEF; typedef struct { int8_t settlement_day; } SETTLEMENT_DAY_DEF; typedef struct { uint8_t fw[4]; uint8_t bw[4]; } METER_BOTTOM_DEF; typedef struct { uint8_t start_time[6]; uint8_t end_time[6]; } GET_5MIN_REOCORD_DEF; typedef struct { uint16_t cur_c[8]; int16_t temp; } FLOW_PARA_DEF; typedef struct { uint16_t cur_c[8]; uint16_t spd_lvl[8]; int16_t temp; } DELTA_TC_FLOW_PARA_DEF; typedef struct { float compensation[125]; uint16_t diameter; } DIAMETER_AND_TEMP_COMPENSATION_DEF; typedef struct { uint8_t cmp_thers[8]; uint8_t cmp_thers_width[8]; uint8_t buffer_config; uint8_t reserv4[13]; } AUTO_MATCH_LEVEL_PARA_DEF; typedef struct { uint16_t n; uint16_t b; uint16_t q; uint16_t r; } NBQR_PARA_DEF; typedef struct { float skew[4]; } SKEW_PARA_DEF; // #define DIFF_PER_PACKET_SIZE 512 extern PATCH_INFO_DEF PatchInfo; extern Param_t Paramx; extern void ParamInit(void); extern void GetParam(Param_t **); extern uint32_t BillTime(uint8_t, uint8_t); extern float CheckFlowCorrectFactor(float, uint16_t); extern uint8_t CheckCValueIndex(uint16_t, uint16_t); extern uint16_t CheckTempRangeIndex(float); extern uint8_t GetChNum(void); extern uint16_t GetSpdLvl(double); #ifndef __PARAM_FUN_INCLUDE #define __PARAM_FUN_INCLUDE extern void set_param_firmware_ver(uint8_t); extern void SaveParam(void); extern int8_t get_current_app_ver_from_flash(void); // 从flash读取当前app版本 extern uint8_t get_param_firmware_ver(void); // 获取当前版本号 extern int8_t set_hardware_para(HardWareParaDef *HardWarePara); // 设置硬件参数 extern int8_t get_hardware_para(HardWareParaDef *HardWarePara); // 读取硬件参数 extern int8_t set_patch_info(PATCH_INFO_DEF *patch_info); // 设置表端开始升级信息,收到升级指令后调用 extern uint8_t write_diff_patch_to_flash(DIFF_PACKET_DEF *Packet); // 写差分包,收到差分包后调用 extern int8_t set_server_ip_port_para(SERVER_IP_PORT_DEF *server_ip_para); // 设置服务器ip和端口号 extern int8_t get_server_ip_port_para(SERVER_IP_PORT_DEF *server_ip_para); // 读取服务ip和端口号 extern int8_t set_regular_report_para(REGULAR_REPORT_DEF *regular_report_para); // 设置定时上报周期和时间间隔 extern int8_t get_regular_report_para(REGULAR_REPORT_DEF *regular_report_para); // 读取定时上报周期和时间间隔 extern int8_t set_dma_regular_report_para(DMA_REGULAR_REPORT_DEF *dma_report_para); // 设置dma上报时间参数 extern int8_t get_dma_regular_report_para(DMA_REGULAR_REPORT_DEF *dma_report_para); // 读取dma定时上报时间参数 extern int8_t set_flow_alarm_para(FLOW_ALARM_PARA_DEF *flow_alarm_para); // 设置流量告警参数 extern int8_t get_flow_alarm_para(FLOW_ALARM_PARA_DEF *flow_alarm_para); // 读取流量告警参数 extern int8_t set_press_alarm_para(PRESS_ALARM_PARA_DEF *press_alarm_para); // 设置压力告警参数 extern int8_t get_press_alarm_para(PRESS_ALARM_PARA_DEF *press_alarm_para); // 获取压力告警参数 extern int8_t set_temp_alarm_para(TEMP_ALARM_PARA_DEF *temp_alarm_para); // 设施温度告警参数 extern int8_t get_temp_alarm_para(TEMP_ALARM_PARA_DEF *temp_alarm_para); // 读取温度告警参数 extern int8_t set_settlement_day_para(SETTLEMENT_DAY_DEF *settlement_day_para); // 设置表端结算日参数 extern int8_t get_settlement_day_para(SETTLEMENT_DAY_DEF *settlement_day_para); // 读取表端结算日参数 extern int8_t set_meter_bottom_data(METER_BOTTOM_DEF *bottom_data); // 设置表底读数 extern int8_t get_18month_record_data(uint8_t *data); // 读取月结数据 extern int8_t get_30day_record_data(uint8_t *data); // 读取日结数据 extern int8_t get_hour_record_data(uint8_t year, uint8_t month, uint8_t day, uint8_t *data); // 读取时结数据 extern int8_t get_5min_record_data(GET_5MIN_REOCORD_DEF *get_5min_record_data, uint16_t numb, uint8_t *data); // 读取5分钟密集数据 extern int8_t get_log_record(uint8_t start, uint8_t num, uint8_t *data); // 读取日志数据 暂未实现 extern int8_t set_channel_numb(uint8_t *numb); // 设置声道数 extern int8_t get_channel_numb(uint8_t *numb); // 设置声道数 extern int8_t get_device_addr(uint8_t *data); // 获取设备地址 extern int8_t set_device_addr(uint8_t *data); // 设置表地址 extern int8_t set_flow_para(FLOW_PARA_DEF *flow_para); // 设置流量参数 extern int8_t get_flow_para(FLOW_PARA_DEF *flow_para); // 读取流量参数 extern int8_t set_deltaTC_flow_para(DELTA_TC_FLOW_PARA_DEF *deltaTC_para); // 设置德尔塔TC流量参数 extern int8_t get_deltaTC_flow_para(DELTA_TC_FLOW_PARA_DEF *deltaTC_para); // 读取德尔塔TC流量参数 // extern int8_t set_diameter_and_temp_compensation(DIAMETER_AND_TEMP_COMPENSATION_DEF *data);//设置口径和温度补偿系数 // extern int8_t get_diameter_and_temp_compensation(DIAMETER_AND_TEMP_COMPENSATION_DEF *data);//读取口径和温度补偿系数 extern int8_t set_auto_match_level_para(AUTO_MATCH_LEVEL_PARA_DEF *data); // 设置自动匹配电平参数 extern int8_t get_auto_match_level_para(AUTO_MATCH_LEVEL_PARA_DEF *data); // 获取自动匹配电平参数 // extern void get_temp_compensation_from_eeprom(void); extern uint8_t set_crc_check_para(void); extern uint16_t pack_crc_check(uint16_t prev_data, uint8_t *data, uint16_t len); extern uint8_t eeprom_MassRead(uint8_t *dat, uint32_t addr, uint16_t len); extern uint8_t eeprom_MassWrite(uint8_t *dat, uint32_t addr, uint16_t len); extern int8_t set_nbqr_para(NBQR_PARA_DEF *nbqr_para); extern int8_t get_nbqr_para(NBQR_PARA_DEF *nbqr_para); extern int8_t set_skew_para(SKEW_PARA_DEF *skew_para); extern int8_t datecmp(tm_t date1, tm_t date2); extern void update_run_app_info(void); extern void write_flash_memory(uint8_t *data, uint32_t addr, uint32_t len); extern void erase_flash_memory(uint32_t addr, uint32_t size); extern int8_t get_quad_cell_data(void *quad_cell_data); extern int8_t set_diameter_and_quad_cell_data(uint16_t diameter, void *quad_cell_data); extern const uint16_t ccitt_table[256]; extern const uint8_t app_addr; extern int8_t Check_quad_cell_data_valid(uint32_t quad_cell_data); extern const char SOFT_VER[5]; extern uint8_t rewrite_para_flag; extern void check_rewrite_para(void); extern void run_clk_task_handler(void); extern int8_t set_nb_band(void); // extern Quad_Cell_t Quad_Cell_Ary[]; #endif #endif