Warning: That file was not part of the compilation database. It may have many parsing errors.

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
340

Warning: That file was not part of the compilation database. It may have many parsing errors.