Update UC3 platform driver support to use the bitmasks defined in the header files...
[pub/USBasp.git] / Demos / Device / Incomplete / Sideshow / Descriptors.c
index 8f36cae..b19888d 100644 (file)
-/*\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
-#include "Descriptors.h"\r
-\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       Header:                 {Size: sizeof(USB_Descriptor_Device_t), Type: DTYPE_Device},\r
-               \r
-       USBSpecification:       VERSION_BCD(02.00),\r
-       Class:                  0x00,\r
-       SubClass:               0x00,\r
-       Protocol:               0x00,\r
-                               \r
-       Endpoint0Size:          8,\r
-               \r
-       VendorID:               0x03EB,\r
-       ProductID:              0x2040,\r
-       ReleaseNumber:          0x0001,\r
-               \r
-       ManufacturerStrIndex:   0x01,\r
-       ProductStrIndex:        0x02,\r
-       SerialNumStrIndex:      0x03,\r
-               \r
-       NumberOfConfigurations: 1\r
-};\r
-       \r
-USB_Descriptor_Configuration_t PROGMEM 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 | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       MaxPowerConsumption:    USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .SSHOW_Interface =\r
-               {\r
-                       Header:                 {Size: sizeof(USB_Descriptor_Interface_t), Type: DTYPE_Interface},\r
-\r
-                       InterfaceNumber:        0,\r
-                       AlternateSetting:       0,\r
-                       \r
-                       TotalEndpoints:         2,\r
-                               \r
-                       Class:                  0xFF,\r
-                       SubClass:               0x00,\r
-                       Protocol:               0x00,\r
-                               \r
-                       InterfaceStrIndex:      NO_DESCRIPTOR\r
-               },\r
-\r
-       .SSHOW_DataInEndpoint =\r
-               {\r
-                       Header:                 {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint},\r
-\r
-                       EndpointAddress:        (ENDPOINT_DESCRIPTOR_DIR_IN | SIDESHOW_IN_EPNUM),\r
-                       Attributes:             EP_TYPE_BULK,\r
-                       EndpointSize:           SIDESHOW_IO_EPSIZE,\r
-                       PollingIntervalMS:      0x00\r
-               },\r
-\r
-       .SSHOW_DataOutEndpoint =\r
-               {\r
-                       Header:                 {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint},\r
-\r
-                       EndpointAddress:        (ENDPOINT_DESCRIPTOR_DIR_OUT | SIDESHOW_OUT_EPNUM),\r
-                       Attributes:             EP_TYPE_BULK,\r
-                       EndpointSize:           SIDESHOW_IO_EPSIZE,\r
-                       PollingIntervalMS:      0x00\r
-               }\r
-};\r
-\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       Header:                 {Size: USB_STRING_LEN(1), Type: DTYPE_String},\r
-               \r
-       UnicodeString:          {LANGUAGE_ID_ENG}\r
-};\r
-\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       Header:                 {Size: USB_STRING_LEN(11), Type: DTYPE_String},\r
-               \r
-       UnicodeString:          L"Dean Camera"\r
-};\r
-\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       Header:                 {Size: USB_STRING_LEN(22), Type: DTYPE_String},\r
-               \r
-       UnicodeString:          L"LUFA Sideshow Demo"\r
-};\r
-\r
-USB_Descriptor_String_t PROGMEM SerialNumberString =\r
-{\r
-       Header:                 {Size: USB_STRING_LEN(12), Type: DTYPE_String},\r
-               \r
-       UnicodeString:          L"000000000000"\r
-};\r
-\r
-USB_OSDescriptor_t PROGMEM OSDescriptorString =\r
-{\r
-       Header:                 {Size: sizeof(USB_OSDescriptor_t), Type: DTYPE_String},\r
-       \r
-       Signature:              L"MSFT100",\r
-       VendorCode:             REQ_GetOSFeatureDescriptor\r
-};\r
-\r
-USB_OSCompatibleIDDescriptor_t PROGMEM DevCompatIDs =\r
-{\r
-       TotalLength:            sizeof(USB_OSCompatibleIDDescriptor_t),\r
-       Version:                0x0100,\r
-       Index:                  EXTENDED_COMPAT_ID_DESCRIPTOR,\r
-       TotalSections:          1,\r
-       \r
-       SideshowCompatID:       {FirstInterfaceNumber: 0x00,\r
-                                CompatibleID: "SIDESHW",\r
-                                SubCompatibleID: "UNIV1"}\r
-};\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
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device:\r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration:\r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String:\r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00:\r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01:\r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02:\r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                               case 0x03:\r
-                                       Address = (void*)&SerialNumberString;\r
-                                       Size    = pgm_read_byte(&SerialNumberString.Header.Size);\r
-                                       break;\r
-                               case 0xEE:\r
-                                       /* A Microsoft-proprietary extention. String address 0xEE is used by Windows for\r
-                                          "OS Descriptors", which in this case allows us to indicate that our device is\r
-                                          Sideshow compatible regardless of VID/PID values. */\r
-                                       Address = (void*)&OSDescriptorString;\r
-                                       Size    = pgm_read_byte(&OSDescriptorString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;           \r
-       return Size;\r
-}\r
-\r
-bool USB_GetOSFeatureDescriptor(const uint16_t wValue, const uint8_t wIndex,\r
-                                void** const DescriptorAddress, uint16_t* const DescriptorSize)\r
-{\r
-       void*    Address = NULL;\r
-       uint16_t Size    = 0;\r
-\r
-       /* Check if a device level OS feature descriptor is being requested */\r
-       if (wValue == 0x0000)\r
-       {\r
-               /* Only the Extended Device Compatibility descriptor is supported */\r
-               if (wIndex == EXTENDED_COMPAT_ID_DESCRIPTOR)\r
-               {\r
-                       Address = (void*)&DevCompatIDs;\r
-                       Size    = sizeof(USB_OSCompatibleIDDescriptor_t);\r
-               }\r
-       }\r
-\r
-       if (Address != NULL)\r
-       {\r
-               *DescriptorAddress = Address;\r
-               *DescriptorSize    = Size;\r
-\r
-               return true;\r
-       }\r
-               \r
-       return false;\r
-}
\ No newline at end of file
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2011.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2011  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.
+*/
+
+#include "Descriptors.h"
+
+const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
+{
+       Header:                 {Size: sizeof(USB_Descriptor_Device_t), Type: DTYPE_Device},
+
+       USBSpecification:       VERSION_BCD(01.10),
+       Class:                  0x00,
+       SubClass:               0x00,
+       Protocol:               0x00,
+
+       Endpoint0Size:          8,
+
+       VendorID:               0x03EB,
+       ProductID:              0x2040,
+       ReleaseNumber:          VERSION_BCD(00.01),
+
+       ManufacturerStrIndex:   0x01,
+       ProductStrIndex:        0x02,
+       SerialNumStrIndex:      0x03,
+
+       NumberOfConfigurations: 1
+};
+
+const USB_Descriptor_Configuration_t PROGMEM 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 | USB_CONFIG_ATTR_SELFPOWERED),
+
+                       MaxPowerConsumption:    USB_CONFIG_POWER_MA(100)
+               },
+
+       .SSHOW_Interface =
+               {
+                       Header:                 {Size: sizeof(USB_Descriptor_Interface_t), Type: DTYPE_Interface},
+
+                       InterfaceNumber:        0,
+                       AlternateSetting:       0,
+
+                       TotalEndpoints:         2,
+
+                       Class:                  0xFF,
+                       SubClass:               0x00,
+                       Protocol:               0x00,
+
+                       InterfaceStrIndex:      NO_DESCRIPTOR
+               },
+
+       .SSHOW_DataInEndpoint =
+               {
+                       Header:                 {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint},
+
+                       EndpointAddress:        (ENDPOINT_DESCRIPTOR_DIR_IN | SIDESHOW_IN_EPNUM),
+                       Attributes:             EP_TYPE_BULK,
+                       EndpointSize:           SIDESHOW_IO_EPSIZE,
+                       PollingIntervalMS:      0x00
+               },
+
+       .SSHOW_DataOutEndpoint =
+               {
+                       Header:                 {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint},
+
+                       EndpointAddress:        (ENDPOINT_DESCRIPTOR_DIR_OUT | SIDESHOW_OUT_EPNUM),
+                       Attributes:             EP_TYPE_BULK,
+                       EndpointSize:           SIDESHOW_IO_EPSIZE,
+                       PollingIntervalMS:      0x00
+               }
+};
+
+const USB_Descriptor_String_t PROGMEM LanguageString =
+{
+       Header:                 {Size: USB_STRING_LEN(1), Type: DTYPE_String},
+
+       UnicodeString:          {LANGUAGE_ID_ENG}
+};
+
+const USB_Descriptor_String_t PROGMEM ManufacturerString =
+{
+       Header:                 {Size: USB_STRING_LEN(11), Type: DTYPE_String},
+
+       UnicodeString:          L"Dean Camera"
+};
+
+const USB_Descriptor_String_t PROGMEM ProductString =
+{
+       Header:                 {Size: USB_STRING_LEN(22), Type: DTYPE_String},
+
+       UnicodeString:          L"LUFA Sideshow Demo"
+};
+
+const USB_Descriptor_String_t PROGMEM SerialNumberString =
+{
+       Header:                 {Size: USB_STRING_LEN(12), Type: DTYPE_String},
+
+       UnicodeString:          L"000000000000"
+};
+
+const USB_OSDescriptor_t PROGMEM OSDescriptorString =
+{
+       Header:                 {Size: sizeof(USB_OSDescriptor_t), Type: DTYPE_String},
+
+       Signature:              L"MSFT100",
+       VendorCode:             REQ_GetOSFeatureDescriptor
+};
+
+const USB_OSCompatibleIDDescriptor_t PROGMEM DevCompatIDs =
+{
+       TotalLength:            sizeof(USB_OSCompatibleIDDescriptor_t),
+       Version:                0x0100,
+       Index:                  EXTENDED_COMPAT_ID_DESCRIPTOR,
+       TotalSections:          1,
+
+       SideshowCompatID:       {FirstInterfaceNumber: 0x00,
+                                CompatibleID: "SIDESHW",
+                                SubCompatibleID: "UNIV1"}
+};
+
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
+                                    const uint8_t wIndex,
+                                    const void** const DescriptorAddress)
+{
+       const uint8_t  DescriptorType   = (wValue >> 8);
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);
+
+       const void* Address = NULL;
+       uint16_t    Size    = NO_DESCRIPTOR;
+
+       switch (DescriptorType)
+       {
+               case DTYPE_Device:
+                       Address = &DeviceDescriptor;
+                       Size    = sizeof(USB_Descriptor_Device_t);
+                       break;
+               case DTYPE_Configuration:
+                       Address = &ConfigurationDescriptor;
+                       Size    = sizeof(USB_Descriptor_Configuration_t);
+                       break;
+               case DTYPE_String:
+                       switch (DescriptorNumber)
+                       {
+                               case 0x00:
+                                       Address = &LanguageString;
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);
+                                       break;
+                               case 0x01:
+                                       Address = &ManufacturerString;
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);
+                                       break;
+                               case 0x02:
+                                       Address = &ProductString;
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);
+                                       break;
+                               case 0x03:
+                                       Address = &SerialNumberString;
+                                       Size    = pgm_read_byte(&SerialNumberString.Header.Size);
+                                       break;
+                               case 0xEE:
+                                       /* A Microsoft-proprietary extension. String address 0xEE is used by Windows for
+                                          "OS Descriptors", which in this case allows us to indicate that our device is
+                                          Sideshow compatible regardless of VID/PID values. */
+                                       Address = &OSDescriptorString;
+                                       Size    = pgm_read_byte(&OSDescriptorString.Header.Size);
+                                       break;
+                       }
+
+                       break;
+       }
+
+       *DescriptorAddress = Address;
+       return Size;
+}
+
+uint16_t USB_GetOSFeatureDescriptor(const uint16_t wValue,
+                                    const uint8_t wIndex,
+                                    const void** const DescriptorAddress)
+{
+       const void* Address = NULL;
+       uint16_t    Size    = NO_DESCRIPTOR;
+
+       /* Check if a device level OS feature descriptor is being requested */
+       if (wValue == 0x0000)
+       {
+               /* Only the Extended Device Compatibility descriptor is supported */
+               if (wIndex == EXTENDED_COMPAT_ID_DESCRIPTOR)
+               {
+                       Address = &DevCompatIDs;
+                       Size    = sizeof(USB_OSCompatibleIDDescriptor_t);
+               }
+       }
+
+       *DescriptorAddress = Address;
+       return Size;
+}
+