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
@@ -21,6 +21,10 @@
#include "usb_driver.h"
#if defined(USBJ_EX)
#include "usb_joystick.h"
#endif
extern "C" {
#include "usb_conf.h"
#include "usb_dcd_int.h"
@@ -83,6 +87,9 @@ void usbStart()
#if !defined(BOOT)
case USB_JOYSTICK_MODE:
// initialize USB as HID device
#if defined(USBJ_EX)
setupUSBJoystick();
#endif
USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_HID_cb, &USR_cb);
break;
#endif
@@ -108,6 +115,18 @@ void usbStop()
USBD_DeInit(&USB_OTG_dev);
}
#if defined(USBJ_EX)
void usbJoystickRestart()
{
if (getSelectedUsbMode() != USB_JOYSTICK_MODE) return;
USBD_DeInit(&USB_OTG_dev);
DCD_DevDisconnect(&USB_OTG_dev);
DCD_DevConnect(&USB_OTG_dev);
USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_HID_cb, &USR_cb);
}
#endif
bool usbStarted()
{
return usbDriverStarted;
@@ -125,6 +144,7 @@ bool usbStarted()
*/
void usbJoystickUpdate()
{
#if !defined(USBJ_EX)
static uint8_t HID_Buffer[HID_IN_PACKET];
// test to se if TX buffer is free
@@ -158,5 +178,12 @@ void usbJoystickUpdate()
}
USBD_HID_SendReport(&USB_OTG_dev, HID_Buffer, HID_IN_PACKET);
}
#else
// test to se if TX buffer is free
if (USBD_HID_SendReport(&USB_OTG_dev, 0, 0) == USBD_OK) {
usbReport_t ret = usbReport();
USBD_HID_SendReport(&USB_OTG_dev, ret.ptr, ret.size);
}
#endif
}
#endif