| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- #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
|