Files
CCU621M/app/tcp_ser/system_paracfg.c
T

1160 lines
50 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "publicdata/public_define.h"
#include "publicdata/publicdata.h"
#include "tcp_ser/system_paracfg.h"
#if TCP_DEBUG_EN
/* 位字段参数类型标识变量 */
static const uint32_t g_enable_bit_param_marker = 0xE1A2B3C4; /* 使能参数位字段标识 */
static const uint32_t g_netcomm_bit_param_marker = 0xE2A3B4C5; /* 网络参数位字段标识 */
/* 基本参数映射表 */
static const param_map_item_t basic_param_map[] = {
{PARAM_BASIC_GUN_COUNT, "gunCount", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_gunCnt, sizeof(g_t_share_data.t_sys_fix_cfg.u8_gunCnt), "枪数量 1/2"},
{PARAM_BASIC_RATE_POW, "ratePow", PARAM_TYPE_UINT16,
(void*)&g_t_share_data.t_sys_fix_cfg.u16_ratePow, sizeof(g_t_share_data.t_sys_fix_cfg.u16_ratePow), "整桩功率 kW"},
{PARAM_BASIC_MAX_VOLT, "maxVolt", PARAM_TYPE_UINT16,
(void*)&g_t_share_data.t_sys_fix_cfg.u16_max_volt, sizeof(g_t_share_data.t_sys_fix_cfg.u16_max_volt), "最大输出电压 0.1V"},
{PARAM_BASIC_MAX_CUR, "maxCur", PARAM_TYPE_UINT16,
(void*)&g_t_share_data.t_sys_fix_cfg.u16_max_cur, sizeof(g_t_share_data.t_sys_fix_cfg.u16_max_cur), "最大输出电流 0.1A"},
{PARAM_BASIC_PWD, "pwd", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_fix_cfg.u8_pwd, sizeof(g_t_share_data.t_sys_fix_cfg.u8_pwd), "屏幕维护密码"},
{PARAM_BASIC_PILE_TYPE, "pileType", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_pile_type, sizeof(g_t_share_data.t_sys_fix_cfg.u8_pile_type), "Unused"},
{PARAM_BASIC_TERMINAL_0, "terminal0", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_terminal[0], sizeof(g_t_share_data.t_sys_fix_cfg.u8_terminal[0]), "枪1地址 1~N"},
{PARAM_BASIC_TERMINAL_1, "terminal1", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_terminal[1], sizeof(g_t_share_data.t_sys_fix_cfg.u8_terminal[1]), "枪2地址 1~N"},
{PARAM_BASIC_LED_TYPE, "ledType", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.e_ledType, sizeof(g_t_share_data.t_sys_fix_cfg.e_ledType), "指示灯类型 0/1"},
{PARAM_BASIC_TIME_ZONE, "timeZone", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.e_timeZone, sizeof(g_t_share_data.t_sys_fix_cfg.e_timeZone), "系统时区 0-25 20为东八区"},
{PARAM_BASIC_THRESHOLD_GUN_TEMP, "thresholdGunTemp", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_threshold_gunTemp, sizeof(g_t_share_data.t_sys_fix_cfg.u8_threshold_gunTemp), "Gun temp threshold degC"},
{PARAM_BASIC_SOC_LIMIT, "socLimit", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_soc_limit, sizeof(g_t_share_data.t_sys_fix_cfg.u8_soc_limit), "Unused"},
{PARAM_BASIC_MIN_VOLT, "minVolt", PARAM_TYPE_UINT16,
(void*)&g_t_share_data.t_sys_fix_cfg.u16_min_volt, sizeof(g_t_share_data.t_sys_fix_cfg.u16_min_volt), "最低输出电压 0.1V"},
{PARAM_BASIC_TRICKLE_LIMIT, "trickleLimit", PARAM_TYPE_UINT16,
(void*)&g_t_share_data.t_sys_fix_cfg.u16_trickle_limit, sizeof(g_t_share_data.t_sys_fix_cfg.u16_trickle_limit), "Unused"},
{PARAM_BASIC_MDU_NUM, "mduNum", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_mdu_num, sizeof(g_t_share_data.t_sys_fix_cfg.u8_mdu_num), "模块数量 1~N"},
{PARAM_BASIC_MDU_TYPE, "mduType", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_MduType, sizeof(g_t_share_data.t_sys_fix_cfg.u8_MduType), "模块协议类型 0国网 1其他"},
{PARAM_BASIC_MDU_TEMP_FLAG, "mduTempFlag", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_mduTemp_flag, sizeof(g_t_share_data.t_sys_fix_cfg.u8_mduTemp_flag), "模块温度获取使能 0/1"},
{PARAM_BASIC_MDU_RATED_POW, "mduRatedPow", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_mdu_rated_pow, sizeof(g_t_share_data.t_sys_fix_cfg.u8_mdu_rated_pow), "模块额定功率 kW"},
{PARAM_BASIC_MDU_MAX_VOL, "mduMaxVol", PARAM_TYPE_UINT16,
(void*)&g_t_share_data.t_sys_fix_cfg.u16_mdu_max_vol, sizeof(g_t_share_data.t_sys_fix_cfg.u16_mdu_max_vol), "模块最高输出电压 0.1V"},
{PARAM_BASIC_MDU_MAX_CUR, "mduMaxCur", PARAM_TYPE_UINT16,
(void*)&g_t_share_data.t_sys_fix_cfg.u16_mdu_max_cur, sizeof(g_t_share_data.t_sys_fix_cfg.u16_mdu_max_cur), "模块最高输出电流 0.1A"},
{PARAM_BASIC_GUN_TYPE_0, "gunType0", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_gun_type[0], sizeof(g_t_share_data.t_sys_fix_cfg.u8_gun_type[0]), "枪1类型 0欧标枪 1国标枪"},
{PARAM_BASIC_GUN_TYPE_1, "gunType1", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_gun_type[1], sizeof(g_t_share_data.t_sys_fix_cfg.u8_gun_type[1]), "枪2类型 0欧标枪 1国标枪"},
{PARAM_BASIC_GUN_POWER_LIMIT_0, "gunPowerLimit0", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.u8_gun_power_limit[0], sizeof(g_t_share_data.t_sys_fix_cfg.u8_gun_power_limit[0]), "枪1充电功率限制 0表示不限制 单位kW"},
{PARAM_BASIC_GUN_POWER_LIMIT_1, "gunPowerLimit1", PARAM_TYPE_UINT8,
(void *)&g_t_share_data.t_sys_fix_cfg.u8_gun_power_limit[1], sizeof(g_t_share_data.t_sys_fix_cfg.u8_gun_power_limit[1]),
"Gun2 power limit kW, 0=unlimited"},
{PARAM_BASIC_PILE_POWER_LIMIT, "pilePowerLimit", PARAM_TYPE_UINT16,
(void *)&g_t_share_data.t_sys_fix_cfg.u16_pile_power_limit, sizeof(g_t_share_data.t_sys_fix_cfg.u16_pile_power_limit),
"Pile power limit kW, 0=unlimited"},
};
/* 基本参数映射表大小 */
#define BASIC_PARAM_MAP_SIZE (sizeof(basic_param_map) / sizeof(basic_param_map[0]))
/* 网络参数映射表 */
static const param_map_item_t network_param_map[] = {
/* 参数ID, 参数名称, 数据类型, 数据地址, 数据大小, 描述 */
{PARAM_NETWORK_ETH_IP, "ethIp", PARAM_TYPE_ARRAY,
(void*)g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_eth_ip, sizeof(g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_eth_ip), "本地IP"},
{PARAM_NETWORK_ETH_GATE, "ethGate", PARAM_TYPE_ARRAY,
(void*)g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_eth_gate, sizeof(g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_eth_gate), "网关"},
{PARAM_NETWORK_ETH_MASK, "ethMask", PARAM_TYPE_ARRAY,
(void*)g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_eth_mask, sizeof(g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_eth_mask), "地址掩码"},
{PARAM_NETWORK_ETH_MAC, "ethMac", PARAM_TYPE_ARRAY,
(void*)g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_eth_mac, sizeof(g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_eth_mac), "MAC地址"},
{PARAM_NETWORK_SERVER_A_DOMAIN, "serverADomain", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_serverA_domain_name, sizeof(g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_serverA_domain_name), "平台1服务器域名"},
{PARAM_NETWORK_SERVER_B_DOMAIN, "serverBDomain", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_serverB_domain_name, sizeof(g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_serverB_domain_name), "平台2服务器域名"},
{PARAM_NETWORK_PLAT_A_PILENUM, "platAPileNum", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_platA_pileNum, sizeof(g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_platA_pileNum), "平台1桩编号"},
{PARAM_NETWORK_PLAT_B_PILENUM, "platBPileNum", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_platB_pileNum, sizeof(g_t_share_data.t_sys_fix_cfg.s_net_cfg.u8_platB_pileNum), "平台1桩编号"},
/* U_NET_COMM_PARA 位字段参数 */
{PARAM_NETWORK_PROGRAM_TYPE, "programType", PARAM_TYPE_BIT,
(void*)&g_netcomm_bit_param_marker, sizeof(uint32_t), "程序类型 "},
{PARAM_NETWORK_NET_A_TYPE, "netAType", PARAM_TYPE_BIT,
(void*)&g_netcomm_bit_param_marker, sizeof(uint32_t), "平台1联网方式 0:4G 1:网线"},
{PARAM_NETWORK_NET_B_TYPE, "netBType", PARAM_TYPE_BIT,
(void*)&g_netcomm_bit_param_marker, sizeof(uint32_t), "平台2联网方式 0:4G 1:网线"},
{PARAM_NETWORK_PLAT_A_EN, "platAEn", PARAM_TYPE_BIT,
(void*)&g_netcomm_bit_param_marker, sizeof(uint32_t), "平台1使能"},
{PARAM_NETWORK_PLAT_B_EN, "platBEn", PARAM_TYPE_BIT,
(void*)&g_netcomm_bit_param_marker, sizeof(uint32_t), "平台2使能"},
{PARAM_NETWORK_PLAT_A_TYPE, "platAType", PARAM_TYPE_BIT,
(void*)&g_netcomm_bit_param_marker, sizeof(uint32_t), "平台1类型"},
{PARAM_NETWORK_PLAT_B_TYPE, "platBType", PARAM_TYPE_BIT,
(void*)&g_netcomm_bit_param_marker, sizeof(uint32_t), "平台2类型"},
{PARAM_NETWORK_SIM_ANP_TYPE, "simAnpType", PARAM_TYPE_BIT,
(void*)&g_netcomm_bit_param_marker, sizeof(uint32_t), "SIM 卡APN类型 0公网卡 1国网移动 2国网联通 3国网电信"},
};
/* 网络参数映射表大小 */
#define NETWORK_PARAM_MAP_SIZE (sizeof(network_param_map) / sizeof(network_param_map[0]))
/* 电表参数映射表 */
static const param_map_item_t meter_param_map[] = {
/* 参数ID, 参数名称, 数据类型, 数据地址, 数据大小, 描述 */
{PARAM_METER_METER_NUM, "meterNum", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.u8_meter_num, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.u8_meter_num), "电表数量 1~4"},
{PARAM_METER_0_IN_GUN, "meter0InGun", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[0].u8_inGun, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[0].u8_inGun), "归属枪号 0不存在; 1A枪 2B枪"},
{PARAM_METER_0_HIGH_PREC, "meter0HighPrec", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[0].u8_highPrec, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[0].u8_highPrec), "是否支持高精度 0/1"},
{PARAM_METER_0_IS_AC, "meter0IsAC", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[0].u8_isAC, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[0].u8_isAC), "是否为交流表 0直流表 1交流表"},
{PARAM_METER_0_ADDR, "meter0Addr", PARAM_TYPE_ARRAY,
(void*)g_t_share_data.t_sys_fix_cfg.s_memter.s_data[0].u8_meterAddr, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[0].u8_meterAddr), "电表地址"},
{PARAM_METER_1_IN_GUN, "meter1InGun", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[1].u8_inGun, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[1].u8_inGun), "归属枪号 0不存在; 1A枪 2B枪"},
{PARAM_METER_1_HIGH_PREC, "meter1HighPrec", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[1].u8_highPrec, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[1].u8_highPrec), "是否支持高精度 0/1"},
{PARAM_METER_1_IS_AC, "meter1IsAC", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[1].u8_isAC, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[1].u8_isAC), "是否为交流表 0直流表 1交流表"},
{PARAM_METER_1_ADDR, "meter1Addr", PARAM_TYPE_ARRAY,
(void*)g_t_share_data.t_sys_fix_cfg.s_memter.s_data[1].u8_meterAddr, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[1].u8_meterAddr), "电表地址"},
{PARAM_METER_2_IN_GUN, "meter2InGun", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[2].u8_inGun, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[2].u8_inGun), "归属枪号 0不存在; 1A枪 2B枪"},
{PARAM_METER_2_HIGH_PREC, "meter2HighPrec", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[2].u8_highPrec, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[2].u8_highPrec), "是否支持高精度 0/1"},
{PARAM_METER_2_IS_AC, "meter2IsAC", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[2].u8_isAC, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[2].u8_isAC), "是否为交流表 0直流表 1交流表"},
{PARAM_METER_2_ADDR, "meter2Addr", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_fix_cfg.s_memter.s_data[2].u8_meterAddr, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[2].u8_meterAddr), "电表地址"},
{PARAM_METER_3_IN_GUN, "meter3InGun", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[3].u8_inGun, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[3].u8_inGun), "归属枪号 0不存在; 1A枪 2B枪"},
{PARAM_METER_3_HIGH_PREC, "meter3HighPrec", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[3].u8_highPrec, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[3].u8_highPrec), "是否支持高精度 0/1"},
{PARAM_METER_3_IS_AC, "meter3IsAC", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_fix_cfg.s_memter.s_data[3].u8_isAC, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[3].u8_isAC), "是否为交流表 0直流表 1交流表"},
{PARAM_METER_3_ADDR, "meter3Addr", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_fix_cfg.s_memter.s_data[3].u8_meterAddr, sizeof(g_t_share_data.t_sys_fix_cfg.s_memter.s_data[3].u8_meterAddr), "电表地址"},
};
/* 电表参数映射表大小 */
#define METER_PARAM_MAP_SIZE (sizeof(meter_param_map) / sizeof(meter_param_map[0]))
/* 使能参数映射表 */
static const param_map_item_t enable_param_map[] = {
/* 参数ID, 参数名称, 数据类型, 数据地址, 数据大小, 描述 */
{PARAM_ENABLE_DOOR_ENABLE, "doorEnable", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "门禁使能(2位)"},
{PARAM_ENABLE_GUN_LOCK_ENA, "gunLockEna", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "枪锁使能(2位)"},
{PARAM_ENABLE_GUN_LOCK_NEG, "gunLockNeg", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "枪锁信号取反(2位)"},
{PARAM_ENABLE_AC_CONTACT_ENA, "acContactEna", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "交流接触器使能(2位)"},
{PARAM_ENABLE_GUN_HOMING, "gunHoming", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "枪归位信号有无(2位)"},
{PARAM_ENABLE_GB_ENABLE, "gbEnable", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "国标使能(2位)"},
{PARAM_ENABLE_LCD_ENABLE, "lcdEnable", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "液晶使能(2位)"},
{PARAM_ENABLE_AUX_POWER, "auxPower", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "辅助电压返回状态使能(2位)"},
{PARAM_ENABLE_RELIEF_EN, "reliefEn", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "泄放使能(2位)"},
{PARAM_ENABLE_YE_LEN_EN, "yeLenEn", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "液冷通讯使能(2位)"},
{PARAM_ENABLE_AB_COMM_EN, "abCommEn", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "主副班通讯使能(2位)"},
{PARAM_ENABLE_SCREEN_SAVER_EN, "screenSaverEn", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "UI屏保显示使能(2位)"},
{PARAM_ENABLE_PLUG_EN, "plugEn", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "即插即充使能(2位)"},
{PARAM_ENABLE_UI_ENGLISH_EN, "uiEnglishEn", PARAM_TYPE_BIT,
(void*)&g_enable_bit_param_marker, sizeof(uint32_t), "UI界面英语使能(2位)"},
{PARAM_ENABLE_DC_CONTACT_EN, "dcContactEn", PARAM_TYPE_BIT,
(void *)&g_enable_bit_param_marker, sizeof(uint32_t), "母联接触器使能(2位)"},
{PARAM_ENABLE_GUN_FAN_EN, "gunFanEn", PARAM_TYPE_BIT,
(void *)&g_enable_bit_param_marker, sizeof(uint32_t), "充电枪风扇使能(2位)"},
{PARAM_ENABLE_MDU_ZERO_POW_EN, "mduZeroPowEn", PARAM_TYPE_BIT,
(void *)&g_enable_bit_param_marker, sizeof(uint32_t), "模块零功脉冲使能(2位)"},
{PARAM_ENABLE_LED_GB_EN, "ledGbEn", PARAM_TYPE_BIT,
(void *)&g_enable_bit_param_marker, sizeof(uint32_t), "LED国标使能(2位)"},
};
/* 使能参数映射表大小 */
#define ENABLE_PARAM_MAP_SIZE (sizeof(enable_param_map) / sizeof(enable_param_map[0]))
/* 费率参数映射表 */
static const param_map_item_t fee_param_map[] = {
/* 参数ID, 参数名称, 数据类型, 数据地址, 数据大小, 描述 */
{PARAM_FEE_MODEL_NO, "feeModelNo", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.s_fee_model.u8_model_no, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.u8_model_no), "费率编号"},
{PARAM_FEE_FEE_CNT, "feeCnt", PARAM_TYPE_UINT8,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.u8_feeCnt, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.u8_feeCnt), "费率条数"},
/* 费率类型0-29的费率和服务费 */
{PARAM_FEE_TYPE_0_RATE, "feeType0Rate", PARAM_TYPE_UINT32,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[0].u32_rate, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[0].u32_rate), "费率1电费 0.00001"},
{PARAM_FEE_TYPE_0_SERVICE, "feeType0Service", PARAM_TYPE_UINT32,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[0].u32_sevice, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[0].u32_sevice), "费率1服务费 0.00001"},
{PARAM_FEE_TYPE_1_RATE, "feeType1Rate", PARAM_TYPE_UINT32,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[1].u32_rate, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[1].u32_rate), "费率2电费 0.00001"},
{PARAM_FEE_TYPE_1_SERVICE, "feeType1Service", PARAM_TYPE_UINT32,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[1].u32_sevice, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[1].u32_sevice), "费率2服务费 0.00001"},
{PARAM_FEE_TYPE_2_RATE, "feeType2Rate", PARAM_TYPE_UINT32,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[2].u32_rate, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[2].u32_rate), "费率3电费 0.00001"},
{PARAM_FEE_TYPE_2_SERVICE, "feeType2Service", PARAM_TYPE_UINT32,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[2].u32_sevice, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[2].u32_sevice), "费率3服务费 0.00001"},
{PARAM_FEE_TYPE_3_RATE, "feeType3Rate", PARAM_TYPE_UINT32,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[3].u32_rate, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[3].u32_rate), "费率4电费 0.00001"},
{PARAM_FEE_TYPE_3_SERVICE, "feeType3Service", PARAM_TYPE_UINT32,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[3].u32_sevice, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[3].u32_sevice), "费率4服务费 0.00001"},
{PARAM_FEE_TYPE_4_RATE, "feeType4Rate", PARAM_TYPE_UINT32,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[4].u32_rate, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[4].u32_rate), "费率5电费 0.00001"},
{PARAM_FEE_TYPE_4_SERVICE, "feeType4Service", PARAM_TYPE_UINT32,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[4].u32_sevice, sizeof(g_t_share_data.t_sys_var_cfg.s_fee_model.s_fee_data[4].u32_sevice), "费率5服务费 0.00001"},
/* 时段费率类型0-95 */
{PARAM_FEE_TYPE_1_24, "feeTimeType_1_24", PARAM_TYPE_ARRAY,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.u8_fee_type[0], 24, "时段费率类型1-24"},
{PARAM_FEE_TYPE_25_48, "feeTimeType-25_48", PARAM_TYPE_ARRAY,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.u8_fee_type[24], 24, "时段费率类型25-48"},
{PARAM_FEE_TYPE_49_72, "feeTimeType_49_72", PARAM_TYPE_ARRAY,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.u8_fee_type[48], 24, "时段费率类型49-72"},
{PARAM_FEE_TYPE_73_96, "feeTimeType_73_96", PARAM_TYPE_ARRAY,
(void*)&g_t_share_data.t_sys_var_cfg.s_fee_model.u8_fee_type[72], 24, "时段费率类型73-96"},
};
/* 费率参数映射表大小 */
#define FEE_PARAM_MAP_SIZE (sizeof(fee_param_map) / sizeof(fee_param_map[0]))
/* SDK参数映射表 */
static const param_map_item_t sdk_param_map[] = {
/* 参数ID, 参数名称, 数据类型, 数据地址, 数据大小, 描述 */
{PARAM_SDK_PRODUCT_KEY, "productKey", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.s_sdk_data.product_key, sizeof(g_t_share_data.t_sys_var_cfg.s_sdk_data.product_key), "产品秘钥"},
{PARAM_SDK_DEVICE_NAME, "deviceName", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.s_sdk_data.device_name, sizeof(g_t_share_data.t_sys_var_cfg.s_sdk_data.device_name), "资产码"},
{PARAM_SDK_DEVICE_SECRET, "deviceSecret", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.s_sdk_data.device_secret, sizeof(g_t_share_data.t_sys_var_cfg.s_sdk_data.device_secret), "设备密钥"},
{PARAM_SDK_DEVICE_REG_CODE, "deviceRegCode", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.s_sdk_data.device_reg_code, sizeof(g_t_share_data.t_sys_var_cfg.s_sdk_data.device_reg_code), "注册码"},
{PARAM_SDK_DEVICE_UID, "deviceUid", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.s_sdk_data.device_uid, sizeof(g_t_share_data.t_sys_var_cfg.s_sdk_data.device_uid), "出厂编码"},
{PARAM_SDK_FIRMWARE_VERSION, "firmwareVersion", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.s_sdk_data.firmware_version, sizeof(g_t_share_data.t_sys_var_cfg.s_sdk_data.firmware_version), "固件版本信息"},
};
/* SDK参数映射表大小 */
#define SDK_PARAM_MAP_SIZE (sizeof(sdk_param_map) / sizeof(sdk_param_map[0]))
/* 二维码参数映射表 */
static const param_map_item_t qrcode_param_map[] = {
/* 参数ID, 参数名称, 数据类型, 数据地址, 数据大小, 描述 */
{PARAM_QRCODE_GUN1, "gun1QRCode", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.QRDisplay[0], sizeof(g_t_share_data.t_sys_var_cfg.QRDisplay[0]), "枪1二维码"},
{PARAM_QRCODE_GUN2, "gun2QRCode", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.QRDisplay[1], sizeof(g_t_share_data.t_sys_var_cfg.QRDisplay[1]), "枪2二维码"},
{PARAM_QRCODE_CUSTOM_VER, "customVersion", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.custom_ver, sizeof(g_t_share_data.t_sys_var_cfg.custom_ver), "定制版本信息"},
{PARAM_QRCODE_APN_STR, "apnStr", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.apn_str, sizeof(g_t_share_data.t_sys_var_cfg.apn_str), "4G APN"},
{PARAM_QRCODE_OCPP_AUTH_KEY, "ocppAuthKey", PARAM_TYPE_STRING,
(void*)g_t_share_data.t_sys_var_cfg.ocpp_auth_key, sizeof(g_t_share_data.t_sys_var_cfg.ocpp_auth_key), "OCPP鉴权密钥"},
};
/* 二维码参数映射表大小 */
#define QRCODE_PARAM_MAP_SIZE (sizeof(qrcode_param_map) / sizeof(qrcode_param_map[0]))
/* 获取各参数类型映射表的函数 */
/**
* @brief 获取基本参数映射表
* @retval 参数映射表指针
*/
const param_map_item_t* param_get_basic_map(void)
{
return basic_param_map;
}
/**
* @brief 获取基本参数映射表大小
* @retval 参数映射表大小
*/
uint16_t param_get_basic_map_size(void)
{
return BASIC_PARAM_MAP_SIZE;
}
/**
* @brief 获取网络参数映射表
* @retval 参数映射表指针
*/
const param_map_item_t* param_get_network_map(void)
{
return network_param_map;
}
/**
* @brief 获取网络参数映射表大小
* @retval 参数映射表大小
*/
uint16_t param_get_network_map_size(void)
{
return NETWORK_PARAM_MAP_SIZE;
}
/**
* @brief 获取电表参数映射表
* @retval 参数映射表指针
*/
const param_map_item_t* param_get_meter_map(void)
{
return meter_param_map;
}
/**
* @brief 获取电表参数映射表大小
* @retval 参数映射表大小
*/
uint16_t param_get_meter_map_size(void)
{
return METER_PARAM_MAP_SIZE;
}
/**
* @brief 获取使能参数映射表
* @retval 参数映射表指针
*/
const param_map_item_t* param_get_enable_map(void)
{
return enable_param_map;
}
/**
* @brief 获取使能参数映射表大小
* @retval 参数映射表大小
*/
uint16_t param_get_enable_map_size(void)
{
return ENABLE_PARAM_MAP_SIZE;
}
/**
* @brief 获取费率参数映射表
* @retval 参数映射表指针
*/
const param_map_item_t* param_get_fee_map(void)
{
return fee_param_map;
}
/**
* @brief 获取费率参数映射表大小
* @retval 参数映射表大小
*/
uint16_t param_get_fee_map_size(void)
{
return FEE_PARAM_MAP_SIZE;
}
/**
* @brief 获取SDK参数映射表
* @retval 参数映射表指针
*/
const param_map_item_t* param_get_sdk_map(void)
{
return sdk_param_map;
}
/**
* @brief 获取SDK参数映射表大小
* @retval 参数映射表大小
*/
uint16_t param_get_sdk_map_size(void)
{
return SDK_PARAM_MAP_SIZE;
}
/**
* @brief 获取二维码参数映射表
* @retval 参数映射表指针
*/
const param_map_item_t* param_get_qrcode_map(void)
{
return qrcode_param_map;
}
/**
* @brief 获取二维码参数映射表大小
* @retval 参数映射表大小
*/
uint16_t param_get_qrcode_map_size(void)
{
return QRCODE_PARAM_MAP_SIZE;
}
/**
* @brief 将参数类型枚举转换为字符串
* @param type 参数类型枚举
* @retval 类型字符串
*/
const char* param_type_to_string(param_data_type_t type)
{
switch (type) {
case PARAM_TYPE_STRING: return "string";
case PARAM_TYPE_UINT8: return "uint8";
case PARAM_TYPE_UINT16: return "uint16";
case PARAM_TYPE_UINT32: return "uint32";
case PARAM_TYPE_FLOAT: return "float";
case PARAM_TYPE_INT: return "int";
case PARAM_TYPE_ARRAY: return "array";
case PARAM_TYPE_BIT: return "bit";
default: return "unknown";
}
}
/**
* @brief 根据参数ID获取或设置使能参数的位字段值
* @param param_id 参数IDparam_enable_enum_t枚举值)
* @param op_flag 操作标志:0为获取数据,1为设置数据
* @param value 当op_flag=1时,要设置的值;当op_flag=0时,忽略此参数
* @retval 当op_flag=0时返回位字段值(0-3,因为每个位字段是2位),当op_flag=1时返回0表示成功,非0表示失败
*/
uint32_t param_get_enable_bit_value(uint16_t param_id, uint8_t op_flag, uint32_t value)
{
/* 直接访问U_ENABLE_FALG结构体中的位字段成员 */
switch (param_id) {
case PARAM_ENABLE_DOOR_ENABLE:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_doorEnable;
} else {
if (value > 3) return 1; /* 值超出范围(2位最大为3 */
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_doorEnable = value;
return 0;
}
case PARAM_ENABLE_GUN_LOCK_ENA:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_gunLockEna;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_gunLockEna = value;
return 0;
}
case PARAM_ENABLE_GUN_LOCK_NEG:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_gunLockNeg;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_gunLockNeg = value;
return 0;
}
case PARAM_ENABLE_AC_CONTACT_ENA:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_AcContactEna;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_AcContactEna = value;
return 0;
}
case PARAM_ENABLE_GUN_HOMING:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_gunHoming;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_gunHoming = value;
return 0;
}
case PARAM_ENABLE_GB_ENABLE:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_GBEnable;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_GBEnable = value;
return 0;
}
case PARAM_ENABLE_LCD_ENABLE:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_LcdEnable;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_LcdEnable = value;
return 0;
}
case PARAM_ENABLE_AUX_POWER:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_auxpower;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_auxpower = value;
return 0;
}
case PARAM_ENABLE_RELIEF_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_reliefen;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_reliefen = value;
return 0;
}
case PARAM_ENABLE_YE_LEN_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_YeLenEn;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_YeLenEn = value;
return 0;
}
case PARAM_ENABLE_AB_COMM_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_ABcommEn;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_ABcommEn = value;
return 0;
}
case PARAM_ENABLE_SCREEN_SAVER_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_ScreenSaverEn;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_ScreenSaverEn = value;
return 0;
}
case PARAM_ENABLE_PLUG_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_PlugEn;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_PlugEn = value;
return 0;
}
case PARAM_ENABLE_UI_ENGLISH_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_uiEnglishEn;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_uiEnglishEn = value;
return 0;
}
case PARAM_ENABLE_DC_CONTACT_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_dcBusEn;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_dcBusEn = value;
return 0;
}
case PARAM_ENABLE_GUN_FAN_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_gunFanEn;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_gunFanEn = value;
return 0;
}
case PARAM_ENABLE_MDU_ZERO_POW_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_mduzeropowEn;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_mduzeropowEn = value;
return 0;
}
case PARAM_ENABLE_LED_GB_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_ledGbEn;
} else {
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.u_enable.bit_enable.bit_ledGbEn = value;
return 0;
}
default:
return 0; /* 未知参数ID */
}
}
/**
* @brief 根据参数ID获取或设置网络连接参数的位字段值
* @param param_id 参数IDparam_network_enum_t枚举值)
* @param op_flag 操作标志:0为获取数据,1为设置数据
* @param value 当op_flag=1时,要设置的值;当op_flag=0时,忽略此参数
* @retval 当op_flag=0时返回位字段值,当op_flag=1时返回0表示成功,非0表示失败
*/
uint32_t param_get_netcomm_bit_value(uint16_t param_id, uint8_t op_flag, uint32_t value)
{
/* 直接访问U_NET_COMM_PARA结构体中的位字段成员 */
switch (param_id) {
case PARAM_NETWORK_PROGRAM_TYPE:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_program_type;
} else {
/* program_type是2位字段,最大值为3 */
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_program_type = value;
return 0;
}
case PARAM_NETWORK_NET_A_TYPE:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_netA_type;
} else {
/* netA_type是2位字段,最大值为3 */
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_netA_type = value;
return 0;
}
case PARAM_NETWORK_NET_B_TYPE:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_netB_type;
} else {
/* netB_type是2位字段,最大值为3 */
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_netB_type = value;
return 0;
}
case PARAM_NETWORK_PLAT_A_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_platA_en;
} else {
/* platA_en是1位字段,最大值为1 */
if (value > 1) return 1;
g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_platA_en = value;
return 0;
}
case PARAM_NETWORK_PLAT_B_EN:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_platB_en;
} else {
/* platB_en是1位字段,最大值为1 */
if (value > 1) return 1;
g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_platB_en = value;
return 0;
}
case PARAM_NETWORK_PLAT_A_TYPE:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_platA_type;
} else {
/* platA_type是2位字段,最大值为3 */
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_platA_type = value;
return 0;
}
case PARAM_NETWORK_PLAT_B_TYPE:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_platB_type;
} else {
/* platB_type是2位字段,最大值为3 */
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_platB_type = value;
return 0;
}
case PARAM_NETWORK_SIM_ANP_TYPE:
if (op_flag == 0) {
return g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_sim_anp_type;
} else {
/* sim_anp_type是2位字段,最大值为3 */
if (value > 3) return 1;
g_t_share_data.t_sys_fix_cfg.s_net_cfg.u_net_comm_para.bits.bit_sim_anp_type = value;
return 0;
}
default:
return 0; /* 未知参数ID */
}
}
/**
* @brief 根据参数映射表项获取参数值字符串
* @param item 参数映射表项
* @param buffer 输出缓冲区
* @param size 缓冲区大小
* @retval 0成功,-1失败
*/
int param_get_value_as_string(const param_map_item_t *item, char *buffer, uint32_t size)
{
if (item == NULL || buffer == NULL || size == 0) {
return -1;
}
switch (item->data_type) {
case PARAM_TYPE_STRING:
snprintf(buffer, size, "%s", (char*)item->data_addr);
break;
case PARAM_TYPE_UINT8:
snprintf(buffer, size, "%u", *(uint8_t*)item->data_addr);
break;
case PARAM_TYPE_UINT16:
snprintf(buffer, size, "%u", *(uint16_t*)item->data_addr);
break;
case PARAM_TYPE_UINT32:
snprintf(buffer, size, "%u", *(uint32_t*)item->data_addr);
break;
case PARAM_TYPE_FLOAT:
snprintf(buffer, size, "%.2f", *(float*)item->data_addr);
break;
case PARAM_TYPE_INT:
snprintf(buffer, size, "%d", *(int*)item->data_addr);
break;
case PARAM_TYPE_ARRAY: {
/* 数组类型:显示为十进制字节序列 */
uint8_t *data = (uint8_t*)item->data_addr;
uint32_t data_size = item->data_size;
uint32_t i;
char *ptr = buffer;
uint32_t remaining = size;
if (data_size == 0) {
snprintf(buffer, size, "[]");
break;
}
/* 开始构建数组字符串 */
*ptr++ = '[';
remaining--;
for (i = 0; i < data_size; i++) {
/* 检查剩余空间是否足够 */
if (remaining < 10) { /* 预留空间给当前数字和可能的逗号、结束符 */
/* 如果空间不足,用"..."表示剩余内容 */
if (remaining >= 4) {
strcpy(ptr, "...");
ptr += 3;
remaining -= 3;
}
break;
}
if (i > 0) {
*ptr++ = ',';
remaining--;
}
/* 格式化当前数字 */
int written = snprintf(ptr, remaining, "%d", data[i]);
if (written < 0 || written >= (int)remaining) {
/* 格式化失败,用"..."表示剩余内容 */
if (remaining >= 4) {
strcpy(ptr, "...");
ptr += 3;
remaining -= 3;
}
break;
}
ptr += written;
remaining -= written;
}
/* 添加结束括号 */
if (remaining >= 2) {
*ptr++ = ']';
*ptr = '\0';
} else {
/* 如果空间不足,确保字符串以空字符结尾 */
if (size > 0) {
buffer[size - 1] = '\0';
}
}
break;
}
case PARAM_TYPE_BIT: {
/* 检查是否为使能参数的位字段 */
if (item->data_addr == (void*)&g_enable_bit_param_marker) {
/* 使用param_get_enable_bit_value函数获取值(操作标志为0) */
uint32_t bit_value = param_get_enable_bit_value(item->param_id, 0, 0);
/* 显示为十进制 */
snprintf(buffer, size, "%u", bit_value);
return 0;
}
/* 检查是否为网络连接参数的位字段 */
else if (item->data_addr == (void*)&g_netcomm_bit_param_marker) {
/* 使用param_get_netcomm_bit_value函数获取值(操作标志为0) */
uint32_t bit_value = param_get_netcomm_bit_value(item->param_id, 0, 0);
/* 显示为十进制 */
snprintf(buffer, size, "%u", bit_value);
return 0;
}
else {
/* data_addr为NULL且不是标记变量的位字段参数 */
snprintf(buffer, size, "N/A");
return -1;
}
break;
}
default:
snprintf(buffer, size, "unknown");
return -1;
}
return 0;
}
/**
* @brief 根据参数映射表项设置参数值(从字符串)
* @param item 参数映射表项
* @param value_str 参数值字符串
* @retval 0成功,-1失败
*/
int param_set_value_from_string(const param_map_item_t *item, const char *value_str)
{
if (item == NULL || value_str == NULL) {
return -1;
}
switch (item->data_type) {
case PARAM_TYPE_STRING:
/* 字符串类型:直接复制,确保不超过缓冲区大小 */
if (item->data_addr == NULL) {
printf("[PARAM] String parameter data_addr is NULL: %s\n", item->param_name);
return -1;
}
strncpy((char*)item->data_addr, value_str, item->data_size - 1);
((char*)item->data_addr)[item->data_size - 1] = '\0';
break;
case PARAM_TYPE_UINT8: {
/* uint8类型:转换为整数 */
if (item->data_addr == NULL) {
printf("[PARAM] UINT8 parameter data_addr is NULL: %s\n", item->param_name);
return -1;
}
char *endptr;
long value = strtol(value_str, &endptr, 0);
if (endptr == value_str || *endptr != '\0') {
return -1; /* 转换失败 */
}
if (value < 0 || value > 255) {
return -1; /* 超出范围 */
}
*(uint8_t*)item->data_addr = (uint8_t)value;
break;
}
case PARAM_TYPE_UINT16: {
/* uint16类型:转换为整数 */
if (item->data_addr == NULL) {
printf("[PARAM] UINT16 parameter data_addr is NULL: %s\n", item->param_name);
return -1;
}
char *endptr;
long value = strtol(value_str, &endptr, 0);
if (endptr == value_str || *endptr != '\0') {
return -1; /* 转换失败 */
}
if (value < 0 || value > 65535) {
return -1; /* 超出范围 */
}
*(uint16_t*)item->data_addr = (uint16_t)value;
break;
}
case PARAM_TYPE_UINT32: {
/* uint32类型:转换为整数 */
if (item->data_addr == NULL) {
printf("[PARAM] UINT32 parameter data_addr is NULL: %s\n", item->param_name);
return -1;
}
char *endptr;
unsigned long value = strtoul(value_str, &endptr, 0);
if (endptr == value_str || *endptr != '\0') {
return -1; /* 转换失败 */
}
if (value > 0xFFFFFFFFUL) {
return -1; /* 超出范围 */
}
*(uint32_t*)item->data_addr = (uint32_t)value;
break;
}
case PARAM_TYPE_FLOAT: {
/* 浮点类型:转换为浮点数 */
if (item->data_addr == NULL) {
printf("[PARAM] FLOAT parameter data_addr is NULL: %s\n", item->param_name);
return -1;
}
char *endptr;
float value = strtof(value_str, &endptr);
if (endptr == value_str || *endptr != '\0') {
return -1; /* 转换失败 */
}
*(float*)item->data_addr = value;
break;
}
case PARAM_TYPE_INT: {
/* 整数类型:转换为整数 */
if (item->data_addr == NULL) {
printf("[PARAM] INT parameter data_addr is NULL: %s\n", item->param_name);
return -1;
}
char *endptr;
long value = strtol(value_str, &endptr, 0);
if (endptr == value_str || *endptr != '\0') {
return -1; /* 转换失败 */
}
*(int*)item->data_addr = (int)value;
break;
}
case PARAM_TYPE_ARRAY: {
/* 数组类型:解析逗号分隔的十进制整数数组 */
if (item->data_addr == NULL) {
printf("[PARAM] ARRAY parameter data_addr is NULL: %s\n", item->param_name);
return -1;
}
uint8_t *data = (uint8_t*)item->data_addr;
uint32_t data_size = item->data_size;
const char *ptr = value_str;
uint32_t index = 0;
/* 跳过开头的'['(如果有) */
if (*ptr == '[') {
ptr++;
}
while (*ptr != '\0' && index < data_size) {
/* 跳过空格 */
while (*ptr == ' ' || *ptr == '\t' || *ptr == '\n' || *ptr == '\r') {
ptr++;
}
if (*ptr == '\0' || *ptr == ']') {
break;
}
/* 解析数字 */
char *endptr;
long value = strtol(ptr, &endptr, 0);
if (endptr == ptr) {
return -1; /* 转换失败 */
}
if (value < 0 || value > 255) {
return -1; /* 超出范围 */
}
data[index++] = (uint8_t)value;
ptr = endptr;
/* 跳过逗号 */
//while (*ptr == ' ' || *ptr == '\t' || *ptr == '\n' || *ptr == '\r') {
while (*ptr == '\t' || *ptr == '\n' || *ptr == '\r') {
ptr++;
}
if (*ptr == ',') {
ptr++;
}
}
/* 填充剩余部分为0 */
while (index < data_size) {
data[index++] = 0;
}
break;
}
case PARAM_TYPE_BIT: {
/* 位字段类型:支持二进制(0b开头)或十进制格式 */
char *endptr;
unsigned long value;
/* 检查是否为二进制格式 */
if (value_str[0] == '0' && (value_str[1] == 'b' || value_str[1] == 'B')) {
/* 二进制格式:解析二进制字符串 */
value = strtoul(value_str + 2, &endptr, 2);
} else {
/* 十进制格式 */
value = strtoul(value_str, &endptr, 0);
}
if (endptr == value_str || *endptr != '\0') {
return -1; /* 转换失败 */
}
/* 通过data_addr指向的全局变量来区分参数类型 */
if (item->data_addr == (void*)&g_enable_bit_param_marker) {
/* 使能参数的位字段:使用param_get_enable_bit_value函数设置值(操作标志为1) */
uint32_t result = param_get_enable_bit_value(item->param_id, 1, (uint32_t)value);
if (result != 0) {
printf("[PARAM] Failed to set enable bit field %s to value %lu\n", item->param_name, value);
return -1;
}
return 0;
}
/* 检查是否为网络连接参数的位字段 */
else if (item->data_addr == (void*)&g_netcomm_bit_param_marker) {
/* 网络连接参数的位字段:使用param_get_netcomm_bit_value函数设置值(操作标志为1) */
uint32_t result = param_get_netcomm_bit_value(item->param_id, 1, (uint32_t)value);
if (result != 0) {
printf("[PARAM] Failed to set netcomm bit field %s to value %lu\n", item->param_name, value);
return -1;
}
return 0;
}
/* 其他位字段参数(data_addr不为NULL且不是标记变量) */
else if (item->data_addr != NULL) {
/* 普通位字段参数:直接设置内存中的值 */
/* 根据数据大小设置值 */
if (item->data_size == sizeof(uint8_t)) {
if (value > 0xFF) {
return -1; /* 超出范围 */
}
*(uint8_t*)item->data_addr = (uint8_t)value;
} else if (item->data_size == sizeof(uint16_t)) {
if (value > 0xFFFF) {
return -1; /* 超出范围 */
}
*(uint16_t*)item->data_addr = (uint16_t)value;
} else if (item->data_size == sizeof(uint32_t)) {
if (value > 0xFFFFFFFFUL) {
return -1; /* 超出范围 */
}
*(uint32_t*)item->data_addr = (uint32_t)value;
} else {
return -1; /* 不支持的数据大小 */
}
return 0;
} else {
/* data_addr为NULL且不是标记变量的位字段参数 */
printf("[PARAM] Unknown bit field parameter cannot be set: %s\n", item->param_name);
return -1;
}
break;
}
default:
return -1; /* 不支持的数据类型 */
}
return 0;
}
/**
* @brief 根据参数ID获取参数映射表项
* @param param_id 参数ID
* @retval 参数映射表项指针,NULL表示未找到
*/
const param_map_item_t* param_get_map_item_by_id(uint16_t param_id)
{
uint16_t i;
for (i = 0; i < BASIC_PARAM_MAP_SIZE; i++) {
if (basic_param_map[i].param_id == param_id) {
return &basic_param_map[i];
}
}
return NULL;
}
#endif