diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2014-05-08 14:14:52 +0200 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2014-05-08 14:14:52 +0200 |
commit | f70db56e90972cf0492ac9d295c3d0f5df87aa66 (patch) | |
tree | 3ce58888efb47957daf3db569c6d51ff1cd890ba | |
parent | 185c95fda6acac869c1821846d44359faeef22d2 (diff) | |
download | px4-firmware-f70db56e90972cf0492ac9d295c3d0f5df87aa66.tar.gz px4-firmware-f70db56e90972cf0492ac9d295c3d0f5df87aa66.tar.bz2 px4-firmware-f70db56e90972cf0492ac9d295c3d0f5df87aa66.zip |
UAVCAN: Fix start / stop commands
-rw-r--r-- | src/modules/uavcan/uavcan_main.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/modules/uavcan/uavcan_main.cpp b/src/modules/uavcan/uavcan_main.cpp index a86314852..9cd486bf5 100644 --- a/src/modules/uavcan/uavcan_main.cpp +++ b/src/modules/uavcan/uavcan_main.cpp @@ -92,8 +92,8 @@ UavcanNode::~UavcanNode() unsigned i = 10; do { - /* wait 50ms - it should wake every 100ms or so worst-case */ - usleep(50000); + /* wait 5ms - it should wake every 10ms or so worst-case */ + usleep(5000); /* if we have given up, kill it */ if (--i == 0) { @@ -522,15 +522,16 @@ int uavcan_main(int argc, char *argv[]) bitrate = DEFAULT_CAN_BITRATE; } + if (UavcanNode::instance()) { + errx(1, "already started"); + } + /* * Start */ warnx("Node ID %u, bitrate %u", node_id, bitrate); return UavcanNode::start(node_id, bitrate); - } else { - print_usage(); - ::exit(1); } /* commands below require the app to be started */ @@ -543,7 +544,16 @@ int uavcan_main(int argc, char *argv[]) if (!std::strcmp(argv[1], "status") || !std::strcmp(argv[1], "info")) { inst->print_info(); + return OK; } - return 0; + if (!std::strcmp(argv[1], "stop")) { + + delete inst; + inst = nullptr; + return OK; + } + + print_usage(); + ::exit(1); } |