<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.ywrobot.net/index.php?action=history&amp;feed=atom&amp;title=USBCore.h</id>
		<title>USBCore.h - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.ywrobot.net/index.php?action=history&amp;feed=atom&amp;title=USBCore.h"/>
		<link rel="alternate" type="text/html" href="http://wiki.ywrobot.net/index.php?title=USBCore.h&amp;action=history"/>
		<updated>2026-05-14T11:43:08Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://wiki.ywrobot.net/index.php?title=USBCore.h&amp;diff=83&amp;oldid=prev</id>
		<title>YWrobot CYB：创建页面，内容为“&lt;pre style=&quot;color:blue&quot;&gt;  // Copyright (c) 2010, Peter Barrett  /* ** Permission to use, copy, modify, and/or distribute this software for   ** any purpose with or w...”</title>
		<link rel="alternate" type="text/html" href="http://wiki.ywrobot.net/index.php?title=USBCore.h&amp;diff=83&amp;oldid=prev"/>
				<updated>2016-04-25T02:15:07Z</updated>
		
		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;lt;pre style=&amp;quot;color:blue&amp;quot;&amp;gt;  // Copyright (c) 2010, Peter Barrett  /* ** Permission to use, copy, modify, and/or distribute this software for   ** any purpose with or w...”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre style=&amp;quot;color:blue&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Copyright (c) 2010, Peter Barrett &lt;br /&gt;
