Add option to disable signal handlers (#65)
This gives the user the option to create their own signal handler without having create::Create interfere. They can disable the sigint/sigterm handler and be responsible for disconnecting from the robot themselves. Signed-off-by: Jacob Perron <jacobmperron@gmail.com>
This commit is contained in:
parent
fbc87dea3f
commit
1563e2b3e1
8 changed files with 35 additions and 19 deletions
|
@ -92,7 +92,7 @@ namespace create {
|
||||||
float requestedLeftVel;
|
float requestedLeftVel;
|
||||||
float requestedRightVel;
|
float requestedRightVel;
|
||||||
|
|
||||||
void init();
|
void init(bool install_signal_handler);
|
||||||
// Add two matrices and handle overflow case
|
// Add two matrices and handle overflow case
|
||||||
Matrix addMatrices(const Matrix &A, const Matrix &B) const;
|
Matrix addMatrices(const Matrix &A, const Matrix &B) const;
|
||||||
void onData();
|
void onData();
|
||||||
|
@ -109,8 +109,10 @@ namespace create {
|
||||||
* Calling this constructor Does not attempt to establish a serial connection to the robot.
|
* Calling this constructor Does not attempt to establish a serial connection to the robot.
|
||||||
*
|
*
|
||||||
* \param model the type of the robot. See RobotModel to determine the value for your robot.
|
* \param model the type of the robot. See RobotModel to determine the value for your robot.
|
||||||
*/
|
* \param install_signal_handler if true, then register a signal handler to disconnect from
|
||||||
Create(RobotModel model = RobotModel::CREATE_2);
|
* the robot on SIGINT or SIGTERM.
|
||||||
|
*/
|
||||||
|
Create(RobotModel model = RobotModel::CREATE_2, bool install_signal_handler = true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Attempts to establish serial connection to Create.
|
* \brief Attempts to establish serial connection to Create.
|
||||||
|
@ -119,8 +121,10 @@ namespace create {
|
||||||
* \param baud rate to communicate with Create. Typically,
|
* \param baud rate to communicate with Create. Typically,
|
||||||
* 115200 for Create 2 and 57600 for Create 1.
|
* 115200 for Create 2 and 57600 for Create 1.
|
||||||
* \param model type of robot. See RobotModel to determine the value for your robot.
|
* \param model type of robot. See RobotModel to determine the value for your robot.
|
||||||
|
* \param install_signal_handler if true, then register a signal handler to disconnect from
|
||||||
|
* the robot on SIGINT or SIGTERM.
|
||||||
*/
|
*/
|
||||||
Create(const std::string& port, const int& baud, RobotModel model = RobotModel::CREATE_2);
|
Create(const std::string& port, const int& baud, RobotModel model = RobotModel::CREATE_2, bool install_signal_handler = true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Attempts to disconnect from serial.
|
* \brief Attempts to disconnect from serial.
|
||||||
|
|
|
@ -86,7 +86,7 @@ namespace create {
|
||||||
void notifyDataReady();
|
void notifyDataReady();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Serial(std::shared_ptr<Data> data);
|
Serial(std::shared_ptr<Data> data, bool install_signal_handler);
|
||||||
~Serial();
|
~Serial();
|
||||||
bool connect(const std::string& port, const int& baud = 115200, std::function<void()> cb = 0);
|
bool connect(const std::string& port, const int& baud = 115200, std::function<void()> cb = 0);
|
||||||
void disconnect();
|
void disconnect();
|
||||||
|
|
|
@ -67,7 +67,7 @@ namespace create {
|
||||||
void processByte(uint8_t byteRead);
|
void processByte(uint8_t byteRead);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SerialQuery(std::shared_ptr<Data> data);
|
SerialQuery(std::shared_ptr<Data> data, bool install_signal_handler = true);
|
||||||
};
|
};
|
||||||
} // namespace create
|
} // namespace create
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,10 @@ namespace create {
|
||||||
void processByte(uint8_t byteRead);
|
void processByte(uint8_t byteRead);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SerialStream(std::shared_ptr<Data> data, const uint8_t& header = create::util::STREAM_HEADER);
|
SerialStream(
|
||||||
|
std::shared_ptr<Data> data,
|
||||||
|
const uint8_t& header = create::util::STREAM_HEADER,
|
||||||
|
bool install_signal_handler = true);
|
||||||
|
|
||||||
};
|
};
|
||||||
} // namespace create
|
} // namespace create
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace create {
|
||||||
|
|
||||||
namespace ublas = boost::numeric::ublas;
|
namespace ublas = boost::numeric::ublas;
|
||||||
|
|
||||||
void Create::init() {
|
void Create::init(bool install_signal_handler) {
|
||||||
mainMotorPower = 0;
|
mainMotorPower = 0;
|
||||||
sideMotorPower = 0;
|
sideMotorPower = 0;
|
||||||
vacuumMotorPower = 0;
|
vacuumMotorPower = 0;
|
||||||
|
@ -44,18 +44,21 @@ namespace create {
|
||||||
dtHistoryLength = 100;
|
dtHistoryLength = 100;
|
||||||
data = std::shared_ptr<Data>(new Data(model.getVersion()));
|
data = std::shared_ptr<Data>(new Data(model.getVersion()));
|
||||||
if (model.getVersion() == V_1) {
|
if (model.getVersion() == V_1) {
|
||||||
serial = std::make_shared<SerialQuery>(data);
|
serial = std::make_shared<SerialQuery>(data, install_signal_handler);
|
||||||
} else {
|
} else {
|
||||||
serial = std::make_shared<SerialStream>(data);
|
serial = std::make_shared<SerialStream>(
|
||||||
|
data, create::util::STREAM_HEADER, install_signal_handler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Create::Create(RobotModel m) : model(m) {
|
Create::Create(RobotModel m, bool install_signal_handler) : model(m) {
|
||||||
init();
|
init(install_signal_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
Create::Create(const std::string& dev, const int& baud, RobotModel m) : model(m) {
|
Create::Create(const std::string& dev, const int& baud, RobotModel m, bool install_signal_handler)
|
||||||
init();
|
: model(m)
|
||||||
|
{
|
||||||
|
init(install_signal_handler);
|
||||||
serial->connect(dev, baud);
|
serial->connect(dev, baud);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,14 +7,19 @@
|
||||||
|
|
||||||
namespace create {
|
namespace create {
|
||||||
|
|
||||||
Serial::Serial(std::shared_ptr<Data> d) :
|
Serial::Serial(std::shared_ptr<Data> d, bool install_signal_handler) :
|
||||||
signals(io, SIGINT, SIGTERM),
|
signals(io),
|
||||||
port(io),
|
port(io),
|
||||||
dataReady(false),
|
dataReady(false),
|
||||||
isReading(false),
|
isReading(false),
|
||||||
data(d),
|
data(d),
|
||||||
corruptPackets(0),
|
corruptPackets(0),
|
||||||
totalPackets(0) {
|
totalPackets(0)
|
||||||
|
{
|
||||||
|
if (install_signal_handler) {
|
||||||
|
signals.add(SIGINT);
|
||||||
|
signals.add(SIGTERM);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Serial::~Serial() {
|
Serial::~Serial() {
|
||||||
|
|
|
@ -8,7 +8,8 @@
|
||||||
|
|
||||||
namespace create {
|
namespace create {
|
||||||
|
|
||||||
SerialQuery::SerialQuery(std::shared_ptr<Data> d) : Serial(d),
|
SerialQuery::SerialQuery(std::shared_ptr<Data> d, bool install_signal_handler)
|
||||||
|
: Serial(d, install_signal_handler),
|
||||||
streamRecoveryTimer(io),
|
streamRecoveryTimer(io),
|
||||||
packetID(ID_BUMP_WHEELDROP),
|
packetID(ID_BUMP_WHEELDROP),
|
||||||
packetByte(0),
|
packetByte(0),
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
namespace create {
|
namespace create {
|
||||||
|
|
||||||
SerialStream::SerialStream(std::shared_ptr<Data> d, const uint8_t& header) : Serial(d), readState(READ_HEADER), headerByte(header) {
|
SerialStream::SerialStream(std::shared_ptr<Data> d, const uint8_t& header, bool install_signal_handler) : Serial(d, install_signal_handler), readState(READ_HEADER), headerByte(header) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SerialStream::startSensorStream() {
|
bool SerialStream::startSensorStream() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue