11 signals(io, SIGINT, SIGTERM),
36 bool Serial::connect(
const std::string& portName,
const int& baud, std::function<
void()> cb) {
37 using namespace boost::asio;
39 port.set_option(serial_port::baud_rate(baud));
40 port.set_option(serial_port::character_size(8));
41 port.set_option(serial_port::parity(serial_port::parity::none));
42 port.set_option(serial_port::stop_bits(serial_port::stop_bits::one));
43 port.set_option(serial_port::flow_control(serial_port::flow_control::none));
52 if (!startReadSuccess) {
55 return startReadSuccess;
78 CERR(
"[create::Serial] ",
"data pointer not initialized.");
93 boost::asio::async_read(
port,
97 std::placeholders::_1,
98 std::placeholders::_2));
101 static_cast<std::size_t(boost::asio::io_service::*)(
void)
>(
102 &boost::asio::io_service::run), &
io));
108 int maxAttempts = 10;
110 if (
dataReadyCond.wait_for(lock, std::chrono::milliseconds(500)) == std::cv_status::timeout) {
111 if (attempts >= maxAttempts) {
112 CERR(
"[create::Serial] ",
"failed to receive data from Create. Check if robot is powered!");
159 void Serial::onData(
const boost::system::error_code& e,
const std::size_t& size) {
161 CERR(
"[create::Serial] ",
"serial error - " << e.message());
171 boost::asio::async_read(
port,
175 std::placeholders::_1,
176 std::placeholders::_2));
181 CERR(
"[create::Serial] ",
"send failed, not connected.");
185 boost::asio::write(
port, boost::asio::buffer(bytes, numBytes));
190 uint8_t oc = (uint8_t) code;
std::function< void()> callback
uint64_t getTotalPackets() const
boost::asio::serial_port port
virtual void processByte(uint8_t byteRead)=0
bool sendOpcode(const Opcode &code)
std::condition_variable dataReadyCond
#define CERR(prefix, msg)
std::shared_ptr< Data > data
boost::asio::signal_set signals
bool send(const uint8_t *bytes, const uint32_t numBytes)
virtual bool startSensorStream()=0
void signalHandler(const boost::system::error_code &error, int signal_number)
bool connect(const std::string &port, const int &baud=115200, std::function< void()> cb=0)
void onData(const boost::system::error_code &e, const std::size_t &size)
boost::asio::io_service io
Serial(std::shared_ptr< Data > data)
uint64_t getNumCorruptPackets() const