More preparation for NKRO USB for arm
- Added NKRO descriptor - Added NKRO HID descriptor - Updated boot HID descriptor - Fixed many bugs with the pjrc ARM usb stack (with USB HID)
This commit is contained in:
parent
55892cedc1
commit
4255a99fcc
8 changed files with 1112 additions and 712 deletions
|
@ -32,105 +32,83 @@
|
|||
#ifndef _usb_desc_h_
|
||||
#define _usb_desc_h_
|
||||
|
||||
// This header is NOT meant to be included when compiling
|
||||
// user sketches in Arduino. The low-level functions
|
||||
// provided by usb_dev.c are meant to be called only by
|
||||
// code which provides higher-level interfaces to the user.
|
||||
// ----- Includes -----
|
||||
|
||||
// Compiler Includes
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include "output_com.h"
|
||||
|
||||
// Local Includes
|
||||
#include <output_com.h>
|
||||
|
||||
|
||||
|
||||
// ----- Defines -----
|
||||
|
||||
#define ENDPOINT_UNUSED 0x00
|
||||
#define ENDPOINT_TRANSIMIT_ONLY 0x15
|
||||
#define ENDPOINT_RECEIVE_ONLY 0x19
|
||||
#define ENDPOINT_TRANSMIT_AND_RECEIVE 0x1D
|
||||
|
||||
/*
|
||||
To modify a USB Type to have different interfaces, start in this
|
||||
file. Delete the XYZ_INTERFACE lines for any interfaces you
|
||||
wish to remove, and copy them from another USB Type for any you
|
||||
want to add.
|
||||
|
||||
Give each interface a unique number, and edit NUM_INTERFACE to
|
||||
reflect the number of interfaces.
|
||||
|
||||
Within each interface, make sure it uses a unique set of endpoints.
|
||||
Edit NUM_ENDPOINTS to be at least the largest endpoint number used.
|
||||
Then edit the ENDPOINT*_CONFIG lines so each endpoint is configured
|
||||
the proper way (transmit, receive, or both).
|
||||
|
||||
The CONFIG_DESC_SIZE and any XYZ_DESC_OFFSET numbers must be
|
||||
edited to the correct sizes. See usb_desc.c for the giant array
|
||||
of bytes. Someday these may be done automatically..... (but how?)
|
||||
|
||||
If you are using existing interfaces, the code in each file should
|
||||
automatically adapt to the changes you specify. If you need to
|
||||
create a new type of interface, you'll need to write the code which
|
||||
sends and receives packets, and presents an API to the user.
|
||||
|
||||
Finally, edit usb_inst.cpp, which creats instances of the C++
|
||||
objects for each combination.
|
||||
|
||||
Some operating systems, especially Windows, may cache USB device
|
||||
info. Changes to the device name may not update on the same
|
||||
computer unless the vendor or product ID numbers change, or the
|
||||
"bcdDevice" revision code is increased.
|
||||
|
||||
If these instructions are missing steps or could be improved, please
|
||||
let me know? http://forum.pjrc.com/forums/4-Suggestions-amp-Bug-Reports
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define DEVICE_CLASS 0xEF
|
||||
#define DEVICE_SUBCLASS 0x02
|
||||
#define DEVICE_PROTOCOL 0x01
|
||||
#define DEVICE_CLASS 0x03 // 0x03 = HID Class
|
||||
#define DEVICE_SUBCLASS 0x00
|
||||
#define DEVICE_PROTOCOL 0x00
|
||||
#define EP0_SIZE 64
|
||||
#define NUM_ENDPOINTS 6
|
||||
#define NUM_ENDPOINTS 5
|
||||
#define NUM_USB_BUFFERS 30
|
||||
#define NUM_INTERFACE 4
|
||||
|
||||
#define CDC_IAD_DESCRIPTOR 1
|
||||
#define CDC_STATUS_INTERFACE 0
|
||||
#define CDC_DATA_INTERFACE 1 // Serial
|
||||
#define CDC_ACM_ENDPOINT 2
|
||||
#define CDC_RX_ENDPOINT 3
|
||||
#define CDC_TX_ENDPOINT 4
|
||||
#define CDC_ACM_SIZE 16
|
||||
#define CDC_RX_SIZE 64
|
||||
#define CDC_TX_SIZE 64
|
||||
|
||||
#define KEYBOARD_INTERFACE 2 // Keyboard
|
||||
#define KEYBOARD_INTERFACE 0 // Keyboard
|
||||
#define KEYBOARD_ENDPOINT 1
|
||||
#define KEYBOARD_SIZE 8
|
||||
#define KEYBOARD_INTERVAL 1
|
||||
|
||||
#define MOUSE_INTERFACE 3 // Mouse
|
||||
#define MOUSE_ENDPOINT 5
|
||||
#define NKRO_KEYBOARD_INTERFACE 1 // NKRO Keyboard
|
||||
#define NKRO_KEYBOARD_ENDPOINT 2
|
||||
#define NKRO_KEYBOARD_SIZE 128
|
||||
#define NKRO_KEYBOARD_INTERVAL 1
|
||||
|
||||
#define CDC_IAD_DESCRIPTOR 1
|
||||
#define CDC_STATUS_INTERFACE 2
|
||||
#define CDC_DATA_INTERFACE 3 // Serial
|
||||
#define CDC_ACM_ENDPOINT 3
|
||||
#define CDC_RX_ENDPOINT 4
|
||||
#define CDC_TX_ENDPOINT 5
|
||||
#define CDC_ACM_SIZE 16
|
||||
#define CDC_RX_SIZE 64
|
||||
#define CDC_TX_SIZE 64
|
||||
|
||||
#define MOUSE_INTERFACE 4 // Mouse
|
||||
#define MOUSE_ENDPOINT 6
|
||||
#define MOUSE_SIZE 8
|
||||
#define MOUSE_INTERVAL 2
|
||||
|
||||
#define JOYSTICK_INTERFACE 4 // Joystick
|
||||
#define JOYSTICK_ENDPOINT 6
|
||||
#define JOYSTICK_INTERFACE 5 // Joystick
|
||||
#define JOYSTICK_ENDPOINT 7
|
||||
#define JOYSTICK_SIZE 16
|
||||
#define JOYSTICK_INTERVAL 1
|
||||
|
||||
#define KEYBOARD_DESC_OFFSET (9+8 + 9+5+5+4+5+7+9+7+7 + 9)
|
||||
#define MOUSE_DESC_OFFSET (9+8 + 9+5+5+4+5+7+9+7+7 + 9+9+7 + 9)
|
||||
#define JOYSTICK_DESC_OFFSET (9+8 + 9+5+5+4+5+7+9+7+7 + 9+9+7 + 9+9+7 + 9)
|
||||
#define CONFIG_DESC_SIZE (9+8 + 9+5+5+4+5+7+9+7+7 + 9+9+7 + 9+9+7 + 9+9+7)
|
||||
#define KEYBOARD_DESC_OFFSET (9 + 9)
|
||||
#define NKRO_KEYBOARD_DESC_OFFSET (9 + 9+9+7 + 9)
|
||||
#define SERIAL_CDC_DESC_OFFSET (9 + 9+9+7 + 9+9+7 + 8)
|
||||
#define CONFIG_DESC_SIZE (9 + 9+9+7 + 9+9+7 + 8+9+5+5+4+5+7+9+7+7)
|
||||
|
||||
// XXX Unused
|
||||
#define MOUSE_DESC_OFFSET (9 + 9+9+7 + 9+9+7 + 8+9+5+5+4+5+7+9+7+7 + 9)
|
||||
#define JOYSTICK_DESC_OFFSET (9 + 9+9+7 + 9+9+7 + 8+9+5+5+4+5+7+9+7+7 + 9+9+7 + 9)
|
||||
|
||||
#define ENDPOINT1_CONFIG ENDPOINT_TRANSIMIT_ONLY
|
||||
#define ENDPOINT2_CONFIG ENDPOINT_TRANSIMIT_ONLY
|
||||
#define ENDPOINT3_CONFIG ENDPOINT_RECEIVE_ONLY
|
||||
#define ENDPOINT4_CONFIG ENDPOINT_TRANSIMIT_ONLY
|
||||
#define ENDPOINT3_CONFIG ENDPOINT_TRANSIMIT_ONLY
|
||||
#define ENDPOINT4_CONFIG ENDPOINT_RECEIVE_ONLY
|
||||
#define ENDPOINT5_CONFIG ENDPOINT_TRANSIMIT_ONLY
|
||||
#define ENDPOINT6_CONFIG ENDPOINT_TRANSIMIT_ONLY
|
||||
#define ENDPOINT7_CONFIG ENDPOINT_TRANSIMIT_ONLY
|
||||
|
||||
|
||||
// NUM_ENDPOINTS = number of non-zero endpoints (0 to 15)
|
||||
extern const uint8_t usb_endpoint_config_table[NUM_ENDPOINTS];
|
||||
|
||||
// ----- Enumerations -----
|
||||
|
||||
typedef struct {
|
||||
uint16_t wValue;
|
||||
|
@ -139,6 +117,13 @@ typedef struct {
|
|||
uint16_t length;
|
||||
} usb_descriptor_list_t;
|
||||
|
||||
|
||||
|
||||
// ----- Variables -----
|
||||
|
||||
// NUM_ENDPOINTS = number of non-zero endpoints (0 to 15)
|
||||
extern const uint8_t usb_endpoint_config_table[NUM_ENDPOINTS];
|
||||
|
||||
extern const usb_descriptor_list_t usb_descriptor_list[];
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue