Changed file format to be able to save settings and data together.
Old settings files still can be imported. Data export will also contain
settings, so we always have the system settings with the system state.
Sample file:
<!DOCTYPE UAVObjects>
<uavobjects>
<version>
...
</version>
<data>
<object id="0xC409985A" name="AccessoryDesired">
<field values="0" name="AccessoryVal"/>
</object>
...
</data>
<settings>
<object id="0xF2875746" name="ActuatorSettings">
...
</settings>
</uavobjects>
cause:
/projects/OpenPilot/git/ground/openpilotgcs/src/plugins/notify/notifyplugin.cpp:104:6:
warning: unused parameter ‘configInfo’ [-Wunused-parameter]
/projects/OpenPilot/git/ground/openpilotgcs/src/plugins/notify/notifyplugin.cpp:353:6:
warning: unused parameter ‘values’ [-Wunused-parameter]
/projects/OpenPilot/git/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.cpp:73:10:
warning: unused parameter ‘parent’ [-Wunused-parameter]
/projects/OpenPilot/git/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.cpp:451:6:
warning: unused parameter ‘rangeStr’ [-Wunused-parameter]
/projects/OpenPilot/git/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.cpp:512:7:
warning: unused parameter ‘oldstate’ [-Wunused-parameter]
/projects/OpenPilot/git/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.cpp:527:6:
warning: unused parameter ‘deselected’ [-Wunused-parameter]
implemented solution:
fixed all of them (commented out var name)
* fixed bug in check code
cause:
/projects/OpenPilot/git/ground/openpilotgcs/src/plugins/notify/notifyplugin.cpp:
In member function ‘void SoundNotifyPlugin::checkNotificationRule(NotificationItem*, UAVObject*)’:
/projects/OpenPilot/git/ground/openpilotgcs/src/plugins/notify/notifyplugin.cpp:398:109:
warning: suggest parentheses around comparison in operand of ‘|’ [-Wparentheses]
implemented solution:
this is an obvious bug that is syntactically correct but leads to a
warning with a good compiler so this bug can be found. fixed that to use
logical or instead of bitwise or.
* fixed bug in include file (error in compilation under Linux)
cause:
In file included from
/projects/OpenPilot/git/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.cpp:47:0:
/projects/OpenPilot/git/ground/openpilotgcs/src/plugins/notify/notifytablemodel.h:86:39:
error: reference ‘_list’ cannot be declared ‘mutable’ [-fpermissive]
implemented solution:
removed the mutable flag, as this is wrongly used on a reference (and
therefore correctly causing a compile-time error
Camera Stabilization settings not being read from CC board into GCS if CC is started first.
Created connection callback only to be called after all plugins are loaded.
When halted in the bootloader or while rescuing a board, the
user can press the "Safe Boot" button in the uploader gadget
to force the FW to boot with a default hwsettings configuration.
The default conditions of the hwsettings uavo will disable all
optional modules, disable all serial port config, and ensure that
the board can communicate via the USB HID telemetry interface.
Once booted in this mode, a user can easily reconfigure the
hwsettings uavo through the config GUI and save the fixed
settings to the board to be used on the next reboot. No need
to wipe all settings just to recover from a non-functional
HW config.
NOTE: The GCS needs to grow some very clear visual clues to
indicate when the board has booted in safe mode. The
firmware helpfully raises a (new) critical alarm called
BootFault whenever it boots in safe mode.
This loads the default settings (except output channels) to the GUI page
but does not apply them automatically. User can apply/save them or
reload current values from the board using UAVObjBrowser.
This module and its associated settings uavo can be used
to test various fault conditions during initialization.
To enable the module, add the TEST_FAULTS=YES to your make
command line:
make fw_coptercontrol TEST_FAULTS=YES
Once this module is part of your firmware load, you can
enable it in the hwsettings uavo and then select the
type of fault to insert by editing the faultsettings uavo.
On the next reset, the configured fault will be inserted
into the init sequence to allow you to test the boot fault
recovery code.
With a fault inserted, you should see 3 failed boot attempts
followed by a successful (recovery) boot. You will see the
BootFault alarm set to Critical, and the RAM version of your
hwsettings will be reset to defaults. Since the defaults have
all optional modules disabled, the fault module will be out of
the way during the recovery boot.
You can then "Load" the flash version of the hwsettings uavo
in the object browser, disable the Fault module and then "Save"
the hwsettings module back to the board. The next reset will
boot normally without the fault inserted.
The GCS hwsettings config widget now disallows any
configuration that disables both HID and VCP telemetry
over the USB port.
The firmware will allow it if the UAVObj is set manually.
This allows a mechanism to reduce RAM usage by another
500 more bytes if USB telemetry can be sacrificed in
certain configurations.
These logs are disabled by default, and can be
turned on at compile time by defining:
UAVTALK_DEBUG
at the top of uavtalk.cpp.
These logs proved very helpful in diagnosing a
serial comms issue.
The difference between 56000 and 57600 baud is very
important.
When using a USB to serial adapter that is capable
of synthesizing arbitrary baud rates, these errors
resulted in a completely mismatched/unusable serial
link.
The autoscaling values used by the scope gadget were
being applied to the raw data being written to the CSV
files. This resulted in the CSV file containing data
that had a variable scale, thus making it useless.
Changed the UAV import of saved settings to not pull in invalid enum
values. Will warn on the dialog that an element of the UAVObject was
invalid and turn off the "save" checkbox. Also will send a qDebug output
showing the UAVObject name and the invalid enum value.
* reduced top and bottom margins of outputchannelform
* removed obsolete methods in configoutputwidget.h
* fixed comment block
* switched to static accessor methods for UAVO
- both CC serial ports are now disabled by default (no telemetry);
- serial ports now have DSM2, DSMX (10bit) and DSMX (11bit) options;
- ReceiverGroups now have DSM (MainPort) and DSM (FlexiPort) options.
For DSM2 protocol there is an explicit resolution bit in the stream, so
the DSM2 should be selected. For DSMX there is no such bit, and user
should choose the resolution from the list configuring the spektrum port.
ReceiverGroups have single DSM option which is handled by the same driver.
Downside: this implementation saves received frame first, unrolls by the
end of frame. This should be ok, but may be improved by unrolling channels
on the fly in the rx callback.
Another minor difference is that a ChannelGroup is now bound to port:
DSM (MainPort) or DSM (FlexiPort). This was considered as acceptable
solution in order to not have 6 DSM options for each ChannelGroup and
even more in case of new DSM protocol variations.
Known problem: it is not possible to choose same protocols like
DSM2/DSM2 for two ports. It can be enabled by adding an exception to
common rule, though.
The DSMX throttle channel misbehavior (zero value) is not treated
specially yet. It should trigger the failsafe being out of bounds.
More info and data dumps are required to handle this properly.