Actuator did not provide an option to completely shutdown selected channels
(set PWM pulse = 0). It is useful for camera stabilization boot delay (we
want few seconds of gimbal servo inactivity to calibrate gyros). It also
might be useful for failsafe on some channels. This option is now available.
It is used to disable camera outputs during fixed 7s delay after boot
instead of setting them to minimum position.
As a side effect, few bugs are fixed (ticks should be multiplied by
portTICK_RATE_MS, not divided, to get time in ms). And few floating point
operations were optimized out as well.
ActuatorCommand.UpdateTime was promoted to uint16 because it is not unusual
to have it 20000ms during flash updates (was seen on the CC after UAV
settings import). So it should be 16bit as well.
This is a partial rework of Cossacs' camera gimbal software.
This patch adds LPF to airframe attitude used for camera stabilisation
and feed forward for camera actuators. Either of options can be
disabled on the compilation level to save flash and RAM if not
required.
Original Cossacs' code was optimized and code flow shortcuts were
added where applicable.
This is a partial rework of Cossacs' camera gimbal software.
This patch adds LPF to some of manual control inputs. Mostly
useful are accessory channels (for camera gimbal control) and
yaw channel (for smooth filming). The code may be used for
stand-alone CC[3D]-based gimbal software, but also should work
for complete FC+camera system.
Telemetry module was iterating over all UAVOs including
meta UAVOs and creating a periodic event item for each
object. These items cost us about 32 bytes for each list
item.
This is wasteful for two main reasons. First, meta UAVOs can't
meaningfully have periodic updates so excluding them entirely
makes sense. That halves the number of objects in this list since
there is one meta object for every data object. This is worth
about 500 bytes of RAM on CC.
Second, about half of the remaining UAVOs are not periodic by
default so they're wasting memory unless someone happens to want
to make them periodic at runtime. This is worth another 450 bytes
of RAM on CC.
So, objects that are configured as periodic during board init will
support all of the periodic config at runtime. Objects that are
*not* periodic during board init can only be made periodic on the
next boot.
Each object that you make periodic during init will cost you an
extra 32 bytes of RAM.
With erased settings, free RAM comparison for CC is:
Before: 2736 bytes free
After: 4048 bytes free
Total RAM savings with this update is 1312 bytes!
Previously, when unconnected, only the flighttelemetrystats
UAVO was Tx'd. All other UAVOs were inhibited. This led to
zero telemetry data when the connection to the GCS was gone.
This precluded getting useful telemetry from a receive-only
station.
This commit changes two main areas.
First, UAVO updates are now allowed regardless of the "connected"
state between the GCS/FC.
Second, it makes both the flighttelemetrystats and gcstelemetrystats
UAVOs un-acked. This prevents these objects from blocking all
other UAVOs while they wait for their ack. This is OK since the
real "connection" negotiation happens via the states exchanged in
the Status field of these UAVOs.
Scales each channel only based on max and min calibrated values.
The neutral value is now ignored so the joystick sees a linear
range between min and max.
This is particularly useful to allow the full range of values for
throttle to be passed through to the joystick.
Adds a new RCTransmitter setting for the USB HID interface which
emulates a USB HID joystick. The scaled RC receiver channels
from any RCVR protocol are passed through to the various emulated
joystick controls.
The main use for this feature is to allow you to use your own RC
transmitter with any RC simulator on a PC.
This is known to work with CRRCsim but should work with any simulator
that supports joystick input.