RokubiminiSerialImpl.hpp
Go to the documentation of this file.
1 /*
2  * RokubiminiSerialImpl.hpp
3  * Created on: April, 2020
4  * Author(s): Mike Karamousadakis, Ilias Patsiaouras
5  *
6  * and is based on:
7  *
8  * ForceTorqueSensor.hpp
9  * Created on: Dec 19, 2016
10  * Author(s): Christian Gehring, Vassilios Tsounis, Klajd Lika
11  */
12 
13 #pragma once
14 
16 #include <fcntl.h>
17 #include <sys/types.h>
18 #include <termios.h>
19 #include <boost/thread.hpp>
20 #include <chrono>
21 #include <string>
22 #include <iostream>
23 #include <fstream>
24 #include <string>
25 #include <condition_variable>
26 #include <atomic>
27 #include <memory>
29 
31 // #include "rokubimini_serial/RokubiminiSerialImplOptions.hpp"
33 
34 #include <rokubimini/Reading.hpp>
40 
41 namespace rokubimini
42 {
43 namespace serial
44 {
54 {
55  struct __attribute__((__packed__))
56  {
57  uint16_t app_took_too_long : 1;
58  uint16_t overrange : 1;
59  uint16_t invalid_measurements : 1; // saturation, short, open circuit
60  uint16_t raw_measurements : 1; // gages instead of forces
61  uint16_t : 12; // reserved
62  };
63  uint16_t byte;
64 };
65 
74 union AppOutput
75 {
76  struct __attribute__((__packed__))
77  {
78  DataStatus status;
79  float forces[6];
80  uint32_t timestamp;
81  float temperature;
82  // float volts;
83  };
84  uint8_t bytes[1];
85 };
86 
95 union RxFrame
96 {
97  struct __attribute__((__packed__))
98  {
99  uint8_t header;
100  AppOutput data;
101  uint16_t crc16_ccitt;
102  };
103  uint8_t bytes[1];
104 };
106 {
107  uint32_t value; /* The baud rate of the serial communication, as a normal integer (e.g. 115200 etc) */
108  uint32_t mask; /* The baud rate of the serial communication, as a termios bit mask. */
109 };
110 const static std::map<uint32_t, BaudRateStruct> CODE_TO_BAUD_RATE_MAP = {
111  { 0, { 9600, B9600 } },
112  { 1, { 57600, B57600 } },
113  { 2, { 115200, B115200 } },
114  // WARNING: The option no. 3, is used in the code as the default option. Be careful if you change this struct.
115  { 3, { 230400, B230400 } },
116  // WARNING: The option no. 4, is used in the code as the max option. Be careful if you change this struct.
117  { 4, { 460800, B460800 } }
118 
119 };
132 {
133 public:
142  RokubiminiSerialImpl() = delete;
143 
155  RokubiminiSerialImpl(const std::string& name, const std::string& port);
156 
157  ~RokubiminiSerialImpl() = default;
158 
168  bool init();
169 
180  bool startup();
181 
191  void updateRead(){ /* do nothing */ };
192 
202  void updateWrite(){ /* do nothing */ };
203 
212  void closeSerialPort();
213 
223  void shutdown();
224 
234  std::string getName() const
235  {
236  return name_;
237  }
238 
239  std::string getModeStateString() const
240  {
241  switch (modeState_)
242  {
244  return "Config Mode";
245  case ModeState::RUN_MODE:
246  return "Run Mode";
248  return "Init Mode";
249  default:
250  return "ERROR: Unrecognized mode state";
251  }
252  }
253 
254  std::string getConnectionStateString() const
255  {
256  switch (connectionState_)
257  {
259  return "Disconnected";
261  return "Is Connecting";
263  return "Connected";
264  default:
265  return "ERROR: Unrecognized connection state";
266  }
267  }
268 
280  bool getSerialNumber(unsigned int& serialNumber)
281  {
282  serialNumber = serialNumber_;
283  return true;
284  }
285 
298  bool getForceTorqueSamplingRate(int& samplingRate)
299  {
300  return false;
301  }
302 
316 
328  bool setAccelerationFilter(const unsigned int filter)
329  {
330  return false;
331  }
332 
344  bool setAngularRateFilter(const unsigned int filter)
345  {
346  return false;
347  }
348 
360  bool setAccelerationRange(const unsigned int range)
361  {
362  return false;
363  }
364 
376  bool setAngularRateRange(const unsigned int range)
377  {
378  return false;
379  }
380 
392  bool setForceTorqueOffset(const Eigen::Matrix<double, 6, 1>& forceTorqueOffset);
393 
405  bool setSensorConfiguration(const configuration::SensorConfiguration& sensorConfiguration);
406 
418  bool setSensorCalibration(const calibration::SensorCalibration& sensorCalibration);
419 
429  void getReading(rokubimini::Reading& reading);
430 
437  bool setConfigMode();
438 
446  bool setRunMode();
447 
456  bool setHardwareReset();
457 
466  bool setInitMode();
467 
480  bool setCommunicationSetup(const configuration::SensorConfiguration& sensorConfiguration, const uint8_t& dataFormat,
481  const uint8_t& baudRate);
491  bool saveConfigParameter();
492 
500  bool loadConfig();
501 
509  bool printUserConfig();
510 
518  bool firmwareUpdate(const std::string& filePath);
519 
526  bool isRunning()
527  {
528  return isRunning_;
529  }
530 
538  {
539  return frameSync_;
540  }
541 
549  bool parseCommunicationMsgs(const double& timeout = 1.0);
550 
558  std::string getProductName() const
559  {
560  return productName_;
561  }
562 
569  bool runsAsync()
570  {
571  return runsAsync_;
572  }
573 
581  {
583  }
584 
594  std::vector<std::string> getErrorStrings() const;
595 
605  bool hasError() const;
606 
616 
624  void getFrameDataStatus(DataStatus& status);
625 
635 
643  void resetDataFlags();
644 
651  void updateDataFlags();
652 
653 private:
664  bool startPollingThread();
665 
675  bool writeSerial(const std::string& str);
676 
686  bool readSerialNoWait(const uint32_t& numChars, std::string& str);
687 
698  bool readSerialWaitTimeout(const uint32_t& numChars, std::string& str, const double& timeout = 1.0);
699 
709  bool parseAcknowledgement(const char& command_code, const double& timeout = 2.0);
710 
718  bool clearReadBuffer();
719 
729  bool sendCommand(const std::string& command);
730 
742  bool sendCalibrationMatrixEntry(const uint8_t subId, const double entry)
743  {
744  return false;
745  }
746 
755  bool parseRegexWaitTimeout(RokubiminiSerialResponseRegex& reg, const double& timeout = 1.0);
756 
757  using timespec = struct timespec;
758 
769  inline double diffSec(timespec a, timespec b)
770  {
771  return (static_cast<double>(b.tv_sec - a.tv_sec) + static_cast<double>(b.tv_nsec - a.tv_nsec) / NSEC_PER_SEC);
772  }
773 
783  inline double timespecToSec(timespec t)
784  {
785  return (static_cast<double>(t.tv_sec) + static_cast<double>(t.tv_nsec) / NSEC_PER_SEC);
786  }
787 
799  {
800  timespec result;
801  if (static_cast<uint64_t>(a.tv_nsec + b.tv_nsec) >= NSEC_PER_SEC)
802  {
803  result.tv_sec = a.tv_sec + b.tv_sec + 1;
804  result.tv_nsec = a.tv_nsec + b.tv_nsec - NSEC_PER_SEC;
805  }
806  else
807  {
808  result.tv_sec = a.tv_sec + b.tv_sec;
809  result.tv_nsec = a.tv_nsec + b.tv_nsec;
810  }
811  return result;
812  }
813 
824  bool connect();
825 
837  bool connect(const std::string& port);
838 
850  bool readDevice(RxFrame& frame);
851 
861  bool isConnected() const;
862 
872  bool isConnecting() const;
873 
883  bool isInConfigMode() const;
884 
895 
905  ErrorFlags getErrorFlags() const;
906 
916  bool openSerialPort(bool keepOpening);
929  bool initSensorCommunication(bool keepOpening);
930 
943  bool initSerialPort(const std::string& port);
944 
956  uint16_t calcCrc16X25(uint8_t* data, int len);
957 
969  uint16_t crcCcittUpdate(uint16_t crc, uint8_t data);
970 
977  void connectionWorker();
978 
985  void pollingWorker();
986 
994 
1002  std::string name_;
1003 
1014 
1022  std::string port_;
1023 
1032 
1040  std::string productName_;
1041 
1049  uint32_t serialNumber_;
1050 
1058  mutable std::mutex readingMutex_;
1059 
1067  mutable std::recursive_mutex serialMutex_;
1068 
1076  boost::atomic<int> usbFileDescriptor_;
1077 
1085  boost::atomic<bool> frameSync_;
1086 
1094  std::ifstream usbStreamIn_;
1095 
1103  std::ofstream usbStreamOut_;
1104 
1112  uint8_t frameHeader = 0xAA;
1113 
1123 
1124  /*
1125  * Device measurements and data buffers
1126  */
1127 
1136 
1144  boost::thread connectionThread_;
1145 
1153  boost::thread pollingThread_;
1154 
1162  boost::atomic<ConnectionState> connectionState_;
1163 
1178  boost::atomic<ModeState> modeState_;
1185  boost::atomic<bool> isRunning_;
1187 
1194  unsigned long pollingSyncErrorCounter_;
1196 
1203  unsigned long frameReceivedCounter_;
1204 
1212  unsigned long frameSuccessCounter_;
1213 
1221  unsigned long frameCrcErrorCounter_;
1222 
1230 
1251  const static uint64_t NSEC_PER_SEC = 1000000000;
1258  const static uint8_t DEFAULT_BAUD_RATE_OPTION = 3;
1265  const static uint8_t MAX_BAUD_RATE_OPTION = 4;
1266 
1273  uint32_t frameOffset_;
1274 
1282 
1293  constexpr static double FTDI_DRIVER_LATENCY = 0.001;
1294 
1301  constexpr static double TIMEOUT_MARGIN = 0.15;
1302 
1310  constexpr static double MAXIMUM_ACCEPTABLE_TIMEOUT = 1.77;
1311 
1319 
1326  unsigned int timeoutCounter_;
1327 
1335  std::condition_variable newFrameIsAvailable_;
1336 
1344 
1351  std::atomic<bool> runsAsync_;
1352 
1360 
1369  std::atomic<DataStatus> currentDataFlagsDiagnostics_;
1371 };
1372 
1373 using RokubiminiSerialImplPtr = std::shared_ptr<RokubiminiSerialImpl>;
1374 
1375 } // namespace serial
1376 } // namespace rokubimini
rokubimini::serial::RokubiminiSerialImpl::NSEC_PER_SEC
const static uint64_t NSEC_PER_SEC
Definition: RokubiminiSerialImpl.hpp:1251
rokubimini::serial::RokubiminiSerialImpl::printUserConfig
bool printUserConfig()
Prints all the user configurable parameters.
Definition: RokubiminiSerialImpl.cpp:1186
rokubimini::serial::ConnectionState::CONNECTED
@ CONNECTED
rokubimini::serial::DataStatus
The status of the sensor data.
Definition: RokubiminiSerialImpl.hpp:53
rokubimini::serial::RokubiminiSerialImpl::timeoutCounter_
unsigned int timeoutCounter_
Timeout counter.
Definition: RokubiminiSerialImpl.hpp:1326
rokubimini::serial::RokubiminiSerialImpl::baudRate_
BaudRateStruct baudRate_
The baud rate of the serial communication, as a termios bit mask.
Definition: RokubiminiSerialImpl.hpp:1031
rokubimini::serial::RokubiminiSerialImpl::readDevice
bool readDevice(RxFrame &frame)
Reads a raw measurement frame from the serial-port.
Definition: RokubiminiSerialImpl.cpp:224
rokubimini::serial::RokubiminiSerialImpl::setAngularRateFilter
bool setAngularRateFilter(const unsigned int filter)
Sets an angular rate filter to the device.
Definition: RokubiminiSerialImpl.hpp:344
rokubimini::serial::RokubiminiSerialImpl::connectionState_
boost::atomic< ConnectionState > connectionState_
Internal connection state.
Definition: RokubiminiSerialImpl.hpp:1162
rokubimini::serial::RokubiminiSerialImpl::currentDataFlagsDiagnostics_
std::atomic< DataStatus > currentDataFlagsDiagnostics_
The current Data Flags Diagnostics (Data Status) which is updated when a new frame is published and i...
Definition: RokubiminiSerialImpl.hpp:1369
rokubimini::serial::RokubiminiSerialImpl::~RokubiminiSerialImpl
~RokubiminiSerialImpl()=default
rokubimini::serial::RokubiminiSerialImpl::usbStreamOut_
std::ofstream usbStreamOut_
Output stream for the USB file descriptor.
Definition: RokubiminiSerialImpl.hpp:1103
rokubimini::serial::RokubiminiSerialImpl::shutdown
void shutdown()
Shuts down the device. It automatically shuts-down threads and disconnects from serial-port.
Definition: RokubiminiSerialImpl.cpp:138
rokubimini::serial::RokubiminiSerialImpl::frameSyncErrorCounter_
unsigned int frameSyncErrorCounter_
Frame sync errors.
Definition: RokubiminiSerialImpl.hpp:1229
states.hpp
SensorConfiguration.hpp
rokubimini::serial::ModeState::INIT_MODE
@ INIT_MODE
rokubimini::serial::AppOutput::bytes
uint8_t bytes[1]
Definition: RokubiminiSerialImpl.hpp:83
rokubimini::serial::RokubiminiSerialImpl::getForceTorqueSamplingRate
bool getForceTorqueSamplingRate(int &samplingRate)
Gets the force torque sampling rate of the device.
Definition: RokubiminiSerialImpl.hpp:298
rokubimini::serial::RokubiminiSerialImpl::getErrorStrings
std::vector< std::string > getErrorStrings() const
Retrieves detailed error indication.
Definition: RokubiminiSerialImpl.cpp:416
rokubimini::serial::RokubiminiSerialImpl::parseRegexWaitTimeout
bool parseRegexWaitTimeout(RokubiminiSerialResponseRegex &reg, const double &timeout=1.0)
Parses a regex from the serial sensor input stream.
Definition: RokubiminiSerialImpl.cpp:614
rokubimini::serial::RokubiminiSerialImpl::setForceTorqueOffset
bool setForceTorqueOffset(const Eigen::Matrix< double, 6, 1 > &forceTorqueOffset)
Sets a force torque offset to the device.
Definition: RokubiminiSerialImpl.cpp:1065
rokubimini::serial::RokubiminiSerialImpl::getConnectionStateString
std::string getConnectionStateString() const
Definition: RokubiminiSerialImpl.hpp:254
rokubimini::serial::RokubiminiSerialImpl::getName
std::string getName() const
Accessor for device name.
Definition: RokubiminiSerialImpl.hpp:234
rokubimini::serial::RokubiminiSerialImpl::MAX_BAUD_RATE_OPTION
const static uint8_t MAX_BAUD_RATE_OPTION
Definition: RokubiminiSerialImpl.hpp:1265
rokubimini::serial::RokubiminiSerialImpl::getProductName
std::string getProductName() const
Gets the product name of the device.
Definition: RokubiminiSerialImpl.hpp:558
rokubimini::serial::RokubiminiSerialImpl::serialMutex_
std::recursive_mutex serialMutex_
Mutex prohibiting simultaneous access to Serial device.
Definition: RokubiminiSerialImpl.hpp:1067
rokubimini::serial::RokubiminiSerialImpl::sendCommand
bool sendCommand(const std::string &command)
Sends a command to the serial device.
Definition: RokubiminiSerialImpl.cpp:1229
rokubimini::serial::RokubiminiSerialImpl::connectionThread_
boost::thread connectionThread_
Connection thread handle.
Definition: RokubiminiSerialImpl.hpp:1144
rokubimini::serial::RokubiminiSerialImpl::startup
bool startup()
This method starts up communication with the device.
Definition: RokubiminiSerialImpl.cpp:109
rokubimini::serial::RxFrame::bytes
uint8_t bytes[1]
Definition: RokubiminiSerialImpl.hpp:102
rokubimini::serial::RokubiminiSerialImpl::hasFrameSync
bool hasFrameSync()
Returns if there is frame synchronization with the device.
Definition: RokubiminiSerialImpl.hpp:537
rokubimini::serial::ConnectionState::ISCONNECTING
@ ISCONNECTING
Configuration.hpp
rokubimini::serial::DataStatus::__attribute__
struct __attribute__((__packed__))
Definition: RokubiminiSerialImpl.hpp:55
rokubimini::serial::RokubiminiSerialImpl::setCommunicationSetup
bool setCommunicationSetup(const configuration::SensorConfiguration &sensorConfiguration, const uint8_t &dataFormat, const uint8_t &baudRate)
Sets communication setup for the device. This includes setting the temperature compensation,...
Definition: RokubiminiSerialImpl.cpp:1129
rokubimini::serial::RokubiminiSerialImpl::hasError
bool hasError() const
Checks the connection has errors.
Definition: RokubiminiSerialImpl.cpp:391
rokubimini::serial::RokubiminiSerialImpl::frameCrcErrorCounter_
unsigned long frameCrcErrorCounter_
Counter for frames with CRC errors.
Definition: RokubiminiSerialImpl.hpp:1221
rokubimini::serial::RokubiminiSerialImpl::sendCalibrationMatrixEntry
bool sendCalibrationMatrixEntry(const uint8_t subId, const double entry)
Sends a calibration matrix entry to device.
Definition: RokubiminiSerialImpl.hpp:742
RokubiminiSerialCommunication.hpp
rokubimini::serial::RokubiminiSerialImpl::DEFAULT_BAUD_RATE_OPTION
const static uint8_t DEFAULT_BAUD_RATE_OPTION
Definition: RokubiminiSerialImpl.hpp:1258
rokubimini::serial::RokubiminiSerialImpl::setAccelerationFilter
bool setAccelerationFilter(const unsigned int filter)
Sets an acceleration filter to the device.
Definition: RokubiminiSerialImpl.hpp:328
Reading.hpp
rokubimini::serial::RokubiminiSerialImpl::TIMEOUT_MARGIN
constexpr static double TIMEOUT_MARGIN
Definition: RokubiminiSerialImpl.hpp:1301
rokubimini::serial::RokubiminiSerialImpl::diffSec
double diffSec(timespec a, timespec b)
Calculates the difference (b-a) of two timespecs in seconds.
Definition: RokubiminiSerialImpl.hpp:769
rokubimini::serial::RokubiminiSerialImpl::frameHeader
uint8_t frameHeader
The frame header value.
Definition: RokubiminiSerialImpl.hpp:1112
rokubimini::serial::RokubiminiSerialImpl::pollingWorker
void pollingWorker()
Worker threads for polling the sensors.
Definition: RokubiminiSerialImpl.cpp:790
rokubimini::serial::RokubiminiSerialImpl::getReading
void getReading(rokubimini::Reading &reading)
Gets the internal reading variable.
Definition: RokubiminiSerialImpl.cpp:898
rokubimini::serial::RokubiminiSerialImpl::serialImplReading_
Reading serialImplReading_
The internal reading variable. It's used for providing to client code the sensor readings,...
Definition: RokubiminiSerialImpl.hpp:1013
rokubimini::serial::ConnectionState::DISCONNECTED
@ DISCONNECTED
rokubimini::serial::RokubiminiSerialImpl::timespec
struct timespec timespec
Definition: RokubiminiSerialImpl.hpp:757
data
data
rokubimini::serial::RokubiminiSerialImpl
The Rokubimini Serial Implementation class.
Definition: RokubiminiSerialImpl.hpp:131
diagnostic_updater.h
rokubimini::Reading
rokubimini::serial::RxFrame
The frame transmitted and received via the serial bus.
Definition: RokubiminiSerialImpl.hpp:95
rokubimini::serial::RxFrame::__attribute__
struct __attribute__((__packed__))
Definition: RokubiminiSerialImpl.hpp:97
rokubimini::serial::RokubiminiSerialImpl::connect
bool connect()
Connects to the Serial-over-USB port.
Definition: RokubiminiSerialImpl.cpp:171
rokubimini::serial::RokubiminiSerialImpl::frame_
RxFrame frame_
The internal variable for the receiving frame. This variable represents the raw data received from th...
Definition: RokubiminiSerialImpl.hpp:1122
rokubimini::serial::RokubiminiSerialImpl::calcCrc16X25
uint16_t calcCrc16X25(uint8_t *data, int len)
Definition: RokubiminiSerialImpl.cpp:767
rokubimini::serial::RokubiminiSerialImpl::connectionWorker
void connectionWorker()
Worker threads for managing sensor connections.
Definition: RokubiminiSerialImpl.cpp:785
rokubimini::serial::RokubiminiSerialImpl::pollingSyncErrorCounter_
unsigned long pollingSyncErrorCounter_
Internal statistics and error counters.
Definition: RokubiminiSerialImpl.hpp:1195
rokubimini::serial::RokubiminiSerialImpl::isRunning_
boost::atomic< bool > isRunning_
Internal flags/indicators.
Definition: RokubiminiSerialImpl.hpp:1186
rokubimini::serial::RokubiminiSerialImpl::updateConnectionStatus
void updateConnectionStatus(diagnostic_updater::DiagnosticStatusWrapper &stat)
Fills the Device Connection Status (ROS diagnostics).
Definition: RokubiminiSerialImpl.cpp:1249
rokubimini::serial::RokubiminiSerialImpl::frameSuccessCounter_
unsigned long frameSuccessCounter_
Correct frames counter.
Definition: RokubiminiSerialImpl.hpp:1212
rokubimini::serial::RokubiminiSerialImpl::name_
std::string name_
Name of the sensor.
Definition: RokubiminiSerialImpl.hpp:1002
rokubimini::configuration::ForceTorqueFilter
rokubimini::serial::RokubiminiSerialImpl::RokubiminiSerialImpl
RokubiminiSerialImpl()=delete
Default constructor is deleted.
rokubimini::serial::RokubiminiSerialImpl::maxCountOpenSerialPort_
unsigned int maxCountOpenSerialPort_
Maximum attempts to open serial port.
Definition: RokubiminiSerialImpl.hpp:1244
rokubimini::serial::RokubiminiSerialImpl::runsAsync_
std::atomic< bool > runsAsync_
The flag that represents whether the driver runs asynchronously or not.
Definition: RokubiminiSerialImpl.hpp:1351
rokubimini::serial::ConnectionState
ConnectionState
Definition: states.hpp:15
rokubimini::serial::RokubiminiSerialImpl::setHardwareReset
bool setHardwareReset()
Triggers a hardware reset of the sensor.
Definition: RokubiminiSerialImpl.cpp:989
rokubimini::serial::RokubiminiSerialImpl::runsAsync
bool runsAsync()
Returns if the driver runs asynchronously.
Definition: RokubiminiSerialImpl.hpp:569
rokubimini::serial::RokubiminiSerialImpl::firmwareUpdate
bool firmwareUpdate(const std::string &filePath)
Updates the firmware of the device.
Definition: RokubiminiSerialImpl.cpp:1396
rokubimini::serial::RokubiminiSerialImpl::increaseAndCheckTimeoutCounter
void increaseAndCheckTimeoutCounter()
Increases the timeout counter and checks if it has passed the maximum available timeouts.
Definition: RokubiminiSerialImpl.cpp:218
rokubimini::serial::RokubiminiSerialImpl::createDataFlagsDiagnostics
void createDataFlagsDiagnostics(diagnostic_updater::DiagnosticStatusWrapper &stat)
Creates the Data Flags Diagnostics status.
Definition: RokubiminiSerialImpl.cpp:1292
rokubimini::serial::DataStatus::byte
uint16_t byte
Definition: RokubiminiSerialImpl.hpp:62
rokubimini::serial::RokubiminiSerialImpl::getFrameDataStatus
void getFrameDataStatus(DataStatus &status)
Gets the latest frame's Data Status.
Definition: RokubiminiSerialImpl.cpp:1325
rokubimini::serial::RokubiminiSerialImpl::frameReceivedCounter_
unsigned long frameReceivedCounter_
Received frame counter.
Definition: RokubiminiSerialImpl.hpp:1203
rokubimini::serial::RokubiminiSerialImpl::timespecAdd
timespec timespecAdd(timespec a, timespec b)
Calculates the sum of two timespecs.
Definition: RokubiminiSerialImpl.hpp:798
rokubimini
System dependencies.
rokubimini::serial::RokubiminiSerialImpl::writeSerial
bool writeSerial(const std::string &str)
Writes an Ascii string to the serial device.
Definition: RokubiminiSerialImpl.cpp:1353
rokubimini::serial::RokubiminiSerialImpl::isConnecting
bool isConnecting() const
Checks if device is already in the process of connecting.
Definition: RokubiminiSerialImpl.cpp:386
rokubimini::serial::RokubiminiSerialImpl::isRunning
bool isRunning()
Returns if the serial driver is running.
Definition: RokubiminiSerialImpl.hpp:526
rokubimini::serial::RokubiminiSerialImpl::setForceTorqueFilter
bool setForceTorqueFilter(const configuration::ForceTorqueFilter &filter)
Sets a force torque filter to the device.
Definition: RokubiminiSerialImpl.cpp:1039
SensorCalibration.hpp
rokubimini::serial::RokubiminiSerialImpl::readSerialWaitTimeout
bool readSerialWaitTimeout(const uint32_t &numChars, std::string &str, const double &timeout=1.0)
Reads a string from the serial device waiting a timeout duration. The number of characters of the str...
Definition: RokubiminiSerialImpl.cpp:647
rokubimini::serial::RokubiminiSerialImpl::startPollingThread
bool startPollingThread()
This method starts up the polling thread.
Definition: RokubiminiSerialImpl.cpp:97
ForceTorqueFilter.hpp
rokubimini::serial::RokubiminiSerialImpl::frameTimestamp_
ros::Time frameTimestamp_
Definition: RokubiminiSerialImpl.hpp:1370
rokubimini::serial::RokubiminiSerialImpl::getConnectionState
ConnectionState getConnectionState() const
Gets the current connection status.
Definition: RokubiminiSerialImpl.cpp:406
rokubimini::serial::RokubiminiSerialImpl::getErrorFlags
ErrorFlags getErrorFlags() const
Gets the current error status.
Definition: RokubiminiSerialImpl.cpp:411
rokubimini::serial::CODE_TO_BAUD_RATE_MAP
const static std::map< uint32_t, BaudRateStruct > CODE_TO_BAUD_RATE_MAP
Definition: RokubiminiSerialImpl.hpp:110
rokubimini::serial::RokubiminiSerialImpl::openSerialPort
bool openSerialPort(bool keepOpening)
Opens the serial port.
Definition: RokubiminiSerialImpl.cpp:445
rokubimini::serial::RokubiminiSerialImpl::readTimeout_
double readTimeout_
The timeout to read from device (in seconds).
Definition: RokubiminiSerialImpl.hpp:1318
rokubimini::serial::RokubiminiSerialImpl::maxFrameSyncErrorCounts_
unsigned int maxFrameSyncErrorCounts_
Maximum acceptable frame sync errors.
Definition: RokubiminiSerialImpl.hpp:1237
rokubimini::serial::RokubiminiSerialImpl::initSerialPort
bool initSerialPort(const std::string &port)
Sets up and initializes the serial port for communication.
Definition: RokubiminiSerialImpl.cpp:699
rokubimini::serial::RokubiminiSerialImpl::updateDataFlags
void updateDataFlags()
Updates the Data Flags variable currentDataFlagsDiagnostics_.
Definition: RokubiminiSerialImpl.cpp:1279
rokubimini::serial::RokubiminiSerialImpl::frameDataStatus_
DataStatus frameDataStatus_
The current frame's Data Status.
Definition: RokubiminiSerialImpl.hpp:1359
rokubimini::serial::RokubiminiSerialImpl::port_
std::string port_
The serial port to connect to.
Definition: RokubiminiSerialImpl.hpp:1022
rokubimini::serial::ErrorFlags
Definition: states.hpp:29
rokubimini::serial::RokubiminiSerialImpl::setSensorCalibration
bool setSensorCalibration(const calibration::SensorCalibration &sensorCalibration)
Sets a sensor calibration to the device.
Definition: RokubiminiSerialImpl.cpp:1086
rokubimini::serial::BaudRateStruct::value
uint32_t value
Definition: RokubiminiSerialImpl.hpp:107
rokubimini::serial::ModeState::CONFIG_MODE
@ CONFIG_MODE
rokubimini::serial::RokubiminiSerialImpl::errorFlags_
ErrorFlags errorFlags_
Flags to indicate errors in serial communication.
Definition: RokubiminiSerialImpl.hpp:1170
rokubimini::serial::RokubiminiSerialImpl::usbStreamIn_
std::ifstream usbStreamIn_
Input stream for the USB file descriptor.
Definition: RokubiminiSerialImpl.hpp:1094
rokubimini::serial::RokubiminiSerialImpl::setAccelerationRange
bool setAccelerationRange(const unsigned int range)
Sets an acceleration range to the device.
Definition: RokubiminiSerialImpl.hpp:360
rokubimini::serial::RokubiminiSerialImpl::parseAcknowledgement
bool parseAcknowledgement(const char &command_code, const double &timeout=2.0)
Parses the acknowledgement from the serial device.
Definition: RokubiminiSerialImpl.cpp:1331
rokubimini::serial::RokubiminiSerialImpl::setRunsAsync
void setRunsAsync(bool runsAsync)
Sets the runsAsync_ variable.
Definition: RokubiminiSerialImpl.hpp:580
rokubimini::serial::RokubiminiSerialImpl::readSerialNoWait
bool readSerialNoWait(const uint32_t &numChars, std::string &str)
Reads a string from the serial device without waiting. The number of characters of the string is not ...
Definition: RokubiminiSerialImpl.cpp:637
rokubimini::serial::RokubiminiSerialImpl::saveConfigParameter
bool saveConfigParameter()
Saves the current configuration to the device.
Definition: RokubiminiSerialImpl.cpp:1148
ros::Time
rokubimini::serial::RokubiminiSerialImpl::newFrameIsAvailable_
std::condition_variable newFrameIsAvailable_
The condition variable that is used between the publishing and the polling thread to synchronize on n...
Definition: RokubiminiSerialImpl.hpp:1335
rokubimini::serial::RokubiminiSerialImpl::updateRead
void updateRead()
This method is called by the BusManager. Each device attached to this bus reads its data from the buf...
Definition: RokubiminiSerialImpl.hpp:191
rokubimini::serial::BaudRateStruct
Definition: RokubiminiSerialImpl.hpp:105
rokubimini::serial::RokubiminiSerialImpl::isInConfigMode
bool isInConfigMode() const
Checks if the ModeState is Config Mode.
Definition: RokubiminiSerialImpl.cpp:401
rokubimini::serial::RokubiminiSerialImpl::readingMutex_
std::mutex readingMutex_
Mutex prohibiting simultaneous access the internal Reading variable.
Definition: RokubiminiSerialImpl.hpp:1058
rokubimini::serial::RokubiminiSerialImpl::frameOffset_
uint32_t frameOffset_
The frame offset to start reading (in bytes).
Definition: RokubiminiSerialImpl.hpp:1273
rokubimini::serial::RokubiminiSerialImpl::crcCcittUpdate
uint16_t crcCcittUpdate(uint16_t crc, uint8_t data)
Implementation function of the CRC16 X25 checksum for the input data.
Definition: RokubiminiSerialImpl.cpp:775
rokubimini::serial::RokubiminiSerialImpl::updateWrite
void updateWrite()
This method is called by the BusManager. Each device attached to the bus writes its data to the buffe...
Definition: RokubiminiSerialImpl.hpp:202
rokubimini::serial::RokubiminiSerialImpl::setConfigMode
bool setConfigMode()
Sets the device in config mode.
Definition: RokubiminiSerialImpl.cpp:930
rokubimini::serial::RokubiminiSerialImplPtr
std::shared_ptr< RokubiminiSerialImpl > RokubiminiSerialImplPtr
Definition: RokubiminiSerialImpl.hpp:1373
rokubimini::serial::RokubiminiSerialImpl::frameSync_
boost::atomic< bool > frameSync_
Flag that indicates if the frame is synced.
Definition: RokubiminiSerialImpl.hpp:1085
rokubimini::serial::RokubiminiSerialImpl::timespecToSec
double timespecToSec(timespec t)
Converts a timespec to seconds.
Definition: RokubiminiSerialImpl.hpp:783
rokubimini::serial::RokubiminiSerialImpl::parseCommunicationMsgs
bool parseCommunicationMsgs(const double &timeout=1.0)
Parses the Communication Messages of the serial sensor.
Definition: RokubiminiSerialImpl.cpp:669
rokubimini::serial::RokubiminiSerialImpl::isConnected
bool isConnected() const
Checks if the device is connected.
Definition: RokubiminiSerialImpl.cpp:381
rokubimini::serial::RokubiminiSerialImpl::dataReady_
bool dataReady_
This flag is on when new data are ready to be published.
Definition: RokubiminiSerialImpl.hpp:1343
rokubimini::serial::RokubiminiSerialImpl::MAXIMUM_ACCEPTABLE_TIMEOUT
constexpr static double MAXIMUM_ACCEPTABLE_TIMEOUT
Definition: RokubiminiSerialImpl.hpp:1310
rokubimini::serial::RokubiminiSerialImpl::initSensorCommunication
bool initSensorCommunication(bool keepOpening)
Initializes communication with the sensor.
Definition: RokubiminiSerialImpl.cpp:465
diagnostic_updater::DiagnosticStatusWrapper
rokubimini::serial::RokubiminiSerialImpl::resetDataFlags
void resetDataFlags()
Resets the Data Flags variable currentDataFlagsDiagnostics_.
Definition: RokubiminiSerialImpl.cpp:1287
rokubimini::serial::RokubiminiSerialImpl::usbFileDescriptor_
boost::atomic< int > usbFileDescriptor_
The USB file descriptor.
Definition: RokubiminiSerialImpl.hpp:1076
rokubimini::configuration::SensorConfiguration
rokubimini::serial::RokubiminiSerialImpl::runInThreadedMode_
bool runInThreadedMode_
Flag to indicate whether the driver should setup worker threads at startup.
Definition: RokubiminiSerialImpl.hpp:1135
rokubimini::serial::RokubiminiSerialImpl::getSerialNumber
bool getSerialNumber(unsigned int &serialNumber)
Accessor for device serial number.
Definition: RokubiminiSerialImpl.hpp:280
rokubimini::serial::RokubiminiSerialImpl::pollingThread_
boost::thread pollingThread_
Polling thread handle.
Definition: RokubiminiSerialImpl.hpp:1153
rokubimini::serial::RokubiminiSerialImpl::setInitMode
bool setInitMode()
Triggers a software reset of the sensor bringing it to a known state.
Definition: RokubiminiSerialImpl.cpp:1004
rokubimini::serial::RokubiminiSerialImpl::getModeStateString
std::string getModeStateString() const
Definition: RokubiminiSerialImpl.hpp:239
rokubimini::serial::RokubiminiSerialImpl::productName_
std::string productName_
The product name of the device.
Definition: RokubiminiSerialImpl.hpp:1040
rokubimini::serial::RokubiminiSerialImpl::setRunMode
bool setRunMode()
Sets the device in run mode.
Definition: RokubiminiSerialImpl.cpp:967
rokubimini::serial::AppOutput::__attribute__
struct __attribute__((__packed__))
Definition: RokubiminiSerialImpl.hpp:76
rokubimini::calibration::SensorCalibration
rokubimini::serial::RokubiminiSerialImpl::placeholder_
RxFrame placeholder_
A placeholder to save unfinished frames.
Definition: RokubiminiSerialImpl.hpp:1281
header
const std::string header
rokubimini::serial::RokubiminiSerialImpl::setSensorConfiguration
bool setSensorConfiguration(const configuration::SensorConfiguration &sensorConfiguration)
Sets a sensor configuration to the device.
Definition: RokubiminiSerialImpl.cpp:1117
rokubimini::serial::AppOutput
The main output from the sensors in the device.
Definition: RokubiminiSerialImpl.hpp:74
rokubimini::serial::RokubiminiSerialImpl::modeState_
boost::atomic< ModeState > modeState_
Mode state of the sensor.
Definition: RokubiminiSerialImpl.hpp:1178
rokubimini::serial::RokubiminiSerialImpl::clearReadBuffer
bool clearReadBuffer()
Clears the Read Serial buffer by extracting every character available.
Definition: RokubiminiSerialImpl.cpp:1238
rokubimini::serial::RokubiminiSerialImpl::setAngularRateRange
bool setAngularRateRange(const unsigned int range)
Sets an angular rate range to the device.
Definition: RokubiminiSerialImpl.hpp:376
rokubimini::serial::ModeState::RUN_MODE
@ RUN_MODE
rokubimini::serial::RokubiminiSerialResponseRegex
Definition: RokubiminiSerialCommunication.hpp:13
rokubimini::serial::RokubiminiSerialImpl::init
bool init()
This method initializes internal variables and the device for communication. It connects to the seria...
Definition: RokubiminiSerialImpl.cpp:65
rokubimini::serial::RokubiminiSerialImpl::serialNumber_
uint32_t serialNumber_
The serial number of the device.
Definition: RokubiminiSerialImpl.hpp:1049
rokubimini::serial::BaudRateStruct::mask
uint32_t mask
Definition: RokubiminiSerialImpl.hpp:108
rokubimini::serial::RokubiminiSerialImpl::FTDI_DRIVER_LATENCY
constexpr static double FTDI_DRIVER_LATENCY
Definition: RokubiminiSerialImpl.hpp:1293
rokubimini::serial::RokubiminiSerialImpl::loadConfig
bool loadConfig()
Loads the configuration of the device.
Definition: RokubiminiSerialImpl.cpp:1167
rokubimini::serial::RokubiminiSerialImpl::closeSerialPort
void closeSerialPort()
Closes the serial port.
Definition: RokubiminiSerialImpl.hpp:202


rokubimini_serial
Author(s):
autogenerated on Sat Apr 15 2023 02:53:58