diff options
author | David Sidrane <david_s5@nscdg.com> | 2015-03-26 05:33:47 -1000 |
---|---|---|
committer | David Sidrane <david_s5@nscdg.com> | 2015-03-26 05:33:47 -1000 |
commit | 229ff9f7018ddafe42c11dd937aae8af39e6e216 (patch) | |
tree | ed52fe7afd08ada926974b06cda90e15492f43a6 /src/modules | |
parent | 5d45d863f6bb4ba3e645cee07f89478482879b2b (diff) | |
download | px4-firmware-229ff9f7018ddafe42c11dd937aae8af39e6e216.tar.gz px4-firmware-229ff9f7018ddafe42c11dd937aae8af39e6e216.tar.bz2 px4-firmware-229ff9f7018ddafe42c11dd937aae8af39e6e216.zip |
Integration uavcan functionality and led driver
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/uavcannode/module.mk | 7 | ||||
-rw-r--r-- | src/modules/uavcannode/uavcannode_main.cpp | 30 |
2 files changed, 35 insertions, 2 deletions
diff --git a/src/modules/uavcannode/module.mk b/src/modules/uavcannode/module.mk index 263fc00a0..9d61d427b 100644 --- a/src/modules/uavcannode/module.mk +++ b/src/modules/uavcannode/module.mk @@ -44,8 +44,11 @@ MODULE_STACKSIZE = 920 # Main -SRCS += uavcannode_main.cpp \ - uavcannode_clock.cpp \ +SRCS += uavcannode_main.cpp \ + uavcannode_clock.cpp \ + indication_controller.cpp \ + sim_controller.cpp \ + led.cpp \ uavcannode_params.c diff --git a/src/modules/uavcannode/uavcannode_main.cpp b/src/modules/uavcannode/uavcannode_main.cpp index abc2b0b21..a727cbbb9 100644 --- a/src/modules/uavcannode/uavcannode_main.cpp +++ b/src/modules/uavcannode/uavcannode_main.cpp @@ -49,6 +49,8 @@ #include <drivers/drv_pwm_output.h> #include "uavcannode_main.hpp" +#include "indication_controller.hpp" +#include "sim_controller.hpp" /** * @file uavcan_main.cpp @@ -219,6 +221,21 @@ int UavcanNode::init(uavcan::NodeID node_id) return _node.start(); } + +/* + * Restart handler + */ +class RestartRequestHandler: public uavcan::IRestartRequestHandler +{ + bool handleRestartRequest(uavcan::NodeID request_source) override + { + ::syslog(LOG_INFO,"UAVCAN: Restarting by request from %i\n", int(request_source.get())); + ::usleep(20*1000*1000); + systemreset(false); + return true; // Will never be executed BTW + } +} restart_request_handler; + void UavcanNode::node_spin_once() { const int spin_res = _node.spin(uavcan::MonotonicTime()); @@ -247,6 +264,19 @@ int UavcanNode::add_poll_fd(int fd) int UavcanNode::run() { + + get_node().setRestartRequestHandler(&restart_request_handler); + + while (init_indication_controller(get_node()) < 0) { + ::syslog(LOG_INFO,"UAVCAN: Indication controller init failed\n"); + ::sleep(1); + } + + while (init_sim_controller(get_node()) < 0) { + ::syslog(LOG_INFO,"UAVCAN: sim controller init failed\n"); + ::sleep(1); + } + (void)pthread_mutex_lock(&_node_mutex); const unsigned PollTimeoutMs = 50; |