#ifndef SOFTUART_H_ #define SOFTUART_H_ #include "user_interface.h" #define SOFTUART_MAX_RX_BUFF 64 #define SOFTUART_GPIO_COUNT 16 typedef struct softuart_pin_t { uint8_t gpio_id; uint32_t gpio_mux_name; uint8_t gpio_func; } softuart_pin_t; typedef struct softuart_buffer_t { char receive_buffer[SOFTUART_MAX_RX_BUFF]; uint8_t receive_buffer_tail; uint8_t receive_buffer_head; uint8_t buffer_overflow; } softuart_buffer_t; typedef struct { softuart_pin_t pin_rx; softuart_pin_t pin_tx; bool inverse; //optional rs485 tx enable pin (high -> tx enabled) uint8_t pin_rs485_tx_enable; //wether or not this softuart is rs485 and controlls rs485 tx enable pin uint8_t is_rs485; volatile softuart_buffer_t buffer; uint16_t bit_time; } Softuart; bool Softuart_Available(Softuart *s); void Softuart_Intr_Handler(Softuart *s); void Softuart_SetPinRx(Softuart *s, uint8_t gpio_id); void Softuart_SetPinTx(Softuart *s, uint8_t gpio_id); void Softuart_EnableRs485(Softuart *s, uint8_t gpio_id); void Softuart_Init(Softuart *s, uint32_t baudrate, bool inverse); void Softuart_Putchar(Softuart *s, char data); void Softuart_Puts(Softuart *s, const char *c ); uint8_t Softuart_Readline(Softuart *s, char* Buffer, uint8_t MaxLen ); uint8_t Softuart_Read(Softuart *s); //define mapping from pin to functio mode typedef struct { uint32_t gpio_mux_name; uint8_t gpio_func; } softuart_reg_t; #endif /* SOFTUART_H_ */