12static bool operator==(
const UART_InitTypeDef& lhs,
const UART_InitTypeDef& rhs) {
13 return lhs.BaudRate == rhs.BaudRate &&
14 lhs.HwFlowCtl == rhs.HwFlowCtl &&
15 lhs.Mode == rhs.Mode &&
16 lhs.OverSampling == rhs.OverSampling &&
17 lhs.Parity == rhs.Parity &&
18 lhs.StopBits == rhs.StopBits &&
19 lhs.WordLength == rhs.WordLength;
36 if(this->
huart.Init == config){
40 this->
huart.Init = config;
42 if(HAL_UART_Init(&this->
huart) != HAL_OK){
58 return HAL_UART_Receive_IT(&this->
huart,(uint8_t*)this->
uart_buf,UART_BUF_SIZE) == HAL_OK;
65 return HAL_UART_Transmit_DMA(&this->
huart, (uint8_t*)(txbuf), size) == HAL_OK;
72 uint32_t status = HAL_UART_Transmit(&this->
huart, (uint8_t*)(txbuf), size,timeout);
75 return status == HAL_OK;
81 return HAL_UART_Transmit_IT(&this->
huart, (uint8_t*)(txbuf), size) == HAL_OK;
88 uint32_t status = (HAL_UART_Receive(&this->
huart, (uint8_t*)(rxbuf), size, timeout));
91 return status == HAL_OK;
98 return(HAL_UART_Receive_DMA(&this->
huart, (uint8_t*)(rxbuf), size) == HAL_OK);
105 return(HAL_UART_Receive_IT(&this->
huart, (uint8_t*)(rxbuf), size) == HAL_OK);
109 if(this->device ==
nullptr ||
device == this->device){
118 uint32_t status = HAL_UART_AbortReceive(&this->
huart);
119 if(
device && status == HAL_OK){
122 return status == HAL_OK;
130 uint32_t status = HAL_UART_AbortTransmit(&this->
huart);
131 if(
device && status == HAL_OK){
134 return status == HAL_OK;
138 if(
device == this->device){
139 this->device =
nullptr;
147 bool isIsr =
inIsr();
148 BaseType_t taskWoken = 0;
149 bool success =
false;
153 success = sem.
Take(blocktime);
155 portYIELD_FROM_ISR(taskWoken);
161 bool isIsr =
inIsr();
162 BaseType_t taskWoken = 0;
163 bool success =
false;
167 success = sem.
Give();
169 portYIELD_FROM_ISR(taskWoken);
178 return huart.ErrorCode;
184 if(
huart == &this->huart){
185 if(this->
device !=
nullptr){
202 if(
huart == &this->huart){
static bool operator==(const UART_InitTypeDef &lhs, const UART_InitTypeDef &rhs)
virtual void endUartTransfer(UARTPort *port, bool transmit)
virtual void uartRcv(char &buf)
virtual void startUartTransfer(UARTPort *port, bool transmit)
UART_InitTypeDef & getConfig()
cpp_freertos::BinarySemaphore rxsemaphore
bool receive(char *rxbuf, uint16_t size, uint32_t timeout=10000)
UART_HandleTypeDef * getHuart()
bool giveSemaphore(bool txsem=true)
bool waitingForSingleBytes
bool takeSemaphore(bool txsem=true, uint32_t blocktime=portMAX_DELAY)
UART_HandleTypeDef & huart
volatile char uart_buf[UART_BUF_SIZE]
bool freePort(UARTDevice *device)
bool reservePort(UARTDevice *device)
bool receive_IT(char *rxbuf, uint16_t size)
bool transmit_IT(const char *txbuf, uint16_t size)
bool reconfigurePort(UART_InitTypeDef &config)
bool transmit(const char *txbuf, uint16_t size, uint32_t timeout=10000)
bool transmit_DMA(const char *txbuf, uint16_t size)
bool receive_DMA(char *rxbuf, uint16_t size)
UARTPort(UART_HandleTypeDef &huart)
cpp_freertos::BinarySemaphore semaphore
void uartTxComplete(UART_HandleTypeDef *huart)
void uartRxComplete(UART_HandleTypeDef *huart)
bool GiveFromISR(BaseType_t *pxHigherPriorityTaskWoken)
bool TakeFromISR(BaseType_t *pxHigherPriorityTaskWoken)
bool Take(TickType_t Timeout=portMAX_DELAY)