serialcommunicator.cpp
Go to the documentation of this file.
1 
2 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without modification,
6 // are permitted provided that the following conditions are met:
7 //
8 // 1. Redistributions of source code must retain the above copyright notice,
9 // this list of conditions, and the following disclaimer.
10 //
11 // 2. Redistributions in binary form must reproduce the above copyright notice,
12 // this list of conditions, and the following disclaimer in the documentation
13 // and/or other materials provided with the distribution.
14 //
15 // 3. Neither the names of the copyright holders nor the names of their contributors
16 // may be used to endorse or promote products derived from this software without
17 // specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
26 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
28 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
29 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
30 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
31 //
32 
33 
34 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
35 // All rights reserved.
36 //
37 // Redistribution and use in source and binary forms, with or without modification,
38 // are permitted provided that the following conditions are met:
39 //
40 // 1. Redistributions of source code must retain the above copyright notice,
41 // this list of conditions, and the following disclaimer.
42 //
43 // 2. Redistributions in binary form must reproduce the above copyright notice,
44 // this list of conditions, and the following disclaimer in the documentation
45 // and/or other materials provided with the distribution.
46 //
47 // 3. Neither the names of the copyright holders nor the names of their contributors
48 // may be used to endorse or promote products derived from this software without
49 // specific prior written permission.
50 //
51 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
52 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
53 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
54 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
55 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
56 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
58 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
59 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
60 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
61 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
62 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
63 //
64 
65 #include "serialcommunicator.h"
66 #include <xstypes/xsbusid.h>
67 #include <xstypes/xsexception.h>
68 #include "protocolhandler.h"
69 #include "serialinterface.h"
71 #include <xstypes/xsdid.h>
72 #include <xstypes/xstime.h>
73 #include "xsscanner.h"
74 #include "mtthread.h"
75 #include "deviceredetector.h"
76 #include <xstypes/xsversion.h>
77 #include "xsdevice_def.h"
78 
79 
87  : m_thread(*this, *this)
88  , m_firmwareRevision(0, 0, 0)
89  , m_hardwareRevision(0, 0)
90 {
93 }
94 
96 {
97 }
98 
102 {
103  JLDEBUGG("");
104 
105  stopPollThread();
106  terminate();
107 
109  if (m_streamInterface)
110  {
111  m_streamInterface->cancelIo();
112  m_streamInterface->close();
113  m_streamInterface.reset();
114  }
115 
117 }
118 
122 {
123  JLDEBUGG("entry");
124 
125  if (!isActive())
127 
128  setDoGotoConfig(false);
129 
131  if (r != XRV_OK)
132  gotoConfig();
133  return setAndReturnLastResult(r);
134 }
135 
139 {
140  JLDEBUGG("entry");
141 
142  bool rs485Config = ((masterDeviceId().toInt() & XS_DID_TYPEL_COMM_MASK) == XS_DID_TYPEL_RS485) || detectRs485;
143  if (!rs485Config)
144  return DeviceCommunicator::gotoConfig(false);
145 
146  uint32_t interfaceTimeout = defaultInterfaceTimeout();
147  if (m_streamInterface)
148  interfaceTimeout = m_streamInterface->getTimeout();
149 
150  std::shared_ptr<ReplyObject> reply = addReplyObject(XMID_GotoConfigAck);
151 
152  int oldCount = messageExtractor().setMaxIncompleteRetryCount(0);
153  setDoGotoConfig(true);
154  XsMessage rcv = reply->message(gotoConfigTimeout() + interfaceTimeout + 1000); // set higher timeout for RS485
155  setDoGotoConfig(false);
156 
157  if (rcv.getMessageId() != XMID_GotoConfigAck)
158  {
160  JLDEBUGG("Fail: " << rcv.getMessageId());
162  }
163 
164  // wait a bit longer for all potentially incoming gotoConfigAcks to be received and processed
165  while (true)
166  {
167  std::shared_ptr<ReplyObject> reply2 = addReplyObject(XMID_GotoConfigAck);
168  rcv = reply2->message(100);
169  if (rcv.getMessageId() != XMID_GotoConfigAck)
170  break;
171  }
172 
174  JLTRACEG("Ok: " << rcv.getMessageId());
175  return (setAndReturnLastResult(XRV_OK));
176 }
177 
181 {
182  if (!isPortOpen())
183  return XRV_NOPORTOPEN;
184  return m_streamInterface->writeData(data, nullptr);
185 }
186 
190 {
191  if (m_streamInterface)
192  m_streamInterface->flushData();
193 }
194 
198 {
200 }
201 
205 {
207 }
211 {
212  JLDEBUGG("entry");
214 
215  if (!m_streamInterface)
216  return;
217 
218  stopPollThread();
219 
220  if (m_streamInterface)
221  {
222  m_streamInterface->close();
223  m_streamInterface.reset();
224  }
225 }
226 
230 {
231  return m_streamInterface && m_streamInterface->isOpen();
232 }
233 
237 {
238  return m_activePortInfo;
239 }
240 
243 bool SerialCommunicator::openPort(const XsPortInfo& portInfo, OpenPortStage stage, bool detectRs485)
244 {
245  JLDEBUGG("Opening " << portInfo << " stage " << stage << " configtimeout " << gotoConfigTimeout());
247 
248  if (stage & OPS_OpenPort)
249  {
250  if (m_streamInterface)
251  {
253  return (this->portInfo() == portInfo);
254  }
255 
257 
258  if (lastResult() != XRV_OK)
259  {
260  stopPollThread(); // it's possible that the poll thread has been started, but the result is still not ok
261  m_streamInterface.reset();
262  return false;
263  }
264  startPollThread();
265  }
266  if (!m_streamInterface)
267  {
269  return false;
270  }
271 
272  if (stage & OPS_InitDevice)
273  {
274  // Retrieve deviceid, which is always needed with an open port
275  if (gotoConfig(detectRs485) != XRV_OK)
276  {
278  return false;
279  }
280 
281  if (getDeviceId() != XRV_OK)
282  {
284  return false;
285  }
286 
287  // Also retrieve the firmware revision, which may be needed for determining optional settings of a port
288  if (getFirmwareRevision() != XRV_OK)
289  {
291  return false;
292  }
293 
294  // Get the hardware version only for Awinda Dongle. Issue: MTSDK-3999
295  if (masterDeviceId().isAwinda2Dongle())
296  {
297  if (getHardwareRevision() != XRV_OK)
298  {
300  return false;
301  }
302  }
303  }
304 
305  setLastResult(m_streamInterface->setTimeout(0));
306 
307  if (lastResult() == XRV_OK)
308  {
310  return true;
311  }
312  else
313  return false;
314 
315 }
316 
319 bool SerialCommunicator::reopenPort(OpenPortStage stage, bool skipDeviceIdCheck)
320 {
321  JLDEBUGG("");
322  XsPortInfo pi = portInfo();
323 
325  if (m_streamInterface)
326  oldTimeOut = m_streamInterface->getTimeout();
327 
328  closePort();
329  DeviceRedetector redetector(pi);
330  bool detected = false;
331  int count = 0;
332  while (!detected && count < 3)
333  {
334  if (!redetector.redetect(masterDeviceId(), pi, skipDeviceIdCheck))
335  {
336  JLDEBUGG("Redetect failed");
337  return false;
338  }
339 
340  if (!openPort(pi, stage))
341  {
342  JLDEBUGG("openPort failed, attempt: " << count);
343  count++;
344  continue;
345  }
346  detected = true;
347  }
348  if (!detected)
349  return false;
350 
351  if (oldTimeOut && m_streamInterface)
352  m_streamInterface->setTimeout(oldTimeOut);
353 
354  return true;
355 }
356 
359 {
360  return ((masterDevice() != nullptr) && (m_thread.isAlive()));
361 }
362 
367 {
369 }
370 
371 
377 {
378  XsUsbHubInfo thisHub = XsScanner::scanUsbHub(XsPortInfo(portInfo().portName()));
379  XsUsbHubInfo otherHub = XsScanner::scanUsbHub(XsPortInfo(other->portInfo().portName()));
380  return thisHub.parentPathMatches(otherHub);
381 }
382 
392 {
393  if (!m_streamInterface)
394  return XRV_NOPORTOPEN;
395 
396  // always read data and append it to the cache before doing analysis
397  const int maxSz = 8192;
398  XsResultValue res = m_streamInterface->readData(maxSz, raw);
399  if (raw.size())
400  return XRV_OK;
401 
402  switch (res)
403  {
404  // all intended fall-throughs
406  if (masterDevice() != nullptr)
408  //lint -fallthrough
410  closePort();
411  break;
412 
413  default:
414  break;
415  }
416 
417  return res;
418 }
419 
425 {
427 }
428 
436 XsResultValue SerialCommunicator::processBufferedData(const XsByteArray& rawIn, std::deque<XsMessage>& messages)
437 {
438  return extractMessages(rawIn, messages);
439 }
440 
444 {
446  snd.setBusId(XS_BID_MASTER);
447 
448  XsMessage rcv;
449  if (!doTransaction(snd, rcv))
451  m_firmwareRevision = XsVersion(rcv.getDataByte(0), rcv.getDataByte(1), rcv.getDataByte(2));
452 
454 }
455 
461 {
463  snd.setBusId(XS_BID_MASTER);
464  snd.setDataByte(0, 0);
465 
466  XsMessage rcv;
467  if (!doTransaction(snd, rcv))
469 
470  m_hardwareRevision = XsVersion(rcv.getDataShort(24) >> 8, rcv.getDataShort(24) & 0xff);
472 }
473 
477 {
478  return m_firmwareRevision;
479 }
480 
484 {
485  return m_hardwareRevision;
486 }
XS_BID_MASTER
#define XS_BID_MASTER
The bus identifier of the master device.
Definition: xsbusid.h:73
XRV_NOPORTOPEN
@ XRV_NOPORTOPEN
288: No serial port opened for reading/writing
Definition: xsresultvalue.h:159
SerialCommunicator::flushPort
void flushPort() override
Flushes all remaining data on the open port.
Definition: serialcommunicator.cpp:189
SerialCommunicator::m_firmwareRevision
XsVersion m_firmwareRevision
Definition: serialcommunicator.h:129
xsexception.h
SerialCommunicator::writeRawData
XsResultValue writeRawData(const XsByteArray &data) override
Write raw data to the open COM or USB port.
Definition: serialcommunicator.cpp:180
SerialCommunicator::processBufferedData
XsResultValue processBufferedData(const XsByteArray &rawIn, std::deque< XsMessage > &messages) override
Read all messages from the buffered read data after adding new data supplied in rawIn.
Definition: serialcommunicator.cpp:436
msg
msg
SerialCommunicator::defaultInterfaceTimeout
virtual uint32_t defaultInterfaceTimeout() const
Definition: serialcommunicator.h:119
XsByteArray
A list of uint8_t values.
serialcommunicator.h
Communicator::portInfo
virtual XsPortInfo portInfo() const =0
OpenPortStage
OpenPortStage
Port opening stages.
Definition: openportstage.h:76
OPS_OpenPort
@ OPS_OpenPort
Definition: openportstage.h:78
Communicator::defaultTimeout
uint32_t defaultTimeout() const
Definition: communicator.h:145
DeviceCommunicator::doTransaction
virtual bool doTransaction(const XsMessage &msg, XsMessage &rcv, uint32_t timeout) override
Write a message and await the reply.
Definition: devicecommunicator.cpp:110
OPS_InitDevice
@ OPS_InitDevice
Definition: openportstage.h:80
DeviceCommunicator::handleMessage
void handleMessage(const XsMessage &message) override
Handles a message.
Definition: devicecommunicator.cpp:327
mtthread.h
SerialCommunicator::setDoGotoConfig
void setDoGotoConfig(bool doit)
Sets do go to config in a thread.
Definition: serialcommunicator.cpp:366
SerialCommunicator::portInfo
XsPortInfo portInfo() const override
Definition: serialcommunicator.cpp:236
Communicator::masterDeviceId
XsDeviceId masterDeviceId() const
Definition: communicator.cpp:157
DeviceCommunicator::extractMessages
XsResultValue extractMessages(const XsByteArray &rawIn, std::deque< XsMessage > &messages, RxChannelId channel=0)
Read all messages available in the incoming data stream after adding new data supplied in rawIn.
Definition: devicecommunicator.cpp:290
DeviceCommunicator::gotoConfig
XsResultValue gotoConfig(bool) override
Request a device to go to config mode.
Definition: devicecommunicator.cpp:212
SerialCommunicator::m_thread
MtThread m_thread
Definition: serialcommunicator.h:127
DeviceRedetector
A class which re-detects a device with a certain device Id.
Definition: deviceredetector.h:73
Communicator::addReplyObject
std::shared_ptr< ReplyObject > addReplyObject(uint8_t mid)
Add a MidReplyObject.
Definition: communicator.cpp:274
DeviceCommunicator::gotoConfigTimeout
uint32_t gotoConfigTimeout() const
Definition: devicecommunicator.h:91
protocolhandler.h
SerialCommunicator::m_streamInterface
std::shared_ptr< StreamInterface > m_streamInterface
Definition: serialcommunicator.h:128
SerialCommunicator::createStreamInterface
virtual std::shared_ptr< StreamInterface > createStreamInterface(const XsPortInfo &pi)=0
Creates a stream interface.
XsVersion
struct XsVersion XsVersion
Definition: xsversion.h:80
SerialCommunicator::handleMessage
void handleMessage(const XsMessage &msg) override
Handles a message.
Definition: serialcommunicator.cpp:424
SerialCommunicator::isDockedAt
bool isDockedAt(Communicator *other) const override
Definition: serialcommunicator.cpp:376
SerialCommunicator::hardwareRevision
XsVersion hardwareRevision()
Definition: serialcommunicator.cpp:483
XRV_ALREADYOPEN
@ XRV_ALREADYOPEN
269: An I/O device is already opened with this object
Definition: xsresultvalue.h:139
MtThread::setDoGotoConfig
void setDoGotoConfig(bool doit)
Set whether we should send gotoconfig here.
Definition: mtthread.cpp:105
data
data
SerialCommunicator::startPollThread
void startPollThread()
Starts polling the thread.
Definition: serialcommunicator.cpp:204
SerialCommunicator::stopPollThread
void stopPollThread()
Stops polling the thread.
Definition: serialcommunicator.cpp:197
XRV_OK
@ XRV_OK
0: Operation was performed successfully
Definition: xsresultvalue.h:85
xsens::StandardThread::startThread
bool startThread(const char *name=NULL)
Starts the thread.
Definition: threading.cpp:281
XsResultValue
XsResultValue
Xsens result values.
Definition: xsresultvalue.h:82
Communicator::lastResult
XsResultValue lastResult() const
Get the result value of the last operation.
Definition: communicator.cpp:167
DeviceRedetector::redetect
bool redetect(const XsDeviceId &deviceId, XsPortInfo &portInfo, bool skipDeviceIdCheck=false)
Base redetect function which calls the appropriate redetect based on deviceId.
Definition: deviceredetector.cpp:120
XRV_UNEXPECTED_DISCONNECT
@ XRV_UNEXPECTED_DISCONNECT
312: Motion tracker disconnected unexpectedly
Definition: xsresultvalue.h:187
Communicator
A base struct for a communication interface.
Definition: communicator.h:95
XsPortInfo
struct XsPortInfo XsPortInfo
Definition: xsportinfo.h:83
SerialCommunicator::gotoConfig
XsResultValue gotoConfig(bool detectRs485=false) override
Request a device to go to config mode.
Definition: serialcommunicator.cpp:138
SerialCommunicator::isActive
bool isActive() const
Definition: serialcommunicator.cpp:358
XRV_NOFILEORPORTOPEN
@ XRV_NOFILEORPORTOPEN
289: No file or serial port opened for reading/writing
Definition: xsresultvalue.h:160
uint32_t
unsigned int uint32_t
Definition: pstdint.h:485
XsPortInfo
Contains a descriptor for opening a communication port to an Xsens device.
Definition: xsportinfo.h:128
SerialCommunicator::m_hardwareRevision
XsVersion m_hardwareRevision
Definition: serialcommunicator.h:130
DeviceCommunicator::messageExtractor
MessageExtractor & messageExtractor(RxChannelId=0)
Returns the message extractor for the given rx channel.
Definition: devicecommunicator.cpp:319
xsbusid.h
JLTRACEG
#define JLTRACEG(msg)
Definition: journaller.h:279
SerialCommunicator::getFirmwareRevision
virtual XsResultValue getFirmwareRevision()
Requests the firmware revision from the connected device.
Definition: serialcommunicator.cpp:443
Communicator::masterDevice
XsDevice * masterDevice() const
Definition: communicator.cpp:135
xsdevice_def.h
XS_DID_TYPEL_COMM_MASK
#define XS_DID_TYPEL_COMM_MASK
Definition: xsdid.h:105
SerialCommunicator::SerialCommunicator
SerialCommunicator()
Default constructor.
Definition: serialcommunicator.cpp:86
xsdid.h
serialinterface.h
XsVersion
A class to store version information.
Definition: xsversion.h:95
xsversion.h
SerialCommunicator::closePort
void closePort() override
Closes the port.
Definition: serialcommunicator.cpp:210
XsMessage
Structure for storing a single message.
Definition: xsmessage.h:202
XsUsbHubInfo
A structure that wraps USB hub information.
Definition: xsusbhubinfo.h:99
SerialCommunicator::m_activePortInfo
XsPortInfo m_activePortInfo
The information about the port this communicator is currently connected to.
Definition: serialcommunicator.h:124
XMID_GotoConfigAck
@ XMID_GotoConfigAck
Definition: xsxbusmessageid.h:159
SerialCommunicator::firmwareRevision
XsVersion firmwareRevision()
Definition: serialcommunicator.cpp:476
XsDevice::onConnectionLost
virtual XSNOEXPORT void onConnectionLost()
XS_DID_TYPEL_RS485
#define XS_DID_TYPEL_RS485
Definition: xsdid.h:103
DeviceCommunicator::gotoMeasurement
XsResultValue gotoMeasurement() override
Request a device to go to measurement mode.
Definition: devicecommunicator.cpp:229
Communicator::prepareForDestruction
virtual void prepareForDestruction()
Prepares communicator for destruction.
Definition: communicator.cpp:114
JLDEBUGG
#define JLDEBUGG(msg)
Definition: journaller.h:280
xsens::StandardThread::stopThread
void stopThread(void) noexcept
Tells the thread to stop and waits for it to end.
Definition: threading.cpp:334
xstime.h
MessageExtractor::setMaxIncompleteRetryCount
int setMaxIncompleteRetryCount(int max)
Sets the maximum number of process attempts before advancing over an incompletely received message.
Definition: messageextractor.cpp:223
SerialCommunicator::prepareForDestruction
virtual void prepareForDestruction() override
Prepares for a destruction.
Definition: serialcommunicator.cpp:101
MessageExtractor::clearBuffer
void clearBuffer()
Clears the processing buffer.
Definition: messageextractor.cpp:213
XRV_CONFIGCHECKFAIL
@ XRV_CONFIGCHECKFAIL
293: A configuration-time check of the device failed
Definition: xsresultvalue.h:165
DeviceCommunicator::getDeviceId
XsResultValue getDeviceId() override
Request a device to get device ID.
Definition: devicecommunicator.cpp:168
xsens::StandardThread::isAlive
bool isAlive(void) volatile const noexcept
Definition: threading.cpp:140
SerialCommunicator::openPort
bool openPort(const XsPortInfo &portInfo, OpenPortStage stage=OPS_Full, bool detectRs485=false) override
Open a serial port and return the main device connected to it.
Definition: serialcommunicator.cpp:243
SerialCommunicator::getHardwareRevision
virtual XsResultValue getHardwareRevision()
Requests the hardware revision from the connected device.
Definition: serialcommunicator.cpp:460
SerialCommunicator::~SerialCommunicator
virtual ~SerialCommunicator()
Definition: serialcommunicator.cpp:95
Communicator::setLastResult
void setLastResult(XsResultValue lastResult, XsString const &text=XsString()) const
Sets the last result.
Definition: communicator.cpp:238
SerialCommunicator::gotoMeasurement
XsResultValue gotoMeasurement() override
Request a device to go to measurement mode.
Definition: serialcommunicator.cpp:121
xsscanner.h
SerialCommunicator::readDataToBuffer
XsResultValue readDataToBuffer(XsByteArray &raw) override
Read available data from the open IO device.
Definition: serialcommunicator.cpp:391
XRV_INVALIDOPERATION
@ XRV_INVALIDOPERATION
265: Operation is invalid at this point
Definition: xsresultvalue.h:135
XRV_COULDNOTREADSETTINGS
@ XRV_COULDNOTREADSETTINGS
271: A required settings file could not be opened or is missing some data
Definition: xsresultvalue.h:141
Communicator::setAndReturnLastResult
XsResultValue setAndReturnLastResult(XsResultValue lastResult, XsString const &text=XsString()) const
Sets the last result and returns it.
Definition: communicator.cpp:248
SerialCommunicator::isPortOpen
bool isPortOpen() const override
Definition: serialcommunicator.cpp:229
DataParser::terminate
void terminate()
Terminates the thread.
Definition: dataparser.cpp:176
xsportinfoarray.h
deviceredetector.h
XMID_ReqMasterSettings
@ XMID_ReqMasterSettings
Definition: xsxbusmessageid.h:337
SerialCommunicator::reopenPort
bool reopenPort(OpenPortStage stage=OPS_Full, bool skipDeviceIdCheck=false) override
Reopens the port.
Definition: serialcommunicator.cpp:319
gJournal
Journaller * gJournal
Definition: configure_outputs.cpp:4
XSEXITLOGN
#define XSEXITLOGN(j)
Definition: xscontrollerconfig.h:216
XMID_ReqFirmwareRevision
@ XMID_ReqFirmwareRevision
Definition: xsxbusmessageid.h:103


xsens_mti_driver
Author(s):
autogenerated on Sun Sep 3 2023 02:43:20