Mercurial > public > ostc4
changeset 1004:efb7d18cc564 GasConsumption
DevelopmentOption: added the possibility to provide a fixed position info to the gnss module. Code is deactivated at the moment.
author | Ideenmodellierer |
---|---|
date | Sat, 03 May 2025 17:45:32 +0200 (4 months ago) |
parents | 21142f4fa968 |
children | 85f7e19c6688 |
files | Small_CPU/Inc/GNSS.h Small_CPU/Inc/uartProtocol_GNSS.h Small_CPU/Src/baseCPU2.c Small_CPU/Src/uartProtocol_GNSS.c |
diffstat | 4 files changed, 47 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/Small_CPU/Inc/GNSS.h Mon Apr 28 22:53:36 2025 +0200 +++ b/Small_CPU/Inc/GNSS.h Sat May 03 17:45:32 2025 +0200 @@ -122,8 +122,22 @@ uint16_t accuracy_seconds; uint16_t reserved; uint32_t accuracy_nano; +} __attribute__((packed)) UBX_MGA_INI_TIME_UTC_t; -} __attribute__((packed)) UBX_MGA_INI_TIME_UTC_t; +typedef struct { + uint8_t header1; + uint8_t header2; + uint8_t class_id; + uint8_t msg_id; + uint16_t length; + uint8_t type; + uint8_t version; + uint16_t reserved; + int32_t latitude; + int32_t longitude; + int32_t altitude; + uint32_t accuracy; +} __attribute__((packed)) UBX_MGA_INI_POS_LLH_t; enum GNSSMode{Portable=0, Stationary=1, Pedestrian=2, Automotiv=3, Airbone1G=5, Airbone2G=6,Airbone4G=7,Wirst=8,Bike=9};
--- a/Small_CPU/Inc/uartProtocol_GNSS.h Mon Apr 28 22:53:36 2025 +0200 +++ b/Small_CPU/Inc/uartProtocol_GNSS.h Sat May 03 17:45:32 2025 +0200 @@ -43,6 +43,7 @@ UART_GNSS_LOADCONF_2, UART_GNSS_SETMODE_MOBILE, UART_GNSS_SETDATE_TIME, + UART_GNSS_SET_POSITION, UART_GNSS_PWRDOWN, UART_GNSS_PWRUP, UART_GNSS_SETCONF, /* save configuration */ @@ -76,6 +77,7 @@ GNSSCMD_LOADCONF_2, GNSSCMD_SETMOBILE, GNSSCMD_SETDATETIME, + GNSSCMD_SET_POSITION, GNSSCMD_MODE_PWS, GNSSCMD_MODE_NORMAL, GNSSCMD_SET_CONFIG,
--- a/Small_CPU/Src/baseCPU2.c Mon Apr 28 22:53:36 2025 +0200 +++ b/Small_CPU/Src/baseCPU2.c Sat May 03 17:45:32 2025 +0200 @@ -517,8 +517,9 @@ #else global.mode = MODE_SLEEP; #endif - +#if defined ENABLE_GNSS_INTERN || defined ENABLE_GNSS_EXTERN }while (global.mode == MODE_SHUTDOWN); +#endif break; case MODE_SLEEP:
--- a/Small_CPU/Src/uartProtocol_GNSS.c Mon Apr 28 22:53:36 2025 +0200 +++ b/Small_CPU/Src/uartProtocol_GNSS.c Sat May 03 17:45:32 2025 +0200 @@ -93,6 +93,7 @@ RTC_DateTypeDef date; UBX_MGA_INI_TIME_UTC_t msg_DateTime; + UBX_MGA_INI_POS_LLH_t msg_Position; switch (GnssCmd) { @@ -158,8 +159,19 @@ pData = (uint8_t*)&msg_DateTime; txLength = sizeof(msg_DateTime) / sizeof(uint8_t); - break; + case GNSSCMD_SET_POSITION: msg_Position.header1 = 0xB5; + msg_Position.header2 = 0x62; + msg_Position.class_id = 0x13; + msg_Position.msg_id = 0x40; + msg_Position.length = sizeof(UBX_MGA_INI_POS_LLH_t) - 6; + msg_Position.latitude = (int32_t) (8.98647 * 1e7); + msg_Position.longitude = (int32_t) (47.77147 * 1e7); + msg_Position.altitude = (int32_t) 40000; + msg_Position.accuracy = 100000; + pData = (uint8_t*)&msg_Position; + txLength = sizeof(msg_Position) / sizeof(uint8_t); + break; default: break; } @@ -209,7 +221,11 @@ break; case UART_GNSS_SETDATE_TIME: UART_Gnss_SendCmd(GNSSCMD_SETDATETIME); // rxState = GNSSRX_DETECT_ACK_0; /* aiding function will not acknoledge receiption (until config to do so) */ - gnssState = UART_GNSS_PWRUP; + gnssState = UART_GNSS_SET_POSITION; + break; + case UART_GNSS_SET_POSITION: UART_Gnss_SendCmd(GNSSCMD_SET_POSITION); + // rxState = GNSSRX_DETECT_ACK_0; /* aiding function will not acknoledge receiption (until config to do so) */ + gnssState = UART_GNSS_IDLE; break; case UART_GNSS_PWRDOWN: UART_Gnss_SendCmd(GNSSCMD_MODE_PWS); rxState = GNSSRX_DETECT_ACK_0; @@ -330,7 +346,12 @@ case UART_GNSS_LOADCONF_0: case UART_GNSS_LOADCONF_1: gnssState++; break; - case UART_GNSS_LOADCONF_2: gnssState = UART_GNSS_SETMODE_MOBILE; + case UART_GNSS_LOADCONF_2: +#ifdef ENABLE_GNSS_TIME_INIT + gnssState = UART_GNSS_SETMODE_MOBILE; +#else + gnssState = UART_GNSS_SET_POSITION; +#endif break; case UART_GNSS_SETMODE_MOBILE: #ifdef ENABLE_GNSS_TIME_INIT @@ -341,6 +362,10 @@ gnssState = UART_GNSS_PWRUP; #endif break; + case UART_GNSS_SET_POSITION: rxState = GNSSRX_DETECT_ACK_0; + UART_Gnss_SendCmd(GNSSCMD_MODE_NORMAL); + gnssState = UART_GNSS_PWRUP; + break; case UART_GNSS_SETDATE_TIME: rxState = GNSSRX_DETECT_ACK_0; UART_Gnss_SendCmd(GNSSCMD_MODE_NORMAL); gnssState = UART_GNSS_PWRUP;