/** * \file * * \brief USB configuration file * * Copyright (c) 2009-2018 Microchip Technology Inc. and its subsidiaries. * * \asf_license_start * * \page License * * Subject to your compliance with these terms, you may use Microchip * software and any derivatives exclusively with Microchip products. * It is your responsibility to comply with third party license terms applicable * to your use of third party software (including open source software) that * may accompany Microchip software. * * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. * * \asf_license_stop * */ /* * Support and FAQ: visit Microchip Support */ #ifndef _CONF_USB_H_ #define _CONF_USB_H_ #include "compiler.h" //#include "main.h" //#warning You must refill the following definitions with a correct values /** * USB Device Configuration * @{ */ //! Device definition (mandatory) #define USB_DEVICE_VENDOR_ID 0xDC29 #define USB_DEVICE_PRODUCT_ID 0xDC29 #define USB_DEVICE_MAJOR_VERSION 1 #define USB_DEVICE_MINOR_VERSION 0 #define USB_DEVICE_POWER 100 // Consumption on VBUS line (mA) #define USB_DEVICE_ATTR \ (USB_CONFIG_ATTR_BUS_POWERED) // (USB_CONFIG_ATTR_SELF_POWERED) // (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_SELF_POWERED) // (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_BUS_POWERED) //! USB Device string definitions (Optional) #define USB_DEVICE_MANUFACTURE_NAME "MK Factor" #define USB_DEVICE_PRODUCT_NAME "DEF CON 29 Badge" #define USB_DEVICE_SERIAL_NAME "12345" //#define USB_DEVICE_SERIAL_NAME *(volatile uint32_t *)0x0080A00C //"12345" // Disk SN for MSC /** * Device speeds support * @{ */ //! To define a Low speed device //#define USB_DEVICE_LOW_SPEED //! To authorize the High speed #if (UC3A3||UC3A4) //#define USB_DEVICE_HS_SUPPORT #endif //@} /** * USB Device Callbacks definitions (Optional) * @{ */ #define UDC_VBUS_EVENT(b_vbus_high) user_callback_vbus_action(b_vbus_high) extern void user_callback_vbus_action(bool b_vbus_high); #define UDC_SOF_EVENT() user_callback_sof_action() extern void user_callback_sof_action(void); // #define UDC_SUSPEND_EVENT() user_callback_suspend_action() // extern void user_callback_suspend_action(void); // #define UDC_RESUME_EVENT() user_callback_resume_action() // extern void user_callback_resume_action(void); //! Mandatory when USB_DEVICE_ATTR authorizes remote wakeup feature // #define UDC_REMOTEWAKEUP_ENABLE() user_callback_remotewakeup_enable() // extern void user_callback_remotewakeup_enable(void); // #define UDC_REMOTEWAKEUP_DISABLE() user_callback_remotewakeup_disable() // extern void user_callback_remotewakeup_disable(void); //! When a extra string descriptor must be supported //! other than manufacturer, product and serial string // #define UDC_GET_EXTRA_STRING() //@} extern bool main_cdc_enable(uint8_t port); extern void main_cdc_disable(uint8_t port); extern void main_cdc_set_dtr(uint8_t port, bool b_enable); /** * USB Device low level configuration * When only one interface is used, these configurations are defined by the class module. * For composite device, these configuration must be defined here * @{ */ //! Control endpoint size #define USB_DEVICE_EP_CTRL_SIZE 64 //! Number of interfaces for this device #define USB_DEVICE_NB_INTERFACE 3 // 1 or more //! Total endpoint used by all interfaces //! Note: //! It is possible to define an IN and OUT endpoints with the same number on XMEGA product only //! E.g. MSC class can be have IN endpoint 0x81 and OUT endpoint 0x01 #define USB_DEVICE_MAX_EP 4 // 0 to max endpoint requested by interfaces //@} //@} /** * USB Interface Configuration * @{ */ /** * Configuration of CDC interface (if used) * @{ */ //! Number of communication port used (1 to 3) #define UDI_CDC_PORT_NB 1 //! Interface callback definition /*#define UDI_CDC_ENABLE_EXT(port) true #define UDI_CDC_DISABLE_EXT(port) #define UDI_CDC_RX_NOTIFY(port) #define UDI_CDC_TX_EMPTY_NOTIFY(port) #define UDI_CDC_SET_CODING_EXT(port,cfg) #define UDI_CDC_SET_DTR_EXT(port,set) #define UDI_CDC_SET_RTS_EXT(port,set)*/ #define UDI_CDC_ENABLE_EXT(port) main_cdc_enable(port) #define UDI_CDC_DISABLE_EXT(port) main_cdc_disable(port) #define UDI_CDC_RX_NOTIFY(port) //uart_rx_notify(port) #define UDI_CDC_TX_EMPTY_NOTIFY(port) #define UDI_CDC_SET_CODING_EXT(port,cfg) //uart_config(port,cfg) #define UDI_CDC_SET_DTR_EXT(port,set) main_cdc_set_dtr(port,set) #define UDI_CDC_SET_RTS_EXT(port,set) /* * #define UDI_CDC_ENABLE_EXT(port) my_callback_cdc_enable() * extern bool my_callback_cdc_enable(void); * #define UDI_CDC_DISABLE_EXT(port) my_callback_cdc_disable() * extern void my_callback_cdc_disable(void); * #define UDI_CDC_RX_NOTIFY(port) my_callback_rx_notify(port) * extern void my_callback_rx_notify(uint8_t port); * #define UDI_CDC_TX_EMPTY_NOTIFY(port) my_callback_tx_empty_notify(port) * extern void my_callback_tx_empty_notify(uint8_t port); * #define UDI_CDC_SET_CODING_EXT(port,cfg) my_callback_config(port,cfg) * extern void my_callback_config(uint8_t port, usb_cdc_line_coding_t * cfg); * #define UDI_CDC_SET_DTR_EXT(port,set) my_callback_cdc_set_dtr(port,set) * extern void my_callback_cdc_set_dtr(uint8_t port, bool b_enable); * #define UDI_CDC_SET_RTS_EXT(port,set) my_callback_cdc_set_rts(port,set) * extern void my_callback_cdc_set_rts(uint8_t port, bool b_enable); */ //! Define it when the transfer CDC Device to Host is a low rate (<512000 bauds) //! to reduce CDC buffers size #define UDI_CDC_LOW_RATE //! Default configuration of communication port #define UDI_CDC_DEFAULT_RATE 115200 #define UDI_CDC_DEFAULT_STOPBITS CDC_STOP_BITS_1 #define UDI_CDC_DEFAULT_PARITY CDC_PAR_NONE #define UDI_CDC_DEFAULT_DATABITS 8 //! Enable id string of interface to add an extra USB string #define UDI_CDC_IAD_STRING_ID 4 /** * USB CDC low level configuration * In standalone these configurations are defined by the CDC module. * For composite device, these configuration must be defined here * @{ */ //! Endpoints' numbers used by single or first CDC port #define UDI_CDC_DATA_EP_IN_0 (1 | USB_EP_DIR_IN) // TX #define UDI_CDC_DATA_EP_OUT_0 (2 | USB_EP_DIR_OUT) // RX #define UDI_CDC_COMM_EP_0 (3 | USB_EP_DIR_IN) // Notify endpoint //! Endpoints' numbers used by second CDC port (Optional) #define UDI_CDC_DATA_EP_IN_2 (4 | USB_EP_DIR_IN) // TX #define UDI_CDC_DATA_EP_OUT_2 (5 | USB_EP_DIR_OUT) // RX #define UDI_CDC_COMM_EP_2 (6 | USB_EP_DIR_IN) // Notify endpoint //! Endpoints' numbers used by third CDC port (Optional) #define UDI_CDC_DATA_EP_IN_3 (7 | USB_EP_DIR_IN) // TX #define UDI_CDC_DATA_EP_OUT_3 (8 | USB_EP_DIR_OUT) // RX #define UDI_CDC_COMM_EP_3 (9 | USB_EP_DIR_IN) // Notify endpoint //! Interface numbers used by single or first CDC port #define UDI_CDC_COMM_IFACE_NUMBER_0 0 #define UDI_CDC_DATA_IFACE_NUMBER_0 1 //! Interface numbers used by second CDC port (Optional) #define UDI_CDC_COMM_IFACE_NUMBER_2 2 #define UDI_CDC_DATA_IFACE_NUMBER_2 3 //! Interface numbers used by third CDC port (Optional) #define UDI_CDC_COMM_IFACE_NUMBER_3 4 #define UDI_CDC_DATA_IFACE_NUMBER_3 5 //@} //@} /** * Configuration of MSC interface (if used) * @{ */ //! Vendor name and Product version of MSC interface #define UDI_MSC_GLOBAL_VENDOR_ID \ 'A', 'T', 'M', 'E', 'L', ' ', ' ', ' ' #define UDI_MSC_GLOBAL_PRODUCT_VERSION \ '1', '.', '0', '0' //! Interface callback definition //#define UDI_MSC_ENABLE_EXT() true //#define UDI_MSC_DISABLE_EXT() //#define UDI_MSC_NOTIFY_TRANS_EXT() /* * #define UDI_MSC_ENABLE_EXT() my_callback_msc_enable() * extern bool my_callback_msc_enable(void); * #define UDI_MSC_DISABLE_EXT() my_callback_msc_disable() * extern void my_callback_msc_disable(void); * #define UDI_MSC_NOTIFY_TRANS_EXT() msc_notify_trans() * extern void msc_notify_trans(void) { */ /** * USB MSC low level configuration * In standalone these configurations are defined by the MSC module. * For composite device, these configuration must be defined here * @{ */ //! Endpoint numbers definition //#define UDI_MSC_EP_IN (1 | USB_EP_DIR_IN) //#define UDI_MSC_EP_OUT (2 | USB_EP_DIR_OUT) //! Interface number //#define UDI_MSC_IFACE_NUMBER 0 //@} //@} /** * Configuration of HID Mouse interface (if used) * @{ */ //! Interface callback definition //#define UDI_HID_MOUSE_ENABLE_EXT() true //#define UDI_HID_MOUSE_DISABLE_EXT() // #define UDI_HID_MOUSE_ENABLE_EXT() my_callback_mouse_enable() // extern bool my_callback_mouse_enable(void); // #define UDI_HID_MOUSE_DISABLE_EXT() my_callback_mouse_disable() // extern void my_callback_mouse_disable(void); /** * USB HID Mouse low level configuration * In standalone these configurations are defined by the HID Mouse module. * For composite device, these configuration must be defined here * @{ */ //! Endpoint numbers definition //#define UDI_HID_MOUSE_EP_IN (1 | USB_EP_DIR_IN) //! Interface number //#define UDI_HID_MOUSE_IFACE_NUMBER 0 //@} //@} /** * Configuration of HID Keyboard interface (if used) * @{ */ //! Interface callback definition #define UDI_HID_KBD_ENABLE_EXT() true #define UDI_HID_KBD_DISABLE_EXT() // #define UDI_HID_KBD_ENABLE_EXT() my_callback_keyboard_enable() // extern bool my_callback_keyboard_enable(void); // #define UDI_HID_KBD_DISABLE_EXT() my_callback_keyboard_disable() // extern void my_callback_keyboard_disable(void); #define UDI_HID_KBD_CHANGE_LED(value) // #define UDI_HID_KBD_CHANGE_LED(value) my_callback_keyboard_led(value) // extern void my_callback_keyboard_led(uint8_t value) /** * USB HID Keyboard low level configuration * In standalone these configurations are defined by the HID Keyboard module. * For composite device, these configuration must be defined here * @{ */ //! Endpoint numbers definition #define UDI_HID_KBD_EP_IN (4 | USB_EP_DIR_IN) //! Interface number #define UDI_HID_KBD_IFACE_NUMBER 2 //@} //@} /** * Configuration of HID Generic interface (if used) * @{ */ //! Interface callback definition #define UDI_HID_GENERIC_ENABLE_EXT() true #define UDI_HID_GENERIC_DISABLE_EXT() #define UDI_HID_GENERIC_REPORT_OUT(ptr) #define UDI_HID_GENERIC_SET_FEATURE(f) /* * #define UDI_HID_GENERIC_ENABLE_EXT() my_callback_generic_enable() * extern bool my_callback_generic_enable(void); * #define UDI_HID_GENERIC_DISABLE_EXT() my_callback_generic_disable() * extern void my_callback_generic_disable(void); * #define UDI_HID_GENERIC_REPORT_OUT(ptr) my_callback_generic_report_out(ptr) * extern void my_callback_generic_report_out(uint8_t *report); * #define UDI_HID_GENERIC_SET_FEATURE(f) my_callback_generic_set_feature(f) * extern void my_callback_generic_set_feature(uint8_t *report_feature); */ #define UDI_HID_REPORT_IN_SIZE 64 #define UDI_HID_REPORT_OUT_SIZE 64 #define UDI_HID_REPORT_FEATURE_SIZE 4 #define UDI_HID_GENERIC_EP_SIZE 64 /** * USB HID Generic low level configuration * In standalone these configurations are defined by the HID generic module. * For composite device, these configuration must be defined here * @{ */ //! Endpoint numbers definition #define UDI_HID_GENERIC_EP_OUT (2 | USB_EP_DIR_OUT) #define UDI_HID_GENERIC_EP_IN (1 | USB_EP_DIR_IN) //! Interface number #define UDI_HID_GENERIC_IFACE_NUMBER 0 //@} //@} /** * Configuration of PHDC interface (if used) * @{ */ //! Interface callback definition #define UDI_PHDC_ENABLE_EXT() true #define UDI_PHDC_DISABLE_EXT() //! Select data format of application //! USB_PHDC_DATAMSG_FORMAT_VENDOR or USB_PHDC_DATAMSG_FORMAT_11073_20601 #define UDI_PHDC_DATAMSG_FORMAT USB_PHDC_DATAMSG_FORMAT_11073_20601 //! If USB_PHDC_DATAMSG_FORMAT_11073_20601 then define specialization(s) #define UDI_PHDC_SPECIALIZATION {0x2345} // Define in 11073_20601 //! Defines the QOS need for each transfer direction #define UDI_PHDC_QOS_OUT \ (USB_PHDC_QOS_MEDIUM_BETTER|USB_PHDC_QOS_HIGH_BEST) #define UDI_PHDC_QOS_IN \ (USB_PHDC_QOS_LOW_GOOD|USB_PHDC_QOS_MEDIUM_BETTER|USB_PHDC_QOS_MEDIUM_BEST) //! The following METADATAs can be send during USB enumeration //! for each endpoints (optional). //! It can define the Opaque data format of each endpoints //! These must be up to 253 and recommended <30 #define UDI_PHDC_METADATA_DESC_BULK_IN {0x01,0x02,0x03} #define UDI_PHDC_METADATA_DESC_BULK_OUT {0x01,0x02,0x03} #define UDI_PHDC_METADATA_DESC_INT_IN {0x01,0x02,0x03} /** * USB PHDC low level configuration * In standalone these configurations are defined by the PHDC module. * For composite device, these configuration must be defined here * @{ */ //! Endpoint numbers definition #define UDI_PHDC_EP_BULK_OUT (1 | USB_EP_DIR_OUT) #define UDI_PHDC_EP_BULK_IN (2 | USB_EP_DIR_IN) #if ((UDI_PHDC_QOS_IN&USB_PHDC_QOS_LOW_GOOD)==USB_PHDC_QOS_LOW_GOOD) // Only if UDI_PHDC_QOS_IN include USB_PHDC_QOS_LOW_GOOD # define UDI_PHDC_EP_INTERRUPT_IN (3 | USB_EP_DIR_IN) #endif //! Endpoint sizes #define UDI_PHDC_EP_SIZE_BULK_OUT 32 #define UDI_PHDC_EP_SIZE_BULK_IN 32 #define UDI_PHDC_EP_SIZE_INT_IN 8 //! Interface number #define UDI_PHDC_IFACE_NUMBER 0 //@} //@} /** * Configuration of Class Vendor interface (if used) * @{ */ //! Interface callback definition #define UDI_VENDOR_ENABLE_EXT() true #define UDI_VENDOR_DISABLE_EXT() #define UDI_VENDOR_SETUP_OUT_RECEIVED() false #define UDI_VENDOR_SETUP_IN_RECEIVED() false /* * #define UDI_VENDOR_ENABLE_EXT() my_callback_vendor_enable() * extern bool my_callback_vendor_enable(void); * #define UDI_VENDOR_DISABLE_EXT() my_callback_vendor_disable() * extern void my_callback_vendor_disable(void); * * #define UDI_VENDOR_SETUP_OUT_RECEIVED() my_vendor_setup_out_received() * extern bool my_vendor_setup_out_received(void); * #define UDI_VENDOR_SETUP_IN_RECEIVED() my_vendor_setup_in_received() * extern bool my_vendor_setup_in_received(void); */ //! endpoints size for full speed #define UDI_VENDOR_EPS_SIZE_INT_FS 64 #define UDI_VENDOR_EPS_SIZE_BULK_FS 64 #define UDI_VENDOR_EPS_SIZE_ISO_FS 256 //! endpoints size for high speed #define UDI_VENDOR_EPS_SIZE_INT_HS 64 #define UDI_VENDOR_EPS_SIZE_BULK_HS 512 #define UDI_VENDOR_EPS_SIZE_ISO_HS 64 /** * USB Class Vendor low level configuration * In standalone these configurations are defined by the Class Vendor module. * For composite device, these configuration must be defined here * @{ */ //! Endpoint numbers definition #define UDI_VENDOR_EP_INTERRUPT_IN (1 | USB_EP_DIR_IN) #define UDI_VENDOR_EP_INTERRUPT_OUT (2 | USB_EP_DIR_OUT) #define UDI_VENDOR_EP_BULK_IN (3 | USB_EP_DIR_IN) #define UDI_VENDOR_EP_BULK_OUT (4 | USB_EP_DIR_OUT) #define UDI_VENDOR_EP_ISO_IN (5 | USB_EP_DIR_IN) #define UDI_VENDOR_EP_ISO_OUT (6 | USB_EP_DIR_OUT) //! Interface number #define UDI_VENDOR_IFACE_NUMBER 0 //@} //@} //... Eventually add other Interface Configuration //@} /** * Description of Composite Device * @{ */ //! USB Interfaces descriptor structure //#define UDI_COMPOSITE_DESC_T //! USB Interfaces descriptor value for Full Speed //#define UDI_COMPOSITE_DESC_FS //! USB Interfaces descriptor value for High Speed //#define UDI_COMPOSITE_DESC_HS //! USB Interface APIs //#define UDI_COMPOSITE_API // Example for device with cdc, msc and hid mouse interface #define UDI_COMPOSITE_DESC_T \ usb_iad_desc_t udi_cdc_iad; \ udi_cdc_comm_desc_t udi_cdc_comm; \ udi_cdc_data_desc_t udi_cdc_data; \ udi_hid_kbd_desc_t udi_hid_kbd //udi_msc_desc_t udi_msc; \ //udi_hid_mouse_desc_t udi_hid_mouse //! USB Interfaces descriptor value for Full Speed #define UDI_COMPOSITE_DESC_FS \ .udi_cdc_iad = UDI_CDC_IAD_DESC_0, \ .udi_cdc_comm = UDI_CDC_COMM_DESC_0, \ .udi_cdc_data = UDI_CDC_DATA_DESC_0_FS, \ .udi_hid_kbd = UDI_HID_KBD_DESC //.udi_msc = UDI_MSC_DESC_FS, \ //.udi_hid_mouse = UDI_HID_MOUSE_DESC //! USB Interfaces descriptor value for High Speed #define UDI_COMPOSITE_DESC_HS \ .udi_cdc_iad = UDI_CDC_IAD_DESC_0, \ .udi_cdc_comm = UDI_CDC_COMM_DESC_0, \ .udi_cdc_data = UDI_CDC_DATA_DESC_0_HS, \ .udi_hid_kbd = UDI_HID_KBD_DESC //.udi_msc = UDI_MSC_DESC_HS, \ //.udi_hid_mouse = UDI_HID_MOUSE_DESC //! USB Interface APIs #define UDI_COMPOSITE_API \ &udi_api_cdc_comm, \ &udi_api_cdc_data, \ &udi_api_hid_kbd //&udi_api_msc, \ //&udi_api_hid_mouse //@} /** * USB Device Driver Configuration * @{ */ //@} //! The includes of classes and other headers must be done at the end of this file to avoid compile error #include "udi_hid_kbd.h" #include "udi_cdc.h" /* Example of include for interface #include "udi_msc.h" #include "udi_hid_kbd.h" #include "udi_hid_mouse.h" #include "udi_cdc.h" #include "udi_phdc.h" #include "udi_vendor.h" */ /* Declaration of callbacks used by USB #include "callback_def.h" */ #endif // _CONF_USB_H_