|
- // HardwareSerial.h
- // Author: Mike McCauley (mikem@airspayce.com)
- // Copyright (C) 2015 Mike McCauley
- // $Id: HardwareSerial.h,v 1.3 2015/08/13 02:45:47 mikem Exp mikem $
- #ifndef HardwareSerial_h
- #define HardwareSerial_h
-
- #include <stdio.h>
-
- /////////////////////////////////////////////////////////////////////
- /// \class HardwareSerial HardwareSerial.h <RHutil/HardwareSerial.h>
- /// \brief Encapsulates a Posix compliant serial port as a HarwareSerial
- ///
- /// This class provides access to a serial port on Unix and OSX.
- /// It is equivalent to HardwareSerial in Arduino, and can be used by RH_Serial
- /// We implement just enough to provide the services RadioHead needs.
- /// Additional methods not present on Arduino are also provided for waiting for characters.
- ///
- /// The device port is configured for 8 bits, no parity, 1 stop bit and full raw transparency, so it can be used
- /// to send and receive any 8 bit character. A limited range of baud rates is supported.
- ///
- /// \par Device Names
- ///
- /// Device naming conventions vary from OS to OS. ON linux, an FTDI serial port may have a name like
- /// /dev/ttyUSB0. On OSX, it might be something like /dev/tty.usbserial-A501YSWL
- /// \par errors
- ///
- /// A number of these methods print error messages to stderr in the event of an IO error.
- class HardwareSerial
- {
- public:
- /// Constructor
- // \param [in] deviceName Name of the derial port device to connect to
- HardwareSerial(const char* deviceName);
-
- /// Open and configure the port.
- /// The named port is opened, and the given baud rate is set.
- /// The port is configure for raw input and output and 8,N,1 protocol
- /// with no flow control.
- /// This must be called before any other operations are attempted.
- /// IO failures and unsupported baud rates will result in an error message on stderr.
- /// \param[in] baud The desired baud rate. The only rates supported are: 50, 75, 110, 134, 150
- /// 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400. On some platform
- /// such as Linux you may also use: 460800, 921600.
- void begin(int baud);
-
- /// Close the port.
- /// If begin() has previously been called successfully, the device port will be closed.
- /// It may be reopened again with another call to begin().
- void end();
-
- /// Flush remaining data.
- /// Blocks until any data yet to be transmtted is sent.
- void flush();
-
- /// Peek at the nex available character without consuming it.
- /// CAUTION: Not implemented.
- int peek(void);
-
- /// Returns the number of bytes immediately available to be read from the
- /// device.
- /// \return 0 if none available else the number of characters available for immediate reading
- int available();
-
- /// Read and return the next available character.
- /// If no character is available prints a message to stderr and returns 0;
- /// \return The next available character
- int read();
-
- /// Transmit a single character oin the serial port.
- /// Returns immediately.
- /// IO errors are repored by printing aa message to stderr.
- /// \param[in] ch The character to send. Anything in the range 0x00 to 0xff is permitted
- /// \return 1 if successful else 0
- size_t write(uint8_t ch);
-
- // These are not usually in HardwareSerial but we
- // need them in a Unix environment
-
- /// Wait until a character is available from the port.
- void waitAvailable();
-
- /// Wait until a a character is available from the port.
- /// or the timeout expires
- /// \param[in] timeout The maximum time to wait in milliseconds. 0 means wait forever.
- /// \return true if a message is available as reported by available()
- bool waitAvailableTimeout(uint16_t timeout);
-
- protected:
- bool openDevice();
- bool closeDevice();
- bool setBaud(int baud);
-
- private:
- const char* _deviceName;
- int _device; // file desriptor
- int _baud;
- };
-
- #endif
|