summaryrefslogtreecommitdiff
path: root/tmk_core/protocol/vusb/usbdrv/usbdrv.h
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/protocol/vusb/usbdrv/usbdrv.h')
-rw-r--r--tmk_core/protocol/vusb/usbdrv/usbdrv.h487
1 files changed, 241 insertions, 246 deletions
diff --git a/tmk_core/protocol/vusb/usbdrv/usbdrv.h b/tmk_core/protocol/vusb/usbdrv/usbdrv.h
index 42fe163720..88a1bce76e 100644
--- a/tmk_core/protocol/vusb/usbdrv/usbdrv.h
+++ b/tmk_core/protocol/vusb/usbdrv/usbdrv.h
@@ -122,7 +122,7 @@ USB messages, even if they address another (low-speed) device on the same bus.
/* --------------------------- Module Interface ---------------------------- */
/* ------------------------------------------------------------------------- */
-#define USBDRV_VERSION 20100715
+#define USBDRV_VERSION 20100715
/* This define uniquely identifies a driver version. It is a decimal number
* constructed from the driver's release date in the form YYYYMMDD. If the
* driver's behavior or interface changes, you can use this constant to
@@ -130,9 +130,8 @@ USB messages, even if they address another (low-speed) device on the same bus.
* older than 2006-01-25.
*/
-
#ifndef USB_PUBLIC
-#define USB_PUBLIC
+# define USB_PUBLIC
#endif
/* USB_PUBLIC is used as declaration attribute for all functions exported by
* the USB driver. The default is no attribute (see above). You may define it
@@ -142,28 +141,28 @@ USB messages, even if they address another (low-speed) device on the same bus.
*/
#ifndef __ASSEMBLER__
-#ifndef uchar
-#define uchar unsigned char
-#endif
-#ifndef schar
-#define schar signed char
-#endif
+# ifndef uchar
+# define uchar unsigned char
+# endif
+# ifndef schar
+# define schar signed char
+# endif
/* shortcuts for well defined 8 bit integer types */
-#if USB_CFG_LONG_TRANSFERS /* if more than 254 bytes transfer size required */
-# define usbMsgLen_t unsigned
-#else
-# define usbMsgLen_t uchar
-#endif
+# if USB_CFG_LONG_TRANSFERS /* if more than 254 bytes transfer size required */
+# define usbMsgLen_t unsigned
+# else
+# define usbMsgLen_t uchar
+# endif
/* usbMsgLen_t is the data type used for transfer lengths. By default, it is
* defined to uchar, allowing a maximum of 254 bytes (255 is reserved for
* USB_NO_MSG below). If the usbconfig.h defines USB_CFG_LONG_TRANSFERS to 1,
* a 16 bit data type is used, allowing up to 16384 bytes (the rest is used
* for flags in the descriptor configuration).
*/
-#define USB_NO_MSG ((usbMsgLen_t)-1) /* constant meaning "no message" */
+# define USB_NO_MSG ((usbMsgLen_t)-1) /* constant meaning "no message" */
-struct usbRequest; /* forward declaration */
+struct usbRequest; /* forward declaration */
USB_PUBLIC void usbInit(void);
/* This function must be called before interrupts are enabled and the main
@@ -216,7 +215,7 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq);
* usbFunctionSetup() above, but it is called only to request USB descriptor
* data. See the documentation of usbFunctionSetup() above for more info.
*/
-#if USB_CFG_HAVE_INTRIN_ENDPOINT
+# if USB_CFG_HAVE_INTRIN_ENDPOINT
USB_PUBLIC void usbSetInterrupt(uchar *data, uchar len);
/* This function sets the message which will be sent during the next interrupt
* IN transfer. The message is copied to an internal buffer and must not exceed
@@ -224,19 +223,19 @@ USB_PUBLIC void usbSetInterrupt(uchar *data, uchar len);
* interrupt status to the host.
* If you need to transfer more bytes, use a control read after the interrupt.
*/
-#define usbInterruptIsReady() (usbTxLen1 & 0x10)
+# define usbInterruptIsReady() (usbTxLen1 & 0x10)
/* This macro indicates whether the last interrupt message has already been
* sent. If you set a new interrupt message before the old was sent, the
* message already buffered will be lost.
*/
-#if USB_CFG_HAVE_INTRIN_ENDPOINT3
+# if USB_CFG_HAVE_INTRIN_ENDPOINT3
USB_PUBLIC void usbSetInterrupt3(uchar *data, uchar len);
-#define usbInterruptIsReady3() (usbTxLen3 & 0x10)
+# define usbInterruptIsReady3() (usbTxLen3 & 0x10)
/* Same as above for endpoint 3 */
-#endif
-#endif /* USB_CFG_HAVE_INTRIN_ENDPOINT */
-#if USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH /* simplified interface for backward compatibility */
-#define usbHidReportDescriptor usbDescriptorHidReport
+# endif
+# endif /* USB_CFG_HAVE_INTRIN_ENDPOINT */
+# if USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH /* simplified interface for backward compatibility */
+# define usbHidReportDescriptor usbDescriptorHidReport
/* should be declared as: PROGMEM char usbHidReportDescriptor[]; */
/* If you implement an HID device, you need to provide a report descriptor.
* The HID report descriptor syntax is a bit complex. If you understand how
@@ -244,8 +243,8 @@ USB_PUBLIC void usbSetInterrupt3(uchar *data, uchar len);
* Descriptor Tool from usb.org, see http://www.usb.org/developers/hidpage/.
* Otherwise you should probably start with a working example.
*/
-#endif /* USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH */
-#if USB_CFG_IMPLEMENT_FN_WRITE
+# endif /* USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH */
+# if USB_CFG_IMPLEMENT_FN_WRITE
USB_PUBLIC uchar usbFunctionWrite(uchar *data, uchar len);
/* This function is called by the driver to provide a control transfer's
* payload data (control-out). It is called in chunks of up to 8 bytes. The
@@ -262,8 +261,8 @@ USB_PUBLIC uchar usbFunctionWrite(uchar *data, uchar len);
* In order to get usbFunctionWrite() called, define USB_CFG_IMPLEMENT_FN_WRITE
* to 1 in usbconfig.h and return 0xff in usbFunctionSetup()..
*/
-#endif /* USB_CFG_IMPLEMENT_FN_WRITE */
-#if USB_CFG_IMPLEMENT_FN_READ
+# endif /* USB_CFG_IMPLEMENT_FN_WRITE */
+# if USB_CFG_IMPLEMENT_FN_READ
USB_PUBLIC uchar usbFunctionRead(uchar *data, uchar len);
/* This function is called by the driver to ask the application for a control
* transfer's payload data (control-in). It is called in chunks of up to 8
@@ -274,26 +273,24 @@ USB_PUBLIC uchar usbFunctionRead(uchar *data, uchar len);
* In order to get usbFunctionRead() called, define USB_CFG_IMPLEMENT_FN_READ
* to 1 in usbconfig.h and return 0xff in usbFunctionSetup()..
*/
-#endif /* USB_CFG_IMPLEMENT_FN_READ */
+# endif /* USB_CFG_IMPLEMENT_FN_READ */
-extern uchar usbRxToken; /* may be used in usbFunctionWriteOut() below */
-#if USB_CFG_IMPLEMENT_FN_WRITEOUT
+extern uchar usbRxToken; /* may be used in usbFunctionWriteOut() below */
+# if USB_CFG_IMPLEMENT_FN_WRITEOUT
USB_PUBLIC void usbFunctionWriteOut(uchar *data, uchar len);
/* This function is called by the driver when data is received on an interrupt-
* or bulk-out endpoint. The endpoint number can be found in the global
* variable usbRxToken. You must define USB_CFG_IMPLEMENT_FN_WRITEOUT to 1 in
* usbconfig.h to get this function called.
*/
-#endif /* USB_CFG_IMPLEMENT_FN_WRITEOUT */
-#ifdef USB_CFG_PULLUP_IOPORTNAME
-#define usbDeviceConnect() ((USB_PULLUP_DDR |= (1<<USB_CFG_PULLUP_BIT)), \
- (USB_PULLUP_OUT |= (1<<USB_CFG_PULLUP_BIT)))
-#define usbDeviceDisconnect() ((USB_PULLUP_DDR &= ~(1<<USB_CFG_PULLUP_BIT)), \
- (USB_PULLUP_OUT &= ~(1<<USB_CFG_PULLUP_BIT)))
-#else /* USB_CFG_PULLUP_IOPORTNAME */
-#define usbDeviceConnect() (USBDDR &= ~(1<<USBMINUS))
-#define usbDeviceDisconnect() (USBDDR |= (1<<USBMINUS))
-#endif /* USB_CFG_PULLUP_IOPORTNAME */
+# endif /* USB_CFG_IMPLEMENT_FN_WRITEOUT */
+# ifdef USB_CFG_PULLUP_IOPORTNAME
+# define usbDeviceConnect() ((USB_PULLUP_DDR |= (1 << USB_CFG_PULLUP_BIT)), (USB_PULLUP_OUT |= (1 << USB_CFG_PULLUP_BIT)))
+# define usbDeviceDisconnect() ((USB_PULLUP_DDR &= ~(1 << USB_CFG_PULLUP_BIT)), (USB_PULLUP_OUT &= ~(1 << USB_CFG_PULLUP_BIT)))
+# else /* USB_CFG_PULLUP_IOPORTNAME */
+# define usbDeviceConnect() (USBDDR &= ~(1 << USBMINUS))
+# define usbDeviceDisconnect() (USBDDR |= (1 << USBMINUS))
+# endif /* USB_CFG_PULLUP_IOPORTNAME */
/* The macros usbDeviceConnect() and usbDeviceDisconnect() (intended to look
* like a function) connect resp. disconnect the device from the host's USB.
* If the constants USB_CFG_PULLUP_IOPORT and USB_CFG_PULLUP_BIT are defined
@@ -307,7 +304,7 @@ USB_PUBLIC void usbFunctionWriteOut(uchar *data, uchar len);
* or use cli() to disable interrupts globally.
*/
extern unsigned usbCrc16(unsigned data, uchar len);
-#define usbCrc16(data, len) usbCrc16((unsigned)(data), len)
+# define usbCrc16(data, len) usbCrc16((unsigned)(data), len)
/* This function calculates the binary complement of the data CRC used in
* USB data packets. The value is used to build raw transmit packets.
* You may want to use this function for data checksums or to verify received
@@ -315,12 +312,12 @@ extern unsigned usbCrc16(unsigned data, uchar len);
* tiny memory model.
*/
extern unsigned usbCrc16Append(unsigned data, uchar len);
-#define usbCrc16Append(data, len) usbCrc16Append((unsigned)(data), len)
+# define usbCrc16Append(data, len) usbCrc16Append((unsigned)(data), len)
/* This function is equivalent to usbCrc16() above, except that it appends
* the 2 bytes CRC (lowbyte first) in the 'data' buffer after reading 'len'
* bytes.
*/
-#if USB_CFG_HAVE_MEASURE_FRAME_LENGTH
+# if USB_CFG_HAVE_MEASURE_FRAME_LENGTH
extern unsigned usbMeasureFrameLength(void);
/* This function MUST be called IMMEDIATELY AFTER USB reset and measures 1/7 of
* the number of CPU cycles during one USB frame minus one low speed bit
@@ -329,59 +326,58 @@ extern unsigned usbMeasureFrameLength(void);
* calling this function.
* This can be used to calibrate the AVR's RC oscillator.
*/
-#endif
-extern uchar usbConfiguration;
+# endif
+extern uchar usbConfiguration;
/* This value contains the current configuration set by the host. The driver
* allows setting and querying of this variable with the USB SET_CONFIGURATION
* and GET_CONFIGURATION requests, but does not use it otherwise.
* You may want to reflect the "configured" status with a LED on the device or
* switch on high power parts of the circuit only if the device is configured.
*/
-#if USB_COUNT_SOF
-extern volatile uchar usbSofCount;
+# if USB_COUNT_SOF
+extern volatile uchar usbSofCount;
/* This variable is incremented on every SOF packet. It is only available if
* the macro USB_COUNT_SOF is defined to a value != 0.
*/
-#endif
-#if USB_CFG_CHECK_DATA_TOGGLING
-extern uchar usbCurrentDataToken;
+# endif
+# if USB_CFG_CHECK_DATA_TOGGLING
+extern uchar usbCurrentDataToken;
/* This variable can be checked in usbFunctionWrite() and usbFunctionWriteOut()
* to ignore duplicate packets.
*/
-#endif
+# endif
-#define USB_STRING_DESCRIPTOR_HEADER(stringLength) ((2*(stringLength)+2) | (3<<8))
+# define USB_STRING_DESCRIPTOR_HEADER(stringLength) ((2 * (stringLength) + 2) | (3 << 8))
/* This macro builds a descriptor header for a string descriptor given the
* string's length. See usbdrv.c for an example how to use it.
*/
-#if USB_CFG_HAVE_FLOWCONTROL
-extern volatile schar usbRxLen;
-#define usbDisableAllRequests() usbRxLen = -1
+# if USB_CFG_HAVE_FLOWCONTROL
+extern volatile schar usbRxLen;
+# define usbDisableAllRequests() usbRxLen = -1
/* Must be called from usbFunctionWrite(). This macro disables all data input
* from the USB interface. Requests from the host are answered with a NAK
* while they are disabled.
*/
-#define usbEnableAllRequests() usbRxLen = 0
+# define usbEnableAllRequests() usbRxLen = 0
/* May only be called if requests are disabled. This macro enables input from
* the USB interface after it has been disabled with usbDisableAllRequests().
*/
-#define usbAllRequestsAreDisabled() (usbRxLen < 0)
+# define usbAllRequestsAreDisabled() (usbRxLen < 0)
/* Use this macro to find out whether requests are disabled. It may be needed
* to ensure that usbEnableAllRequests() is never called when requests are
* enabled.
*/
-#endif
+# endif
-#define USB_SET_DATATOKEN1(token) usbTxBuf1[0] = token
-#define USB_SET_DATATOKEN3(token) usbTxBuf3[0] = token
+# define USB_SET_DATATOKEN1(token) usbTxBuf1[0] = token
+# define USB_SET_DATATOKEN3(token) usbTxBuf3[0] = token
/* These two macros can be used by application software to reset data toggling
* for interrupt-in endpoints 1 and 3. Since the token is toggled BEFORE
* sending data, you must set the opposite value of the token which should come
* first.
*/
-#endif /* __ASSEMBLER__ */
-
+#endif /* __ASSEMBLER__ */
/* ------------------------------------------------------------------------- */
/* ----------------- Definitions for Descriptor Properties ----------------- */
@@ -390,57 +386,57 @@ extern volatile schar usbRxLen;
* about the various methods to define USB descriptors. If you do nothing,
* the default descriptors will be used.
*/
-#define USB_PROP_IS_DYNAMIC (1 << 14)
+#define USB_PROP_IS_DYNAMIC (1 << 14)
/* If this property is set for a descriptor, usbFunctionDescriptor() will be
* used to obtain the particular descriptor. Data directly returned via
* usbMsgPtr are FLASH data by default, combine (OR) with USB_PROP_IS_RAM to
* return RAM data.
*/
-#define USB_PROP_IS_RAM (1 << 15)
+#define USB_PROP_IS_RAM (1 << 15)
/* If this property is set for a descriptor, the data is read from RAM
* memory instead of Flash. The property is used for all methods to provide
* external descriptors.
*/
-#define USB_PROP_LENGTH(len) ((len) & 0x3fff)
+#define USB_PROP_LENGTH(len) ((len)&0x3fff)
/* If a static external descriptor is used, this is the total length of the
* descriptor in bytes.
*/
/* all descriptors which may have properties: */
#ifndef USB_CFG_DESCR_PROPS_DEVICE
-#define USB_CFG_DESCR_PROPS_DEVICE 0
+# define USB_CFG_DESCR_PROPS_DEVICE 0
#endif
#ifndef USB_CFG_DESCR_PROPS_CONFIGURATION
-#define USB_CFG_DESCR_PROPS_CONFIGURATION 0
+# define USB_CFG_DESCR_PROPS_CONFIGURATION 0
#endif
#ifndef USB_CFG_DESCR_PROPS_STRINGS
-#define USB_CFG_DESCR_PROPS_STRINGS 0
+# define USB_CFG_DESCR_PROPS_STRINGS 0
#endif
#ifndef USB_CFG_DESCR_PROPS_STRING_0
-#define USB_CFG_DESCR_PROPS_STRING_0 0
+# define USB_CFG_DESCR_PROPS_STRING_0 0
#endif
#ifndef USB_CFG_DESCR_PROPS_STRING_VENDOR
-#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
+# define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
#endif
#ifndef USB_CFG_DESCR_PROPS_STRING_PRODUCT
-#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
+# define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
#endif
#ifndef USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
-#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
+# define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
#endif
#ifndef USB_CFG_DESCR_PROPS_HID
-#define USB_CFG_DESCR_PROPS_HID 0
+# define USB_CFG_DESCR_PROPS_HID 0
#endif
#if !(USB_CFG_DESCR_PROPS_HID_REPORT)
-# undef USB_CFG_DESCR_PROPS_HID_REPORT
-# if USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH /* do some backward compatibility tricks */
-# define USB_CFG_DESCR_PROPS_HID_REPORT USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH
-# else
-# define USB_CFG_DESCR_PROPS_HID_REPORT 0
-# endif
+# undef USB_CFG_DESCR_PROPS_HID_REPORT
+# if USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH /* do some backward compatibility tricks */
+# define USB_CFG_DESCR_PROPS_HID_REPORT USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH
+# else
+# define USB_CFG_DESCR_PROPS_HID_REPORT 0
+# endif
#endif
#ifndef USB_CFG_DESCR_PROPS_UNKNOWN
-#define USB_CFG_DESCR_PROPS_UNKNOWN 0
+# define USB_CFG_DESCR_PROPS_UNKNOWN 0
#endif
/* ------------------ forward declaration of descriptors ------------------- */
@@ -449,46 +445,46 @@ extern volatile schar usbRxLen;
*/
#ifndef __ASSEMBLER__
extern
-#if !(USB_CFG_DESCR_PROPS_DEVICE & USB_PROP_IS_RAM)
-PROGMEM
-#endif
-const char usbDescriptorDevice[];
+# if !(USB_CFG_DESCR_PROPS_DEVICE & USB_PROP_IS_RAM)
+ PROGMEM
+# endif
+ const char usbDescriptorDevice[];
extern
-#if !(USB_CFG_DESCR_PROPS_CONFIGURATION & USB_PROP_IS_RAM)
-PROGMEM
-#endif
-const char usbDescriptorConfiguration[];
+# if !(USB_CFG_DESCR_PROPS_CONFIGURATION & USB_PROP_IS_RAM)
+ PROGMEM
+# endif
+ const char usbDescriptorConfiguration[];
extern
-#if !(USB_CFG_DESCR_PROPS_HID_REPORT & USB_PROP_IS_RAM)
-PROGMEM
-#endif
-const char usbDescriptorHidReport[];
+# if !(USB_CFG_DESCR_PROPS_HID_REPORT & USB_PROP_IS_RAM)
+ PROGMEM
+# endif
+ const char usbDescriptorHidReport[];
extern
-#if !(USB_CFG_DESCR_PROPS_STRING_0 & USB_PROP_IS_RAM)
-PROGMEM
-#endif
-const char usbDescriptorString0[];
+# if !(USB_CFG_DESCR_PROPS_STRING_0 & USB_PROP_IS_RAM)
+ PROGMEM
+# endif
+ const char usbDescriptorString0[];
extern
-#if !(USB_CFG_DESCR_PROPS_STRING_VENDOR & USB_PROP_IS_RAM)
-PROGMEM
-#endif
-const int usbDescriptorStringVendor[];
+# if !(USB_CFG_DESCR_PROPS_STRING_VENDOR & USB_PROP_IS_RAM)
+ PROGMEM
+# endif
+ const int usbDescriptorStringVendor[];
extern
-#if !(USB_CFG_DESCR_PROPS_STRING_PRODUCT & USB_PROP_IS_RAM)
-PROGMEM
-#endif
-const int usbDescriptorStringDevice[];
+# if !(USB_CFG_DESCR_PROPS_STRING_PRODUCT & USB_PROP_IS_RAM)
+ PROGMEM
+# endif
+ const int usbDescriptorStringDevice[];
extern
-#if !(USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER & USB_PROP_IS_RAM)
-PROGMEM
-#endif
-const int usbDescriptorStringSerialNumber[];
+# if !(USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER & USB_PROP_IS_RAM)
+ PROGMEM
+# endif
+ const int usbDescriptorStringSerialNumber[];
#endif /* __ASSEMBLER__ */
@@ -496,12 +492,12 @@ const int usbDescriptorStringSerialNumber[];
/* ------------------------ General Purpose Macros ------------------------- */
/* ------------------------------------------------------------------------- */
-#define USB_CONCAT(a, b) a ## b
-#define USB_CONCAT_EXPANDED(a, b) USB_CONCAT(a, b)
+#define USB_CONCAT(a, b) a##b
+#define USB_CONCAT_EXPANDED(a, b) USB_CONCAT(a, b)
-#define USB_OUTPORT(name) USB_CONCAT(PORT, name)
-#define USB_INPORT(name) USB_CONCAT(PIN, name)
-#define USB_DDRPORT(name) USB_CONCAT(DDR, name)
+#define USB_OUTPORT(name) USB_CONCAT(PORT, name)
+#define USB_INPORT(name) USB_CONCAT(PIN, name)
+#define USB_DDRPORT(name) USB_CONCAT(DDR, name)
/* The double-define trick above lets us concatenate strings which are
* defined by macros.
*/
@@ -511,7 +507,7 @@ const int usbDescriptorStringSerialNumber[];
/* ------------------------------------------------------------------------- */
#if !defined __ASSEMBLER__ && (!defined USB_CFG_VENDOR_ID || !defined USB_CFG_DEVICE_ID)
-#warning "You should define USB_CFG_VENDOR_ID and USB_CFG_DEVICE_ID in usbconfig.h"
+# warning "You should define USB_CFG_VENDOR_ID and USB_CFG_DEVICE_ID in usbconfig.h"
/* If the user has not defined IDs, we default to obdev's free IDs.
* See USB-IDs-for-free.txt for details.
*/
@@ -519,96 +515,96 @@ const int usbDescriptorStringSerialNumber[];
/* make sure we have a VID and PID defined, byte order is lowbyte, highbyte */
#ifndef USB_CFG_VENDOR_ID
-# define USB_CFG_VENDOR_ID 0xc0, 0x16 /* = 0x16c0 = 5824 = voti.nl */
+# define USB_CFG_VENDOR_ID 0xc0, 0x16 /* = 0x16c0 = 5824 = voti.nl */
#endif
#ifndef USB_CFG_DEVICE_ID
-# if USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH
-# define USB_CFG_DEVICE_ID 0xdf, 0x05 /* = 0x5df = 1503, shared PID for HIDs */
-# elif USB_CFG_INTERFACE_CLASS == 2
-# define USB_CFG_DEVICE_ID 0xe1, 0x05 /* = 0x5e1 = 1505, shared PID for CDC Modems */
-# else
-# define USB_CFG_DEVICE_ID 0xdc, 0x05 /* = 0x5dc = 1500, obdev's free PID */
-# endif
+# if USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH
+# define USB_CFG_DEVICE_ID 0xdf, 0x05 /* = 0x5df = 1503, shared PID for HIDs */
+# elif USB_CFG_INTERFACE_CLASS == 2
+# define USB_CFG_DEVICE_ID 0xe1, 0x05 /* = 0x5e1 = 1505, shared PID for CDC Modems */
+# else
+# define USB_CFG_DEVICE_ID 0xdc, 0x05 /* = 0x5dc = 1500, obdev's free PID */
+# endif
#endif
/* Derive Output, Input and DataDirection ports from port names */
#ifndef USB_CFG_IOPORTNAME
-#error "You must define USB_CFG_IOPORTNAME in usbconfig.h, see usbconfig-prototype.h"
+# error "You must define USB_CFG_IOPORTNAME in usbconfig.h, see usbconfig-prototype.h"
#endif
-#define USBOUT USB_OUTPORT(USB_CFG_IOPORTNAME)
-#define USB_PULLUP_OUT USB_OUTPORT(USB_CFG_PULLUP_IOPORTNAME)
-#define USBIN USB_INPORT(USB_CFG_IOPORTNAME)
-#define USBDDR USB_DDRPORT(USB_CFG_IOPORTNAME)
-#define USB_PULLUP_DDR USB_DDRPORT(USB_CFG_PULLUP_IOPORTNAME)
+#define USBOUT USB_OUTPORT(USB_CFG_IOPORTNAME)
+#define USB_PULLUP_OUT USB_OUTPORT(USB_CFG_PULLUP_IOPORTNAME)
+#define USBIN USB_INPORT(USB_CFG_IOPORTNAME)
+#define USBDDR USB_DDRPORT(USB_CFG_IOPORTNAME)
+#define USB_PULLUP_DDR USB_DDRPORT(USB_CFG_PULLUP_IOPORTNAME)
-#define USBMINUS USB_CFG_DMINUS_BIT
-#define USBPLUS USB_CFG_DPLUS_BIT
-#define USBIDLE (1<<USB_CFG_DMINUS_BIT) /* value representing J state */
-#define USBMASK ((1<<USB_CFG_DPLUS_BIT) | (1<<USB_CFG_DMINUS_BIT)) /* mask for USB I/O bits */
+#define USBMINUS USB_CFG_DMINUS_BIT
+#define USBPLUS USB_CFG_DPLUS_BIT
+#define USBIDLE (1 << USB_CFG_DMINUS_BIT) /* value representing J state */
+#define USBMASK ((1 << USB_CFG_DPLUS_BIT) | (1 << USB_CFG_DMINUS_BIT)) /* mask for USB I/O bits */
/* defines for backward compatibility with older driver versions: */
-#define USB_CFG_IOPORT USB_OUTPORT(USB_CFG_IOPORTNAME)
+#define USB_CFG_IOPORT USB_OUTPORT(USB_CFG_IOPORTNAME)
#ifdef USB_CFG_PULLUP_IOPORTNAME
-#define USB_CFG_PULLUP_IOPORT USB_OUTPORT(USB_CFG_PULLUP_IOPORTNAME)
+# define USB_CFG_PULLUP_IOPORT USB_OUTPORT(USB_CFG_PULLUP_IOPORTNAME)
#endif
-#ifndef USB_CFG_EP3_NUMBER /* if not defined in usbconfig.h */
-#define USB_CFG_EP3_NUMBER 3
+#ifndef USB_CFG_EP3_NUMBER /* if not defined in usbconfig.h */
+# define USB_CFG_EP3_NUMBER 3
#endif
#ifndef USB_CFG_HAVE_INTRIN_ENDPOINT3
-#define USB_CFG_HAVE_INTRIN_ENDPOINT3 0
+# define USB_CFG_HAVE_INTRIN_ENDPOINT3 0
#endif
-#define USB_BUFSIZE 11 /* PID, 8 bytes data, 2 bytes CRC */
+#define USB_BUFSIZE 11 /* PID, 8 bytes data, 2 bytes CRC */
/* ----- Try to find registers and bits responsible for ext interrupt 0 ----- */
-#ifndef USB_INTR_CFG /* allow user to override our default */
-# if defined EICRA
-# define USB_INTR_CFG EICRA
-# else
-# define USB_INTR_CFG MCUCR
-# endif
-#endif
-#ifndef USB_INTR_CFG_SET /* allow user to override our default */
-# if defined(USB_COUNT_SOF) || defined(USB_SOF_HOOK)
-# define USB_INTR_CFG_SET (1 << ISC01) /* cfg for falling edge */
- /* If any SOF logic is used, the interrupt must be wired to D- where
- * we better trigger on falling edge
- */
-# else
-# define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) /* cfg for rising edge */
-# endif
-#endif
-#ifndef USB_INTR_CFG_CLR /* allow user to override our default */
-# define USB_INTR_CFG_CLR 0 /* no bits to clear */
-#endif
-
-#ifndef USB_INTR_ENABLE /* allow user to override our default */
-# if defined GIMSK
-# define USB_INTR_ENABLE GIMSK
-# elif defined EIMSK
-# define USB_INTR_ENABLE EIMSK
-# else
-# define USB_INTR_ENABLE GICR
-# endif
+#ifndef USB_INTR_CFG /* allow user to override our default */
+# if defined EICRA
+# define USB_INTR_CFG EICRA
+# else
+# define USB_INTR_CFG MCUCR
+# endif
+#endif
+#ifndef USB_INTR_CFG_SET /* allow user to override our default */
+# if defined(USB_COUNT_SOF) || defined(USB_SOF_HOOK)
+# define USB_INTR_CFG_SET (1 << ISC01) /* cfg for falling edge */
+ /* If any SOF logic is used, the interrupt must be wired to D- where
+ * we better trigger on falling edge
+ */
+# else
+# define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) /* cfg for rising edge */
+# endif
+#endif
+#ifndef USB_INTR_CFG_CLR /* allow user to override our default */
+# define USB_INTR_CFG_CLR 0 /* no bits to clear */
+#endif
+
+#ifndef USB_INTR_ENABLE /* allow user to override our default */
+# if defined GIMSK
+# define USB_INTR_ENABLE GIMSK
+# elif defined EIMSK
+# define USB_INTR_ENABLE EIMSK
+# else
+# define USB_INTR_ENABLE GICR
+# endif
#endif
#ifndef USB_INTR_ENABLE_BIT /* allow user to override our default */
-# define USB_INTR_ENABLE_BIT INT0
+# define USB_INTR_ENABLE_BIT INT0
#endif
-#ifndef USB_INTR_PENDING /* allow user to override our default */
-# if defined EIFR
-# define USB_INTR_PENDING EIFR
-# else
-# define USB_INTR_PENDING GIFR
-# endif
+#ifndef USB_INTR_PENDING /* allow user to override our default */
+# if defined EIFR
+# define USB_INTR_PENDING EIFR
+# else
+# define USB_INTR_PENDING GIFR
+# endif
#endif
-#ifndef USB_INTR_PENDING_BIT /* allow user to override our default */
-# define USB_INTR_PENDING_BIT INTF0
+#ifndef USB_INTR_PENDING_BIT /* allow user to override our default */
+# define USB_INTR_PENDING_BIT INTF0
#endif
/*
@@ -628,46 +624,45 @@ at90s1200, attiny11, attiny12, attiny15, attiny28: these have no RAM
/* ------------------------------------------------------------------------- */
/* USB Token values */
-#define USBPID_SETUP 0x2d
-#define USBPID_OUT 0xe1
-#define USBPID_IN 0x69
-#define USBPID_DATA0 0xc3
-#define USBPID_DATA1 0x4b
+#define USBPID_SETUP 0x2d
+#define USBPID_OUT 0xe1
+#define USBPID_IN 0x69
+#define USBPID_DATA0 0xc3
+#define USBPID_DATA1 0x4b
-#define USBPID_ACK 0xd2
-#define USBPID_NAK 0x5a
-#define USBPID_STALL 0x1e
+#define USBPID_ACK 0xd2
+#define USBPID_NAK 0x5a
+#define USBPID_STALL 0x1e
#ifndef USB_INITIAL_DATATOKEN
-#define USB_INITIAL_DATATOKEN USBPID_DATA1
+# define USB_INITIAL_DATATOKEN USBPID_DATA1
#endif
#ifndef __ASSEMBLER__
-typedef struct usbTxStatus{
- volatile uchar len;
- uchar buffer[USB_BUFSIZE];
-}usbTxStatus_t;
-
-extern usbTxStatus_t usbTxStatus1, usbTxStatus3;
-#define usbTxLen1 usbTxStatus1.len
-#define usbTxBuf1 usbTxStatus1.buffer
-#define usbTxLen3 usbTxStatus3.len
-#define usbTxBuf3 usbTxStatus3.buffer
-
-
-typedef union usbWord{
- unsigned word;
- uchar bytes[2];
-}usbWord_t;
-
-typedef struct usbRequest{
- uchar bmRequestType;
- uchar bRequest;
- usbWord_t wValue;
- usbWord_t wIndex;
- usbWord_t wLength;
-}usbRequest_t;
+typedef struct usbTxStatus {
+ volatile uchar len;
+ uchar buffer[USB_BUFSIZE];
+} usbTxStatus_t;
+
+extern usbTxStatus_t usbTxStatus1, usbTxStatus3;
+# define usbTxLen1 usbTxStatus1.len
+# define usbTxBuf1 usbTxStatus1.buffer
+# define usbTxLen3 usbTxStatus3.len
+# define usbTxBuf3 usbTxStatus3.buffer
+
+typedef union usbWord {
+ unsigned word;
+ uchar bytes[2];
+} usbWord_t;
+
+typedef struct usbRequest {
+ uchar bmRequestType;
+ uchar bRequest;
+ usbWord_t wValue;
+ usbWord_t wIndex;
+ usbWord_t wLength;
+} usbRequest_t;
/* This structure matches the 8 byte setup request */
#endif
@@ -679,56 +674,56 @@ typedef struct usbRequest{
*/
/* USB setup recipient values */
-#define USBRQ_RCPT_MASK 0x1f
-#define USBRQ_RCPT_DEVICE 0
-#define USBRQ_RCPT_INTERFACE 1
-#define USBRQ_RCPT_ENDPOINT 2
+#define USBRQ_RCPT_MASK 0x1f
+#define USBRQ_RCPT_DEVICE 0
+#define USBRQ_RCPT_INTERFACE 1
+#define USBRQ_RCPT_ENDPOINT 2
/* USB request type values */
-#define USBRQ_TYPE_MASK 0x60
-#define USBRQ_TYPE_STANDARD (0<<5)
-#define USBRQ_TYPE_CLASS (1<<5)
-#define USBRQ_TYPE_VENDOR (2<<5)
+#define USBRQ_TYPE_MASK 0x60
+#define USBRQ_TYPE_STANDARD (0 << 5)
+#define USBRQ_TYPE_CLASS (1 << 5)
+#define USBRQ_TYPE_VENDOR (2 << 5)
/* USB direction values: */
-#define USBRQ_DIR_MASK 0x80
-#define USBRQ_DIR_HOST_TO_DEVICE (0<<7)
-#define USBRQ_DIR_DEVICE_TO_HOST (1<<7)
+#define USBRQ_DIR_MASK 0x80
+#define USBRQ_DIR_HOST_TO_DEVICE (0 << 7)
+#define USBRQ_DIR_DEVICE_TO_HOST (1 << 7)
/* USB Standard Requests */
-#define USBRQ_GET_STATUS 0
-#define USBRQ_CLEAR_FEATURE 1
-#define USBRQ_SET_FEATURE 3
-#define USBRQ_SET_ADDRESS 5
-#define USBRQ_GET_DESCRIPTOR 6
-#define USBRQ_SET_DESCRIPTOR 7
+#define USBRQ_GET_STATUS 0
+#define USBRQ_CLEAR_FEATURE 1
+#define USBRQ_SET_FEATURE 3
+#define USBRQ_SET_ADDRESS 5
+#define USBRQ_GET_DESCRIPTOR 6
+#define USBRQ_SET_DESCRIPTOR 7
#define USBRQ_GET_CONFIGURATION 8
#define USBRQ_SET_CONFIGURATION 9
-#define USBRQ_GET_INTERFACE 10
-#define USBRQ_SET_INTERFACE 11
-#define USBRQ_SYNCH_FRAME 12
+#define USBRQ_GET_INTERFACE 10
+#define USBRQ_SET_INTERFACE 11
+#define USBRQ_SYNCH_FRAME 12
/* USB descriptor constants */
-#define USBDESCR_DEVICE 1
-#define USBDESCR_CONFIG 2
-#define USBDESCR_STRING 3
-#define USBDESCR_INTERFACE 4
-#define USBDESCR_ENDPOINT 5
-#define USBDESCR_HID 0x21
-#define USBDESCR_HID_REPORT 0x22
-#define USBDESCR_HID_PHYS 0x23
+#define USBDESCR_DEVICE 1
+#define USBDESCR_CONFIG 2
+#define USBDESCR_STRING 3
+#define USBDESCR_INTERFACE 4
+#define USBDESCR_ENDPOINT 5
+#define USBDESCR_HID 0x21
+#define USBDESCR_HID_REPORT 0x22
+#define USBDESCR_HID_PHYS 0x23
//#define USBATTR_BUSPOWER 0x80 // USB 1.1 does not define this value any more
-#define USBATTR_SELFPOWER 0x40
-#define USBATTR_REMOTEWAKE 0x20
+#define USBATTR_SELFPOWER 0x40
+#define USBATTR_REMOTEWAKE 0x20
/* USB HID Requests */
-#define USBRQ_HID_GET_REPORT 0x01
-#define USBRQ_HID_GET_IDLE 0x02
-#define USBRQ_HID_GET_PROTOCOL 0x03
-#define USBRQ_HID_SET_REPORT 0x09
-#define USBRQ_HID_SET_IDLE 0x0a
-#define USBRQ_HID_SET_PROTOCOL 0x0b
+#define USBRQ_HID_GET_REPORT 0x01
+#define USBRQ_HID_GET_IDLE 0x02
+#define USBRQ_HID_GET_PROTOCOL 0x03
+#define USBRQ_HID_SET_REPORT 0x09
+#define USBRQ_HID_SET_IDLE 0x0a
+#define USBRQ_HID_SET_PROTOCOL 0x0b
/* ------------------------------------------------------------------------- */