1 /* 2 * Internal header for libusb 3 * Copyright (C) 2007-2009 Daniel Drake <dsd (at) gentoo.org> 4 * Copyright (c) 2001 Johannes Erdfelt <johannes (at) 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 21 #ifndef LIBUSBI_H 22 #define LIBUSBI_H 23 24 #include <config.h> 25 26 #include <stddef.h> 27 #include <stdint.h> 28 #include <time.h> 29 #include <stdarg.h> 30 #ifdef HAVE_POLL_H 31 #include <poll.h> 32 #endif 33 34 #include <libusb.h> 35 #include <version.h> 36 37 /* Inside the libusb code, mark all public functions as follows: 38 * return_type API_EXPORTED function_name(params) { ... } 39 * But if the function returns a pointer, mark it as follows: 40 * DEFAULT_VISIBILITY return_type * LIBUSB_CALL function_name(params) { ... } 41 * In the libusb public header, mark all declarations as: 42 * return_type LIBUSB_CALL function_name(params); 43 */ 44 #define API_EXPORTED LIBUSB_CALL DEFAULT_VISIBILITY 45 46 #define DEVICE_DESC_LENGTH 18 47 48 #define USB_MAXENDPOINTS 32 49 #define USB_MAXINTERFACES 32 50 #define USB_MAXCONFIG 8 51 52 struct list_head { 53 struct list_head *prev, *next; 54 }; 55 56 /* Get an entry from the list 57 * ptr - the address of this list_head element in "type" 58 * type - the data type that contains "member" 59 * member - the list_head element in "type" 60 */ 61 #define list_entry(ptr, type, member) \ 62 ((type *)((uintptr_t)(ptr) - (uintptr_t)(&((type *)0L)->member))) 63 64 /* Get each entry from a list 65 * pos - A structure pointer has a "member" element 66 * head - list head 67 * member - the list_head element in "pos" 68 * type - the type of the first parameter 69 */ 70 #define list_for_each_entry(pos, head, member, type) \ 71 for (pos = list_entry((head)->next, type, member); \ 72 &pos->member != (head); \ 73 pos = list_entry(pos->member.next, type, member)) 74 75 #define list_for_each_entry_safe(pos, n, head, member, type) \ 76 for (pos = list_entry((head)->next, type, member), \ 77 n = list_entry(pos->member.next, type, member); \ 78 &pos->member != (head); \ 79 pos = n, n = list_entry(n->member.next, type, member)) 80 81 #define list_empty(entry) ((entry)->next == (entry)) 82 83 static inline void list_init(struct list_head *entry) 84 { 85 entry->prev = entry->next = entry; 86 } 87 88 static inline void list_add(struct list_head *entry, struct list_head *head) 89 { 90 entry->next = head->next; 91 entry->prev = head; 92 93 head->next->prev = entry; 94 head->next = entry; 95 } 96 97 static inline void list_add_tail(struct list_head *entry, 98 struct list_head *head) 99 { 100 entry->next = head; 101 entry->prev = head->prev; 102 103 head->prev->next = entry; 104 head->prev = entry; 105 } 106 107 static inline void list_del(struct list_head *entry) 108 { 109 entry->next->prev = entry->prev; 110 entry->prev->next = entry->next; 111 } 112 113 #define container_of(ptr, type, member) ({ \ 114 const typeof( ((type *)0)->member ) *mptr = (ptr); \ 115 (type *)( (char *)mptr - offsetof(type,member) );}) 116 117 #define MIN(a, b) ((a) < (b) ? (a) : (b)) 118 #define MAX(a, b) ((a) > (b) ? (a) : (b)) 119 120 #define TIMESPEC_IS_SET(ts) ((ts)->tv_sec != 0 || (ts)->tv_nsec != 0) 121 122 enum usbi_log_level { 123 LOG_LEVEL_DEBUG, 124 LOG_LEVEL_INFO, 125 LOG_LEVEL_WARNING, 126 LOG_LEVEL_ERROR, 127 }; 128 129 void usbi_log(struct libusb_context *ctx, enum usbi_log_level level, 130 const char *function, const char *format, ...); 131 132 void usbi_log_v(struct libusb_context *ctx, enum usbi_log_level level, 133 const char *function, const char *format, va_list args); 134 135 #if !defined(_MSC_VER) || _MSC_VER >= 1400 136 137 #ifdef ENABLE_LOGGING 138 #define _usbi_log(ctx, level, ...) usbi_log(ctx, level, __FUNCTION__, __VA_ARGS__) 139 #else 140 #define _usbi_log(ctx, level, ...) do { (void)(ctx); } while(0) 141 #endif 142 143 #ifdef ENABLE_DEBUG_LOGGING 144 #define usbi_dbg(...) _usbi_log(NULL, LOG_LEVEL_DEBUG, __VA_ARGS__) 145 #else 146 #define usbi_dbg(...) do {} while(0) 147 #endif 148 149 #define usbi_info(ctx, ...) _usbi_log(ctx, LOG_LEVEL_INFO, __VA_ARGS__) 150 #define usbi_warn(ctx, ...) _usbi_log(ctx, LOG_LEVEL_WARNING, __VA_ARGS__) 151 #define usbi_err(ctx, ...) _usbi_log(ctx, LOG_LEVEL_ERROR, __VA_ARGS__) 152 153 #else /* !defined(_MSC_VER) || _MSC_VER >= 1400 */ 154 155 /* Old MS compilers don't support variadic macros. The code is simple, so we 156 * repeat it for each loglevel. Note that the debug case is special. 157 * 158 * Support for variadic macros was introduced in Visual C++ 2005. 159 * http://msdn.microsoft.com/en-us/library/ms177415%28v=VS.80%29.aspx 160 */ 161 162 static inline void usbi_info(struct libusb_context *ctx, const char *fmt, ...) 163 { 164 #ifdef ENABLE_LOGGING 165 va_list args; 166 va_start(args, fmt); 167 usbi_log_v(ctx, LOG_LEVEL_INFO, "", fmt, args); 168 va_end(args); 169 #else 170 (void)ctx; 171 #endif 172 } 173 174 static inline void usbi_warn(struct libusb_context *ctx, const char *fmt, ...) 175 { 176 #ifdef ENABLE_LOGGING 177 va_list args; 178 va_start(args, fmt); 179 usbi_log_v(ctx, LOG_LEVEL_WARNING, "", fmt, args); 180 va_end(args); 181 #else 182 (void)ctx; 183 #endif 184 } 185 186 static inline void usbi_err(struct libusb_context *ctx, const char *fmt, ...) 187 { 188 #ifdef ENABLE_LOGGING 189 va_list args; 190 va_start(args, fmt); 191 usbi_log_v(ctx, LOG_LEVEL_ERROR, "", fmt, args); 192 va_end(args); 193 #else 194 (void)ctx; 195 #endif 196 } 197 198 static inline void usbi_dbg(const char *fmt, ...) 199 { 200 #ifdef ENABLE_DEBUG_LOGGING 201 va_list args; 202 va_start(args, fmt); 203 usbi_log_v(NULL, LOG_LEVEL_DEBUG, "", fmt, args); 204 va_end(args); 205 #else 206 (void)fmt; 207 #endif 208 } 209 210 #endif /* !defined(_MSC_VER) || _MSC_VER >= 1400 */ 211 212 #define USBI_GET_CONTEXT(ctx) if (!(ctx)) (ctx) = usbi_default_context 213 #define DEVICE_CTX(dev) ((dev)->ctx) 214 #define HANDLE_CTX(handle) (DEVICE_CTX((handle)->dev)) 215 #define TRANSFER_CTX(transfer) (HANDLE_CTX((transfer)->dev_handle)) 216 #define ITRANSFER_CTX(transfer) \ 217 (TRANSFER_CTX(USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer))) 218 219 #define IS_EPIN(ep) (0 != ((ep) & LIBUSB_ENDPOINT_IN)) 220 #define IS_EPOUT(ep) (!IS_EPIN(ep)) 221 #define IS_XFERIN(xfer) (0 != ((xfer)->endpoint & LIBUSB_ENDPOINT_IN)) 222 #define IS_XFEROUT(xfer) (!IS_XFERIN(xfer)) 223 224 /* Internal abstractions for thread synchronization and poll */ 225 #if defined(THREADS_POSIX) 226 #include <os/threads_posix.h> 227 #elif defined(OS_WINDOWS) 228 #include <os/threads_windows.h> 229 #endif 230 231 #if defined(OS_LINUX) || defined(OS_DARWIN) || defined(OS_OPENBSD) 232 #include <unistd.h> 233 #include <os/poll_posix.h> 234 #elif defined(OS_WINDOWS) 235 #include <os/poll_windows.h> 236 #endif 237 238 #if defined(OS_WINDOWS) && !defined(__GCC__) 239 #undef HAVE_GETTIMEOFDAY 240 int usbi_gettimeofday(struct timeval *tp, void *tzp); 241 #define LIBUSB_GETTIMEOFDAY_WIN32 242 #define HAVE_USBI_GETTIMEOFDAY 243 #else 244 #ifdef HAVE_GETTIMEOFDAY 245 #define usbi_gettimeofday(tv, tz) gettimeofday((tv), (tz)) 246 #define HAVE_USBI_GETTIMEOFDAY 247 #endif 248 #endif 249 250 extern struct libusb_context *usbi_default_context; 251 252 struct libusb_context { 253 int debug; 254 int debug_fixed; 255 256 /* internal control pipe, used for interrupting event handling when 257 * something needs to modify poll fds. */ 258 int ctrl_pipe[2]; 259 260 struct list_head usb_devs; 261 usbi_mutex_t usb_devs_lock; 262 263 /* A list of open handles. Backends are free to traverse this if required. 264 */ 265 struct list_head open_devs; 266 usbi_mutex_t open_devs_lock; 267 268 /* this is a list of in-flight transfer handles, sorted by timeout 269 * expiration. URBs to timeout the soonest are placed at the beginning of 270 * the list, URBs that will time out later are placed after, and urbs with 271 * infinite timeout are always placed at the very end. */ 272 struct list_head flying_transfers; 273 usbi_mutex_t flying_transfers_lock; 274 275 /* list of poll fds */ 276 struct list_head pollfds; 277 usbi_mutex_t pollfds_lock; 278 279 /* a counter that is set when we want to interrupt event handling, in order 280 * to modify the poll fd set. and a lock to protect it. */ 281 unsigned int pollfd_modify; 282 usbi_mutex_t pollfd_modify_lock; 283 284 /* user callbacks for pollfd changes */ 285 libusb_pollfd_added_cb fd_added_cb; 286 libusb_pollfd_removed_cb fd_removed_cb; 287 void *fd_cb_user_data; 288 289 /* ensures that only one thread is handling events at any one time */ 290 usbi_mutex_t events_lock; 291 292 /* used to see if there is an active thread doing event handling */ 293 int event_handler_active; 294 295 /* used to wait for event completion in threads other than the one that is 296 * event handling */ 297 usbi_mutex_t event_waiters_lock; 298 usbi_cond_t event_waiters_cond; 299 300 #ifdef USBI_TIMERFD_AVAILABLE 301 /* used for timeout handling, if supported by OS. 302 * this timerfd is maintained to trigger on the next pending timeout */ 303 int timerfd; 304 #endif 305 }; 306 307 #ifdef USBI_TIMERFD_AVAILABLE 308 #define usbi_using_timerfd(ctx) ((ctx)->timerfd >= 0) 309 #else 310 #define usbi_using_timerfd(ctx) (0) 311 #endif 312 313 struct libusb_device { 314 /* lock protects refcnt, everything else is finalized at initialization 315 * time */ 316 usbi_mutex_t lock; 317 int refcnt; 318 319 struct libusb_context *ctx; 320 321 uint8_t bus_number; 322 uint8_t device_address; 323 uint8_t num_configurations; 324 enum libusb_speed speed; 325 326 struct list_head list; 327 unsigned long session_data; 328 unsigned char os_priv[0]; 329 }; 330 331 struct libusb_device_handle { 332 /* lock protects claimed_interfaces */ 333 usbi_mutex_t lock; 334 unsigned long claimed_interfaces; 335 336 struct list_head list; 337 struct libusb_device *dev; 338 unsigned char os_priv[0]; 339 }; 340 341 enum { 342 USBI_CLOCK_MONOTONIC, 343 USBI_CLOCK_REALTIME 344 }; 345 346 /* in-memory transfer layout: 347 * 348 * 1. struct usbi_transfer 349 * 2. struct libusb_transfer (which includes iso packets) [variable size] 350 * 3. os private data [variable size] 351 * 352 * from a libusb_transfer, you can get the usbi_transfer by rewinding the 353 * appropriate number of bytes. 354 * the usbi_transfer includes the number of allocated packets, so you can 355 * determine the size of the transfer and hence the start and length of the 356 * OS-private data. 357 */ 358 359 struct usbi_transfer { 360 int num_iso_packets; 361 struct list_head list; 362 struct timeval timeout; 363 int transferred; 364 uint8_t flags; 365 366 /* this lock is held during libusb_submit_transfer() and 367 * libusb_cancel_transfer() (allowing the OS backend to prevent duplicate 368 * cancellation, submission-during-cancellation, etc). the OS backend 369 * should also take this lock in the handle_events path, to prevent the user 370 * cancelling the transfer from another thread while you are processing 371 * its completion (presumably there would be races within your OS backend 372 * if this were possible). */ 373 usbi_mutex_t lock; 374 }; 375 376 enum usbi_transfer_flags { 377 /* The transfer has timed out */ 378 USBI_TRANSFER_TIMED_OUT = 1 << 0, 379 380 /* Set by backend submit_transfer() if the OS handles timeout */ 381 USBI_TRANSFER_OS_HANDLES_TIMEOUT = 1 << 1, 382 383 /* Cancellation was requested via libusb_cancel_transfer() */ 384 USBI_TRANSFER_CANCELLING = 1 << 2, 385 386 /* Operation on the transfer failed because the device disappeared */ 387 USBI_TRANSFER_DEVICE_DISAPPEARED = 1 << 3, 388 }; 389 390 #define USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer) \ 391 ((struct libusb_transfer *)(((unsigned char *)(transfer)) \ 392 + sizeof(struct usbi_transfer))) 393 #define LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer) \ 394 ((struct usbi_transfer *)(((unsigned char *)(transfer)) \ 395 - sizeof(struct usbi_transfer))) 396 397 static inline void *usbi_transfer_get_os_priv(struct usbi_transfer *transfer) 398 { 399 return ((unsigned char *)transfer) + sizeof(struct usbi_transfer) 400 + sizeof(struct libusb_transfer) 401 + (transfer->num_iso_packets 402 * sizeof(struct libusb_iso_packet_descriptor)); 403 } 404 405 /* bus structures */ 406 407 /* All standard descriptors have these 2 fields in common */ 408 struct usb_descriptor_header { 409 uint8_t bLength; 410 uint8_t bDescriptorType; 411 }; 412 413 /* shared data and functions */ 414 415 int usbi_io_init(struct libusb_context *ctx); 416 void usbi_io_exit(struct libusb_context *ctx); 417 418 struct libusb_device *usbi_alloc_device(struct libusb_context *ctx, 419 unsigned long session_id); 420 struct libusb_device *usbi_get_device_by_session_id(struct libusb_context *ctx, 421 unsigned long session_id); 422 int usbi_sanitize_device(struct libusb_device *dev); 423 void usbi_handle_disconnect(struct libusb_device_handle *handle); 424 425 int usbi_handle_transfer_completion(struct usbi_transfer *itransfer, 426 enum libusb_transfer_status status); 427 int usbi_handle_transfer_cancellation(struct usbi_transfer *transfer); 428 429 int usbi_parse_descriptor(unsigned char *source, const char *descriptor, 430 void *dest, int host_endian); 431 int usbi_get_config_index_by_value(struct libusb_device *dev, 432 uint8_t bConfigurationValue, int *idx); 433 434 /* polling */ 435 436 struct usbi_pollfd { 437 /* must come first */ 438 struct libusb_pollfd pollfd; 439 440 struct list_head list; 441 }; 442 443 int usbi_add_pollfd(struct libusb_context *ctx, int fd, short events); 444 void usbi_remove_pollfd(struct libusb_context *ctx, int fd); 445 void usbi_fd_notification(struct libusb_context *ctx); 446 447 /* device discovery */ 448 449 /* we traverse usbfs without knowing how many devices we are going to find. 450 * so we create this discovered_devs model which is similar to a linked-list 451 * which grows when required. it can be freed once discovery has completed, 452 * eliminating the need for a list node in the libusb_device structure 453 * itself. */ 454 struct discovered_devs { 455 size_t len; 456 size_t capacity; 457 struct libusb_device *devices[0]; 458 }; 459 460 struct discovered_devs *discovered_devs_append( 461 struct discovered_devs *discdevs, struct libusb_device *dev); 462 463 /* OS abstraction */ 464 465 /* This is the interface that OS backends need to implement. 466 * All fields are mandatory, except ones explicitly noted as optional. */ 467 struct usbi_os_backend { 468 /* A human-readable name for your backend, e.g. "Linux usbfs" */ 469 const char *name; 470 471 /* Perform initialization of your backend. You might use this function 472 * to determine specific capabilities of the system, allocate required 473 * data structures for later, etc. 474 * 475 * This function is called when a libusb user initializes the library 476 * prior to use. 477 * 478 * Return 0 on success, or a LIBUSB_ERROR code on failure. 479 */ 480 int (*init)(struct libusb_context *ctx); 481 482 /* Deinitialization. Optional. This function should destroy anything 483 * that was set up by init. 484 * 485 * This function is called when the user deinitializes the library. 486 */ 487 void (*exit)(void); 488 489 /* Enumerate all the USB devices on the system, returning them in a list 490 * of discovered devices. 491 * 492 * Your implementation should enumerate all devices on the system, 493 * regardless of whether they have been seen before or not. 494 * 495 * When you have found a device, compute a session ID for it. The session 496 * ID should uniquely represent that particular device for that particular 497 * connection session since boot (i.e. if you disconnect and reconnect a 498 * device immediately after, it should be assigned a different session ID). 499 * If your OS cannot provide a unique session ID as described above, 500 * presenting a session ID of (bus_number << 8 | device_address) should 501 * be sufficient. Bus numbers and device addresses wrap and get reused, 502 * but that is an unlikely case. 503 * 504 * After computing a session ID for a device, call 505 * usbi_get_device_by_session_id(). This function checks if libusb already 506 * knows about the device, and if so, it provides you with a libusb_device 507 * structure for it. 508 * 509 * If usbi_get_device_by_session_id() returns NULL, it is time to allocate 510 * a new device structure for the device. Call usbi_alloc_device() to 511 * obtain a new libusb_device structure with reference count 1. Populate 512 * the bus_number and device_address attributes of the new device, and 513 * perform any other internal backend initialization you need to do. At 514 * this point, you should be ready to provide device descriptors and so 515 * on through the get_*_descriptor functions. Finally, call 516 * usbi_sanitize_device() to perform some final sanity checks on the 517 * device. Assuming all of the above succeeded, we can now continue. 518 * If any of the above failed, remember to unreference the device that 519 * was returned by usbi_alloc_device(). 520 * 521 * At this stage we have a populated libusb_device structure (either one 522 * that was found earlier, or one that we have just allocated and 523 * populated). This can now be added to the discovered devices list 524 * using discovered_devs_append(). Note that discovered_devs_append() 525 * may reallocate the list, returning a new location for it, and also 526 * note that reallocation can fail. Your backend should handle these 527 * error conditions appropriately. 528 * 529 * This function should not generate any bus I/O and should not block. 530 * If I/O is required (e.g. reading the active configuration value), it is 531 * OK to ignore these suggestions :) 532 * 533 * This function is executed when the user wishes to retrieve a list 534 * of USB devices connected to the system. 535 * 536 * Return 0 on success, or a LIBUSB_ERROR code on failure. 537 */ 538 int (*get_device_list)(struct libusb_context *ctx, 539 struct discovered_devs **discdevs); 540 541 /* Open a device for I/O and other USB operations. The device handle 542 * is preallocated for you, you can retrieve the device in question 543 * through handle->dev. 544 * 545 * Your backend should allocate any internal resources required for I/O 546 * and other operations so that those operations can happen (hopefully) 547 * without hiccup. This is also a good place to inform libusb that it 548 * should monitor certain file descriptors related to this device - 549 * see the usbi_add_pollfd() function. 550 * 551 * This function should not generate any bus I/O and should not block. 552 * 553 * This function is called when the user attempts to obtain a device 554 * handle for a device. 555 * 556 * Return: 557 * - 0 on success 558 * - LIBUSB_ERROR_ACCESS if the user has insufficient permissions 559 * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since 560 * discovery 561 * - another LIBUSB_ERROR code on other failure 562 * 563 * Do not worry about freeing the handle on failed open, the upper layers 564 * do this for you. 565 */ 566 int (*open)(struct libusb_device_handle *handle); 567 568 /* Close a device such that the handle cannot be used again. Your backend 569 * should destroy any resources that were allocated in the open path. 570 * This may also be a good place to call usbi_remove_pollfd() to inform 571 * libusb of any file descriptors associated with this device that should 572 * no longer be monitored. 573 * 574 * This function is called when the user closes a device handle. 575 */ 576 void (*close)(struct libusb_device_handle *handle); 577 578 /* Retrieve the device descriptor from a device. 579 * 580 * The descriptor should be retrieved from memory, NOT via bus I/O to the 581 * device. This means that you may have to cache it in a private structure 582 * during get_device_list enumeration. Alternatively, you may be able 583 * to retrieve it from a kernel interface (some Linux setups can do this) 584 * still without generating bus I/O. 585 * 586 * This function is expected to write DEVICE_DESC_LENGTH (18) bytes into 587 * buffer, which is guaranteed to be big enough. 588 * 589 * This function is called when sanity-checking a device before adding 590 * it to the list of discovered devices, and also when the user requests 591 * to read the device descriptor. 592 * 593 * This function is expected to return the descriptor in bus-endian format 594 * (LE). If it returns the multi-byte values in host-endian format, 595 * set the host_endian output parameter to "1". 596 * 597 * Return 0 on success or a LIBUSB_ERROR code on failure. 598 */ 599 int (*get_device_descriptor)(struct libusb_device *device, 600 unsigned char *buffer, int *host_endian); 601 602 /* Get the ACTIVE configuration descriptor for a device. 603 * 604 * The descriptor should be retrieved from memory, NOT via bus I/O to the 605 * device. This means that you may have to cache it in a private structure 606 * during get_device_list enumeration. You may also have to keep track 607 * of which configuration is active when the user changes it. 608 * 609 * This function is expected to write len bytes of data into buffer, which 610 * is guaranteed to be big enough. If you can only do a partial write, 611 * return an error code. 612 * 613 * This function is expected to return the descriptor in bus-endian format 614 * (LE). If it returns the multi-byte values in host-endian format, 615 * set the host_endian output parameter to "1". 616 * 617 * Return: 618 * - 0 on success 619 * - LIBUSB_ERROR_NOT_FOUND if the device is in unconfigured state 620 * - another LIBUSB_ERROR code on other failure 621 */ 622 int (*get_active_config_descriptor)(struct libusb_device *device, 623 unsigned char *buffer, size_t len, int *host_endian); 624 625 /* Get a specific configuration descriptor for a device. 626 * 627 * The descriptor should be retrieved from memory, NOT via bus I/O to the 628 * device. This means that you may have to cache it in a private structure 629 * during get_device_list enumeration. 630 * 631 * The requested descriptor is expressed as a zero-based index (i.e. 0 632 * indicates that we are requesting the first descriptor). The index does 633 * not (necessarily) equal the bConfigurationValue of the configuration 634 * being requested. 635 * 636 * This function is expected to write len bytes of data into buffer, which 637 * is guaranteed to be big enough. If you can only do a partial write, 638 * return an error code. 639 * 640 * This function is expected to return the descriptor in bus-endian format 641 * (LE). If it returns the multi-byte values in host-endian format, 642 * set the host_endian output parameter to "1". 643 * 644 * Return 0 on success or a LIBUSB_ERROR code on failure. 645 */ 646 int (*get_config_descriptor)(struct libusb_device *device, 647 uint8_t config_index, unsigned char *buffer, size_t len, 648 int *host_endian); 649 650 /* Get the bConfigurationValue for the active configuration for a device. 651 * Optional. This should only be implemented if you can retrieve it from 652 * cache (don't generate I/O). 653 * 654 * If you cannot retrieve this from cache, either do not implement this 655 * function, or return LIBUSB_ERROR_NOT_SUPPORTED. This will cause 656 * libusb to retrieve the information through a standard control transfer. 657 * 658 * This function must be non-blocking. 659 * Return: 660 * - 0 on success 661 * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it 662 * was opened 663 * - LIBUSB_ERROR_NOT_SUPPORTED if the value cannot be retrieved without 664 * blocking 665 * - another LIBUSB_ERROR code on other failure. 666 */ 667 int (*get_configuration)(struct libusb_device_handle *handle, int *config); 668 669 /* Set the active configuration for a device. 670 * 671 * A configuration value of -1 should put the device in unconfigured state. 672 * 673 * This function can block. 674 * 675 * Return: 676 * - 0 on success 677 * - LIBUSB_ERROR_NOT_FOUND if the configuration does not exist 678 * - LIBUSB_ERROR_BUSY if interfaces are currently claimed (and hence 679 * configuration cannot be changed) 680 * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it 681 * was opened 682 * - another LIBUSB_ERROR code on other failure. 683 */ 684 int (*set_configuration)(struct libusb_device_handle *handle, int config); 685 686 /* Claim an interface. When claimed, the application can then perform 687 * I/O to an interface's endpoints. 688 * 689 * This function should not generate any bus I/O and should not block. 690 * Interface claiming is a logical operation that simply ensures that 691 * no other drivers/applications are using the interface, and after 692 * claiming, no other drivers/applicatiosn can use the interface because 693 * we now "own" it. 694 * 695 * Return: 696 * - 0 on success 697 * - LIBUSB_ERROR_NOT_FOUND if the interface does not exist 698 * - LIBUSB_ERROR_BUSY if the interface is in use by another driver/app 699 * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it 700 * was opened 701 * - another LIBUSB_ERROR code on other failure 702 */ 703 int (*claim_interface)(struct libusb_device_handle *handle, int interface_number); 704 705 /* Release a previously claimed interface. 706 * 707 * This function should also generate a SET_INTERFACE control request, 708 * resetting the alternate setting of that interface to 0. It's OK for 709 * this function to block as a result. 710 * 711 * You will only ever be asked to release an interface which was 712 * successfully claimed earlier. 713 * 714 * Return: 715 * - 0 on success 716 * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it 717 * was opened 718 * - another LIBUSB_ERROR code on other failure 719 */ 720 int (*release_interface)(struct libusb_device_handle *handle, int interface_number); 721 722 /* Set the alternate setting for an interface. 723 * 724 * You will only ever be asked to set the alternate setting for an 725 * interface which was successfully claimed earlier. 726 * 727 * It's OK for this function to block. 728 * 729 * Return: 730 * - 0 on success 731 * - LIBUSB_ERROR_NOT_FOUND if the alternate setting does not exist 732 * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it 733 * was opened 734 * - another LIBUSB_ERROR code on other failure 735 */ 736 int (*set_interface_altsetting)(struct libusb_device_handle *handle, 737 int interface_number, int altsetting); 738 739 /* Clear a halt/stall condition on an endpoint. 740 * 741 * It's OK for this function to block. 742 * 743 * Return: 744 * - 0 on success 745 * - LIBUSB_ERROR_NOT_FOUND if the endpoint does not exist 746 * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it 747 * was opened 748 * - another LIBUSB_ERROR code on other failure 749 */ 750 int (*clear_halt)(struct libusb_device_handle *handle, 751 unsigned char endpoint); 752 753 /* Perform a USB port reset to reinitialize a device. 754 * 755 * If possible, the handle should still be usable after the reset 756 * completes, assuming that the device descriptors did not change during 757 * reset and all previous interface state can be restored. 758 * 759 * If something changes, or you cannot easily locate/verify the resetted 760 * device, return LIBUSB_ERROR_NOT_FOUND. This prompts the application 761 * to close the old handle and re-enumerate the device. 762 * 763 * Return: 764 * - 0 on success 765 * - LIBUSB_ERROR_NOT_FOUND if re-enumeration is required, or if the device 766 * has been disconnected since it was opened 767 * - another LIBUSB_ERROR code on other failure 768 */ 769 int (*reset_device)(struct libusb_device_handle *handle); 770 771 /* Determine if a kernel driver is active on an interface. Optional. 772 * 773 * The presence of a kernel driver on an interface indicates that any 774 * calls to claim_interface would fail with the LIBUSB_ERROR_BUSY code. 775 * 776 * Return: 777 * - 0 if no driver is active 778 * - 1 if a driver is active 779 * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it 780 * was opened 781 * - another LIBUSB_ERROR code on other failure 782 */ 783 int (*kernel_driver_active)(struct libusb_device_handle *handle, 784 int interface_number); 785 786 /* Detach a kernel driver from an interface. Optional. 787 * 788 * After detaching a kernel driver, the interface should be available 789 * for claim. 790 * 791 * Return: 792 * - 0 on success 793 * - LIBUSB_ERROR_NOT_FOUND if no kernel driver was active 794 * - LIBUSB_ERROR_INVALID_PARAM if the interface does not exist 795 * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it 796 * was opened 797 * - another LIBUSB_ERROR code on other failure 798 */ 799 int (*detach_kernel_driver)(struct libusb_device_handle *handle, 800 int interface_number); 801 802 /* Attach a kernel driver to an interface. Optional. 803 * 804 * Reattach a kernel driver to the device. 805 * 806 * Return: 807 * - 0 on success 808 * - LIBUSB_ERROR_NOT_FOUND if no kernel driver was active 809 * - LIBUSB_ERROR_INVALID_PARAM if the interface does not exist 810 * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it 811 * was opened 812 * - LIBUSB_ERROR_BUSY if a program or driver has claimed the interface, 813 * preventing reattachment 814 * - another LIBUSB_ERROR code on other failure 815 */ 816 int (*attach_kernel_driver)(struct libusb_device_handle *handle, 817 int interface_number); 818 819 /* Destroy a device. Optional. 820 * 821 * This function is called when the last reference to a device is 822 * destroyed. It should free any resources allocated in the get_device_list 823 * path. 824 */ 825 void (*destroy_device)(struct libusb_device *dev); 826 827 /* Submit a transfer. Your implementation should take the transfer, 828 * morph it into whatever form your platform requires, and submit it 829 * asynchronously. 830 * 831 * This function must not block. 832 * 833 * Return: 834 * - 0 on success 835 * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected 836 * - another LIBUSB_ERROR code on other failure 837 */ 838 int (*submit_transfer)(struct usbi_transfer *itransfer); 839 840 /* Cancel a previously submitted transfer. 841 * 842 * This function must not block. The transfer cancellation must complete 843 * later, resulting in a call to usbi_handle_transfer_cancellation() 844 * from the context of handle_events. 845 */ 846 int (*cancel_transfer)(struct usbi_transfer *itransfer); 847 848 /* Clear a transfer as if it has completed or cancelled, but do not 849 * report any completion/cancellation to the library. You should free 850 * all private data from the transfer as if you were just about to report 851 * completion or cancellation. 852 * 853 * This function might seem a bit out of place. It is used when libusb 854 * detects a disconnected device - it calls this function for all pending 855 * transfers before reporting completion (with the disconnect code) to 856 * the user. Maybe we can improve upon this internal interface in future. 857 */ 858 void (*clear_transfer_priv)(struct usbi_transfer *itransfer); 859 860 /* Handle any pending events. This involves monitoring any active 861 * transfers and processing their completion or cancellation. 862 * 863 * The function is passed an array of pollfd structures (size nfds) 864 * as a result of the poll() system call. The num_ready parameter 865 * indicates the number of file descriptors that have reported events 866 * (i.e. the poll() return value). This should be enough information 867 * for you to determine which actions need to be taken on the currently 868 * active transfers. 869 * 870 * For any cancelled transfers, call usbi_handle_transfer_cancellation(). 871 * For completed transfers, call usbi_handle_transfer_completion(). 872 * For control/bulk/interrupt transfers, populate the "transferred" 873 * element of the appropriate usbi_transfer structure before calling the 874 * above functions. For isochronous transfers, populate the status and 875 * transferred fields of the iso packet descriptors of the transfer. 876 * 877 * This function should also be able to detect disconnection of the 878 * device, reporting that situation with usbi_handle_disconnect(). 879 * 880 * When processing an event related to a transfer, you probably want to 881 * take usbi_transfer.lock to prevent races. See the documentation for 882 * the usbi_transfer structure. 883 * 884 * Return 0 on success, or a LIBUSB_ERROR code on failure. 885 */ 886 int (*handle_events)(struct libusb_context *ctx, 887 struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready); 888 889 /* Get time from specified clock. At least two clocks must be implemented 890 by the backend: USBI_CLOCK_REALTIME, and USBI_CLOCK_MONOTONIC. 891 892 Description of clocks: 893 USBI_CLOCK_REALTIME : clock returns time since system epoch. 894 USBI_CLOCK_MONOTONIC: clock returns time since unspecified start 895 time (usually boot). 896 */ 897 int (*clock_gettime)(int clkid, struct timespec *tp); 898 899 #ifdef USBI_TIMERFD_AVAILABLE 900 /* clock ID of the clock that should be used for timerfd */ 901 clockid_t (*get_timerfd_clockid)(void); 902 #endif 903 904 /* Number of bytes to reserve for per-device private backend data. 905 * This private data area is accessible through the "os_priv" field of 906 * struct libusb_device. */ 907 size_t device_priv_size; 908 909 /* Number of bytes to reserve for per-handle private backend data. 910 * This private data area is accessible through the "os_priv" field of 911 * struct libusb_device. */ 912 size_t device_handle_priv_size; 913 914 /* Number of bytes to reserve for per-transfer private backend data. 915 * This private data area is accessible by calling 916 * usbi_transfer_get_os_priv() on the appropriate usbi_transfer instance. 917 */ 918 size_t transfer_priv_size; 919 920 /* Mumber of additional bytes for os_priv for each iso packet. 921 * Can your backend use this? */ 922 /* FIXME: linux can't use this any more. if other OS's cannot either, 923 * then remove this */ 924 size_t add_iso_packet_size; 925 }; 926 927 extern const struct usbi_os_backend * const usbi_backend; 928 929 extern const struct usbi_os_backend linux_usbfs_backend; 930 extern const struct usbi_os_backend darwin_backend; 931 extern const struct usbi_os_backend openbsd_backend; 932 extern const struct usbi_os_backend windows_backend; 933 934 #endif 935 936