Files
CuboBmsFirmware/firmware/Core/Src/driverSWUART2.c
2023-03-29 20:05:42 +03:00

35 lines
1.4 KiB
C

#include "driverSWUART2.h"
libRingBufferTypedef *driverSWUART2OutputBuffer;
void driverSWUART2Init(uint32_t baudRate) {
driverSWUART2OutputBuffer = libRingBufferNew(sizeof(uint8_t),RINGBUFFERSIZE); // Make new output buffer
if(!driverSWUART2OutputBuffer) // Check if buffer pointer is generated
while(true); // Out of memory error
driverHWUART2Init(baudRate); // Initialize serial port and pass function that should be called when a byte is received
};
char driverSWUART2PutCharInOutputBuffer(char character, FILE *stream) {
// TODO: If buffer is full, first send a character out, then place new char. This should however never happen
if(!driverSWUART2OutputBuffer->isFull(driverSWUART2OutputBuffer)) {
driverSWUART2OutputBuffer->add(driverSWUART2OutputBuffer,&character);
}else{
driverSWUART2Task();
driverSWUART2OutputBuffer->add(driverSWUART2OutputBuffer,&character);
}
return 0;
};
bool driverSWUART2Task(void) {
char outputChar;
if(!driverSWUART2OutputBuffer->isEmpty(driverSWUART2OutputBuffer)){ // Check if there is data in the ouput buffer
driverSWUART2OutputBuffer->pull(driverSWUART2OutputBuffer,&outputChar); // Pull the data from ouput buffer
driverHWUART2SendChar(outputChar); // And send it to the uart
}
return !driverSWUART2OutputBuffer->isEmpty(driverSWUART2OutputBuffer);
};