Files

124 lines
4.1 KiB
C
Raw Permalink Normal View History

2026-04-09 10:14:20 +08:00
#include "app_get_json.h"
#include "cJSON.h"
#include "bsp_uart.h"
#include "string.h"
#include "stdio.h"
#include <stdlib.h> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>atoi<6F><69><EFBFBD><EFBFBD>
#include "app_scan.h"
uint8_t uart_rx_buffer[1024];
cJSON *cjson = NULL;
int Max_resis;
int Min_resis;
int Div_resis;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD>鵽uint8_t<5F><74><EFBFBD><EFBFBD>
// json_arr: cJSON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, arr: Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, max_len: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
void parse_json_array(cJSON *json_item, uint8_t *arr, int max_len) {
// 1. <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memset(arr, 0, max_len * sizeof(uint8_t));
// 2. <20><><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>
if (json_item == NULL || !cJSON_IsString(json_item) || json_item->valuestring == NULL) {
return; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
}
// 3. <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>ԭJSON<4F><4E><EFBFBD>ݣ<EFBFBD>
char temp_buf[64] = {0}; // <20><EFBFBD><E3B9BB><EFBFBD><EFBFBD>12<31><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B><><EFBFBD>ŵij<C5B5><C4B3><EFBFBD>
strncpy(temp_buf, json_item->valuestring, sizeof(temp_buf) - 1);
// 4. <20><><EFBFBD><EFBFBD><EFBFBD>ŷָ<C5B7><D6B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char *token = strtok(temp_buf, ",");
int idx = 0;
while (token != NULL && idx < max_len) {
// <20>ѷָ<D1B7><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>תΪ<D7AA><CEAA><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
arr[idx++] = (uint8_t)atoi(token);
token = strtok(NULL, ",");
}
}
int get_Json_data(json_data_struct * sys){
int result = -1; // 1 <20><>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
uint16_t uart_get_num = usart_rx_get_rx_data_count(USART_3_TR);
// ֻ<>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ž<EFBFBD><C5BD>н<EFBFBD><D0BD><EFBFBD>
if(uart_get_num > 0 && uart_get_num < sizeof(uart_rx_buffer)){ // <20><><EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڽ<EFBFBD><DABD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t get_size = usart_rx_recv(USART_3_TR, uart_rx_buffer, uart_get_num);
// ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD>ɹ<EFBFBD>
if(get_size != uart_get_num){
memset(uart_rx_buffer, 0, sizeof(uart_rx_buffer)); // <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
return -2; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD>
}
// <20><><EFBFBD>ͷ<EFBFBD>֮ǰ<D6AE><C7B0>cJSON<4F>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>й©
if(cjson != NULL ){
cJSON_Delete(cjson);
cjson = NULL; // <20>ͷź<CDB7><C5BA>ÿգ<C3BF><D5A3><EFBFBD><EFBFBD><EFBFBD>Ұָ<D2B0><D6B8>
}
// <20><><EFBFBD><EFBFBD>JSON<4F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תΪcJSON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cjson = cJSON_Parse((const char*)uart_rx_buffer);
memset(uart_rx_buffer, 0, sizeof(uart_rx_buffer));//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD>
if (cjson != NULL) {
// 2. <20><><EFBFBD>λ<EFBFBD>ȡJSON<4F>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
cJSON *Max_resis_item = cJSON_GetObjectItem(cjson, "Max_resis");
cJSON *Min_resis_item = cJSON_GetObjectItem(cjson, "Min_resis");
cJSON *Div_resis_item = cJSON_GetObjectItem(cjson, "Div_resis");
cJSON *x_rank_arr = cJSON_GetObjectItem(cjson, "x_rank");
cJSON *y_rank_arr = cJSON_GetObjectItem(cjson, "y_rank");
if(x_rank_arr != NULL && y_rank_arr != NULL)
{
uint8_t x_rank[12] = {0};
parse_json_array(x_rank_arr, x_rank, 12);
// 3. ֱ<>ӽ<EFBFBD><D3BD><EFBFBD>y_rank JSON<4F><4E><EFBFBD><EFBFBD>
uint8_t y_rank[12] = {0};
parse_json_array(y_rank_arr, y_rank, 12);
// 4. <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><E6BAAF>
save_config_ranks(x_rank, y_rank);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ֶ<EFBFBD><D6B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>JSON<4F><4E>ֵ<EFBFBD><D6B5><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>
if(Max_resis_item != NULL && cJSON_IsString(Max_resis_item) &&
Min_resis_item != NULL && cJSON_IsString(Min_resis_item) &&
Div_resis_item != NULL && cJSON_IsString(Div_resis_item))
{
// 3. <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵת<D6B5><D7AA>Ϊint<6E><74><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
Max_resis = atoi(Max_resis_item->valuestring);
Min_resis = atoi(Min_resis_item->valuestring);
Div_resis = atoi(Div_resis_item->valuestring);
sys->max_trigger_res_value = Max_resis;
sys->min_trigger_res_value = Min_resis;
sys->div_trigger_res = Div_resis;
result = 1; // <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
}
else{
result = -3; // <20>ֶ<EFBFBD>ȱʧ<C8B1><CAA7><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
}
// 4. <20><><EFBFBD><EFBFBD>cJSON<4F>ڴ棨<DAB4><E6A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷţ<CDB7><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>й©<D0B9><C2A9>
cJSON_Delete(cjson);
cjson = NULL; // <20>ÿգ<C3BF><D5A3><EFBFBD>ֹ<EFBFBD>ظ<EFBFBD><D8B8>ͷ<EFBFBD>
}
else{
result = -4; // JSON<4F><4E>ʽ<EFBFBD><CABD><EFBFBD>󣬽<EFBFBD><F3A3ACBD><EFBFBD>ʧ<EFBFBD><CAA7>
}
// <20><><EFBFBD>մ<EFBFBD><D5B4>ڽ<EFBFBD><DABD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><CEBD><EFBFBD>
}
else{
result = -5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
}
return result;
}