Add LUFA-111009-BETA tag.
[pub/USBasp.git] / Demos / Device / Incomplete / Sideshow / Descriptors.c
index e05358e..33ddfaf 100644 (file)
@@ -1,21 +1,21 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2010.
-              
+     Copyright (C) Dean Camera, 2011.
+
   dean [at] fourwalledcubicle [dot] com
-      www.fourwalledcubicle.com
+           www.lufa-lib.org
 */
 
 /*
-  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
-  Permission to use, copy, modify, distribute, and sell this 
+  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 
+  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 
+  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
 
 #include "Descriptors.h"
 
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
+const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 {
        Header:                 {Size: sizeof(USB_Descriptor_Device_t), Type: DTYPE_Device},
-               
-       USBSpecification:       VERSION_BCD(02.00),
+
+       USBSpecification:       VERSION_BCD(01.10),
        Class:                  0x00,
        SubClass:               0x00,
        Protocol:               0x00,
-                               
+
        Endpoint0Size:          8,
-               
+
        VendorID:               0x03EB,
        ProductID:              0x2040,
-       ReleaseNumber:          0x0001,
-               
+       ReleaseNumber:          VERSION_BCD(00.01),
+
        ManufacturerStrIndex:   0x01,
        ProductStrIndex:        0x02,
        SerialNumStrIndex:      0x03,
-               
+
        NumberOfConfigurations: 1
 };
-       
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
+
+const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 {
        .Config =
                {
@@ -60,28 +60,28 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 
                        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
                },
 
@@ -89,7 +89,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
                {
                        Header:                 {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint},
 
-                       EndpointAddress:        (ENDPOINT_DESCRIPTOR_DIR_IN | SIDESHOW_IN_EPNUM),
+                       EndpointAddress:        (ENDPOINT_DIR_IN | SIDESHOW_IN_EPNUM),
                        Attributes:             EP_TYPE_BULK,
                        EndpointSize:           SIDESHOW_IO_EPSIZE,
                        PollingIntervalMS:      0x00
@@ -99,56 +99,56 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
                {
                        Header:                 {Size: sizeof(USB_Descriptor_Endpoint_t), Type: DTYPE_Endpoint},
 
-                       EndpointAddress:        (ENDPOINT_DESCRIPTOR_DIR_OUT | SIDESHOW_OUT_EPNUM),
+                       EndpointAddress:        (ENDPOINT_DIR_OUT | SIDESHOW_OUT_EPNUM),
                        Attributes:             EP_TYPE_BULK,
                        EndpointSize:           SIDESHOW_IO_EPSIZE,
                        PollingIntervalMS:      0x00
                }
 };
 
-USB_Descriptor_String_t PROGMEM LanguageString =
+const USB_Descriptor_String_t PROGMEM LanguageString =
 {
        Header:                 {Size: USB_STRING_LEN(1), Type: DTYPE_String},
-               
+
        UnicodeString:          {LANGUAGE_ID_ENG}
 };
 
-USB_Descriptor_String_t PROGMEM ManufacturerString =
+const USB_Descriptor_String_t PROGMEM ManufacturerString =
 {
        Header:                 {Size: USB_STRING_LEN(11), Type: DTYPE_String},
-               
+
        UnicodeString:          L"Dean Camera"
 };
 
-USB_Descriptor_String_t PROGMEM ProductString =
+const USB_Descriptor_String_t PROGMEM ProductString =
 {
        Header:                 {Size: USB_STRING_LEN(22), Type: DTYPE_String},
-               
+
        UnicodeString:          L"LUFA Sideshow Demo"
 };
 
-USB_Descriptor_String_t PROGMEM SerialNumberString =
+const USB_Descriptor_String_t PROGMEM SerialNumberString =
 {
        Header:                 {Size: USB_STRING_LEN(12), Type: DTYPE_String},
-               
+
        UnicodeString:          L"000000000000"
 };
 
-USB_OSDescriptor_t PROGMEM OSDescriptorString =
+const USB_OSDescriptor_t PROGMEM OSDescriptorString =
 {
        Header:                 {Size: sizeof(USB_OSDescriptor_t), Type: DTYPE_String},
-       
+
        Signature:              L"MSFT100",
        VendorCode:             REQ_GetOSFeatureDescriptor
 };
 
-USB_OSCompatibleIDDescriptor_t PROGMEM DevCompatIDs =
+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"}
@@ -156,65 +156,65 @@ USB_OSCompatibleIDDescriptor_t PROGMEM DevCompatIDs =
 
 uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                     const uint8_t wIndex,
-                                    void** const DescriptorAddress)
+                                    const void** const DescriptorAddress)
 {
        const uint8_t  DescriptorType   = (wValue >> 8);
        const uint8_t  DescriptorNumber = (wValue & 0xFF);
 
-       void*    Address = NULL;
-       uint16_t Size    = NO_DESCRIPTOR;
+       const void* Address = NULL;
+       uint16_t    Size    = NO_DESCRIPTOR;
 
        switch (DescriptorType)
        {
                case DTYPE_Device:
-                       Address = (void*)&DeviceDescriptor;
+                       Address = &DeviceDescriptor;
                        Size    = sizeof(USB_Descriptor_Device_t);
                        break;
                case DTYPE_Configuration:
-                       Address = (void*)&ConfigurationDescriptor;
+                       Address = &ConfigurationDescriptor;
                        Size    = sizeof(USB_Descriptor_Configuration_t);
                        break;
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
                                case 0x00:
-                                       Address = (void*)&LanguageString;
+                                       Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                case 0x01:
-                                       Address = (void*)&ManufacturerString;
+                                       Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
                                case 0x02:
-                                       Address = (void*)&ProductString;
+                                       Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
                                case 0x03:
-                                       Address = (void*)&SerialNumberString;
+                                       Address = &SerialNumberString;
                                        Size    = pgm_read_byte(&SerialNumberString.Header.Size);
                                        break;
                                case 0xEE:
-                                       /* A Microsoft-proprietary extention. String address 0xEE is used by Windows for
+                                       /* 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 = (void*)&OSDescriptorString;
+                                       Address = &OSDescriptorString;
                                        Size    = pgm_read_byte(&OSDescriptorString.Header.Size);
                                        break;
                        }
-                       
+
                        break;
        }
-       
-       *DescriptorAddress = Address;           
+
+       *DescriptorAddress = Address;
        return Size;
 }
 
 uint16_t USB_GetOSFeatureDescriptor(const uint16_t wValue,
                                     const uint8_t wIndex,
-                                    void** const DescriptorAddress)
+                                    const void** const DescriptorAddress)
 {
-       void*    Address = NULL;
-       uint16_t Size    = NO_DESCRIPTOR;
+       const void* Address = NULL;
+       uint16_t    Size    = NO_DESCRIPTOR;
 
        /* Check if a device level OS feature descriptor is being requested */
        if (wValue == 0x0000)
@@ -222,11 +222,12 @@ uint16_t USB_GetOSFeatureDescriptor(const uint16_t wValue,
                /* Only the Extended Device Compatibility descriptor is supported */
                if (wIndex == EXTENDED_COMPAT_ID_DESCRIPTOR)
                {
-                       Address = (void*)&DevCompatIDs;
+                       Address = &DevCompatIDs;
                        Size    = sizeof(USB_OSCompatibleIDDescriptor_t);
                }
        }
 
        *DescriptorAddress = Address;
        return Size;
-}
\ No newline at end of file
+}
+