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__ */ |