Mercurial > public > ostc4
annotate Small_CPU/Src/uart.c @ 1045:b018e1f3082e GasConsumption
Deactivate OSTC5 BT init sequence:
At the moment the OSTC BT is preconfigurated and starting in data mode => skip BT config in case a OSTC5 HW is detected
| author | Ideenmodellierer |
|---|---|
| date | Mon, 03 Nov 2025 21:17:14 +0100 |
| parents | c386ae6635e4 |
| children |
| rev | line source |
|---|---|
| 38 | 1 /** |
| 2 ****************************************************************************** | |
| 3 * @file uart.c | |
| 4 * @author heinrichs weikamp gmbh | |
| 5 * @version V0.0.1 | |
| 6 * @date 27-March-2014 | |
| 7 * @brief button control | |
| 8 * | |
| 9 @verbatim | |
| 10 ============================================================================== | |
| 11 ##### How to use ##### | |
| 12 ============================================================================== | |
| 13 @endverbatim | |
| 14 ****************************************************************************** | |
| 15 * @attention | |
| 16 * | |
| 17 * <h2><center>© COPYRIGHT(c) 2015 heinrichs weikamp</center></h2> | |
| 18 * | |
| 19 ****************************************************************************** | |
| 20 */ | |
| 21 /* Includes ------------------------------------------------------------------*/ | |
| 22 #include "uart.h" | |
| 794 | 23 #include "uartProtocol_O2.h" |
|
798
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
24 #include "uartProtocol_Co2.h" |
|
842
c3dd461ca3f9
Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents:
809
diff
changeset
|
25 #include "uartProtocol_Sentinel.h" |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
26 #include "uartProtocol_GNSS.h" |
| 662 | 27 #include "externalInterface.h" |
| 28 #include "data_exchange.h" | |
| 1000 | 29 #include "gpio.h" |
|
704
f1b40364b0af
Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents:
690
diff
changeset
|
30 #include <string.h> /* memset */ |
| 38 | 31 |
| 988 | 32 #ifdef ENABLE_GNSS_INTERN |
| 922 | 33 extern UART_HandleTypeDef huart6; |
| 932 | 34 extern sUartComCtrl Uart6Ctrl; |
| 922 | 35 #endif |
| 889 | 36 |
| 38 | 37 /* Private variables ---------------------------------------------------------*/ |
| 38 | |
| 922 | 39 DMA_HandleTypeDef hdma_usart1_rx, hdma_usart1_tx; |
| 38 | 40 |
|
890
651d21777b61
cleanup and disable function for GNSS uart and DMA
heinrichsweikamp
parents:
889
diff
changeset
|
41 uint8_t rxBuffer[CHUNK_SIZE * CHUNKS_PER_BUFFER]; /* The complete buffer has a X * chunk size to allow variations in buffer read time */ |
| 936 | 42 uint8_t txBuffer[TX_BUF_SIZE]; /* tx uses less bytes */ |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
43 uint8_t txBufferQue[TX_BUF_SIZE]; /* In MUX mode command may be send shortly after each other => allow q 1 entry que */ |
| 932 | 44 |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
45 |
|
890
651d21777b61
cleanup and disable function for GNSS uart and DMA
heinrichsweikamp
parents:
889
diff
changeset
|
46 static uint8_t lastCmdIndex; /* Index of last command which has not been completely received */ |
| 932 | 47 |
| 48 sUartComCtrl Uart1Ctrl; | |
| 49 static sUartComCtrl* pGnssCtrl = NULL; | |
| 794 | 50 |
| 921 | 51 static uint32_t LastCmdRequestTick = 0; /* Used by ADC handler to avoid interferance with UART communication */ |
|
798
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
52 |
| 38 | 53 /* Exported functions --------------------------------------------------------*/ |
| 54 | |
| 932 | 55 |
| 56 void UART_SetGnssCtrl(sUartComCtrl* pTarget) | |
| 57 { | |
| 58 pGnssCtrl = pTarget; | |
| 59 } | |
| 60 | |
| 61 sUartComCtrl* UART_GetGnssCtrl() | |
| 62 { | |
| 63 return pGnssCtrl; | |
| 64 } | |
| 65 | |
| 66 | |
| 67 void UART_clearRxBuffer(sUartComCtrl* pUartCtrl) | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
68 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
69 uint16_t index = 0; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
70 do |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
71 { |
| 932 | 72 pUartCtrl->pRxBuffer[index++] = BUFFER_NODATA_LOW; |
| 73 pUartCtrl->pRxBuffer[index++] = BUFFER_NODATA_HIGH; | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
74 } while (index < sizeof(rxBuffer)); |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
75 |
| 932 | 76 pUartCtrl->rxReadIndex = 0; |
| 77 pUartCtrl->rxWriteIndex = 0; | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
78 } |
| 794 | 79 |
| 662 | 80 void MX_USART1_UART_Init(void) |
| 38 | 81 { |
| 662 | 82 /* regular init */ |
| 83 huart1.Instance = USART1; | |
|
803
96ffad0a4e57
Cleanup initialisation / deinitialization:
Ideenmodellierer
parents:
798
diff
changeset
|
84 huart1.Init.BaudRate = 19200; |
| 662 | 85 huart1.Init.WordLength = UART_WORDLENGTH_8B; |
| 86 huart1.Init.StopBits = UART_STOPBITS_1; | |
| 87 huart1.Init.Parity = UART_PARITY_NONE; | |
| 88 huart1.Init.Mode = UART_MODE_TX_RX; | |
| 89 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; | |
| 90 huart1.Init.OverSampling = UART_OVERSAMPLING_16; | |
| 91 | |
| 92 HAL_UART_Init(&huart1); | |
| 93 | |
|
704
f1b40364b0af
Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents:
690
diff
changeset
|
94 MX_USART1_DMA_Init(); |
|
f1b40364b0af
Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents:
690
diff
changeset
|
95 |
| 932 | 96 UART_clearRxBuffer(&Uart1Ctrl); |
| 662 | 97 lastCmdIndex = 0; |
| 932 | 98 |
| 99 Uart1Ctrl.pHandle = &huart1; | |
| 100 Uart1Ctrl.rxWriteIndex = 0; | |
| 101 Uart1Ctrl.rxReadIndex = 0; | |
| 102 Uart1Ctrl.dmaRxActive = 0; | |
| 103 Uart1Ctrl.dmaTxActive = 0; | |
| 104 Uart1Ctrl.pRxBuffer = rxBuffer; | |
| 105 Uart1Ctrl.pTxBuffer = txBuffer; | |
| 106 Uart1Ctrl.txBufferQueLen = 0; | |
| 107 | |
| 988 | 108 #ifndef ENABLE_GNSS_INTERN |
| 109 #ifdef ENABLE_GNSS_EXTERN | |
| 932 | 110 UART_SetGnssCtrl(&Uart1Ctrl); |
| 111 #endif | |
| 988 | 112 #endif |
| 662 | 113 } |
| 38 | 114 |
| 889 | 115 |
| 116 | |
| 662 | 117 void MX_USART1_UART_DeInit(void) |
| 118 { | |
|
704
f1b40364b0af
Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents:
690
diff
changeset
|
119 HAL_DMA_Abort(&hdma_usart1_rx); |
| 662 | 120 HAL_DMA_DeInit(&hdma_usart1_rx); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
121 HAL_DMA_Abort(&hdma_usart1_tx); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
122 HAL_DMA_DeInit(&hdma_usart1_tx); |
| 662 | 123 HAL_UART_DeInit(&huart1); |
| 932 | 124 Uart1Ctrl.dmaRxActive = 0; |
| 125 Uart1Ctrl.dmaTxActive = 0; | |
| 126 Uart1Ctrl.txBufferQueLen = 0; | |
| 662 | 127 } |
| 128 | |
| 129 void MX_USART1_DMA_Init() | |
| 130 { | |
| 131 /* DMA controller clock enable */ | |
| 132 __DMA2_CLK_ENABLE(); | |
| 133 | |
| 134 /* Peripheral DMA init*/ | |
| 135 hdma_usart1_rx.Instance = DMA2_Stream5; | |
| 136 hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4; | |
| 137 hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; //DMA_MEMORY_TO_PERIPH; | |
| 138 hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; | |
| 139 hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; | |
| 140 hdma_usart1_rx.Init.PeriphDataAlignment = DMA_MDATAALIGN_BYTE; | |
| 141 hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; | |
| 142 hdma_usart1_rx.Init.Mode = DMA_NORMAL; | |
| 143 hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW; | |
| 144 hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; | |
| 145 HAL_DMA_Init(&hdma_usart1_rx); | |
| 146 | |
| 147 __HAL_LINKDMA(&huart1,hdmarx,hdma_usart1_rx); | |
| 148 | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
149 hdma_usart1_tx.Instance = DMA2_Stream7; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
150 hdma_usart1_tx.Init.Channel = DMA_CHANNEL_4; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
151 hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
152 hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
153 hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
154 hdma_usart1_tx.Init.PeriphDataAlignment = DMA_MDATAALIGN_BYTE; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
155 hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
156 hdma_usart1_tx.Init.Mode = DMA_NORMAL; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
157 hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
158 hdma_usart1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
159 HAL_DMA_Init(&hdma_usart1_tx); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
160 |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
161 __HAL_LINKDMA(&huart1,hdmatx,hdma_usart1_tx); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
162 |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
163 |
| 662 | 164 /* DMA interrupt init */ |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
165 HAL_NVIC_SetPriority(DMA2_Stream5_IRQn, 2, 2); |
| 662 | 166 HAL_NVIC_EnableIRQ(DMA2_Stream5_IRQn); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
167 HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 2, 1); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
168 HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn); |
| 38 | 169 } |
| 170 | |
| 932 | 171 void UART_MUX_SelectAddress(uint8_t muxAddress) |
|
779
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
172 { |
|
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
173 uint8_t indexstr[4]; |
|
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
174 |
| 794 | 175 if(muxAddress <= MAX_MUX_CHANNEL) |
|
779
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
176 { |
| 794 | 177 indexstr[0] = '~'; |
| 178 indexstr[1] = muxAddress; | |
| 179 indexstr[2] = 0x0D; | |
| 180 indexstr[3] = 0x0A; | |
| 932 | 181 if(!Uart1Ctrl.dmaTxActive) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
182 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
183 memcpy(txBuffer, indexstr, 4); |
| 932 | 184 Uart1Ctrl.dmaTxActive = 0; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
185 if(HAL_OK == HAL_UART_Transmit_DMA(&huart1,txBuffer,4)) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
186 { |
| 932 | 187 Uart1Ctrl.dmaTxActive = 1; |
| 188 while(Uart1Ctrl.dmaTxActive) | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
189 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
190 HAL_Delay(1); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
191 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
192 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
193 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
194 else |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
195 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
196 memcpy(txBufferQue, indexstr, 4); |
| 932 | 197 Uart1Ctrl.txBufferQueLen = 4; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
198 } |
|
779
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
199 } |
|
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
200 } |
|
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
201 |
| 794 | 202 |
| 203 void UART_SendCmdString(uint8_t *cmdString) | |
|
729
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
204 { |
| 794 | 205 uint8_t cmdLength = strlen((char*)cmdString); |
| 206 | |
| 932 | 207 if(Uart1Ctrl.dmaTxActive == 0) |
|
729
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
208 { |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
209 if(cmdLength < TX_BUF_SIZE) /* A longer string is an indication for a missing 0 termination */ |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
210 { |
| 932 | 211 if(Uart1Ctrl.dmaRxActive == 0) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
212 { |
| 932 | 213 UART_StartDMA_Receiption(&Uart1Ctrl); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
214 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
215 memcpy(txBuffer, cmdString, cmdLength); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
216 if(HAL_OK == HAL_UART_Transmit_DMA(&huart1,txBuffer,cmdLength)) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
217 { |
| 932 | 218 Uart1Ctrl.dmaTxActive = 1; |
| 921 | 219 LastCmdRequestTick = HAL_GetTick(); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
220 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
221 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
222 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
223 else |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
224 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
225 memcpy(txBufferQue, cmdString, cmdLength); |
| 932 | 226 Uart1Ctrl.txBufferQueLen = cmdLength; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
227 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
228 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
229 |
| 933 | 230 void UART_AddFletcher(uint8_t* pBuffer, uint8_t length) |
| 231 { | |
| 232 uint8_t ck_A = 0; | |
| 233 uint8_t ck_B = 0; | |
| 234 uint8_t index = 0; | |
| 235 | |
| 236 | |
| 237 pBuffer += 2; /* skip sync chars */ | |
| 238 for(index = 2; index < length; index++) | |
| 239 { | |
| 240 ck_A += *pBuffer++; | |
| 241 ck_B += ck_A; | |
| 242 } | |
| 243 *pBuffer++ = ck_A; | |
| 244 *pBuffer++ = ck_B; | |
| 245 } | |
| 246 | |
| 922 | 247 void UART_SendCmdUbx(const uint8_t *cmd, uint8_t len) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
248 { |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
249 if(len < TX_BUF_SIZE) /* A longer string is an indication for a missing 0 termination */ |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
250 { |
| 932 | 251 if(pGnssCtrl != NULL) |
| 794 | 252 { |
| 932 | 253 if(pGnssCtrl->dmaRxActive == 0) |
| 254 { | |
| 255 UART_StartDMA_Receiption(pGnssCtrl); | |
| 256 } | |
| 257 memcpy(pGnssCtrl->pTxBuffer, cmd, len); | |
| 933 | 258 UART_AddFletcher(pGnssCtrl->pTxBuffer, len); |
| 259 len += 2; | |
| 932 | 260 if(HAL_OK == HAL_UART_Transmit_DMA(pGnssCtrl->pHandle,pGnssCtrl->pTxBuffer,len)) |
| 261 { | |
| 262 pGnssCtrl->dmaTxActive = 1; | |
| 263 LastCmdRequestTick = HAL_GetTick(); | |
| 264 } | |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
265 } |
| 794 | 266 } |
| 267 } | |
| 268 | |
|
729
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
269 |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
270 void StringToInt(char *pstr, uint32_t *puInt32) |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
271 { |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
272 uint8_t index = 0; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
273 uint32_t result = 0; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
274 while((pstr[index] >= '0') && (pstr[index] <= '9')) |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
275 { |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
276 result *=10; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
277 result += pstr[index] - '0'; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
278 index++; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
279 } |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
280 *puInt32 = result; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
281 } |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
282 |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
283 void StringToUInt64(char *pstr, uint64_t *puint64) |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
284 { |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
285 uint8_t index = 0; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
286 uint64_t result = 0; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
287 while((pstr[index] >= '0') && (pstr[index] <= '9')) |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
288 { |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
289 result *=10; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
290 result += pstr[index] - '0'; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
291 index++; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
292 } |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
293 *puint64 = result; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
294 } |
| 662 | 295 |
| 932 | 296 void UART_StartDMA_Receiption(sUartComCtrl* pUartCtrl) |
| 742 | 297 { |
| 932 | 298 if(pUartCtrl->dmaRxActive == 0) |
| 742 | 299 { |
| 932 | 300 if(((pUartCtrl->rxWriteIndex / CHUNK_SIZE) != (pUartCtrl->rxReadIndex / CHUNK_SIZE)) || ((UART_isEndIndication(pUartCtrl, pUartCtrl->rxWriteIndex)) && (UART_isEndIndication(pUartCtrl, pUartCtrl->rxWriteIndex + 1)))) /* start next transfer if we did not catch up with read index */ |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
301 { |
| 932 | 302 if(HAL_OK == HAL_UART_Receive_DMA (pUartCtrl->pHandle, &pUartCtrl->pRxBuffer[pUartCtrl->rxWriteIndex], CHUNK_SIZE)) |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
303 { |
| 932 | 304 pUartCtrl->dmaRxActive = 1; |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
305 } |
|
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
306 } |
| 742 | 307 } |
| 308 } | |
| 690 | 309 |
|
798
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
310 void UART_ChangeBaudrate(uint32_t newBaudrate) |
| 38 | 311 { |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
312 MX_USART1_UART_DeInit(); |
|
798
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
313 huart1.Init.BaudRate = newBaudrate; |
|
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
314 HAL_UART_Init(&huart1); |
|
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
315 MX_USART1_DMA_Init(); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
316 HAL_NVIC_SetPriority(USART1_IRQn, 1, 3); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
317 HAL_NVIC_EnableIRQ(USART1_IRQn); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
318 |
| 932 | 319 UART_clearRxBuffer(&Uart1Ctrl); |
| 320 Uart1Ctrl.rxReadIndex = 0; | |
| 321 Uart1Ctrl.rxWriteIndex = 0; | |
| 322 Uart1Ctrl.dmaRxActive = 0; | |
| 976 | 323 Uart1Ctrl.dmaTxActive = 0; |
| 932 | 324 Uart1Ctrl.txBufferQueLen = 0; |
| 38 | 325 } |
| 690 | 326 |
| 932 | 327 void UART_HandleRxComplete(sUartComCtrl* pUartCtrl) |
| 328 { | |
| 329 pUartCtrl->dmaRxActive = 0; | |
| 330 pUartCtrl->rxWriteIndex+=CHUNK_SIZE; | |
| 331 if(pUartCtrl->rxWriteIndex >= CHUNK_SIZE * CHUNKS_PER_BUFFER) | |
| 332 { | |
| 333 pUartCtrl->rxWriteIndex = 0; | |
| 334 } | |
| 335 UART_StartDMA_Receiption(pUartCtrl); | |
| 336 } | |
| 662 | 337 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) |
| 38 | 338 { |
| 932 | 339 if(huart == &huart1) |
| 340 { | |
| 341 UART_HandleRxComplete(&Uart1Ctrl); | |
| 342 } | |
| 988 | 343 #ifdef ENABLE_GNSS_INTERN |
| 344 if(GPIO_GetVersion() > 0) | |
| 932 | 345 { |
| 988 | 346 if(huart == &huart6) |
| 347 { | |
| 348 UART_HandleRxComplete(&Uart6Ctrl); | |
| 349 } | |
| 932 | 350 } |
| 922 | 351 #endif |
| 38 | 352 } |
| 932 | 353 |
| 354 void UART_HandleTxComplete(sUartComCtrl* pUartCtrl) | |
| 355 { | |
| 356 pUartCtrl->dmaTxActive = 0; | |
| 357 UART_WriteData(pUartCtrl); | |
| 358 if(pUartCtrl->txBufferQueLen) | |
| 359 { | |
| 360 memcpy(pUartCtrl->pTxBuffer, pUartCtrl->pTxQue, pUartCtrl->txBufferQueLen); | |
| 361 HAL_UART_Transmit_DMA(pUartCtrl->pHandle,pUartCtrl->pTxBuffer,pUartCtrl->txBufferQueLen); | |
| 362 pUartCtrl->dmaTxActive = 1; | |
| 363 pUartCtrl->txBufferQueLen = 0; | |
| 364 } | |
| 365 } | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
366 void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
367 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
368 if(huart == &huart1) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
369 { |
| 932 | 370 UART_HandleTxComplete(&Uart1Ctrl); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
371 } |
| 988 | 372 #ifdef ENABLE_GNSS_INTERN |
| 373 if(GPIO_GetVersion() > 0) | |
| 922 | 374 { |
| 988 | 375 if(huart == &huart6) |
| 376 { | |
| 377 UART_HandleTxComplete(&Uart6Ctrl); | |
| 378 } | |
| 922 | 379 } |
| 380 #endif | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
381 } |
| 38 | 382 |
| 932 | 383 uint8_t UART_isEndIndication(sUartComCtrl* pCtrl, uint8_t index) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
384 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
385 uint8_t ret = 0; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
386 if(index % 2) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
387 { |
| 932 | 388 if(pCtrl->pRxBuffer[index] == BUFFER_NODATA_HIGH) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
389 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
390 ret = 1; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
391 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
392 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
393 else |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
394 { |
| 932 | 395 if(pCtrl->pRxBuffer[index] == BUFFER_NODATA_LOW) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
396 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
397 ret = 1; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
398 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
399 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
400 |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
401 return ret; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
402 } |
| 976 | 403 void UART_ReadData(uint8_t sensorType, uint8_t flush) /* flush = 1 skips processing of data => data is discarded */ |
| 794 | 404 { |
| 932 | 405 uint8_t localRX; |
| 406 uint8_t futureIndex; | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
407 uint8_t moreData = 0; |
| 38 | 408 |
| 932 | 409 sUartComCtrl* pUartCtrl; |
| 410 | |
| 411 if(sensorType == SENSOR_GNSS) | |
| 412 { | |
| 988 | 413 #ifdef ENABLE_GNSS_INTERN |
| 932 | 414 pUartCtrl = &Uart6Ctrl; |
| 415 #else | |
| 988 | 416 #ifdef ENABLE_GNSS_EXTERN |
| 932 | 417 pUartCtrl = &Uart1Ctrl; |
| 418 #endif | |
| 988 | 419 #endif |
| 932 | 420 } |
| 421 else | |
| 422 { | |
| 423 pUartCtrl = &Uart1Ctrl; | |
| 424 } | |
| 425 localRX = pUartCtrl->rxReadIndex; | |
| 426 futureIndex = pUartCtrl->rxReadIndex + 1; | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
427 if(futureIndex >= CHUNK_SIZE * CHUNKS_PER_BUFFER) |
| 794 | 428 { |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
429 futureIndex = 0; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
430 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
431 |
| 932 | 432 if(!UART_isEndIndication(pUartCtrl, futureIndex)) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
433 { |
| 932 | 434 moreData = 1; |
| 435 } | |
| 436 | |
| 437 if((!UART_isEndIndication(pUartCtrl, localRX)) || (moreData)) | |
| 438 do | |
| 439 { | |
| 440 while((!UART_isEndIndication(pUartCtrl, localRX)) || (moreData)) | |
| 794 | 441 { |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
442 moreData = 0; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
443 switch (sensorType) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
444 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
445 case SENSOR_MUX: |
| 932 | 446 case SENSOR_DIGO2: uartO2_ProcessData(pUartCtrl->pRxBuffer[localRX]); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
447 break; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
448 #ifdef ENABLE_CO2_SUPPORT |
| 932 | 449 case SENSOR_CO2: uartCo2_ProcessData(pUartCtrl->pRxBuffer[localRX]); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
450 break; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
451 #endif |
| 988 | 452 #if defined ENABLE_GNSS_INTERN || defined ENABLE_GNSS_EXTERN |
| 932 | 453 case SENSOR_GNSS: uartGnss_ProcessData(pUartCtrl->pRxBuffer[localRX]); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
454 break; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
455 #endif |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
456 #ifdef ENABLE_SENTINEL_MODE |
| 932 | 457 case SENSOR_SENTINEL: uartSentinel_ProcessData(pUartCtrl->pRxBuffer[localRX]); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
458 break; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
459 #endif |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
460 default: |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
461 break; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
462 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
463 if(localRX % 2) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
464 { |
| 932 | 465 pUartCtrl->pRxBuffer[localRX] = BUFFER_NODATA_HIGH; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
466 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
467 else |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
468 { |
| 932 | 469 pUartCtrl->pRxBuffer[localRX] = BUFFER_NODATA_LOW; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
470 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
471 |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
472 localRX++; |
| 932 | 473 pUartCtrl->rxReadIndex++; |
| 474 if(pUartCtrl->rxReadIndex >= CHUNK_SIZE * CHUNKS_PER_BUFFER) | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
475 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
476 localRX = 0; |
| 932 | 477 pUartCtrl->rxReadIndex = 0; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
478 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
479 futureIndex++; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
480 if(futureIndex >= CHUNK_SIZE * CHUNKS_PER_BUFFER) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
481 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
482 futureIndex = 0; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
483 } |
| 794 | 484 } |
| 932 | 485 if(!UART_isEndIndication(pUartCtrl, futureIndex)) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
486 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
487 moreData = 1; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
488 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
489 } while(moreData); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
490 } |
| 794 | 491 |
| 932 | 492 void UART_WriteData(sUartComCtrl* pUartCtrl) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
493 { |
| 932 | 494 if(pUartCtrl->pHandle->hdmatx->State == HAL_DMA_STATE_READY) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
495 { |
| 932 | 496 pUartCtrl->pHandle->gState = HAL_UART_STATE_READY; |
| 497 pUartCtrl->dmaTxActive = 0; | |
| 794 | 498 } |
| 932 | 499 if(pUartCtrl->pHandle->hdmarx->State == HAL_DMA_STATE_READY) |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
500 { |
| 932 | 501 pUartCtrl->pHandle->RxState = HAL_UART_STATE_READY; |
| 502 pUartCtrl->dmaRxActive = 0; | |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
503 } |
| 794 | 504 } |
| 505 | |
| 861 | 506 uint8_t UART_isComActive(uint8_t sensorId) |
| 507 { | |
| 508 uint8_t active = 1; | |
| 809 | 509 |
| 921 | 510 if(time_elapsed_ms(LastCmdRequestTick, HAL_GetTick()) > 300) /* UART activity should be inactive 300ms after last command */ |
| 861 | 511 { |
| 512 active = 0; | |
| 513 } | |
| 514 return active; | |
| 515 } | |
| 809 | 516 |
| 921 | 517 |
| 38 | 518 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/ |
