From cceec434f28c086e1ddb4147df2f97a6d8a863b1 Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Sat, 30 Nov 2019 20:19:02 -0500 Subject: [PATCH] Revert "linux_pwm_out update orb usage" This reverts commit 25acd40ef00fdb5e615b921596829165b06a6f5d. --- src/drivers/linux_pwm_out/linux_pwm_out.cpp | 28 +++++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/drivers/linux_pwm_out/linux_pwm_out.cpp b/src/drivers/linux_pwm_out/linux_pwm_out.cpp index 0f83db0765..482c376194 100644 --- a/src/drivers/linux_pwm_out/linux_pwm_out.cpp +++ b/src/drivers/linux_pwm_out/linux_pwm_out.cpp @@ -42,7 +42,6 @@ #include #include -#include #include #include #include @@ -77,10 +76,11 @@ static char _mixer_filename[64] = "ROMFS/px4fmu_common/mixers/quad_x.main.mix"; // subscriptions int _controls_subs[actuator_controls_s::NUM_ACTUATOR_CONTROL_GROUPS]; -uORB::Subscription _armed_sub{ORB_ID(actuator_armed)}; +int _armed_sub = -1; // publications -uORB::PublicationMulti _outputs_pub{ORB_ID(actuator_outputs)}; +orb_advert_t _outputs_pub = nullptr; +orb_advert_t _rc_pub = nullptr; perf_counter_t _perf_control_latency = nullptr; @@ -207,6 +207,9 @@ void subscribe() _poll_fds[_poll_fds_num].events = POLLIN; _poll_fds_num++; } + + _armed_sub = orb_subscribe(ORB_ID(actuator_armed)); + } } @@ -269,7 +272,12 @@ void task_main(int argc, char *argv[]) while (!_task_should_exit) { - _armed_sub.update(&_armed); + bool updated; + orb_check(_armed_sub, &updated); + + if (updated) { + orb_copy(ORB_ID(actuator_armed), _armed_sub, &_armed); + } if (_mixer_group) { _mixer_group->set_airmode(airmode); @@ -387,7 +395,12 @@ void task_main(int argc, char *argv[]) _outputs.timestamp = hrt_absolute_time(); - _outputs_pub.publish(_outputs); + if (_outputs_pub != nullptr) { + orb_publish(ORB_ID(actuator_outputs), _outputs_pub, &_outputs); + + } else { + _outputs_pub = orb_advertise(ORB_ID(actuator_outputs), &_outputs); + } // use first valid timestamp_sample for latency tracking for (int i = 0; i < actuator_controls_s::NUM_ACTUATOR_CONTROL_GROUPS; i++) { @@ -424,6 +437,11 @@ void task_main(int argc, char *argv[]) } } + if (_armed_sub != -1) { + orb_unsubscribe(_armed_sub); + _armed_sub = -1; + } + if (rc_channels_sub != -1) { orb_unsubscribe(rc_channels_sub); }