7 #include "SerialPort.h"
9 #include "NetworkCommunication/UsageReporting.h"
10 #include "visa/visa.h"
22 SerialPort::SerialPort(uint32_t baudRate, uint8_t dataBits, SerialPort::Parity parity, SerialPort::StopBits stopBits)
23 : m_resourceManagerHandle (0)
25 , m_consoleModeEnabled (false)
27 ViStatus localStatus = VI_SUCCESS;
28 localStatus = viOpenDefaultRM((ViSession*)&m_resourceManagerHandle);
29 wpi_setError(localStatus);
31 localStatus = viOpen(m_resourceManagerHandle, const_cast<char*>(
"ASRL1::INSTR"), VI_NULL, VI_NULL, (ViSession*)&m_portHandle);
32 wpi_setError(localStatus);
35 m_consoleModeEnabled =
true;
39 localStatus = viSetAttribute(m_portHandle, VI_ATTR_ASRL_BAUD, baudRate);
40 wpi_setError(localStatus);
41 localStatus = viSetAttribute(m_portHandle, VI_ATTR_ASRL_DATA_BITS, dataBits);
42 wpi_setError(localStatus);
43 localStatus = viSetAttribute(m_portHandle, VI_ATTR_ASRL_PARITY, parity);
44 wpi_setError(localStatus);
45 localStatus = viSetAttribute(m_portHandle, VI_ATTR_ASRL_STOP_BITS, stopBits);
46 wpi_setError(localStatus);
59 nUsageReporting::report(nUsageReporting::kResourceType_SerialPort, 0);
67 if (!m_consoleModeEnabled)
70 viClose(m_portHandle);
72 viClose(m_resourceManagerHandle);
82 if (!m_consoleModeEnabled)
84 ViStatus localStatus = viSetAttribute (m_portHandle, VI_ATTR_ASRL_FLOW_CNTRL, flowControl);
85 wpi_setError(localStatus);
100 if (!m_consoleModeEnabled)
102 viSetAttribute(m_portHandle, VI_ATTR_TERMCHAR_EN, VI_TRUE);
103 viSetAttribute(m_portHandle, VI_ATTR_TERMCHAR, terminator);
104 viSetAttribute(m_portHandle, VI_ATTR_ASRL_END_IN, VI_ASRL_END_TERMCHAR);
113 if (!m_consoleModeEnabled)
115 viSetAttribute(m_portHandle, VI_ATTR_TERMCHAR_EN, VI_FALSE);
116 viSetAttribute(m_portHandle, VI_ATTR_ASRL_END_IN, VI_ASRL_END_NONE);
128 if (!m_consoleModeEnabled)
130 ViStatus localStatus = viGetAttribute(m_portHandle, VI_ATTR_ASRL_AVAIL_NUM, &bytes);
131 wpi_setError(localStatus);
145 if (!m_consoleModeEnabled)
148 va_start (args, writeFmt);
149 ViStatus localStatus = viVPrintf(m_portHandle, (ViString)writeFmt, args);
151 wpi_setError(localStatus);
164 if (!m_consoleModeEnabled)
167 va_start (args, readFmt);
168 ViStatus localStatus = viVScanf(m_portHandle, (ViString)readFmt, args);
170 wpi_setError(localStatus);
183 uint32_t retCount = 0;
184 if (!m_consoleModeEnabled)
186 ViStatus localStatus = viBufRead(m_portHandle, (ViPBuf)buffer, count, (ViPUInt32)&retCount);
189 case VI_SUCCESS_TERM_CHAR:
190 case VI_SUCCESS_MAX_CNT:
194 wpi_setError(localStatus);
209 uint32_t retCount = 0;
210 if (!m_consoleModeEnabled)
212 ViStatus localStatus = viBufWrite(m_portHandle, (ViPBuf)buffer, count, (ViPUInt32)&retCount);
213 wpi_setError(localStatus);
228 if (!m_consoleModeEnabled)
230 ViStatus localStatus = viSetAttribute(m_portHandle, VI_ATTR_TMO_VALUE, (uint32_t)(timeout * 1e3));
231 wpi_setError(localStatus);
249 if (!m_consoleModeEnabled)
251 ViStatus localStatus = viSetBuf(m_portHandle, VI_READ_BUF, size);
252 wpi_setError(localStatus);
266 if (!m_consoleModeEnabled)
268 ViStatus localStatus = viSetBuf(m_portHandle, VI_WRITE_BUF, size);
269 wpi_setError(localStatus);
286 if (!m_consoleModeEnabled)
288 ViStatus localStatus = viSetAttribute(m_portHandle, VI_ATTR_WR_BUF_OPER_MODE, mode);
289 wpi_setError(localStatus);
301 if (!m_consoleModeEnabled)
303 ViStatus localStatus = viFlush(m_portHandle, VI_WRITE_BUF);
304 wpi_setError(localStatus);
315 if (!m_consoleModeEnabled)
317 ViStatus localStatus = viClear(m_portHandle);
318 wpi_setError(localStatus);
uint32_t Read(char *buffer, int32_t count)
void Printf(const char *writeFmt,...)
void SetFlowControl(FlowControl flowControl)
void SetWriteBufferMode(WriteBufferMode mode)
void EnableTermination(char terminator= '\n')
int32_t GetBytesReceived()
uint32_t Write(const char *buffer, int32_t count)
void SetTimeout(float timeout)
void Scanf(const char *readFmt,...)
SerialPort(uint32_t baudRate, uint8_t dataBits=8, Parity parity=kParity_None, StopBits stopBits=kStopBits_One)
void DisableTermination()
void SetWriteBufferSize(uint32_t size)
void SetReadBufferSize(uint32_t size)