2424#include "system/passert.h"
2525#include "uart_definitions.h"
2626
27- static UARTDevice * s_uart_dev_ptr [6 ] = {0 };
27+ #define container_of (ptr , type , member ) \
28+ ((type *)((char *)(ptr) - offsetof(type, member)))
2829
2930typedef enum {
3031 UART_FullDuplex = 0 ,
@@ -139,34 +140,6 @@ static UARTPinFunction_t get_uart_pin_fun(UART_HandleTypeDef *uart) {
139140 return pin_fun ;
140141}
141142
142- static uint32_t get_uart_index (UART_HandleTypeDef * uart ) {
143- if (uart -> Instance == USART1 ) {
144- return 0 ;
145- } else if (uart -> Instance == USART2 ) {
146- return 0 ;
147- } else if (uart -> Instance == USART3 ) {
148- return 0 ;
149- }
150- #ifdef USART4
151- else if (uart -> Instance == USART4 ) {
152- return 0 ;
153- }
154- #endif
155- #ifdef USART5
156- else if (uart -> Instance == USART5 ) {
157- return 0 ;
158- }
159- #endif
160- #ifdef USART6
161- else if (uart -> Instance == USART6 ) {
162- return 0 ;
163- }
164- #endif
165- else {
166- WTF ;
167- }
168- }
169-
170143static void prv_init (UARTDevice * dev , UARTInitMode_t mode ) {
171144 if (mode == UART_FullDuplex ) {
172145 dev -> periph -> Init .Mode = UART_MODE_TX_RX ;
@@ -178,8 +151,6 @@ static void prv_init(UARTDevice *dev, UARTInitMode_t mode) {
178151 WTF ;
179152 }
180153
181- s_uart_dev_ptr [get_uart_index (dev -> periph )] = dev ;
182-
183154 UARTPinFunction_t pin_fun = get_uart_pin_fun (dev -> periph );
184155 switch (mode ) {
185156 case UART_FullDuplex :
@@ -214,10 +185,7 @@ void uart_init_tx_only(UARTDevice *dev) { prv_init(dev, UART_TxOnly); }
214185
215186void uart_init_rx_only (UARTDevice * dev ) { prv_init (dev , UART_RxOnly ); }
216187
217- void uart_deinit (UARTDevice * dev ) {
218- HAL_UART_DeInit (dev -> periph );
219- s_uart_dev_ptr [get_uart_index (dev -> periph )] = NULL ;
220- }
188+ void uart_deinit (UARTDevice * dev ) { HAL_UART_DeInit (dev -> periph ); }
221189
222190void uart_set_baud_rate (UARTDevice * dev , uint32_t baud_rate ) {
223191 PBL_ASSERTN (dev -> state -> initialized );
@@ -331,7 +299,8 @@ void uart_irq_handler(UARTDevice *dev) {
331299 .framing_error = uart_has_rx_framing_error (dev ),
332300 };
333301 // DMA
334- if (dev -> state -> rx_dma_buffer && (__HAL_UART_GET_FLAG (dev -> periph , UART_FLAG_IDLE ) != RESET ) &&
302+ if (dev -> state -> rx_dma_buffer &&
303+ (__HAL_UART_GET_FLAG (dev -> periph , UART_FLAG_IDLE ) != RESET ) &&
335304 (__HAL_UART_GET_IT_SOURCE (dev -> periph , UART_IT_IDLE ) != RESET )) {
336305 // process bytes from the DMA buffer
337306 const uint32_t dma_length = dev -> state -> rx_dma_length ;
@@ -408,10 +377,11 @@ void uart_clear_all_interrupt_flags(UARTDevice *dev) {
408377}
409378
410379void HAL_UART_RxHalfCpltCallback (UART_HandleTypeDef * huart ) {
411- // TODO: need to find a way to convert huart to dev as dev is not container of huart
380+ //TODO: need to find a way to convert huart to dev as dev is not container of huart
381+ #if 0
412382 size_t recv_len ;
413383 size_t recv_total_index ;
414- UARTDevice * dev = s_uart_dev_ptr [ get_uart_index (huart )] ;
384+ UARTDevice * dev = container_of (huart , UARTDevice , periph ) ;
415385
416386 recv_total_index = dev -> state -> rx_dma_length - __HAL_DMA_GET_COUNTER (dev -> rx_dma );
417387 if (recv_total_index < dev -> state -> rx_dma_index )
@@ -428,11 +398,12 @@ void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart) {
428398 }
429399 }
430400 }
401+ #endif
431402}
432403
433- void HAL_UART_RxCpltCallback (UART_HandleTypeDef * huart ) {
434- // TODO:
435- // HAL_UART_RxHalfCpltCallback(huart);
404+ void HAL_UART_RxCpltCallback (UART_HandleTypeDef * huart ) {
405+ //TODO:
406+ //HAL_UART_RxHalfCpltCallback(huart);
436407}
437408
438409// DMA
0 commit comments