139 lines
3.6 KiB
C
139 lines
3.6 KiB
C
#ifndef usb_serial_h__
|
|
#define usb_serial_h__
|
|
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"{
|
|
#endif
|
|
|
|
/**************************************************************************
|
|
*
|
|
* Configurable Options
|
|
*
|
|
**************************************************************************/
|
|
|
|
#define VENDOR_ID 0x16C0
|
|
#define PRODUCT_ID 0x0482
|
|
#define TRANSMIT_FLUSH_TIMEOUT 4 /* in milliseconds */
|
|
#define TRANSMIT_TIMEOUT 25 /* in milliseconds */
|
|
|
|
|
|
/**************************************************************************
|
|
*
|
|
* Endpoint Buffer Configuration
|
|
*
|
|
**************************************************************************/
|
|
|
|
// These buffer sizes are best for most applications, but perhaps if you
|
|
// want more buffering on some endpoint at the expense of others, this
|
|
// is where you can make such changes. The AT90USB162 has only 176 bytes
|
|
// of DPRAM (USB buffers) and only endpoints 3 & 4 can double buffer.
|
|
|
|
|
|
// 0: control 32 64
|
|
// 1: debug IN 64 64x2
|
|
// 2: debug OUT 32 32x2
|
|
// 3: keyboard IN 8x2 8x2
|
|
// 4: mouse + joystick IN (IDs) 16x2 16x2
|
|
// 5: joystick 16x2
|
|
// 6:
|
|
|
|
#if defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
|
|
|
|
// 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.
|
|
|
|
#define STR_PRODUCT L"Teensy Keyboard/Mouse/Joystick"
|
|
#define ENDPOINT0_SIZE 64
|
|
|
|
#define DEBUG_INTERFACE 2
|
|
#define DEBUG_TX_ENDPOINT 1
|
|
#define DEBUG_TX_SIZE 64
|
|
#define DEBUG_TX_BUFFER EP_DOUBLE_BUFFER
|
|
#define DEBUG_TX_INTERVAL 1
|
|
#define DEBUG_RX_ENDPOINT 2
|
|
#define DEBUG_RX_SIZE 32
|
|
#define DEBUG_RX_BUFFER EP_DOUBLE_BUFFER
|
|
#define DEBUG_RX_INTERVAL 2
|
|
|
|
#define KEYBOARD_INTERFACE 0
|
|
#define KEYBOARD_ENDPOINT 3
|
|
#define KEYBOARD_SIZE 8
|
|
#define KEYBOARD_BUFFER EP_DOUBLE_BUFFER
|
|
#define KEYBOARD_INTERVAL 1
|
|
|
|
#define MOUSE_INTERFACE 1
|
|
#define MOUSE_ENDPOINT 4
|
|
#define MOUSE_SIZE 8
|
|
#define MOUSE_BUFFER EP_DOUBLE_BUFFER
|
|
#define MOUSE_INTERVAL 1
|
|
|
|
#define JOYSTICK_INTERFACE 3
|
|
#define JOYSTICK_ENDPOINT 5
|
|
#define JOYSTICK_SIZE 16
|
|
#define JOYSTICK_BUFFER EP_DOUBLE_BUFFER
|
|
#define JOYSTICK_INTERVAL 2
|
|
|
|
#define NUM_ENDPOINTS 7
|
|
#define NUM_INTERFACE 4
|
|
|
|
#elif defined(__AVR_AT90USB162__)
|
|
|
|
#define STR_PRODUCT L"Teensy Keyboard/Mouse"
|
|
#define ENDPOINT0_SIZE 32
|
|
|
|
#define DEBUG_INTERFACE 2
|
|
#define DEBUG_TX_ENDPOINT 1
|
|
#define DEBUG_TX_SIZE 64
|
|
#define DEBUG_TX_BUFFER EP_SINGLE_BUFFER
|
|
#define DEBUG_TX_INTERVAL 2
|
|
#define DEBUG_RX_ENDPOINT 2
|
|
#define DEBUG_RX_SIZE 32
|
|
#define DEBUG_RX_BUFFER EP_SINGLE_BUFFER
|
|
#define DEBUG_RX_INTERVAL 8
|
|
|
|
#define KEYBOARD_INTERFACE 0
|
|
#define KEYBOARD_ENDPOINT 3
|
|
#define KEYBOARD_SIZE 8
|
|
#define KEYBOARD_BUFFER EP_DOUBLE_BUFFER
|
|
#define KEYBOARD_INTERVAL 1
|
|
|
|
#define MOUSE_INTERFACE 1
|
|
#define MOUSE_ENDPOINT 4
|
|
#define MOUSE_SIZE 8
|
|
#define MOUSE_BUFFER EP_DOUBLE_BUFFER
|
|
#define MOUSE_INTERVAL 8
|
|
|
|
#define NUM_ENDPOINTS 5
|
|
#define NUM_INTERFACE 3
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// setup
|
|
void usb_init(void); // initialize everything
|
|
void usb_shutdown(void); // shut off USB
|
|
|
|
// variables
|
|
extern volatile uint8_t usb_configuration;
|
|
extern volatile uint8_t usb_suspended;
|
|
extern volatile uint8_t debug_flush_timer;
|
|
extern uint8_t keyboard_report_data[];
|
|
extern uint8_t keyboard_idle_count;
|
|
extern volatile uint8_t keyboard_leds;
|
|
extern uint8_t mouse_buttons;
|
|
#ifdef JOYSTICK_INTERFACE
|
|
extern uint8_t joystick_report_data[12];
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif
|