Deleted Added
full compact
libusb.h (195560) libusb.h (195957)
1/* $FreeBSD: head/lib/libusb/libusb.h 195560 2009-07-10 14:15:53Z thompsa $ */
1/* $FreeBSD: head/lib/libusb/libusb.h 195957 2009-07-30 00:11:41Z alfred $ */
2/*-
3 * Copyright (c) 2009 Sylvestre Gallon. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.

--- 15 unchanged lines hidden (view full) ---

25 */
26
27#ifndef __LIBUSB_H__
28#define __LIBUSB_H__
29
30#include <sys/time.h>
31#include <sys/types.h>
32#include <sys/endian.h>
2/*-
3 * Copyright (c) 2009 Sylvestre Gallon. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.

--- 15 unchanged lines hidden (view full) ---

25 */
26
27#ifndef __LIBUSB_H__
28#define __LIBUSB_H__
29
30#include <sys/time.h>
31#include <sys/types.h>
32#include <sys/endian.h>
33#include <sys/queue.h>
34
35#include <stdint.h>
36#include <time.h>
37#include <string.h>
38#include <pthread.h>
39
40
41#ifdef __cplusplus

--- 134 unchanged lines hidden (view full) ---

176};
177
178enum libusb_debug_level {
179 LIBUSB_DEBUG_NO=0,
180 LIBUSB_DEBUG_FUNCTION=1,
181 LIBUSB_DEBUG_TRANSFER=2,
182};
183
33
34#include <stdint.h>
35#include <time.h>
36#include <string.h>
37#include <pthread.h>
38
39
40#ifdef __cplusplus

--- 134 unchanged lines hidden (view full) ---

