2014-02-03 00:19:58 +00:00
/* Teensyduino Core Library
* http : //www.pjrc.com/teensy/
* Copyright ( c ) 2013 PJRC . COM , LLC .
2014-03-31 08:07:48 +00:00
* Modified by Jacob Alexander ( 2013 - 2014 )
2014-02-03 00:19:58 +00:00
*
* Permission is hereby granted , free of charge , to any person obtaining
* a copy of this software and associated documentation files ( the
* " Software " ) , to deal in the Software without restriction , including
* without limitation the rights to use , copy , modify , merge , publish ,
* distribute , sublicense , and / or sell copies of the Software , and to
* permit persons to whom the Software is furnished to do so , subject to
* the following conditions :
*
2014-03-31 08:07:48 +00:00
* 1. The above copyright notice and this permission notice shall be
2014-02-03 00:19:58 +00:00
* included in all copies or substantial portions of the Software .
*
2014-03-31 08:07:48 +00:00
* 2. If the Software is incorporated into a build system that allows
2014-02-03 00:19:58 +00:00
* selection among a list of target devices , then similar target
* devices manufactured by PJRC . COM must be included in the list of
* target devices and selectable in the same manner .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND ,
* EXPRESS OR IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY , FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT . IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER LIABILITY , WHETHER IN AN
* ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM , OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE .
*/
2013-01-27 06:47:52 +00:00
# ifndef _usb_desc_h_
# define _usb_desc_h_
2014-09-28 23:44:57 +00:00
// ----- Includes -----
2013-01-27 06:47:52 +00:00
2014-09-28 23:44:57 +00:00
// Compiler Includes
2013-01-27 06:47:52 +00:00
# include <stdint.h>
# include <stddef.h>
2014-09-28 23:44:57 +00:00
// Local Includes
# include <output_com.h>
2014-02-03 05:12:20 +00:00
2014-09-28 23:44:57 +00:00
// ----- Defines -----
2014-02-03 05:12:20 +00:00
2014-09-28 23:44:57 +00:00
# define ENDPOINT_UNUSED 0x00
# define ENDPOINT_TRANSIMIT_ONLY 0x15
# define ENDPOINT_RECEIVE_ONLY 0x19
# define ENDPOINT_TRANSMIT_AND_RECEIVE 0x1D
2014-02-03 05:12:20 +00:00
2013-01-27 06:47:52 +00:00
2014-10-01 07:16:14 +00:00
# define DEVICE_CLASS 0x00 // Keep 0x00 to indicate each sub device will indicate what it is
2014-09-28 23:44:57 +00:00
# define DEVICE_SUBCLASS 0x00
# define DEVICE_PROTOCOL 0x00
2014-06-26 07:54:39 +00:00
# define EP0_SIZE 64
2014-09-28 23:44:57 +00:00
# define NUM_ENDPOINTS 5
2014-06-26 07:54:39 +00:00
# define NUM_USB_BUFFERS 30
# define NUM_INTERFACE 4
2014-09-28 23:44:57 +00:00
# define KEYBOARD_INTERFACE 0 // Keyboard
# define KEYBOARD_ENDPOINT 1
# define KEYBOARD_SIZE 8
# define KEYBOARD_INTERVAL 1
# define NKRO_KEYBOARD_INTERFACE 1 // NKRO Keyboard
# define NKRO_KEYBOARD_ENDPOINT 2
2014-10-02 06:54:08 +00:00
# define NKRO_KEYBOARD_SIZE 64
2014-09-28 23:44:57 +00:00
# define NKRO_KEYBOARD_INTERVAL 1
2014-06-26 07:54:39 +00:00
# define CDC_IAD_DESCRIPTOR 1
2014-09-28 23:44:57 +00:00
# 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
2014-06-26 07:54:39 +00:00
# define CDC_ACM_SIZE 16
# define CDC_RX_SIZE 64
# define CDC_TX_SIZE 64
2014-09-28 23:44:57 +00:00
# define MOUSE_INTERFACE 4 // Mouse
# define MOUSE_ENDPOINT 6
2014-06-26 07:54:39 +00:00
# define MOUSE_SIZE 8
# define MOUSE_INTERVAL 2
2014-09-28 23:44:57 +00:00
# define JOYSTICK_INTERFACE 5 // Joystick
# define JOYSTICK_ENDPOINT 7
2014-06-26 07:54:39 +00:00
# define JOYSTICK_SIZE 16
# define JOYSTICK_INTERVAL 1
2014-03-31 08:07:48 +00:00
2014-09-28 23:44:57 +00:00
# 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)
2014-03-31 08:07:48 +00:00
2013-01-27 06:47:52 +00:00
# define ENDPOINT1_CONFIG ENDPOINT_TRANSIMIT_ONLY
# define ENDPOINT2_CONFIG ENDPOINT_TRANSIMIT_ONLY
2014-09-28 23:44:57 +00:00
# define ENDPOINT3_CONFIG ENDPOINT_TRANSIMIT_ONLY
# define ENDPOINT4_CONFIG ENDPOINT_RECEIVE_ONLY
2013-01-27 06:47:52 +00:00
# define ENDPOINT5_CONFIG ENDPOINT_TRANSIMIT_ONLY
2014-02-03 05:12:20 +00:00
# define ENDPOINT6_CONFIG ENDPOINT_TRANSIMIT_ONLY
2014-09-28 23:44:57 +00:00
# define ENDPOINT7_CONFIG ENDPOINT_TRANSIMIT_ONLY
2013-01-27 06:47:52 +00:00
2014-09-28 23:44:57 +00:00
// ----- Enumerations -----
2013-01-27 06:47:52 +00:00
typedef struct {
uint16_t wValue ;
uint16_t wIndex ;
const uint8_t * addr ;
uint16_t length ;
} usb_descriptor_list_t ;
2014-09-28 23:44:57 +00:00
// ----- Variables -----
// NUM_ENDPOINTS = number of non-zero endpoints (0 to 15)
extern const uint8_t usb_endpoint_config_table [ NUM_ENDPOINTS ] ;
2013-01-27 06:47:52 +00:00
extern const usb_descriptor_list_t usb_descriptor_list [ ] ;
# endif
2013-02-02 04:35:12 +00:00