/* * (C) 2018, sysmocom -s.f.m.c. GmbH, Author: Kevin Redon * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "atmel_start.h" #include "usb_start.h" #if CONF_USBD_HS_SP static uint8_t single_desc_bytes[] = { /* Device descriptors and Configuration descriptors list. */ DFUD_HS_DESCES_LS_FS}; static uint8_t single_desc_bytes_hs[] = { /* Device descriptors and Configuration descriptors list. */ DFUD_HS_DESCES_HS}; #else static uint8_t single_desc_bytes[] = { /* Device descriptors and Configuration descriptors list. */ DFUD_DESCES_LS_FS}; #endif static struct usbd_descriptors single_desc[] = {{single_desc_bytes, single_desc_bytes + sizeof(single_desc_bytes)} #if CONF_USBD_HS_SP , {single_desc_bytes_hs, single_desc_bytes_hs + sizeof(single_desc_bytes_hs)} #endif }; /** Ctrl endpoint buffer */ static uint8_t ctrl_buffer[64]; /** * \brief USB DFU Init */ void usb_dfu_init(void) { /* usb stack init */ usbdc_init(ctrl_buffer); /* usbdc_register_funcion inside */ dfudf_init(); usbdc_start(single_desc); usbdc_attach(); } /** * Example of using CDC ACM Function. * \note * In this example, we will use a PC as a USB host: * - Connect the DEBUG USB on XPLAINED board to PC for program download. * - Connect the TARGET USB on XPLAINED board to PC for running program. * The application will behave as a virtual COM. * - Open a HyperTerminal or other COM tools in PC side. * - Send out a character or string and it will echo the content received. */ void usb_dfu(void) { while (!dfudf_is_enabled()) { // wait DFU to be installed }; while (1) { } } void usb_init(void) { usb_dfu_init(); }