Commit Graph

130 Commits

Author SHA1 Message Date
Daniel Agar 089c962d92 px4io: moving mixing to FMU side
Using mixers on the IO side had a remote benefit of being able to
override all control surfaces with a radio remote on a fixed wing.
This ended up not being used that much and since the original design
10 years ago (2011) we have been able to convince ourselves that the
overall system stability is at a level where this marginal benefit,
which is not present on multicopters, is not worth the hazzle.

Co-authored-by: Beat Küng <beat-kueng@gmx.net>
Co-authored-by: Daniel Agar <daniel@agar.ca>
2021-09-25 19:15:05 -04:00
Daniel Agar 5c4582ccce rc: dsm allow full range 2021-04-15 18:27:33 +02:00
jciberlin 01c9a4f24d ghst: fix warning generated on PR (Clang Tidy)
Fix warning generated on PR (Clang Tidy).
2021-03-15 09:42:53 +01:00
jciberlin 6f5efbeab5 ghst_telemetry: send battery status
Send battery status (ghst_telemetry). Apply factors to show correct values of volts, amps and mAh. Change ghost protocol code to follow more MISRA C++ guidelines.
2021-03-15 09:42:53 +01:00
jciberlin 9d65e9a980 ghst: keep the previous values for channels that are not updated
Keep the previous values for channels that are not updated (ghost protocol). Add new test data for ghost protocol.
2021-02-20 11:29:57 +01:00
jciberlin 96c72a5657 RCTest: add tests for ghost protocol
Add tests for ghost protocol
2021-02-20 11:29:57 +01:00
Juraj Ciberlin c0f7429f8c ghst: use memcpy instead of for loop
PR review, ghost protocol, use memcpy instead of for loop

Co-authored-by: Beat Küng <beat-kueng@gmx.net>
2021-02-20 11:29:57 +01:00
jciberlin 64342f568d Ghost protocol
ghst: add ghost protocol
2021-02-20 11:29:57 +01:00
Lorenz Meier 0bdae5745a Update dsm.cpp
Fix documentation comment (reported by @Roman-, thanks!)
2021-01-01 15:30:25 +01:00
Lorenz Meier 9409122638 RC tests: Add new test file
This file is using a PX4IO-bound receiver on a DX9
2021-01-01 14:26:36 +01:00
Lorenz Meier 47fcf97442 DSM: Report frame drops
Frame drops were measured but not reported on PX4IO.
2021-01-01 14:26:36 +01:00
Daniel Agar 95dd2f7e8d rc/dsm: remove system field check, add new validity checks
- unfortunately we can't depend on the system field due to potential
external binding and non-genuine Spektrum equipment
 - reject any DSM frame with duplicate channels
 - add 16 channel mask
 - tighten valid PWM range 990-2010us (±100% travel is 1102-1898µs)
 - update RCTest rejected frame count
2021-01-01 14:26:36 +01:00
Lorenz Meier af28a298e5 DSM driver: Add option for passive power controls 2020-12-31 13:22:52 +01:00
Daniel Agar be28c4d309 lib/rc: dsm_bind() add debug output for binding
- trivial code style cleanup
2020-10-04 22:23:47 -04:00
px4dev 9cebf3b969 Sbus comment fix, found by George-avy in issue 15253 2020-08-24 09:24:53 +02:00
Daniel Agar 63a23957b1 rc/dsm: decode improvements
- always check system field for validity
 - reject any data outside of "servo position" valid range from Spektrum specification
 - properly support XPlus channels (12+)
 - debug message if channel count changes
2020-08-02 12:52:16 -04:00
SalimTerryLi e0abe7090e SBUS on Linux: replace termios with termios2 and add UNKNOWN UART WQ 2020-02-02 14:06:27 -05:00
Daniel Agar e3de7e62ea drivers/rc_input: port to linux for testing 2020-01-09 16:16:23 -05:00
Beat Küng 3198610f85 src/platforms: move all headers to platforms/common/include/px4_platform_common
and remove the px4_ prefix, except for px4_config.h.

