35 lines
1.4 KiB
C
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);
|
|
};
|