Files
allwpilib/wpilibc/athena/include/SerialPort.h
Tyler Veness d82635bbe1 Reordered headers according to the style guide (#58)
Subsections are alphabetized according to lexographic ordering. Also, HAL includes were moved from headers to source files where possible. This change may cause user code which uses HAL functionality and does not include the relevant HAL header (since it may have been provided by another WPILib header) to fail to compile.
2016-05-25 22:38:11 -07:00

73 lines
2.4 KiB
C++

/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2008-2016. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
/*----------------------------------------------------------------------------*/
#pragma once
#include "ErrorBase.h"
/**
* Driver for the RS-232 serial port on the RoboRIO.
*
* The current implementation uses the VISA formatted I/O mode. This means that
* all traffic goes through the fomatted buffers. This allows the intermingled
* use of Printf(), Scanf(), and the raw buffer accessors Read() and Write().
*
* More information can be found in the NI-VISA User Manual here:
* http://www.ni.com/pdf/manuals/370423a.pdf
* and the NI-VISA Programmer's Reference Manual here:
* http://www.ni.com/pdf/manuals/370132c.pdf
*/
class SerialPort : public ErrorBase {
public:
enum Parity {
kParity_None = 0,
kParity_Odd = 1,
kParity_Even = 2,
kParity_Mark = 3,
kParity_Space = 4
};
enum StopBits {
kStopBits_One = 10,
kStopBits_OnePointFive = 15,
kStopBits_Two = 20
};
enum FlowControl {
kFlowControl_None = 0,
kFlowControl_XonXoff = 1,
kFlowControl_RtsCts = 2,
kFlowControl_DtrDsr = 4
};
enum WriteBufferMode { kFlushOnAccess = 1, kFlushWhenFull = 2 };
enum Port { kOnboard = 0, kMXP = 1, kUSB = 2 };
SerialPort(uint32_t baudRate, Port port = kOnboard, uint8_t dataBits = 8,
Parity parity = kParity_None, StopBits stopBits = kStopBits_One);
~SerialPort();
SerialPort(const SerialPort&) = delete;
SerialPort& operator=(const SerialPort&) = delete;
void SetFlowControl(FlowControl flowControl);
void EnableTermination(char terminator = '\n');
void DisableTermination();
int32_t GetBytesReceived();
uint32_t Read(char* buffer, int32_t count);
uint32_t Write(const std::string& buffer, int32_t count);
void SetTimeout(float timeout);
void SetReadBufferSize(uint32_t size);
void SetWriteBufferSize(uint32_t size);
void SetWriteBufferMode(WriteBufferMode mode);
void Flush();
void Reset();
private:
uint32_t m_resourceManagerHandle = 0;
uint32_t m_portHandle = 0;
bool m_consoleModeEnabled = false;
uint8_t m_port;
};