Mongoose_Arduino_RadioHead/src/RHutil/HardwareSerial.h

101 lines
3.9 KiB
C++

// 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