第一次提交

This commit is contained in:
2026-04-09 10:14:20 +08:00
commit e325a77b42
584 changed files with 279711 additions and 0 deletions

398
App/app_math_info.c Normal file
View File

@@ -0,0 +1,398 @@
#include "app_math_info.h"
uint8_t frame_state =0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>֡״̬
uint8_t cali_frame_state =0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼ָ<D7BC><D6B8>֡״̬
// ȫ<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ģʽ<C4A3><CABD>Ĭ<EFBFBD><C4AC>״̬ģʽ<C4A3><CABD>
ARRAY_RESI_INIT_MODE_TYPE_T resi_init_mode = STATE;
// ȫ<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼ģʽ<C4A3><CABD>Ĭ<EFBFBD>ϳ<EFBFBD>ʼ״̬<D7B4><CCAC>
ARRAY_RESI_CALI_MODE_TYPE_T resi_cali_mode = CALI_INIT;
uint8_t array_resi_init_params_read_buf[MAX_BUF_SIZE] = {0};
uint8_t array_resi_init_params_write_buf[MAX_BUF_SIZE] = {0};
// У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>Y<EFBFBD>
uint8_t cali_adc_params[CALI_POINT_NUM * AX_NUM * AY_NUM] = {0};
// ȫ<>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t array_resi_cali_params_write_buf[MAX_BUF_SIZE] = {0};
uint8_t array_resi_cali_params_read_buf[MAX_BUF_SIZE] = {0};
uint8_t success_protocal[ARRAY_RESI_INIT_PARAMS_LEN] = {0x6F,0x6F,0x6F,0x6B,0x6B,0x6B};
uint8_t fail_protocal[ARRAY_RESI_INIT_PARAMS_LEN] = {0x6E,0x6E,0x6E,0x6F,0x6F,0x6F};
//static uint8_t static_protocal[ARRAY_RESI_INIT_PARAMS_LEN] = {0};
//extern uint8_t adc_read_sw;
/**
* <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>ģʽ
* @param state<74><65>ģʽ<C4A3><CABD>STATE/DATA<54><41>
*/
void set_array_resi_init_mode_type(ARRAY_RESI_INIT_MODE_TYPE_T state)
{
resi_init_mode = state;
}
/**
* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>ģʽ
* @return <20><>ǰģʽ
*/
ARRAY_RESI_INIT_MODE_TYPE_T get_resi_array_init_mode_type(void)
{
return resi_init_mode;
}
//////////////////////////////////////////////////////////////////////////
/**
* <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼ģʽ
* @param state<74><65>ģʽ<C4A3><CABD>CALI_SUCCESS/CALI_FAIL<49>ȣ<EFBFBD>
*/
void set_array_resi_cali_mode_type(ARRAY_RESI_CALI_MODE_TYPE_T state)
{
resi_cali_mode = state;
}
/**
* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼ģʽ
* @return <20><>ǰģʽ
*/
ARRAY_RESI_CALI_MODE_TYPE_T get_resi_array_cali_mode_type(void)
{
return resi_cali_mode;
}
uint8_t array_resi_params_write(mx_frame_struct *buf)
{
mx_frame_struct frame;
// 1. <20><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t min_resi = (buf->data[1] << 8) | buf->data[0];
uint16_t max_resi = (buf->data[3] << 8) | buf->data[2];
uint16_t ref_resi = (buf->data[5] << 8) | buf->data[4];
//printf("min_resi is %d, %d %d\n",min_resi,max_resi,ref_resi);
// 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
if(min_resi >= max_resi) {
frame.trantype = 0x04;
set_array_resi_init_mode_type(STATE);
frame.type = get_resi_array_init_mode_type();
frame.data = fail_protocal;
frame.datalen = ARRAY_RESI_INIT_PARAMS_LEN;
mx_serial_tx_frame(USART_3_TR, &frame);
return 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
}
// 3. ? <20><><EFBFBD>µ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_sys_config.min_trigger_res_value = min_resi;
g_sys_config.max_trigger_res_value = max_resi;
g_sys_config.div_trigger_res = ref_resi;
// 4. Ӧ<>õ<EFBFBD><C3B5><EFBFBD>ѧ<EFBFBD><D1A7>
// math_resi_init(max_resi, min_resi, ref_resi, MAX_ADC_VALUE, DEFAULT_MAX_DISPLAY_VALUE);
// min_trigger_res_value1
math_resi_init(g_sys_config.max_trigger_res_value, g_sys_config.min_trigger_res_value, g_sys_config.div_trigger_res, 4096, 255);
// 5. <20><><EFBFBD>ͳɹ<CDB3>Ӧ<EFBFBD><D3A6>
frame.trantype = 0x04;
set_array_resi_init_mode_type(DATA);
frame.type = get_resi_array_init_mode_type();
frame.data = success_protocal;
frame.datalen = ARRAY_RESI_INIT_PARAMS_LEN;
mx_serial_tx_frame(USART_3_TR, &frame);
return 1; // <20>ɹ<EFBFBD>
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash
* @brief <20><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2>־û<D6BE><C3BB><EFBFBD><EFBFBD><EFBFBD>
*/
uint8_t array_resi_params_save(void *buf)
{
mx_frame_struct *frame = (mx_frame_struct *)buf;
// 1. <20><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static uint16_t min_resi=0;
static uint16_t max_resi=0;
static uint16_t ref_resi=0;
min_resi = (frame->data[1] << 8) | frame->data[0];
max_resi = (frame->data[3] << 8) | frame->data[2];
ref_resi = (frame->data[5] << 8) | frame->data[4];
//printf("%d, %d %d\n",min_resi,max_resi,ref_resi);
// 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
if(min_resi > max_resi) {
frame->trantype = 0x04;
set_array_resi_init_mode_type(STATE);
frame->type = get_resi_array_init_mode_type();
frame->data = fail_protocal;
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
mx_serial_tx_frame(USART_3_TR, frame);
}
// 3. ? <20><><EFBFBD>µ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_sys_config.min_trigger_res_value = min_resi;
g_sys_config.max_trigger_res_value = max_resi;
g_sys_config.div_trigger_res = ref_resi;
// 4. <20><><EFBFBD>浽Flash<73><68>ʹ<EFBFBD><CAB9>ͳһ<CDB3>ӿڣ<D3BF>
if(save_sys_config(&g_sys_config) != 0) {
frame->trantype = 0x04;
set_array_resi_init_mode_type(STATE);
frame->type = get_resi_array_init_mode_type();
frame->data = fail_protocal;
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
mx_serial_tx_frame(USART_3_TR, frame);
}
delay_ms(5); // <20>ȴ<EFBFBD>Flashд<68><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 5.<2E><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(load_config_params(&g_flash_para) == 1) {
// <20><>֤<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
// math_resi_init(max_resi, min_resi, ref_resi, MAX_ADC_VALUE, DEFAULT_MAX_DISPLAY_VALUE);
math_resi_init(g_sys_config.max_trigger_res_value, g_sys_config.min_trigger_res_value, g_sys_config.div_trigger_res, 4096, 255);
frame->trantype = 0x04;
set_array_resi_init_mode_type(STATE);
frame->type = get_resi_array_init_mode_type();
frame->data = success_protocal;
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
mx_serial_tx_frame(USART_3_TR, frame);
return 1;
}
else {
frame->trantype = 0x04;
set_array_resi_init_mode_type(STATE);
frame->type = get_resi_array_init_mode_type();
frame->data = fail_protocal;
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
mx_serial_tx_frame(USART_3_TR, frame);
return 0;
}
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>ֵ<EFBFBD><D6B5>
* @brief <20><><EFBFBD><EFBFBD>Flash<73><68><EFBFBD>ָ<EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
uint8_t clear_array_init_info(void *buf)
{
mx_frame_struct *frame = (mx_frame_struct *)buf;
// 1. ? ׼<><D7BC>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> default_config <20><>ȡ<EFBFBD><C8A1>
uint8_t temp_data[6];
temp_data[0] = default_config.min_trigger_res_value & 0xFF;
temp_data[1] = (default_config.min_trigger_res_value >> 8) & 0xFF;
temp_data[2] = default_config.max_trigger_res_value & 0xFF;
temp_data[3] = (default_config.max_trigger_res_value >> 8) & 0xFF;
temp_data[4] = default_config.div_trigger_res & 0xFF;
temp_data[5] = (default_config.div_trigger_res >> 8) & 0xFF;
// 2. <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> frame->data <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD> array_resi_params_write
frame->data = temp_data;
array_resi_params_write(frame); // Ӧ<><D3A6>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
// 3. ? <20><><EFBFBD><EFBFBD>Flash<73><68><EFBFBD>ã<EFBFBD>ʹ<EFBFBD>õײ<C3B5><D7B2>ӿڣ<D3BF>
flash_erase(FMC_WRITE_START_ADDR);
// 4. <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>
uint16_t verify_buf[3];
flash_read(FMC_WRITE_START_ADDR, verify_buf, 3);
frame->trantype = 0x04;
set_array_resi_init_mode_type(STATE);
frame->type = get_resi_array_init_mode_type();
if(verify_buf[0] == 0xFFFF && verify_buf[1] == 0xFFFF && verify_buf[2] == 0xFFFF) {
frame->data = success_protocal;
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
mx_serial_tx_frame(USART_3_TR, frame);
return 1; // <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
}
else {
frame->data = fail_protocal;
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
mx_serial_tx_frame(USART_3_TR, frame);
return 0; // <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
}
}
/**
* <20><><EFBFBD>ص<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @brief <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
*/
uint8_t return_array_resi_init_info(void *buf)
{
mx_frame_struct *frame = (mx_frame_struct *)buf;
// 1. ? ׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD> g_sys_config <20><>ȡ<EFBFBD><C8A1>
static uint8_t response_data[6];
response_data[0] = g_sys_config.min_trigger_res_value & 0xFF;
response_data[1] = (g_sys_config.min_trigger_res_value >> 8) & 0xFF;
response_data[2] = g_sys_config.max_trigger_res_value & 0xFF;
response_data[3] = (g_sys_config.max_trigger_res_value >> 8) & 0xFF;
response_data[4] = g_sys_config.div_trigger_res & 0xFF;
response_data[5] = (g_sys_config.div_trigger_res >> 8) & 0xFF;
// 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
set_array_resi_init_mode_type(DATA);
frame->trantype = 0x04;
frame->type = get_resi_array_init_mode_type();
frame->data = response_data;
frame->datalen = ARRAY_RESI_INIT_PARAMS_LEN;
mx_serial_tx_frame(USART_3_TR,frame);
return 1;
}
// 0x03 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/**
* @brief д<><D0B4>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱӦ<CAB1>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>浽Flash<73><68>
* @param buf Э<><D0AD>ָ֡<D6A1><D6B8>
*/
void math_resi_array_cali_write(void *buf)
{
mx_frame_struct *frame = (mx_frame_struct *)buf;
uint8_t empty_data = 0;
// 1. ? ֱ<>Ӹ<EFBFBD><D3B8>Ƶ<EFBFBD>map_sys<79><73>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(frame->datalen == ((CALI_POINT_NUM * AX_NUM*AY_NUM)+ 6)){
memcpy(map_sys.map_matrix, frame->data, CALI_POINT_NUM * AX_NUM*AY_NUM);
set_array_resi_cali_mode_type(CALI_SUCCESS);
}
else {
set_array_resi_cali_mode_type(CALI_FAIL);
}
// 2. <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
frame->trantype = 0x03;
frame->type = get_resi_array_cali_mode_type();
frame->data = &empty_data;
frame->datalen = 1;
mx_serial_tx_frame(USART_3_TR, frame);
}
/**
* @brief <20><><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash
* @param buf Э<><D0AD>ָ֡<D6A1><D6B8>
*/
void math_resi_array_cali_save(void *buf)
{
mx_frame_struct *frame = (mx_frame_struct *)buf;
uint8_t empty_data = 0;
flash_map_struct verify_map;
// 1. ? <20><><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD>ݵ<EFBFBD>map_sys
if(frame->datalen != ((CALI_POINT_NUM * AX_NUM*AY_NUM)+6)) {
set_array_resi_cali_mode_type(CALI_FAIL);
goto send_response;
}
memcpy(map_sys.map_matrix, frame->data, CALI_POINT_NUM * AX_NUM*AY_NUM);
// 2. <20><><EFBFBD><EFBFBD>FlashУ׼<D0A3><D7BC><EFBFBD><EFBFBD>
flash_erase(FMC_WRITE_MAP_ADDR);
// 3. ʹ<><CAB9>ͳһ<CDB3>ӿڱ<D3BF><DAB1>浽Flash
if(save_config_maps(&map_sys) != 0) {
set_array_resi_cali_mode_type(CALI_FAIL);
goto send_response;
}
delay_ms(2); // <20>ȴ<EFBFBD>Flashд<68><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 4. <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ز<EFBFBD><D8B2>ȶ<EFBFBD>
if(load_config_maps(&verify_map) != 1) {
set_array_resi_cali_mode_type(CALI_FAIL);
goto send_response;
}
// 5. <20><>֤<EFBFBD>ؼ<EFBFBD>У׼<D0A3>㣨ǰ3<C7B0><33>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>׸<EFBFBD><D7B8>
if(verify_map.map_matrix[0] != 0xFF &&
verify_map.map_matrix[AX_NUM*AY_NUM] != 0xFF &&
verify_map.map_matrix[2 * AX_NUM*AY_NUM] != 0xFF) {
set_array_resi_cali_mode_type(CALI_SUCCESS);
}
else {
set_array_resi_cali_mode_type(CALI_FAIL);
}
send_response:
// 6. <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
frame->trantype = 0x03;
frame->type = get_resi_array_cali_mode_type();
frame->data = &empty_data;
frame->datalen = 1;
mx_serial_tx_frame(USART_3_TR, frame);
}
/**
* @brief <20><><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>ӳ<EFBFBD>
* @param buf Э<><D0AD>ָ֡<D6A1><D6B8>
* @return 1=<3D>ɹ<EFBFBD>, 0=ʧ<><CAA7>
*/
uint8_t cali_params_clear(void *buf)
{
mx_frame_struct *frame = (mx_frame_struct *)buf;
uint8_t empty_data = 0;
uint16_t verify_buf[3];
frame->trantype = 0x03;
frame->data = &empty_data;
frame->datalen = 1;
// 1. ? <20><><EFBFBD><EFBFBD>FlashУ׼<D0A3><D7BC><EFBFBD><EFBFBD>
flash_erase(FMC_WRITE_MAP_ADDR);
memset(map_sys.map_matrix, 0, sizeof(map_sys.map_matrix));
// 2. ? <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡǰ3<C7B0><33><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>
flash_read(FMC_WRITE_MAP_ADDR, verify_buf, 3);
if(verify_buf[0] == 0xFFFF && verify_buf[1] == 0xFFFF && verify_buf[2] == 0xFFFF) {
// 3. ? <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RAM
memcpy(map_matrix_init, map_sys.map_matrix, sizeof(map_matrix_init));
set_array_resi_cali_mode_type(CALI_SUCCESS);
frame->type = get_resi_array_cali_mode_type();
mx_serial_tx_frame(USART_3_TR, frame);
return 1;
}
else {
set_array_resi_cali_mode_type(CALI_FAIL);
frame->type = get_resi_array_cali_mode_type();
mx_serial_tx_frame(USART_3_TR, frame);
return 0;
}
}
/**
* @brief <20><><EFBFBD>ص<EFBFBD>ǰУ׼<D0A3><D7BC><EFBFBD><EFBFBD>
* @param buf Э<><D0AD>ָ֡<D6A1><D6B8>
*/
void cali_params_return(void *buf)
{
mx_frame_struct *frame = (mx_frame_struct *)buf;
frame->trantype = 0x03;
set_array_resi_cali_mode_type(CALI_RETURN);
frame->type = get_resi_array_cali_mode_type();
frame->data = map_sys.map_matrix;
frame->datalen = CALI_POINT_NUM * AX_NUM * AY_NUM;
mx_serial_tx_frame(USART_3_TR, frame);
}