serial.h
Go to the documentation of this file.
1 
32 // Based on example from:
33 // https://github.com/labust/labust-ros-pkg/wiki/Create-a-Serial-Port-application
34 
35 #ifndef CREATE_SERIAL_H
36 #define CREATE_SERIAL_H
37 
38 #include <condition_variable>
39 #include <functional>
40 #include <memory>
41 #include <mutex>
42 #include <thread>
43 
44 #include <boost/asio.hpp>
45 
46 #include "create/data.h"
47 #include "create/types.h"
48 #include "create/util.h"
49 
50 namespace create {
51  class Serial : public std::enable_shared_from_this<Serial> {
52 
53  protected:
54  boost::asio::io_service io;
55  boost::asio::signal_set signals;
56  boost::asio::serial_port port;
57 
58  private:
59  std::thread ioThread;
60  std::condition_variable dataReadyCond;
61  std::mutex dataReadyMut;
62  bool dataReady;
63  bool isReading;
64  bool firstRead;
65  uint8_t byteRead;
66 
67  // Callback executed when data arrives from Create
68  void onData(const boost::system::error_code& e, const std::size_t& size);
69  // Callback to execute once data arrives
70  std::function<void()> callback;
71  // Start and stop reading data from Create
72  bool startReading();
73  void stopReading();
74  bool openPort(const std::string& portName, const int& baud);
75  bool closePort();
76 
77  protected:
78  std::shared_ptr<Data> data;
79  // These are for possible diagnostics
80  uint64_t corruptPackets;
81  uint64_t totalPackets;
82 
83  virtual bool startSensorStream() = 0;
84  virtual void processByte(uint8_t byteRead) = 0;
85 
86  void signalHandler(const boost::system::error_code& error, int signal_number);
87  // Notifies main thread that data is fresh and makes the user callback
88  void notifyDataReady();
89 
90  public:
91  Serial(std::shared_ptr<Data> data, bool install_signal_handler);
92  ~Serial();
93  bool connect(const std::string& port, const int& baud = 115200, std::function<void()> cb = 0);
94  void disconnect();
95  inline bool connected() const { return port.is_open(); };
96  bool send(const uint8_t* bytes, const uint32_t numBytes);
97  bool sendOpcode(const Opcode& code);
98  uint64_t getNumCorruptPackets() const;
99  uint64_t getTotalPackets() const;
100  };
101 } // namespace create
102 
103 #endif // CREATE_SERIAL_H
create::Serial::totalPackets
uint64_t totalPackets
Definition: serial.h:81
create::Serial::send
bool send(const uint8_t *bytes, const uint32_t numBytes)
Definition: serial.cpp:211
create::Serial::startReading
bool startReading()
Definition: serial.cpp:106
types.h
create::Serial::signals
boost::asio::signal_set signals
Definition: serial.h:55
create::Serial::ioThread
std::thread ioThread
Definition: serial.h:59
create::Serial::disconnect
void disconnect()
Definition: serial.cpp:65
create::Serial::stopReading
void stopReading()
Definition: serial.cpp:161
create::Serial::dataReady
bool dataReady
Definition: serial.h:62
create::Serial::getTotalPackets
uint64_t getTotalPackets() const
Definition: serial.cpp:235
create::Serial::Serial
Serial(std::shared_ptr< Data > data, bool install_signal_handler)
Definition: serial.cpp:10
create::Serial::onData
void onData(const boost::system::error_code &e, const std::size_t &size)
Definition: serial.cpp:191
create::Serial::dataReadyMut
std::mutex dataReadyMut
Definition: serial.h:61
create::Serial::startSensorStream
virtual bool startSensorStream()=0
create::Serial::connect
bool connect(const std::string &port, const int &baud=115200, std::function< void()> cb=0)
Definition: serial.cpp:41
create::Serial::isReading
bool isReading
Definition: serial.h:63
create::Serial::signalHandler
void signalHandler(const boost::system::error_code &error, int signal_number)
Definition: serial.cpp:29
create::Serial
Definition: serial.h:51
create::Serial::corruptPackets
uint64_t corruptPackets
Definition: serial.h:80
create::Serial::io
boost::asio::io_service io
Definition: serial.h:54
create::Serial::connected
bool connected() const
Definition: serial.h:95
create::Serial::closePort
bool closePort()
Definition: serial.cpp:95
create::Serial::port
boost::asio::serial_port port
Definition: serial.h:56
create::Serial::callback
std::function< void()> callback
Definition: serial.h:70
create::Serial::byteRead
uint8_t byteRead
Definition: serial.h:65
create::Serial::dataReadyCond
std::condition_variable dataReadyCond
Definition: serial.h:60
data.h
create::Serial::processByte
virtual void processByte(uint8_t byteRead)=0
create::Serial::openPort
bool openPort(const std::string &portName, const int &baud)
Definition: serial.cpp:79
create::Serial::notifyDataReady
void notifyDataReady()
Definition: serial.cpp:174
create::Serial::sendOpcode
bool sendOpcode(const Opcode &code)
Definition: serial.cpp:226
create::Serial::data
std::shared_ptr< Data > data
Definition: serial.h:78
create::Opcode
Opcode
Definition: types.h:154
create::Serial::firstRead
bool firstRead
Definition: serial.h:64
util.h
create::Serial::getNumCorruptPackets
uint64_t getNumCorruptPackets() const
Definition: serial.cpp:231
create
Definition: create.h:48
create::Serial::~Serial
~Serial()
Definition: serial.cpp:25


libcreate
Author(s): Jacob Perron
autogenerated on Wed May 24 2023 02:24:57