Descriptors.h
1 /* 2 LUFA Library 3 Copyright (C) Dean Camera, 2011. 4 5 dean [at] fourwalledcubicle [dot] com 6 www.lufa-lib.org 7 */ 8 9 /* 10 Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) 11 12 Permission to use, copy, modify, distribute, and sell this 13 software and its documentation for any purpose is hereby granted 14 without fee, provided that the above copyright notice appear in 15 all copies and that both that the copyright notice and this 16 permission notice and warranty disclaimer appear in supporting 17 documentation, and that the name of the author not be used in 18 advertising or publicity pertaining to distribution of the 19 software without specific, written prior permission. 20 21 The author disclaim all warranties with regard to this 22 software, including all implied warranties of merchantability 23 and fitness. In no event shall the author be liable for any 24 special, indirect or consequential damages or any damages 25 whatsoever resulting from loss of use, data or profits, whether 26 in an action of contract, negligence or other tortious action, 27 arising out of or in connection with the use or performance of 28 this software. 29 */ 30 31 /** \file 32 * 33 * Header file for Descriptors.c. 34 */ 35 36 #ifndef _DESCRIPTORS_H_ 37 #define _DESCRIPTORS_H_ 38 39 /* Includes: */ 40 #include <LUFA/Drivers/USB/USB.h> 41 42 /* Macros: */ 43 #if defined(__AVR_AT90USB1287__) 44 #define AVR_SIGNATURE_1 0x1E 45 #define AVR_SIGNATURE_2 0x97 46 #define AVR_SIGNATURE_3 0x82 47 #elif defined(__AVR_AT90USB647__) 48 #define AVR_SIGNATURE_1 0x1E 49 #define AVR_SIGNATURE_2 0x96 50 #define AVR_SIGNATURE_3 0x82 51 #elif defined(__AVR_AT90USB1286__) 52 #define AVR_SIGNATURE_1 0x1E 53 #define AVR_SIGNATURE_2 0x97 54 #define AVR_SIGNATURE_3 0x82 55 #elif defined(__AVR_AT90USB646__) 56 #define AVR_SIGNATURE_1 0x1E 57 #define AVR_SIGNATURE_2 0x96 58 #define AVR_SIGNATURE_3 0x82 59 #elif defined(__AVR_ATmega32U6__) 60 #define AVR_SIGNATURE_1 0x1E 61 #define AVR_SIGNATURE_2 0x95 62 #define AVR_SIGNATURE_3 0x88 63 #elif defined(__AVR_ATmega32U4__) 64 #define AVR_SIGNATURE_1 0x1E 65 #define AVR_SIGNATURE_2 0x95 66 #define AVR_SIGNATURE_3 0x87 67 #elif defined(__AVR_ATmega16U4__) 68 #define AVR_SIGNATURE_1 0x1E 69 #define AVR_SIGNATURE_2 0x94 70 #define AVR_SIGNATURE_3 0x88 71 #elif defined(__AVR_ATmega32U2__) 72 #define AVR_SIGNATURE_1 0x1E 73 #define AVR_SIGNATURE_2 0x95 74 #define AVR_SIGNATURE_3 0x8A 75 #elif defined(__AVR_ATmega16U2__) 76 #define AVR_SIGNATURE_1 0x1E 77 #define AVR_SIGNATURE_2 0x94 78 #define AVR_SIGNATURE_3 0x89 79 #elif defined(__AVR_AT90USB162__) 80 #define AVR_SIGNATURE_1 0x1E 81 #define AVR_SIGNATURE_2 0x94 82 #define AVR_SIGNATURE_3 0x82 83 #elif defined(__AVR_ATmega8U2__) 84 #define AVR_SIGNATURE_1 0x1E 85 #define AVR_SIGNATURE_2 0x93 86 #define AVR_SIGNATURE_3 0x89 87 #elif defined(__AVR_AT90USB82__) 88 #define AVR_SIGNATURE_1 0x1E 89 #define AVR_SIGNATURE_2 0x94 90 #define AVR_SIGNATURE_3 0x82 91 #else 92 #error The selected AVR part is not currently supported by this bootloader. 93 #endif 94 95 /** Endpoint number for the CDC control interface event notification endpoint. */ 96 #define CDC_NOTIFICATION_EPNUM 2 97 98 /** Endpoint number for the CDC data interface TX (data IN) endpoint. */ 99 #define CDC_TX_EPNUM 3 100 101 /** Endpoint number for the CDC data interface RX (data OUT) endpoint. */ 102 #define CDC_RX_EPNUM 4 103 104 /** Size of the CDC data interface TX and RX data endpoint banks, in bytes. */ 105 #define CDC_TXRX_EPSIZE 16 106 107 /** Size of the CDC control interface notification endpoint bank, in bytes. */ 108 #define CDC_NOTIFICATION_EPSIZE 8 109 110 /* Type Defines: */ 111 /** Type define for the device configuration descriptor structure. This must be defined in the 112 * application code, as the configuration descriptor contains several sub-descriptors which 113 * vary between devices, and which describe the device's usage to the host. 114 */ 115 typedef struct 116 { 117 USB_Descriptor_Configuration_Header_t Config; 118 119 // CDC Control Interface 120 USB_Descriptor_Interface_t CDC_CCI_Interface; 121 USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; 122 USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; 123 USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; 124 USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; 125 126 // CDC Data Interface 127 USB_Descriptor_Interface_t CDC_DCI_Interface; 128 USB_Descriptor_Endpoint_t CDC_DataOutEndpoint; 129 USB_Descriptor_Endpoint_t CDC_DataInEndpoint; 130 } USB_Descriptor_Configuration_t; 131 132 /* Function Prototypes: */ 133 uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, 134 const uint8_t wIndex, 135 const void** const DescriptorAddress) 136 ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); 137 138 #endif 139