command to update includes:
for k in app.h atomic.h cli.h console_buffer.h defines.h getopt.h i2c.h init.h log.h micro_hal.h module.h module_params.h param.h param_macros.h posix.h sem.h sem.hpp shmem.h shutdown.h tasks.h time.h workqueue.h; do for i in $(grep -rl 'include <px4_'$k src platforms boards); do sed -i 's/#include <px4_'$k'/#include <px4_platform_common\/'$k/ $i; done; done
for in $(grep -rl 'include <px4_config.h' src platforms boards); do sed -i 's/#include <px4_config.h/#include <px4_platform_common\/px4_config.h'/ $i; done

Transitional headers for submodules are added (px4_{defines,log,time}.h)
2019-10-30 11:48:47 +01:00
Daniel Agar c284198bec clang-tidy: partially fix hicpp-use-override 2019-10-28 10:50:31 -04:00
Daniel Agar 967446af4c clang-tidy: enable readability-simplify-boolean-expr and fix 2019-10-27 19:19:07 -04:00
Beat Küng eda45b4df2 sbus: add time-based hardening (only for IO and NuttX)
Since SBUS does not have CRC, we can use timing information to improve
parsing reliability and reject unexpected bytes.
2019-01-07 10:17:37 +01:00
Beat Küng 4cd8fe0a30 sbus: simplify logic 2019-01-07 10:17:37 +01:00
Beat Küng 9ebd052ac7 sbus: remove unused variables & improve some comments 2019-01-07 10:17:37 +01:00
Julian Oes 5b9dea5604 Replacing usleep with px4_usleep
This is a step towards isolating time from the system.
2018-12-22 10:32:18 +01:00
Daniel Agar 3e0a3559a9 cmake use standard mechanisms for settings flags 2018-11-26 14:40:14 -08:00
Daniel Agar f692ad04d0 boards organization 2018-11-26 14:40:14 -08:00
Mara Bos 10c20b38ad Fix many format strings.
Fixes these invalid format strings:
- A `%d` for a pointer (replaced it by `%p`)
- A 0x%08x (and a 0x%0x8!) for a pointer (replaced by %p)
- 2 cases of `%d` for a `ssize_t` (replaced it by `%zi`)
- 1 case of a %u for an `int` (replaced by %i)
- 3 cases of %d for a `long` (replaced by %ld)
- 19 cases of `%d`, `%i`, `%u` or `%lu` for a `size_t` (replaced it by `%zu`)
- An unused formatting argument (removed it)
- A missing `%d` (added it)
- A missing `%s` (added it)
- 2 cases of `%llu` for a `uint64_t` (replaced it by `"%" PRIu64`)
- 6 cases of giving a string directly as format string (replaced it by `("%s", string)`)
- 2 cases of %*-s, which should probably have been %-*s.
  (Looks like NuttX accepts (the invalid) %*-s, but other platforms don't.)
- A %04x for a `uint32_t` (replaced by "%04" PRIx32)
2018-10-27 12:44:51 +02:00
Daniel Agar 658237f36a px4fmu move RC input to new rc_input driver 2018-07-30 10:32:56 -04:00
Beat Küng 1fb5353a60 rc: add unit test for CRSF RC
Also cleanup other RC unit tests
2018-07-28 15:23:09 +02:00
Beat Küng 6e24bbbaaf fmu: add CRSF RC and Telemetry support
- Telemetry is only enabled on omnibus, since on Pixhawk it seems we cannot
  write to the RC UART due to how the board is wired
- For the Telemetry the UART needs to be opened RW
2018-07-28 15:23:09 +02:00
Beat Küng 04dbd40723 rc lib: add CRSF Crossfire protocol (RC and Telemetry) 2018-07-28 15:23:09 +02:00
Beat Küng 74e4619042 rc lib: cleanup, move structs out of common_rc.h 2018-07-28 15:23:09 +02:00
Kurt Kiefer fc16dce8f1 spektrum_rssi: initialize rssi lookup as constexpr
Rather than initializing the rssi percentage lookup table at runtime
on the heap, we would like it to be stored in flash.

This change pre-computes the rssi lookup table.
2018-07-22 08:42:30 +02:00
Kurt Kiefer 597372bec9 Gather RSSI data from Spektrum Telemetry receivers
On SPM4649T receivers with firmware versions at least 1.1RC9, the
serial data will contain an rssi value in dbm, as outlined in the
Remote Receiver Interfacing document section 8.3.1.

If the value received is greater than or equal to zero, the receiver
does not support rssi data, and the incoming value will be ignored.
However, if the value is negative, we can use the rssi value.

When we have a valid rssi, it gets mapped to a percentage from 0 to
100 as expected by mavlink. This mapping is constructed as a
logarithmic function over Spektrum's published minimum and maximum
rssi values, -92dBm to -42dBm as 0 to 100:
100 Log10[1 + (x - min) * (9 / (max - min))]

This change updates all calls to the dsm input rountes to return
the rssi value.

Note that one place this doesn't work with the px4io enabled.
There is a comment left in the absence of analog rssi that:
"we do not actually get digital RSSI regs[PX4IO_P_RAW_RC_NRSSI]".
This restriction has been left in place, as removing it exposes a
problem where the frequency of the control tick is greater than
that of valid dsm frames so the rssi isn't valid every cycle.
2018-07-22 08:42:30 +02:00
David Sidrane d0d361ef92 sbus:Add comment that turning off the single wire has not effect 2018-07-17 08:53:29 +02:00
Daniel Agar ea3acb7121 cmake remove circular linking and reorganize
- px4_add_module now requires MAIN
 - px4_add_library doesn't automatically link
2018-04-29 21:48:54 -04:00
Matthias Grob be8adbfdf3 Cygwin: refactored & simplified some of the OS define logic 2018-01-05 14:47:33 -05:00
Matthias Grob 70de169f15 Cygwin: Enable build of SITL jMAVsim under Windows using the Cygwin Unix-like environment
Most of the incompatitbilities are luckily similar to the darwin build.
- New target OS __PX4_CYGWIN added because in other build environments on Windows defines will very likely be completely different
- added all necessary exeptions to the defines
- disabled priorities completely because on Windows they are defined 1-32 and with all the arbitrary +40 -40 priority settings there were a lot of problems
  not only did some threads/"virtual tasks" not start because of out of bound priorities but also the resulting scheduling was totally random and inadequate
  with default priorities it ran toally fine during my first tests, should be rethought when windows is used onboard in the future
2018-01-05 14:47:33 -05:00
Martina ef07c3be20 st24: move decode state to header file 2017-10-10 09:06:09 +02:00
Martina a7956c401b st24: move decode state to header file 2017-10-10 09:06:09 +02:00
Daniel Agar a02caff1bc unit_test inline implementation and remove module build 2017-08-23 08:06:55 +02:00
Peter Duerr 7cf2a49948 Cosmetic fix (silencing cppcheck)
* For some reason cppcheck complains with `fp != nullptr` but accepts truthiness
  of handle by itself.
* Note that the expressions are equivalent according to the C++ standard ("A
  prvalue of arithmetic, unscoped enumeration, pointer, or pointer to member
  type can be converted to a prvalue of type bool. A zero value, null pointer
  value, or null member pointer value is converted to false; any other value is
  converted to true. A prvalue of type std::nullptr_t can be converted to a
  prvalue of type bool; the resulting value is false.")
2017-08-07 22:05:17 +02:00
davidaroyer 8be3985524 rc: remove unnecessary board ifdef 2017-06-04 04:24:50 +08:00
davidaroyer 99799d83b1 ocpoc support: update copyright dates 2017-06-04 04:24:50 +08:00
davidaroyer 68983f7ee2 fix code style 2017-06-04 04:24:50 +08:00
davidaroyer 0b6fd4f8a2 rc: add support for Aerotenna OcPoC-Zynq hardware 2017-06-04 04:24:50 +08:00
Lorenz Meier 71731d17a9 RC C library: Use same buffer as the protocols do not decode in parallel. 2017-05-02 07:40:50 +02:00
David Sidrane 36731e13c6 Allow levels of Sbus debugging 2017-04-01 11:37:47 +02:00
David Sidrane 78d7508800 dsm Use the abstaction SPEKTRUM_POWER to enable the interface
Use the abstaction SPEKTRUM_POWER to enable the interface not
   the define for the GPIO pin.

   Use the clearer macro definitions
2017-03-30 16:19:26 -10:00