GNSS 服务搭建 1516/1 1516/head 1520/target/1
authorSnickerSun <snickersun@163.com>
Fri, 13 Dec 2024 02:11:51 +0000 (10:11 +0800)
committerSnickerSun <snickersun@163.com>
Fri, 13 Dec 2024 02:11:51 +0000 (10:11 +0800)
code/sdk/application/wstp/at_service/app/app_at_process.c
code/sdk/drivers/boards/brandy_evb/board_config/board_u8.h
code/sdk/zhihui/gnss/CMakeLists.txt
code/sdk/zhihui/gnss/gnss_config_array.c [moved from code/sdk/zhihui/gnss/gnss_config_array.h with 97% similarity]
code/sdk/zhihui/gnss/gnss_ctl.c
code/sdk/zhihui/gnss/gnss_ctl.h
code/sdk/zhihui/gnss/uart_gnss.c
code/sdk/zhihui/gnss/uart_gnss.h

index ca2ccdc..263294c 100644 (file)
@@ -1862,19 +1862,28 @@ uint32_t gps_on(uint8_t *data, uint32_t data_len)
 \r
     char *ptr = (char *)data;\r
     uint32_t mode = strtoul(ptr, NULL, 10);\r
+\r
+    wstp_print("gnss cmd: 0 poweroff , 1 power on , 2 load_cfg , 3 start , 4 stop\r\n");\r
     if (mode == 0) {\r
-        wstp_print("gnss_stop\r\n");\r
-        gnss_stop();\r
-        osDelay(500);\r
-        wstp_print("gnss_power_off\r\n");\r
+        // osDelay(500);\r
+        wstp_print("0 gnss_power_off\r\n");\r
         gnss_power_off();\r
-    }else{\r
-        wstp_print("gnss_power_on\r\n");\r
+    }else if (mode == 1)  {\r
+        wstp_print("1 gnss_power_on\r\n");\r
         gnss_power_on();\r
-        osDelay(500);\r
-        wstp_print("gnss_start\r\n");\r
+    }else if (mode == 2)  {\r
+        \r
+        wstp_print("2 gnss_load_cfg\r\n");\r
+        gnss_load_cfg();\r
+    }else if (mode == 3)  {\r
+        wstp_print("3 gnss_start\r\n");\r
         gnss_start();\r
+    }else {\r
+        // osDelay(500);\r
+        wstp_print("4 gnss_stop\r\n");\r
+        gnss_stop();\r
     }\r
+\r
     return  ERRCODE_SUCC;\r
 }\r
 \r
index f4acaf5..73532fa 100644 (file)
@@ -113,8 +113,10 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = {
     { 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
@@ -267,6 +269,8 @@ const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = {
     {   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 },
@@ -282,15 +286,15 @@ const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = {
 
     //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 },
index d176704..679cc2b 100644 (file)
@@ -4,6 +4,7 @@
 #===============================================================================
 set(COMPONENT_NAME "gnss")
 set(SOURCES ${SOURCES}
+    ${CMAKE_CURRENT_SOURCE_DIR}/gnss_config_array.c
     ${CMAKE_CURRENT_SOURCE_DIR}/uart_gnss.c
     ${CMAKE_CURRENT_SOURCE_DIR}/gnss_ctl.c
 )
similarity index 97%
rename from code/sdk/zhihui/gnss/gnss_config_array.h
rename to code/sdk/zhihui/gnss/gnss_config_array.c
index 9f90124..a90dd5a 100644 (file)
@@ -7,15 +7,19 @@
  * 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
 };
@@ -55,7 +59,7 @@ e2 41 3b 20 99 00 00 ef e2 c1 33 00 00 00 00 ef e2 01 22 20 99 00 00 ef e2 81 16
 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,
@@ -158,7 +162,7 @@ ce 5e 1d 39 a0 3e 1d a3 1e 05 02 39 a0 83 45 d5 03 93 f5 75 0e a3 0e b5 02 01 45
 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,
@@ -261,7 +265,7 @@ a0 03 45 c5 0e 93 35 15 00 13 06 60 0e 8b 92 04 01 13 05 30 11 19 a0 13 05 00 14
 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,
@@ -364,7 +368,7 @@ c8 05 03 03 56 64 00 83 56 24 00 37 05 23 00 13 05 e5 17 b7 b5 00 25 93 85 25 4c
 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,
@@ -467,7 +471,7 @@ c5 85 b1 13 05 85 b0 d3 96 00 a2 b3 04 a4 00 81 c6 99 c1 81 45 82 14 32 85 ef 50
 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,
@@ -570,7 +574,7 @@ fa 26 88 ef f0 cd 9d 05 46 d3 05 00 f0 01 45 ee 85 ee 86 53 85 94 20 5e 87 a6 87
 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,
@@ -673,7 +677,7 @@ a5 09 00 07 34 05 08 37 a5 09 00 87 34 85 08 01 45 81 4a b7 15 09 00 13 8b 45 9a
 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,
@@ -776,7 +780,7 @@ e5 39 e1 30 00 26 85 ca 85 ef 80 67 e4 0d ed 90 10 26 85 ca 85 ef 80 a7 e3 1d e5
 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,
@@ -879,7 +883,7 @@ const char g_cfg_cmd8[] = {
 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,
@@ -950,17 +954,34 @@ const char g_cfg_cmd9[] = {
 /*
 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) },
@@ -975,3 +996,40 @@ const struct cfg_cmd g_cfg_cmds[] = {
     { 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
index d347204..57704d5 100644 (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)
 {
 
@@ -71,14 +55,19 @@ S_AGPIO_L28    GPS_1V8
     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);
@@ -102,7 +91,7 @@ S_AGPIO_L28    GPS_1V8
     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;
@@ -165,18 +154,31 @@ S_AGPIO_L28    GPS_1V8
 }
 
 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;
 
index 64ff61a..a77dc53 100644 (file)
@@ -21,6 +21,7 @@
 errcode_t gnss_init(void);
 errcode_t gnss_power_on(void);
 errcode_t gnss_power_off(void);
+errcode_t gnss_load_cfg(void);
 errcode_t gnss_start(void);
 errcode_t gnss_stop(void);
 uint8_t is_gnss_on(void);
index f44afc1..f6ad3ac 100644 (file)
 #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;
 
@@ -50,10 +56,46 @@ void do_gnss_cmd(int cmd,uint8_t *buffer,uint32_t size)
         }
         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);
@@ -61,7 +103,7 @@ void do_gnss_cmd(int cmd,uint8_t *buffer,uint32_t size)
     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);
     }
     
 }
@@ -92,6 +134,7 @@ static void uart_event_task(void const *arg)
     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) {
 
@@ -106,11 +149,65 @@ static void uart_event_task(void const *arg)
         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,发送的都是静态数组,无需申请缓存
index f49bb64..29c26f7 100644 (file)
@@ -23,6 +23,14 @@ int gnss_uart_init(void);
 
 #define GNSS_CMD_READDATA 0x01
 #define GNSS_CMD_WRITEDATA 0x02
+typedef enum
+{
+    GNSS_CMD_CFG_INIT=1,
+    GNSS_CMD_NMEA_CFG,
+    GNSS_CMD_START,
+    GNSS_CMD_STOP,
+    GNSS_CMD_MAX
+} gnss_cfg_cmd_type_t;
 
 void do_gnss_cmd(int cmd,uint8_t *buffer,uint32_t size);