2011-07-20 15:32:52 +00:00
/* USB Keyboard Plus Debug Channel Example for Teensy USB Development Board
* http : //www.pjrc.com/teensy/usb_keyboard.html
* Copyright ( c ) 2009 PJRC . COM , LLC
*
* 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 :
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software .
*
* 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 .
*/
2010-09-30 05:17:01 +00:00
# ifndef USB_H
# define USB_H 1
2010-08-10 04:34:06 +00:00
# include <stdint.h>
2010-11-18 13:35:49 +00:00
# include <stdbool.h>
2010-09-23 11:23:50 +00:00
# include <avr/io.h>
2010-08-10 04:34:06 +00:00
2011-01-17 12:51:51 +00:00
extern bool remote_wakeup ;
extern bool suspend ;
2010-08-10 04:34:06 +00:00
void usb_init ( void ) ; // initialize everything
uint8_t usb_configured ( void ) ; // is the USB port configured
2010-11-18 13:35:49 +00:00
void usb_remote_wakeup ( void ) ;
2010-08-10 04:34:06 +00:00
# define EP_TYPE_CONTROL 0x00
# define EP_TYPE_BULK_IN 0x81
# define EP_TYPE_BULK_OUT 0x80
# define EP_TYPE_INTERRUPT_IN 0xC1
# define EP_TYPE_INTERRUPT_OUT 0xC0
# define EP_TYPE_ISOCHRONOUS_IN 0x41
# define EP_TYPE_ISOCHRONOUS_OUT 0x40
# define EP_SINGLE_BUFFER 0x02
# define EP_DOUBLE_BUFFER 0x06
# define EP_SIZE(s) ((s) == 64 ? 0x30 : \
( ( s ) = = 32 ? 0x20 : \
( ( s ) = = 16 ? 0x10 : \
0x00 ) ) )
2012-03-03 16:12:35 +00:00
# if defined (__AVR_AT90USB162__) || defined (__AVR_AT90USB82__)
# define MAX_ENDPOINT 4
# define UERST_MASK 0x1E
# else
# define MAX_ENDPOINT 6
# define UERST_MASK 0x7E
# endif
2010-08-10 04:34:06 +00:00
# define LSB(n) (n & 255)
# define MSB(n) ((n >> 8) & 255)
# if defined(__AVR_AT90USB162__)
# define HW_CONFIG()
# define PLL_CONFIG() (PLLCSR = ((1<<PLLE)|(1<<PLLP0)))
# define USB_CONFIG() (USBCON = (1<<USBE))
# define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
# elif defined(__AVR_ATmega32U4__)
# define HW_CONFIG() (UHWCON = 0x01)
# define PLL_CONFIG() (PLLCSR = 0x12)
# define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
# define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
# elif defined(__AVR_AT90USB646__)
# define HW_CONFIG() (UHWCON = 0x81)
# define PLL_CONFIG() (PLLCSR = 0x1A)
# define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
# define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
# elif defined(__AVR_AT90USB1286__)
# define HW_CONFIG() (UHWCON = 0x81)
# define PLL_CONFIG() (PLLCSR = 0x16)
# define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
# define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
# endif
// standard control endpoint request types
# define GET_STATUS 0
# define CLEAR_FEATURE 1
# define SET_FEATURE 3
# define SET_ADDRESS 5
# define GET_DESCRIPTOR 6
# define GET_CONFIGURATION 8
# define SET_CONFIGURATION 9
# define GET_INTERFACE 10
# define SET_INTERFACE 11
// HID (human interface device)
# define HID_GET_REPORT 1
# define HID_GET_IDLE 2
# define HID_GET_PROTOCOL 3
# define HID_SET_REPORT 9
# define HID_SET_IDLE 10
# define HID_SET_PROTOCOL 11
2010-10-01 13:17:55 +00:00
# define HID_REPORT_INPUT 1
# define HID_REPORT_OUTPUT 2
# define HID_REPORT_FEATURE 3
2010-08-10 04:34:06 +00:00
// CDC (communication class device)
# define CDC_SET_LINE_CODING 0x20
# define CDC_GET_LINE_CODING 0x21
# define CDC_SET_CONTROL_LINE_STATE 0x22
2010-11-18 13:35:49 +00:00
// HID feature selectors
# define DEVICE_REMOTE_WAKEUP 1
# define ENDPOINT_HALT 0
# define TEST_MODE 2
2011-02-12 15:15:51 +00:00
/*------------------------------------------------------------------*
* Keyboard descriptor setting
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
# define KBD_INTERFACE 0
# define KBD_ENDPOINT 1
# define KBD_SIZE 8
# define KBD_BUFFER EP_DOUBLE_BUFFER
# define KBD_REPORT_KEYS (KBD_SIZE - 2)
// secondary keyboard
2011-09-17 13:39:50 +00:00
# ifdef NKRO_ENABLE
2011-02-12 15:15:51 +00:00
# define KBD2_INTERFACE 4
# define KBD2_ENDPOINT 5
# define KBD2_SIZE 16
# define KBD2_BUFFER EP_DOUBLE_BUFFER
# define KBD2_REPORT_KEYS (KBD2_SIZE - 1)
# endif
2010-08-10 04:34:06 +00:00
# endif