SerialDevice.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string>
4 #include <cstdint>
5 #include <boost/asio/io_service.hpp>
6 #include <boost/asio/posix/stream_descriptor.hpp>
7 #include <boost/asio/write.hpp>
8 #include <boost/asio/read.hpp>
9 
10 #include <vector>
11 #include <ros/time.h>
12 
13 #include <optional>
14 #include "Csv.hpp"
15 
16 #include "message.hpp"
17 
18 #include "Joint.hpp"
19 
20 namespace quori_controller
21 {
23  {
24  public:
26  {
27  struct JointInfo
28  {
29  std::string name;
31  };
32 
33  std::vector<JointInfo> joints;
34  };
35 
36  typedef std::shared_ptr<SerialDevice> Ptr;
37  typedef std::shared_ptr<const SerialDevice> ConstPtr;
38 
39  ~SerialDevice();
40 
41  const std::string &getName() const;
42 
43  static Ptr open(boost::asio::io_service &context, const std::string &path);
44 
46 
47  void setPositions(const double *const positions, const std::size_t length);
48  void set(const double *const positions, const double *const velocities, const std::size_t length);
49 
50  void getState(quori::message::States &states);
51 
52  void attachSetPositionsCsv(const Csv::Ptr &csv);
54 
55  private:
56  SerialDevice(boost::asio::posix::stream_descriptor &&fd, const std::string &name);
57 
58  void read();
59 
60  template<typename T>
61  size_t write(const T &msg)
62  {
63  boost::system::error_code ec;
64 
65  const size_t res = boost::asio::write(fd_, boost::asio::buffer(reinterpret_cast<const uint8_t *>(&msg), sizeof(msg)), boost::asio::transfer_all(), ec);
66 
67  if (ec)
68  {
69  throw boost::system::system_error(ec);
70  }
71 
72  return res;
73  }
74 
75 
76  boost::asio::posix::stream_descriptor fd_;
77  std::string name_;
78 
79  std::uint8_t numJoints_;
80 
81  std::size_t stateBufferSize_;
82  std::uint8_t *stateBuffer_;
83 
84  std::vector<std::uint8_t> unprocessed_;
85 
87  };
88 }
Csv.hpp
quori_controller::SerialDevice::set
void set(const double *const positions, const double *const velocities, const std::size_t length)
Definition: SerialDevice.cpp:164
quori_controller::SerialDevice::getName
const std::string & getName() const
Definition: SerialDevice.cpp:82
quori_controller::SerialDevice::InitializationInfo::JointInfo::mode
Joint::Mode mode
Definition: SerialDevice.hpp:30
message.hpp
quori_controller::SerialDevice::unprocessed_
std::vector< std::uint8_t > unprocessed_
Definition: SerialDevice.hpp:84
time.h
quori_controller::SerialDevice::ConstPtr
std::shared_ptr< const SerialDevice > ConstPtr
Definition: SerialDevice.hpp:37
quori_controller::SerialDevice::open
static Ptr open(boost::asio::io_service &context, const std::string &path)
Definition: SerialDevice.cpp:38
quori_controller::SerialDevice::attachSetPositionsCsv
void attachSetPositionsCsv(const Csv::Ptr &csv)
Definition: SerialDevice.cpp:220
quori_controller::SerialDevice::~SerialDevice
~SerialDevice()
Definition: SerialDevice.cpp:30
quori_controller::SerialDevice::read
void read()
Definition: SerialDevice.cpp:203
quori_controller
Definition: Csv.hpp:10
Joint.hpp
quori_controller::SerialDevice::stateBufferSize_
std::size_t stateBufferSize_
Definition: SerialDevice.hpp:81
quori_controller::SerialDevice::SerialDevice
SerialDevice(boost::asio::posix::stream_descriptor &&fd, const std::string &name)
Definition: SerialDevice.cpp:72
quori_controller::SerialDevice::set_positions_csv_
Csv::Ptr set_positions_csv_
Definition: SerialDevice.hpp:86
quori_controller::SerialDevice::InitializationInfo::joints
std::vector< JointInfo > joints
Definition: SerialDevice.hpp:33
quori_controller::SerialDevice::name_
std::string name_
Definition: SerialDevice.hpp:77
quori_controller::SerialDevice::InitializationInfo
Definition: SerialDevice.hpp:25
quori_controller::Csv::Ptr
std::shared_ptr< Csv > Ptr
Definition: Csv.hpp:15
quori_controller::SerialDevice::Ptr
std::shared_ptr< SerialDevice > Ptr
Definition: SerialDevice.hpp:36
quori_controller::SerialDevice::setPositions
void setPositions(const double *const positions, const std::size_t length)
Definition: SerialDevice.cpp:134
quori_controller::SerialDevice::initialize
InitializationInfo initialize()
Definition: SerialDevice.cpp:87
quori_controller::Joint::Mode
Mode
Definition: Joint.hpp:17
quori_controller::SerialDevice::detachSetPositionsCsv
Csv::Ptr detachSetPositionsCsv()
Definition: SerialDevice.cpp:226
quori_controller::SerialDevice::stateBuffer_
std::uint8_t * stateBuffer_
Definition: SerialDevice.hpp:82
quori_controller::SerialDevice::InitializationInfo::JointInfo
Definition: SerialDevice.hpp:27
quori_controller::SerialDevice::getState
void getState(quori::message::States &states)
Definition: SerialDevice.cpp:185
quori_controller::SerialDevice::fd_
boost::asio::posix::stream_descriptor fd_
Definition: SerialDevice.hpp:76
quori_controller::SerialDevice::numJoints_
std::uint8_t numJoints_
Definition: SerialDevice.hpp:79
quori_controller::SerialDevice::InitializationInfo::JointInfo::name
std::string name
Definition: SerialDevice.hpp:29
quori::message::States
Definition: message.hpp:109
quori_controller::SerialDevice::write
size_t write(const T &msg)
Definition: SerialDevice.hpp:61
quori_controller::SerialDevice
Definition: SerialDevice.hpp:22


quori_controller
Author(s):
autogenerated on Wed Mar 2 2022 00:53:16