The code posted on pastbin (
ct_hidraw.ino) is my crude implementation for handling data received and sent via USB in RAWHID mode. Uncommented code is what works, commented code does not work. Although I tried something useful by changing the usb_desc.h file to support 128 bytes, I was not successful:
Modified part of usb_desc.h:
********************************
#elif defined(USB_RAWHID)
#define VENDOR_ID 0x16C0
#define PRODUCT_ID 0x0486
#define RAWHID_USAGE_PAGE 0xFFAB // recommended: 0xFF00 to 0xFFFF
#define RAWHID_USAGE 0x0200 // recommended: 0x0100 to 0xFFFF
#define MANUFACTURER_NAME {'T','e','e','n','s','y','d','u','i','n','o'}
#define MANUFACTURER_NAME_LEN 11
#define PRODUCT_NAME {'T','e','e','n','s','y','d','u','i','n','o',' ','R','a','w','H','I','D'}
#define PRODUCT_NAME_LEN 18
#define EP0_SIZE 64
#define NUM_ENDPOINTS 4
#define NUM_USB_BUFFERS 12
#define NUM_INTERFACE 2
#define RAWHID_INTERFACE 0 // RawHID
#define RAWHID_TX_ENDPOINT 3
// #define RAWHID_TX_ENDPOINT 2
#define RAWHID_TX_SIZE 64
// #define RAWHID_TX_SIZE 128
#define RAWHID_TX_INTERVAL 1
#define RAWHID_RX_ENDPOINT 4
// #define RAWHID_RX_ENDPOINT 2
#define RAWHID_RX_SIZE 64
// #define RAWHID_RX_SIZE 128
#define RAWHID_RX_INTERVAL 1
#define SEREMU_INTERFACE 1 // Serial emulation
#define SEREMU_TX_ENDPOINT 1
#define SEREMU_TX_SIZE 64
#define SEREMU_TX_INTERVAL 1
#define SEREMU_RX_ENDPOINT 2
#define SEREMU_RX_SIZE 32
#define SEREMU_RX_INTERVAL 2
#define ENDPOINT1_CONFIG ENDPOINT_TRANSIMIT_ONLY
#define ENDPOINT2_CONFIG ENDPOINT_RECEIVE_ONLY
#define ENDPOINT3_CONFIG ENDPOINT_TRANSIMIT_ONLY
#define ENDPOINT4_CONFIG ENDPOINT_RECEIVE_ONLY
********************************
I tried to change the values of the lines where the following definitions are: RAWHID_TX_ENDPOINT, RAWHID_TX_SIZE, RAWHID_RX_ENDPOINT and RAWHID_RX_SIZE, what I had as an answer were just crashes.