|
|
|
@ -643,110 +643,6 @@ static void _debug_pkt_config_set(void)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 校准参数获取报文处理. */
|
|
|
|
|
static void _debug_pkt_adj_get(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
dev_adj_cfg_t *data = (dev_adj_cfg_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t) + sizeof(dev_adj_cfg_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 封装数据, 这里减 4 是因为结构体最后 4byte 位置特殊. */
|
|
|
|
|
memcpy(data->power_adj, dev_config.power_adj, 64);
|
|
|
|
|
data->vin_adj = dev_config.vin_adj;
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, head->len + 4);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 校准参数设置报文处理. */
|
|
|
|
|
static void _debug_pkt_adj_set_power(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
dev_adj_power_cfg_t *data = (dev_adj_power_cfg_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
|
|
|
|
|
/* 配置参数. */
|
|
|
|
|
memcpy(dev_config.power_adj, data->power_adj, 32);
|
|
|
|
|
dev_config.vin_adj = data->vin_adj;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
|
|
|
|
|
/* 保存参数. */
|
|
|
|
|
common_sys_set(COM_SYS_SAVE_CONFIG, 0);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 校准参数设置报文处理. */
|
|
|
|
|
static void _debug_pkt_adj_set_defect(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
dev_adj_defect_cfg_t *data = (dev_adj_defect_cfg_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
|
|
|
|
|
/* 配置参数. */
|
|
|
|
|
memcpy(dev_config.defect_base, data->defect_base, sizeof(dev_adj_defect_cfg_t));
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
|
|
|
|
|
/* 保存参数. */
|
|
|
|
|
common_sys_set(COM_SYS_SAVE_CONFIG, 0);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 校准参数设置报文处理. */
|
|
|
|
|
static void _debug_pkt_adj_set_fault(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
dev_adj_fault_cfg_t *data = (dev_adj_fault_cfg_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
|
|
|
|
|
/* 配置参数. */
|
|
|
|
|
memcpy(dev_config.fault_base, data->fault_base, sizeof(dev_adj_fault_cfg_t));
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
|
|
|
|
|
/* 保存参数. */
|
|
|
|
|
common_sys_set(COM_SYS_SAVE_CONFIG, 0);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 自动校准仪器通讯校验和计算. */
|
|
|
|
|
static uint8_t _debug_adj_checksum(uint8_t *buf, uint8_t len)
|
|
|
|
|
{
|
|
|
|
@ -1009,7 +905,6 @@ void _debug_adj_power_cal(void)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 自动校准处理. */
|
|
|
|
|
static HAL_StatusTypeDef _debug_adj_auto(uint8_t bitmap)
|
|
|
|
|
{
|
|
|
|
@ -1037,177 +932,112 @@ static HAL_StatusTypeDef _debug_adj_auto(uint8_t bitmap)
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 实时数据获取报文处理. */
|
|
|
|
|
static void _debug_pkt_data_get(void)
|
|
|
|
|
/* 手动校准处理. */
|
|
|
|
|
static HAL_StatusTypeDef _debug_adj_manual(uint8_t bitmap)
|
|
|
|
|
{
|
|
|
|
|
if (!bitmap)
|
|
|
|
|
{
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dau_adj_state = DAU_ADJ_STATE_POWER;
|
|
|
|
|
while (dau_adj_state != DAU_ADJ_STATE_NONE)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_CLI);
|
|
|
|
|
osDelay(1000);
|
|
|
|
|
}
|
|
|
|
|
DBG(DBG_M_RS485_DEBUG, "capture end...\r\n");
|
|
|
|
|
_debug_adj_power_cal();
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 校准参数获取报文处理. */
|
|
|
|
|
static void _debug_pkt_adj_get(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
debug_real_data_t *data = (debug_real_data_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
dev_adj_cfg_t *data = (dev_adj_cfg_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t) + sizeof(debug_real_data_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t) + sizeof(dev_adj_cfg_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 装填数据. */
|
|
|
|
|
data->temperature = ADC_ctrl.ADCi_temp;
|
|
|
|
|
data->vbat = ADC_ctrl.ADCi_vbat;
|
|
|
|
|
data->vin = ADC_ctrl.ADCi_vin;
|
|
|
|
|
HAL_RTC_GetTime(&hrtc, &debug_time, RTC_FORMAT_BIN);
|
|
|
|
|
HAL_RTC_GetDate(&hrtc, &debug_date, RTC_FORMAT_BIN);
|
|
|
|
|
debug_tm.tm_year = debug_date.Year + 100;
|
|
|
|
|
debug_tm.tm_mon = debug_date.Month - 1;
|
|
|
|
|
debug_tm.tm_mday = debug_date.Date;
|
|
|
|
|
debug_tm.tm_hour = debug_time.Hours;
|
|
|
|
|
debug_tm.tm_min = debug_time.Minutes;
|
|
|
|
|
debug_tm.tm_sec = debug_time.Seconds;
|
|
|
|
|
data->time = mktime(&debug_tm);
|
|
|
|
|
data->run = HAL_GetTick() / 1000;
|
|
|
|
|
data->state_wir = wl_ctrl.state;
|
|
|
|
|
data->is_bat_charge = st_data.is_bat_charge;
|
|
|
|
|
data->is_utc_valid = dau_ctrl.is_utc_valid;
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < DAU_PORT_POWER_CNT; i++)
|
|
|
|
|
{
|
|
|
|
|
data->elec[i] = dau_ctrl.reg_elec[i];
|
|
|
|
|
data->elec_fault[i] = dau_ctrl.fault_elec[i];
|
|
|
|
|
}
|
|
|
|
|
for(i = 0; i < DAU_PORT_DEFECT_MAX; i++)
|
|
|
|
|
{
|
|
|
|
|
data->elec_defect_max[i] = dau_ctrl.reg_defect_max[i];
|
|
|
|
|
data->elec_fault_max[i] = dau_ctrl.fault_max[i];
|
|
|
|
|
}
|
|
|
|
|
data->fault_utc = dau_ctrl.fault_utc;
|
|
|
|
|
data->fault_ns = dau_ctrl.fault_ns;
|
|
|
|
|
/* 封装数据, 这里减 4 是因为结构体最后 4byte 位置特殊. */
|
|
|
|
|
memcpy(data->power_adj, dev_config.power_adj, 64);
|
|
|
|
|
data->vin_adj = dev_config.vin_adj;
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
_debug_pkt_send(head->len + 4, head->len + 4);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 工频采样数据获取报文处理. */
|
|
|
|
|
static void _debug_pkt_power_fre_get(void)
|
|
|
|
|
/* 校准参数设置报文处理. */
|
|
|
|
|
static void _debug_pkt_adj_set_power(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
//uint8_t *data = (uint8_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
|
|
|
|
|
int32_t data_len = 0;
|
|
|
|
|
dev_adj_power_cfg_t *data = (dev_adj_power_cfg_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
|
|
|
|
|
/* 配置参数. */
|
|
|
|
|
memcpy(dev_config.power_adj, data->power_adj, 32);
|
|
|
|
|
dev_config.vin_adj = data->vin_adj;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 填充数据, 计算数据长度和报文长度. */
|
|
|
|
|
data_len = ADC_COLLECT_CNT * 5 * 2 - m_head->index * DEBUG_DATA_SIZE;
|
|
|
|
|
if (data_len < 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (data_len > DEBUG_DATA_SIZE)
|
|
|
|
|
{
|
|
|
|
|
m_head->len = DEBUG_DATA_SIZE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_head->len = data_len;
|
|
|
|
|
}
|
|
|
|
|
head->len = sizeof(proto_head_t) + sizeof(mul_head_t) + m_head->len;
|
|
|
|
|
|
|
|
|
|
if (m_head->len > 0)
|
|
|
|
|
{
|
|
|
|
|
//memcpy(data, (uint8_t*)(&ADC_ctrl.ADC_value_elec[0][0]) + m_head->index * DEBUG_DATA_SIZE, m_head->len);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 28);
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
|
|
|
|
|
/* 保存参数. */
|
|
|
|
|
common_sys_set(COM_SYS_SAVE_CONFIG, 0);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 高频采样数据获取报文处理. */
|
|
|
|
|
static void _debug_pkt_wave_get(void)
|
|
|
|
|
/* 校准参数设置报文处理. */
|
|
|
|
|
static void _debug_pkt_adj_set_defect(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
int16_t *data = (int16_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
|
|
|
|
|
int32_t data_len = 0;
|
|
|
|
|
dev_adj_defect_cfg_t *data = (dev_adj_defect_cfg_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
uint32_t addr = 0;
|
|
|
|
|
int16_t *wave = NULL;
|
|
|
|
|
uint16_t i = 0;
|
|
|
|
|
|
|
|
|
|
/* 配置参数. */
|
|
|
|
|
memcpy(dev_config.defect_base, data->defect_base, sizeof(dev_adj_defect_cfg_t));
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
/* 填充数据, 计算数据长度和报文长度. */
|
|
|
|
|
data_len = 1024000 * 8 - m_head->index * DEBUG_DATA_SIZE;
|
|
|
|
|
if (data_len < 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (data_len > DEBUG_DATA_SIZE)
|
|
|
|
|
{
|
|
|
|
|
m_head->len = DEBUG_DATA_SIZE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_head->len = data_len;
|
|
|
|
|
}
|
|
|
|
|
head->len = sizeof(proto_head_t) + sizeof(mul_head_t) + m_head->len;
|
|
|
|
|
|
|
|
|
|
if (m_head->len > 0)
|
|
|
|
|
{
|
|
|
|
|
addr = WARE_FAULT_ADDRESS + m_head->index * DEBUG_DATA_SIZE;
|
|
|
|
|
spi_flash_read(addr, debug_flash, DEBUG_DATA_SIZE);
|
|
|
|
|
wave = (int16_t*)debug_flash;
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < 128; i++)
|
|
|
|
|
{
|
|
|
|
|
*data++ = *wave++;
|
|
|
|
|
*data++ = *wave++;
|
|
|
|
|
data += 2;
|
|
|
|
|
}
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
|
|
|
|
|
data = (int16_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
|
|
|
|
|
for(i = 0; i < 128; i++)
|
|
|
|
|
{
|
|
|
|
|
data += 2;
|
|
|
|
|
*data++ = *wave++;
|
|
|
|
|
*data++ = *wave++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 28);
|
|
|
|
|
/* 保存参数. */
|
|
|
|
|
common_sys_set(COM_SYS_SAVE_CONFIG, 0);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 设备状态获取报文处理. */
|
|
|
|
|
static void _debug_pkt_wave_col(void)
|
|
|
|
|
/* 校准参数设置报文处理. */
|
|
|
|
|
static void _debug_pkt_adj_set_fault(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
dev_adj_fault_cfg_t *data = (dev_adj_fault_cfg_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
uint32_t reset_delay = 2;
|
|
|
|
|
|
|
|
|
|
st_data.wave_time = 0;
|
|
|
|
|
st_data.wave_start = TRUE;
|
|
|
|
|
st_data.wave_up_start = TRUE;
|
|
|
|
|
st_data.wave_index = 0;
|
|
|
|
|
|
|
|
|
|
flash_log_write(FLASH_LOG_TYPE_INFO, "Force wavc collect system reset!\r\n");
|
|
|
|
|
common_sys_set(COM_SYS_RESET, (void*)&reset_delay);
|
|
|
|
|
/* 配置参数. */
|
|
|
|
|
memcpy(dev_config.fault_base, data->fault_base, sizeof(dev_adj_fault_cfg_t));
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
@ -1218,6 +1048,9 @@ static void _debug_pkt_wave_col(void)
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
|
|
|
|
|
/* 保存参数. */
|
|
|
|
|
common_sys_set(COM_SYS_SAVE_CONFIG, 0);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -1310,204 +1143,6 @@ static void _debug_pkt_adj_defect(void)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* . */
|
|
|
|
|
static void _debug_pkt_log_get(void)
|
|
|
|
|
{
|
|
|
|
|
static uint64_t log_id = 0;
|
|
|
|
|
static uint64_t read_id = 0;
|
|
|
|
|
static uint32_t data_sum = 0;
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *data = (uint32_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
|
|
|
|
|
falsh_log_t *log = NULL;
|
|
|
|
|
int32_t data_len = 0;
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
uint16_t real_len = 0;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 初始化数据. */
|
|
|
|
|
if (0 == m_head->index)
|
|
|
|
|
{
|
|
|
|
|
log_id = flash_log_id;
|
|
|
|
|
data_sum = (*data) * FLASH_LOG_BUF_LEN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算数据长度和报文长度. */
|
|
|
|
|
data_len = data_sum - m_head->index * DEBUG_DATA_SIZE;
|
|
|
|
|
if (data_len < 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (data_len > DEBUG_DATA_SIZE)
|
|
|
|
|
{
|
|
|
|
|
m_head->len = DEBUG_DATA_SIZE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_head->len = data_len;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 填充数据. */
|
|
|
|
|
if (m_head->len > 0)
|
|
|
|
|
{
|
|
|
|
|
for(i = 0; i < m_head->len / FLASH_LOG_BUF_LEN; i++)
|
|
|
|
|
{
|
|
|
|
|
read_id = log_id - 4 * m_head->index - i;
|
|
|
|
|
|
|
|
|
|
log = (falsh_log_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t) + i * FLASH_LOG_BUF_LEN);
|
|
|
|
|
if (flash_log_read(read_id, log) != HAL_OK)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/* 读到全F,表示结束了. */
|
|
|
|
|
if (log->id != read_id)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
real_len += FLASH_LOG_BUF_LEN;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
m_head->len = real_len;
|
|
|
|
|
head->len = sizeof(proto_head_t) + sizeof(mul_head_t) + m_head->len;
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 28);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* . */
|
|
|
|
|
static void _debug_pkt_history_data_get(void)
|
|
|
|
|
{
|
|
|
|
|
static uint64_t data_id = 0;
|
|
|
|
|
static uint64_t read_id = 0;
|
|
|
|
|
static uint32_t data_sum = 0;
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *data = (uint32_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
|
|
|
|
|
fd_data_t *history = NULL;
|
|
|
|
|
int32_t data_len = 0;
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
uint16_t real_len = 0;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 初始化数据. */
|
|
|
|
|
if (0 == m_head->index)
|
|
|
|
|
{
|
|
|
|
|
data_id = fd_id;
|
|
|
|
|
data_sum = (*data) * FD_BUF_LEN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算数据长度和报文长度. */
|
|
|
|
|
data_len = data_sum - m_head->index * DEBUG_DATA_SIZE;
|
|
|
|
|
if (data_len < 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (data_len > DEBUG_DATA_SIZE)
|
|
|
|
|
{
|
|
|
|
|
m_head->len = DEBUG_DATA_SIZE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_head->len = data_len;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 填充数据. */
|
|
|
|
|
if (m_head->len > 0)
|
|
|
|
|
{
|
|
|
|
|
for(i = 0; i < m_head->len / FD_BUF_LEN; i++)
|
|
|
|
|
{
|
|
|
|
|
read_id = data_id - 4 * m_head->index - i;
|
|
|
|
|
|
|
|
|
|
history = (fd_data_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t) + i * FD_BUF_LEN);
|
|
|
|
|
if (fd_read(read_id, history) != HAL_OK)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/* 读到全F,表示结束了. */
|
|
|
|
|
if (history->id != read_id)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
real_len += FD_BUF_LEN;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
m_head->len = real_len;
|
|
|
|
|
head->len = sizeof(proto_head_t) + sizeof(mul_head_t) + m_head->len;
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 28);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 自动校准处理. */
|
|
|
|
|
static HAL_StatusTypeDef _debug_adj_manual(uint8_t bitmap)
|
|
|
|
|
{
|
|
|
|
|
if (!bitmap)
|
|
|
|
|
{
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dau_adj_state = DAU_ADJ_STATE_POWER;
|
|
|
|
|
while (dau_adj_state != DAU_ADJ_STATE_NONE)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_CLI);
|
|
|
|
|
osDelay(1000);
|
|
|
|
|
}
|
|
|
|
|
DBG(DBG_M_RS485_DEBUG, "capture end...\r\n");
|
|
|
|
|
_debug_adj_power_cal();
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 手动校准报文处理. */
|
|
|
|
|
static void _debug_pkt_adj_manual(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
dev_adj_power_t *data = (dev_adj_power_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
dev_adj_power_cfg_t *cfg = (dev_adj_power_cfg_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
|
|
|
|
|
/* 解析数据. */
|
|
|
|
|
memcpy(&debug_adj_power, data, sizeof(dev_adj_power_t));
|
|
|
|
|
|
|
|
|
|
/* 组装数据 */
|
|
|
|
|
cfg->return_value = _debug_adj_manual(debug_adj_power.bitmap);
|
|
|
|
|
if (debug_adj_power.is_voltage_adj)
|
|
|
|
|
{
|
|
|
|
|
ADC_vbat_auto(5000);
|
|
|
|
|
}
|
|
|
|
|
memcpy(cfg->power_adj, dev_config.power_adj, 32);
|
|
|
|
|
//memcpy(cfg->power_adj_point, dev_config.power_adj_point, 32);
|
|
|
|
|
cfg->vin_adj = dev_config.vin_adj;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t) + sizeof(dev_adj_power_cfg_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
|
|
|
|
|
/* 保存参数. */
|
|
|
|
|
common_sys_set(COM_SYS_SAVE_CONFIG, 0);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 设备状态获取报文处理. */
|
|
|
|
|
static void _debug_pkt_adj_fault_zero(void)
|
|
|
|
|
{
|
|
|
|
@ -1586,18 +1221,29 @@ static void _debug_pkt_adj_fault(void)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 主动上传fpga升级结果. */
|
|
|
|
|
static void _debug_pkt_update_fpga_result()
|
|
|
|
|
/* 手动校准报文处理. */
|
|
|
|
|
static void _debug_pkt_adj_manual(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
int32_t *res = (int32_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
dev_adj_power_t *data = (dev_adj_power_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
dev_adj_power_cfg_t *cfg = (dev_adj_power_cfg_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
|
|
|
|
|
/* 解析数据. */
|
|
|
|
|
memcpy(&debug_adj_power, data, sizeof(dev_adj_power_t));
|
|
|
|
|
|
|
|
|
|
/* 组装数据 */
|
|
|
|
|
cfg->return_value = _debug_adj_manual(debug_adj_power.bitmap);
|
|
|
|
|
if (debug_adj_power.is_voltage_adj)
|
|
|
|
|
{
|
|
|
|
|
ADC_vbat_auto(5000);
|
|
|
|
|
}
|
|
|
|
|
memcpy(cfg->power_adj, dev_config.power_adj, 32);
|
|
|
|
|
//memcpy(cfg->power_adj_point, dev_config.power_adj_point, 32);
|
|
|
|
|
cfg->vin_adj = dev_config.vin_adj;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t) + sizeof(int32_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
head->cmd_type = DEBUG_CT_PRV_REPLY;
|
|
|
|
|
head->cmd = DEBUG_PRV_UPDATE_RT;
|
|
|
|
|
*res = (dau_ctrl.update_rt_dbg != DAU_UPD_OK);
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t) + sizeof(dev_adj_power_cfg_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
@ -1605,6 +1251,9 @@ static void _debug_pkt_update_fpga_result()
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
|
|
|
|
|
/* 保存参数. */
|
|
|
|
|
common_sys_set(COM_SYS_SAVE_CONFIG, 0);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -1645,22 +1294,355 @@ void _debug_pkt_adj_auto(void)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void _debug_pkt_adj_auto2(void)
|
|
|
|
|
/* 实时数据获取报文处理. */
|
|
|
|
|
static void _debug_pkt_data_get(void)
|
|
|
|
|
{
|
|
|
|
|
debug_adj_power.bitmap = 1;
|
|
|
|
|
debug_adj_power.elec = 5;
|
|
|
|
|
debug_adj_power.turns = 10;
|
|
|
|
|
debug_adj_power.is_voltage_adj = 1;
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
debug_real_data_t *data = (debug_real_data_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
|
|
|
|
|
/* 组装数据 */
|
|
|
|
|
_debug_adj_auto(debug_adj_power.bitmap);
|
|
|
|
|
if (debug_adj_power.is_voltage_adj)
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t) + sizeof(debug_real_data_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 装填数据. */
|
|
|
|
|
data->temperature = ADC_ctrl.ADCi_temp;
|
|
|
|
|
data->vbat = ADC_ctrl.ADCi_vbat;
|
|
|
|
|
data->vin = ADC_ctrl.ADCi_vin;
|
|
|
|
|
HAL_RTC_GetTime(&hrtc, &debug_time, RTC_FORMAT_BIN);
|
|
|
|
|
HAL_RTC_GetDate(&hrtc, &debug_date, RTC_FORMAT_BIN);
|
|
|
|
|
debug_tm.tm_year = debug_date.Year + 100;
|
|
|
|
|
debug_tm.tm_mon = debug_date.Month - 1;
|
|
|
|
|
debug_tm.tm_mday = debug_date.Date;
|
|
|
|
|
debug_tm.tm_hour = debug_time.Hours;
|
|
|
|
|
debug_tm.tm_min = debug_time.Minutes;
|
|
|
|
|
debug_tm.tm_sec = debug_time.Seconds;
|
|
|
|
|
data->time = mktime(&debug_tm);
|
|
|
|
|
data->run = HAL_GetTick() / 1000;
|
|
|
|
|
data->state_wir = wl_ctrl.state;
|
|
|
|
|
data->is_bat_charge = st_data.is_bat_charge;
|
|
|
|
|
data->is_utc_valid = dau_ctrl.is_utc_valid;
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < DAU_PORT_POWER_CNT; i++)
|
|
|
|
|
{
|
|
|
|
|
ADC_vbat_auto(5000);
|
|
|
|
|
data->elec[i] = dau_ctrl.reg_elec[i];
|
|
|
|
|
data->elec_fault[i] = dau_ctrl.fault_elec[i];
|
|
|
|
|
}
|
|
|
|
|
for(i = 0; i < DAU_PORT_DEFECT_MAX; i++)
|
|
|
|
|
{
|
|
|
|
|
data->elec_defect_max[i] = dau_ctrl.reg_defect_max[i];
|
|
|
|
|
data->elec_fault_max[i] = dau_ctrl.fault_max[i];
|
|
|
|
|
}
|
|
|
|
|
data->fault_utc = dau_ctrl.fault_utc;
|
|
|
|
|
data->fault_ns = dau_ctrl.fault_ns;
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 工频采样数据获取报文处理. */
|
|
|
|
|
static void _debug_pkt_power_fre_get(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
//uint8_t *data = (uint8_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
|
|
|
|
|
int32_t data_len = 0;
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 填充数据, 计算数据长度和报文长度. */
|
|
|
|
|
data_len = ADC_COLLECT_CNT * 5 * 2 - m_head->index * DEBUG_DATA_SIZE;
|
|
|
|
|
if (data_len < 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (data_len > DEBUG_DATA_SIZE)
|
|
|
|
|
{
|
|
|
|
|
m_head->len = DEBUG_DATA_SIZE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_head->len = data_len;
|
|
|
|
|
}
|
|
|
|
|
head->len = sizeof(proto_head_t) + sizeof(mul_head_t) + m_head->len;
|
|
|
|
|
|
|
|
|
|
if (m_head->len > 0)
|
|
|
|
|
{
|
|
|
|
|
//memcpy(data, (uint8_t*)(&ADC_ctrl.ADC_value_elec[0][0]) + m_head->index * DEBUG_DATA_SIZE, m_head->len);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 28);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 高频采样数据获取报文处理. */
|
|
|
|
|
static void _debug_pkt_wave_get(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
int16_t *data = (int16_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
|
|
|
|
|
int32_t data_len = 0;
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
uint32_t addr = 0;
|
|
|
|
|
int16_t *wave = NULL;
|
|
|
|
|
uint16_t i = 0;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
/* 填充数据, 计算数据长度和报文长度. */
|
|
|
|
|
data_len = 1024000 * 8 - m_head->index * DEBUG_DATA_SIZE;
|
|
|
|
|
if (data_len < 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (data_len > DEBUG_DATA_SIZE)
|
|
|
|
|
{
|
|
|
|
|
m_head->len = DEBUG_DATA_SIZE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_head->len = data_len;
|
|
|
|
|
}
|
|
|
|
|
head->len = sizeof(proto_head_t) + sizeof(mul_head_t) + m_head->len;
|
|
|
|
|
|
|
|
|
|
if (m_head->len > 0)
|
|
|
|
|
{
|
|
|
|
|
addr = WARE_FAULT_ADDRESS + m_head->index * DEBUG_DATA_SIZE;
|
|
|
|
|
spi_flash_read(addr, debug_flash, DEBUG_DATA_SIZE);
|
|
|
|
|
wave = (int16_t*)debug_flash;
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < 128; i++)
|
|
|
|
|
{
|
|
|
|
|
*data++ = *wave++;
|
|
|
|
|
*data++ = *wave++;
|
|
|
|
|
data += 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
data = (int16_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
|
|
|
|
|
for(i = 0; i < 128; i++)
|
|
|
|
|
{
|
|
|
|
|
data += 2;
|
|
|
|
|
*data++ = *wave++;
|
|
|
|
|
*data++ = *wave++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 28);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 设备状态获取报文处理. */
|
|
|
|
|
static void _debug_pkt_wave_col(void)
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
uint32_t reset_delay = 2;
|
|
|
|
|
|
|
|
|
|
st_data.wave_time = 0;
|
|
|
|
|
st_data.wave_start = TRUE;
|
|
|
|
|
st_data.wave_up_start = TRUE;
|
|
|
|
|
st_data.wave_index = 0;
|
|
|
|
|
|
|
|
|
|
flash_log_write(FLASH_LOG_TYPE_INFO, "Force wavc collect system reset!\r\n");
|
|
|
|
|
common_sys_set(COM_SYS_RESET, (void*)&reset_delay);
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* . */
|
|
|
|
|
static void _debug_pkt_log_get(void)
|
|
|
|
|
{
|
|
|
|
|
static uint64_t log_id = 0;
|
|
|
|
|
static uint64_t read_id = 0;
|
|
|
|
|
static uint32_t data_sum = 0;
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *data = (uint32_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
|
|
|
|
|
falsh_log_t *log = NULL;
|
|
|
|
|
int32_t data_len = 0;
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
uint16_t real_len = 0;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 初始化数据. */
|
|
|
|
|
if (0 == m_head->index)
|
|
|
|
|
{
|
|
|
|
|
log_id = flash_log_id;
|
|
|
|
|
data_sum = (*data) * FLASH_LOG_BUF_LEN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算数据长度和报文长度. */
|
|
|
|
|
data_len = data_sum - m_head->index * DEBUG_DATA_SIZE;
|
|
|
|
|
if (data_len < 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (data_len > DEBUG_DATA_SIZE)
|
|
|
|
|
{
|
|
|
|
|
m_head->len = DEBUG_DATA_SIZE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_head->len = data_len;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 填充数据. */
|
|
|
|
|
if (m_head->len > 0)
|
|
|
|
|
{
|
|
|
|
|
for(i = 0; i < m_head->len / FLASH_LOG_BUF_LEN; i++)
|
|
|
|
|
{
|
|
|
|
|
read_id = log_id - 4 * m_head->index - i;
|
|
|
|
|
|
|
|
|
|
log = (falsh_log_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t) + i * FLASH_LOG_BUF_LEN);
|
|
|
|
|
if (flash_log_read(read_id, log) != HAL_OK)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/* 读到全F,表示结束了. */
|
|
|
|
|
if (log->id != read_id)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
real_len += FLASH_LOG_BUF_LEN;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
m_head->len = real_len;
|
|
|
|
|
head->len = sizeof(proto_head_t) + sizeof(mul_head_t) + m_head->len;
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 28);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* . */
|
|
|
|
|
static void _debug_pkt_history_data_get(void)
|
|
|
|
|
{
|
|
|
|
|
static uint64_t data_id = 0;
|
|
|
|
|
static uint64_t read_id = 0;
|
|
|
|
|
static uint32_t data_sum = 0;
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
mul_head_t *m_head = (mul_head_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *data = (uint32_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t));
|
|
|
|
|
fd_data_t *history = NULL;
|
|
|
|
|
int32_t data_len = 0;
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
uint16_t real_len = 0;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
|
|
|
|
|
/* 初始化数据. */
|
|
|
|
|
if (0 == m_head->index)
|
|
|
|
|
{
|
|
|
|
|
data_id = fd_id;
|
|
|
|
|
data_sum = (*data) * FD_BUF_LEN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算数据长度和报文长度. */
|
|
|
|
|
data_len = data_sum - m_head->index * DEBUG_DATA_SIZE;
|
|
|
|
|
if (data_len < 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (data_len > DEBUG_DATA_SIZE)
|
|
|
|
|
{
|
|
|
|
|
m_head->len = DEBUG_DATA_SIZE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_head->len = data_len;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 填充数据. */
|
|
|
|
|
if (m_head->len > 0)
|
|
|
|
|
{
|
|
|
|
|
for(i = 0; i < m_head->len / FD_BUF_LEN; i++)
|
|
|
|
|
{
|
|
|
|
|
read_id = data_id - 4 * m_head->index - i;
|
|
|
|
|
|
|
|
|
|
history = (fd_data_t*)(debug_buf.buf + sizeof(proto_head_t) + sizeof(mul_head_t) + i * FD_BUF_LEN);
|
|
|
|
|
if (fd_read(read_id, history) != HAL_OK)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/* 读到全F,表示结束了. */
|
|
|
|
|
if (history->id != read_id)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
real_len += FD_BUF_LEN;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
m_head->len = real_len;
|
|
|
|
|
head->len = sizeof(proto_head_t) + sizeof(mul_head_t) + m_head->len;
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 28);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 主动上传fpga升级结果. */
|
|
|
|
|
static void _debug_pkt_update_fpga_result()
|
|
|
|
|
{
|
|
|
|
|
proto_head_t *head = (proto_head_t*)debug_buf.buf;
|
|
|
|
|
int32_t *res = (int32_t*)(debug_buf.buf + sizeof(proto_head_t));
|
|
|
|
|
uint32_t *crc = NULL;
|
|
|
|
|
|
|
|
|
|
/* 封装报文头. */
|
|
|
|
|
_debug_pkt_head_init(sizeof(proto_head_t) + sizeof(int32_t), DEBUG_CT_PRV_REPLY);
|
|
|
|
|
head->cmd_type = DEBUG_CT_PRV_REPLY;
|
|
|
|
|
head->cmd = DEBUG_PRV_UPDATE_RT;
|
|
|
|
|
*res = (dau_ctrl.update_rt_dbg != DAU_UPD_OK);
|
|
|
|
|
|
|
|
|
|
/* 计算校验和. */
|
|
|
|
|
crc = (uint32_t*)(debug_buf.buf + head->len);
|
|
|
|
|
*crc = crc32(debug_buf.buf, head->len);
|
|
|
|
|
|
|
|
|
|
/* 发送报文 */
|
|
|
|
|
_debug_pkt_send(head->len + 4, 20);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 设备状态获取报文处理. */
|
|
|
|
|
static void _debug_pkt_dev_state_get(void)
|
|
|
|
|