annotate Small_CPU/Src/uart_Internal.c @ 1026:5fedf7ba2392 GasConsumption

Added text based edit item: In previous version only numbers could be entered as data field. This changes introduces a edit field for entering text in upper characters. '_' are used for seperation because simple white spaces (' ') would cause problems in the handling of the edit field. String length is limited to eigth charecters.
author Ideenmodellierer
date Sun, 07 Sep 2025 18:55:45 +0200
parents c386ae6635e4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
1 /**
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
2 ******************************************************************************
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
3 * @file uart_Internal.c
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
4 * @author heinrichs weikamp gmbh
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
5 * @version V0.0.1
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
6 * @date 03-November-2044
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
7 * @brief Control functions for devices connected to the internal UART
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
8 *
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
9 @verbatim
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
10 ==============================================================================
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
11 ##### How to use #####
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
12 ==============================================================================
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
13 @endverbatim
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
14 ******************************************************************************
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
15 * @attention
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
16 *
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
17 * <h2><center>&copy; COPYRIGHT(c) 2015 heinrichs weikamp</center></h2>
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
18 *
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
19 ******************************************************************************
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
20 */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
21 /* Includes ------------------------------------------------------------------*/
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
22 #include "uart.h"
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
23 #include "uart_Internal.h"
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
24 #include "uartProtocol_GNSS.h"
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
25 #include "GNSS.h"
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
26 #include "externalInterface.h"
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
27 #include "data_exchange.h"
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
28 #include <string.h> /* memset */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
29
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
30
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
31 /* Private variables ---------------------------------------------------------*/
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
32
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
33 #define REQUEST_INT_SENSOR_MS (1500) /* Minimum time interval for cyclic sensor data requests per sensor (UART mux) */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
34 #define COMMAND_TX_DELAY (30u) /* The time the sensor needs to recover from a invalid command request */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
35 #define TIMEOUT_SENSOR_ANSWER (300) /* Time till a request is repeated if no answer was received */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
36
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
37 DMA_HandleTypeDef hdma_usart6_rx, hdma_usart6_tx;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
38
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
39 uint8_t tx6Buffer[CHUNK_SIZE]; /* tx uses less bytes */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
40
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
41 uint8_t rxBufferUart6[CHUNK_SIZE * CHUNKS_PER_BUFFER]; /* The complete buffer has a X * chunk size to allow variations in buffer read time */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
42 uint8_t txBufferUart6[CHUNK_SIZE * CHUNKS_PER_BUFFER]; /* The complete buffer has a X * chunk size to allow variations in buffer read time */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
43
932
effadaa3a1f7 Cleanup Gnss UART implementation:
Ideenmodellierer
parents: 931
diff changeset
44 sUartComCtrl Uart6Ctrl;
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
45
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
46 /* Exported functions --------------------------------------------------------*/
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
47
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
48 void GNSS_IO_init() {
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
49
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
50 GPIO_InitTypeDef GPIO_InitStruct = { 0 };
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
51 /* Peripheral clock enable */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
52 __HAL_RCC_USART6_CLK_ENABLE()
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
53 ;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
54
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
55 __HAL_RCC_GPIOA_CLK_ENABLE()
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
56 ;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
57 /**USART6 GPIO Configuration
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
58 PA11 ------> USART6_TX
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
59 PA12 ------> USART6_RX
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
60 */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
61 GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
62 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
63 GPIO_InitStruct.Pull = GPIO_NOPULL;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
64 GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
65 GPIO_InitStruct.Alternate = GPIO_AF8_USART6;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
66 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
1000
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
67 }
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
68
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
69 void MX_USART6_DMA_Init() {
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
70 /* DMA controller clock enable */
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
71 __HAL_RCC_DMA2_CLK_ENABLE();
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
72
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
73 /* DMA interrupt init */
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
74 /* DMA2_Stream2_IRQn interrupt configuration */
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
75 HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
76 HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
77 /* DMA2_Stream6_IRQn interrupt configuration */
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
78 HAL_NVIC_SetPriority(DMA2_Stream6_IRQn, 0, 0);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
79 HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
80 }
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
81
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
82
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
83 void MX_USART6_UART_DeInit(void)
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
84 {
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
85 HAL_DMA_Abort(&hdma_usart6_rx);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
86 HAL_DMA_DeInit(&hdma_usart6_rx);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
87 HAL_DMA_Abort(&hdma_usart6_tx);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
88 HAL_DMA_DeInit(&hdma_usart6_tx);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
89 HAL_UART_DeInit(&huart6);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
90 //HAL_UART_DeInit(&huart6);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
91 Uart6Ctrl.dmaRxActive = 0;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
92 Uart6Ctrl.dmaTxActive = 0;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
93 }
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
94
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
95 void MX_USART6_UART_Init(void) {
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
96 huart6.Instance = USART6;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
97 huart6.Init.BaudRate = 9600;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
98 huart6.Init.WordLength = UART_WORDLENGTH_8B;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
99 huart6.Init.StopBits = UART_STOPBITS_1;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
100 huart6.Init.Parity = UART_PARITY_NONE;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
101 huart6.Init.Mode = UART_MODE_TX_RX;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
102 huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
103 huart6.Init.OverSampling = UART_OVERSAMPLING_16;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
104 HAL_UART_Init(&huart6);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
105
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
106 Uart6Ctrl.pHandle = &huart6;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
107 Uart6Ctrl.dmaRxActive = 0;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
108 Uart6Ctrl.dmaTxActive = 0;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
109 Uart6Ctrl.pRxBuffer = rxBufferUart6;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
110 Uart6Ctrl.pTxBuffer = txBufferUart6;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
111 Uart6Ctrl.rxReadIndex = 0;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
112 Uart6Ctrl.rxWriteIndex = 0;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
113 Uart6Ctrl.txBufferQueLen = 0;
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
114
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
115 UART_clearRxBuffer(&Uart6Ctrl);
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
116 UART_SetGnssCtrl(&Uart6Ctrl);
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
117
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
118 /* USART6 DMA Init */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
119 /* USART6_RX Init */
923
6fc0e3d230e4 UART6 DMA handling:
Ideenmodellierer
parents: 922
diff changeset
120 hdma_usart6_rx.Instance = DMA2_Stream2;
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
121 hdma_usart6_rx.Init.Channel = DMA_CHANNEL_5;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
122 hdma_usart6_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
123 hdma_usart6_rx.Init.PeriphInc = DMA_PINC_DISABLE;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
124 hdma_usart6_rx.Init.MemInc = DMA_MINC_ENABLE;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
125 hdma_usart6_rx.Init.PeriphDataAlignment = DMA_MDATAALIGN_BYTE;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
126 hdma_usart6_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
127 hdma_usart6_rx.Init.Mode = DMA_NORMAL;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
128 hdma_usart6_rx.Init.Priority = DMA_PRIORITY_LOW;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
129 hdma_usart6_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
130 HAL_DMA_Init(&hdma_usart6_rx);
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
131
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
132 __HAL_LINKDMA(&huart6, hdmarx, hdma_usart6_rx);
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
133
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
134 /* USART6_TX Init */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
135 hdma_usart6_tx.Instance = DMA2_Stream6;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
136 hdma_usart6_tx.Init.Channel = DMA_CHANNEL_5;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
137 hdma_usart6_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
138 hdma_usart6_tx.Init.PeriphInc = DMA_PINC_DISABLE;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
139 hdma_usart6_tx.Init.MemInc = DMA_MINC_ENABLE;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
140 hdma_usart6_tx.Init.PeriphDataAlignment = DMA_MDATAALIGN_BYTE;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
141 hdma_usart6_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
142 hdma_usart6_tx.Init.Mode = DMA_NORMAL;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
143 hdma_usart6_tx.Init.Priority = DMA_PRIORITY_LOW;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
144 hdma_usart6_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
145 HAL_DMA_Init(&hdma_usart6_tx);
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
146
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
147 __HAL_LINKDMA(&huart6, hdmatx, hdma_usart6_tx);
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
148
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
149 /* USART6 interrupt Init */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
150 HAL_NVIC_SetPriority(USART6_IRQn, 0, 0);
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
151 HAL_NVIC_EnableIRQ(USART6_IRQn);
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
152
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
153 MX_USART6_DMA_Init();
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
154 }
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
155
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
156 void UART6_HandleUART()
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
157 {
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
158 static uint8_t retryRequest = 0;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
159 static uint32_t lastRequestTick = 0;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
160 static uint32_t TriggerTick = 0;
939
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
161 static uint16_t timeToTrigger = 0;
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
162 uint32_t tick = HAL_GetTick();
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
163
932
effadaa3a1f7 Cleanup Gnss UART implementation:
Ideenmodellierer
parents: 931
diff changeset
164 uartGnssStatus_t gnssState = uartGnss_GetState();
effadaa3a1f7 Cleanup Gnss UART implementation:
Ideenmodellierer
parents: 931
diff changeset
165
1000
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
166 if(Uart6Ctrl.pHandle != 0)
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
167 {
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
168 if((gnssState != UART_GNSS_INIT) && (gnssState != UART_GNSS_PWRUP))
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
169 {
976
0b81ac558e89 Devbugfix UART buffer cleaning:
Ideenmodellierer
parents: 939
diff changeset
170 UART_ReadData(SENSOR_GNSS, 0);
932
effadaa3a1f7 Cleanup Gnss UART implementation:
Ideenmodellierer
parents: 931
diff changeset
171 UART_WriteData(&Uart6Ctrl);
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
172 }
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
173 if(gnssState == UART_GNSS_INIT)
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
174 {
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
175 lastRequestTick = tick;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
176 TriggerTick = tick - 10; /* just to make sure control is triggered */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
177 timeToTrigger = 1;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
178 retryRequest = 0;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
179 }
939
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
180 else if((gnssState == UART_GNSS_INACTIVE) && (!uartGnss_isPowerDownRequested())) /* send dummy bytes to wakeup receiver */
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
181 {
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
182 txBufferUart6[0] = 0xFF;
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
183 txBufferUart6[1] = 0xFF;
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
184 HAL_UART_Transmit_DMA(Uart6Ctrl.pHandle, Uart6Ctrl.pTxBuffer,2);
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
185 timeToTrigger = 500; /* receiver needs 500ms for wakeup */
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
186 lastRequestTick = tick;
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
187 gnssState = UART_GNSS_PWRUP;
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
188 uartGnss_SetState(gnssState);
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
189 }
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
190 else if(((retryRequest == 0) /* timeout or error */
1000
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
191 && (((time_elapsed_ms(lastRequestTick,tick) > (TIMEOUT_SENSOR_ANSWER)) && (gnssState != UART_GNSS_IDLE) && (gnssState != UART_GNSS_PWRUP)) /* retry if no answer after half request interval */
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
192 || (gnssState == UART_GNSS_ERROR))))
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
193 {
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
194 /* The channel switch will cause the sensor to respond with an error message. */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
195 /* The sensor needs ~30ms to recover before he is ready to receive the next command => transmission delay needed */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
196
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
197 TriggerTick = tick;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
198 timeToTrigger = COMMAND_TX_DELAY;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
199 retryRequest = 1;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
200 }
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
201
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
202 else if(time_elapsed_ms(lastRequestTick,tick) > 1000) /* switch sensor and / or trigger next request */
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
203 {
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
204 lastRequestTick = tick;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
205 TriggerTick = tick;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
206 retryRequest = 0;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
207 timeToTrigger = 1;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
208
939
f41974734268 Resume UART com with gnss after sleep:
Ideenmodellierer
parents: 932
diff changeset
209 if((gnssState == UART_GNSS_GET_SAT) || (gnssState == UART_GNSS_GET_PVT) || (gnssState == UART_GNSS_PWRUP)) /* timeout */
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
210 {
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
211 gnssState = UART_GNSS_IDLE;
932
effadaa3a1f7 Cleanup Gnss UART implementation:
Ideenmodellierer
parents: 931
diff changeset
212 uartGnss_SetState(gnssState);
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
213 }
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
214 timeToTrigger = 1;
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
215 }
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
216 if((timeToTrigger != 0) && (time_elapsed_ms(TriggerTick,tick) > timeToTrigger))
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
217 {
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
218 timeToTrigger = 0;
932
effadaa3a1f7 Cleanup Gnss UART implementation:
Ideenmodellierer
parents: 931
diff changeset
219 uartGnss_Control();
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
220 }
1000
c386ae6635e4 Improve GNSS operation:
Ideenmodellierer
parents: 976
diff changeset
221 }
922
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
222 }
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
223
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
224
7c996354b8ac Moved UART6 into a separate unit:
Ideenmodellierer
parents:
diff changeset
225 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/