view Bootloader/dfu.desc.c @ 303:f9c406854bc2

Set DFU bootloader name Fixes #22 Each (dfu) interface may have more than one a ltsetting each with their own index and name. According to the DFU_1.1 pdf section 4.2.3, "* Alternate settings can be used by an application to access additional memory segments. In this case, it is suggested that each alternate setting employ a string descriptor to indicate the target memory segment; e.g., 'EEPROM'." Whether or not we end up using multiple memory segments it is still good to have a descriptive name incase there are other dfu devices connected. Edit: Fixed previous indentation
author Rowan Decker <Smasher816@gmail.com>
date Sun, 08 Mar 2015 16:59:34 -0700
parents b091bb09c55f
children f4d4cad283c6
line wrap: on
line source

// Originally Generated from MCHCK Toolkit
/* Copyright (c) Jacob Alexander 2014 <haata@kiibohd.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

// ----- Local Includes -----

#include "dfu.desc.h"



// ----- Generated Includes -----

#include <buildvars.h>



// ----- Structs -----

static const struct usb_config_1 usb_config_1 = {
	.config = {
		.bLength = sizeof(struct usb_desc_config_t),
		.bDescriptorType = USB_DESC_CONFIG,
		.wTotalLength = sizeof(struct usb_config_1),
		.bNumInterfaces = 1,
		.bConfigurationValue = 1,
		.iConfiguration = 0,
		.one = 1,
		.bMaxPower = 100
	},
	.usb_function_0 = {
		.iface = {
			.bLength = sizeof(struct usb_desc_iface_t),
			.bDescriptorType = USB_DESC_IFACE,
			.bInterfaceNumber = 0,
			.bAlternateSetting = 0,
			.bNumEndpoints = 0,
			.bInterfaceClass = USB_DEV_CLASS_APP,
			.bInterfaceSubClass = USB_DEV_SUBCLASS_APP_DFU,
			.bInterfaceProtocol = USB_DEV_PROTO_DFU_DFU,
			.iInterface = 4
		},

	.dfu = {
		.bLength = sizeof(struct dfu_desc_functional),
		.bDescriptorType = {
			.id = 0x1,
			.type_type = USB_DESC_TYPE_CLASS
		},
		.will_detach = 1,
		.manifestation_tolerant = 0,
		.can_upload = 0,
		.can_download = 1,
		.wDetachTimeOut = 0,
		.wTransferSize = USB_DFU_TRANSFER_SIZE,
		.bcdDFUVersion = { .maj = 1, .min = 1 }
	}
},

};

static const struct usbd_config usbd_config_1 = {
	.init = init_usb_bootloader,
	.suspend = NULL,
	.resume = NULL,
	.desc = &usb_config_1.config,
	.function = {&dfu_function},
};

static const struct usb_desc_dev_t dfu_device_dev_desc = {
	.bLength = sizeof(struct usb_desc_dev_t),
	.bDescriptorType = USB_DESC_DEV,
	.bcdUSB = { .maj = 2 },
	.bDeviceClass = USB_DEV_CLASS_SEE_IFACE,
	.bDeviceSubClass = USB_DEV_SUBCLASS_SEE_IFACE,
	.bDeviceProtocol = USB_DEV_PROTO_SEE_IFACE,
	.bMaxPacketSize0 = EP0_BUFSIZE,
	.idVendor = VENDOR_ID,
	.idProduct = PRODUCT_ID,
	.bcdDevice = { .raw = 0 },
	.iManufacturer = 1,
	.iProduct = 2,
	.iSerialNumber = 3,
	.bNumConfigurations = 1,
};

static const struct usb_desc_string_t * const dfu_device_str_desc[] = {
	USB_DESC_STRING_LANG_ENUS,
	USB_DESC_STRING(STR_MANUFACTURER),
	USB_DESC_STRING(STR_PRODUCT),
	USB_DESC_STRING(STR_SERIAL),
	USB_DESC_STRING(STR_ALTNAME),
	NULL
};

const struct usbd_device dfu_device = {
	.dev_desc = &dfu_device_dev_desc,
	.string_descs = dfu_device_str_desc,
	.configs = {
		&usbd_config_1,
		NULL
	}
};