Skip to content
Snippets Groups Projects
Uart.h 809 B
#ifndef _SERCOM_UART_CLASS
#define _SERCOM_UART_CLASS

#include "HardwareSerial.h"
#include "SERCOM.h"
#include "RingBuffer.h"

#include <cstddef>


class Uart : public HardwareSerial
{
	public:
		Uart(SERCOM *s, uint8_t pinRX, uint8_t pinTX);
		void begin(unsigned long baudRate);
		void begin(unsigned long baudrate, uint8_t config);
		void end();
		int available();
		int peek();
		int read();
		void flush();
		size_t write(const uint8_t data);
		size_t write(const char * data);

		void IrqHandler();

		operator bool() { return true; }

	private:
		SERCOM *sercom;
		RingBuffer rxBuffer;

		SercomNumberStopBit extractNbStopBit(uint8_t config);
		SercomUartCharSize extractCharSize(uint8_t config);
		SercomParityMode extractParity(uint8_t config);
};

extern Uart Serial;
extern Uart Serial5;


#endif