forked from espressif/arduino-esp32
88 lines
2.8 KiB
C
88 lines
2.8 KiB
C
![]() |
// Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
#pragma once
|
||
|
#include "USBHID.h"
|
||
|
#if CONFIG_TINYUSB_HID_ENABLED
|
||
|
|
||
|
/// Standard Gamepad Buttons Naming from Linux input event codes
|
||
|
/// https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h
|
||
|
#define BUTTON_A 0
|
||
|
#define BUTTON_B 1
|
||
|
#define BUTTON_C 2
|
||
|
#define BUTTON_X 3
|
||
|
#define BUTTON_Y 4
|
||
|
#define BUTTON_Z 5
|
||
|
#define BUTTON_TL 6
|
||
|
#define BUTTON_TR 7
|
||
|
#define BUTTON_TL2 8
|
||
|
#define BUTTON_TR2 9
|
||
|
#define BUTTON_SELECT 10
|
||
|
#define BUTTON_START 11
|
||
|
#define BUTTON_MODE 12
|
||
|
#define BUTTON_THUMBL 13
|
||
|
#define BUTTON_THUMBR 14
|
||
|
|
||
|
#define BUTTON_SOUTH BUTTON_A
|
||
|
#define BUTTON_EAST BUTTON_B
|
||
|
#define BUTTON_NORTH BUTTON_X
|
||
|
#define BUTTON_WEST BUTTON_Y
|
||
|
|
||
|
/// Standard Gamepad HAT/DPAD Buttons (from Linux input event codes)
|
||
|
#define HAT_CENTER 0
|
||
|
#define HAT_UP 1
|
||
|
#define HAT_UP_RIGHT 2
|
||
|
#define HAT_RIGHT 3
|
||
|
#define HAT_DOWN_RIGHT 4
|
||
|
#define HAT_DOWN 5
|
||
|
#define HAT_DOWN_LEFT 6
|
||
|
#define HAT_LEFT 7
|
||
|
#define HAT_UP_LEFT 8
|
||
|
|
||
|
class USBHIDGamepad: public USBHIDDevice {
|
||
|
private:
|
||
|
USBHID hid;
|
||
|
int8_t _x; ///< Delta x movement of left analog-stick
|
||
|
int8_t _y; ///< Delta y movement of left analog-stick
|
||
|
int8_t _z; ///< Delta z movement of right analog-joystick
|
||
|
int8_t _rz; ///< Delta Rz movement of right analog-joystick
|
||
|
int8_t _rx; ///< Delta Rx movement of analog left trigger
|
||
|
int8_t _ry; ///< Delta Ry movement of analog right trigger
|
||
|
uint8_t _hat; ///< Buttons mask for currently pressed buttons in the DPad/hat
|
||
|
uint32_t _buttons; ///< Buttons mask for currently pressed buttons
|
||
|
bool write();
|
||
|
public:
|
||
|
USBHIDGamepad(void);
|
||
|
void begin(void);
|
||
|
void end(void);
|
||
|
|
||
|
bool leftStick(int8_t x, int8_t y);
|
||
|
bool rightStick(int8_t z, int8_t rz);
|
||
|
|
||
|
bool leftTrigger(int8_t rx);
|
||
|
bool rightTrigger(int8_t ry);
|
||
|
|
||
|
bool hat(uint8_t hat);
|
||
|
|
||
|
bool pressButton(uint8_t button);
|
||
|
bool releaseButton(uint8_t button);
|
||
|
|
||
|
bool send(int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons);
|
||
|
|
||
|
// internal use
|
||
|
uint16_t _onGetDescriptor(uint8_t* buffer);
|
||
|
};
|
||
|
|
||
|
#endif
|