diff options
Diffstat (limited to 'tmk_core/protocol/vusb/usbdrv/usbdrv.h')
-rw-r--r-- | tmk_core/protocol/vusb/usbdrv/usbdrv.h | 487 |
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 42fe16372..88a1bce76 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 /* ------------------------------------------------------------------------- */ |