From 3299beeffc62fcbf809502dbe68ddbcb8356d9c3 Mon Sep 17 00:00:00 2001 From: SnickerSun Date: Fri, 13 Dec 2024 10:11:51 +0800 Subject: [PATCH] =?utf8?q?GNSS=20=E6=9C=8D=E5=8A=A1=E6=90=AD=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../wstp/at_service/app/app_at_process.c | 25 +++-- .../boards/brandy_evb/board_config/board_u8.h | 26 +++-- code/sdk/zhihui/gnss/CMakeLists.txt | 1 + ...nss_config_array.h => gnss_config_array.c} | 84 +++++++++++--- code/sdk/zhihui/gnss/gnss_ctl.c | 52 ++++----- code/sdk/zhihui/gnss/gnss_ctl.h | 1 + code/sdk/zhihui/gnss/uart_gnss.c | 105 +++++++++++++++++- code/sdk/zhihui/gnss/uart_gnss.h | 8 ++ 8 files changed, 241 insertions(+), 61 deletions(-) rename code/sdk/zhihui/gnss/{gnss_config_array.h => gnss_config_array.c} (97%) diff --git a/code/sdk/application/wstp/at_service/app/app_at_process.c b/code/sdk/application/wstp/at_service/app/app_at_process.c index ca2ccdcd1..263294cdf 100644 --- a/code/sdk/application/wstp/at_service/app/app_at_process.c +++ b/code/sdk/application/wstp/at_service/app/app_at_process.c @@ -1862,19 +1862,28 @@ uint32_t gps_on(uint8_t *data, uint32_t data_len) char *ptr = (char *)data; uint32_t mode = strtoul(ptr, NULL, 10); + + wstp_print("gnss cmd: 0 poweroff , 1 power on , 2 load_cfg , 3 start , 4 stop\r\n"); if (mode == 0) { - wstp_print("gnss_stop\r\n"); - gnss_stop(); - osDelay(500); - wstp_print("gnss_power_off\r\n"); + // osDelay(500); + wstp_print("0 gnss_power_off\r\n"); gnss_power_off(); - }else{ - wstp_print("gnss_power_on\r\n"); + }else if (mode == 1) { + wstp_print("1 gnss_power_on\r\n"); gnss_power_on(); - osDelay(500); - wstp_print("gnss_start\r\n"); + }else if (mode == 2) { + + wstp_print("2 gnss_load_cfg\r\n"); + gnss_load_cfg(); + }else if (mode == 3) { + wstp_print("3 gnss_start\r\n"); gnss_start(); + }else { + // osDelay(500); + wstp_print("4 gnss_stop\r\n"); + gnss_stop(); } + return ERRCODE_SUCC; } diff --git a/code/sdk/drivers/boards/brandy_evb/board_config/board_u8.h b/code/sdk/drivers/boards/brandy_evb/board_config/board_u8.h index f4acaf5c6..73532fa62 100644 --- a/code/sdk/drivers/boards/brandy_evb/board_config/board_u8.h +++ b/code/sdk/drivers/boards/brandy_evb/board_config/board_u8.h @@ -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 }, diff --git a/code/sdk/zhihui/gnss/CMakeLists.txt b/code/sdk/zhihui/gnss/CMakeLists.txt index d17670467..679cc2b87 100644 --- a/code/sdk/zhihui/gnss/CMakeLists.txt +++ b/code/sdk/zhihui/gnss/CMakeLists.txt @@ -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 ) diff --git a/code/sdk/zhihui/gnss/gnss_config_array.h b/code/sdk/zhihui/gnss/gnss_config_array.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 9f9012494..a90dd5a4a 100644 --- a/code/sdk/zhihui/gnss/gnss_config_array.h +++ b/code/sdk/zhihui/gnss/gnss_config_array.c @@ -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