From 2dab9fe33b309f27644afef34990bea30aca1071 Mon Sep 17 00:00:00 2001 From: Caisking Date: Mon, 30 Mar 2026 20:57:15 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96GPS?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- code/sdk/zhihui/services/gnss/inc/uart_gnss.h | 2 +- code/sdk/zhihui/services/gnss/src/gnss_ctl.c | 10 +++++--- code/sdk/zhihui/services/gnss/src/uart_gnss.c | 25 +++++++++++++------ 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/code/sdk/zhihui/services/gnss/inc/uart_gnss.h b/code/sdk/zhihui/services/gnss/inc/uart_gnss.h index 29c26f72c..1528f3830 100644 --- a/code/sdk/zhihui/services/gnss/inc/uart_gnss.h +++ b/code/sdk/zhihui/services/gnss/inc/uart_gnss.h @@ -32,7 +32,7 @@ typedef enum GNSS_CMD_MAX } gnss_cfg_cmd_type_t; -void do_gnss_cmd(int cmd,uint8_t *buffer,uint32_t size); +int32_t do_gnss_cmd(int cmd,uint8_t *buffer,uint32_t size); void gnss_receive_handler(uint8_t *buffer, int32_t size); diff --git a/code/sdk/zhihui/services/gnss/src/gnss_ctl.c b/code/sdk/zhihui/services/gnss/src/gnss_ctl.c index 1c3a432bb..93e3a0ebe 100644 --- a/code/sdk/zhihui/services/gnss/src/gnss_ctl.c +++ b/code/sdk/zhihui/services/gnss/src/gnss_ctl.c @@ -123,16 +123,20 @@ errcode_t gnss_start(void) { // do_gnss_cmd(GNSS_CMD_WRITEDATA,g_cfg_all_nmea_cmd,sizeof(g_cfg_all_nmea_cmd)); uint8_t cmd = GNSS_CMD_START; - do_gnss_cmd(GNSS_CMD_WRITEDATA, &cmd,1); + int32_t ret = do_gnss_cmd(GNSS_CMD_WRITEDATA, &cmd, 1); + if (ret != ERRCODE_SUCC) { + PRINT("gnss_start queue cmd failed, ret %d\n", ret); + return ret; + } g_gnss_status = 1; - return 0; + return ERRCODE_SUCC; } errcode_t gnss_stop(void) { // uint8_t cmd = GNSS_CMD_STOP; // do_gnss_cmd(GNSS_CMD_WRITEDATA, &cmd,1); - // g_gnss_status = 0; + g_gnss_status = 0; // GnssServerStop(); PGnssServerStop(); return 0; diff --git a/code/sdk/zhihui/services/gnss/src/uart_gnss.c b/code/sdk/zhihui/services/gnss/src/uart_gnss.c index 327d6df1e..24a54dfef 100644 --- a/code/sdk/zhihui/services/gnss/src/uart_gnss.c +++ b/code/sdk/zhihui/services/gnss/src/uart_gnss.c @@ -75,14 +75,14 @@ void do_gnss_cmd_head(int cmd,uint8_t *buffer,uint32_t size) } } -void do_gnss_cmd(int cmd,uint8_t *buffer,uint32_t size) +int32_t do_gnss_cmd(int cmd,uint8_t *buffer,uint32_t size) { int ret; if (buffer == NULL || size == 0 ) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"input buffer is NULL or size == 0"NEWLINE ); - return ; + return ERRCODE_FAIL; } gnss_cmd_t mail = {0}; if(cmd == GNSS_CMD_READDATA) @@ -90,7 +90,7 @@ void do_gnss_cmd(int cmd,uint8_t *buffer,uint32_t size) mail.buffer = osal_kmalloc(size+1, OSAL_GFP_KERNEL); if (mail.buffer == NULL) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"uart message buffer memory alloc fail, length is %d "NEWLINE, size); - return; + return ERRCODE_FAIL; } memset_s(mail.buffer,size+1,0,size+1); memcpy_s(mail.buffer,MAX_BUFFER_SIZE,buffer,size); @@ -107,8 +107,13 @@ void do_gnss_cmd(int cmd,uint8_t *buffer,uint32_t size) sizeof(gnss_cmd_t), 0); if (ret != OSAL_SUCCESS) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"Error gnss cmd msg %d send failed! err=0x%02X!"NEWLINE,cmd, ret); + if ((cmd == GNSS_CMD_READDATA) && (mail.buffer != NULL)) { + osal_kfree(mail.buffer); + mail.buffer = NULL; + } + return ret; } - + return ERRCODE_SUCC; } uint32_t gnss_write_cmd(uint8_t * cmdbuf,uint16_t cmdlen) @@ -189,7 +194,12 @@ static void uart_event_task(void const *arg) case GNSS_CMD_START: // gnss_get_start_cmd(&buf,&len); // GnssServerStart(); - PGnssServerStart(); + if (is_gnss_on()) { + PGnssServerStart(); + } else { + WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE, + "drop stale GNSS_CMD_START because gnss_status=0\r\n"); + } last_cfg_cmd_index = 0xFF; //last_cfg_cmd_index=0xFF 代表cfg结束写入,开始检测其他指令 handled_no_uart_write = true; break; @@ -214,8 +224,7 @@ static void uart_event_task(void const *arg) WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE,"GNSS_CMD_WRITEDATA cmdtype %d failed \r\n",mail.cmd_type); } } - if(mail.cmd == GNSS_CMD_READDATA) - { + if ((mail.cmd == GNSS_CMD_READDATA) && (mail.buffer != NULL)) { osal_kfree(mail.buffer); //只有接收的缓存需要free,发送的都是静态数组,无需申请缓存 mail.buffer = NULL; } @@ -227,7 +236,7 @@ void gnss_receive_handler(uint8_t *buffer, int32_t size) // WEARABLE_LOGD(WEARABLE_LOG_MODULE_MAIN_SERVICE,"gnss_receive_handler %d \n",size); if (g_gnss_cmd_queue!= 0xFFFFFFFF) { - do_gnss_cmd(GNSS_CMD_READDATA,buffer,size); + (void)do_gnss_cmd(GNSS_CMD_READDATA,buffer,size); } } -- 2.17.1