Browse Source

px4io: input_rc only publish new successful decodes

- previously an invalid decode would continue to be transferred to the FMU (at 50 Hz) and published to the rest of the system as successfully decoded new RC data
 - by only publishing new successful decodes we can more effectively discard invalid data in downstream consumers
v1.13.0-BW
Daniel Agar 3 years ago committed by GitHub
parent
commit
091fca701e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. BIN
      boards/cubepilot/cubeorange/extras/cubepilot_io-v2_default.bin
  2. BIN
      boards/cubepilot/cubeyellow/extras/cubepilot_io-v2_default.bin
  3. BIN
      boards/holybro/durandal-v1/extras/px4_io-v2_default.bin
  4. BIN
      boards/holybro/pix32v5/extras/px4_io-v2_default.bin
  5. BIN
      boards/mro/x21-777/extras/px4_io-v2_default.bin
  6. BIN
      boards/px4/fmu-v2/extras/px4_io-v2_default.bin
  7. BIN
      boards/px4/fmu-v3/extras/px4_io-v2_default.bin
  8. BIN
      boards/px4/fmu-v4pro/extras/px4_io-v2_default.bin
  9. BIN
      boards/px4/fmu-v5/extras/px4_io-v2_default.bin
  10. BIN
      boards/px4/fmu-v5x/extras/px4_io-v2_default.bin
  11. BIN
      boards/px4/fmu-v6x/extras/px4_io-v2_default.bin
  12. 13
      src/drivers/px4io/px4io.cpp
  13. 2
      src/modules/px4iofirmware/controls.c

BIN
boards/cubepilot/cubeorange/extras/cubepilot_io-v2_default.bin

Binary file not shown.

BIN
boards/cubepilot/cubeyellow/extras/cubepilot_io-v2_default.bin

Binary file not shown.

BIN
boards/holybro/durandal-v1/extras/px4_io-v2_default.bin

Binary file not shown.

BIN
boards/holybro/pix32v5/extras/px4_io-v2_default.bin

Binary file not shown.

BIN
boards/mro/x21-777/extras/px4_io-v2_default.bin

Binary file not shown.

BIN
boards/px4/fmu-v2/extras/px4_io-v2_default.bin

Binary file not shown.

BIN
boards/px4/fmu-v3/extras/px4_io-v2_default.bin

Binary file not shown.

BIN
boards/px4/fmu-v4pro/extras/px4_io-v2_default.bin

Binary file not shown.

BIN
boards/px4/fmu-v5/extras/px4_io-v2_default.bin

Binary file not shown.

BIN
boards/px4/fmu-v5x/extras/px4_io-v2_default.bin

Binary file not shown.

BIN
boards/px4/fmu-v6x/extras/px4_io-v2_default.bin

Binary file not shown.

13
src/drivers/px4io/px4io.cpp

@ -202,6 +202,8 @@ private: @@ -202,6 +202,8 @@ private:
hrt_abstime _last_status_publish{0};
uint16_t _rc_valid_update_count{0};
bool _param_update_force{true}; ///< force a parameter update
bool _timer_rates_configured{false};
@ -1198,6 +1200,14 @@ int PX4IO::io_get_status() @@ -1198,6 +1200,14 @@ int PX4IO::io_get_status()
int PX4IO::io_publish_raw_rc()
{
const uint16_t rc_valid_update_count = io_reg_get(PX4IO_PAGE_RAW_RC_INPUT, PX4IO_P_RAW_FRAME_COUNT);
const bool rc_updated = (rc_valid_update_count != _rc_valid_update_count);
_rc_valid_update_count = rc_valid_update_count;
if (!rc_updated) {
return 0;
}
input_rc_s input_rc{};
input_rc.timestamp_last_signal = hrt_absolute_time();
@ -1306,8 +1316,7 @@ int PX4IO::io_publish_raw_rc() @@ -1306,8 +1316,7 @@ int PX4IO::io_publish_raw_rc()
input_rc.input_source = input_rc_s::RC_INPUT_SOURCE_PX4IO_ST24;
}
if ((input_rc.channel_count > 0) && !input_rc.rc_lost && !input_rc.rc_failsafe
&& (input_rc.input_source != input_rc_s::RC_INPUT_SOURCE_UNKNOWN)) {
if (input_rc.input_source != input_rc_s::RC_INPUT_SOURCE_UNKNOWN) {
_to_input_rc.publish(input_rc);
}

2
src/modules/px4iofirmware/controls.c

@ -369,6 +369,8 @@ controls_tick() @@ -369,6 +369,8 @@ controls_tick()
} else {
r_raw_rc_flags &= ~(PX4IO_P_RAW_RC_FLAGS_MAPPING_OK);
}
r_page_raw_rc_input[PX4IO_P_RAW_FRAME_COUNT]++;
}
/*

Loading…
Cancel
Save