175};
176
177enum libusb_debug_level {
178 LIBUSB_DEBUG_NO=0,
179 LIBUSB_DEBUG_FUNCTION=1,
180 LIBUSB_DEBUG_TRANSFER=2,
181};
182
184/* internal structures */
183/* libusb structures */
185
184
186typedef struct libusb_pollfd {
185struct libusb_context;
186struct libusb_device;
187struct libusb_transfer;
188struct libusb20_device;
189
190struct libusb_pollfd {
187 int fd;
188 short events;
191 int fd;
192 short events;
189} libusb_pollfd;
190
191struct usb_pollfd {
192 TAILQ_ENTRY(usb_pollfd) list;
193 struct libusb_pollfd pollfd;
194};
195
193};
194
196struct usb_transfer {
197 TAILQ_ENTRY(usb_transfer) list;
198 int num_iso_packets;
199 struct timeval timeout;
200 int transferred;
201 uint8_t flags;
202};
203
204struct usb_ep_tr {
205 TAILQ_ENTRY(usb_ep_tr) list;
206 uint8_t addr;
207 uint8_t idx;
208 uint8_t flags;
209 void *os_priv;
210};
211/* libusb structures */
212
195typedef struct libusb_context libusb_context;
196typedef struct libusb_device libusb_device;
197typedef struct libusb20_device libusb_device_handle;
198typedef struct libusb_pollfd libusb_pollfd;
213typedef void (*libusb_pollfd_added_cb) (int fd, short events, void *user_data);
214typedef void (*libusb_pollfd_removed_cb) (int fd, void *user_data);
215
199typedef void (*libusb_pollfd_added_cb) (int fd, short events, void *user_data);
200typedef void (*libusb_pollfd_removed_cb) (int fd, void *user_data);
201
216typedef struct libusb_context {
217 int debug;
218 int debug_fixed;
219
220 int ctrl_pipe[2];
221
222 TAILQ_HEAD(usb_devs_list, libusb_device) usb_devs;
223 pthread_mutex_t usb_devs_lock;
224
225 TAILQ_HEAD(open_devs_list, libusb_device_handle) open_devs;
226 pthread_mutex_t open_devs_lock;
227
228 TAILQ_HEAD(flying_transfers_list, usb_transfer) flying_transfers;
229 pthread_mutex_t flying_transfers_lock;
230
231 TAILQ_HEAD(pollfds_list, usb_pollfd) pollfds;
232 pthread_mutex_t pollfds_lock;
233
234 unsigned int pollfd_modify;
235 pthread_mutex_t pollfd_modify_lock;
236
237 libusb_pollfd_added_cb fd_added_cb;
238 libusb_pollfd_removed_cb fd_removed_cb;
239 void *fd_cb_user_data;
240
241 pthread_mutex_t events_lock;
242 int event_handler_active;
243
244 pthread_mutex_t event_waiters_lock;
245 pthread_cond_t event_waiters_cond;
246} libusb_context;
247
248typedef struct libusb_device {
249 pthread_mutex_t lock;
250 int refcnt;
251
252 struct libusb_context *ctx;
253
254 uint8_t bus_number;
255 uint8_t device_address;
256 uint8_t num_configurations;
257
258 TAILQ_ENTRY(libusb_device) list;
259 unsigned long session_data;
260 void *os_priv;
261} libusb_device;
262
263typedef struct libusb_device_handle {
264 pthread_mutex_t lock;
265 unsigned long claimed_interfaces;
266
267 TAILQ_ENTRY(libusb_device_handle) list;
268 struct libusb_device *dev;
269 void *os_priv;
270 TAILQ_HEAD(ep_list, usb_ep_tr) ep_list;
271} libusb_device_handle;
272
273typedef struct libusb_device_descriptor {
274 uint8_t bLength;
275 uint8_t bDescriptorType;
276 uint16_t bcdUSB;
277 uint8_t bDeviceClass;
278 uint8_t bDeviceSubClass;
279 uint8_t bDeviceProtocol;
280 uint8_t bMaxPacketSize0;

--- 10 unchanged lines hidden (view full) ---

291 uint8_t bLength;
292 uint8_t bDescriptorType;
293 uint8_t bEndpointAddress;
294 uint8_t bmAttributes;
295 uint16_t wMaxPacketSize;
296 uint8_t bInterval;
297 uint8_t bRefresh;
298 uint8_t bSynchAddress;
202typedef struct libusb_device_descriptor {
203 uint8_t bLength;
204 uint8_t bDescriptorType;
205 uint16_t bcdUSB;
206 uint8_t bDeviceClass;
207 uint8_t bDeviceSubClass;
208 uint8_t bDeviceProtocol;
209 uint8_t bMaxPacketSize0;

--- 10 unchanged lines hidden (view full) ---

220 uint8_t bLength;
221 uint8_t bDescriptorType;
222 uint8_t bEndpointAddress;
223 uint8_t bmAttributes;
224 uint16_t wMaxPacketSize;
225 uint8_t bInterval;
226 uint8_t bRefresh;
227 uint8_t bSynchAddress;
299 unsigned char *extra;
228 uint8_t *extra;
300 int extra_length;
301} libusb_endpoint_descriptor __aligned(sizeof(void *));
302
303typedef struct libusb_interface_descriptor {
304 uint8_t bLength;
305 uint8_t bDescriptorType;
306 uint8_t bInterfaceNumber;
307 uint8_t bAlternateSetting;
308 uint8_t bNumEndpoints;
309 uint8_t bInterfaceClass;
310 uint8_t bInterfaceSubClass;
311 uint8_t bInterfaceProtocol;
312 uint8_t iInterface;
313 struct libusb_endpoint_descriptor *endpoint;
229 int extra_length;
230} libusb_endpoint_descriptor __aligned(sizeof(void *));
231
232typedef struct libusb_interface_descriptor {
233 uint8_t bLength;
234 uint8_t bDescriptorType;
235 uint8_t bInterfaceNumber;
236 uint8_t bAlternateSetting;
237 uint8_t bNumEndpoints;
238 uint8_t bInterfaceClass;
239 uint8_t bInterfaceSubClass;
240 uint8_t bInterfaceProtocol;
241 uint8_t iInterface;
242 struct libusb_endpoint_descriptor *endpoint;
314 unsigned char *extra;
243 uint8_t *extra;
315 int extra_length;
316} libusb_interface_descriptor __aligned(sizeof(void *));
317
318typedef struct libusb_interface {
319 struct libusb_interface_descriptor *altsetting;
320 int num_altsetting;
321} libusb_interface __aligned(sizeof(void *));
322
323typedef struct libusb_config_descriptor {
324 uint8_t bLength;
325 uint8_t bDescriptorType;
326 uint16_t wTotalLength;
327 uint8_t bNumInterfaces;
328 uint8_t bConfigurationValue;
329 uint8_t iConfiguration;
330 uint8_t bmAttributes;
331 uint8_t MaxPower;
332 struct libusb_interface *interface;
244 int extra_length;
245} libusb_interface_descriptor __aligned(sizeof(void *));
246
247typedef struct libusb_interface {
248 struct libusb_interface_descriptor *altsetting;
249 int num_altsetting;
250} libusb_interface __aligned(sizeof(void *));
251
252typedef struct libusb_config_descriptor {
253 uint8_t bLength;
254 uint8_t bDescriptorType;
255 uint16_t wTotalLength;
256 uint8_t bNumInterfaces;
257 uint8_t bConfigurationValue;
258 uint8_t iConfiguration;
259 uint8_t bmAttributes;
260 uint8_t MaxPower;
261 struct libusb_interface *interface;
333 unsigned char *extra;
262 uint8_t *extra;
334 int extra_length;
335} libusb_config_descriptor __aligned(sizeof(void *));
336
337typedef struct libusb_control_setup {
338 uint8_t bmRequestType;
339 uint8_t bRequest;
340 uint16_t wValue;
341 uint16_t wIndex;
342 uint16_t wLength;
343} libusb_control_setup;
344
345typedef struct libusb_iso_packet_descriptor {
346 unsigned int length;
347 unsigned int actual_length;
348 enum libusb_transfer_status status;
349} libusb_iso_packet_descriptor __aligned(sizeof(void *));
350
263 int extra_length;
264} libusb_config_descriptor __aligned(sizeof(void *));
265
266typedef struct libusb_control_setup {
267 uint8_t bmRequestType;
268 uint8_t bRequest;
269 uint16_t wValue;
270 uint16_t wIndex;
271 uint16_t wLength;
272} libusb_control_setup;
273
274typedef struct libusb_iso_packet_descriptor {
275 unsigned int length;
276 unsigned int actual_length;
277 enum libusb_transfer_status status;
278} libusb_iso_packet_descriptor __aligned(sizeof(void *));
279
351struct libusb_transfer;
352
353typedef void (*libusb_transfer_cb_fn) (struct libusb_transfer *transfer);
354
355typedef struct libusb_transfer {
356 libusb_device_handle *dev_handle;
357 uint8_t flags;
358 unsigned int endpoint;
280typedef void (*libusb_transfer_cb_fn) (struct libusb_transfer *transfer);
281
282typedef struct libusb_transfer {
283 libusb_device_handle *dev_handle;
284 uint8_t flags;
285 unsigned int endpoint;
359 unsigned char type;
286 uint8_t type;
360 unsigned int timeout;
361 enum libusb_transfer_status status;
362 int length;
363 int actual_length;
364 libusb_transfer_cb_fn callback;
365 void *user_data;
287 unsigned int timeout;
288 enum libusb_transfer_status status;
289 int length;
290 int actual_length;
291 libusb_transfer_cb_fn callback;
292 void *user_data;
366 unsigned char *buffer;
293 uint8_t *buffer;
367 void *os_priv;
368 int num_iso_packets;
369 struct libusb_iso_packet_descriptor iso_packet_desc[0];
370} libusb_transfer __aligned(sizeof(void *));
371
372/* Library initialisation */
373
374void libusb_set_debug(libusb_context * ctx, int level);
375int libusb_init(libusb_context ** context);
376void libusb_exit(struct libusb_context *ctx);
377
378/* Device handling and enumeration */
379
380ssize_t libusb_get_device_list(libusb_context * ctx, libusb_device *** list);
381void libusb_free_device_list(libusb_device ** list, int unref_devices);
382uint8_t libusb_get_bus_number(libusb_device * dev);
383uint8_t libusb_get_device_address(libusb_device * dev);
294 void *os_priv;
295 int num_iso_packets;
296 struct libusb_iso_packet_descriptor iso_packet_desc[0];
297} libusb_transfer __aligned(sizeof(void *));
298
299/* Library initialisation */
300
301void libusb_set_debug(libusb_context * ctx, int level);
302int libusb_init(libusb_context ** context);
303void libusb_exit(struct libusb_context *ctx);
304
305/* Device handling and enumeration */
306
307ssize_t libusb_get_device_list(libusb_context * ctx, libusb_device *** list);
308void libusb_free_device_list(libusb_device ** list, int unref_devices);
309uint8_t libusb_get_bus_number(libusb_device * dev);
310uint8_t libusb_get_device_address(libusb_device * dev);
384int libusb_clear_halt(libusb_device_handle *devh, unsigned char endpoint);
385int libusb_get_max_packet_size(libusb_device * dev, unsigned char endpoint);
311int libusb_clear_halt(libusb_device_handle *devh, uint8_t endpoint);
312int libusb_get_max_packet_size(libusb_device * dev, uint8_t endpoint);
386libusb_device *libusb_ref_device(libusb_device * dev);
387void libusb_unref_device(libusb_device * dev);
388int libusb_open(libusb_device * dev, libusb_device_handle ** devh);
389libusb_device_handle *libusb_open_device_with_vid_pid(libusb_context * ctx, uint16_t vendor_id, uint16_t product_id);
390void libusb_close(libusb_device_handle * devh);
391libusb_device *libusb_get_device(libusb_device_handle * devh);
392int libusb_get_configuration(libusb_device_handle * devh, int *config);
393int libusb_set_configuration(libusb_device_handle * devh, int configuration);
394int libusb_claim_interface(libusb_device_handle * devh, int interface_number);
395int libusb_release_interface(libusb_device_handle * devh, int interface_number);
313libusb_device *libusb_ref_device(libusb_device * dev);
314void libusb_unref_device(libusb_device * dev);
315int libusb_open(libusb_device * dev, libusb_device_handle ** devh);
316libusb_device_handle *libusb_open_device_with_vid_pid(libusb_context * ctx, uint16_t vendor_id, uint16_t product_id);
317void libusb_close(libusb_device_handle * devh);
318libusb_device *libusb_get_device(libusb_device_handle * devh);
319int libusb_get_configuration(libusb_device_handle * devh, int *config);
320int libusb_set_configuration(libusb_device_handle * devh, int configuration);
321int libusb_claim_interface(libusb_device_handle * devh, int interface_number);
322int libusb_release_interface(libusb_device_handle * devh, int interface_number);
323int libusb_reset_device(libusb_device_handle * dev);
396int libusb_kernel_driver_active(libusb_device_handle * devh, int interface);
397int libusb_detach_kernel_driver(libusb_device_handle * devh, int interface);
398int libusb_attach_kernel_driver(libusb_device_handle * devh, int interface);
399int libusb_set_interface_alt_setting(libusb_device_handle * devh, int interface_number, int alternate_setting);
400
401/* USB Descriptors */
402
403int libusb_get_device_descriptor(libusb_device * dev, struct libusb_device_descriptor *desc);
404int libusb_get_active_config_descriptor(libusb_device * dev, struct libusb_config_descriptor **config);
405int libusb_get_config_descriptor(libusb_device * dev, uint8_t config_index, struct libusb_config_descriptor **config);
406int libusb_get_config_descriptor_by_value(libusb_device * dev, uint8_t bConfigurationValue, struct libusb_config_descriptor **config);
407void libusb_free_config_descriptor(struct libusb_config_descriptor *config);
324int libusb_kernel_driver_active(libusb_device_handle * devh, int interface);
325int libusb_detach_kernel_driver(libusb_device_handle * devh, int interface);
326int libusb_attach_kernel_driver(libusb_device_handle * devh, int interface);
327int libusb_set_interface_alt_setting(libusb_device_handle * devh, int interface_number, int alternate_setting);
328
329/* USB Descriptors */
330
331int libusb_get_device_descriptor(libusb_device * dev, struct libusb_device_descriptor *desc);
332int libusb_get_active_config_descriptor(libusb_device * dev, struct libusb_config_descriptor **config);
333int libusb_get_config_descriptor(libusb_device * dev, uint8_t config_index, struct libusb_config_descriptor **config);
334int libusb_get_config_descriptor_by_value(libusb_device * dev, uint8_t bConfigurationValue, struct libusb_config_descriptor **config);
335void libusb_free_config_descriptor(struct libusb_config_descriptor *config);
408int libusb_get_string_descriptor_ascii(libusb_device_handle * dev, uint8_t desc_index, unsigned char *data, int length);
336int libusb_get_string_descriptor_ascii(libusb_device_handle * dev, uint8_t desc_index, uint8_t *data, int length);
409
337
410/* Asynchronous device I/O*/
338/* Asynchronous device I/O */
411
412struct libusb_transfer *libusb_alloc_transfer(int iso_packets);
413void libusb_free_transfer(struct libusb_transfer *transfer);
414int libusb_submit_transfer(struct libusb_transfer *transfer);
415int libusb_cancel_transfer(struct libusb_transfer *transfer);
339
340struct libusb_transfer *libusb_alloc_transfer(int iso_packets);
341void libusb_free_transfer(struct libusb_transfer *transfer);
342int libusb_submit_transfer(struct libusb_transfer *transfer);
343int libusb_cancel_transfer(struct libusb_transfer *transfer);
416unsigned char *libusb_get_iso_packet_buffer_simple(struct libusb_transfer *transfer, unsigned int packet);
344uint8_t *libusb_get_iso_packet_buffer_simple(struct libusb_transfer *transfer, unsigned int packet);
417
418/* Polling and timing */
419
420int libusb_try_lock_events(libusb_context * ctx);
421void libusb_lock_events(libusb_context * ctx);
422void libusb_unlock_events(libusb_context * ctx);
423int libusb_event_handling_ok(libusb_context * ctx);
424int libusb_event_handler_active(libusb_context * ctx);