/*&lt;br /&gt;
** Permission to use, copy, modify, and/or distribute this software for  &lt;br /&gt;
** any purpose with or without fee is hereby granted, provided that the  &lt;br /&gt;
** above copyright notice and this permission notice appear in all copies.  &lt;br /&gt;
**  &lt;br /&gt;
** THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot; AND THE AUTHOR DISCLAIMS ALL  &lt;br /&gt;
** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED  &lt;br /&gt;
** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR  &lt;br /&gt;
** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES  &lt;br /&gt;
** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,  &lt;br /&gt;
** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,  &lt;br /&gt;
** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS  &lt;br /&gt;
** SOFTWARE.  &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#ifndef __USBCORE_H__&lt;br /&gt;
#define __USBCORE_H__&lt;br /&gt;
&lt;br /&gt;
//	Standard requests&lt;br /&gt;
#define GET_STATUS			0&lt;br /&gt;
#define CLEAR_FEATURE		1&lt;br /&gt;
#define SET_FEATURE			3&lt;br /&gt;
#define SET_ADDRESS			5&lt;br /&gt;
#define GET_DESCRIPTOR		6&lt;br /&gt;
#define SET_DESCRIPTOR		7&lt;br /&gt;
#define GET_CONFIGURATION	8&lt;br /&gt;
#define SET_CONFIGURATION	9&lt;br /&gt;
#define GET_INTERFACE		10&lt;br /&gt;
#define SET_INTERFACE		11&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// bmRequestType&lt;br /&gt;
#define REQUEST_HOSTTODEVICE	0x00&lt;br /&gt;
#define REQUEST_DEVICETOHOST	0x80&lt;br /&gt;
#define REQUEST_DIRECTION		0x80&lt;br /&gt;
&lt;br /&gt;
#define REQUEST_STANDARD		0x00&lt;br /&gt;
#define REQUEST_CLASS			0x20&lt;br /&gt;
#define REQUEST_VENDOR			0x40&lt;br /&gt;
#define REQUEST_TYPE			0x60&lt;br /&gt;
&lt;br /&gt;
#define REQUEST_DEVICE			0x00&lt;br /&gt;
#define REQUEST_INTERFACE		0x01&lt;br /&gt;
#define REQUEST_ENDPOINT		0x02&lt;br /&gt;
#define REQUEST_OTHER			0x03&lt;br /&gt;
#define REQUEST_RECIPIENT		0x03&lt;br /&gt;
&lt;br /&gt;
#define REQUEST_DEVICETOHOST_CLASS_INTERFACE  (REQUEST_DEVICETOHOST + REQUEST_CLASS + REQUEST_INTERFACE)&lt;br /&gt;
#define REQUEST_HOSTTODEVICE_CLASS_INTERFACE  (REQUEST_HOSTTODEVICE + REQUEST_CLASS + REQUEST_INTERFACE)&lt;br /&gt;
&lt;br /&gt;
//	Class requests&lt;br /&gt;
&lt;br /&gt;
#define CDC_SET_LINE_CODING			0x20&lt;br /&gt;
#define CDC_GET_LINE_CODING			0x21&lt;br /&gt;
#define CDC_SET_CONTROL_LINE_STATE	0x22&lt;br /&gt;
&lt;br /&gt;
#define MSC_RESET					0xFF&lt;br /&gt;
#define MSC_GET_MAX_LUN				0xFE&lt;br /&gt;
&lt;br /&gt;
#define HID_GET_REPORT				0x01&lt;br /&gt;
#define HID_GET_IDLE				0x02&lt;br /&gt;
#define HID_GET_PROTOCOL			0x03&lt;br /&gt;
#define HID_SET_REPORT				0x09&lt;br /&gt;
#define HID_SET_IDLE				0x0A&lt;br /&gt;
#define HID_SET_PROTOCOL			0x0B&lt;br /&gt;
&lt;br /&gt;
//	Descriptors&lt;br /&gt;
&lt;br /&gt;
#define USB_DEVICE_DESC_SIZE 18&lt;br /&gt;
#define USB_CONFIGUARTION_DESC_SIZE 9&lt;br /&gt;
#define USB_INTERFACE_DESC_SIZE 9&lt;br /&gt;
#define USB_ENDPOINT_DESC_SIZE 7&lt;br /&gt;
&lt;br /&gt;
#define USB_DEVICE_DESCRIPTOR_TYPE             1&lt;br /&gt;
#define USB_CONFIGURATION_DESCRIPTOR_TYPE      2&lt;br /&gt;
#define USB_STRING_DESCRIPTOR_TYPE             3&lt;br /&gt;
#define USB_INTERFACE_DESCRIPTOR_TYPE          4&lt;br /&gt;
#define USB_ENDPOINT_DESCRIPTOR_TYPE           5&lt;br /&gt;
&lt;br /&gt;
#define USB_DEVICE_CLASS_COMMUNICATIONS        0x02&lt;br /&gt;
#define USB_DEVICE_CLASS_HUMAN_INTERFACE       0x03&lt;br /&gt;
#define USB_DEVICE_CLASS_STORAGE               0x08&lt;br /&gt;
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC       0xFF&lt;br /&gt;
&lt;br /&gt;
#define USB_CONFIG_POWERED_MASK                0x40&lt;br /&gt;
#define USB_CONFIG_BUS_POWERED                 0x80&lt;br /&gt;
#define USB_CONFIG_SELF_POWERED                0xC0&lt;br /&gt;
#define USB_CONFIG_REMOTE_WAKEUP               0x20&lt;br /&gt;
&lt;br /&gt;
// bMaxPower in Configuration Descriptor&lt;br /&gt;
#define USB_CONFIG_POWER_MA(mA)                ((mA)/2)&lt;br /&gt;
&lt;br /&gt;
// bEndpointAddress in Endpoint Descriptor&lt;br /&gt;
#define USB_ENDPOINT_DIRECTION_MASK            0x80&lt;br /&gt;
#define USB_ENDPOINT_OUT(addr)                 ((addr) | 0x00)&lt;br /&gt;
#define USB_ENDPOINT_IN(addr)                  ((addr) | 0x80)&lt;br /&gt;
&lt;br /&gt;
#define USB_ENDPOINT_TYPE_MASK                 0x03&lt;br /&gt;
#define USB_ENDPOINT_TYPE_CONTROL              0x00&lt;br /&gt;
#define USB_ENDPOINT_TYPE_ISOCHRONOUS          0x01&lt;br /&gt;
#define USB_ENDPOINT_TYPE_BULK                 0x02&lt;br /&gt;
#define USB_ENDPOINT_TYPE_INTERRUPT            0x03&lt;br /&gt;
&lt;br /&gt;
#define TOBYTES(x) ((x) &amp;amp; 0xFF),(((x) &amp;gt;&amp;gt; 8) &amp;amp; 0xFF)&lt;br /&gt;
&lt;br /&gt;
#define CDC_V1_10                               0x0110&lt;br /&gt;
#define CDC_COMMUNICATION_INTERFACE_CLASS       0x02&lt;br /&gt;
&lt;br /&gt;
#define CDC_CALL_MANAGEMENT                     0x01&lt;br /&gt;
#define CDC_ABSTRACT_CONTROL_MODEL              0x02&lt;br /&gt;
#define CDC_HEADER                              0x00&lt;br /&gt;
#define CDC_ABSTRACT_CONTROL_MANAGEMENT         0x02&lt;br /&gt;
#define CDC_UNION                               0x06&lt;br /&gt;
#define CDC_CS_INTERFACE                        0x24&lt;br /&gt;
#define CDC_CS_ENDPOINT                         0x25&lt;br /&gt;
#define CDC_DATA_INTERFACE_CLASS                0x0A&lt;br /&gt;
&lt;br /&gt;
#define MSC_SUBCLASS_SCSI						0x06 &lt;br /&gt;
#define MSC_PROTOCOL_BULK_ONLY					0x50 &lt;br /&gt;
&lt;br /&gt;
#define HID_HID_DESCRIPTOR_TYPE					0x21&lt;br /&gt;
#define HID_REPORT_DESCRIPTOR_TYPE				0x22&lt;br /&gt;
#define HID_PHYSICAL_DESCRIPTOR_TYPE			0x23&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//	Device&lt;br /&gt;
typedef struct {&lt;br /&gt;
	u8 len;				// 18&lt;br /&gt;
	u8 dtype;			// 1 USB_DEVICE_DESCRIPTOR_TYPE&lt;br /&gt;
	u16 usbVersion;		// 0x200&lt;br /&gt;
	u8	deviceClass;&lt;br /&gt;
	u8	deviceSubClass;&lt;br /&gt;
	u8	deviceProtocol;&lt;br /&gt;
	u8	packetSize0;	// Packet 0&lt;br /&gt;
	u16	idVendor;&lt;br /&gt;
	u16	idProduct;&lt;br /&gt;
	u16	deviceVersion;	// 0x100&lt;br /&gt;
	u8	iManufacturer;&lt;br /&gt;
	u8	iProduct;&lt;br /&gt;
	u8	iSerialNumber;&lt;br /&gt;
	u8	bNumConfigurations;&lt;br /&gt;
} DeviceDescriptor;&lt;br /&gt;
&lt;br /&gt;
//	Config&lt;br /&gt;
typedef struct {&lt;br /&gt;
	u8	len;			// 9&lt;br /&gt;
	u8	dtype;			// 2&lt;br /&gt;
	u16 clen;			// total length&lt;br /&gt;
	u8	numInterfaces;&lt;br /&gt;
	u8	config;&lt;br /&gt;
	u8	iconfig;&lt;br /&gt;
	u8	attributes;&lt;br /&gt;
	u8	maxPower;&lt;br /&gt;
} ConfigDescriptor;&lt;br /&gt;
&lt;br /&gt;
//	String&lt;br /&gt;
&lt;br /&gt;
//	Interface&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
	u8 len;		// 9&lt;br /&gt;
	u8 dtype;	// 4&lt;br /&gt;
	u8 number;&lt;br /&gt;
	u8 alternate;&lt;br /&gt;
	u8 numEndpoints;&lt;br /&gt;
	u8 interfaceClass;&lt;br /&gt;
	u8 interfaceSubClass;&lt;br /&gt;
	u8 protocol;&lt;br /&gt;
	u8 iInterface;&lt;br /&gt;
} InterfaceDescriptor;&lt;br /&gt;
&lt;br /&gt;
//	Endpoint&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
	u8 len;		// 7&lt;br /&gt;
	u8 dtype;	// 5&lt;br /&gt;
	u8 addr;&lt;br /&gt;
	u8 attr;&lt;br /&gt;
	u16 packetSize;&lt;br /&gt;
	u8 interval;&lt;br /&gt;
} EndpointDescriptor;&lt;br /&gt;
&lt;br /&gt;
// Interface Association Descriptor&lt;br /&gt;
// Used to bind 2 interfaces together in CDC compostite device&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
	u8 len;				// 8&lt;br /&gt;
	u8 dtype;			// 11&lt;br /&gt;
	u8 firstInterface;&lt;br /&gt;
	u8 interfaceCount;&lt;br /&gt;
	u8 functionClass;&lt;br /&gt;
	u8 funtionSubClass;&lt;br /&gt;
	u8 functionProtocol;&lt;br /&gt;
	u8 iInterface;&lt;br /&gt;
} IADDescriptor;&lt;br /&gt;
&lt;br /&gt;
//	CDC CS interface descriptor&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
	u8 len;		// 5&lt;br /&gt;
	u8 dtype;	// 0x24&lt;br /&gt;
	u8 subtype;&lt;br /&gt;
	u8 d0;&lt;br /&gt;
	u8 d1;&lt;br /&gt;
} CDCCSInterfaceDescriptor;&lt;br /&gt;
&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
	u8 len;		// 4&lt;br /&gt;
	u8 dtype;	// 0x24&lt;br /&gt;
	u8 subtype;&lt;br /&gt;
	u8 d0;&lt;br /&gt;
} CDCCSInterfaceDescriptor4;&lt;br /&gt;
&lt;br /&gt;
typedef struct &lt;br /&gt;
{&lt;br /&gt;
    u8	len;&lt;br /&gt;
    u8 	dtype;		// 0x24&lt;br /&gt;
    u8 	subtype;	// 1&lt;br /&gt;
    u8 	bmCapabilities;&lt;br /&gt;
    u8 	bDataInterface;&lt;br /&gt;
} CMFunctionalDescriptor;&lt;br /&gt;
	&lt;br /&gt;
typedef struct &lt;br /&gt;
{&lt;br /&gt;
    u8	len;&lt;br /&gt;
    u8 	dtype;		// 0x24&lt;br /&gt;
    u8 	subtype;	// 1&lt;br /&gt;
    u8 	bmCapabilities;&lt;br /&gt;
} ACMFunctionalDescriptor;&lt;br /&gt;
&lt;br /&gt;
typedef struct &lt;br /&gt;
{&lt;br /&gt;
	//	IAD&lt;br /&gt;
	IADDescriptor				iad;	// Only needed on compound device&lt;br /&gt;
&lt;br /&gt;
	//	Control&lt;br /&gt;
	InterfaceDescriptor			cif;	// &lt;br /&gt;
	CDCCSInterfaceDescriptor	header;&lt;br /&gt;
	CMFunctionalDescriptor		callManagement;			// Call Management&lt;br /&gt;
	ACMFunctionalDescriptor		controlManagement;		// ACM&lt;br /&gt;
	CDCCSInterfaceDescriptor	functionalDescriptor;	// CDC_UNION&lt;br /&gt;
	EndpointDescriptor			cifin;&lt;br /&gt;
&lt;br /&gt;
	//	Data&lt;br /&gt;
	InterfaceDescriptor			dif;&lt;br /&gt;
	EndpointDescriptor			in;&lt;br /&gt;
	EndpointDescriptor			out;&lt;br /&gt;
} CDCDescriptor;&lt;br /&gt;
&lt;br /&gt;
typedef struct &lt;br /&gt;
{&lt;br /&gt;
	InterfaceDescriptor			msc;&lt;br /&gt;
	EndpointDescriptor			in;&lt;br /&gt;
	EndpointDescriptor			out;&lt;br /&gt;
} MSCDescriptor;&lt;br /&gt;
&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
	u8 len;			// 9&lt;br /&gt;
	u8 dtype;		// 0x21&lt;br /&gt;
	u8 addr;&lt;br /&gt;
	u8	versionL;	// 0x101&lt;br /&gt;
	u8	versionH;	// 0x101&lt;br /&gt;
	u8	country;&lt;br /&gt;
	u8	desctype;	// 0x22 report&lt;br /&gt;
	u8	descLenL;&lt;br /&gt;
	u8	descLenH;&lt;br /&gt;
} HIDDescDescriptor;&lt;br /&gt;
&lt;br /&gt;
typedef struct &lt;br /&gt;
{&lt;br /&gt;
	InterfaceDescriptor			hid;&lt;br /&gt;
	HIDDescDescriptor			desc;&lt;br /&gt;
	EndpointDescriptor			in;&lt;br /&gt;
} HIDDescriptor;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define D_DEVICE(_class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_configs) \&lt;br /&gt;
	{ 18, 1, 0x200, _class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_configs }&lt;br /&gt;
&lt;br /&gt;
#define D_CONFIG(_totalLength,_interfaces) \&lt;br /&gt;
	{ 9, 2, _totalLength,_interfaces, 1, 0, USB_CONFIG_BUS_POWERED, USB_CONFIG_POWER_MA(500) }&lt;br /&gt;
&lt;br /&gt;
#define D_INTERFACE(_n,_numEndpoints,_class,_subClass,_protocol) \&lt;br /&gt;
	{ 9, 4, _n, 0, _numEndpoints, _class,_subClass, _protocol, 0 }&lt;br /&gt;
&lt;br /&gt;
#define D_ENDPOINT(_addr,_attr,_packetSize, _interval) \&lt;br /&gt;
	{ 7, 5, _addr,_attr,_packetSize, _interval }&lt;br /&gt;
&lt;br /&gt;
#define D_IAD(_firstInterface, _count, _class, _subClass, _protocol) \&lt;br /&gt;
	{ 8, 11, _firstInterface, _count, _class, _subClass, _protocol, 0 }&lt;br /&gt;
&lt;br /&gt;
#define D_HIDREPORT(_descriptorLength) \&lt;br /&gt;
	{ 9, 0x21, 0x1, 0x1, 0, 1, 0x22, _descriptorLength, 0 }&lt;br /&gt;
&lt;br /&gt;
#define D_CDCCS(_subtype,_d0,_d1)	{ 5, 0x24, _subtype, _d0, _d1 }&lt;br /&gt;
#define D_CDCCS4(_subtype,_d0)		{ 4, 0x24, _subtype, _d0 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>YWrobot CYB</name></author>	</entry>

	</feed>