diff --git a/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h b/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h index c657a92..37f9a52 100644 --- a/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h +++ b/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h @@ -112,7 +112,6 @@ extern void debug_start(void); extern void debug_adj_auto(uint8_t bitmap); extern int32_t debug_app_check(uint32_t addr, uint32_t size, uint8_t file_type); extern void _debug_pkt_adj_auto(void); -extern void _debug_pkt_adj_auto2(void); #endif /******************* (C) COPYRIGHT LandPower ***** END OF FILE ****************/ diff --git a/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c b/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c index 09b3634..500e8c6 100644 --- a/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c +++ b/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c @@ -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) diff --git a/CablePositioning_APP_V1.0/Core/Src/cli.c b/CablePositioning_APP_V1.0/Core/Src/cli.c index 76487ff..55e6f8b 100644 --- a/CablePositioning_APP_V1.0/Core/Src/cli.c +++ b/CablePositioning_APP_V1.0/Core/Src/cli.c @@ -121,7 +121,6 @@ static BaseType_t _cli_save(const char *string); static BaseType_t _cli_show(const char *string); static BaseType_t _cli_spi(const char *string); static BaseType_t _cli_work_mode(const char *string); -static BaseType_t _cli_debug_msg(const char *string); #if LD_DEBUG static BaseType_t _cli_debug(const char *string); @@ -148,7 +147,6 @@ static const CLI_Command_Definition_t cmd_save = {"save", _cli_save, 1}; static const CLI_Command_Definition_t cmd_show = {"show", _cli_show, 2}; static const CLI_Command_Definition_t cmd_test = {"spi", _cli_spi, 3}; static const CLI_Command_Definition_t cmd_work_mode = {"work-mode", _cli_work_mode, 1}; -static const CLI_Command_Definition_t cmd_debug_msg = {"msg", _cli_debug_msg, 1}; /* Internal functions --------------------------------------------------------*/ /* cli获取互斥锁. */ @@ -626,35 +624,6 @@ static BaseType_t _cli_spi(const char *string) return pdFALSE; } -static BaseType_t _cli_debug_msg(const char *string) -{ - const char *param = NULL; - uint8_t param_len = 0; - - param = FreeRTOS_CLIGetParameter(string, 1, (BaseType_t *)¶m_len); - if (NULL == param) - { - vty_print(cli_param_erro); - return pdFALSE; - } - - switch(param[0]) - { - case 'm': - //_debug_pkt_adj_auto(); // 一个分段点 100A - _debug_pkt_adj_auto2(); - break; - default: - vty_print(cli_param_erro); - return pdFALSE; - } - - vty_print(cli_rv_ok); - return pdFALSE; -} - - - /* 工作模式配置命令. */ static BaseType_t _cli_work_mode(const char *string) { @@ -827,7 +796,6 @@ static void _cli_start(void) FreeRTOS_CLIRegisterCommand(&cmd_show, CLI_NODE_COMMON); FreeRTOS_CLIRegisterCommand(&cmd_test, CLI_NODE_COMMON); FreeRTOS_CLIRegisterCommand(&cmd_work_mode, CLI_NODE_CONFIG); - FreeRTOS_CLIRegisterCommand(&cmd_debug_msg, CLI_NODE_CONFIG); for(;;) {