@@ -97,10 +97,6 @@ typedef enum {
97
97
} uart_index_t ;
98
98
99
99
static UART_HandleTypeDef * uart_handlers [UART_NUM ] = {NULL };
100
- static void (* rx_callback [UART_NUM ])(serial_t * );
101
- static serial_t * rx_callback_obj [UART_NUM ];
102
- static int (* tx_callback [UART_NUM ])(serial_t * );
103
- static serial_t * tx_callback_obj [UART_NUM ];
104
100
105
101
static serial_t serial_debug = { .uart = NP , .index = UART_NUM };
106
102
@@ -621,7 +617,7 @@ size_t uart_debug_write(uint8_t *data, uint32_t size)
621
617
return 0 ;
622
618
}
623
619
} else {
624
- serial_t * obj = rx_callback_obj [serial_debug .index ];
620
+ serial_t * obj = get_serial_obj ( uart_handlers [serial_debug .index ]) ;
625
621
if (obj ) {
626
622
serial_debug .irq = obj -> irq ;
627
623
}
@@ -681,8 +677,7 @@ int uart_getc(serial_t *obj, unsigned char *c)
681
677
682
678
* c = (unsigned char )(obj -> recv );
683
679
/* Restart RX irq */
684
- UART_HandleTypeDef * huart = uart_handlers [obj -> index ];
685
- HAL_UART_Receive_IT (huart , & (obj -> recv ), 1 );
680
+ HAL_UART_Receive_IT (uart_handlers [obj -> index ], & (obj -> recv ), 1 );
686
681
687
682
return 0 ;
688
683
}
@@ -704,9 +699,7 @@ void uart_attach_rx_callback(serial_t *obj, void (*callback)(serial_t *))
704
699
if (serial_rx_active (obj )) {
705
700
return ;
706
701
}
707
-
708
- rx_callback [obj -> index ] = callback ;
709
- rx_callback_obj [obj -> index ] = obj ;
702
+ obj -> rx_callback = callback ;
710
703
711
704
/* Must disable interrupt to prevent handle lock contention */
712
705
HAL_NVIC_DisableIRQ (obj -> irq );
@@ -730,9 +723,7 @@ void uart_attach_tx_callback(serial_t *obj, int (*callback)(serial_t *))
730
723
if (obj == NULL ) {
731
724
return ;
732
725
}
733
-
734
- tx_callback [obj -> index ] = callback ;
735
- tx_callback_obj [obj -> index ] = obj ;
726
+ obj -> tx_callback = callback ;
736
727
737
728
/* Must disable interrupt to prevent handle lock contention */
738
729
HAL_NVIC_DisableIRQ (obj -> irq );
@@ -750,6 +741,7 @@ void uart_attach_tx_callback(serial_t *obj, int (*callback)(serial_t *))
750
741
* @param UartHandle pointer on the uart reference
751
742
* @retval index
752
743
*/
744
+ /*
753
745
uint8_t uart_index(UART_HandleTypeDef *huart)
754
746
{
755
747
uint8_t i = 0;
@@ -765,6 +757,7 @@ uint8_t uart_index(UART_HandleTypeDef *huart)
765
757
766
758
return i;
767
759
}
760
+ */
768
761
769
762
/**
770
763
* @brief Rx Transfer completed callback
@@ -773,10 +766,9 @@ uint8_t uart_index(UART_HandleTypeDef *huart)
773
766
*/
774
767
void HAL_UART_RxCpltCallback (UART_HandleTypeDef * huart )
775
768
{
776
- uint8_t index = uart_index (huart );
777
-
778
- if (index < UART_NUM ) {
779
- rx_callback [index ](rx_callback_obj [index ]);
769
+ serial_t * obj = get_serial_obj (huart );
770
+ if (obj ) {
771
+ obj -> rx_callback (obj );
780
772
}
781
773
}
782
774
@@ -787,14 +779,11 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
787
779
*/
788
780
void HAL_UART_TxCpltCallback (UART_HandleTypeDef * huart )
789
781
{
790
- uint8_t index = uart_index (huart );
791
- serial_t * obj = tx_callback_obj [index ];
782
+ serial_t * obj = get_serial_obj (huart );
792
783
793
- if (index < UART_NUM ) {
794
- if (tx_callback [index ](obj ) != -1 ) {
795
- if (HAL_UART_Transmit_IT (uart_handlers [obj -> index ], & obj -> tx_buff [obj -> tx_tail ], 1 ) != HAL_OK ) {
796
- return ;
797
- }
784
+ if (obj && obj -> tx_callback (obj ) != -1 ) {
785
+ if (HAL_UART_Transmit_IT (huart , & obj -> tx_buff [obj -> tx_tail ], 1 ) != HAL_OK ) {
786
+ return ;
798
787
}
799
788
}
800
789
}
@@ -828,12 +817,9 @@ void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
828
817
}
829
818
#endif
830
819
/* Restart receive interrupt after any error */
831
- uint8_t index = uart_index (huart );
832
- if (index < UART_NUM ) {
833
- serial_t * obj = rx_callback_obj [index ];
834
- if (obj && !serial_rx_active (obj )) {
835
- HAL_UART_Receive_IT (uart_handlers [obj -> index ], & (obj -> recv ), 1 );
836
- }
820
+ serial_t * obj = get_serial_obj (huart );
821
+ if (obj && !serial_rx_active (obj )) {
822
+ HAL_UART_Receive_IT (huart , & (obj -> recv ), 1 );
837
823
}
838
824
}
839
825
@@ -1044,9 +1030,7 @@ void UART10_IRQHandler(void)
1044
1030
*/
1045
1031
void HAL_UARTEx_WakeupCallback (UART_HandleTypeDef * huart )
1046
1032
{
1047
- uint8_t index = uart_index (huart );
1048
- serial_t * obj = rx_callback_obj [index ];
1049
-
1033
+ serial_t * obj = get_serial_obj (huart );
1050
1034
HAL_UART_Receive_IT (huart , & (obj -> recv ), 1 );
1051
1035
}
1052
1036
#endif /* HAL_UART_MODULE_ENABLED */
0 commit comments