#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); };