{
// 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;
}
}
-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)
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);
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)
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;
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;
}
// 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);
}
}