feat: New advanced joystick mode on radio, improvements to Companion and Simulator joystick support (#3111)

* Allow switches on the connected radio to control switches in the simulator via the joystick interface.

* Merge configurable radio joystick interface from banyaszg.

* Add two more 'axis' channels to companion.

* Fix 6POS from USB joystick to simulator.

* Reduce data size.

* Fix build error on B&W radios.

* Add 'Companion' button mode to work with the button logic in the Companion app.

* Build Companion joystick setup layout at runtime.
Change #define names for simulator joystick.
Allow 15 axes and 32 buttons.
Initial support for trim sliders.

* Remove custom joystick button type for companion - use 3 buttons per switch in companion to control simulator switch state.

* Fix joystick constructor calls parameters. Connect some radio joystick trims to simulator widgets.

* Restore 'companion' button type to reduce number of buttons needed. Make trims work via buttons in USB joystick.

* Connect joystick trim buttons to simulator widgets.

* Use companion source names for trims.

* Add encode / decode of usb joystick custom settings to Companion.

* Convert to lvgl layouts.
Update language files.

* Fix generated YAML storage files.

* Fix initialisation error when editing button channel. Cleanup code.

* Fix rebase.

* Fix refresh of joystick channel list view after editing an entry.
Companion joystick config window uses two columns.

* Fix vertical joystick inversion bug.
Change stick axis labels.

---------

Co-authored-by: Phil Mitchell <phil.a.mitchell@gmail.com>
This commit is contained in:
philmoz
2023-03-22 10:31:29 +10:00
committed by GitHub
co-authored by Phil Mitchell
parent a1178f83a6
commit 661657feca
81 changed files with 3501 additions and 572 deletions
+22 -4
View File
@@ -256,6 +256,16 @@ bool JStickData::existsOnDisk()
return (m_settings.value(settingsPath() % stick_axe_key(), -1).toInt() > -1);
}
JButtonData::JButtonData() : CompStoreObj(), index(-1)
{
CompStoreObj::addObjectMapping(propertyGroup(), this);
}
bool JButtonData::existsOnDisk()
{
return (m_settings.value(settingsPath() % button_idx_key(), -1).toInt() > -1);
}
// ** Profile class********************
@@ -397,8 +407,10 @@ AppData::AppData() :
profile[i].setIndex(i);
// Configure the joysticks
for (int i = 0; i < MAX_JOYSTICKS; i++)
for (int i = 0; i < MAX_JS_AXES; i++)
joystick[i].setIndex(i);
for (int i = 0; i < MAX_JS_BUTTONS; i++)
jsButton[i].setIndex(i);
// Configure the updates
for (int i = 0; i < MAX_COMPONENTS; i++) {
@@ -436,8 +448,10 @@ void AppData::initAll()
for (int i = 0; i < MAX_PROFILES; i++)
profile[i].init();
// Initialize the joysticks
for (int i = 0; i < MAX_JOYSTICKS; i++)
for (int i = 0; i < MAX_JS_AXES; i++)
joystick[i].init();
for (int i = 0; i < MAX_JS_BUTTONS; i++)
jsButton[i].init();
// Initialize the updatess
for (int i = 0; i < MAX_COMPONENTS; i++) {
component[i].init();
@@ -453,8 +467,10 @@ void AppData::resetAllSettings()
fwRev.resetAll();
for (int i = 0; i < MAX_PROFILES; i++)
profile[i].resetAll();
for (int i = 0; i < MAX_JOYSTICKS; i++)
for (int i = 0; i < MAX_JS_AXES; i++)
joystick[i].resetAll();
for (int i = 0; i < MAX_JS_BUTTONS; i++)
jsButton[i].resetAll();
for (int i = 0; i < MAX_COMPONENTS; i++) {
component[i].resetAll();
for (int j = 0; j < MAX_COMPONENT_ASSETS; j++) {
@@ -469,8 +485,10 @@ void AppData::storeAllSettings()
storeAll();
for (int i = 0; i < MAX_PROFILES; i++)
profile[i].storeAll();
for (int i = 0; i < MAX_JOYSTICKS; i++)
for (int i = 0; i < MAX_JS_AXES; i++)
joystick[i].storeAll();
for (int i = 0; i < MAX_JS_BUTTONS; i++)
jsButton[i].storeAll();
for (int i = 0; i < MAX_COMPONENTS; i++) {
component[i].storeAll();
for (int j = 0; j < MAX_COMPONENT_ASSETS; j++)