I've been using this program for years on Teensy 3.2 using that USB_EVERYTHING configuration.
It receives packets over RawHID parses them and sends back corresponding keyboard inputs.
Source code is there: https://github.com/Slion/SharpLibMicroInput
Now I'm trying to port it to Teensy 4.0 which does not have that USB_EVERYTHING configuration out-of-the-box and it does not compile if you just enable it.
See: https://forum.pjrc.com/threads/66162-Using-multiple-USB-Types
So I was trying to create my own configuration but I must have done something wrong.
To start with once I flashed it I need to reset the board to be able to reprogram it. I guess it somehow breaks the Serial Emulation which I suppose is used to upload firmware.
Moreover my program kind of works sometimes but is also full of bugs with a mind of its own, like if the RawHID data it receives is being corrupted.
Here is my configuration. Can you spot anything wrong with it?
It receives packets over RawHID parses them and sends back corresponding keyboard inputs.
Source code is there: https://github.com/Slion/SharpLibMicroInput
Now I'm trying to port it to Teensy 4.0 which does not have that USB_EVERYTHING configuration out-of-the-box and it does not compile if you just enable it.
See: https://forum.pjrc.com/threads/66162-Using-multiple-USB-Types
So I was trying to create my own configuration but I must have done something wrong.
To start with once I flashed it I need to reset the board to be able to reprogram it. I guess it somehow breaks the Serial Emulation which I suppose is used to upload firmware.
Moreover my program kind of works sometimes but is also full of bugs with a mind of its own, like if the RawHID data it receives is being corrupted.
Here is my configuration. Can you spot anything wrong with it?
Code:
#define VENDOR_ID 0x16C0
#define PRODUCT_ID 0x0476
#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 8
#define NUM_USB_BUFFERS 32
#define NUM_INTERFACE 6
#define SEREMU_INTERFACE 0 // Serial emulation
#define SEREMU_TX_ENDPOINT 2
#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 RAWHID_INTERFACE 1 // RawHID
#define RAWHID_TX_ENDPOINT 3
#define RAWHID_TX_SIZE 64
#define RAWHID_TX_INTERVAL 1
#define RAWHID_RX_ENDPOINT 4
#define RAWHID_RX_SIZE 64
#define RAWHID_RX_INTERVAL 1
#define KEYBOARD_INTERFACE 2 // Keyboard
#define KEYBOARD_ENDPOINT 5
#define KEYBOARD_SIZE 8
#define KEYBOARD_INTERVAL 1
#define KEYMEDIA_INTERFACE 3 // Keyboard Media Keys
#define KEYMEDIA_ENDPOINT 6
#define KEYMEDIA_SIZE 8
#define KEYMEDIA_INTERVAL 4
#define MOUSE_INTERFACE 4 // Mouse
#define MOUSE_ENDPOINT 7
#define MOUSE_SIZE 8
#define MOUSE_INTERVAL 1
#define JOYSTICK_INTERFACE 5 // Joystick
#define JOYSTICK_ENDPOINT 8
#define JOYSTICK_SIZE 12 // 12 = normal, 64 = extreme joystick
#define JOYSTICK_INTERVAL 2
// Serial emulation endpoint RX and TX
#define ENDPOINT2_CONFIG ENDPOINT_RECEIVE_INTERRUPT + ENDPOINT_TRANSMIT_INTERRUPT
// Raw HID endpoints:
#define ENDPOINT3_CONFIG ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT // Transmit only
#define ENDPOINT4_CONFIG ENDPOINT_RECEIVE_INTERRUPT + ENDPOINT_TRANSMIT_UNUSED // Receive only
// Inputs
#define ENDPOINT5_CONFIG ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT
#define ENDPOINT6_CONFIG ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT
#define ENDPOINT7_CONFIG ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT
#define ENDPOINT8_CONFIG ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT