source: arduino-1-6-7/trunk/fuentes/arduino-ide-amd64/hardware/tools/avr/include/usb.h @ 4837

Last change on this file since 4837 was 4837, checked in by daduve, 2 years ago

Adding new version

File size: 8.6 KB
Line 
1/*
2 * Prototypes, structure definitions and macros.
3 *
4 * Copyright (c) 2000-2003 Johannes Erdfelt <johannes@erdfelt.com>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * This file (and only this file) may alternatively be licensed under the
21 * BSD license. See the LICENSE file shipped with the libusb-compat-0.1 source
22 * distribution for details.
23 */
24
25#ifndef __USB_H__
26#define __USB_H__
27
28#include <unistd.h>
29#include <stdlib.h>
30#include <limits.h>
31
32#include <dirent.h>
33
34/*
35 * USB spec information
36 *
37 * This is all stuff grabbed from various USB specs and is pretty much
38 * not subject to change
39 */
40
41/*
42 * Device and/or Interface Class codes
43 */
44#define USB_CLASS_PER_INTERFACE         0       /* for DeviceClass */
45#define USB_CLASS_AUDIO                 1
46#define USB_CLASS_COMM                  2
47#define USB_CLASS_HID                   3
48#define USB_CLASS_PRINTER               7
49#define USB_CLASS_PTP                   6
50#define USB_CLASS_MASS_STORAGE          8
51#define USB_CLASS_HUB                   9
52#define USB_CLASS_DATA                  10
53#define USB_CLASS_VENDOR_SPEC           0xff
54
55/*
56 * Descriptor types
57 */
58#define USB_DT_DEVICE                   0x01
59#define USB_DT_CONFIG                   0x02
60#define USB_DT_STRING                   0x03
61#define USB_DT_INTERFACE                0x04
62#define USB_DT_ENDPOINT                 0x05
63
64#define USB_DT_HID                      0x21
65#define USB_DT_REPORT                   0x22
66#define USB_DT_PHYSICAL                 0x23
67#define USB_DT_HUB                      0x29
68
69/*
70 * Descriptor sizes per descriptor type
71 */
72#define USB_DT_DEVICE_SIZE              18
73#define USB_DT_CONFIG_SIZE              9
74#define USB_DT_INTERFACE_SIZE           9
75#define USB_DT_ENDPOINT_SIZE            7
76#define USB_DT_ENDPOINT_AUDIO_SIZE      9       /* Audio extension */
77#define USB_DT_HUB_NONVAR_SIZE          7
78
79/* All standard descriptors have these 2 fields in common */
80struct usb_descriptor_header {
81        u_int8_t  bLength;
82        u_int8_t  bDescriptorType;
83};
84
85/* String descriptor */
86struct usb_string_descriptor {
87        u_int8_t  bLength;
88        u_int8_t  bDescriptorType;
89        u_int16_t wData[1];
90};
91
92/* HID descriptor */
93struct usb_hid_descriptor {
94        u_int8_t  bLength;
95        u_int8_t  bDescriptorType;
96        u_int16_t bcdHID;
97        u_int8_t  bCountryCode;
98        u_int8_t  bNumDescriptors;
99        /* u_int8_t  bReportDescriptorType; */
100        /* u_int16_t wDescriptorLength; */
101        /* ... */
102};
103
104/* Endpoint descriptor */
105#define USB_MAXENDPOINTS        32
106struct usb_endpoint_descriptor {
107        u_int8_t  bLength;
108        u_int8_t  bDescriptorType;
109        u_int8_t  bEndpointAddress;
110        u_int8_t  bmAttributes;
111        u_int16_t wMaxPacketSize;
112        u_int8_t  bInterval;
113        u_int8_t  bRefresh;
114        u_int8_t  bSynchAddress;
115
116        unsigned char *extra;   /* Extra descriptors */
117        int extralen;
118};
119
120#define USB_ENDPOINT_ADDRESS_MASK       0x0f    /* in bEndpointAddress */
121#define USB_ENDPOINT_DIR_MASK           0x80
122
123#define USB_ENDPOINT_TYPE_MASK          0x03    /* in bmAttributes */
124#define USB_ENDPOINT_TYPE_CONTROL       0
125#define USB_ENDPOINT_TYPE_ISOCHRONOUS   1
126#define USB_ENDPOINT_TYPE_BULK          2
127#define USB_ENDPOINT_TYPE_INTERRUPT     3
128
129/* Interface descriptor */
130#define USB_MAXINTERFACES       32
131struct usb_interface_descriptor {
132        u_int8_t  bLength;
133        u_int8_t  bDescriptorType;
134        u_int8_t  bInterfaceNumber;
135        u_int8_t  bAlternateSetting;
136        u_int8_t  bNumEndpoints;
137        u_int8_t  bInterfaceClass;
138        u_int8_t  bInterfaceSubClass;
139        u_int8_t  bInterfaceProtocol;
140        u_int8_t  iInterface;
141
142        struct usb_endpoint_descriptor *endpoint;
143
144        unsigned char *extra;   /* Extra descriptors */
145        int extralen;
146};
147
148#define USB_MAXALTSETTING       128     /* Hard limit */
149struct usb_interface {
150        struct usb_interface_descriptor *altsetting;
151
152        int num_altsetting;
153};
154
155/* Configuration descriptor information.. */
156#define USB_MAXCONFIG           8
157struct usb_config_descriptor {
158        u_int8_t  bLength;
159        u_int8_t  bDescriptorType;
160        u_int16_t wTotalLength;
161        u_int8_t  bNumInterfaces;
162        u_int8_t  bConfigurationValue;
163        u_int8_t  iConfiguration;
164        u_int8_t  bmAttributes;
165        u_int8_t  MaxPower;
166
167        struct usb_interface *interface;
168
169        unsigned char *extra;   /* Extra descriptors */
170        int extralen;
171};
172
173/* Device descriptor */
174struct usb_device_descriptor {
175        u_int8_t  bLength;
176        u_int8_t  bDescriptorType;
177        u_int16_t bcdUSB;
178        u_int8_t  bDeviceClass;
179        u_int8_t  bDeviceSubClass;
180        u_int8_t  bDeviceProtocol;
181        u_int8_t  bMaxPacketSize0;
182        u_int16_t idVendor;
183        u_int16_t idProduct;
184        u_int16_t bcdDevice;
185        u_int8_t  iManufacturer;
186        u_int8_t  iProduct;
187        u_int8_t  iSerialNumber;
188        u_int8_t  bNumConfigurations;
189};
190
191struct usb_ctrl_setup {
192        u_int8_t  bRequestType;
193        u_int8_t  bRequest;
194        u_int16_t wValue;
195        u_int16_t wIndex;
196        u_int16_t wLength;
197};
198
199/*
200 * Standard requests
201 */
202#define USB_REQ_GET_STATUS              0x00
203#define USB_REQ_CLEAR_FEATURE           0x01
204/* 0x02 is reserved */
205#define USB_REQ_SET_FEATURE             0x03
206/* 0x04 is reserved */
207#define USB_REQ_SET_ADDRESS             0x05
208#define USB_REQ_GET_DESCRIPTOR          0x06
209#define USB_REQ_SET_DESCRIPTOR          0x07
210#define USB_REQ_GET_CONFIGURATION       0x08
211#define USB_REQ_SET_CONFIGURATION       0x09
212#define USB_REQ_GET_INTERFACE           0x0A
213#define USB_REQ_SET_INTERFACE           0x0B
214#define USB_REQ_SYNCH_FRAME             0x0C
215
216#define USB_TYPE_STANDARD               (0x00 << 5)
217#define USB_TYPE_CLASS                  (0x01 << 5)
218#define USB_TYPE_VENDOR                 (0x02 << 5)
219#define USB_TYPE_RESERVED               (0x03 << 5)
220
221#define USB_RECIP_DEVICE                0x00
222#define USB_RECIP_INTERFACE             0x01
223#define USB_RECIP_ENDPOINT              0x02
224#define USB_RECIP_OTHER                 0x03
225
226/*
227 * Various libusb API related stuff
228 */
229
230#define USB_ENDPOINT_IN                 0x80
231#define USB_ENDPOINT_OUT                0x00
232
233/* Error codes */
234#define USB_ERROR_BEGIN                 500000
235
236/* Data types */
237struct usb_device;
238struct usb_bus;
239
240/*
241 * To maintain compatibility with applications already built with libusb,
242 * we must only add entries to the end of this structure. NEVER delete or
243 * move members and only change types if you really know what you're doing.
244 */
245struct usb_device {
246  struct usb_device *next, *prev;
247
248  char filename[PATH_MAX + 1];
249
250  struct usb_bus *bus;
251
252  struct usb_device_descriptor descriptor;
253  struct usb_config_descriptor *config;
254
255  void *dev;            /* Darwin support */
256
257  u_int8_t devnum;
258
259  unsigned char num_children;
260  struct usb_device **children;
261};
262
263struct usb_bus {
264  struct usb_bus *next, *prev;
265
266  char dirname[PATH_MAX + 1];
267
268  struct usb_device *devices;
269  u_int32_t location;
270
271  struct usb_device *root_dev;
272};
273
274struct usb_dev_handle;
275typedef struct usb_dev_handle usb_dev_handle;
276
277/* Variables */
278extern struct usb_bus *usb_busses;
279
280#ifdef __cplusplus
281extern "C" {
282#endif
283
284/* Function prototypes */
285
286/* usb.c */
287usb_dev_handle *usb_open(struct usb_device *dev);
288int usb_close(usb_dev_handle *dev);
289int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf,
290        size_t buflen);
291int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf,
292        size_t buflen);
293
294/* descriptors.c */
295int usb_get_descriptor_by_endpoint(usb_dev_handle *udev, int ep,
296        unsigned char type, unsigned char index, void *buf, int size);
297int usb_get_descriptor(usb_dev_handle *udev, unsigned char type,
298        unsigned char index, void *buf, int size);
299
300/* <arch>.c */
301int usb_bulk_write(usb_dev_handle *dev, int ep, const char *bytes, int size,
302        int timeout);
303int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size,
304        int timeout);
305int usb_interrupt_write(usb_dev_handle *dev, int ep, const char *bytes,
306        int size, int timeout);
307int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size,
308        int timeout);
309int usb_control_msg(usb_dev_handle *dev, int requesttype, int request,
310        int value, int index, char *bytes, int size, int timeout);
311int usb_set_configuration(usb_dev_handle *dev, int configuration);
312int usb_claim_interface(usb_dev_handle *dev, int interface);
313int usb_release_interface(usb_dev_handle *dev, int interface);
314int usb_set_altinterface(usb_dev_handle *dev, int alternate);
315int usb_resetep(usb_dev_handle *dev, unsigned int ep);
316int usb_clear_halt(usb_dev_handle *dev, unsigned int ep);
317int usb_reset(usb_dev_handle *dev);
318
319#define LIBUSB_HAS_GET_DRIVER_NP 1
320int usb_get_driver_np(usb_dev_handle *dev, int interface, char *name,
321        unsigned int namelen);
322#define LIBUSB_HAS_DETACH_KERNEL_DRIVER_NP 1
323int usb_detach_kernel_driver_np(usb_dev_handle *dev, int interface);
324
325char *usb_strerror(void);
326
327void usb_init(void);
328void usb_set_debug(int level);
329int usb_find_busses(void);
330int usb_find_devices(void);
331struct usb_device *usb_device(usb_dev_handle *dev);
332struct usb_bus *usb_get_busses(void);
333
334#ifdef __cplusplus
335}
336#endif
337
338#endif /* __USB_H__ */
339
Note: See TracBrowser for help on using the repository browser.