{ HAL_PIO_FUNC_I2C3_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO18 I2C3 SDA
{ HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO19 uart1 tx
{ HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO20 uart1 rx
- { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO21 uart1 rts
- { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO22 uart1 cts
+ // { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO21 uart1 rts
+ // { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO22 uart1 cts
+ { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO21 uart1 rts
+ { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO22 uart1 cts
{ HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO23 NC
{ HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO24 NC
{ HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO25 NC
{ S_AGPIO_L23, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, //GPS_BAT_ON
{ S_AGPIO_L28, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, //GPS_1V8
{ S_AGPIO_L30, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, //S_AGPIO_L30
+ { S_MGPIO21, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, //S_MGPIO21
+ { S_MGPIO22, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, //S_MGPIO22
// S_AGPIO_L17 HX3507_INT
// { S_AGPIO_L17, HAL_GPIO_DIRECTION_INPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
//S_AGPIO_L21 NTC_VDD_ON 给低打开 NTC上拉电源 ,默认关闭
{ S_AGPIO_L21, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL },
-#if 0 //默认正常充电
-// #define GPIO_PIN_ENABLE_CHARGE S_AGPIO_R9 //low enable
-// #define GPIO_PIN_ENABLE_CHARGE_0_2C S_AGPIO_L20 //low 0.2c 低电流充电
- { S_AGPIO_R9, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
- { S_AGPIO_L20, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
-#else
- { S_AGPIO_R9, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
- { S_AGPIO_L20, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL },
-#endif
+// #if 0 //默认正常充电
+// // #define GPIO_PIN_ENABLE_CHARGE S_AGPIO_R9 //low enable
+// // #define GPIO_PIN_ENABLE_CHARGE_0_2C S_AGPIO_L20 //low 0.2c 低电流充电
+// { S_AGPIO_R9, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
+// { S_AGPIO_L20, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
+// #else
+// { S_AGPIO_R9, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
+// { S_AGPIO_L20, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL },
+// #endif
//默认关闭马达
{ S_AGPIO_R2, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
* 2024-01-08, Create file.
*/
+#include "stdint.h"
+#include "stdlib.h"
+#include "errcode.h"
+
struct cfg_cmd {
- const char *content;
+ const uint8_t *content;
int len;
};
/*
46 49 4c 45 53 20 30 78 30 30 30 39 38 30 30 30 20
*/
-const char g_cfg_cmd0[] = {
+const uint8_t g_cfg_cmd0[] = {
0x46, 0x49, 0x4c, 0x45, 0x53, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x39, 0x38, 0x30, 0x30, 0x30,
0x20
};
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 e3 62
*/
-const char g_cfg_cmd1[] = {
+const uint8_t g_cfg_cmd1[] = {
0x01, 0x01, 0xfe, 0xef, 0xb2, 0xc8, 0x63, 0xc0, 0x99, 0x32, 0x89, 0xef, 0x02, 0xd9, 0x0d, 0xd1,
0xb7, 0x00, 0x00, 0xef, 0x82, 0x04, 0x47, 0xd0, 0x99, 0x37, 0xe5, 0x00, 0x00, 0x00, 0x00, 0xef,
0x02, 0x92, 0x00, 0xef, 0x22, 0x52, 0x7e, 0xdc, 0x9a, 0x13, 0x01, 0x82, 0x80, 0x00, 0x00, 0xef,
25 44 09 83 25 44 08 83 06 04 07 a3 0c 04 06 13 06 15 00 03 25 04 0b fd 16 94 92 23 2a c4 08 8b
df 06 02 ef 34
*/
-const char g_cfg_cmd2[] = {
+const uint8_t g_cfg_cmd2[] = {
0x01, 0x02, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x09, 0x00, 0x27, 0x00, 0x00, 0x00, 0x09,
0xd0, 0x00, 0x00, 0x31, 0x7d, 0x00, 0x00, 0xe9, 0x09, 0x05, 0x00, 0x79, 0x8e, 0x07, 0x00, 0xe1,
0x65, 0x07, 0x00, 0xa9, 0x8d, 0x05, 0x00, 0x99, 0x01, 0x08, 0x00, 0xd1, 0x13, 0x05, 0x00, 0x09,
84 93 05 40 15 13 09 a0 0f 0b 05 05 03 ef 40 ac 95 03 45 c5 0e 93 05 e0 15 ab 65 a9 20 23 10 b4
00 0b 96 89 8c
*/
-const char g_cfg_cmd3[] = {
+const uint8_t g_cfg_cmd3[] = {
0x01, 0x03, 0xfc, 0x2b, 0x86, 0xb5, 0xbe, 0xab, 0x35, 0xb6, 0xbe, 0x15, 0x46, 0xef, 0xc0, 0x29,
0xb6, 0xb7, 0xa5, 0x09, 0x00, 0x93, 0x85, 0x85, 0xf0, 0xab, 0x85, 0x95, 0x04, 0x8c, 0x41, 0x23,
0x28, 0xa4, 0x0a, 0x63, 0x60, 0xb5, 0x02, 0x23, 0x08, 0x04, 0x06, 0x0d, 0x45, 0xa3, 0x0c, 0xa4,
ca 54 45 18 45 37 a6 09 00 07 30 86 01 03 46 15 02 d3 80 16 d2 53 01 17 d2 43 70 01 0a 0b 53 16
06 85 46 79 0c
*/
-const char g_cfg_cmd4[] = {
+const uint8_t g_cfg_cmd4[] = {
0x01, 0x04, 0xfb, 0x04, 0x01, 0xef, 0x40, 0x2c, 0x94, 0x03, 0x45, 0xc5, 0x0e, 0x93, 0x05, 0xb0,
0x12, 0xab, 0x65, 0xa9, 0x20, 0x23, 0x10, 0xb4, 0x00, 0xa0, 0x99, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x99, 0x3d, 0xcd, 0xae, 0x84, 0x2a, 0x84, 0x03, 0x29, 0x45, 0x02, 0xa3, 0x0c, 0xb5, 0x02, 0xef,
09 90 18 c5 35 4a 20 ea 20 0a 31 27 34 04 02 27 38 14 02 27 3c 24 02 07 30 04 00 87 b0 04 00 53
70 10 0a 5a 55
*/
-const char g_cfg_cmd5[] = {
+const uint8_t g_cfg_cmd5[] = {
0x01, 0x05, 0xfa, 0xb3, 0x96, 0xc6, 0x00, 0x93, 0xf6, 0x96, 0x02, 0x9d, 0xce, 0xab, 0xe6, 0x35,
0x44, 0x11, 0xca, 0x03, 0x05, 0x05, 0x02, 0x0b, 0x17, 0x06, 0x03, 0x37, 0x07, 0x04, 0x20, 0x13,
0x07, 0x07, 0xde, 0x21, 0xa8, 0x03, 0x05, 0x05, 0x02, 0x37, 0x57, 0x04, 0x20, 0x13, 0x07, 0x07,
f0 0d 9c 83 24 44 fb 63 8a 09 00 5e 85 ce 85 6e 86 ee 86 03 27 04 fb ef f0 8d a3 26 81 53 05 84
20 13 01 f6 d7
*/
-const char g_cfg_cmd6[] = {
+const uint8_t g_cfg_cmd6[] = {
0x01, 0x06, 0xf9, 0x87, 0x30, 0x84, 0x00, 0x07, 0xb1, 0x84, 0x00, 0x87, 0x31, 0x04, 0x01, 0x07,
0xb2, 0x04, 0x01, 0x02, 0xa9, 0x53, 0xf0, 0x20, 0x0a, 0x02, 0xad, 0x53, 0xf0, 0x41, 0x0a, 0x02,
0xb1, 0x4a, 0xd5, 0x28, 0x10, 0x0c, 0x09, 0x13, 0x06, 0x00, 0x02, 0xef, 0x80, 0xc6, 0x8e, 0x28,
70 90 12 53 15 00 c2 23 1a a4 08 13 85 15 00 23 00 ac 00 13 85 14 00 e8 90 e3 dc 9b f4 85 0a 13
f5 fa 0f 0c c2
*/
-const char g_cfg_cmd7[] = {
+const uint8_t g_cfg_cmd7[] = {
0x01, 0x07, 0xf8, 0x04, 0xfa, 0xe2, 0x24, 0x02, 0x34, 0x28, 0x9e, 0xc0, 0x99, 0x2e, 0x84, 0xaa,
0x84, 0xef, 0xd0, 0xeb, 0xa2, 0x15, 0xc5, 0xef, 0x50, 0xce, 0xc9, 0x37, 0xa5, 0x09, 0x00, 0x87,
0x25, 0x05, 0x07, 0x53, 0x85, 0xa5, 0xa0, 0x05, 0x49, 0x09, 0xed, 0xe0, 0x91, 0x26, 0x85, 0xef,
6c 6c 65 73 2c 48 37 53 31 2c 51 33 35 2c 46 31 50 31 30 2e 30 00 24 41 63 68 69 6c 6c 65 73 2c
48 37 53 a5 d7
*/
-const char g_cfg_cmd8[] = {
+const uint8_t g_cfg_cmd8[] = {
0x01, 0x08, 0xf7, 0xe3, 0x6c, 0x45, 0xf3, 0x87, 0x34, 0x81, 0x29, 0x07, 0x34, 0x01, 0x2a, 0x13,
0x01, 0x01, 0x23, 0x3c, 0x9e, 0x00, 0x00, 0xc0, 0x99, 0x2e, 0x89, 0xaa, 0x84, 0x93, 0x06, 0xc5,
0x10, 0x37, 0xa5, 0x09, 0x00, 0x13, 0x06, 0x05, 0x09, 0x93, 0x05, 0x00, 0x08, 0x4a, 0x85, 0xef,
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 4a a7
*/
-const char g_cfg_cmd9[] = {
+const uint8_t g_cfg_cmd9[] = {
0x01, 0x09, 0xf6, 0x31, 0x2c, 0x51, 0x35, 0x30, 0x2c, 0x46, 0x31, 0x50, 0x31, 0x30, 0x2e, 0x30,
0x00, 0x2c, 0x25, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
/*
04
*/
-const char g_cfg_cmd10[] = {
+const uint8_t g_cfg_cmd10[] = {
0x04
};
/*
51 55 49 54 20
*/
-const char g_cfg_cmd11[] = {
+const uint8_t g_cfg_cmd11[] = {
0x51, 0x55, 0x49, 0x54, 0x20
};
+
+
+// 配置GNSS输出全量NMEA命令:7e 04 13 00 03 00 04 01 00 00 06 00 03 00 02 00 ff 00 7e
+const uint8_t g_cfg_all_nmea_cmd[]={0x7e,0x04,0x13,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x06,0x00,0x03,0x00,0x02,0x00,0xff,0x00,0x7e};
+// 调用主控UART接口发送配置GNSS命令,配置输出全量NMEA语句
+
+
+// 启动GNSS串口命令:7e 04 19 00 01 00 03 00 00 00 0c 00 01 00 00 00 01 00 01 00 00 00 00 00 7e
+const uint8_t g_start_gnss_cmd[] = {0x7e,0x04,0x19,0x00,0x01,0x00,0x03,0x00,0x00,0x00,0x0c,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x7e};
+// 调用主控UART接口发送启动GNSS命令
+
+
+// 停止GNSS串口命令:7e 04 0d 00 02 00 00 00 00 00 00 00 7e
+const uint8_t g_stop_gnss_cmd[] = {0x7e,0x04,0x0d,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e};
+// 调用主控UART接口发送停止GNSS命令
+
+
const struct cfg_cmd g_cfg_cmds[] = {
{ g_cfg_cmd0, sizeof(g_cfg_cmd0) },
{ g_cfg_cmd1, sizeof(g_cfg_cmd1) },
{ g_cfg_cmd10, sizeof(g_cfg_cmd10) },
{ g_cfg_cmd11, sizeof(g_cfg_cmd11) },
};
+
+#define GNSS_CFG_SIZE (sizeof(g_cfg_cmds)/sizeof(g_cfg_cmds[0]))
+
+
+errcode_t gnss_get_current_cmd(uint8_t cmd_index,uint8_t** cmdbuf,int *cmdlen)
+{
+ if (cmd_index<GNSS_CFG_SIZE)
+ {
+ *cmdbuf=g_cfg_cmds[cmd_index].content;
+ *cmdlen=g_cfg_cmds[cmd_index].len;
+ return 0;
+ }
+ else
+ {
+ return -1;
+
+ }
+}
+errcode_t gnss_get_nmea_cfg_cmd(uint8_t** cmdbuf,int *cmdlen)
+{
+ *cmdbuf = g_cfg_all_nmea_cmd;
+ *cmdlen = sizeof(g_cfg_all_nmea_cmd);
+ return 0;
+}
+
+errcode_t gnss_get_stop_cmd(uint8_t** cmdbuf,int *cmdlen)
+{
+ *cmdbuf = g_stop_gnss_cmd;
+ *cmdlen = sizeof(g_stop_gnss_cmd);
+ return 0;
+}
+errcode_t gnss_get_start_cmd(uint8_t** cmdbuf,int *cmdlen)
+{
+ *cmdbuf = g_start_gnss_cmd;
+ *cmdlen = sizeof(g_start_gnss_cmd);
+ return 0;
+}
\ No newline at end of file
#include "thread_init.h"
#include "custom_utils.h"
#include "gnss_ctl.h"
-#include "gnss_config_array.h"
#include "gpio.h"
#include "uart_gnss.h"
-// 配置GNSS输出全量NMEA命令:7e 04 13 00 03 00 04 01 00 00 06 00 03 00 02 00 ff 00 7e
-const char g_cfg_all_nmea_cmd[]={0x7e,0x04,0x13,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x06,0x00,0x03,0x00,0x02,0x00,0xff,0x00,0x7e};
-// 调用主控UART接口发送配置GNSS命令,配置输出全量NMEA语句
-
-
-// 启动GNSS串口命令:7e 04 19 00 01 00 03 00 00 00 0c 00 01 00 00 00 01 00 01 00 00 00 00 00 7e
-const char g_start_gnss_cmd[] = {0x7e,0x04,0x19,0x00,0x01,0x00,0x03,0x00,0x00,0x00,0x0c,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x7e};
-// 调用主控UART接口发送启动GNSS命令
-
-
-// 停止GNSS串口命令:7e 04 0d 00 02 00 00 00 00 00 00 00 7e
-const char g_stop_gnss_cmd[] = {0x7e,0x04,0x0d,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e};
-// 调用主控UART接口发送停止GNSS命令
-
-
errcode_t gnss_init(void)
{
ret=uapi_gpio_set_dir(S_AGPIO_L28,GPIO_DIRECTION_OUTPUT);
if (ret != ERRCODE_SUCC) PRINT("set_dir S_AGPIO_L28,GPIO_DIRECTION_OUTPUT ret %d\n",ret);
- ret=uapi_gpio_set_val(S_AGPIO_L23, GPIO_LEVEL_HIGH); // crystal sw
- PRINT("GPS_BAT_ON set_value S_AGPIO_L23 GPIO_LEVEL_HIGH ret %d\n",ret);
-
ret=uapi_gpio_set_val(S_AGPIO_L28 , GPIO_LEVEL_HIGH); // gps V3.3 sw en
PRINT("GPS_1V8 set_value S_AGPIO_L28 GPIO_LEVEL_HIGH ret %d\n",ret);
+ ret=uapi_gpio_set_val(S_AGPIO_L23, GPIO_LEVEL_HIGH); // crystal sw
+ PRINT("GPS_BAT_ON set_value S_AGPIO_L23 GPIO_LEVEL_HIGH ret %d\n",ret);
+
+ ret=uapi_gpio_set_val(S_AGPIO_L30, GPIO_LEVEL_LOW); //gps reset
+ PRINT("GPS_PWREN set_value S_AGPIO_L30 GPIO_LEVEL_LOW ret %d\n",ret);
+ osDelay(1000);
ret=uapi_gpio_set_val(S_AGPIO_L30, GPIO_LEVEL_HIGH); //gps reset
- PRINT("GPS_PWRON set_value S_AGPIO_L30 GPIO_LEVEL_HIGH ret %d\n",ret);
+ PRINT("GPS_PWREN set_value S_AGPIO_L30 GPIO_LEVEL_HIGH ret %d\n",ret);
+
+
#elif defined (BOARD_L22) || defined (BOARD_W9)
// ret=uapi_gpio_set_dir(S_AGPIO_L16,GPIO_DIRECTION_OUTPUT);
PRINT("GPS_BAT_ON set_value S_AGPIO_R9 GPIO_LEVEL_HIGH ret %d\n",ret);
ret=uapi_gpio_set_val(S_AGPIO_L32, GPIO_LEVEL_HIGH); //gps reset
- PRINT("GPS_PWRON set_value S_AGPIO_L32 GPIO_LEVEL_HIGH ret %d\n",ret);
+ PRINT("GPS_PWREN set_value S_AGPIO_L32 GPIO_LEVEL_HIGH ret %d\n",ret);
#endif
return ERRCODE_SUCC;
}
static uint8_t g_gnss_status=0;
+
+
+errcode_t gnss_load_cfg(void)
+{
+ // do_gnss_cmd(GNSS_CMD_WRITEDATA,g_cfg_all_nmea_cmd,sizeof(g_cfg_all_nmea_cmd));
+ uint8_t cmd = GNSS_CMD_CFG_INIT;
+ do_gnss_cmd(GNSS_CMD_WRITEDATA, &cmd,1);
+ g_gnss_status = 1;
+ return 0;
+}
+
+
errcode_t gnss_start(void)
{
- do_gnss_cmd(GNSS_CMD_WRITEDATA,g_start_gnss_cmd,sizeof(g_start_gnss_cmd));
- do_gnss_cmd(GNSS_CMD_WRITEDATA,g_cfg_all_nmea_cmd,sizeof(g_cfg_all_nmea_cmd));
+ // 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);
g_gnss_status = 1;
return 0;
}
errcode_t gnss_stop(void)
{
-
- do_gnss_cmd(GNSS_CMD_WRITEDATA,g_stop_gnss_cmd,sizeof(g_stop_gnss_cmd));
+ uint8_t cmd = GNSS_CMD_STOP;
+ do_gnss_cmd(GNSS_CMD_WRITEDATA, &cmd,1);
g_gnss_status = 0;
return 0;
#include "custom_utils.h"
#include "uart_gnss.h"
#include "gnss_ctl.h"
+errcode_t gnss_get_next_cmd(uint8_t cmd_index,uint8_t** cmdbuf,int *cmdlen);
+errcode_t gnss_get_current_cmd(uint8_t cmd_index,uint8_t** cmdbuf,int *cmdlen);
+errcode_t gnss_get_nmea_cfg_cmd(uint8_t** cmdbuf,int *cmdlen);
+errcode_t gnss_get_stop_cmd(uint8_t** cmdbuf,int *cmdlen);
+errcode_t gnss_get_start_cmd(uint8_t** cmdbuf,int *cmdlen);
static unsigned long g_gnss_cmd_queue= 0xFFFFFFFF;
#define MAX_BUFFER_SIZE (256)
typedef struct {
uint8_t cmd;
+ uint8_t cmd_type;
uint32_t size;
uint8_t *buffer;
} gnss_cmd_t;
-void do_gnss_cmd(int cmd,uint8_t *buffer,uint32_t size)
+void do_gnss_cmd_head(int cmd,uint8_t *buffer,uint32_t size)
{
int ret;
}
memset_s(mail.buffer,size+1,0,size+1);
memcpy_s(mail.buffer,MAX_BUFFER_SIZE,buffer,size);
+ mail.cmd_type=0;
}else{
+ mail.cmd_type= *buffer;
mail.buffer = buffer;
}
+ mail.cmd = cmd;
+ mail.size = size;
+ // unsigned int quesize=osal_msg_queue_get_msg_num(g_gnss_cmd_queue);
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"do_uart_slip_cmd quesize %d\n",quesize);
+ ret = osal_msg_queue_write_head_copy(g_gnss_cmd_queue, (void *)&mail,
+ 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);
+ }
+}
+void 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 ;
+ }
+ gnss_cmd_t mail = {0};
+ if(cmd == GNSS_CMD_READDATA)
+ { //只有接收的缓存需要malloc,发送的都是静态数组,无需申请缓存
+ 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;
+ }
+ memset_s(mail.buffer,size+1,0,size+1);
+ memcpy_s(mail.buffer,MAX_BUFFER_SIZE,buffer,size);
+ mail.cmd_type=0;
+ }else{
+ mail.cmd_type= *buffer;
+ mail.buffer = buffer;
+ }
mail.cmd = cmd;
mail.size = size;
// unsigned int quesize=osal_msg_queue_get_msg_num(g_gnss_cmd_queue);
ret = osal_msg_queue_write_copy(g_gnss_cmd_queue, (void *)&mail,
sizeof(gnss_cmd_t), 0);
if (ret != OSAL_SUCCESS) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"Error uart_slip cmd msg %d send failed! err=0x%02X!"NEWLINE,cmd, ret);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"Error gnss cmd msg %d send failed! err=0x%02X!"NEWLINE,cmd, ret);
}
}
int32_t ret;
gnss_cmd_t mail;
uint32_t msgsize = (uint32_t)sizeof(gnss_cmd_t);
+ static uint8_t last_cfg_cmd_index=0xFF;
while (1) {
if (mail.cmd == GNSS_CMD_READDATA) {
WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE,"recv size=%d! %s \r\n",mail.size,mail.buffer);
+ if (last_cfg_cmd_index != 0xFF) //说明正在执行GNSS_CMD_CFG_INIT 且是第二次以后写
+ {
+ last_cfg_cmd_index++;
+ uint32_t wlen=0;
+ uint8_t *buf=NULL;
+ uint16_t len=0;
+ if (gnss_get_current_cmd(last_cfg_cmd_index,&buf,&len)==0)
+ {
+ WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE,"write next cmd[%d] size=%d! %s \r\n",last_cfg_cmd_index,len);
+ wlen=gnss_write_cmd(buf,len);
+ }else{
+ WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE,"no next cmd, stopped! \r\n");
+ last_cfg_cmd_index = 0xFF; //last_cfg_cmd_index=0xFF 代表结束写入
+ }
+ }
+
}else if (mail.cmd == GNSS_CMD_WRITEDATA)
{
- uint32_t wlen=gnss_write_cmd(mail.buffer,mail.size);
- WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE,"GNSS_CMD_WRITEDATA written len %d\r\n",wlen);
+ uint32_t wlen=0;
+ uint8_t *buf=NULL;
+ uint16_t len=0;
+ switch(mail.cmd_type)
+ {
+ case GNSS_CMD_CFG_INIT:
+ WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE,"last_cfg_cmd_index %d \r\n",last_cfg_cmd_index);
+ if (last_cfg_cmd_index == 0xFF) //第一次写
+ {
+ if (gnss_get_current_cmd(0,&buf,&len)==0)
+ {
+ WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE,"last_cfg_cmd_index %d \r\n",last_cfg_cmd_index);
+ last_cfg_cmd_index = 0;
+ }
+ }
+ break;
+ case GNSS_CMD_NMEA_CFG:
+ gnss_get_nmea_cfg_cmd(&buf,&len);
+ last_cfg_cmd_index = 0xFF; //last_cfg_cmd_index=0xFF 代表cfg结束写入,开始检测其他指令
+ break;
+ case GNSS_CMD_START:
+ gnss_get_start_cmd(&buf,&len);
+ last_cfg_cmd_index = 0xFF; //last_cfg_cmd_index=0xFF 代表cfg结束写入,开始检测其他指令
+ break;
+ case GNSS_CMD_STOP:
+ gnss_get_stop_cmd(&buf,&len);
+ last_cfg_cmd_index = 0xFF; //last_cfg_cmd_index=0xFF 代表cfg结束写入,开始检测其他指令
+ break;
+ default:
+ buf = mail.buffer;
+ len = mail.size;
+ break;
+ }
+ if (buf!=NULL)
+ {
+ wlen=gnss_write_cmd(buf,len);
+ WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE,"GNSS_CMD_WRITEDATA cmdtype %d, written len %d\r\n",mail.cmd_type,wlen);
+ }else{
+ WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE,"GNSS_CMD_WRITEDATA cmdtype %d failed \r\n",mail.cmd_type);
+ }
}
if(mail.cmd == GNSS_CMD_READDATA)
osal_kfree(mail.buffer); //只有接收的缓存需要free,发送的都是静态数组,无需申请缓存