/* * bsp_UART.h * * Created on: Oct 26, 2023 * Author: shiya */ #ifndef INC_BSP_UART_H_ #define INC_BSP_UART_H_ #include "bsp_hardware_hash_table.h" #include "BSP/bsp_include.h" #include #include "bsp_com_helper.h" #define UART_Transmit_MAX_NUM 1024 #define UART_Receive_MAX_NUM 100 extern struct UARTHandler RS_485_1_UART_Handler; extern struct UARTHandler RS_485_2_UART_Handler; extern struct UARTHandler RS_485_3_UART_Handler; extern struct UARTHandler RS_485_4_UART_Handler; extern struct UARTHandler InterCall_DEBUG_UART_Handler; extern struct UARTHandler E28_SBUS_UART_Handler; extern struct UARTHandler E22_Serial_UART_Handler; void GF_BSP_UARTHandlers_Intialize(); uint8_t GF_BSP_UART_Init(void); //串行发送完成后才能发送第二帧数据,没有做缓冲,如未发送完成,第二次发送无效,丢弃发送数据 void GF_BSP_UART_Transmit(const uint8_t RS485_Index,const uint8_t *pData, uint16_t Size); typedef struct _UARTSendHandler { uint16_t TxCount; uint8_t Tx_Buf[512]; void (*UART_Decode)(uint8_t*, uint16_t); // 发送缓存 struct _UARTSendHandler* pNext; }UARTSendHandler; struct UARTHandler { char startCountFlag; //indicate that to start counting char send_finished;//indicate decode finished or not char decode_finished;//indicate decode finished or not uint8_t tmp_Rx_Buf[2]; // temporary data to store received data uint32_t Wait_time; // the time to wait uint32_t Send_time; //uint32_t count; uint32_t Wait_Time_Count; uint32_t Send_Time_Count; UART_HandleTypeDef* uart; //UART to use unsigned char timeSpan; // timer elapsed time uint8_t Rx_Buf[2048]; // 接收缓存,最大256字节 uint8_t Tx_Buf[2048]; //发送缓存 157,864 uint16_t TxCount; uint16_t RxCount; void (*UART_Tx)(struct UARTHandler*); //void UART_Tx(uint8_t *Tx_Buf,uint16_t TxCount); void (*UART_Rx)(struct UARTHandler*); void (*UART_Decode)(uint8_t*, uint16_t); //Decode Rx_Buf UARTSendHandler *pCurrentUARTSendHadler; // void (*AddSendList)(struct UARTHandler*, uint8_t*, uint16_t, void (*UART_Decode)(uint8_t*, uint16_t)); int16_t UARTSendHadlerListNum; //got a dispacher alone // Dispatcher *pHead;// = NULL; //环形链表中的数据头指针 // Dispatcher *pTail;// = NULL; //环形链表中的数据尾指针 // uint16_t DispacherNumber;// = 0; // uint16_t DispacherCallTimeCount; //= 100; //2ms 一次, // uint16_t counter;// = 0; // uint16_t Dispacher_Enable;// = 0; // void(*Add_Dispatcher_List)(struct UARTHandler *uartHandler,void (*dispache)(void));//UART的调度程序 // void(*Dispatcher_Run)(struct UARTHandler *uartHandler);//UART的调度程序 DispacherController* dispacherController; HardWareController* uartHardWareController; // uint16_t HardWare_Check_Counter; // ComHardWare *pComHWHead; // ComHardWare *pComHWTail; // void(*Add_PCOMHardWare)(struct UARTHandler*,char *,char); // void(*PCOMHardWare_Check)(struct UARTHandler*); // int (*Set_PCOMHardWare)(struct UARTHandler * ,char* ,char ); }; typedef struct _UARTHandlerHelper { struct UARTHandler *UART_Handler; DispacherController* disp; HardWareController* hardWares; }UARTHandlerHelper; void UARTHandlerTx(struct UARTHandler *uartHandler); void UARTHandlerRX(struct UARTHandler *uartHandler); //void IntializeUARTHandler(struct UARTHandler *uartHandler, UART_HandleTypeDef uart,int32_t WaitTime,unsigned char timeSpan); void Counting(struct UARTHandler *uartHandler); void IntializeUARTHandler(struct UARTHandler *uartHandler, UART_HandleTypeDef* uart, int32_t WaitTime, unsigned char timeSpan); void GF_BSP_UART_Timer(); extern void uartHandler_intialize(UARTHandlerHelper* helper ,struct UARTHandler *Handler,int WaitTime); #endif /* INC_BSP_UART_H_ */