Mercurial > public > ostc4
annotate Small_CPU/Src/uartProtocol_GNSS.c @ 1000:c386ae6635e4 GasConsumption
Improve GNSS operation:
during OSTC 4/5 code merge a problem with the wakeup of the gnss module showed up which has been fixed with the new verion. In addition a compile switch has been added which activated the synchronization of time between OSTC and gnss module. This my cause problems if the time is not accurate => deactivated at the moment.
| author | Ideenmodellierer |
|---|---|
| date | Mon, 28 Apr 2025 19:51:36 +0200 |
| parents | d9290c76b840 |
| children | efb7d18cc564 |
| rev | line source |
|---|---|
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
1 /** |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
2 ****************************************************************************** |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
3 * @file uartProtocol_GNSS.c |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
4 * @author heinrichs weikamp gmbh |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
5 * @version V0.0.1 |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
6 * @date 30-Sep-2024 |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
7 * @brief Interface functionality operation of GNSS devices |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
8 * |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
9 @verbatim |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
10 |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
11 |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
12 @endverbatim |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
13 ****************************************************************************** |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
14 * @attention |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
15 * |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
16 * <h2><center>© COPYRIGHT(c) 2024 heinrichs weikamp</center></h2> |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
17 * |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
18 ****************************************************************************** |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
19 */ |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
20 /* Includes ------------------------------------------------------------------*/ |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
21 |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
22 #include <string.h> |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
23 #include "scheduler.h" |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
24 #include <uartProtocol_GNSS.h> |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
25 #include "uart.h" |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
26 #include "GNSS.h" |
| 919 | 27 #include "configuration.h" |
| 28 #include "externalInterface.h" | |
| 1000 | 29 #include "rtc.h" |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
30 |
| 932 | 31 |
| 988 | 32 #if defined ENABLE_GNSS_INTERN || defined ENABLE_GNSS_EXTERN |
| 932 | 33 |
| 34 static uartGnssStatus_t gnssState = UART_GNSS_INIT; | |
| 35 static gnssRequest_s activeRequest = {0,0}; | |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
36 |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
37 static receiveStateGnss_t rxState = GNSSRX_READY; |
| 919 | 38 static uint8_t GnssConnected = 0; /* Binary indicator if a sensor is connected or not */ |
| 39 static uint8_t writeIndex = 0; | |
| 40 static uint8_t dataToRead = 0; | |
| 936 | 41 static uint8_t ReqPowerDown = 0; |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
42 |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
43 void ConvertByteToHexString(uint8_t byte, char* str) |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
44 { |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
45 uint8_t worker = 0; |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
46 uint8_t digit = 0; |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
47 uint8_t digitCnt = 1; |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
48 |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
49 worker = byte; |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
50 while((worker!=0) && (digitCnt != 255)) |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
51 { |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
52 digit = worker % 16; |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
53 if( digit < 10) |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
54 { |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
55 digit += '0'; |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
56 } |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
57 else |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
58 { |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
59 digit += 'A' - 10; |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
60 } |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
61 str[digitCnt--]= digit; |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
62 worker = worker / 16; |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
63 } |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
64 } |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
65 |
| 936 | 66 void uartGnss_ReqPowerDown(uint8_t request) |
| 67 { | |
| 68 if(GnssConnected) | |
| 69 { | |
| 939 | 70 ReqPowerDown = request; |
| 936 | 71 } |
| 72 } | |
| 919 | 73 |
| 939 | 74 uint8_t uartGnss_isPowerDownRequested() |
| 75 { | |
| 76 return ReqPowerDown; | |
| 77 } | |
| 78 | |
| 932 | 79 uartGnssStatus_t uartGnss_GetState() |
| 80 { | |
| 81 return gnssState; | |
| 82 } | |
| 83 void uartGnss_SetState(uartGnssStatus_t newState) | |
| 84 { | |
| 85 gnssState = newState; | |
| 86 } | |
| 87 | |
| 88 void UART_Gnss_SendCmd(uint8_t GnssCmd) | |
| 919 | 89 { |
| 922 | 90 const uint8_t* pData; |
| 919 | 91 uint8_t txLength = 0; |
| 1000 | 92 RTC_TimeTypeDef time; |
| 93 RTC_DateTypeDef date; | |
| 94 | |
| 95 UBX_MGA_INI_TIME_UTC_t msg_DateTime; | |
| 919 | 96 |
| 97 switch (GnssCmd) | |
| 98 { | |
| 99 case GNSSCMD_LOADCONF_0: pData = configUBX; | |
| 100 txLength = sizeof(configUBX) / sizeof(uint8_t); | |
| 101 break; | |
| 102 case GNSSCMD_LOADCONF_1: pData = setNMEA410; | |
| 103 txLength = sizeof(setNMEA410) / sizeof(uint8_t); | |
| 104 break; | |
| 105 case GNSSCMD_LOADCONF_2: pData = setGNSS; | |
| 106 txLength = sizeof(setGNSS) / sizeof(uint8_t); | |
| 107 break; | |
| 939 | 108 case GNSSCMD_SETMOBILE: pData = setPortableMode; |
| 109 txLength = sizeof(setPortableMode) / sizeof(uint8_t); | |
| 110 break; | |
| 919 | 111 case GNSSCMD_GET_PVT_DATA: pData = getPVTData; |
| 112 txLength = sizeof(getPVTData) / sizeof(uint8_t); | |
| 113 break; | |
| 114 case GNSSCMD_GET_NAV_DATA: pData = getNavigatorData; | |
| 115 txLength = sizeof(getNavigatorData) / sizeof(uint8_t); | |
| 116 break; | |
| 932 | 117 case GNSSCMD_GET_NAVSAT_DATA: pData = getNavSat; |
| 118 txLength = sizeof(getNavSat) / sizeof(uint8_t); | |
| 119 break; | |
| 936 | 120 case GNSSCMD_MODE_PWS: pData = setPowerLow; |
| 121 txLength = sizeof(setPowerLow) / sizeof(uint8_t); | |
| 122 break; | |
| 123 case GNSSCMD_MODE_NORMAL: pData = setPowerNormal; | |
| 124 txLength = sizeof(setPowerNormal) / sizeof(uint8_t); | |
| 125 break; | |
| 126 case GNSSCMD_SET_CONFIG: pData = setConfig; | |
| 127 txLength = sizeof(setConfig) / sizeof(uint8_t); | |
| 128 break; | |
| 1000 | 129 case GNSSCMD_SETDATETIME: |
| 130 RTC_GetDate(&date); | |
| 131 RTC_GetTime(&time); | |
| 132 | |
| 133 memset(&msg_DateTime, 0, sizeof(UBX_MGA_INI_TIME_UTC_t)); | |
| 134 msg_DateTime.header1 = 0xB5; | |
| 135 msg_DateTime.header2 = 0x62; | |
| 136 msg_DateTime.msgClass = 0x13; | |
| 137 msg_DateTime.msgID = 0x40; | |
| 138 msg_DateTime.length = sizeof(UBX_MGA_INI_TIME_UTC_t) - 6; | |
| 139 msg_DateTime.type = 0x00; | |
| 140 msg_DateTime.version = 0x00; | |
| 141 msg_DateTime.year = date.Year + 2000; | |
| 142 msg_DateTime.month = date.Month; | |
| 143 msg_DateTime.day = date.Date; | |
| 144 if((time.Hours - 2) < 0) | |
| 145 { | |
| 146 msg_DateTime.hour = time.Hours + 24 - 2; | |
| 147 } | |
| 148 else | |
| 149 { | |
| 150 msg_DateTime.hour = time.Hours - 2; | |
| 151 } | |
| 152 msg_DateTime.minute = time.Minutes; | |
| 153 msg_DateTime.second = time.Seconds; | |
| 154 msg_DateTime.accuracy_seconds = 60; | |
| 155 msg_DateTime.accuracy_nano = 0x0; | |
| 156 msg_DateTime.flags = 0x00; | |
| 157 msg_DateTime.leapsec = 0x80; | |
| 158 | |
| 159 pData = (uint8_t*)&msg_DateTime; | |
| 160 txLength = sizeof(msg_DateTime) / sizeof(uint8_t); | |
| 161 | |
| 162 break; | |
| 919 | 163 default: |
| 164 break; | |
| 165 } | |
| 166 if(txLength != 0) | |
| 167 { | |
| 932 | 168 activeRequest.class = pData[2]; |
| 169 activeRequest.id = pData[3]; | |
| 919 | 170 UART_SendCmdUbx(pData, txLength); |
| 171 } | |
| 172 } | |
| 173 | |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
174 void uartGnss_Control(void) |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
175 { |
| 919 | 176 static uint32_t warmupTick = 0; |
| 932 | 177 static uint8_t dataToggle = 0; |
| 178 uint8_t activeSensor = 0; | |
| 179 sUartComCtrl* pUartCtrl = UART_GetGnssCtrl(); | |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
180 |
| 932 | 181 if(pUartCtrl == &Uart1Ctrl) |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
182 { |
| 932 | 183 activeSensor = externalInterface_GetActiveUartSensor(); |
| 184 gnssState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET); | |
| 185 } | |
| 186 | |
| 187 switch (gnssState) | |
| 188 { | |
| 189 case UART_GNSS_INIT: gnssState = UART_GNSS_WARMUP; | |
| 919 | 190 warmupTick = HAL_GetTick(); |
| 932 | 191 UART_clearRxBuffer(pUartCtrl); |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
192 break; |
| 919 | 193 case UART_GNSS_WARMUP: if(time_elapsed_ms(warmupTick,HAL_GetTick()) > 1000) |
| 194 { | |
| 932 | 195 gnssState = UART_GNSS_LOADCONF_0; |
| 919 | 196 } |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
197 break; |
| 932 | 198 case UART_GNSS_LOADCONF_0: UART_Gnss_SendCmd(GNSSCMD_LOADCONF_0); |
| 199 rxState = GNSSRX_DETECT_ACK_0; | |
| 200 break; | |
| 201 case UART_GNSS_LOADCONF_1: UART_Gnss_SendCmd(GNSSCMD_LOADCONF_1); | |
| 202 rxState = GNSSRX_DETECT_ACK_0; | |
| 203 break; | |
| 204 case UART_GNSS_LOADCONF_2: UART_Gnss_SendCmd(GNSSCMD_LOADCONF_2); | |
| 919 | 205 rxState = GNSSRX_DETECT_ACK_0; |
| 206 break; | |
| 1000 | 207 case UART_GNSS_SETMODE_MOBILE: UART_Gnss_SendCmd(GNSSCMD_SETMOBILE); |
| 939 | 208 rxState = GNSSRX_DETECT_ACK_0; |
| 209 break; | |
| 1000 | 210 case UART_GNSS_SETDATE_TIME: UART_Gnss_SendCmd(GNSSCMD_SETDATETIME); |
| 211 // rxState = GNSSRX_DETECT_ACK_0; /* aiding function will not acknoledge receiption (until config to do so) */ | |
| 212 gnssState = UART_GNSS_PWRUP; | |
| 213 break; | |
| 936 | 214 case UART_GNSS_PWRDOWN: UART_Gnss_SendCmd(GNSSCMD_MODE_PWS); |
| 215 rxState = GNSSRX_DETECT_ACK_0; | |
| 216 break; | |
| 217 | |
| 939 | 218 case UART_GNSS_PWRUP: UART_Gnss_SendCmd(GNSSCMD_MODE_NORMAL); |
| 936 | 219 rxState = GNSSRX_DETECT_ACK_0; |
| 220 gnssState = UART_GNSS_PWRUP; | |
| 221 break; | |
| 222 case UART_GNSS_SETCONF: UART_Gnss_SendCmd(GNSSCMD_SET_CONFIG); | |
| 223 rxState = GNSSRX_DETECT_ACK_0; | |
| 224 break; | |
| 225 | |
| 226 case UART_GNSS_IDLE: if(ReqPowerDown) | |
| 932 | 227 { |
| 936 | 228 UART_Gnss_SendCmd(GNSSCMD_MODE_PWS); |
| 229 gnssState = UART_GNSS_PWRDOWN; | |
| 230 rxState = GNSSRX_DETECT_ACK_0; | |
| 932 | 231 } |
| 232 else | |
| 233 { | |
| 936 | 234 if(dataToggle) |
| 235 { | |
| 236 UART_Gnss_SendCmd(GNSSCMD_GET_PVT_DATA); | |
| 237 gnssState = UART_GNSS_GET_PVT; | |
| 238 rxState = GNSSRX_DETECT_HEADER_0; | |
| 239 dataToggle = 0; | |
| 240 } | |
| 241 else | |
| 242 { | |
| 243 UART_Gnss_SendCmd(GNSSCMD_GET_NAVSAT_DATA); | |
| 244 gnssState = UART_GNSS_GET_SAT; | |
| 245 rxState = GNSSRX_DETECT_HEADER_0; | |
| 246 dataToggle = 1; | |
| 247 } | |
| 932 | 248 } |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
249 break; |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
250 default: |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
251 break; |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
252 } |
| 932 | 253 if(pUartCtrl == &Uart1Ctrl) |
| 254 { | |
| 255 externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,gnssState); | |
| 256 } | |
| 919 | 257 |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
258 } |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
259 |
| 936 | 260 |
| 919 | 261 void uartGnss_ProcessData(uint8_t data) |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
262 { |
| 932 | 263 static uint16_t rxLength = 0; |
| 264 static uint8_t ck_A = 0; | |
| 265 static uint8_t ck_B = 0; | |
| 266 static uint8_t ck_A_Ref = 0; | |
| 267 static uint8_t ck_B_Ref = 0; | |
| 936 | 268 uint8_t activeSensor = 0; |
| 269 | |
| 270 sUartComCtrl* pUartCtrl = UART_GetGnssCtrl(); | |
| 271 | |
| 272 if(pUartCtrl == &Uart1Ctrl) | |
| 273 { | |
| 274 activeSensor = externalInterface_GetActiveUartSensor(); | |
| 275 gnssState = externalInterface_GetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET); | |
| 276 } | |
| 932 | 277 |
| 919 | 278 GNSS_Handle.uartWorkingBuffer[writeIndex++] = data; |
| 932 | 279 if((rxState >= GNSSRX_DETECT_HEADER_2) && (rxState < GNSSRX_READ_CK_A)) |
| 280 { | |
| 281 ck_A += data; | |
| 282 ck_B += ck_A; | |
| 283 } | |
| 284 | |
| 919 | 285 switch(rxState) |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
286 { |
| 919 | 287 case GNSSRX_DETECT_ACK_0: |
| 288 case GNSSRX_DETECT_HEADER_0: if(data == 0xB5) | |
| 289 { | |
| 290 writeIndex = 0; | |
| 932 | 291 memset(GNSS_Handle.uartWorkingBuffer,0xff, sizeof(GNSS_Handle.uartWorkingBuffer)); |
| 919 | 292 GNSS_Handle.uartWorkingBuffer[writeIndex++] = data; |
| 293 rxState++; | |
| 932 | 294 ck_A = 0; |
| 295 ck_B = 0; | |
| 919 | 296 } |
| 297 break; | |
| 298 case GNSSRX_DETECT_ACK_1: | |
| 299 case GNSSRX_DETECT_HEADER_1: if(data == 0x62) | |
| 300 { | |
| 301 rxState++; | |
| 302 } | |
| 303 else | |
| 304 { | |
| 305 rxState = GNSSRX_DETECT_HEADER_0; | |
| 306 } | |
| 307 break; | |
| 308 case GNSSRX_DETECT_ACK_2: if(data == 0x05) | |
| 309 { | |
| 310 rxState++; | |
| 311 } | |
| 312 else | |
| 313 { | |
| 314 rxState = GNSSRX_DETECT_HEADER_0; | |
| 315 } | |
| 316 break; | |
| 932 | 317 case GNSSRX_DETECT_ACK_3: if((data == 0x01)) |
| 919 | 318 { |
| 936 | 319 rxState = GNSSRX_READY; |
| 939 | 320 switch(gnssState) |
| 936 | 321 { |
| 939 | 322 case UART_GNSS_PWRUP: gnssState = UART_GNSS_IDLE; |
| 323 break; | |
| 324 case UART_GNSS_PWRDOWN: rxState = GNSSRX_DETECT_ACK_0; | |
| 325 UART_Gnss_SendCmd(GNSSCMD_SET_CONFIG); | |
| 326 gnssState = UART_GNSS_SETCONF; | |
| 327 break; | |
| 328 case UART_GNSS_SETCONF: gnssState = UART_GNSS_INACTIVE; | |
| 329 break; | |
| 330 case UART_GNSS_LOADCONF_0: | |
| 331 case UART_GNSS_LOADCONF_1: gnssState++; | |
| 332 break; | |
| 333 case UART_GNSS_LOADCONF_2: gnssState = UART_GNSS_SETMODE_MOBILE; | |
| 334 break; | |
| 1000 | 335 case UART_GNSS_SETMODE_MOBILE: |
| 336 #ifdef ENABLE_GNSS_TIME_INIT | |
| 337 gnssState = UART_GNSS_SETDATE_TIME; | |
| 338 #else | |
| 339 rxState = GNSSRX_DETECT_ACK_0; | |
| 955 | 340 UART_Gnss_SendCmd(GNSSCMD_MODE_NORMAL); |
| 341 gnssState = UART_GNSS_PWRUP; | |
| 1000 | 342 #endif |
| 939 | 343 break; |
| 1000 | 344 case UART_GNSS_SETDATE_TIME: rxState = GNSSRX_DETECT_ACK_0; |
| 345 UART_Gnss_SendCmd(GNSSCMD_MODE_NORMAL); | |
| 346 gnssState = UART_GNSS_PWRUP; | |
| 939 | 347 default: |
| 348 break; | |
| 932 | 349 } |
| 919 | 350 GnssConnected = 1; |
| 351 } | |
| 352 else | |
| 353 { | |
| 354 rxState = GNSSRX_DETECT_HEADER_0; | |
| 355 } | |
| 356 break; | |
| 932 | 357 case GNSSRX_DETECT_HEADER_2: if(data == activeRequest.class) |
| 919 | 358 { |
| 359 rxState++; | |
| 360 } | |
| 361 else | |
| 362 { | |
| 363 rxState = GNSSRX_DETECT_HEADER_0; | |
| 364 } | |
| 365 break; | |
| 932 | 366 case GNSSRX_DETECT_HEADER_3: if(data == activeRequest.id) |
| 367 { | |
| 368 rxState = GNSSRX_DETECT_LENGTH_0; | |
| 369 } | |
| 370 else | |
| 919 | 371 { |
| 932 | 372 rxState = GNSSRX_DETECT_HEADER_0; |
| 919 | 373 } |
| 932 | 374 break; |
| 375 case GNSSRX_DETECT_LENGTH_0: rxLength = GNSS_Handle.uartWorkingBuffer[4]; | |
| 376 rxState = GNSSRX_DETECT_LENGTH_1; | |
| 377 break; | |
| 378 case GNSSRX_DETECT_LENGTH_1: rxLength += (GNSS_Handle.uartWorkingBuffer[5] << 8); | |
| 379 rxState = GNSSRX_READ_DATA; | |
| 380 dataToRead = rxLength; | |
| 381 break; | |
| 382 case GNSSRX_READ_DATA: if(dataToRead > 0) | |
| 919 | 383 { |
| 384 dataToRead--; | |
| 385 } | |
| 932 | 386 if(dataToRead == 0) |
| 919 | 387 { |
| 932 | 388 rxState = GNSSRX_READ_CK_A; |
| 919 | 389 } |
| 390 break; | |
| 932 | 391 case GNSSRX_READ_CK_A: ck_A_Ref = data; |
| 392 rxState++; | |
| 393 break; | |
| 394 case GNSSRX_READ_CK_B: ck_B_Ref = data; | |
| 395 if((ck_A_Ref == ck_A) && (ck_B_Ref == ck_B)) | |
| 396 { | |
| 397 switch(gnssState) | |
| 398 { | |
| 399 case UART_GNSS_GET_PVT:GNSS_ParsePVTData(&GNSS_Handle); | |
| 400 break; | |
| 401 case UART_GNSS_GET_SAT: GNSS_ParseNavSatData(&GNSS_Handle); | |
| 402 break; | |
| 403 default: | |
| 404 break; | |
| 405 } | |
| 406 } | |
| 407 rxState = GNSSRX_DETECT_HEADER_0; | |
| 408 gnssState = UART_GNSS_IDLE; | |
| 409 break; | |
| 410 | |
| 919 | 411 default: rxState = GNSSRX_READY; |
| 412 break; | |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
413 } |
| 936 | 414 if(pUartCtrl == &Uart1Ctrl) |
| 415 { | |
| 416 externalInterface_SetSensorState(activeSensor + EXT_INTERFACE_MUX_OFFSET,gnssState); | |
| 417 } | |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
418 } |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
419 |
| 919 | 420 uint8_t uartGnss_isSensorConnected() |
| 421 { | |
| 422 return GnssConnected; | |
| 423 } | |
| 424 | |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
425 #endif |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
diff
changeset
|
426 |
