-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2010.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
- \r
- Permission to use, copy, modify, distribute, and sell this \r
- software and its documentation for any purpose is hereby granted\r
- without fee, provided that the above copyright notice appear in \r
- all copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting \r
- documentation, and that the name of the author not be used in \r
- advertising or publicity pertaining to distribution of the \r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- * computer-readable structures which the host requests upon device enumeration, to determine\r
- * the device's capabilities and functions. \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** HID class report descriptor. This is a special descriptor constructed with values from the\r
- * USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
- * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
- * the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
- * more details on HID report descriptors.\r
- */\r
-USB_Descriptor_HIDReport_Datatype_t HIDReport[] =\r
-{\r
- 0x06, 0x9c, 0xff, /* Usage Page (Vendor Defined) */\r
- 0x09, TEENSY_USAGEPAGE, /* Usage (Vendor Defined) */\r
- 0xa1, 0x01, /* Collection (Vendor Defined) */\r
- 0x0a, 0x19, 0x00, /* Usage (Vendor Defined) */\r
- 0x75, 0x08, /* Report Size (8) */\r
-#if (SPM_PAGESIZE == 128) /* Report Count (SPM_PAGESIZE + 2) */\r
- 0x95, (SPM_PAGESIZE + 2),\r
-#else\r
- 0x96, ((SPM_PAGESIZE + 2) & 0xFF), ((SPM_PAGESIZE + 2) >> 8),\r
-#endif\r
- 0x15, 0x00, /* Logical Minimum (0) */\r
- 0x25, 0xff, /* Logical Maximum (255) */\r
- 0x91, 0x02, /* Output (Data, Variable, Absolute) */\r
- 0xc0 /* End Collection */\r
-};\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- * device characteristics, including the supported USB version, control endpoint size and the\r
- * number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- * process begins.\r
- */\r
-USB_Descriptor_Device_t DeviceDescriptor =\r
-{\r
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
- \r
- .USBSpecification = VERSION_BCD(01.10),\r
- .Class = 0x00,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,\r
- \r
- .VendorID = 0x16C0,\r
- .ProductID = 0x0478,\r
- .ReleaseNumber = 0x0120,\r
- \r
- .ManufacturerStrIndex = NO_DESCRIPTOR,\r
- .ProductStrIndex = NO_DESCRIPTOR,\r
- .SerialNumStrIndex = NO_DESCRIPTOR,\r
- \r
- .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- * of the device in one of its supported configurations, including information about any device interfaces\r
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- * a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t ConfigurationDescriptor =\r
-{\r
- .Config = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
- .TotalInterfaces = 1,\r
- \r
- .ConfigurationNumber = 1,\r
- .ConfigurationStrIndex = NO_DESCRIPTOR,\r
- \r
- .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED,\r
- \r
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)\r
- },\r
- \r
- .HID_Interface = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
- .InterfaceNumber = 0x00,\r
- .AlternateSetting = 0x00,\r
- \r
- .TotalEndpoints = 1,\r
- \r
- .Class = 0x03,\r
- .SubClass = 0x00,\r
- .Protocol = 0x00,\r
- \r
- .InterfaceStrIndex = NO_DESCRIPTOR\r
- },\r
-\r
- .HID_VendorHID = \r
- { \r
- .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
- \r
- .HIDSpec = VERSION_BCD(01.11),\r
- .CountryCode = 0x00,\r
- .TotalHIDDescriptors = 1,\r
- .HIDReportType = DTYPE_Report,\r
- .HIDReportLength = sizeof(HIDReport)\r
- },\r
- \r
- .HID_ReportINEndpoint = \r
- {\r
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-\r
- .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | HID_EPNUM),\r
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
- .EndpointSize = HID_EPSIZE,\r
- .PollingIntervalMS = 0x40\r
- },\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- * documentation) by the application code so that the address and size of a requested descriptor can be given\r
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- * USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
- const uint8_t DescriptorType = (wValue >> 8);\r
-\r
- void* Address = NULL;\r
- uint16_t Size = NO_DESCRIPTOR;\r
-\r
- /* If/Else If chain compiles slightly smaller than a switch case */\r
-\r
- if (DescriptorType == DTYPE_Device)\r
- {\r
- Address = (void*)&DeviceDescriptor;\r
- Size = sizeof(USB_Descriptor_Device_t); \r
- }\r
- else if (DescriptorType == DTYPE_Configuration)\r
- {\r
- Address = (void*)&ConfigurationDescriptor;\r
- Size = sizeof(USB_Descriptor_Configuration_t); \r
- }\r
- else if (DescriptorType == DTYPE_HID)\r
- {\r
- Address = (void*)&ConfigurationDescriptor.HID_VendorHID;\r
- Size = sizeof(USB_Descriptor_HID_t);\r
- }\r
- else\r
- {\r
- Address = (void*)&HIDReport;\r
- Size = sizeof(HIDReport);\r
- }\r
-\r
- *DescriptorAddress = Address;\r
- return Size;\r
-}\r
+/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2010.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.fourwalledcubicle.com
+*/
+
+/*
+ Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+ Permission to use, copy, modify, distribute, and sell this
+ software and its documentation for any purpose is hereby granted
+ without fee, provided that the above copyright notice appear in
+ all copies and that both that the copyright notice and this
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission.
+
+ The author disclaim all warranties with regard to this
+ software, including all implied warranties of merchantability
+ and fitness. In no event shall the author be liable for any
+ special, indirect or consequential damages or any damages
+ whatsoever resulting from loss of use, data or profits, whether
+ in an action of contract, negligence or other tortious action,
+ arising out of or in connection with the use or performance of
+ this software.
+*/
+
+/** \file
+ *
+ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special
+ * computer-readable structures which the host requests upon device enumeration, to determine
+ * the device's capabilities and functions.
+ */
+
+#include "Descriptors.h"
+
+/** HID class report descriptor. This is a special descriptor constructed with values from the
+ * USBIF HID class specification to describe the reports and capabilities of the HID device. This
+ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)
+ * the device will send, and what it may be sent back from the host. Refer to the HID specification for
+ * more details on HID report descriptors.
+ */
+USB_Descriptor_HIDReport_Datatype_t HIDReport[] =
+{
+ 0x06, 0x9c, 0xff, /* Usage Page (Vendor Defined) */
+ 0x09, TEENSY_USAGEPAGE, /* Usage (Vendor Defined) */
+ 0xa1, 0x01, /* Collection (Vendor Defined) */
+ 0x0a, 0x19, 0x00, /* Usage (Vendor Defined) */
+ 0x75, 0x08, /* Report Size (8) */
+#if (SPM_PAGESIZE == 128) /* Report Count (SPM_PAGESIZE + 2) */
+ 0x95, (SPM_PAGESIZE + 2),
+#else
+ 0x96, ((SPM_PAGESIZE + 2) & 0xFF), ((SPM_PAGESIZE + 2) >> 8),
+#endif
+ 0x15, 0x00, /* Logical Minimum (0) */
+ 0x25, 0xff, /* Logical Maximum (255) */
+ 0x91, 0x02, /* Output (Data, Variable, Absolute) */
+ 0xc0 /* End Collection */
+};
+
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
+ * device characteristics, including the supported USB version, control endpoint size and the
+ * number of device configurations. The descriptor is read out by the USB host when the enumeration
+ * process begins.
+ */
+USB_Descriptor_Device_t DeviceDescriptor =
+{
+ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
+
+ .USBSpecification = VERSION_BCD(01.10),
+ .Class = 0x00,
+ .SubClass = 0x00,
+ .Protocol = 0x00,
+
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
+
+ .VendorID = 0x16C0,
+ .ProductID = 0x0478,
+ .ReleaseNumber = 0x0120,
+
+ .ManufacturerStrIndex = NO_DESCRIPTOR,
+ .ProductStrIndex = NO_DESCRIPTOR,
+ .SerialNumStrIndex = NO_DESCRIPTOR,
+
+ .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
+};
+
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
+ * of the device in one of its supported configurations, including information about any device interfaces
+ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
+ * a configuration so that the host may correctly communicate with the USB device.
+ */
+USB_Descriptor_Configuration_t ConfigurationDescriptor =
+{
+ .Config =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
+
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
+ .TotalInterfaces = 1,
+
+ .ConfigurationNumber = 1,
+ .ConfigurationStrIndex = NO_DESCRIPTOR,
+
+ .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED,
+
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
+ },
+
+ .HID_Interface =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
+
+ .InterfaceNumber = 0x00,
+ .AlternateSetting = 0x00,
+
+ .TotalEndpoints = 1,
+
+ .Class = 0x03,
+ .SubClass = 0x00,
+ .Protocol = 0x00,
+
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+
+ .HID_VendorHID =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},
+
+ .HIDSpec = VERSION_BCD(01.11),
+ .CountryCode = 0x00,
+ .TotalHIDDescriptors = 1,
+ .HIDReportType = DTYPE_Report,
+ .HIDReportLength = sizeof(HIDReport)
+ },
+
+ .HID_ReportINEndpoint =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
+
+ .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | HID_EPNUM),
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = HID_EPSIZE,
+ .PollingIntervalMS = 0x40
+ },
+};
+
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
+ * documentation) by the application code so that the address and size of a requested descriptor can be given
+ * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
+ * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
+ * USB host.
+ */
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)
+{
+ const uint8_t DescriptorType = (wValue >> 8);
+
+ void* Address = NULL;
+ uint16_t Size = NO_DESCRIPTOR;
+
+ /* If/Else If chain compiles slightly smaller than a switch case */
+
+ if (DescriptorType == DTYPE_Device)
+ {
+ Address = (void*)&DeviceDescriptor;
+ Size = sizeof(USB_Descriptor_Device_t);
+ }
+ else if (DescriptorType == DTYPE_Configuration)
+ {
+ Address = (void*)&ConfigurationDescriptor;
+ Size = sizeof(USB_Descriptor_Configuration_t);
+ }
+ else if (DescriptorType == DTYPE_HID)
+ {
+ Address = (void*)&ConfigurationDescriptor.HID_VendorHID;
+ Size = sizeof(USB_Descriptor_HID_t);
+ }
+ else
+ {
+ Address = (void*)&HIDReport;
+ Size = sizeof(HIDReport);
+ }
+
+ *DescriptorAddress = Address;
+ return Size;
+}