Jamie Smith / Mbed OS CC1200-Examples

Dependencies:   CC1200

Committer:
MultipleMonomials
Date:
Mon May 03 02:47:04 2021 -0700
Revision:
3:2d1f7e1cd3d4
Parent:
0:ea2678a73bde
Update CC1200 driver version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MultipleMonomials 0:ea2678a73bde 1 #ifndef SERIALSTREAM_H
MultipleMonomials 0:ea2678a73bde 2 #define SERIALSTREAM_H
MultipleMonomials 0:ea2678a73bde 3
MultipleMonomials 0:ea2678a73bde 4 #include <mbed.h>
MultipleMonomials 0:ea2678a73bde 5 #include <platform/Stream.h>
MultipleMonomials 0:ea2678a73bde 6
MultipleMonomials 0:ea2678a73bde 7 /**
MultipleMonomials 0:ea2678a73bde 8 * SerialStream
MultipleMonomials 0:ea2678a73bde 9 * Bringing MBed serial ports back like it's 1999... or at least 2019.
MultipleMonomials 0:ea2678a73bde 10 *
MultipleMonomials 0:ea2678a73bde 11 * This class adapts an MBed 6.0 serial port class into a Stream instance.
MultipleMonomials 0:ea2678a73bde 12 * This lets you do two useful things with it:
MultipleMonomials 0:ea2678a73bde 13 * - Call printf() and scanf() on it
MultipleMonomials 0:ea2678a73bde 14 * - Pass it to code that expects a Stream to print things on.
MultipleMonomials 0:ea2678a73bde 15 *
MultipleMonomials 0:ea2678a73bde 16 */
MultipleMonomials 0:ea2678a73bde 17 template<class SerialClass>
MultipleMonomials 0:ea2678a73bde 18 class SerialStream : public Stream
MultipleMonomials 0:ea2678a73bde 19 {
MultipleMonomials 0:ea2678a73bde 20 SerialClass & serialClass;
MultipleMonomials 0:ea2678a73bde 21
MultipleMonomials 0:ea2678a73bde 22 public:
MultipleMonomials 0:ea2678a73bde 23
MultipleMonomials 0:ea2678a73bde 24 /**
MultipleMonomials 0:ea2678a73bde 25 * Create a SerialStream from a serial port.
MultipleMonomials 0:ea2678a73bde 26 * @param _serialClass BufferedSerial or UnbufferedSerial instance
MultipleMonomials 0:ea2678a73bde 27 * @param name The name of the stream associated with this serial port (optional)
MultipleMonomials 0:ea2678a73bde 28 */
MultipleMonomials 0:ea2678a73bde 29 SerialStream(SerialClass & _serialClass, const char *name = nullptr):
MultipleMonomials 0:ea2678a73bde 30 Stream(name),
MultipleMonomials 0:ea2678a73bde 31 serialClass(_serialClass)
MultipleMonomials 0:ea2678a73bde 32 {
MultipleMonomials 0:ea2678a73bde 33 }
MultipleMonomials 0:ea2678a73bde 34
MultipleMonomials 0:ea2678a73bde 35
MultipleMonomials 0:ea2678a73bde 36 private:
MultipleMonomials 0:ea2678a73bde 37
MultipleMonomials 0:ea2678a73bde 38 // override Stream::read() and write() to call serial class directly.
MultipleMonomials 0:ea2678a73bde 39 // This avoids the overhead of feeding in individual characters.
MultipleMonomials 0:ea2678a73bde 40 virtual ssize_t write(const void *buffer, size_t length)
MultipleMonomials 0:ea2678a73bde 41 {
MultipleMonomials 0:ea2678a73bde 42 return serialClass.write(buffer, length);
MultipleMonomials 0:ea2678a73bde 43 }
MultipleMonomials 0:ea2678a73bde 44
MultipleMonomials 0:ea2678a73bde 45 virtual ssize_t read(void *buffer, size_t length)
MultipleMonomials 0:ea2678a73bde 46 {
MultipleMonomials 0:ea2678a73bde 47 return serialClass.read(buffer, length);
MultipleMonomials 0:ea2678a73bde 48 }
MultipleMonomials 0:ea2678a73bde 49
MultipleMonomials 0:ea2678a73bde 50 // Dummy implementations -- these will never be called because we override write() and read() instead.
MultipleMonomials 0:ea2678a73bde 51 // but we have to override them since they're pure virtual.
MultipleMonomials 0:ea2678a73bde 52 virtual int _putc(int c) { return 0; }
MultipleMonomials 0:ea2678a73bde 53 virtual int _getc() { return 0; }
MultipleMonomials 0:ea2678a73bde 54 };
MultipleMonomials 0:ea2678a73bde 55
MultipleMonomials 0:ea2678a73bde 56 #endif //SERIALSTREAM_H