ADD 1.添加调试工具;

main
wangbo 1 month ago
parent 1936bbe858
commit 2a270426a1

@ -54,26 +54,17 @@
enum DebugCommand enum DebugCommand
{ {
DEBUG_CONFIG_FACTORY_GET = 1, // 获取配置 DEBUG_CONFIG_FACTORY_GET = 1, /* 获取配置 */
DEBUG_CONFIG_FACTORY_SET = 2, // 设置配置 DEBUG_CONFIG_FACTORY_SET = 2, /* 设置配置 */
DEBUG_CONFIG_GLOBAL_SET = 3, /* 设备全局参数设置 */ DEBUG_CONFIG_GLOBAL_GET = 3, /* 设备全局参数获取 */
DEBUG_CONFIG_GLOBAL_GET = 4, /* 设备全局参数获取 */ DEBUG_CONFIG_GLOBAL_SET = 4, /* 设备全局参数设置 */
DEBUG_CONFIG_PORT_SET = 5, /* 设备端口参数设置 */ DEBUG_CONFIG_PORT_GET = 5, /* 设备端口参数获取 */
DEBUG_CONFIG_PORT_GET = 6, /* 设备端口参数获取 */ DEBUG_CONFIG_PORT_SET = 6, /* 设备端口参数设置 */
DEBUG_REBOOT = 7, // 重启 DEBUG_UPGRADE_DATA = 7, /* 固件升级 */
DEBUG_TIME_SET = 8, // 对时 DEBUG_DEVICE_STATUS = 8, /* 查询设备状态 */
DEBUG_TIME_SET = 9, /* 对时 */
DEBUG_REBOOT = 10, /* 重启 */
DEBUG_ADJSUT_COEFFICIENT_GET = 9, // 获取校准系数
DEBUG_ADJSUT_COEFFICIENT_SET = 10, // 设置校准系数
DEBUG_NOISE_POST = 11, // 自动获取采样值
DEBUG_NOISE_CAREFOR = 12, // 使能自动获取采样值功能
DEBUG_DEVICE_STATUS = 13, // 查询设备状态后台连接、4G连接
DEBUG_ARM_UPGRADE = 0x0050, // ARM 升级
DEBUG_FPGA1_UPGRADE = 0x0051, // FPGA 板卡升级
DEBUG_UPGRADE_ALL = 0x0056 // ARM 和 FPGA 板卡升级
}; };
#define BITMAP_SAVE_FILE (1 << 0) #define BITMAP_SAVE_FILE (1 << 0)
@ -81,27 +72,15 @@ enum DebugCommand
#define DEBUG_MANAGE_TOOL_PORT (10050) #define DEBUG_MANAGE_TOOL_PORT (10050)
/* Exported types ------------------------------------------------------------*/ /* Exported types ------------------------------------------------------------*/
/* 设备状态. */ /* 设备状态 */
typedef struct { typedef struct
uint32_t idx; // 编号. {
uint32_t UTC_TimeScale; // UTC 时标 uint32_t utc; // 系统当前时间
float F50Hz_Frequency; // 同步 50Hz 频率. uint32_t run_time; // 运行时间
uint8_t F50Hz_SynStatus; // 同步状态. uint8_t is_server_link; // 后台连接状态
uint8_t dau_status; // 插件状态. uint8_t reserved[7];
uint16_t sensor_status; // 传感器断线状态. } debug_pkt_status_t;
uint16_t is_server_link; // 是否连接上后台.
uint16_t version; // 软件版本
uint32_t communication_time; // 上一次通讯的时间
uint32_t run_time; // 设备运行时间
} debug_pkt_status_t;
/* 报文头. */
typedef struct{
uint16_t head; // 0x55aa.
uint16_t cmd; // 命令.
uint32_t len; // 包长.
} debug_pkt_head_t;
/* 调试工具全局结构 */ /* 调试工具全局结构 */
typedef struct{ typedef struct{
@ -113,9 +92,9 @@ typedef struct{
} debug_ctrl_t; } debug_ctrl_t;
/* 报文头结构. */ /* 报文头结构. */
#pragma pack(push, 1)
typedef struct{ typedef struct{
uint16_t head; // 0x55aa. uint16_t head; // 0x55aa.
uint32_t len; uint32_t len;
uint8_t dev_type_m; uint8_t dev_type_m;
uint8_t dev_type_s; uint8_t dev_type_s;
@ -125,7 +104,7 @@ typedef struct{
uint16_t pkt_id; uint16_t pkt_id;
uint8_t reserve[18]; uint8_t reserve[18];
} dbg_pkt_head_t; } dbg_pkt_head_t;
#pragma pack(pop)
/* 基础信息 */ /* 基础信息 */
typedef struct{ typedef struct{
@ -142,61 +121,67 @@ typedef struct{
uint8_t FPGA_version[32]; // fpga版本 uint8_t FPGA_version[32]; // fpga版本
uint32_t ip; // 本机(服务器) IP. uint32_t ip; // 本机(服务器) IP.
uint32_t mask; // 本机(服务器) MASK. uint32_t mask; // 本机(服务器) MASK.
uint32_t gw; // 本机(服务器)网关 uint32_t gw; // 本机(服务器)网关
uint8_t mac[6]; // MAC地址. uint8_t mac[6]; // MAC地址.
uint16_t csg_port; // 后台端口号. uint16_t csg_port; // 后台端口号.
uint32_t csg_ipv4; // 后台 IP. uint32_t csg_ipv4; // 后台 IP.
uint32_t running_time; //运行时间 uint32_t running_time; //运行时间
} dbg_device_info_t; } dbg_device_info_t;
/* 全局配置 */ /* 全局配置 */
#pragma pack(push, 1)
typedef struct{ typedef struct{
uint16_t power_frequency; // 工频频率, 单位: 0.1Hz uint32_t sample_frequency; //采样频率 MHz
uint16_t trend_period; // 趋势数据上送周期, 单位: 秒. uint32_t trigger_sample_numbers; //触发采样长度 us
uint8_t sync_mode; // 同步方式 1: PT 同步 2: 内同步(默认) 3: 外接信号同步. uint32_t pre_trigger_percent; //预触发百分比 0-100%
uint8_t heartbeat_period; // 心跳包周期, 单位: 分钟. uint32_t trigLevel; //触发电平 mv
uint8_t pps_mode; // pps 主从模式 PD_PPS_XXX. uint32_t trend_up_period; //趋势上升周期
uint8_t reserved[1]; uint16_t heartbeat_period; //心跳包周期 s
uint16_t trend_storage; // 趋势存储文件数量阈值. uint8_t ch_en_mask; //通道使能 bit0-7对应ch1-ch8
uint16_t event_storage; // 事件存储文件数量阈值 uint8_t sync_mode; //同步模式 0-外同步 1-内同步
} dbg_global_config_t; uint32_t pt_internal_period; //内同步频率 40~300
#pragma pack(pop) uint8_t reserved[8]; //预留
} dbg_global_config_t;
/* 端口配置. */ /* 端口配置. */
typedef struct { typedef struct{
uint8_t vport; // 通道编号. uint8_t vport; // 通道编号.
uint8_t port_type; // 采集通道类型 , 1 表示特高频局放 2 表示超声局放 3 表示 TEV 4 表示高频. uint8_t channel_type; // 通道类型.
uint8_t filter; // 滤波器类型 1: 低频段 2: 全频段 3: 窄频段 4: 高频段 uint8_t reserved1[2];
uint8_t sensor_type; // 0: 无配置; 1: UHF信号传感器; 2: UHF噪声传感器 ; 3: UHF信号传感器, 关联噪声降噪. uint32_t filter_frequency; // 过滤频率(32位按位设置)
uint8_t is_auto_noise; // 是否自动调整降噪等级. int16_t rise_time; // 上升时间(10%到90%峰值)
uint8_t denoise_type; // 0-无配置 1-自动 2-手动降噪 int16_t peak_time; // 峰值时间
uint16_t denoise_variance; // 方差降噪系数, 单位: 1% int16_t fall_time; // 下降时间(90%到10%峰值)
int16_t pulse_width; // 脉冲宽度
uint32_t event_counter_h; // 事件次数阀值高. int16_t peak_count; // 波峰数量
uint16_t event_sec_h; // 事件每秒次数阀值高. int16_t reserved2; // 保留字段(2字节)
uint16_t event_thr_h; // 事件值阈值高. int32_t signal_envelope; // 信号包络面
uint32_t event_counter_thr_h; // 事件值阈值高的次数. float signal_mean; // 信号平均值
float signal_variance; // 信号方差值
uint32_t event_counter_l; // 事件次数阀值低. int32_t primary_frequency; // 第一主频
uint16_t event_sec_l; // 事件每秒次数阀值低. int16_t primary_freq_peak; // 第一主频峰值
uint16_t event_thr_l; // 事件值阈值低. int16_t spectral_peak_count; // 谱峰个数
uint32_t event_counter_thr_l; // 事件值阈值低的次数. float spectrum_mean; // 频谱均值
float spectrum_variance; // 频谱方差值
uint8_t burst_time; // 事件突发计算时间 uint8_t reserved3[32]; // 预留字段(32字节)
uint8_t reserved1[1]; } dbg_config_port_t;
uint16_t burst_thr; // 事件突发阈值
/* 升级文件包结构体 */
int16_t denoise_manual; // 手动底噪等级 typedef struct
int16_t denoise_auto; // 自动降噪水平 {
}dbg_port_config_t; uint8_t type; // 升级类型
uint8_t resverd[3];
/* 设备状态. */ uint16_t index; // 报文索引
typedef struct { uint16_t sum; // 总包数.
uint8_t csg_connect_status; // 后台连接状态. uint32_t len; // 数据包长度.
uint8_t ec20_connect_status; // 4g模块连接状态 } dbg_upgrade_data_t;
} debug_pkt_dev_connect_status_t;
/* 应答升级结构体 */
typedef struct
{
uint16_t index; // 应答包序号.
} dbg_upgrade_ack_t;
/* Exported macro ------------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/
@ -206,7 +191,7 @@ extern debug_ctrl_t debug_ctrl;
/* Extern functions ----------------------------------------------------------*/ /* Extern functions ----------------------------------------------------------*/
extern int32_t debug_handle_init(void); extern int32_t debug_handle_init(void);
extern int32_t debug_handle_init_after(void); extern int32_t debug_handle_init_after(void);
extern int32_t debug_pkt_port_state_post(void); extern int32_t debug_pkt_state_post(void);
extern void debug_upgrade_result_send(int32_t rv, char *buf); extern void debug_upgrade_result_send(int32_t rv, char *buf);
#endif #endif
#endif #endif

@ -74,7 +74,7 @@
debug_ctrl_t debug_ctrl; debug_ctrl_t debug_ctrl;
dbg_device_info_t dbg_base_config; dbg_device_info_t dbg_base_config;
dbg_global_config_t dbg_global_config; dbg_global_config_t dbg_global_config;
dbg_port_config_t dbg_port_config; dbg_config_port_t dbg_port_config;
static char buf_cmd[DEBUG_CMD_LEN]; static char buf_cmd[DEBUG_CMD_LEN];
@ -114,14 +114,13 @@ int32_t _debug_pkt_common_send(char *buf, uint16_t cmd, uint32_t data_len)
/* 获取配置报文处理. */ /* 获取配置报文处理. */
int32_t _debug_pkt_factory_cfg_get(char *buf, int len) int32_t _debug_pkt_factory_cfg_get(char *buf, int len)
{ {
uint16_t len_pkt = 0;
dbg_device_info_t *info = (dbg_device_info_t *)(buf+sizeof(dbg_pkt_head_t)); dbg_device_info_t *info = (dbg_device_info_t *)(buf+sizeof(dbg_pkt_head_t));
memset(info, 0, sizeof(dbg_device_info_t)); memset(info, 0, sizeof(dbg_device_info_t));
info->type_m = device_info.type_m; info->type_m = device_info.type_m;
info->type_s = device_info.type_s; info->type_s = device_info.type_s;
info->dev_id = device_info.dev_id; info->dev_id = device_info.dev_id;
snprintf((char*)info->hostname, PD_DEV_NUM_LEN, "%s", device_info.hostname); snprintf((char*)info->hostname, FILE_NAME_LEN, "%s", device_info.hostname);
info->factory_date = device_info.factory_date; info->factory_date = device_info.factory_date;
info->deployment_date = device_info.deployment_date; info->deployment_date = device_info.deployment_date;
info->ip = device_info.ip; info->ip = device_info.ip;
@ -138,10 +137,8 @@ int32_t _debug_pkt_factory_cfg_get(char *buf, int len)
info->csg_port = csg.server_port; info->csg_port = csg.server_port;
info->csg_ipv4 = csg.server_ip; info->csg_ipv4 = csg.server_ip;
info->running_time = start_time; info->running_time = start_time;
len_pkt += sizeof(dbg_device_info_t);
int32_t ret = _debug_pkt_common_send(buf, DEBUG_CONFIG_FACTORY_GET, len_pkt); int32_t ret = _debug_pkt_common_send(buf, DEBUG_CONFIG_FACTORY_GET, sizeof(dbg_device_info_t));
/* 发送数据. */ /* 发送数据. */
return ret; return ret;
} }
@ -161,7 +158,7 @@ int32_t _debug_pkt_factory_cfg_set(char *buf, int len)
device_info.dev_id = info->dev_id; device_info.dev_id = info->dev_id;
boottype = REBOOT_LOCAL_HOST_NAME_CHANGE; boottype = REBOOT_LOCAL_HOST_NAME_CHANGE;
} }
snprintf(device_info.hostname, PD_DEV_NUM_LEN, "%s", (const char*)info->hostname); snprintf(device_info.hostname, FILE_NAME_LEN, "%s", (const char*)info->hostname);
device_info.factory_date = info->factory_date; device_info.factory_date = info->factory_date;
device_info.deployment_date = info->deployment_date; device_info.deployment_date = info->deployment_date;
@ -227,19 +224,24 @@ int32_t _debug_pkt_factory_cfg_set(char *buf, int len)
/* 设置报文处理. */ /* 设置报文处理. */
int32_t _debug_pkt_global_cfg_set(char *pkt, int len) int32_t _debug_pkt_global_cfg_set(char *pkt, int len)
{ {
dbg_global_config_t *pnet = (dbg_global_config_t *)(pkt + sizeof(dbg_pkt_head_t)); dbg_global_config_t *config = (dbg_global_config_t *)(pkt + sizeof(csg_pkt_head_t));
pd_config.config.sample_frequency = config->sample_frequency;
//pd_config.config.power_frequency = pnet->power_frequency * 10; pd_config.config.trigger_sample_nums = config->trigger_sample_numbers;
//pd_config.config.trend_period = pnet->trend_period * 60; pd_config.config.trig_location = (config->pre_trigger_percent << 4) / 100.00;
//pd_config.config.sync_mode = pnet->sync_mode; pd_config.config.trig_threshold = config->trigLevel;
//pd_config.config.heartbeat_period = pnet->heartbeat_period; pd_config.config.trend_up_period = config->trend_up_period;
//pd_config.config.pps_mode = pnet->pps_mode; pd_config.config.heartbeat_period = config->heartbeat_period;
//pd_config.config.trend_storage = pnet->trend_storage; pd_config.config.ch_en_mask = config->ch_en_mask;
//pd_config.config.event_storage = pnet->event_storage; if (config->sync_mode == 0)
//pd_config.config.is_4G_enable = pnet->is_4G_enable; {
BITMAP_RESET(pd_config.config.pt_B_sync_mode, PD_BIT_PT);
}
else
{
BITMAP_SET(pd_config.config.pt_B_sync_mode, PD_BIT_PT);
}
pd_config.config.pt_internal_period = 1000000000UL / config->pt_internal_period;
vtysh_config_save(); vtysh_config_save();
return _debug_pkt_common_send(pkt, DEBUG_CONFIG_GLOBAL_SET, 0); return _debug_pkt_common_send(pkt, DEBUG_CONFIG_GLOBAL_SET, 0);
} }
@ -248,11 +250,24 @@ int32_t _debug_pkt_global_cfg_set(char *pkt, int len)
/* 查询用户参数查询报文处理. */ /* 查询用户参数查询报文处理. */
int32_t _debug_pkt_global_cfg_get(char *pkt, int len) int32_t _debug_pkt_global_cfg_get(char *pkt, int len)
{ {
uint16_t len_pkt = 0; dbg_global_config_t *pconfig = (dbg_global_config_t *)(pkt + sizeof(dbg_pkt_head_t));
dbg_global_config_t *pnet = (dbg_global_config_t *)(pkt + sizeof(dbg_pkt_head_t)); pconfig->sample_frequency = pd_config.config.sample_frequency;
pconfig->trigger_sample_numbers = pd_config.config.trigger_sample_nums;
pconfig->pre_trigger_percent = (uint32_t)(pd_config.config.trig_location * 100 / 16.00 + 0.5);
_debug_pkt_common_send(pkt, DEBUG_CONFIG_GLOBAL_GET, len_pkt); pconfig->trigLevel = pd_config.config.trig_threshold;
pconfig->trend_up_period = pd_config.config.trend_up_period;
pconfig->heartbeat_period = pd_config.config.heartbeat_period;
pconfig->ch_en_mask = pd_config.config.ch_en_mask;
if (IS_BITMAP_SET(pd_config.config.pt_B_sync_mode, PD_BIT_PT))
{
pconfig->sync_mode = 1;
}
else
{
pconfig->sync_mode = 0;
}
pconfig->pt_internal_period = 1000000000UL / pd_config.config.pt_internal_period;
_debug_pkt_common_send(pkt, DEBUG_CONFIG_GLOBAL_GET, sizeof(dbg_global_config_t));
return E_NONE; return E_NONE;
} }
@ -260,15 +275,75 @@ int32_t _debug_pkt_global_cfg_get(char *pkt, int len)
/* 设置报文处理. */ /* 设置报文处理. */
int32_t _debug_pkt_port_cfg_set(char *pkt, int len) int32_t _debug_pkt_port_cfg_set(char *pkt, int len)
{ {
uint8_t unit = 0;
uint8_t port = 0;
dbg_config_port_t *pnet = (dbg_config_port_t *)(pkt + sizeof(dbg_pkt_head_t));
if (dau_vport_to_port(pnet->vport, &unit, &port) != E_NONE)
{
DBG(DBG_M_DEBUG, "Pkt port %d error!\r\n", pnet->vport);
return E_ERROR;
}
pd_config.config_port[unit][port].vport = pnet->vport;
pd_config.config_port[unit][port].type = pnet->channel_type;
pd_config.config_port[unit][port].filter_frequency = pnet->filter_frequency;
pd_config.config_port[unit][port].rise_time = pnet->rise_time;
pd_config.config_port[unit][port].peak_time = pnet->peak_time;
pd_config.config_port[unit][port].fall_time = pnet->fall_time;
pd_config.config_port[unit][port].pulse_width = pnet->pulse_width;
pd_config.config_port[unit][port].peak_count = pnet->peak_count;
pd_config.config_port[unit][port].signal_envelope = pnet->signal_envelope;
pd_config.config_port[unit][port].signal_mean = pnet->signal_mean;
pd_config.config_port[unit][port].signal_variance = pnet->signal_variance;
pd_config.config_port[unit][port].primary_frequency = pnet->primary_frequency;
pd_config.config_port[unit][port].primary_freq_peak = pnet->primary_freq_peak;
pd_config.config_port[unit][port].spectral_peak_count = pnet->spectral_peak_count;
pd_config.config_port[unit][port].spectrum_mean = pnet->spectrum_mean;
pd_config.config_port[unit][port].spectrum_variance = pnet->spectrum_variance;
vtysh_config_save();
_debug_pkt_common_send(pkt, DEBUG_CONFIG_PORT_SET, 0);
return E_NONE; return E_NONE;
} }
/* 查询用户参数查询报文处理. */ /* 查询用户参数查询报文处理. */
int32_t _debug_pkt_port_cfg_get(char *pkt, int len) int32_t _debug_pkt_port_cfg_get(char *pkt, int len)
{ {
dbg_config_port_t *pnet = (dbg_config_port_t *)(pkt + sizeof(dbg_pkt_head_t));
uint8_t unit = 0;
uint8_t port = 0;
if (dau_vport_to_port(pnet->vport, &unit, &port) != E_NONE)
{
DBG(DBG_M_DEBUG, "Pkt port %d error!\r\n", pnet->vport);
return E_ERROR;
}
pnet->vport = pd_config.config_port[unit][port].vport;
pnet->channel_type = pd_config.config_port[unit][port].type;
pnet->vport = pd_config.config_port[unit][port].vport;
pnet->channel_type = pd_config.config_port[unit][port].type;
pnet->filter_frequency = pd_config.config_port[unit][port].filter_frequency;
pnet->rise_time = pd_config.config_port[unit][port].rise_time;
pnet->peak_time = pd_config.config_port[unit][port].peak_time;
pnet->fall_time = pd_config.config_port[unit][port].fall_time;
pnet->pulse_width = pd_config.config_port[unit][port].pulse_width;
pnet->peak_count = pd_config.config_port[unit][port].peak_count;
pnet->signal_envelope = pd_config.config_port[unit][port].signal_envelope;
pnet->signal_mean = pd_config.config_port[unit][port].signal_mean;
pnet->signal_variance = pd_config.config_port[unit][port].signal_variance;
pnet->primary_frequency = pd_config.config_port[unit][port].primary_frequency;
pnet->primary_freq_peak = pd_config.config_port[unit][port].primary_freq_peak;
pnet->spectral_peak_count = pd_config.config_port[unit][port].spectral_peak_count;
pnet->spectrum_mean = pd_config.config_port[unit][port].spectrum_mean;
pnet->spectrum_variance = pd_config.config_port[unit][port].spectrum_variance;
_debug_pkt_common_send(pkt, DEBUG_CONFIG_PORT_GET, sizeof(dbg_config_port_t));
return E_NONE; return E_NONE;
} }
/* 重启报文处理. */ /* 重启报文处理. */
int32_t _debug_pkt_reboot(char *buf, int len) int32_t _debug_pkt_reboot(char *buf, int len)
{ {
@ -295,198 +370,98 @@ int32_t _debug_pkt_time_set(char *buf, int len)
return E_NONE; return E_NONE;
} }
/* 数据手动设置报文处理. */
int32_t _debug_pkt_manual_col(char *buf, int len)
{
char *flag = buf + sizeof(dbg_pkt_head_t);
DBG(DBG_M_DEBUG, " 手动采集 flag : %d\r\n", (*flag) ? TRUE : FALSE);
/* 修改标志位. */
debug_ctrl.is_manual_col = (*flag) ? TRUE : FALSE;
/* 发送数据. */
return _debug_pkt_common_send(buf, DEBUG_NOISE_CAREFOR, 0);
}
/* 获取校准系数报文处理. */
int32_t _debug_pkt_adj_get(char *buf, int len)
{}
/* 获取校准系数报文处理. */
int32_t _debug_pkt_adj_set(char *buf, int len)
{}
/* 获取运行状态报文处理. */ /* 获取运行状态报文处理. */
int32_t _debug_pkt_status_get(char *buf, int len) int32_t _debug_pkt_status_get(char *buf, int len)
{ {
debug_pkt_status_t *status = (debug_pkt_status_t*)(buf + sizeof(debug_pkt_head_t)); debug_pkt_status_t *status = (debug_pkt_status_t*)(buf + sizeof(dbg_pkt_head_t));
status->utc = time(NULL);
status->idx = 0;
status->UTC_TimeScale = time(NULL);
//status->F50Hz_Frequency = dau_power_frequency_get();
status->F50Hz_SynStatus = pd_state.sync;
status->dau_status = dau_connect_get();
status->sensor_status = 0;
status->is_server_link = csg.is_connect;
status->version = version_hex;
status->communication_time = csg.communication_time;
status->run_time = start_time; status->run_time = start_time;
status->is_server_link = csg.is_connect;
_debug_pkt_common_send(buf, DEBUG_DEVICE_STATUS, sizeof(debug_pkt_status_t));
/* 发送数据. */
//return _debug_pkt_common_send(buf, DEBUG_RUN_STATUS_GET, sizeof(debug_pkt_status_t));
return E_NONE; return E_NONE;
} }
/* 获取运行状态报文处理. */ int32_t _debug_pkt_upgrade(char *pkt, int len)
int32_t _debug_pkt_dev_connect_status_get(char *buf, int len)
{
debug_pkt_dev_connect_status_t *status = (debug_pkt_dev_connect_status_t*)(buf + sizeof(dbg_pkt_head_t));
status->csg_connect_status = csg.is_connect;
DBG(DBG_M_DEBUG, " ec20_connect_status %d\r\n", status->ec20_connect_status);
DBG(DBG_M_DEBUG, " csg_connect_status %d\r\n", status->csg_connect_status);
/* 发送数据. */
return _debug_pkt_common_send(buf, DEBUG_DEVICE_STATUS, sizeof(debug_pkt_dev_connect_status_t));
}
/* CMU 升级报文处理. */
int32_t _debug_pkt_mcu_upgrade(char *buf, int len)
{ {
dbg_pkt_head_t *head = (dbg_pkt_head_t*)buf; static int fd = -1;
char *type = buf + sizeof(dbg_pkt_head_t); static uint32_t fix_len = 0;
DBG(DBG_M_DEBUG, "upgrade type is %d\r\n", type[0]); dbg_upgrade_data_t *head_msg = (dbg_upgrade_data_t*)(pkt + sizeof(dbg_pkt_head_t));
char *data = buf + sizeof(dbg_pkt_head_t) + 1; char *pdata = pkt + sizeof(dbg_pkt_head_t) + sizeof(dbg_upgrade_data_t);
dbg_upgrade_ack_t *pack = (dbg_upgrade_ack_t*)(pkt + sizeof(dbg_pkt_head_t));
int32_t size = 0;
int fd = 0; int32_t len_wr = 0;
uint32_t offset = 0;
/* 保存文件. */
fd = open(DEBUG_CMU_FILE_UPGRADE, O_WRONLY | O_CREAT | O_TRUNC, 0777); csg.is_connect = FALSE; //关闭主动上传
if (fd <= 0) /* 首保处理, 打开文件描述符, 初始化变量 */
{ if (head_msg->index == 0)
DBG(DBG_M_PD_ERR, "Open " DEBUG_CMU_FILE_UPGRADE " ERROR\r\n"); {
return E_SYS_CALL; if (fd > 0)
} {
close(fd);
fd = -1;
}
if (write(fd, data, head->len) != head->len) fd = open(PD_UPG_SOFTWARE, O_WRONLY | O_CREAT | O_TRUNC, 0777);
{ if (fd < 0)
DBG(DBG_M_PD_ERR, "Write " DEBUG_CMU_FILE_UPGRADE " ERROR\r\n"); {
return E_SYS_CALL; DBG(DBG_M_DEBUG, "Open file " PD_UPG_SOFTWARE " error!\r\n");
return E_SYS_CALL;
}
fix_len = head_msg->len;
DBG(DBG_M_DEBUG, "Receive upgrade file start.\r\n");
} }
close(fd); DBG(DBG_M_DEBUG,"type=%d,sum=%d,index=%d,len=%d,fix_len=%d\r\n", head_msg->type, head_msg->sum, head_msg->index, head_msg->len, fix_len);
//保存旧文件 /* 收包流程 */
if (rename(DEBUG_CMU_FILE, DEBUG_CMU_FILE_BAK) < 0) size = head_msg->len;
{ offset = head_msg->index * fix_len;
DBG(DBG_M_PD_ERR, "Rename " DEBUG_CMU_FILE_BAK " ERROR\r\n"); if (lseek(fd, offset, SEEK_SET) < 0)
return E_SYS_CALL;
}
// 升级新文件
if (rename(DEBUG_CMU_FILE_UPGRADE, DEBUG_CMU_FILE) < 0)
{ {
DBG(DBG_M_PD_ERR, "Rename " DEBUG_CMU_FILE_UPGRADE " ERROR\r\n"); int error = errno;
DBG(DBG_M_PD_CSG_ERR, "lseek file " PD_UPG_SOFTWARE " error: %s, fd=%d, offset=%ld\r\n",
strerror(error), fd, offset);
// 检查具体错误类型
switch(error) {
case EBADF: // 无效文件描述符
DBG(DBG_M_DEBUG, "Invalid file descriptor\r\n");
break;
case EINVAL: // 无效的 whence 或 offset
DBG(DBG_M_DEBUG, "Invalid offset or whence\r\n");
break;
case EOVERFLOW: // offset 过大
DBG(DBG_M_DEBUG, "Offset overflow\r\n");
break;
}
return E_SYS_CALL; return E_SYS_CALL;
} }
/* 发送回复. */
_debug_pkt_common_send(buf, DEBUG_ARM_UPGRADE, 0);
DBG(DBG_M_DEBUG, "reboot_system arm upgrade\r\n");
reboot_system(LOG_DEBUG, REBOOT_LOCAL_ARM_UPGRADE);
return E_NONE; len_wr = write(fd, pdata, size);
} if (len_wr != size)
/* DAU 升级报文处理. */
int32_t _debug_pkt_dau_upgrade(char *buf, int len, uint8_t bitmap)
{
dbg_pkt_head_t *head = (dbg_pkt_head_t*)buf;
char *type = buf + sizeof(dbg_pkt_head_t);
DBG(DBG_M_DEBUG, "upgrade type is %d\r\n", type[0]);
char *data = buf + sizeof(dbg_pkt_head_t) + 1;
int fd = 0;
fd = open(DEBUG_DAU_FILE_UPGRADE, O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (fd <= 0)
{ {
DBG(DBG_M_DEBUG, "Open " DEBUG_DAU_FILE_UPGRADE " ERROR\r\n"); DBG(DBG_M_DEBUG, "Write file " PD_UPG_SOFTWARE " error!\r\n");
return E_SYS_CALL; return E_SYS_CALL;
} }
if (write(fd, data, head->len) != head->len) /* 最后一个报文处理 */
{ if (head_msg->sum - 1 == head_msg->index)
DBG(DBG_M_DEBUG, "Write " DEBUG_DAU_FILE_UPGRADE " ERROR\r\n");
return E_SYS_CALL;
}
close(fd);
//保存旧文件
if (rename(DEBUG_DAU_FILE, DEBUG_DAU_FILE_BAK) < 0)
{
DBG(DBG_M_PD_ERR, "Rename " DEBUG_CMU_FILE_BAK " ERROR\r\n");
return E_SYS_CALL;
}
// 升级新文件
if (rename(DEBUG_DAU_FILE_UPGRADE, DEBUG_DAU_FILE) < 0)
{ {
DBG(DBG_M_PD_ERR, "Rename " DEBUG_CMU_FILE_UPGRADE " ERROR\r\n"); close(fd);
return E_SYS_CALL; fd = -1;
DBG(DBG_M_DEBUG, "Receive upgrade file end.\r\n");
pd_upg_start(PD_UPG_FROM_CSG, head_msg->type);
} }
pack->index = head_msg->index;
DBG(DBG_M_DEBUG, "reboot_system dau upgrade\r\n");
_debug_pkt_common_send(buf, head->cmd, 1);
reboot_system(LOG_DEBUG, REBOOT_LOCAL_ARM_UPGRADE); /* 发送应答 */
_debug_pkt_common_send(pkt, DEBUG_UPGRADE_DATA, sizeof(dbg_upgrade_ack_t));
return E_NONE; return E_NONE;
} }
int32_t _debug_all_upgrade(char *buf, int len)
{
dbg_pkt_head_t *head = (dbg_pkt_head_t*)buf;
char *data = buf + sizeof(dbg_pkt_head_t);
uint8_t type = 0;
int32_t *rt = (int32_t*)data;
int fd = 0;
int32_t rv = 0;
if (buf == NULL)
{
return E_BAD_PARAM;
}
/* 获取升级类型, 更新数据指针 */
type = *data;
data++;
/* 保存文件 */
fd = open(PD_UPG_SOFTWARE, O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (fd <= 0)
{
DBG(DBG_M_DEBUG, "Open " PD_UPG_SOFTWARE " ERROR\r\n");
return E_SYS_CALL;
}
if (write(fd, data, head->len - 1) != (head->len - 1))
{
DBG(DBG_M_DEBUG, "Write " PD_UPG_SOFTWARE " ERROR\r\n");
return E_SYS_CALL;
}
close(fd);
/* 升级 */
rv = pd_upg_start(PD_UPG_FROM_DBG, type);
if (rv != E_NONE)
{
DBG(DBG_M_DEBUG, "Write " PD_UPG_SOFTWARE " ERROR\r\n");
*rt = 1;
_debug_pkt_common_send(buf, head->cmd, 4);
}
return rv;
}
/* 报文校验. */ /* 报文校验. */
@ -545,10 +520,6 @@ int32_t _debug_pkt_process(char *buf, int32_t len)
DBG(DBG_M_DEBUG, "set DEBUG_CONFIG_GLOBAL_SET data!\r\n"); DBG(DBG_M_DEBUG, "set DEBUG_CONFIG_GLOBAL_SET data!\r\n");
_debug_pkt_port_cfg_set(buf, len); _debug_pkt_port_cfg_set(buf, len);
break; break;
case DEBUG_NOISE_CAREFOR:
_debug_pkt_manual_col(buf, len);
break;
case DEBUG_REBOOT: case DEBUG_REBOOT:
_debug_pkt_reboot(buf, len); _debug_pkt_reboot(buf, len);
@ -557,26 +528,12 @@ int32_t _debug_pkt_process(char *buf, int32_t len)
_debug_pkt_time_set(buf, len); _debug_pkt_time_set(buf, len);
break; break;
case DEBUG_ADJSUT_COEFFICIENT_GET:
_debug_pkt_adj_get(buf, len);
break;
case DEBUG_ADJSUT_COEFFICIENT_SET:
_debug_pkt_adj_set(buf, len);
break;
case DEBUG_DEVICE_STATUS: case DEBUG_DEVICE_STATUS:
_debug_pkt_dev_connect_status_get(buf, len); _debug_pkt_status_get(buf, len);
break;
case DEBUG_ARM_UPGRADE:
_debug_pkt_mcu_upgrade(buf, len);
break;
case DEBUG_FPGA1_UPGRADE:
_debug_pkt_dau_upgrade(buf, len, 0x01);
break; break;
case DEBUG_UPGRADE_DATA:
case DEBUG_UPGRADE_ALL: _debug_pkt_upgrade(buf, len);
_debug_all_upgrade(buf, len);
break; break;
default: default:
DBG(DBG_M_DEBUG, "Debug not support cmd:%x\n", head->cmd); DBG(DBG_M_DEBUG, "Debug not support cmd:%x\n", head->cmd);
break; break;
@ -611,7 +568,7 @@ int32_t _debug_pkt_recv_adhesion(char *buf, int len, int *len_recv)
state = 1; state = 1;
/* 计算剩余报文长度, 复制数据, 并计算收包总长度. */ /* 计算剩余报文长度, 复制数据, 并计算收包总长度. */
len_pkt = head->len + 10 - len; len_pkt = head->len + 32 - len;
memcpy(buf_cmd + bytes_cnt, buf, len); memcpy(buf_cmd + bytes_cnt, buf, len);
bytes_cnt += len; bytes_cnt += len;
@ -648,6 +605,7 @@ int32_t _debug_pkt_recv_adhesion(char *buf, int len, int *len_recv)
{ {
*len_recv = len_pkt; *len_recv = len_pkt;
} }
printf("@2len_pkt=%d\n", len_pkt);
} }
/* 报文没有收全, 继续等待数据. */ /* 报文没有收全, 继续等待数据. */
@ -711,7 +669,6 @@ void *_debug_pkt_recv_handle(void *arg)
{ {
/* 连接中断, 关闭 socket 和手动采样. */ /* 连接中断, 关闭 socket 和手动采样. */
DBG(DBG_M_DEBUG, "Read len %d, close fd!\r\n", len); DBG(DBG_M_DEBUG, "Read len %d, close fd!\r\n", len);
debug_ctrl.is_manual_col = FALSE;
close(debug_ctrl.fd_client); close(debug_ctrl.fd_client);
debug_ctrl.fd_client = -1; debug_ctrl.fd_client = -1;
break; break;
@ -791,9 +748,9 @@ void *_debug_accept_connect_handle()
} }
char buf[20] = {0}; char buf[20] = {0};
DBG(DBG_M_DEBUG, "new client: %s, port: %d\n", DBG(DBG_M_DEBUG, "new client: %s, port: %d fd_client=%d\n",
inet_ntop(AF_INET, &cliaddr.sin_addr, buf, sizeof(buf)), inet_ntop(AF_INET, &cliaddr.sin_addr, buf, sizeof(buf)),
ntohs(cliaddr.sin_port)); ntohs(cliaddr.sin_port), debug_ctrl.fd_client);
if (debug_ctrl.fd_client < 0) if (debug_ctrl.fd_client < 0)
{ {
@ -811,20 +768,6 @@ void *_debug_accept_connect_handle()
return NULL; return NULL;
} }
/* 用于定时将端口的状态发送给调试软件. */
void* _debug_port_state_get(void *arg)
{
/* 如果手动采样开启, 则发送数据. */
if (debug_ctrl.is_manual_col)
{
debug_pkt_port_state_post();
}
/* 重新加入定时器. */
mtimer_add(_debug_port_state_get, NULL, 1, "DEBUG_PORT_STATE_GET");
return NULL;
}
/* Interface functions -------------------------------------------------------*/ /* Interface functions -------------------------------------------------------*/
/* 调试工具初始化. */ /* 调试工具初始化. */
int32_t debug_handle_init(void) int32_t debug_handle_init(void)
@ -886,25 +829,17 @@ int32_t debug_handle_init_after(void)
thread_m_add("PD_DEBUG_ACCEPT", pid); thread_m_add("PD_DEBUG_ACCEPT", pid);
} }
pthread_attr_destroy(&attr); pthread_attr_destroy(&attr);
/* 每秒上传 DAU 状态寄存器. */
mtimer_add(_debug_port_state_get, NULL, 1, "DEBUG_PORT_STATE_GET");
return E_NONE; return E_NONE;
} }
/* 数据手动上传报文处理. */
int32_t debug_pkt_port_state_post(void)
{}
/* 升级结果回复处理 */ /* 升级结果回复处理 */
void debug_upgrade_result_send(int32_t rv, char *buf) void debug_upgrade_result_send(int32_t rv, char *buf)
{ {
char buffer[32] = {0}; char buffer[32] = {0};
int32_t *rt = (int32_t*)(buffer + sizeof(debug_pkt_head_t)); int32_t *rt = (int32_t*)(buffer + sizeof(dbg_pkt_head_t));
*rt = rv; *rt = rv;
_debug_pkt_common_send(buffer, DEBUG_UPGRADE_ALL, 4); _debug_pkt_common_send(buffer, 0, 4);
} }
#endif #endif
/************************ (C) COPYRIGHT LandPower ***** END OF FILE ****************/ /************************ (C) COPYRIGHT LandPower ***** END OF FILE ****************/

@ -50,6 +50,7 @@
#include "pd_dau.h" #include "pd_dau.h"
#include "pd_csg.h" #include "pd_csg.h"
#include "pd_main.h" #include "pd_main.h"
#include "pd_dbg.h"
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/

Loading…
Cancel
Save