Files
edgetx-gx12/radio/src/usb_joystick.h
T
661657feca 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>
2023-03-22 10:31:29 +10:00

117 lines
2.5 KiB
C

/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _USB_JOYSTICK_H_
#define _USB_JOYSTICK_H_
#include "storage/yaml/yaml_defs.h"
enum USBJoystickIfMode
{
USBJOYS_JOYSTICK,
USBJOYS_GAMEPAD,
USBJOYS_MULTIAXIS,
USBJOYS_LAST SKIP = USBJOYS_MULTIAXIS
};
enum USBJoystickCh
{
USBJOYS_CH_NONE,
USBJOYS_CH_BUTTON,
USBJOYS_CH_AXIS,
USBJOYS_CH_SIM,
USBJOYS_CH_LAST SKIP = USBJOYS_CH_SIM
};
enum USBJoystickBtnMode
{
USBJOYS_BTN_MODE_NORMAL,
USBJOYS_BTN_MODE_ON_PULSE,
USBJOYS_BTN_MODE_SW_EMU,
USBJOYS_BTN_MODE_DELTA,
USBJOYS_BTN_MODE_COMPANION,
USBJOYS_BTN_MODE_LAST SKIP = USBJOYS_BTN_MODE_COMPANION
};
enum USBJoystickAxis
{
USBJOYS_AXIS_X,
USBJOYS_AXIS_Y,
USBJOYS_AXIS_Z,
USBJOYS_AXIS_RX,
USBJOYS_AXIS_RY,
USBJOYS_AXIS_RZ,
USBJOYS_AXIS_SLIDER,
USBJOYS_AXIS_DIAL,
USBJOYS_AXIS_WHEEL,
USBJOYS_AXIS_LAST SKIP = USBJOYS_AXIS_WHEEL
};
enum USBJoystickSim
{
USBJOYS_SIM_AILERON,
USBJOYS_SIM_ELEVATOR,
USBJOYS_SIM_RUDDER,
USBJOYS_SIM_THROTTLE,
USBJOYS_SIM_LAST SKIP = USBJOYS_SIM_THROTTLE
};
#define USBJ_BUTTON_SIZE 32
#define USBJ_MAX_JOYSTICK_CHANNELS 26
#ifdef __cplusplus
extern "C" {
#endif
struct usbReport_t {
uint8_t * ptr;
uint8_t size;
};
#ifdef __cplusplus
}
#endif
int usbJoystickExtMode();
int usbJoystickActive();
int usbJoystickSettingsChanged();
// Initializes the data based on the model settings
// Return value (true = description changed, false = desc. update not needed)
int setupUSBJoystick();
void onUSBJoystickModelChanged();
#ifdef __cplusplus
extern "C" {
#endif
struct usbReport_t usbReportDesc();
uint8_t usbReportSize();
#ifdef __cplusplus
}
#endif
struct usbReport_t usbReport();
int isUSBAxisCollision(uint8_t chIdx);
int isUSBSimCollision(uint8_t chIdx);
int isUSBBtnNumCollision(uint8_t chIdx);
#endif // _USB_JOYSTICK_H_