From 5ebb0d5d9668bd50b97a3d51105fcb87466566de Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Fri, 22 Feb 2019 10:57:48 -0500 Subject: [PATCH] rpi_rc_in move to px4 work queue --- src/drivers/rpi_rc_in/rpi_rc_in.cpp | 19 +++++-------------- src/drivers/rpi_rc_in/rpi_rc_in.h | 12 ++++-------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/src/drivers/rpi_rc_in/rpi_rc_in.cpp b/src/drivers/rpi_rc_in/rpi_rc_in.cpp index 8262478508..da3e33aa94 100644 --- a/src/drivers/rpi_rc_in/rpi_rc_in.cpp +++ b/src/drivers/rpi_rc_in/rpi_rc_in.cpp @@ -42,7 +42,7 @@ RcInput::~RcInput() _mem = nullptr; } - work_cancel(HPWORK, &_work); + ScheduleClear(); _is_running = false; } @@ -68,6 +68,7 @@ int RcInput::rpi_rc_init() return 0; } + int RcInput::start() { int result = 0; @@ -80,11 +81,8 @@ int RcInput::start() } _is_running = true; - result = work_queue(HPWORK, &_work, (worker_t) & RcInput::cycle_trampoline, this, 0); - if (result == -1) { - _is_running = false; - } + ScheduleNow(); return result; } @@ -94,19 +92,12 @@ void RcInput::stop() _should_exit = true; } -void RcInput::cycle_trampoline(void *arg) -{ - RcInput *dev = reinterpret_cast(arg); - dev->_cycle(); -} - -void RcInput::_cycle() +void RcInput::Run() { _measure(); if (!_should_exit) { - work_queue(HPWORK, &_work, (worker_t) & RcInput::cycle_trampoline, this, - USEC2TICK(RCINPUT_MEASURE_INTERVAL_US)); + ScheduleDelayed(RCINPUT_MEASURE_INTERVAL_US); } } diff --git a/src/drivers/rpi_rc_in/rpi_rc_in.h b/src/drivers/rpi_rc_in/rpi_rc_in.h index b301d8fab2..a956b8775d 100644 --- a/src/drivers/rpi_rc_in/rpi_rc_in.h +++ b/src/drivers/rpi_rc_in/rpi_rc_in.h @@ -49,7 +49,7 @@ #include #include -#include +#include #include #include @@ -61,10 +61,10 @@ namespace rpi_rc_in { -class RcInput +class RcInput, public px4::ScheduledWorkItem { public: - RcInput() = default; + RcInput() : ScheduledWorkItem(px4::wq_configurations::hp_default) {} ~RcInput(); @@ -74,23 +74,19 @@ public: /** @return 0 on success, -errno on failure */ void stop(); - /** Trampoline for the work queue. */ - static void cycle_trampoline(void *arg); - bool is_running() { return _is_running; } private: - void _cycle(); + void Run() override; void _measure(); int rpi_rc_init(); bool _should_exit = false; bool _is_running = false; - struct work_s _work = {}; orb_advert_t _rcinput_pub = nullptr; int _channels = 8; //D8R-II plus struct input_rc_s _data = {};