If you over allocate the number of analog channels this results in a
crash. It's easy to trigger this if you have voltage only monitors as we
still eat up a current input channel, regarless of if we use it. There
are only 16 channels at this time on ChibiOS, so if you have 9 voltage
only battery monitors you are out.
This PR improves that situation by only allocating channels when needed,
and in the case where we run out we now set a ConfigError, which on a
flight controller is much more friendly then a instant segfault the
moment we read a battery monitor. NOTE: on AP_Periph this takes the
node off the bus, rather then just sitting in the bootloader. This was
consideted acceptable as the current behaviour was to segfault and then
sit in the bootloader, unless you made new firmware that limited the
number of channels allocated it wasn't possible to recover in this
situation anyways.
We're using a value off the wire before it has been validated. That value is used to limit indexing into a buffer, and that buffer isn't big enough to handle all possible "bad" values that index could take on. Note that "read" here returns int16_t....
Now that starter control is an aux channel, engine commands are no
longer blocked by default, so it's easy to enable ICE frames by adding
an engine start command to the beginning of the missions.
This makes SIM_ENGINE_FAIL work a little more intuitively, since it is
usually used to simulate a complete failure.
Also, drive-by fix of the SIM_ENGINE_MUL documentation.
kills heavy peripherals
../../libraries/AP_Quicktune/AP_Quicktune.cpp: In member function 'void AP_Quicktune::update(bool)':
../../libraries/AP_Quicktune/AP_Quicktune.cpp:177:32: error: 'vehicle' is not a member of 'AP'
177 | const auto &vehicle = *AP::vehicle();
| ^~~~~~~
compilation terminated due to -Wfatal-errors.
[ 688/1225] Compiling libraries/AP_TemperatureSensor/AP_TemperatureSensor_TSYS03.cpp
Waf: Leaving directory `/home/pbarker/rc/ardupilot/build/CubeOrange-periph-heavy'
CubeNode was trying to check a parameter which doesn't exist
../../libraries/AP_Airspeed/Airspeed_Calibration.cpp: In member function 'void AP_Airspeed::send_airspeed_calibration(const Vector3f&)':
../../libraries/AP_Airspeed/Airspeed_Calibration.cpp:179:23: error: 'class AP_Airspeed_Params' has no member named 'autocal'
179 | if (!param[i].autocal && !calibration_enabled) {
| ^~~~~~~
compilation terminated due to -Wfatal-errors.