/*++
RioGamepad — shared definitions for the virtual HID gamepad driver and its
user-mode client (the RIOJoy tray app's HID feeder).

The input report is fixed-size and has no report ID:
    bytes  0..11  : 6 axes (X,Y,Z,Rx,Ry,Rz), each unsigned 16-bit little-endian
    byte   12     : low nibble = hat (0..3; 0x0F = centered/null), high nibble pad
    bytes  13..24 : 96 button bits (button N at byte 13 + (N-1)/8, bit (N-1)%8)
--*/

#pragma once

//
// Device interface GUID the user-mode client opens to submit reports.
// {b6a3f1c2-7e84-4d2a-9c1f-2a5e8d3b6071}
//
DEFINE_GUID(GUID_DEVINTERFACE_RIOGAMEPAD,
    0xb6a3f1c2, 0x7e84, 0x4d2a, 0x9c, 0x1f, 0x2a, 0x5e, 0x8d, 0x3b, 0x60, 0x71);

//
// Custom IOCTL: submit one input report (input buffer = RIO_REPORT_SIZE bytes).
//
#define IOCTL_RIO_SUBMIT_REPORT \
    CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_WRITE_ACCESS)

//
// HID input report size in bytes: 6*2 (axes) + 1 (hat+pad) + 12 (96 buttons).
//
#define RIO_REPORT_SIZE 25

//
// Virtual device identity (matches the legacy vJoy layout's intent).
//
#define RIO_VENDOR_ID   0x1209  // pid.codes test/community VID
#define RIO_PRODUCT_ID  0x5249  // 'R','I'
#define RIO_VERSION     0x0100
