catch boost exceptions in Serial.h

This commit is contained in:
Swapnil Patel 2022-06-27 22:38:18 -04:00 committed by Jacob Perron
parent c694bd30d3
commit de253b6e81
2 changed files with 50 additions and 16 deletions

View file

@ -71,6 +71,8 @@ namespace create {
// Start and stop reading data from Create
bool startReading();
void stopReading();
bool openPort(const std::string& portName, const int& baud);
bool closePort();
protected:
std::shared_ptr<Data> data;

View file

@ -40,28 +40,28 @@ namespace create {
bool Serial::connect(const std::string& portName, const int& baud, std::function<void()> cb) {
using namespace boost::asio;
port.open(portName);
port.set_option(serial_port::baud_rate(baud));
port.set_option(serial_port::character_size(8));
port.set_option(serial_port::parity(serial_port::parity::none));
port.set_option(serial_port::stop_bits(serial_port::stop_bits::one));
port.set_option(serial_port::flow_control(serial_port::flow_control::none));
if (!openPort(portName, baud)) {
return false;
}
signals.async_wait(std::bind(&Serial::signalHandler, this, std::placeholders::_1, std::placeholders::_2));
usleep(1000000);
if (port.is_open()) {
if (!port.is_open()) {
return false;
}
callback = cb;
bool startReadSuccess = startReading();
if (!startReadSuccess) {
port.close();
}
return startReadSuccess;
}
closePort();
return false;
}
return true;
}
void Serial::disconnect() {
if (isReading) {
stopReading();
@ -76,6 +76,33 @@ namespace create {
}
}
bool Serial::openPort(const std::string& portName, const int& baud) {
using namespace boost::asio;
try {
port.open(portName);
port.set_option(serial_port::baud_rate(baud));
port.set_option(serial_port::character_size(8));
port.set_option(serial_port::parity(serial_port::parity::none));
port.set_option(serial_port::stop_bits(serial_port::stop_bits::one));
port.set_option(serial_port::flow_control(serial_port::flow_control::none));
} catch (const boost::system::system_error& /*e*/) {
CERR("[create::Serial] ", "failed to open port: " << portName);
return false;
}
return true;
}
bool Serial::closePort() {
using namespace boost::asio;
try {
port.close();
} catch (const boost::system::system_error& /*e*/) {
CERR("[create::Serial] ", "failed to close port");
return false;
}
return true;
}
bool Serial::startReading() {
if (!connected()) return false;
@ -186,8 +213,13 @@ namespace create {
CERR("[create::Serial] ", "send failed, not connected.");
return false;
}
// TODO: catch boost exceptions
try {
boost::asio::write(port, boost::asio::buffer(bytes, numBytes));
} catch (const boost::system::system_error & e) {
CERR("[create::Serial] ", "failed to write bytes to port");
return false;
}
return true;
}