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;