SerialStream fork implementing sigio, attach, readable, and writable
SerialStream.h
- Committer:
- jasperswallen
- Date:
- 2020-12-10
- Revision:
- 3:8c05c0310859
- Parent:
- 2:3736580f2dbe
File content as of revision 3:8c05c0310859:
#ifndef SERIALSTREAM_H #define SERIALSTREAM_H #include <Stream.h> #include <mbed.h> /** * SerialStream * Bringing MBed serial ports back like it's 1999... or at least 2019. * * This class adapts an MBed 6.0 serial port class into a Stream instance. * This lets you do two useful things with it: * - Call printf() and scanf() on it * - Pass it to code that expects a Stream to print things on. * */ template <class SerialClass> class SerialStream : public Stream { SerialClass &serialClass; public: /** * Create a SerialStream from a serial port. * @param _serialClass BufferedSerial or UnbufferedSerial instance * @param name The name of the stream associated with this serial port * (optional) */ SerialStream(SerialClass &_serialClass, const char *name = nullptr) : Stream(name), serialClass(_serialClass) { } // override Stream::read() and write() to call serial class directly. // This avoids the overhead of feeding in individual characters. virtual ssize_t write(const void *buffer, size_t length) { return serialClass.write(buffer, length); } virtual ssize_t read(void *buffer, size_t length) { return serialClass.read(buffer, length); } void sigio(Callback<void()> func) { serialClass.sigio(func); } void attach(Callback<void()> func, SerialBase::IrqType type = RxIrq) { serialClass.attach(func, type); } bool writable() const { return serialClass.writable(); } bool readable() const { return serialClass.readable(); } protected: // Dummy implementations -- these will never be called because we override // write() and read() instead. but we have to override them since they're // pure virtual. virtual int _putc(int c) { return 0; } virtual int _getc() { return 0; } }; #endif // SERIALSTREAM_H