annotate packages/io/usb/common/current/include/usb.h @ 2729:74dbf4c3f2e1 after-copyright-change-20090129

Update all copyright banners to reflect FSF ownership; fix and improve licence text.
author jlarmour
date Thu, 29 Jan 2009 17:47:46 +0000
parents df4d007af7e8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_USB_H
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
2 # define CYGONCE_USB_H
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
3 //==========================================================================
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
4 //
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
5 // include/usb.h
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
6 //
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
7 // Data common to USB host and USB slave
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
8 //
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
9 //==========================================================================
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
10 // ####ECOSGPLCOPYRIGHTBEGIN####
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
11 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
12 // This file is part of eCos, the Embedded Configurable Operating System.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
13 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 151
diff changeset
14 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
15 // eCos is free software; you can redistribute it and/or modify it under
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
16 // the terms of the GNU General Public License as published by the Free
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
17 // Software Foundation; either version 2 or (at your option) any later
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
18 // version.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 151
diff changeset
19 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
20 // eCos is distributed in the hope that it will be useful, but WITHOUT
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
21 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
23 // for more details.
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
24 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
25 // You should have received a copy of the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
26 // along with eCos; if not, write to the Free Software Foundation, Inc.,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
27 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
28 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
29 // As a special exception, if other files instantiate templates or use
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
30 // macros or inline functions from this file, or you compile this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
31 // and link it with other works to produce a work based on this file,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
32 // this file does not by itself cause the resulting work to be covered by
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
33 // the GNU General Public License. However the source code for this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
34 // must still be made available in accordance with section (3) of the GNU
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
35 // General Public License v2.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 151
diff changeset
36 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
37 // This exception does not invalidate any other reasons why a work based
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
38 // on this file might be covered by the GNU General Public License.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
39 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2155
diff changeset
40 // ####ECOSGPLCOPYRIGHTEND####
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
41 //==========================================================================
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
42 //#####DESCRIPTIONBEGIN####
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
43 //
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
44 // Author(s): bartv
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
45 // Contributors: bartv
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
46 // Date: 2000-10-04
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
47 //
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
48 //####DESCRIPTIONEND####
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
49 //==========================================================================
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
50
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
51 #ifdef __cplusplus
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
52 extern "C" {
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
53 #endif
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
54
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
55 // USB device requests, the setup packet.
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
56 //
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
57 // The structure is defined entirely in terms of bytes, eliminating
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
58 // any confusion about who is supposed to swap what when. This avoids
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
59 // endianness-related portability problems, and eliminates any need
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
60 // to worry about alignment. Also for some requests the value field
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
61 // is split into separate bytes anyway.
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
62 typedef struct usb_devreq {
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
63 unsigned char type;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
64 unsigned char request;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
65 unsigned char value_lo;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
66 unsigned char value_hi;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
67 unsigned char index_lo;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
68 unsigned char index_hi;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
69 unsigned char length_lo;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
70 unsigned char length_hi;
2155
df4d007af7e8 * include/usb.h: changed position of __attribute__((packed)) to be
asl
parents: 210
diff changeset
71 } __attribute__((packed)) usb_devreq;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
72
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
73 // Encoding of the request_type
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
74 #define USB_DEVREQ_DIRECTION_OUT 0
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
75 #define USB_DEVREQ_DIRECTION_IN (1 << 7)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
76 #define USB_DEVREQ_DIRECTION_MASK (1 << 7)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
77
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
78 #define USB_DEVREQ_TYPE_STANDARD 0
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
79 #define USB_DEVREQ_TYPE_CLASS (0x1 << 5)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
80 #define USB_DEVREQ_TYPE_VENDOR (0x2 << 5)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
81 #define USB_DEVREQ_TYPE_RESERVED (0x3 << 5)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
82 #define USB_DEVREQ_TYPE_MASK (0x3 << 5)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
83
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
84 #define USB_DEVREQ_RECIPIENT_DEVICE 0x00
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
85 #define USB_DEVREQ_RECIPIENT_INTERFACE 0x01
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
86 #define USB_DEVREQ_RECIPIENT_ENDPOINT 0x02
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
87 #define USB_DEVREQ_RECIPIENT_OTHER 0x03
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
88 #define USB_DEVREQ_RECIPIENT_MASK 0x1F
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
89
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
90 // The standard request codes.
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
91 #define USB_DEVREQ_GET_STATUS 0
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
92 #define USB_DEVREQ_CLEAR_FEATURE 1
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
93 #define USB_DEVREQ_SET_FEATURE 3
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
94 #define USB_DEVREQ_SET_ADDRESS 5
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
95 #define USB_DEVREQ_GET_DESCRIPTOR 6
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
96 #define USB_DEVREQ_SET_DESCRIPTOR 7
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
97 #define USB_DEVREQ_GET_CONFIGURATION 8
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
98 #define USB_DEVREQ_SET_CONFIGURATION 9
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
99 #define USB_DEVREQ_GET_INTERFACE 10
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
100 #define USB_DEVREQ_SET_INTERFACE 11
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
101 #define USB_DEVREQ_SYNCH_FRAME 12
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
102
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
103 // Descriptor types. These are placed in value_hi for the
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
104 // GET_DESCRIPTOR and SET_DESCRIPTOR requests, with an index
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
105 // in value_lo. They also go into the type fields of the
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
106 // various descriptor structures.
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
107 #define USB_DEVREQ_DESCRIPTOR_TYPE_DEVICE 1
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
108 #define USB_DEVREQ_DESCRIPTOR_TYPE_CONFIGURATION 2
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
109 #define USB_DEVREQ_DESCRIPTOR_TYPE_STRING 3
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
110 #define USB_DEVREQ_DESCRIPTOR_TYPE_INTERFACE 4
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
111 #define USB_DEVREQ_DESCRIPTOR_TYPE_ENDPOINT 5
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
112
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
113 // Feature selectors. These go into value_lo for the CLEAR_FEATURE and
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
114 // SET_FEATURE requests, and in the first response byte for
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
115 // GET_STATUS.
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
116 #define USB_DEVREQ_FEATURE_DEVICE_REMOTE_WAKEUP 1
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
117 #define USB_DEVREQ_FEATURE_ENDPOINT_HALT 0
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
118
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
119 // Index decoding. When the CLEAR_FEATURE, SET_FEATURE and GET_STATUS
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
120 // requests is applied to an endpoint (as per the recipient field in
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
121 // the type field) index_lo identifies the endpoint.
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
122 #define USB_DEVREQ_INDEX_DIRECTION_OUT 0
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
123 #define USB_DEVREQ_INDEX_DIRECTION_IN (1 << 7)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
124 #define USB_DEVREQ_INDEX_DIRECTION_MASK (1 << 7)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
125 #define USB_DEVREQ_INDEX_ENDPOINT_MASK 0x0F
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
126
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
127 // Descriptors for the GET_DESCRIPTOR and SET_DESCRIPTOR requests.
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
128 typedef struct usb_device_descriptor {
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
129 unsigned char length; // USB_DEVICE_DESCRIPTOR_LENGTH == 18
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
130 unsigned char type; // USB_DEVREQ_DESCRIPTOR_TYPE
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
131 unsigned char usb_spec_lo;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
132 unsigned char usb_spec_hi;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
133 unsigned char device_class;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
134 unsigned char device_subclass;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
135 unsigned char device_protocol;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
136 unsigned char max_packet_size;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
137 unsigned char vendor_lo;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
138 unsigned char vendor_hi;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
139 unsigned char product_lo;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
140 unsigned char product_hi;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
141 unsigned char device_lo;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
142 unsigned char device_hi;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
143 unsigned char manufacturer_str;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
144 unsigned char product_str;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
145 unsigned char serial_number_str;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
146 unsigned char number_configurations;
2155
df4d007af7e8 * include/usb.h: changed position of __attribute__((packed)) to be
asl
parents: 210
diff changeset
147 } __attribute__((packed)) usb_device_descriptor;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
148
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
149 #define USB_DEVICE_DESCRIPTOR_LENGTH 18
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
150 #define USB_DEVICE_DESCRIPTOR_TYPE USB_DEVREQ_DESCRIPTOR_TYPE_DEVICE
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
151 #define USB_DEVICE_DESCRIPTOR_USB11_LO 0x10
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
152 #define USB_DEVICE_DESCRIPTOR_USB11_HI 0x01
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
153
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
154 #define USB_DEVICE_DESCRIPTOR_CLASS_INTERFACE 0x00
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
155 #define USB_DEVICE_DESCRIPTOR_CLASS_VENDOR 0x00FF
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
156 #define USB_DEVICE_DESCRIPTOR_SUBCLASS_INTERFACE 0x00
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
157 #define USB_DEVICE_DESCRIPTOR_SUBCLASS_VENDOR 0x00FF
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
158 #define USB_DEVICE_DESCRIPTOR_PROTOCOL_INTERFACE 0x00
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
159 #define USB_DEVICE_DESCRIPTOR_PROTOCOL_VENDOR 0x00FF
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
160
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
161 typedef struct usb_configuration_descriptor {
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
162 unsigned char length;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
163 unsigned char type;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
164 unsigned char total_length_lo;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
165 unsigned char total_length_hi;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
166 unsigned char number_interfaces;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
167 unsigned char configuration_id;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
168 unsigned char configuration_str;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
169 unsigned char attributes;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
170 unsigned char max_power;
2155
df4d007af7e8 * include/usb.h: changed position of __attribute__((packed)) to be
asl
parents: 210
diff changeset
171 } __attribute__((packed)) usb_configuration_descriptor;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
172
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
173 #define USB_CONFIGURATION_DESCRIPTOR_LENGTH 9
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
174 #define USB_CONFIGURATION_DESCRIPTOR_TYPE USB_DEVREQ_DESCRIPTOR_TYPE_CONFIGURATION
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
175 #define USB_CONFIGURATION_DESCRIPTOR_ATTR_REQUIRED (1 << 7)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
176 #define USB_CONFIGURATION_DESCRIPTOR_ATTR_SELF_POWERED (1 << 6)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
177 #define USB_CONFIGURATION_DESCRIPTOR_ATTR_REMOTE_WAKEUP (1 << 5)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
178
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
179 typedef struct usb_interface_descriptor {
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
180 unsigned char length;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
181 unsigned char type;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
182 unsigned char interface_id;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
183 unsigned char alternate_setting;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
184 unsigned char number_endpoints;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
185 unsigned char interface_class;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
186 unsigned char interface_subclass;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
187 unsigned char interface_protocol;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
188 unsigned char interface_str;
2155
df4d007af7e8 * include/usb.h: changed position of __attribute__((packed)) to be
asl
parents: 210
diff changeset
189 } __attribute__((packed)) usb_interface_descriptor;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
190
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
191 #define USB_INTERFACE_DESCRIPTOR_LENGTH 9
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
192 #define USB_INTERFACE_DESCRIPTOR_TYPE USB_DEVREQ_DESCRIPTOR_TYPE_INTERFACE
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
193 #define USB_INTERFACE_DESCRIPTOR_CLASS_VENDOR 0x00FF
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
194 #define USB_INTERFACE_DESCRIPTOR_SUBCLASS_VENDOR 0x00FF
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
195 #define USB_INTERFACE_DESCRIPTOR_PROTOCOL_VENDOR 0x00FF
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
196
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
197 typedef struct usb_endpoint_descriptor {
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
198 unsigned char length;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
199 unsigned char type;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
200 unsigned char endpoint;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
201 unsigned char attributes;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
202 unsigned char max_packet_lo;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
203 unsigned char max_packet_hi;
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
204 unsigned char interval;
2155
df4d007af7e8 * include/usb.h: changed position of __attribute__((packed)) to be
asl
parents: 210
diff changeset
205 } __attribute__((packed)) usb_endpoint_descriptor;
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
206
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
207 #define USB_ENDPOINT_DESCRIPTOR_LENGTH 7
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
208 #define USB_ENDPOINT_DESCRIPTOR_TYPE USB_DEVREQ_DESCRIPTOR_TYPE_ENDPOINT
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
209 #define USB_ENDPOINT_DESCRIPTOR_ENDPOINT_OUT 0
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
210 #define USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN (1 << 7)
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
211 #define USB_ENDPOINT_DESCRIPTOR_ATTR_CONTROL 0x00
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
212 #define USB_ENDPOINT_DESCRIPTOR_ATTR_ISOCHRONOUS 0x01
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
213 #define USB_ENDPOINT_DESCRIPTOR_ATTR_BULK 0x02
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
214 #define USB_ENDPOINT_DESCRIPTOR_ATTR_INTERRUPT 0x03
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
215
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
216 // String descriptors. If these are used at all then string 0
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
217 // must be a table of supported LANGID codes. For a simple device
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
218 // which only supports US English, the following sequence of
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
219 // four bytes should suffice for string 0. In practice string
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
220 // constants tend to be used which makes the use of these
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
221 // #define's difficult.
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
222 #define USB_STRING_DESCRIPTOR_STRING0_LENGTH 4
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
223 #define USB_STRING_DESCRIPTOR_STRING0_TYPE USB_DEVREQ_DESCRIPTOR_TYPE_STRING
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
224 #define USB_STRING_DESCRIPTOR_STRING0_LANGID_LO 0x09
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
225 #define USB_STRING_DESCRIPTOR_STRING0_LANGID_HI 0x04
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
226
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
227 // For subsequent strings the length and data will have to be
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
228 // determined by the application developer or by a suitable tool.
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
229 #define USB_STRING_DESCRIPTOR_TYPE USB_DEVREQ_DESCRIPTOR_TYPE_STRING
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
230
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
231 // Utility macros to calculate the total_length fields in a
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
232 // configuration descriptor.
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
233 #define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_LO(interfaces, endpoints) \
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
234 (USB_CONFIGURATION_DESCRIPTOR_LENGTH + \
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
235 (interfaces * USB_INTERFACE_DESCRIPTOR_LENGTH) + \
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
236 (endpoints * USB_ENDPOINT_DESCRIPTOR_LENGTH)) % 256
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
237
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
238 #define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_HI(interfaces, endpoints) \
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
239 (USB_CONFIGURATION_DESCRIPTOR_LENGTH + \
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
240 (interfaces * USB_INTERFACE_DESCRIPTOR_LENGTH) + \
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
241 (endpoints * USB_ENDPOINT_DESCRIPTOR_LENGTH)) / 256
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
242
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
243 #ifdef __cplusplus
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
244 } // extern "C" {
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
245 #endif
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
246
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
247 #endif // CYGONCE_USB_H
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents:
diff changeset
248