修复界面无聚焦导致的按键无效问题

This commit is contained in:
2025-04-14 13:21:51 +08:00
parent fd1a5f56a9
commit f70040e5f3
24 changed files with 28481 additions and 28408 deletions

View File

@ -1065,11 +1065,11 @@ static void uart_rx_demo_thread(void *param)
//打印
if(len!=0){
printf("uart2>>>>>>");
for(uint8_t i=0;i<len;i++){
printf("%c",uartrx[i]);
}
printf("\r\n");
// printf("uart2>>>>>>");
// for(uint8_t i=0;i<len;i++){
// printf("%c",uartrx[i]);
// }
// printf("\r\n");
if((0x01 == len) && (0x00 == uartrx[0])) continue;
memcpy((cmdstr+cmdlen), uartrx, len);

View File

@ -156,361 +156,371 @@ static uint16_t calculate_cumulative_sum(uint8_t *buf)
static void protocol_uart_rx_thread(void *param)
{
UartPort_t *uap = xUartOpen(UART_BT_PORT);
uint8_t uartrx[BUFFER_LEN];
int len;
int str_len = 0;
int i,j;
uint8_t tlv_data_value[128]={0};
int data_len =0;
uint8_t equipment_data = 0;
uint8_t mac_data = 0;
uint8_t bt_state = 0;
uint8_t flag = 0;
while (1)
{
UartPort_t *uap = xUartOpen(UART_BT_PORT);
uint8_t uartrx[BUFFER_LEN];
int len;
int str_len = 0;
int i,j;
uint8_t tlv_data_value[128]={0};
int data_len =0;
uint8_t equipment_data = 0;
uint8_t mac_data = 0;
uint8_t bt_state = 0;
uint8_t flag = 0;
uint32_t sum = 0;
// static uint32_t uartidletick = 0;
uint32_t sum = 0;
// static uint32_t uartidletick = 0;
bt_communication_heartbeat = 10;
bt_communication_heartbeat = 10;
if (!uap) {
printf("open uart %d fail.\n", UART_BT_PORT);
vTaskDelete(NULL);
return;
}
printf("MXC => UART3 115200.\n");
TaskHandle_t tx_task_handle;
vUartInit(uap, 115200, 0);
if (!uap) {
printf("open uart %d fail.\n", UART_BT_PORT);
vTaskDelete(NULL);
return;
}
printf("MXC => UART3 115200.\n");
if (xTaskCreate(protocol_uart_tx_thread, "uartsend", configMINIMAL_STACK_SIZE, uap,
configMAX_PRIORITIES / 3, NULL) != pdPASS) {
printf("create uart tx demo task fail.\n");
vTaskDelete(NULL);
return;
}
extern uint8_t system_flag;
system_flag++;
if(system_flag>=2)
Send_software_version();
vUartInit(uap, 115200, 0);
for (;;) {
len = iUartRead(uap, uartrx, BUFFER_LEN, pdMS_TO_TICKS(10));
if (xTaskCreate(protocol_uart_tx_thread, "uartsend", configMINIMAL_STACK_SIZE, uap,
configMAX_PRIORITIES / 3, &tx_task_handle) != pdPASS) {
printf("create uart tx demo task fail.\n");
vTaskDelete(NULL);
return;
}
extern uint8_t system_flag;
system_flag++;
if(system_flag>=2)
Send_software_version();
// if(len){
// printf("uart2>");
// for(i=0;i<len;i++){
// printf("%02X ",uartrx[i]);
// }
// printf("\r\n");
// }
if(Get_sys_power_on_self_test() != 150 ){
for(i=0;i<len;i++){
switch (upgrade_state) {
case 0:
if (uartrx[i] == 0xAA){
upgrade_state++;
tlv_data_value[str_len] = uartrx[i];
str_len++;
equipment_data = 0;
mac_data = 0;
}else
str_len = 0;
break;
case 1:
if (uartrx[i] == 0x11 || uartrx[i] == 0x19){
tlv_data_value[str_len] = uartrx[i];
str_len++;
data_len = uartrx[i];
upgrade_state++;
}else if(uartrx[i] == 0x1b){
tlv_data_value[str_len] = uartrx[i];
str_len++;
data_len = uartrx[i];
upgrade_state++;
mac_data = 1;
}else if(uartrx[i] == 0x55){
tlv_data_value[str_len] = uartrx[i];
str_len++;
data_len = uartrx[i];
upgrade_state++;
equipment_data = 1;
}else if(uartrx[i] == 0x05){
tlv_data_value[str_len] = uartrx[i];
str_len++;
data_len = uartrx[i];
upgrade_state++;
bt_state = 1;
}else{
upgrade_state = 0;
str_len = 0;
}
break;
case 2:
tlv_data_value[str_len] = uartrx[i];
if(uartrx[i] == 0x03){
str_len++;
for (;;) {
len = iUartRead(uap, uartrx, BUFFER_LEN, pdMS_TO_TICKS(10));
// if(len){
// printf("uart2>");
// for(i=0;i<len;i++){
// printf("%02X ",uartrx[i]);
// }
// printf("\r\n");
// }
if(Get_sys_power_on_self_test() != 150 ){
for(i=0;i<len;i++){
switch (upgrade_state) {
case 0:
if (uartrx[i] == 0xAA){
upgrade_state++;
}else if(equipment_data && uartrx[i] == 0x01){
tlv_data_value[str_len] = uartrx[i];
str_len++;
equipment_data = 0;
mac_data = 0;
}else
str_len = 0;
break;
case 1:
if (uartrx[i] == 0x11 || uartrx[i] == 0x19){
tlv_data_value[str_len] = uartrx[i];
str_len++;
data_len = uartrx[i];
upgrade_state++;
}else if(uartrx[i] == 0x1b){
tlv_data_value[str_len] = uartrx[i];
str_len++;
data_len = uartrx[i];
upgrade_state++;
mac_data = 1;
}else if(uartrx[i] == 0x55){
tlv_data_value[str_len] = uartrx[i];
str_len++;
data_len = uartrx[i];
upgrade_state++;
equipment_data = 1;
}else if(uartrx[i] == 0x05){
tlv_data_value[str_len] = uartrx[i];
str_len++;
data_len = uartrx[i];
upgrade_state++;
bt_state = 1;
}else{
upgrade_state = 0;
str_len = 0;
}
break;
case 3:
tlv_data_value[str_len] = uartrx[i];
if(uartrx[i] == 0x50){
str_len++;
upgrade_state++;
}else if(equipment_data && uartrx[i] == 0x1c){
str_len++;
upgrade_state++;
}else if(mac_data && uartrx[i] == 0x51){
str_len++;
upgrade_state++;
}else if(bt_state && uartrx[i] == 0x54){
str_len++;
upgrade_state++;
}else{
upgrade_state = 0;
str_len = 0;
}
break;
case 4:
tlv_data_value[str_len] = uartrx[i];
if(uartrx[i] == 0x0D ||uartrx[i] == 0x15){
str_len++;
upgrade_state++;
}else if(equipment_data){
str_len++;
upgrade_state++;
}else if(mac_data && uartrx[i] == 0x17){
str_len++;
upgrade_state++;
}else if(bt_state && uartrx[i] == 0x1){
str_len++;
upgrade_state++;
}else{
upgrade_state = 0;
str_len = 0;
}
break;
case 5:
tlv_data_value[str_len] = uartrx[i];
str_len++;
if(str_len > data_len+1){
upgrade_state++;
}
break;
case 6:
if (uartrx[i] == 0x0a){
sum = calculate_cumulative_sum(tlv_data_value);
if(sum != tlv_data_value[str_len-1]){
printf("CHECKSUM ERROR ,sum = %x ,tlv_data_value=%x \n",sum,tlv_data_value[str_len-1]);
if(flag <5){
flag ++;
printf("str_len=%d data_len =%d ,",str_len,data_len);
for(j=0;j<str_len;j++){
printf("%2x ",tlv_data_value[j]);
}
printf("\n");
}
}else{
uart_state = 3;
if(equipment_data){
device_data_analysis(tlv_data_value);
equipment_data = 0;
}else if(mac_data){
// printf("tire.\r\n");
// printf("\r\n------------------------------.\r\n");
// for(j=0;j<str_len;j++){
// printf("%02x ",tlv_data_value[j]);
// }
// tire_pressure_data_analysis(tlv_data_value);
mac_data = 0;
}else if(bt_state){//存在呼吸 若呼吸不存在
bt_communication_heartbeat = 3;
// printf("bt_state = %d .\r\n",tlv_data_value[5]);
bt_state = 0;
case 2:
tlv_data_value[str_len] = uartrx[i];
if(uartrx[i] == 0x03){
str_len++;
upgrade_state++;
}else if(equipment_data && uartrx[i] == 0x01){
str_len++;
upgrade_state++;
}else{
data_analysis(tlv_data_value);
upgrade_state = 0;
str_len = 0;
}
}
}else{
printf("\nuartrx[i] = %x .\n",uartrx[i]);
}
upgrade_state=0;
str_len = 0;
data_len = 0;
break;
}
#if 1
switch (uup_rx_state) {
case 0:
if (uartrx[i] == 0x7e)
uup_rx_state++;
break;
case 1:
if (uartrx[i] == 0x05)
uup_rx_state++;
else
uup_rx_state = 0;
break;
case 2:
if (uartrx[i] == 0x02)
uup_rx_state++;
else
uup_rx_state = 0;
break;
case 3:
if (uartrx[i] == 0x03)
uup_rx_state++;
else
uup_rx_state = 0;
break;
case 4:
if (uartrx[i] == 0x01)
uup_rx_state++;
else
uup_rx_state = 0;
break;
case 5:
if (uartrx[i] == Get_sys_softwar_host())
uup_rx_state++;
else
uup_rx_state = 0;
break;
case 6:
if (uartrx[i] == Get_sys_softwar_order()){
if(Get_sys_veer_velocity()){
printf("error ota sj. Speed present\n");
Send_ota_state(1);
}else{
printf("enter ota sj.\n");
Set_sys_power_on_self_test(150);
Set_sys_upgrade_Flag(1);//进入ota界面
Send_ota_state(0);
break;
case 3:
tlv_data_value[str_len] = uartrx[i];
if(uartrx[i] == 0x50){
str_len++;
upgrade_state++;
}else if(equipment_data && uartrx[i] == 0x1c){
str_len++;
upgrade_state++;
}else if(mac_data && uartrx[i] == 0x51){
str_len++;
upgrade_state++;
}else if(bt_state && uartrx[i] == 0x54){
str_len++;
upgrade_state++;
}else{
upgrade_state = 0;
str_len = 0;
}
break;
case 4:
tlv_data_value[str_len] = uartrx[i];
if(uartrx[i] == 0x0D ||uartrx[i] == 0x15){
str_len++;
upgrade_state++;
}else if(equipment_data){
str_len++;
upgrade_state++;
}else if(mac_data && uartrx[i] == 0x17){
str_len++;
upgrade_state++;
}else if(bt_state && uartrx[i] == 0x1){
str_len++;
upgrade_state++;
}else{
upgrade_state = 0;
str_len = 0;
}
break;
case 5:
tlv_data_value[str_len] = uartrx[i];
str_len++;
if(str_len > data_len+1){
upgrade_state++;
}
break;
case 6:
if (uartrx[i] == 0x0a){
if(timeout)
timeout=0;
sum = calculate_cumulative_sum(tlv_data_value);
if(sum != tlv_data_value[str_len-1]){
printf("CHECKSUM ERROR ,sum = %x ,tlv_data_value=%x \n",sum,tlv_data_value[str_len-1]);
if(flag <5){
flag ++;
printf("str_len=%d data_len =%d ,",str_len,data_len);
for(j=0;j<str_len;j++){
printf("%2x ",tlv_data_value[j]);
}
printf("\n");
}
}else{
uart_state = 3;
bt_communication_heartbeat = 3;
if(equipment_data){
device_data_analysis(tlv_data_value);
equipment_data = 0;
}else if(mac_data){
// printf("tire.\r\n");
// printf("\r\n------------------------------.\r\n");
// for(j=0;j<str_len;j++){
// printf("%02x ",tlv_data_value[j]);
// }
// tire_pressure_data_analysis(tlv_data_value);
mac_data = 0;
}else if(bt_state){//存在呼吸 若呼吸不存在
bt_communication_heartbeat = 3;
// printf("bt_state = %d .\r\n",tlv_data_value[5]);
bt_state = 0;
}else{
data_analysis(tlv_data_value);
}
}
}else{
printf("\nuartrx[i] = %x .\n",uartrx[i]);
}
upgrade_state=0;
str_len = 0;
data_len = 0;
break;
}
uup_rx_state = 0;
break;
}
#endif
}
#if 1
}else{//升级逻辑
timeout ++;
uart_state = 3;
for (i = 0; i < len; i++) {
#if 1
switch (uup_rx_state) {
case 0:
if (uartrx[i] == 0x55) {
uup_rx_state++;
uup_rx_rev_len = 0;
uup_rx_ptr = &uup_rx_buf[uup_rx_head][0];
case 0:
if (uartrx[i] == 0x7e)
uup_rx_state++;
break;
case 1:
if (uartrx[i] == 0x05)
uup_rx_state++;
else
uup_rx_state = 0;
break;
case 2:
if (uartrx[i] == 0x02)
uup_rx_state++;
else
uup_rx_state = 0;
break;
case 3:
if (uartrx[i] == 0x03)
uup_rx_state++;
else
uup_rx_state = 0;
break;
case 4:
if (uartrx[i] == 0x01)
uup_rx_state++;
else
uup_rx_state = 0;
break;
case 5:
if (uartrx[i] == Get_sys_softwar_host())
uup_rx_state++;
else
uup_rx_state = 0;
break;
case 6:
if (uartrx[i] == Get_sys_softwar_order()){
if(Get_sys_veer_velocity()){
printf("error ota sj. Speed present\n");
Send_ota_state(1);
}else{
printf("enter ota sj.\n");
Set_sys_power_on_self_test(150);
Set_sys_upgrade_Flag(1);//进入ota界面
Send_ota_state(0);
if(timeout)
timeout=0;
}
}
uup_rx_state = 0;
break;
}
break;
case 1:
if (uartrx[i] == 0x81)
uup_rx_state++;
else
uup_rx_state = 0;
*uup_rx_ptr++ = uartrx[i];
break;
case 2:
if (uartrx[i] == 0xc6)
uup_rx_state++;
else
uup_rx_state = 0;
*uup_rx_ptr++ = uartrx[i];
break;
case 3:
uup_rx_data_len = uartrx[i];
//uup_rx_data_len = (uartrx[i]<<8);
uup_rx_state++;
*uup_rx_ptr++ = uartrx[i];
break;
case 4:
//uup_rx_data_len |= uartrx[i];
uup_rx_data_len = (uartrx[i]<<8) | uup_rx_data_len;
if((uup_rx_data_len > UUP_PACKET_A27_SIZE + 2)) { //4096 + 2
printf("Invalid uup_rx_data_len %d\n", uup_rx_data_len);
uup_rx_state = 0;
} else {
#endif
}
#if 1
}else{//升级逻辑
timeout ++;
uart_state = 3;
for (i = 0; i < len; i++) {
switch (uup_rx_state) {
case 0:
if (uartrx[i] == 0x55) {
uup_rx_state++;
uup_rx_rev_len = 0;
uup_rx_ptr = &uup_rx_buf[uup_rx_head][0];
}
break;
case 1:
if (uartrx[i] == 0x81)
uup_rx_state++;
else
uup_rx_state = 0;
*uup_rx_ptr++ = uartrx[i];
break;
case 2:
if (uartrx[i] == 0xc6)
uup_rx_state++;
else
uup_rx_state = 0;
*uup_rx_ptr++ = uartrx[i];
break;
case 3:
uup_rx_data_len = uartrx[i];
//uup_rx_data_len = (uartrx[i]<<8);
uup_rx_state++;
*uup_rx_ptr++ = uartrx[i];
break;
case 4:
//uup_rx_data_len |= uartrx[i];
uup_rx_data_len = (uartrx[i]<<8) | uup_rx_data_len;
if((uup_rx_data_len > UUP_PACKET_A27_SIZE + 2)) { //4096 + 2
printf("Invalid uup_rx_data_len %d\n", uup_rx_data_len);
uup_rx_state = 0;
} else {
uup_rx_state++;
*uup_rx_ptr++ = uartrx[i];
}
break;
case 5:
*uup_rx_ptr++ = uartrx[i];
if (++uup_rx_rev_len == uup_rx_data_len)
uup_rx_state++;
break;
case 6:
*uup_rx_ptr++ = uartrx[i];
uup_rx_head = (uup_rx_head + 1) % UUP_RX_FRAME_NUM;
uup_rx_state = 0;
break;
}
break;
case 5:
*uup_rx_ptr++ = uartrx[i];
if (++uup_rx_rev_len == uup_rx_data_len)
uup_rx_state++;
break;
case 6:
*uup_rx_ptr++ = uartrx[i];
uup_rx_head = (uup_rx_head + 1) % UUP_RX_FRAME_NUM;
uup_rx_state = 0;
break;
}
}
if (uup_rx_tail != uup_rx_head) {
unsigned char *buf;
unsigned char checksum = 0;
buf = &uup_rx_buf[uup_rx_tail][0];
//len = (buf[2]<<8)+buf[3];
len = buf[2];
len = buf[3]<<8 | len;
for (i = 0; i < len + 4; i++)
checksum ^= buf[i];
//printf("checksum = 0x%x , buf[len + 4] = 0x%x\n",checksum,buf[len + 4]);
if (checksum == buf[len + 4]) {
timeout =0;
uup_ota_update(uap, buf + 4, len);
} else {
printf("rev frame checksum err.\r\n");
}
uup_rx_tail = (uup_rx_tail + 1) % UUP_RX_FRAME_NUM;
}
if (uup_rx_tail != uup_rx_head) {
unsigned char *buf;
unsigned char checksum = 0;
buf = &uup_rx_buf[uup_rx_tail][0];
//len = (buf[2]<<8)+buf[3];
len = buf[2];
len = buf[3]<<8 | len;
for (i = 0; i < len + 4; i++)
checksum ^= buf[i];
//printf("checksum = 0x%x , buf[len + 4] = 0x%x\n",checksum,buf[len + 4]);
if (checksum == buf[len + 4]) {
timeout =0;
uup_ota_update(uap, buf + 4, len);
} else {
printf("rev frame checksum err.\r\n");
if(timeout >= 3000){//超时退出升级 大约40s
printf("exit ota sj.\n");
Set_sys_power_on_self_test(100);
Set_sys_upgrade_Flag(2);
printf("UART3_Type_regression .\n");
extern void UART3_Type_regression(void);
UART3_Type_regression();
timeout = 0;
}
uup_rx_tail = (uup_rx_tail + 1) % UUP_RX_FRAME_NUM;
#endif
}
if(timeout >= 3000){//超时退出升级 大约40s
printf("exit ota sj.\n");
Set_sys_power_on_self_test(100);
Set_sys_upgrade_Flag(2);
printf("UART3_Type_regression .\n");
extern void UART3_Type_regression(void);
UART3_Type_regression();
timeout = 0;
}
#endif
//收不到蓝牙心跳信息 复位串口
if(uart_flag==1) {
break;
}
//收不到蓝牙心跳信息 复位串口
if(uart_flag==1){
uart_flag = 2;
printf("reset uart.\r\n");
UART3_Modification_Type();
vUartClose(uap);
uap = xUartOpen(UART_BT_PORT);
UART3_Type_regression();
vUartInit(uap,115200,0);
bt_communication_heartbeat = 10;
}
uart_flag = 2;
printf("reset uart.\r\n");
//关闭发送任务
vTaskDelete(tx_task_handle);
//关闭Uart
vUartClose(uap);
//配置为GPIO
UART3_Modification_Type();
//延时100
vTaskDelay(pdMS_TO_TICKS(100));
//配置为Uart
UART3_Type_regression();
//重置心跳检测
bt_communication_heartbeat = 5;
}
}