--- 4 unchanged lines hidden (view full) ---

429int libusb_handle_events(libusb_context * ctx);
430int libusb_handle_events_locked(libusb_context * ctx, struct timeval *tv);
431int libusb_get_next_timeout(libusb_context * ctx, struct timeval *tv);
432void libusb_set_pollfd_notifiers(libusb_context * ctx, libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb, void *user_data);
433struct libusb_pollfd **libusb_get_pollfds(libusb_context * ctx);
434
435/* Synchronous device I/O */
436
345
346/* Polling and timing */
347
348int libusb_try_lock_events(libusb_context * ctx);
349void libusb_lock_events(libusb_context * ctx);
350void libusb_unlock_events(libusb_context * ctx);
351int libusb_event_handling_ok(libusb_context * ctx);
352int libusb_event_handler_active(libusb_context * ctx);

--- 4 unchanged lines hidden (view full) ---

357int libusb_handle_events(libusb_context * ctx);
358int libusb_handle_events_locked(libusb_context * ctx, struct timeval *tv);
359int libusb_get_next_timeout(libusb_context * ctx, struct timeval *tv);
360void libusb_set_pollfd_notifiers(libusb_context * ctx, libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb, void *user_data);
361struct libusb_pollfd **libusb_get_pollfds(libusb_context * ctx);
362
363/* Synchronous device I/O */
364
437int libusb_control_transfer(libusb_device_handle * devh, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout);
438int libusb_bulk_transfer(struct libusb_device_handle *devh, unsigned char endpoint, unsigned char *data, int length, int *transferred, unsigned int timeout);
439int libusb_interrupt_transfer(struct libusb_device_handle *devh, unsigned char endpoint, unsigned char *data, int length, int *transferred, unsigned int timeout);
365int libusb_control_transfer(libusb_device_handle * devh, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint8_t *data, uint16_t wLength, unsigned int timeout);
366int libusb_bulk_transfer(libusb_device_handle *devh, uint8_t endpoint, uint8_t *data, int length, int *transferred, unsigned int timeout);
367int libusb_interrupt_transfer(libusb_device_handle *devh, uint8_t endpoint, uint8_t *data, int length, int *transferred, unsigned int timeout);
440
441#if 0
442{ /* indent fix */
443#endif
444#ifdef __cplusplus
445}
446
447#endif
448
449#endif /* __LIBUSB_H__ */
368
369#if 0
370{ /* indent fix */
371#endif
372#ifdef __cplusplus
373}
374
375#endif
376
377#endif /* __LIBUSB_H__ */