Joystick report descriptor; USB device class
parent
aaa60c6778
commit
df99a0c180
@ -1,20 +1,37 @@
|
||||
#ifndef USB_DEVICE_H
|
||||
#define USB_DEVICE_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "usbd_hid_composite_if.h"
|
||||
#include "usbd_report.h"
|
||||
|
||||
class USB_Device
|
||||
{
|
||||
private:
|
||||
|
||||
USBD_HID_Joystick_Report report;
|
||||
|
||||
public:
|
||||
USB_Device();
|
||||
|
||||
void begin();
|
||||
void end();
|
||||
static const int16_t usb_joystick_x = 511;
|
||||
static const int16_t usb_joystick_y = 511;
|
||||
static const int16_t usb_joystick_r = 511;
|
||||
|
||||
USB_Device() {}
|
||||
|
||||
void begin();
|
||||
void end();
|
||||
|
||||
void button(uint8_t button, bool val);
|
||||
void dpad(uint8_t dir);
|
||||
|
||||
void joystick_left(uint16_t x, uint16_t y);
|
||||
void joystick_right(uint16_t x, uint16_t y);
|
||||
|
||||
void trigger_left(uint16_t val);
|
||||
void trigger_right(uint16_t val);
|
||||
|
||||
void sendReport();
|
||||
};
|
||||
|
||||
#endif
|
@ -0,0 +1,26 @@
|
||||
#ifndef USBD_REPORT_H
|
||||
#define USBD_REPORT_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
//#define HID_CUSTOM_REPORT_DESC_SIZE 34U
|
||||
#define HID_JOYSTICK_REPORT_DESC_SIZE 89U
|
||||
|
||||
// USB Custom Report Descriptor
|
||||
//extern uint8_t USBD_HID_CUSTOM_ReportDesc[HID_CUSTOM_REPORT_DESC_SIZE];
|
||||
extern uint8_t USBD_HID_Joystick_ReportDesc[HID_JOYSTICK_REPORT_DESC_SIZE];
|
||||
|
||||
struct __attribute__((packed)) USBD_HID_Joystick_Report
|
||||
{
|
||||
uint8_t reportID = 20;
|
||||
uint32_t buttons;
|
||||
unsigned hat:4;
|
||||
unsigned x:10;
|
||||
unsigned y:10;
|
||||
unsigned rx:10;
|
||||
unsigned ry:10;
|
||||
unsigned trigger_left:10;
|
||||
unsigned trigger_right:10;
|
||||
};
|
||||
|
||||
#endif
|
@ -0,0 +1,80 @@
|
||||
#include "usbd_report.h"
|
||||
|
||||
#include "usbd_descriptors.h"
|
||||
#include "usbd_def.h"
|
||||
|
||||
#include "hid_def.h"
|
||||
/*
|
||||
__ALIGN_BEGIN uint8_t USBD_HID_CUSTOM_ReportDesc[] __ALIGN_END = {
|
||||
HID_USAGE_PAGE(GENERIC_DESKTOP),
|
||||
HID_USAGE(JOYSTICK),
|
||||
HID_COLLECTION(APPLICATION),
|
||||
HID_COLLECTION(PHYSICAL),
|
||||
HID_USAGE_PAGE(GENERIC_DESKTOP),
|
||||
HID_USAGE(X),
|
||||
HID_USAGE(Y),
|
||||
HID_USAGE(Z),
|
||||
HID_LOGICAL_MINIMUM(1, 0),
|
||||
HID_LOGICAL_MAXIMUM(2, 1024),
|
||||
HID_PHYSICAL_MINIMUM(1, 0),
|
||||
HID_PHYSICAL_MAXIMUM(2, 1024),
|
||||
HID_REPORT_SIZE(16),
|
||||
HID_REPORT_COUNT(3),
|
||||
HID_INPUT(DATA, VARIABLE, ABSOLUTE),
|
||||
HID_END_COLLECTION(PHYSICAL),
|
||||
HID_END_COLLECTION(APPLICATION)
|
||||
};
|
||||
*/
|
||||
__ALIGN_BEGIN uint8_t USBD_HID_Joystick_ReportDesc[] __ALIGN_END = {
|
||||
HID_USAGE_PAGE(GENERIC_DESKTOP),
|
||||
HID_USAGE(JOYSTICK),
|
||||
HID_COLLECTION(APPLICATION),
|
||||
|
||||
HID_REPORT_ID(20), // HID Joystick Report ID
|
||||
|
||||
HID_LOGICAL_MINIMUM(1, 0),
|
||||
HID_LOGICAL_MAXIMUM(1, 1),
|
||||
HID_REPORT_SIZE(1),
|
||||
HID_REPORT_COUNT(32),
|
||||
|
||||
HID_USAGE_PAGE(BUTTON),
|
||||
HID_USAGE_MINIMUM(1, 0),
|
||||
HID_USAGE_MAXIMUM(1, 32),
|
||||
HID_REPORT_SIZE(1),
|
||||
HID_REPORT_COUNT(32),
|
||||
HID_INPUT(DATA, VARIABLE, ABSOLUTE),
|
||||
|
||||
HID_USAGE_PAGE(GENERIC_DESKTOP),
|
||||
HID_LOGICAL_MINIMUM(1, 0),
|
||||
HID_LOGICAL_MAXIMUM(1, 7),
|
||||
HID_PHYSICAL_MINIMUM(1, 0),
|
||||
HID_PHYSICAL_MAXIMUM(2, 315),
|
||||
HID_REPORT_SIZE(4),
|
||||
HID_REPORT_COUNT(1),
|
||||
HID_USAGE(HAT_SWITCH),
|
||||
HID_INPUT(DATA, VARIABLE, ABSOLUTE),
|
||||
|
||||
HID_USAGE_PAGE(GENERIC_DESKTOP),
|
||||
HID_USAGE(POINTER),
|
||||
HID_COLLECTION(PHYSICAL),
|
||||
HID_USAGE(X),
|
||||
HID_USAGE(Y),
|
||||
HID_USAGE(RX),
|
||||
HID_USAGE(RY),
|
||||
HID_LOGICAL_MINIMUM(1, 0),
|
||||
HID_LOGICAL_MAXIMUM(2, 1022),
|
||||
HID_REPORT_SIZE(10),
|
||||
HID_REPORT_COUNT(4),
|
||||
HID_INPUT(DATA, VARIABLE, ABSOLUTE),
|
||||
HID_END_COLLECTION(PHYSICAL),
|
||||
|
||||
HID_USAGE(Z),
|
||||
HID_USAGE(RZ),
|
||||
HID_LOGICAL_MINIMUM(1, 0),
|
||||
HID_LOGICAL_MAXIMUM(2, 1022),
|
||||
HID_REPORT_SIZE(10),
|
||||
HID_REPORT_COUNT(2),
|
||||
HID_INPUT(DATA, VARIABLE, ABSOLUTE),
|
||||
|
||||
HID_END_COLLECTION(APPLICATION)
|
||||
};
|
Loading…
Reference in New Issue