libusb 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +8 -2
  3. data/Gemfile +2 -0
  4. data/History.md +12 -0
  5. data/README.md +25 -14
  6. data/Rakefile +64 -109
  7. data/appveyor.yml +23 -0
  8. data/ext/extconf.rb +10 -12
  9. data/ext/libusb_recipe.rb +29 -0
  10. data/lib/libusb/call.rb +14 -11
  11. data/lib/libusb/compat.rb +9 -9
  12. data/lib/libusb/context.rb +16 -1
  13. data/lib/libusb/dependencies.rb +7 -0
  14. data/lib/libusb/dev_handle.rb +13 -3
  15. data/lib/libusb/eventmachine.rb +4 -4
  16. data/lib/libusb/transfer.rb +71 -10
  17. data/lib/libusb/version_gem.rb +1 -1
  18. data/libusb.gemspec +7 -5
  19. data/ports/archives/libusb-1.0.21.tar.bz2 +0 -0
  20. data/test/test_libusb_bulk_stream_transfer.rb +1 -1
  21. data/test/test_libusb_descriptors.rb +4 -4
  22. data/test/test_libusb_event_machine.rb +7 -7
  23. data/test/test_libusb_hotplug.rb +15 -3
  24. data/test/test_libusb_iso_transfer.rb +1 -1
  25. data/test/test_libusb_mass_storage.rb +19 -19
  26. data/test/test_libusb_mass_storage2.rb +1 -1
  27. data/test/test_libusb_structs.rb +13 -0
  28. data/test/test_libusb_threads.rb +2 -2
  29. data/wireshark-usb-sniffer.png +0 -0
  30. metadata +32 -156
  31. checksums.yaml.gz.sig +0 -0
  32. data.tar.gz.sig +0 -0
  33. data/ext/libusb-1.0.20/AUTHORS +0 -89
  34. data/ext/libusb-1.0.20/COPYING +0 -504
  35. data/ext/libusb-1.0.20/ChangeLog +0 -227
  36. data/ext/libusb-1.0.20/INSTALL +0 -234
  37. data/ext/libusb-1.0.20/Makefile.am +0 -28
  38. data/ext/libusb-1.0.20/Makefile.in +0 -897
  39. data/ext/libusb-1.0.20/NEWS +0 -2
  40. data/ext/libusb-1.0.20/PORTING +0 -94
  41. data/ext/libusb-1.0.20/README +0 -29
  42. data/ext/libusb-1.0.20/TODO +0 -2
  43. data/ext/libusb-1.0.20/Xcode/common.xcconfig +0 -49
  44. data/ext/libusb-1.0.20/Xcode/config.h +0 -28
  45. data/ext/libusb-1.0.20/Xcode/debug.xcconfig +0 -29
  46. data/ext/libusb-1.0.20/Xcode/libusb.xcconfig +0 -21
  47. data/ext/libusb-1.0.20/Xcode/libusb.xcodeproj/project.pbxproj +0 -865
  48. data/ext/libusb-1.0.20/Xcode/libusb_debug.xcconfig +0 -21
  49. data/ext/libusb-1.0.20/Xcode/libusb_release.xcconfig +0 -21
  50. data/ext/libusb-1.0.20/Xcode/release.xcconfig +0 -30
  51. data/ext/libusb-1.0.20/aclocal.m4 +0 -1193
  52. data/ext/libusb-1.0.20/android/README +0 -114
  53. data/ext/libusb-1.0.20/android/config.h +0 -81
  54. data/ext/libusb-1.0.20/android/jni/Android.mk +0 -23
  55. data/ext/libusb-1.0.20/android/jni/Application.mk +0 -24
  56. data/ext/libusb-1.0.20/android/jni/examples.mk +0 -134
  57. data/ext/libusb-1.0.20/android/jni/libusb.mk +0 -54
  58. data/ext/libusb-1.0.20/android/jni/tests.mk +0 -56
  59. data/ext/libusb-1.0.20/compile +0 -347
  60. data/ext/libusb-1.0.20/config.guess +0 -1421
  61. data/ext/libusb-1.0.20/config.h.in +0 -155
  62. data/ext/libusb-1.0.20/config.sub +0 -1807
  63. data/ext/libusb-1.0.20/configure +0 -15466
  64. data/ext/libusb-1.0.20/configure.ac +0 -326
  65. data/ext/libusb-1.0.20/depcomp +0 -791
  66. data/ext/libusb-1.0.20/doc/Makefile.am +0 -9
  67. data/ext/libusb-1.0.20/doc/Makefile.in +0 -456
  68. data/ext/libusb-1.0.20/doc/doxygen.cfg.in +0 -2334
  69. data/ext/libusb-1.0.20/examples/Makefile.am +0 -19
  70. data/ext/libusb-1.0.20/examples/Makefile.in +0 -713
  71. data/ext/libusb-1.0.20/examples/dpfp.c +0 -506
  72. data/ext/libusb-1.0.20/examples/dpfp_threaded.c +0 -549
  73. data/ext/libusb-1.0.20/examples/ezusb.c +0 -831
  74. data/ext/libusb-1.0.20/examples/ezusb.h +0 -120
  75. data/ext/libusb-1.0.20/examples/fxload.c +0 -308
  76. data/ext/libusb-1.0.20/examples/getopt/getopt.c +0 -1060
  77. data/ext/libusb-1.0.20/examples/getopt/getopt.h +0 -180
  78. data/ext/libusb-1.0.20/examples/getopt/getopt1.c +0 -188
  79. data/ext/libusb-1.0.20/examples/hotplugtest.c +0 -122
  80. data/ext/libusb-1.0.20/examples/listdevs.c +0 -71
  81. data/ext/libusb-1.0.20/examples/sam3u_benchmark.c +0 -193
  82. data/ext/libusb-1.0.20/examples/xusb.c +0 -1130
  83. data/ext/libusb-1.0.20/install-sh +0 -501
  84. data/ext/libusb-1.0.20/libusb-1.0.pc.in +0 -11
  85. data/ext/libusb-1.0.20/libusb/Makefile.am +0 -90
  86. data/ext/libusb-1.0.20/libusb/Makefile.in +0 -1053
  87. data/ext/libusb-1.0.20/libusb/core.c +0 -2452
  88. data/ext/libusb-1.0.20/libusb/descriptor.c +0 -1201
  89. data/ext/libusb-1.0.20/libusb/hotplug.c +0 -344
  90. data/ext/libusb-1.0.20/libusb/hotplug.h +0 -90
  91. data/ext/libusb-1.0.20/libusb/io.c +0 -2760
  92. data/ext/libusb-1.0.20/libusb/libusb-1.0.def +0 -168
  93. data/ext/libusb-1.0.20/libusb/libusb-1.0.rc +0 -61
  94. data/ext/libusb-1.0.20/libusb/libusb.h +0 -1999
  95. data/ext/libusb-1.0.20/libusb/libusbi.h +0 -1102
  96. data/ext/libusb-1.0.20/libusb/os/darwin_usb.c +0 -1969
  97. data/ext/libusb-1.0.20/libusb/os/darwin_usb.h +0 -158
  98. data/ext/libusb-1.0.20/libusb/os/haiku/Makefile.am +0 -5
  99. data/ext/libusb-1.0.20/libusb/os/haiku/Makefile.in +0 -810
  100. data/ext/libusb-1.0.20/libusb/os/haiku/aclocal.m4 +0 -1193
  101. data/ext/libusb-1.0.20/libusb/os/haiku/compile +0 -347
  102. data/ext/libusb-1.0.20/libusb/os/haiku/config.guess +0 -1421
  103. data/ext/libusb-1.0.20/libusb/os/haiku/config.sub +0 -1807
  104. data/ext/libusb-1.0.20/libusb/os/haiku/configure +0 -17579
  105. data/ext/libusb-1.0.20/libusb/os/haiku/configure.ac +0 -8
  106. data/ext/libusb-1.0.20/libusb/os/haiku/depcomp +0 -791
  107. data/ext/libusb-1.0.20/libusb/os/haiku/haiku_pollfs.cpp +0 -378
  108. data/ext/libusb-1.0.20/libusb/os/haiku/haiku_usb.h +0 -112
  109. data/ext/libusb-1.0.20/libusb/os/haiku/haiku_usb_backend.cpp +0 -550
  110. data/ext/libusb-1.0.20/libusb/os/haiku/haiku_usb_raw.cpp +0 -255
  111. data/ext/libusb-1.0.20/libusb/os/haiku/haiku_usb_raw.h +0 -180
  112. data/ext/libusb-1.0.20/libusb/os/haiku/install-sh +0 -501
  113. data/ext/libusb-1.0.20/libusb/os/haiku/ltmain.sh +0 -9655
  114. data/ext/libusb-1.0.20/libusb/os/haiku/m4/libtool.m4 +0 -7992
  115. data/ext/libusb-1.0.20/libusb/os/haiku/m4/ltoptions.m4 +0 -384
  116. data/ext/libusb-1.0.20/libusb/os/haiku/m4/ltsugar.m4 +0 -123
  117. data/ext/libusb-1.0.20/libusb/os/haiku/m4/ltversion.m4 +0 -23
  118. data/ext/libusb-1.0.20/libusb/os/haiku/m4/lt~obsolete.m4 +0 -98
  119. data/ext/libusb-1.0.20/libusb/os/haiku/missing +0 -215
  120. data/ext/libusb-1.0.20/libusb/os/linux_netlink.c +0 -369
  121. data/ext/libusb-1.0.20/libusb/os/linux_udev.c +0 -306
  122. data/ext/libusb-1.0.20/libusb/os/linux_usbfs.c +0 -2692
  123. data/ext/libusb-1.0.20/libusb/os/linux_usbfs.h +0 -192
  124. data/ext/libusb-1.0.20/libusb/os/netbsd_usb.c +0 -674
  125. data/ext/libusb-1.0.20/libusb/os/openbsd_usb.c +0 -768
  126. data/ext/libusb-1.0.20/libusb/os/poll_posix.c +0 -53
  127. data/ext/libusb-1.0.20/libusb/os/poll_posix.h +0 -11
  128. data/ext/libusb-1.0.20/libusb/os/poll_windows.c +0 -728
  129. data/ext/libusb-1.0.20/libusb/os/poll_windows.h +0 -131
  130. data/ext/libusb-1.0.20/libusb/os/threads_posix.c +0 -82
  131. data/ext/libusb-1.0.20/libusb/os/threads_posix.h +0 -50
  132. data/ext/libusb-1.0.20/libusb/os/threads_windows.c +0 -214
  133. data/ext/libusb-1.0.20/libusb/os/threads_windows.h +0 -87
  134. data/ext/libusb-1.0.20/libusb/os/wince_usb.c +0 -869
  135. data/ext/libusb-1.0.20/libusb/os/wince_usb.h +0 -131
  136. data/ext/libusb-1.0.20/libusb/os/windows_common.h +0 -108
  137. data/ext/libusb-1.0.20/libusb/os/windows_usb.c +0 -4643
  138. data/ext/libusb-1.0.20/libusb/os/windows_usb.h +0 -973
  139. data/ext/libusb-1.0.20/libusb/strerror.c +0 -202
  140. data/ext/libusb-1.0.20/libusb/sync.c +0 -308
  141. data/ext/libusb-1.0.20/libusb/version.h +0 -18
  142. data/ext/libusb-1.0.20/libusb/version_nano.h +0 -1
  143. data/ext/libusb-1.0.20/ltmain.sh +0 -9655
  144. data/ext/libusb-1.0.20/m4/libtool.m4 +0 -7992
  145. data/ext/libusb-1.0.20/m4/ltoptions.m4 +0 -384
  146. data/ext/libusb-1.0.20/m4/ltsugar.m4 +0 -123
  147. data/ext/libusb-1.0.20/m4/ltversion.m4 +0 -23
  148. data/ext/libusb-1.0.20/m4/lt~obsolete.m4 +0 -98
  149. data/ext/libusb-1.0.20/missing +0 -215
  150. data/ext/libusb-1.0.20/tests/Makefile.am +0 -6
  151. data/ext/libusb-1.0.20/tests/Makefile.in +0 -596
  152. data/ext/libusb-1.0.20/tests/libusb_testlib.h +0 -107
  153. data/ext/libusb-1.0.20/tests/stress.c +0 -160
  154. data/ext/libusb-1.0.20/tests/testlib.c +0 -277
  155. metadata.gz.sig +0 -0
@@ -1,344 +0,0 @@
1
- /* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
2
- /*
3
- * Hotplug functions for libusb
4
- * Copyright © 2012-2013 Nathan Hjelm <hjelmn@mac.com>
5
- * Copyright © 2012-2013 Peter Stuge <peter@stuge.se>
6
- *
7
- * This library is free software; you can redistribute it and/or
8
- * modify it under the terms of the GNU Lesser General Public
9
- * License as published by the Free Software Foundation; either
10
- * version 2.1 of the License, or (at your option) any later version.
11
- *
12
- * This library is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
- * Lesser General Public License for more details.
16
- *
17
- * You should have received a copy of the GNU Lesser General Public
18
- * License along with this library; if not, write to the Free Software
19
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
- */
21
-
22
- #include <config.h>
23
-
24
- #include <errno.h>
25
- #include <stdio.h>
26
- #include <stdlib.h>
27
- #include <string.h>
28
- #ifdef HAVE_SYS_TYPES_H
29
- #include <sys/types.h>
30
- #endif
31
- #include <assert.h>
32
-
33
- #include "libusbi.h"
34
- #include "hotplug.h"
35
-
36
- /**
37
- * @defgroup hotplug Device hotplug event notification
38
- * This page details how to use the libusb hotplug interface, where available.
39
- *
40
- * Be mindful that not all platforms currently implement hotplug notification and
41
- * that you should first call on \ref libusb_has_capability() with parameter
42
- * \ref LIBUSB_CAP_HAS_HOTPLUG to confirm that hotplug support is available.
43
- *
44
- * \page hotplug Device hotplug event notification
45
- *
46
- * \section hotplug_intro Introduction
47
- *
48
- * Version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102, has added support
49
- * for hotplug events on <b>some</b> platforms (you should test if your platform
50
- * supports hotplug notification by calling \ref libusb_has_capability() with
51
- * parameter \ref LIBUSB_CAP_HAS_HOTPLUG).
52
- *
53
- * This interface allows you to request notification for the arrival and departure
54
- * of matching USB devices.
55
- *
56
- * To receive hotplug notification you register a callback by calling
57
- * \ref libusb_hotplug_register_callback(). This function will optionally return
58
- * a handle that can be passed to \ref libusb_hotplug_deregister_callback().
59
- *
60
- * A callback function must return an int (0 or 1) indicating whether the callback is
61
- * expecting additional events. Returning 0 will rearm the callback and 1 will cause
62
- * the callback to be deregistered. Note that when callbacks are called from
63
- * libusb_hotplug_register_callback() because of the \ref LIBUSB_HOTPLUG_ENUMERATE
64
- * flag, the callback return value is ignored, iow you cannot cause a callback
65
- * to be deregistered by returning 1 when it is called from
66
- * libusb_hotplug_register_callback().
67
- *
68
- * Callbacks for a particular context are automatically deregistered by libusb_exit().
69
- *
70
- * As of 1.0.16 there are two supported hotplug events:
71
- * - LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED: A device has arrived and is ready to use
72
- * - LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT: A device has left and is no longer available
73
- *
74
- * A hotplug event can listen for either or both of these events.
75
- *
76
- * Note: If you receive notification that a device has left and you have any
77
- * a libusb_device_handles for the device it is up to you to call libusb_close()
78
- * on each handle to free up any remaining resources associated with the device.
79
- * Once a device has left any libusb_device_handle associated with the device
80
- * are invalid and will remain so even if the device comes back.
81
- *
82
- * When handling a LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED event it is considered
83
- * safe to call any libusb function that takes a libusb_device. On the other hand,
84
- * when handling a LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT event the only safe function
85
- * is libusb_get_device_descriptor().
86
- *
87
- * The following code provides an example of the usage of the hotplug interface:
88
- \code
89
- #include <stdio.h>
90
- #include <stdlib.h>
91
- #include <libusb.h>
92
-
93
- static int count = 0;
94
-
95
- int hotplug_callback(struct libusb_context *ctx, struct libusb_device *dev,
96
- libusb_hotplug_event event, void *user_data) {
97
- static libusb_device_handle *handle = NULL;
98
- struct libusb_device_descriptor desc;
99
- int rc;
100
-
101
- (void)libusb_get_device_descriptor(dev, &desc);
102
-
103
- if (LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED == event) {
104
- rc = libusb_open(dev, &handle);
105
- if (LIBUSB_SUCCESS != rc) {
106
- printf("Could not open USB device\n");
107
- }
108
- } else if (LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT == event) {
109
- if (handle) {
110
- libusb_close(handle);
111
- handle = NULL;
112
- }
113
- } else {
114
- printf("Unhandled event %d\n", event);
115
- }
116
- count++;
117
-
118
- return 0;
119
- }
120
-
121
- int main (void) {
122
- libusb_hotplug_callback_handle handle;
123
- int rc;
124
-
125
- libusb_init(NULL);
126
-
127
- rc = libusb_hotplug_register_callback(NULL, LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED |
128
- LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT, 0, 0x045a, 0x5005,
129
- LIBUSB_HOTPLUG_MATCH_ANY, hotplug_callback, NULL,
130
- &handle);
131
- if (LIBUSB_SUCCESS != rc) {
132
- printf("Error creating a hotplug callback\n");
133
- libusb_exit(NULL);
134
- return EXIT_FAILURE;
135
- }
136
-
137
- while (count < 2) {
138
- libusb_handle_events_completed(NULL, NULL);
139
- usleep(10000);
140
- }
141
-
142
- libusb_hotplug_deregister_callback(NULL, handle);
143
- libusb_exit(NULL);
144
-
145
- return 0;
146
- }
147
- \endcode
148
- */
149
-
150
- static int usbi_hotplug_match_cb (struct libusb_context *ctx,
151
- struct libusb_device *dev, libusb_hotplug_event event,
152
- struct libusb_hotplug_callback *hotplug_cb)
153
- {
154
- /* Handle lazy deregistration of callback */
155
- if (hotplug_cb->needs_free) {
156
- /* Free callback */
157
- return 1;
158
- }
159
-
160
- if (!(hotplug_cb->events & event)) {
161
- return 0;
162
- }
163
-
164
- if (LIBUSB_HOTPLUG_MATCH_ANY != hotplug_cb->vendor_id &&
165
- hotplug_cb->vendor_id != dev->device_descriptor.idVendor) {
166
- return 0;
167
- }
168
-
169
- if (LIBUSB_HOTPLUG_MATCH_ANY != hotplug_cb->product_id &&
170
- hotplug_cb->product_id != dev->device_descriptor.idProduct) {
171
- return 0;
172
- }
173
-
174
- if (LIBUSB_HOTPLUG_MATCH_ANY != hotplug_cb->dev_class &&
175
- hotplug_cb->dev_class != dev->device_descriptor.bDeviceClass) {
176
- return 0;
177
- }
178
-
179
- return hotplug_cb->cb (ctx, dev, event, hotplug_cb->user_data);
180
- }
181
-
182
- void usbi_hotplug_match(struct libusb_context *ctx, struct libusb_device *dev,
183
- libusb_hotplug_event event)
184
- {
185
- struct libusb_hotplug_callback *hotplug_cb, *next;
186
- int ret;
187
-
188
- usbi_mutex_lock(&ctx->hotplug_cbs_lock);
189
-
190
- list_for_each_entry_safe(hotplug_cb, next, &ctx->hotplug_cbs, list, struct libusb_hotplug_callback) {
191
- usbi_mutex_unlock(&ctx->hotplug_cbs_lock);
192
- ret = usbi_hotplug_match_cb (ctx, dev, event, hotplug_cb);
193
- usbi_mutex_lock(&ctx->hotplug_cbs_lock);
194
-
195
- if (ret) {
196
- list_del(&hotplug_cb->list);
197
- free(hotplug_cb);
198
- }
199
- }
200
-
201
- usbi_mutex_unlock(&ctx->hotplug_cbs_lock);
202
-
203
- /* the backend is expected to call the callback for each active transfer */
204
- }
205
-
206
- void usbi_hotplug_notification(struct libusb_context *ctx, struct libusb_device *dev,
207
- libusb_hotplug_event event)
208
- {
209
- int pending_events;
210
- libusb_hotplug_message *message = calloc(1, sizeof(*message));
211
-
212
- if (!message) {
213
- usbi_err(ctx, "error allocating hotplug message");
214
- return;
215
- }
216
-
217
- message->event = event;
218
- message->device = dev;
219
-
220
- /* Take the event data lock and add this message to the list.
221
- * Only signal an event if there are no prior pending events. */
222
- usbi_mutex_lock(&ctx->event_data_lock);
223
- pending_events = usbi_pending_events(ctx);
224
- list_add_tail(&message->list, &ctx->hotplug_msgs);
225
- if (!pending_events)
226
- usbi_signal_event(ctx);
227
- usbi_mutex_unlock(&ctx->event_data_lock);
228
- }
229
-
230
- int API_EXPORTED libusb_hotplug_register_callback(libusb_context *ctx,
231
- libusb_hotplug_event events, libusb_hotplug_flag flags,
232
- int vendor_id, int product_id, int dev_class,
233
- libusb_hotplug_callback_fn cb_fn, void *user_data,
234
- libusb_hotplug_callback_handle *handle)
235
- {
236
- libusb_hotplug_callback *new_callback;
237
- static int handle_id = 1;
238
-
239
- /* check for hotplug support */
240
- if (!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) {
241
- return LIBUSB_ERROR_NOT_SUPPORTED;
242
- }
243
-
244
- /* check for sane values */
245
- if ((LIBUSB_HOTPLUG_MATCH_ANY != vendor_id && (~0xffff & vendor_id)) ||
246
- (LIBUSB_HOTPLUG_MATCH_ANY != product_id && (~0xffff & product_id)) ||
247
- (LIBUSB_HOTPLUG_MATCH_ANY != dev_class && (~0xff & dev_class)) ||
248
- !cb_fn) {
249
- return LIBUSB_ERROR_INVALID_PARAM;
250
- }
251
-
252
- USBI_GET_CONTEXT(ctx);
253
-
254
- new_callback = (libusb_hotplug_callback *)calloc(1, sizeof (*new_callback));
255
- if (!new_callback) {
256
- return LIBUSB_ERROR_NO_MEM;
257
- }
258
-
259
- new_callback->ctx = ctx;
260
- new_callback->vendor_id = vendor_id;
261
- new_callback->product_id = product_id;
262
- new_callback->dev_class = dev_class;
263
- new_callback->flags = flags;
264
- new_callback->events = events;
265
- new_callback->cb = cb_fn;
266
- new_callback->user_data = user_data;
267
- new_callback->needs_free = 0;
268
-
269
- usbi_mutex_lock(&ctx->hotplug_cbs_lock);
270
-
271
- /* protect the handle by the context hotplug lock. it doesn't matter if the same handle
272
- * is used for different contexts only that the handle is unique for this context */
273
- new_callback->handle = handle_id++;
274
-
275
- list_add(&new_callback->list, &ctx->hotplug_cbs);
276
-
277
- usbi_mutex_unlock(&ctx->hotplug_cbs_lock);
278
-
279
-
280
- if (flags & LIBUSB_HOTPLUG_ENUMERATE) {
281
- int i, len;
282
- struct libusb_device **devs;
283
-
284
- len = (int) libusb_get_device_list(ctx, &devs);
285
- if (len < 0) {
286
- libusb_hotplug_deregister_callback(ctx,
287
- new_callback->handle);
288
- return len;
289
- }
290
-
291
- for (i = 0; i < len; i++) {
292
- usbi_hotplug_match_cb(ctx, devs[i],
293
- LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED,
294
- new_callback);
295
- }
296
-
297
- libusb_free_device_list(devs, 1);
298
- }
299
-
300
-
301
- if (handle) {
302
- *handle = new_callback->handle;
303
- }
304
-
305
- return LIBUSB_SUCCESS;
306
- }
307
-
308
- void API_EXPORTED libusb_hotplug_deregister_callback (struct libusb_context *ctx,
309
- libusb_hotplug_callback_handle handle)
310
- {
311
- struct libusb_hotplug_callback *hotplug_cb;
312
-
313
- /* check for hotplug support */
314
- if (!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) {
315
- return;
316
- }
317
-
318
- USBI_GET_CONTEXT(ctx);
319
-
320
- usbi_mutex_lock(&ctx->hotplug_cbs_lock);
321
- list_for_each_entry(hotplug_cb, &ctx->hotplug_cbs, list,
322
- struct libusb_hotplug_callback) {
323
- if (handle == hotplug_cb->handle) {
324
- /* Mark this callback for deregistration */
325
- hotplug_cb->needs_free = 1;
326
- }
327
- }
328
- usbi_mutex_unlock(&ctx->hotplug_cbs_lock);
329
-
330
- usbi_hotplug_notification(ctx, NULL, 0);
331
- }
332
-
333
- void usbi_hotplug_deregister_all(struct libusb_context *ctx) {
334
- struct libusb_hotplug_callback *hotplug_cb, *next;
335
-
336
- usbi_mutex_lock(&ctx->hotplug_cbs_lock);
337
- list_for_each_entry_safe(hotplug_cb, next, &ctx->hotplug_cbs, list,
338
- struct libusb_hotplug_callback) {
339
- list_del(&hotplug_cb->list);
340
- free(hotplug_cb);
341
- }
342
-
343
- usbi_mutex_unlock(&ctx->hotplug_cbs_lock);
344
- }
@@ -1,90 +0,0 @@
1
- /* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
2
- /*
3
- * Hotplug support for libusb
4
- * Copyright © 2012-2013 Nathan Hjelm <hjelmn@mac.com>
5
- * Copyright © 2012-2013 Peter Stuge <peter@stuge.se>
6
- *
7
- * This library is free software; you can redistribute it and/or
8
- * modify it under the terms of the GNU Lesser General Public
9
- * License as published by the Free Software Foundation; either
10
- * version 2.1 of the License, or (at your option) any later version.
11
- *
12
- * This library is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
- * Lesser General Public License for more details.
16
- *
17
- * You should have received a copy of the GNU Lesser General Public
18
- * License along with this library; if not, write to the Free Software
19
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
- */
21
-
22
- #if !defined(USBI_HOTPLUG_H)
23
- #define USBI_HOTPLUG_H
24
-
25
- #ifndef LIBUSBI_H
26
- #include "libusbi.h"
27
- #endif
28
-
29
- /** \ingroup hotplug
30
- * The hotplug callback structure. The user populates this structure with
31
- * libusb_hotplug_prepare_callback() and then calls libusb_hotplug_register_callback()
32
- * to receive notification of hotplug events.
33
- */
34
- struct libusb_hotplug_callback {
35
- /** Context this callback is associated with */
36
- struct libusb_context *ctx;
37
-
38
- /** Vendor ID to match or LIBUSB_HOTPLUG_MATCH_ANY */
39
- int vendor_id;
40
-
41
- /** Product ID to match or LIBUSB_HOTPLUG_MATCH_ANY */
42
- int product_id;
43
-
44
- /** Device class to match or LIBUSB_HOTPLUG_MATCH_ANY */
45
- int dev_class;
46
-
47
- /** Hotplug callback flags */
48
- libusb_hotplug_flag flags;
49
-
50
- /** Event(s) that will trigger this callback */
51
- libusb_hotplug_event events;
52
-
53
- /** Callback function to invoke for matching event/device */
54
- libusb_hotplug_callback_fn cb;
55
-
56
- /** Handle for this callback (used to match on deregister) */
57
- libusb_hotplug_callback_handle handle;
58
-
59
- /** User data that will be passed to the callback function */
60
- void *user_data;
61
-
62
- /** Callback is marked for deletion */
63
- int needs_free;
64
-
65
- /** List this callback is registered in (ctx->hotplug_cbs) */
66
- struct list_head list;
67
- };
68
-
69
- typedef struct libusb_hotplug_callback libusb_hotplug_callback;
70
-
71
- struct libusb_hotplug_message {
72
- /** The hotplug event that occurred */
73
- libusb_hotplug_event event;
74
-
75
- /** The device for which this hotplug event occurred */
76
- struct libusb_device *device;
77
-
78
- /** List this message is contained in (ctx->hotplug_msgs) */
79
- struct list_head list;
80
- };
81
-
82
- typedef struct libusb_hotplug_message libusb_hotplug_message;
83
-
84
- void usbi_hotplug_deregister_all(struct libusb_context *ctx);
85
- void usbi_hotplug_match(struct libusb_context *ctx, struct libusb_device *dev,
86
- libusb_hotplug_event event);
87
- void usbi_hotplug_notification(struct libusb_context *ctx, struct libusb_device *dev,
88
- libusb_hotplug_event event);
89
-
90
- #endif
@@ -1,2760 +0,0 @@
1
- /* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
2
- /*
3
- * I/O functions for libusb
4
- * Copyright © 2007-2009 Daniel Drake <dsd@gentoo.org>
5
- * Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
6
- *
7
- * This library is free software; you can redistribute it and/or
8
- * modify it under the terms of the GNU Lesser General Public
9
- * License as published by the Free Software Foundation; either
10
- * version 2.1 of the License, or (at your option) any later version.
11
- *
12
- * This library is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
- * Lesser General Public License for more details.
16
- *
17
- * You should have received a copy of the GNU Lesser General Public
18
- * License along with this library; if not, write to the Free Software
19
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
- */
21
-
22
- #include <config.h>
23
-
24
- #include <assert.h>
25
- #include <errno.h>
26
- #include <stdint.h>
27
- #include <stdlib.h>
28
- #include <string.h>
29
- #include <time.h>
30
- #ifdef HAVE_SIGNAL_H
31
- #include <signal.h>
32
- #endif
33
- #ifdef HAVE_SYS_TIME_H
34
- #include <sys/time.h>
35
- #endif
36
- #ifdef USBI_TIMERFD_AVAILABLE
37
- #include <sys/timerfd.h>
38
- #endif
39
-
40
- #include "libusbi.h"
41
- #include "hotplug.h"
42
-
43
- /**
44
- * \page io Synchronous and asynchronous device I/O
45
- *
46
- * \section io_intro Introduction
47
- *
48
- * If you're using libusb in your application, you're probably wanting to
49
- * perform I/O with devices - you want to perform USB data transfers.
50
- *
51
- * libusb offers two separate interfaces for device I/O. This page aims to
52
- * introduce the two in order to help you decide which one is more suitable
53
- * for your application. You can also choose to use both interfaces in your
54
- * application by considering each transfer on a case-by-case basis.
55
- *
56
- * Once you have read through the following discussion, you should consult the
57
- * detailed API documentation pages for the details:
58
- * - \ref syncio
59
- * - \ref asyncio
60
- *
61
- * \section theory Transfers at a logical level
62
- *
63
- * At a logical level, USB transfers typically happen in two parts. For
64
- * example, when reading data from a endpoint:
65
- * -# A request for data is sent to the device
66
- * -# Some time later, the incoming data is received by the host
67
- *
68
- * or when writing data to an endpoint:
69
- *
70
- * -# The data is sent to the device
71
- * -# Some time later, the host receives acknowledgement from the device that
72
- * the data has been transferred.
73
- *
74
- * There may be an indefinite delay between the two steps. Consider a
75
- * fictional USB input device with a button that the user can press. In order
76
- * to determine when the button is pressed, you would likely submit a request
77
- * to read data on a bulk or interrupt endpoint and wait for data to arrive.
78
- * Data will arrive when the button is pressed by the user, which is
79
- * potentially hours later.
80
- *
81
- * libusb offers both a synchronous and an asynchronous interface to performing
82
- * USB transfers. The main difference is that the synchronous interface
83
- * combines both steps indicated above into a single function call, whereas
84
- * the asynchronous interface separates them.
85
- *
86
- * \section sync The synchronous interface
87
- *
88
- * The synchronous I/O interface allows you to perform a USB transfer with
89
- * a single function call. When the function call returns, the transfer has
90
- * completed and you can parse the results.
91
- *
92
- * If you have used the libusb-0.1 before, this I/O style will seem familar to
93
- * you. libusb-0.1 only offered a synchronous interface.
94
- *
95
- * In our input device example, to read button presses you might write code
96
- * in the following style:
97
- \code
98
- unsigned char data[4];
99
- int actual_length;
100
- int r = libusb_bulk_transfer(handle, LIBUSB_ENDPOINT_IN, data, sizeof(data), &actual_length, 0);
101
- if (r == 0 && actual_length == sizeof(data)) {
102
- // results of the transaction can now be found in the data buffer
103
- // parse them here and report button press
104
- } else {
105
- error();
106
- }
107
- \endcode
108
- *
109
- * The main advantage of this model is simplicity: you did everything with
110
- * a single simple function call.
111
- *
112
- * However, this interface has its limitations. Your application will sleep
113
- * inside libusb_bulk_transfer() until the transaction has completed. If it
114
- * takes the user 3 hours to press the button, your application will be
115
- * sleeping for that long. Execution will be tied up inside the library -
116
- * the entire thread will be useless for that duration.
117
- *
118
- * Another issue is that by tieing up the thread with that single transaction
119
- * there is no possibility of performing I/O with multiple endpoints and/or
120
- * multiple devices simultaneously, unless you resort to creating one thread
121
- * per transaction.
122
- *
123
- * Additionally, there is no opportunity to cancel the transfer after the
124
- * request has been submitted.
125
- *
126
- * For details on how to use the synchronous API, see the
127
- * \ref syncio "synchronous I/O API documentation" pages.
128
- *
129
- * \section async The asynchronous interface
130
- *
131
- * Asynchronous I/O is the most significant new feature in libusb-1.0.
132
- * Although it is a more complex interface, it solves all the issues detailed
133
- * above.
134
- *
135
- * Instead of providing which functions that block until the I/O has complete,
136
- * libusb's asynchronous interface presents non-blocking functions which
137
- * begin a transfer and then return immediately. Your application passes a
138
- * callback function pointer to this non-blocking function, which libusb will
139
- * call with the results of the transaction when it has completed.
140
- *
141
- * Transfers which have been submitted through the non-blocking functions
142
- * can be cancelled with a separate function call.
143
- *
144
- * The non-blocking nature of this interface allows you to be simultaneously
145
- * performing I/O to multiple endpoints on multiple devices, without having
146
- * to use threads.
147
- *
148
- * This added flexibility does come with some complications though:
149
- * - In the interest of being a lightweight library, libusb does not create
150
- * threads and can only operate when your application is calling into it. Your
151
- * application must call into libusb from it's main loop when events are ready
152
- * to be handled, or you must use some other scheme to allow libusb to
153
- * undertake whatever work needs to be done.
154
- * - libusb also needs to be called into at certain fixed points in time in
155
- * order to accurately handle transfer timeouts.
156
- * - Memory handling becomes more complex. You cannot use stack memory unless
157
- * the function with that stack is guaranteed not to return until the transfer
158
- * callback has finished executing.
159
- * - You generally lose some linearity from your code flow because submitting
160
- * the transfer request is done in a separate function from where the transfer
161
- * results are handled. This becomes particularly obvious when you want to
162
- * submit a second transfer based on the results of an earlier transfer.
163
- *
164
- * Internally, libusb's synchronous interface is expressed in terms of function
165
- * calls to the asynchronous interface.
166
- *
167
- * For details on how to use the asynchronous API, see the
168
- * \ref asyncio "asynchronous I/O API" documentation pages.
169
- */
170
-
171
-
172
- /**
173
- * \page packetoverflow Packets and overflows
174
- *
175
- * \section packets Packet abstraction
176
- *
177
- * The USB specifications describe how data is transmitted in packets, with
178
- * constraints on packet size defined by endpoint descriptors. The host must
179
- * not send data payloads larger than the endpoint's maximum packet size.
180
- *
181
- * libusb and the underlying OS abstract out the packet concept, allowing you
182
- * to request transfers of any size. Internally, the request will be divided
183
- * up into correctly-sized packets. You do not have to be concerned with
184
- * packet sizes, but there is one exception when considering overflows.
185
- *
186
- * \section overflow Bulk/interrupt transfer overflows
187
- *
188
- * When requesting data on a bulk endpoint, libusb requires you to supply a
189
- * buffer and the maximum number of bytes of data that libusb can put in that
190
- * buffer. However, the size of the buffer is not communicated to the device -
191
- * the device is just asked to send any amount of data.
192
- *
193
- * There is no problem if the device sends an amount of data that is less than
194
- * or equal to the buffer size. libusb reports this condition to you through
195
- * the \ref libusb_transfer::actual_length "libusb_transfer.actual_length"
196
- * field.
197
- *
198
- * Problems may occur if the device attempts to send more data than can fit in
199
- * the buffer. libusb reports LIBUSB_TRANSFER_OVERFLOW for this condition but
200
- * other behaviour is largely undefined: actual_length may or may not be
201
- * accurate, the chunk of data that can fit in the buffer (before overflow)
202
- * may or may not have been transferred.
203
- *
204
- * Overflows are nasty, but can be avoided. Even though you were told to
205
- * ignore packets above, think about the lower level details: each transfer is
206
- * split into packets (typically small, with a maximum size of 512 bytes).
207
- * Overflows can only happen if the final packet in an incoming data transfer
208
- * is smaller than the actual packet that the device wants to transfer.
209
- * Therefore, you will never see an overflow if your transfer buffer size is a
210
- * multiple of the endpoint's packet size: the final packet will either
211
- * fill up completely or will be only partially filled.
212
- */
213
-
214
- /**
215
- * @defgroup asyncio Asynchronous device I/O
216
- *
217
- * This page details libusb's asynchronous (non-blocking) API for USB device
218
- * I/O. This interface is very powerful but is also quite complex - you will
219
- * need to read this page carefully to understand the necessary considerations
220
- * and issues surrounding use of this interface. Simplistic applications
221
- * may wish to consider the \ref syncio "synchronous I/O API" instead.
222
- *
223
- * The asynchronous interface is built around the idea of separating transfer
224
- * submission and handling of transfer completion (the synchronous model
225
- * combines both of these into one). There may be a long delay between
226
- * submission and completion, however the asynchronous submission function
227
- * is non-blocking so will return control to your application during that
228
- * potentially long delay.
229
- *
230
- * \section asyncabstraction Transfer abstraction
231
- *
232
- * For the asynchronous I/O, libusb implements the concept of a generic
233
- * transfer entity for all types of I/O (control, bulk, interrupt,
234
- * isochronous). The generic transfer object must be treated slightly
235
- * differently depending on which type of I/O you are performing with it.
236
- *
237
- * This is represented by the public libusb_transfer structure type.
238
- *
239
- * \section asynctrf Asynchronous transfers
240
- *
241
- * We can view asynchronous I/O as a 5 step process:
242
- * -# <b>Allocation</b>: allocate a libusb_transfer
243
- * -# <b>Filling</b>: populate the libusb_transfer instance with information
244
- * about the transfer you wish to perform
245
- * -# <b>Submission</b>: ask libusb to submit the transfer
246
- * -# <b>Completion handling</b>: examine transfer results in the
247
- * libusb_transfer structure
248
- * -# <b>Deallocation</b>: clean up resources
249
- *
250
- *
251
- * \subsection asyncalloc Allocation
252
- *
253
- * This step involves allocating memory for a USB transfer. This is the
254
- * generic transfer object mentioned above. At this stage, the transfer
255
- * is "blank" with no details about what type of I/O it will be used for.
256
- *
257
- * Allocation is done with the libusb_alloc_transfer() function. You must use
258
- * this function rather than allocating your own transfers.
259
- *
260
- * \subsection asyncfill Filling
261
- *
262
- * This step is where you take a previously allocated transfer and fill it
263
- * with information to determine the message type and direction, data buffer,
264
- * callback function, etc.
265
- *
266
- * You can either fill the required fields yourself or you can use the
267
- * helper functions: libusb_fill_control_transfer(), libusb_fill_bulk_transfer()
268
- * and libusb_fill_interrupt_transfer().
269
- *
270
- * \subsection asyncsubmit Submission
271
- *
272
- * When you have allocated a transfer and filled it, you can submit it using
273
- * libusb_submit_transfer(). This function returns immediately but can be
274
- * regarded as firing off the I/O request in the background.
275
- *
276
- * \subsection asynccomplete Completion handling
277
- *
278
- * After a transfer has been submitted, one of four things can happen to it:
279
- *
280
- * - The transfer completes (i.e. some data was transferred)
281
- * - The transfer has a timeout and the timeout expires before all data is
282
- * transferred
283
- * - The transfer fails due to an error
284
- * - The transfer is cancelled
285
- *
286
- * Each of these will cause the user-specified transfer callback function to
287
- * be invoked. It is up to the callback function to determine which of the
288
- * above actually happened and to act accordingly.
289
- *
290
- * The user-specified callback is passed a pointer to the libusb_transfer
291
- * structure which was used to setup and submit the transfer. At completion
292
- * time, libusb has populated this structure with results of the transfer:
293
- * success or failure reason, number of bytes of data transferred, etc. See
294
- * the libusb_transfer structure documentation for more information.
295
- *
296
- * \subsection Deallocation
297
- *
298
- * When a transfer has completed (i.e. the callback function has been invoked),
299
- * you are advised to free the transfer (unless you wish to resubmit it, see
300
- * below). Transfers are deallocated with libusb_free_transfer().
301
- *
302
- * It is undefined behaviour to free a transfer which has not completed.
303
- *
304
- * \section asyncresubmit Resubmission
305
- *
306
- * You may be wondering why allocation, filling, and submission are all
307
- * separated above where they could reasonably be combined into a single
308
- * operation.
309
- *
310
- * The reason for separation is to allow you to resubmit transfers without
311
- * having to allocate new ones every time. This is especially useful for
312
- * common situations dealing with interrupt endpoints - you allocate one
313
- * transfer, fill and submit it, and when it returns with results you just
314
- * resubmit it for the next interrupt.
315
- *
316
- * \section asynccancel Cancellation
317
- *
318
- * Another advantage of using the asynchronous interface is that you have
319
- * the ability to cancel transfers which have not yet completed. This is
320
- * done by calling the libusb_cancel_transfer() function.
321
- *
322
- * libusb_cancel_transfer() is asynchronous/non-blocking in itself. When the
323
- * cancellation actually completes, the transfer's callback function will
324
- * be invoked, and the callback function should check the transfer status to
325
- * determine that it was cancelled.
326
- *
327
- * Freeing the transfer after it has been cancelled but before cancellation
328
- * has completed will result in undefined behaviour.
329
- *
330
- * When a transfer is cancelled, some of the data may have been transferred.
331
- * libusb will communicate this to you in the transfer callback. Do not assume
332
- * that no data was transferred.
333
- *
334
- * \section bulk_overflows Overflows on device-to-host bulk/interrupt endpoints
335
- *
336
- * If your device does not have predictable transfer sizes (or it misbehaves),
337
- * your application may submit a request for data on an IN endpoint which is
338
- * smaller than the data that the device wishes to send. In some circumstances
339
- * this will cause an overflow, which is a nasty condition to deal with. See
340
- * the \ref packetoverflow page for discussion.
341
- *
342
- * \section asyncctrl Considerations for control transfers
343
- *
344
- * The <tt>libusb_transfer</tt> structure is generic and hence does not
345
- * include specific fields for the control-specific setup packet structure.
346
- *
347
- * In order to perform a control transfer, you must place the 8-byte setup
348
- * packet at the start of the data buffer. To simplify this, you could
349
- * cast the buffer pointer to type struct libusb_control_setup, or you can
350
- * use the helper function libusb_fill_control_setup().
351
- *
352
- * The wLength field placed in the setup packet must be the length you would
353
- * expect to be sent in the setup packet: the length of the payload that
354
- * follows (or the expected maximum number of bytes to receive). However,
355
- * the length field of the libusb_transfer object must be the length of
356
- * the data buffer - i.e. it should be wLength <em>plus</em> the size of
357
- * the setup packet (LIBUSB_CONTROL_SETUP_SIZE).
358
- *
359
- * If you use the helper functions, this is simplified for you:
360
- * -# Allocate a buffer of size LIBUSB_CONTROL_SETUP_SIZE plus the size of the
361
- * data you are sending/requesting.
362
- * -# Call libusb_fill_control_setup() on the data buffer, using the transfer
363
- * request size as the wLength value (i.e. do not include the extra space you
364
- * allocated for the control setup).
365
- * -# If this is a host-to-device transfer, place the data to be transferred
366
- * in the data buffer, starting at offset LIBUSB_CONTROL_SETUP_SIZE.
367
- * -# Call libusb_fill_control_transfer() to associate the data buffer with
368
- * the transfer (and to set the remaining details such as callback and timeout).
369
- * - Note that there is no parameter to set the length field of the transfer.
370
- * The length is automatically inferred from the wLength field of the setup
371
- * packet.
372
- * -# Submit the transfer.
373
- *
374
- * The multi-byte control setup fields (wValue, wIndex and wLength) must
375
- * be given in little-endian byte order (the endianness of the USB bus).
376
- * Endianness conversion is transparently handled by
377
- * libusb_fill_control_setup() which is documented to accept host-endian
378
- * values.
379
- *
380
- * Further considerations are needed when handling transfer completion in
381
- * your callback function:
382
- * - As you might expect, the setup packet will still be sitting at the start
383
- * of the data buffer.
384
- * - If this was a device-to-host transfer, the received data will be sitting
385
- * at offset LIBUSB_CONTROL_SETUP_SIZE into the buffer.
386
- * - The actual_length field of the transfer structure is relative to the
387
- * wLength of the setup packet, rather than the size of the data buffer. So,
388
- * if your wLength was 4, your transfer's <tt>length</tt> was 12, then you
389
- * should expect an <tt>actual_length</tt> of 4 to indicate that the data was
390
- * transferred in entirity.
391
- *
392
- * To simplify parsing of setup packets and obtaining the data from the
393
- * correct offset, you may wish to use the libusb_control_transfer_get_data()
394
- * and libusb_control_transfer_get_setup() functions within your transfer
395
- * callback.
396
- *
397
- * Even though control endpoints do not halt, a completed control transfer
398
- * may have a LIBUSB_TRANSFER_STALL status code. This indicates the control
399
- * request was not supported.
400
- *
401
- * \section asyncintr Considerations for interrupt transfers
402
- *
403
- * All interrupt transfers are performed using the polling interval presented
404
- * by the bInterval value of the endpoint descriptor.
405
- *
406
- * \section asynciso Considerations for isochronous transfers
407
- *
408
- * Isochronous transfers are more complicated than transfers to
409
- * non-isochronous endpoints.
410
- *
411
- * To perform I/O to an isochronous endpoint, allocate the transfer by calling
412
- * libusb_alloc_transfer() with an appropriate number of isochronous packets.
413
- *
414
- * During filling, set \ref libusb_transfer::type "type" to
415
- * \ref libusb_transfer_type::LIBUSB_TRANSFER_TYPE_ISOCHRONOUS
416
- * "LIBUSB_TRANSFER_TYPE_ISOCHRONOUS", and set
417
- * \ref libusb_transfer::num_iso_packets "num_iso_packets" to a value less than
418
- * or equal to the number of packets you requested during allocation.
419
- * libusb_alloc_transfer() does not set either of these fields for you, given
420
- * that you might not even use the transfer on an isochronous endpoint.
421
- *
422
- * Next, populate the length field for the first num_iso_packets entries in
423
- * the \ref libusb_transfer::iso_packet_desc "iso_packet_desc" array. Section
424
- * 5.6.3 of the USB2 specifications describe how the maximum isochronous
425
- * packet length is determined by the wMaxPacketSize field in the endpoint
426
- * descriptor.
427
- * Two functions can help you here:
428
- *
429
- * - libusb_get_max_iso_packet_size() is an easy way to determine the max
430
- * packet size for an isochronous endpoint. Note that the maximum packet
431
- * size is actually the maximum number of bytes that can be transmitted in
432
- * a single microframe, therefore this function multiplies the maximum number
433
- * of bytes per transaction by the number of transaction opportunities per
434
- * microframe.
435
- * - libusb_set_iso_packet_lengths() assigns the same length to all packets
436
- * within a transfer, which is usually what you want.
437
- *
438
- * For outgoing transfers, you'll obviously fill the buffer and populate the
439
- * packet descriptors in hope that all the data gets transferred. For incoming
440
- * transfers, you must ensure the buffer has sufficient capacity for
441
- * the situation where all packets transfer the full amount of requested data.
442
- *
443
- * Completion handling requires some extra consideration. The
444
- * \ref libusb_transfer::actual_length "actual_length" field of the transfer
445
- * is meaningless and should not be examined; instead you must refer to the
446
- * \ref libusb_iso_packet_descriptor::actual_length "actual_length" field of
447
- * each individual packet.
448
- *
449
- * The \ref libusb_transfer::status "status" field of the transfer is also a
450
- * little misleading:
451
- * - If the packets were submitted and the isochronous data microframes
452
- * completed normally, status will have value
453
- * \ref libusb_transfer_status::LIBUSB_TRANSFER_COMPLETED
454
- * "LIBUSB_TRANSFER_COMPLETED". Note that bus errors and software-incurred
455
- * delays are not counted as transfer errors; the transfer.status field may
456
- * indicate COMPLETED even if some or all of the packets failed. Refer to
457
- * the \ref libusb_iso_packet_descriptor::status "status" field of each
458
- * individual packet to determine packet failures.
459
- * - The status field will have value
460
- * \ref libusb_transfer_status::LIBUSB_TRANSFER_ERROR
461
- * "LIBUSB_TRANSFER_ERROR" only when serious errors were encountered.
462
- * - Other transfer status codes occur with normal behaviour.
463
- *
464
- * The data for each packet will be found at an offset into the buffer that
465
- * can be calculated as if each prior packet completed in full. The
466
- * libusb_get_iso_packet_buffer() and libusb_get_iso_packet_buffer_simple()
467
- * functions may help you here.
468
- *
469
- * <b>Note</b>: Some operating systems (e.g. Linux) may impose limits on the
470
- * length of individual isochronous packets and/or the total length of the
471
- * isochronous transfer. Such limits can be difficult for libusb to detect,
472
- * so the library will simply try and submit the transfer as set up by you.
473
- * If the transfer fails to submit because it is too large,
474
- * libusb_submit_transfer() will return
475
- * \ref libusb_error::LIBUSB_ERROR_INVALID_PARAM "LIBUSB_ERROR_INVALID_PARAM".
476
- *
477
- * \section asyncmem Memory caveats
478
- *
479
- * In most circumstances, it is not safe to use stack memory for transfer
480
- * buffers. This is because the function that fired off the asynchronous
481
- * transfer may return before libusb has finished using the buffer, and when
482
- * the function returns it's stack gets destroyed. This is true for both
483
- * host-to-device and device-to-host transfers.
484
- *
485
- * The only case in which it is safe to use stack memory is where you can
486
- * guarantee that the function owning the stack space for the buffer does not
487
- * return until after the transfer's callback function has completed. In every
488
- * other case, you need to use heap memory instead.
489
- *
490
- * \section asyncflags Fine control
491
- *
492
- * Through using this asynchronous interface, you may find yourself repeating
493
- * a few simple operations many times. You can apply a bitwise OR of certain
494
- * flags to a transfer to simplify certain things:
495
- * - \ref libusb_transfer_flags::LIBUSB_TRANSFER_SHORT_NOT_OK
496
- * "LIBUSB_TRANSFER_SHORT_NOT_OK" results in transfers which transferred
497
- * less than the requested amount of data being marked with status
498
- * \ref libusb_transfer_status::LIBUSB_TRANSFER_ERROR "LIBUSB_TRANSFER_ERROR"
499
- * (they would normally be regarded as COMPLETED)
500
- * - \ref libusb_transfer_flags::LIBUSB_TRANSFER_FREE_BUFFER
501
- * "LIBUSB_TRANSFER_FREE_BUFFER" allows you to ask libusb to free the transfer
502
- * buffer when freeing the transfer.
503
- * - \ref libusb_transfer_flags::LIBUSB_TRANSFER_FREE_TRANSFER
504
- * "LIBUSB_TRANSFER_FREE_TRANSFER" causes libusb to automatically free the
505
- * transfer after the transfer callback returns.
506
- *
507
- * \section asyncevent Event handling
508
- *
509
- * An asynchronous model requires that libusb perform work at various
510
- * points in time - namely processing the results of previously-submitted
511
- * transfers and invoking the user-supplied callback function.
512
- *
513
- * This gives rise to the libusb_handle_events() function which your
514
- * application must call into when libusb has work do to. This gives libusb
515
- * the opportunity to reap pending transfers, invoke callbacks, etc.
516
- *
517
- * There are 2 different approaches to dealing with libusb_handle_events:
518
- *
519
- * -# Repeatedly call libusb_handle_events() in blocking mode from a dedicated
520
- * thread.
521
- * -# Integrate libusb with your application's main event loop. libusb
522
- * exposes a set of file descriptors which allow you to do this.
523
- *
524
- * The first approach has the big advantage that it will also work on Windows
525
- * were libusb' poll API for select / poll integration is not available. So
526
- * if you want to support Windows and use the async API, you must use this
527
- * approach, see the \ref eventthread "Using an event handling thread" section
528
- * below for details.
529
- *
530
- * If you prefer a single threaded approach with a single central event loop,
531
- * see the \ref poll "polling and timing" section for how to integrate libusb
532
- * into your application's main event loop.
533
- *
534
- * \section eventthread Using an event handling thread
535
- *
536
- * Lets begin with stating the obvious: If you're going to use a separate
537
- * thread for libusb event handling, your callback functions MUST be
538
- * threadsafe.
539
- *
540
- * Other then that doing event handling from a separate thread, is mostly
541
- * simple. You can use an event thread function as follows:
542
- \code
543
- void *event_thread_func(void *ctx)
544
- {
545
- while (event_thread_run)
546
- libusb_handle_events(ctx);
547
-
548
- return NULL;
549
- }
550
- \endcode
551
- *
552
- * There is one caveat though, stopping this thread requires setting the
553
- * event_thread_run variable to 0, and after that libusb_handle_events() needs
554
- * to return control to event_thread_func. But unless some event happens,
555
- * libusb_handle_events() will not return.
556
- *
557
- * There are 2 different ways of dealing with this, depending on if your
558
- * application uses libusb' \ref hotplug "hotplug" support or not.
559
- *
560
- * Applications which do not use hotplug support, should not start the event
561
- * thread until after their first call to libusb_open(), and should stop the
562
- * thread when closing the last open device as follows:
563
- \code
564
- void my_close_handle(libusb_device_handle *handle)
565
- {
566
- if (open_devs == 1)
567
- event_thread_run = 0;
568
-
569
- libusb_close(handle); // This wakes up libusb_handle_events()
570
-
571
- if (open_devs == 1)
572
- pthread_join(event_thread);
573
-
574
- open_devs--;
575
- }
576
- \endcode
577
- *
578
- * Applications using hotplug support should start the thread at program init,
579
- * after having successfully called libusb_hotplug_register_callback(), and
580
- * should stop the thread at program exit as follows:
581
- \code
582
- void my_libusb_exit(void)
583
- {
584
- event_thread_run = 0;
585
- libusb_hotplug_deregister_callback(ctx, hotplug_cb_handle); // This wakes up libusb_handle_events()
586
- pthread_join(event_thread);
587
- libusb_exit(ctx);
588
- }
589
- \endcode
590
- */
591
-
592
- /**
593
- * @defgroup poll Polling and timing
594
- *
595
- * This page documents libusb's functions for polling events and timing.
596
- * These functions are only necessary for users of the
597
- * \ref asyncio "asynchronous API". If you are only using the simpler
598
- * \ref syncio "synchronous API" then you do not need to ever call these
599
- * functions.
600
- *
601
- * The justification for the functionality described here has already been
602
- * discussed in the \ref asyncevent "event handling" section of the
603
- * asynchronous API documentation. In summary, libusb does not create internal
604
- * threads for event processing and hence relies on your application calling
605
- * into libusb at certain points in time so that pending events can be handled.
606
- *
607
- * Your main loop is probably already calling poll() or select() or a
608
- * variant on a set of file descriptors for other event sources (e.g. keyboard
609
- * button presses, mouse movements, network sockets, etc). You then add
610
- * libusb's file descriptors to your poll()/select() calls, and when activity
611
- * is detected on such descriptors you know it is time to call
612
- * libusb_handle_events().
613
- *
614
- * There is one final event handling complication. libusb supports
615
- * asynchronous transfers which time out after a specified time period.
616
- *
617
- * On some platforms a timerfd is used, so the timeout handling is just another
618
- * fd, on other platforms this requires that libusb is called into at or after
619
- * the timeout to handle it. So, in addition to considering libusb's file
620
- * descriptors in your main event loop, you must also consider that libusb
621
- * sometimes needs to be called into at fixed points in time even when there
622
- * is no file descriptor activity, see \ref polltime details.
623
- *
624
- * In order to know precisely when libusb needs to be called into, libusb
625
- * offers you a set of pollable file descriptors and information about when
626
- * the next timeout expires.
627
- *
628
- * If you are using the asynchronous I/O API, you must take one of the two
629
- * following options, otherwise your I/O will not complete.
630
- *
631
- * \section pollsimple The simple option
632
- *
633
- * If your application revolves solely around libusb and does not need to
634
- * handle other event sources, you can have a program structure as follows:
635
- \code
636
- // initialize libusb
637
- // find and open device
638
- // maybe fire off some initial async I/O
639
-
640
- while (user_has_not_requested_exit)
641
- libusb_handle_events(ctx);
642
-
643
- // clean up and exit
644
- \endcode
645
- *
646
- * With such a simple main loop, you do not have to worry about managing
647
- * sets of file descriptors or handling timeouts. libusb_handle_events() will
648
- * handle those details internally.
649
- *
650
- * \section pollmain The more advanced option
651
- *
652
- * \note This functionality is currently only available on Unix-like platforms.
653
- * On Windows, libusb_get_pollfds() simply returns NULL. Applications which
654
- * want to support Windows are advised to use an \ref eventthread
655
- * "event handling thread" instead.
656
- *
657
- * In more advanced applications, you will already have a main loop which
658
- * is monitoring other event sources: network sockets, X11 events, mouse
659
- * movements, etc. Through exposing a set of file descriptors, libusb is
660
- * designed to cleanly integrate into such main loops.
661
- *
662
- * In addition to polling file descriptors for the other event sources, you
663
- * take a set of file descriptors from libusb and monitor those too. When you
664
- * detect activity on libusb's file descriptors, you call
665
- * libusb_handle_events_timeout() in non-blocking mode.
666
- *
667
- * What's more, libusb may also need to handle events at specific moments in
668
- * time. No file descriptor activity is generated at these times, so your
669
- * own application needs to be continually aware of when the next one of these
670
- * moments occurs (through calling libusb_get_next_timeout()), and then it
671
- * needs to call libusb_handle_events_timeout() in non-blocking mode when
672
- * these moments occur. This means that you need to adjust your
673
- * poll()/select() timeout accordingly.
674
- *
675
- * libusb provides you with a set of file descriptors to poll and expects you
676
- * to poll all of them, treating them as a single entity. The meaning of each
677
- * file descriptor in the set is an internal implementation detail,
678
- * platform-dependent and may vary from release to release. Don't try and
679
- * interpret the meaning of the file descriptors, just do as libusb indicates,
680
- * polling all of them at once.
681
- *
682
- * In pseudo-code, you want something that looks like:
683
- \code
684
- // initialise libusb
685
-
686
- libusb_get_pollfds(ctx)
687
- while (user has not requested application exit) {
688
- libusb_get_next_timeout(ctx);
689
- poll(on libusb file descriptors plus any other event sources of interest,
690
- using a timeout no larger than the value libusb just suggested)
691
- if (poll() indicated activity on libusb file descriptors)
692
- libusb_handle_events_timeout(ctx, &zero_tv);
693
- if (time has elapsed to or beyond the libusb timeout)
694
- libusb_handle_events_timeout(ctx, &zero_tv);
695
- // handle events from other sources here
696
- }
697
-
698
- // clean up and exit
699
- \endcode
700
- *
701
- * \subsection polltime Notes on time-based events
702
- *
703
- * The above complication with having to track time and call into libusb at
704
- * specific moments is a bit of a headache. For maximum compatibility, you do
705
- * need to write your main loop as above, but you may decide that you can
706
- * restrict the supported platforms of your application and get away with
707
- * a more simplistic scheme.
708
- *
709
- * These time-based event complications are \b not required on the following
710
- * platforms:
711
- * - Darwin
712
- * - Linux, provided that the following version requirements are satisfied:
713
- * - Linux v2.6.27 or newer, compiled with timerfd support
714
- * - glibc v2.9 or newer
715
- * - libusb v1.0.5 or newer
716
- *
717
- * Under these configurations, libusb_get_next_timeout() will \em always return
718
- * 0, so your main loop can be simplified to:
719
- \code
720
- // initialise libusb
721
-
722
- libusb_get_pollfds(ctx)
723
- while (user has not requested application exit) {
724
- poll(on libusb file descriptors plus any other event sources of interest,
725
- using any timeout that you like)
726
- if (poll() indicated activity on libusb file descriptors)
727
- libusb_handle_events_timeout(ctx, &zero_tv);
728
- // handle events from other sources here
729
- }
730
-
731
- // clean up and exit
732
- \endcode
733
- *
734
- * Do remember that if you simplify your main loop to the above, you will
735
- * lose compatibility with some platforms (including legacy Linux platforms,
736
- * and <em>any future platforms supported by libusb which may have time-based
737
- * event requirements</em>). The resultant problems will likely appear as
738
- * strange bugs in your application.
739
- *
740
- * You can use the libusb_pollfds_handle_timeouts() function to do a runtime
741
- * check to see if it is safe to ignore the time-based event complications.
742
- * If your application has taken the shortcut of ignoring libusb's next timeout
743
- * in your main loop, then you are advised to check the return value of
744
- * libusb_pollfds_handle_timeouts() during application startup, and to abort
745
- * if the platform does suffer from these timing complications.
746
- *
747
- * \subsection fdsetchange Changes in the file descriptor set
748
- *
749
- * The set of file descriptors that libusb uses as event sources may change
750
- * during the life of your application. Rather than having to repeatedly
751
- * call libusb_get_pollfds(), you can set up notification functions for when
752
- * the file descriptor set changes using libusb_set_pollfd_notifiers().
753
- *
754
- * \subsection mtissues Multi-threaded considerations
755
- *
756
- * Unfortunately, the situation is complicated further when multiple threads
757
- * come into play. If two threads are monitoring the same file descriptors,
758
- * the fact that only one thread will be woken up when an event occurs causes
759
- * some headaches.
760
- *
761
- * The events lock, event waiters lock, and libusb_handle_events_locked()
762
- * entities are added to solve these problems. You do not need to be concerned
763
- * with these entities otherwise.
764
- *
765
- * See the extra documentation: \ref mtasync
766
- */
767
-
768
- /** \page mtasync Multi-threaded applications and asynchronous I/O
769
- *
770
- * libusb is a thread-safe library, but extra considerations must be applied
771
- * to applications which interact with libusb from multiple threads.
772
- *
773
- * The underlying issue that must be addressed is that all libusb I/O
774
- * revolves around monitoring file descriptors through the poll()/select()
775
- * system calls. This is directly exposed at the
776
- * \ref asyncio "asynchronous interface" but it is important to note that the
777
- * \ref syncio "synchronous interface" is implemented on top of the
778
- * asynchonrous interface, therefore the same considerations apply.
779
- *
780
- * The issue is that if two or more threads are concurrently calling poll()
781
- * or select() on libusb's file descriptors then only one of those threads
782
- * will be woken up when an event arrives. The others will be completely
783
- * oblivious that anything has happened.
784
- *
785
- * Consider the following pseudo-code, which submits an asynchronous transfer
786
- * then waits for its completion. This style is one way you could implement a
787
- * synchronous interface on top of the asynchronous interface (and libusb
788
- * does something similar, albeit more advanced due to the complications
789
- * explained on this page).
790
- *
791
- \code
792
- void cb(struct libusb_transfer *transfer)
793
- {
794
- int *completed = transfer->user_data;
795
- *completed = 1;
796
- }
797
-
798
- void myfunc() {
799
- struct libusb_transfer *transfer;
800
- unsigned char buffer[LIBUSB_CONTROL_SETUP_SIZE] __attribute__ ((aligned (2)));
801
- int completed = 0;
802
-
803
- transfer = libusb_alloc_transfer(0);
804
- libusb_fill_control_setup(buffer,
805
- LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT, 0x04, 0x01, 0, 0);
806
- libusb_fill_control_transfer(transfer, dev, buffer, cb, &completed, 1000);
807
- libusb_submit_transfer(transfer);
808
-
809
- while (!completed) {
810
- poll(libusb file descriptors, 120*1000);
811
- if (poll indicates activity)
812
- libusb_handle_events_timeout(ctx, &zero_tv);
813
- }
814
- printf("completed!");
815
- // other code here
816
- }
817
- \endcode
818
- *
819
- * Here we are <em>serializing</em> completion of an asynchronous event
820
- * against a condition - the condition being completion of a specific transfer.
821
- * The poll() loop has a long timeout to minimize CPU usage during situations
822
- * when nothing is happening (it could reasonably be unlimited).
823
- *
824
- * If this is the only thread that is polling libusb's file descriptors, there
825
- * is no problem: there is no danger that another thread will swallow up the
826
- * event that we are interested in. On the other hand, if there is another
827
- * thread polling the same descriptors, there is a chance that it will receive
828
- * the event that we were interested in. In this situation, <tt>myfunc()</tt>
829
- * will only realise that the transfer has completed on the next iteration of
830
- * the loop, <em>up to 120 seconds later.</em> Clearly a two-minute delay is
831
- * undesirable, and don't even think about using short timeouts to circumvent
832
- * this issue!
833
- *
834
- * The solution here is to ensure that no two threads are ever polling the
835
- * file descriptors at the same time. A naive implementation of this would
836
- * impact the capabilities of the library, so libusb offers the scheme
837
- * documented below to ensure no loss of functionality.
838
- *
839
- * Before we go any further, it is worth mentioning that all libusb-wrapped
840
- * event handling procedures fully adhere to the scheme documented below.
841
- * This includes libusb_handle_events() and its variants, and all the
842
- * synchronous I/O functions - libusb hides this headache from you.
843
- *
844
- * \section Using libusb_handle_events() from multiple threads
845
- *
846
- * Even when only using libusb_handle_events() and synchronous I/O functions,
847
- * you can still have a race condition. You might be tempted to solve the
848
- * above with libusb_handle_events() like so:
849
- *
850
- \code
851
- libusb_submit_transfer(transfer);
852
-
853
- while (!completed) {
854
- libusb_handle_events(ctx);
855
- }
856
- printf("completed!");
857
- \endcode
858
- *
859
- * This however has a race between the checking of completed and
860
- * libusb_handle_events() acquiring the events lock, so another thread
861
- * could have completed the transfer, resulting in this thread hanging
862
- * until either a timeout or another event occurs. See also commit
863
- * 6696512aade99bb15d6792af90ae329af270eba6 which fixes this in the
864
- * synchronous API implementation of libusb.
865
- *
866
- * Fixing this race requires checking the variable completed only after
867
- * taking the event lock, which defeats the concept of just calling
868
- * libusb_handle_events() without worrying about locking. This is why
869
- * libusb-1.0.9 introduces the new libusb_handle_events_timeout_completed()
870
- * and libusb_handle_events_completed() functions, which handles doing the
871
- * completion check for you after they have acquired the lock:
872
- *
873
- \code
874
- libusb_submit_transfer(transfer);
875
-
876
- while (!completed) {
877
- libusb_handle_events_completed(ctx, &completed);
878
- }
879
- printf("completed!");
880
- \endcode
881
- *
882
- * This nicely fixes the race in our example. Note that if all you want to
883
- * do is submit a single transfer and wait for its completion, then using
884
- * one of the synchronous I/O functions is much easier.
885
- *
886
- * \section eventlock The events lock
887
- *
888
- * The problem is when we consider the fact that libusb exposes file
889
- * descriptors to allow for you to integrate asynchronous USB I/O into
890
- * existing main loops, effectively allowing you to do some work behind
891
- * libusb's back. If you do take libusb's file descriptors and pass them to
892
- * poll()/select() yourself, you need to be aware of the associated issues.
893
- *
894
- * The first concept to be introduced is the events lock. The events lock
895
- * is used to serialize threads that want to handle events, such that only
896
- * one thread is handling events at any one time.
897
- *
898
- * You must take the events lock before polling libusb file descriptors,
899
- * using libusb_lock_events(). You must release the lock as soon as you have
900
- * aborted your poll()/select() loop, using libusb_unlock_events().
901
- *
902
- * \section threadwait Letting other threads do the work for you
903
- *
904
- * Although the events lock is a critical part of the solution, it is not
905
- * enough on it's own. You might wonder if the following is sufficient...
906
- \code
907
- libusb_lock_events(ctx);
908
- while (!completed) {
909
- poll(libusb file descriptors, 120*1000);
910
- if (poll indicates activity)
911
- libusb_handle_events_timeout(ctx, &zero_tv);
912
- }
913
- libusb_unlock_events(ctx);
914
- \endcode
915
- * ...and the answer is that it is not. This is because the transfer in the
916
- * code shown above may take a long time (say 30 seconds) to complete, and
917
- * the lock is not released until the transfer is completed.
918
- *
919
- * Another thread with similar code that wants to do event handling may be
920
- * working with a transfer that completes after a few milliseconds. Despite
921
- * having such a quick completion time, the other thread cannot check that
922
- * status of its transfer until the code above has finished (30 seconds later)
923
- * due to contention on the lock.
924
- *
925
- * To solve this, libusb offers you a mechanism to determine when another
926
- * thread is handling events. It also offers a mechanism to block your thread
927
- * until the event handling thread has completed an event (and this mechanism
928
- * does not involve polling of file descriptors).
929
- *
930
- * After determining that another thread is currently handling events, you
931
- * obtain the <em>event waiters</em> lock using libusb_lock_event_waiters().
932
- * You then re-check that some other thread is still handling events, and if
933
- * so, you call libusb_wait_for_event().
934
- *
935
- * libusb_wait_for_event() puts your application to sleep until an event
936
- * occurs, or until a thread releases the events lock. When either of these
937
- * things happen, your thread is woken up, and should re-check the condition
938
- * it was waiting on. It should also re-check that another thread is handling
939
- * events, and if not, it should start handling events itself.
940
- *
941
- * This looks like the following, as pseudo-code:
942
- \code
943
- retry:
944
- if (libusb_try_lock_events(ctx) == 0) {
945
- // we obtained the event lock: do our own event handling
946
- while (!completed) {
947
- if (!libusb_event_handling_ok(ctx)) {
948
- libusb_unlock_events(ctx);
949
- goto retry;
950
- }
951
- poll(libusb file descriptors, 120*1000);
952
- if (poll indicates activity)
953
- libusb_handle_events_locked(ctx, 0);
954
- }
955
- libusb_unlock_events(ctx);
956
- } else {
957
- // another thread is doing event handling. wait for it to signal us that
958
- // an event has completed
959
- libusb_lock_event_waiters(ctx);
960
-
961
- while (!completed) {
962
- // now that we have the event waiters lock, double check that another
963
- // thread is still handling events for us. (it may have ceased handling
964
- // events in the time it took us to reach this point)
965
- if (!libusb_event_handler_active(ctx)) {
966
- // whoever was handling events is no longer doing so, try again
967
- libusb_unlock_event_waiters(ctx);
968
- goto retry;
969
- }
970
-
971
- libusb_wait_for_event(ctx, NULL);
972
- }
973
- libusb_unlock_event_waiters(ctx);
974
- }
975
- printf("completed!\n");
976
- \endcode
977
- *
978
- * A naive look at the above code may suggest that this can only support
979
- * one event waiter (hence a total of 2 competing threads, the other doing
980
- * event handling), because the event waiter seems to have taken the event
981
- * waiters lock while waiting for an event. However, the system does support
982
- * multiple event waiters, because libusb_wait_for_event() actually drops
983
- * the lock while waiting, and reaquires it before continuing.
984
- *
985
- * We have now implemented code which can dynamically handle situations where
986
- * nobody is handling events (so we should do it ourselves), and it can also
987
- * handle situations where another thread is doing event handling (so we can
988
- * piggyback onto them). It is also equipped to handle a combination of
989
- * the two, for example, another thread is doing event handling, but for
990
- * whatever reason it stops doing so before our condition is met, so we take
991
- * over the event handling.
992
- *
993
- * Four functions were introduced in the above pseudo-code. Their importance
994
- * should be apparent from the code shown above.
995
- * -# libusb_try_lock_events() is a non-blocking function which attempts
996
- * to acquire the events lock but returns a failure code if it is contended.
997
- * -# libusb_event_handling_ok() checks that libusb is still happy for your
998
- * thread to be performing event handling. Sometimes, libusb needs to
999
- * interrupt the event handler, and this is how you can check if you have
1000
- * been interrupted. If this function returns 0, the correct behaviour is
1001
- * for you to give up the event handling lock, and then to repeat the cycle.
1002
- * The following libusb_try_lock_events() will fail, so you will become an
1003
- * events waiter. For more information on this, read \ref fullstory below.
1004
- * -# libusb_handle_events_locked() is a variant of
1005
- * libusb_handle_events_timeout() that you can call while holding the
1006
- * events lock. libusb_handle_events_timeout() itself implements similar
1007
- * logic to the above, so be sure not to call it when you are
1008
- * "working behind libusb's back", as is the case here.
1009
- * -# libusb_event_handler_active() determines if someone is currently
1010
- * holding the events lock
1011
- *
1012
- * You might be wondering why there is no function to wake up all threads
1013
- * blocked on libusb_wait_for_event(). This is because libusb can do this
1014
- * internally: it will wake up all such threads when someone calls
1015
- * libusb_unlock_events() or when a transfer completes (at the point after its
1016
- * callback has returned).
1017
- *
1018
- * \subsection fullstory The full story
1019
- *
1020
- * The above explanation should be enough to get you going, but if you're
1021
- * really thinking through the issues then you may be left with some more
1022
- * questions regarding libusb's internals. If you're curious, read on, and if
1023
- * not, skip to the next section to avoid confusing yourself!
1024
- *
1025
- * The immediate question that may spring to mind is: what if one thread
1026
- * modifies the set of file descriptors that need to be polled while another
1027
- * thread is doing event handling?
1028
- *
1029
- * There are 2 situations in which this may happen.
1030
- * -# libusb_open() will add another file descriptor to the poll set,
1031
- * therefore it is desirable to interrupt the event handler so that it
1032
- * restarts, picking up the new descriptor.
1033
- * -# libusb_close() will remove a file descriptor from the poll set. There
1034
- * are all kinds of race conditions that could arise here, so it is
1035
- * important that nobody is doing event handling at this time.
1036
- *
1037
- * libusb handles these issues internally, so application developers do not
1038
- * have to stop their event handlers while opening/closing devices. Here's how
1039
- * it works, focusing on the libusb_close() situation first:
1040
- *
1041
- * -# During initialization, libusb opens an internal pipe, and it adds the read
1042
- * end of this pipe to the set of file descriptors to be polled.
1043
- * -# During libusb_close(), libusb writes some dummy data on this event pipe.
1044
- * This immediately interrupts the event handler. libusb also records
1045
- * internally that it is trying to interrupt event handlers for this
1046
- * high-priority event.
1047
- * -# At this point, some of the functions described above start behaving
1048
- * differently:
1049
- * - libusb_event_handling_ok() starts returning 1, indicating that it is NOT
1050
- * OK for event handling to continue.
1051
- * - libusb_try_lock_events() starts returning 1, indicating that another
1052
- * thread holds the event handling lock, even if the lock is uncontended.
1053
- * - libusb_event_handler_active() starts returning 1, indicating that
1054
- * another thread is doing event handling, even if that is not true.
1055
- * -# The above changes in behaviour result in the event handler stopping and
1056
- * giving up the events lock very quickly, giving the high-priority
1057
- * libusb_close() operation a "free ride" to acquire the events lock. All
1058
- * threads that are competing to do event handling become event waiters.
1059
- * -# With the events lock held inside libusb_close(), libusb can safely remove
1060
- * a file descriptor from the poll set, in the safety of knowledge that
1061
- * nobody is polling those descriptors or trying to access the poll set.
1062
- * -# After obtaining the events lock, the close operation completes very
1063
- * quickly (usually a matter of milliseconds) and then immediately releases
1064
- * the events lock.
1065
- * -# At the same time, the behaviour of libusb_event_handling_ok() and friends
1066
- * reverts to the original, documented behaviour.
1067
- * -# The release of the events lock causes the threads that are waiting for
1068
- * events to be woken up and to start competing to become event handlers
1069
- * again. One of them will succeed; it will then re-obtain the list of poll
1070
- * descriptors, and USB I/O will then continue as normal.
1071
- *
1072
- * libusb_open() is similar, and is actually a more simplistic case. Upon a
1073
- * call to libusb_open():
1074
- *
1075
- * -# The device is opened and a file descriptor is added to the poll set.
1076
- * -# libusb sends some dummy data on the event pipe, and records that it
1077
- * is trying to modify the poll descriptor set.
1078
- * -# The event handler is interrupted, and the same behaviour change as for
1079
- * libusb_close() takes effect, causing all event handling threads to become
1080
- * event waiters.
1081
- * -# The libusb_open() implementation takes its free ride to the events lock.
1082
- * -# Happy that it has successfully paused the events handler, libusb_open()
1083
- * releases the events lock.
1084
- * -# The event waiter threads are all woken up and compete to become event
1085
- * handlers again. The one that succeeds will obtain the list of poll
1086
- * descriptors again, which will include the addition of the new device.
1087
- *
1088
- * \subsection concl Closing remarks
1089
- *
1090
- * The above may seem a little complicated, but hopefully I have made it clear
1091
- * why such complications are necessary. Also, do not forget that this only
1092
- * applies to applications that take libusb's file descriptors and integrate
1093
- * them into their own polling loops.
1094
- *
1095
- * You may decide that it is OK for your multi-threaded application to ignore
1096
- * some of the rules and locks detailed above, because you don't think that
1097
- * two threads can ever be polling the descriptors at the same time. If that
1098
- * is the case, then that's good news for you because you don't have to worry.
1099
- * But be careful here; remember that the synchronous I/O functions do event
1100
- * handling internally. If you have one thread doing event handling in a loop
1101
- * (without implementing the rules and locking semantics documented above)
1102
- * and another trying to send a synchronous USB transfer, you will end up with
1103
- * two threads monitoring the same descriptors, and the above-described
1104
- * undesirable behaviour occuring. The solution is for your polling thread to
1105
- * play by the rules; the synchronous I/O functions do so, and this will result
1106
- * in them getting along in perfect harmony.
1107
- *
1108
- * If you do have a dedicated thread doing event handling, it is perfectly
1109
- * legal for it to take the event handling lock for long periods of time. Any
1110
- * synchronous I/O functions you call from other threads will transparently
1111
- * fall back to the "event waiters" mechanism detailed above. The only
1112
- * consideration that your event handling thread must apply is the one related
1113
- * to libusb_event_handling_ok(): you must call this before every poll(), and
1114
- * give up the events lock if instructed.
1115
- */
1116
-
1117
- int usbi_io_init(struct libusb_context *ctx)
1118
- {
1119
- int r;
1120
-
1121
- usbi_mutex_init(&ctx->flying_transfers_lock, NULL);
1122
- usbi_mutex_init_recursive(&ctx->events_lock, NULL);
1123
- usbi_mutex_init(&ctx->event_waiters_lock, NULL);
1124
- usbi_cond_init(&ctx->event_waiters_cond, NULL);
1125
- usbi_mutex_init(&ctx->event_data_lock, NULL);
1126
- list_init(&ctx->flying_transfers);
1127
- list_init(&ctx->ipollfds);
1128
- list_init(&ctx->hotplug_msgs);
1129
- list_init(&ctx->completed_transfers);
1130
-
1131
- /* FIXME should use an eventfd on kernels that support it */
1132
- r = usbi_pipe(ctx->event_pipe);
1133
- if (r < 0) {
1134
- r = LIBUSB_ERROR_OTHER;
1135
- goto err;
1136
- }
1137
-
1138
- r = usbi_add_pollfd(ctx, ctx->event_pipe[0], POLLIN);
1139
- if (r < 0)
1140
- goto err_close_pipe;
1141
-
1142
- #ifdef USBI_TIMERFD_AVAILABLE
1143
- ctx->timerfd = timerfd_create(usbi_backend->get_timerfd_clockid(),
1144
- TFD_NONBLOCK);
1145
- if (ctx->timerfd >= 0) {
1146
- usbi_dbg("using timerfd for timeouts");
1147
- r = usbi_add_pollfd(ctx, ctx->timerfd, POLLIN);
1148
- if (r < 0)
1149
- goto err_close_timerfd;
1150
- } else {
1151
- usbi_dbg("timerfd not available (code %d error %d)", ctx->timerfd, errno);
1152
- ctx->timerfd = -1;
1153
- }
1154
- #endif
1155
-
1156
- return 0;
1157
-
1158
- #ifdef USBI_TIMERFD_AVAILABLE
1159
- err_close_timerfd:
1160
- close(ctx->timerfd);
1161
- usbi_remove_pollfd(ctx, ctx->event_pipe[0]);
1162
- #endif
1163
- err_close_pipe:
1164
- usbi_close(ctx->event_pipe[0]);
1165
- usbi_close(ctx->event_pipe[1]);
1166
- err:
1167
- usbi_mutex_destroy(&ctx->flying_transfers_lock);
1168
- usbi_mutex_destroy(&ctx->events_lock);
1169
- usbi_mutex_destroy(&ctx->event_waiters_lock);
1170
- usbi_cond_destroy(&ctx->event_waiters_cond);
1171
- usbi_mutex_destroy(&ctx->event_data_lock);
1172
- return r;
1173
- }
1174
-
1175
- void usbi_io_exit(struct libusb_context *ctx)
1176
- {
1177
- usbi_remove_pollfd(ctx, ctx->event_pipe[0]);
1178
- usbi_close(ctx->event_pipe[0]);
1179
- usbi_close(ctx->event_pipe[1]);
1180
- #ifdef USBI_TIMERFD_AVAILABLE
1181
- if (usbi_using_timerfd(ctx)) {
1182
- usbi_remove_pollfd(ctx, ctx->timerfd);
1183
- close(ctx->timerfd);
1184
- }
1185
- #endif
1186
- usbi_mutex_destroy(&ctx->flying_transfers_lock);
1187
- usbi_mutex_destroy(&ctx->events_lock);
1188
- usbi_mutex_destroy(&ctx->event_waiters_lock);
1189
- usbi_cond_destroy(&ctx->event_waiters_cond);
1190
- usbi_mutex_destroy(&ctx->event_data_lock);
1191
- if (ctx->pollfds)
1192
- free(ctx->pollfds);
1193
- }
1194
-
1195
- static int calculate_timeout(struct usbi_transfer *transfer)
1196
- {
1197
- int r;
1198
- struct timespec current_time;
1199
- unsigned int timeout =
1200
- USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer)->timeout;
1201
-
1202
- if (!timeout)
1203
- return 0;
1204
-
1205
- r = usbi_backend->clock_gettime(USBI_CLOCK_MONOTONIC, &current_time);
1206
- if (r < 0) {
1207
- usbi_err(ITRANSFER_CTX(transfer),
1208
- "failed to read monotonic clock, errno=%d", errno);
1209
- return r;
1210
- }
1211
-
1212
- current_time.tv_sec += timeout / 1000;
1213
- current_time.tv_nsec += (timeout % 1000) * 1000000;
1214
-
1215
- while (current_time.tv_nsec >= 1000000000) {
1216
- current_time.tv_nsec -= 1000000000;
1217
- current_time.tv_sec++;
1218
- }
1219
-
1220
- TIMESPEC_TO_TIMEVAL(&transfer->timeout, &current_time);
1221
- return 0;
1222
- }
1223
-
1224
- /** \ingroup asyncio
1225
- * Allocate a libusb transfer with a specified number of isochronous packet
1226
- * descriptors. The returned transfer is pre-initialized for you. When the new
1227
- * transfer is no longer needed, it should be freed with
1228
- * libusb_free_transfer().
1229
- *
1230
- * Transfers intended for non-isochronous endpoints (e.g. control, bulk,
1231
- * interrupt) should specify an iso_packets count of zero.
1232
- *
1233
- * For transfers intended for isochronous endpoints, specify an appropriate
1234
- * number of packet descriptors to be allocated as part of the transfer.
1235
- * The returned transfer is not specially initialized for isochronous I/O;
1236
- * you are still required to set the
1237
- * \ref libusb_transfer::num_iso_packets "num_iso_packets" and
1238
- * \ref libusb_transfer::type "type" fields accordingly.
1239
- *
1240
- * It is safe to allocate a transfer with some isochronous packets and then
1241
- * use it on a non-isochronous endpoint. If you do this, ensure that at time
1242
- * of submission, num_iso_packets is 0 and that type is set appropriately.
1243
- *
1244
- * \param iso_packets number of isochronous packet descriptors to allocate
1245
- * \returns a newly allocated transfer, or NULL on error
1246
- */
1247
- DEFAULT_VISIBILITY
1248
- struct libusb_transfer * LIBUSB_CALL libusb_alloc_transfer(
1249
- int iso_packets)
1250
- {
1251
- struct libusb_transfer *transfer;
1252
- size_t os_alloc_size = usbi_backend->transfer_priv_size;
1253
- size_t alloc_size = sizeof(struct usbi_transfer)
1254
- + sizeof(struct libusb_transfer)
1255
- + (sizeof(struct libusb_iso_packet_descriptor) * iso_packets)
1256
- + os_alloc_size;
1257
- struct usbi_transfer *itransfer = calloc(1, alloc_size);
1258
- if (!itransfer)
1259
- return NULL;
1260
-
1261
- itransfer->num_iso_packets = iso_packets;
1262
- usbi_mutex_init(&itransfer->lock, NULL);
1263
- usbi_mutex_init(&itransfer->flags_lock, NULL);
1264
- transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1265
- usbi_dbg("transfer %p", transfer);
1266
- return transfer;
1267
- }
1268
-
1269
- /** \ingroup asyncio
1270
- * Free a transfer structure. This should be called for all transfers
1271
- * allocated with libusb_alloc_transfer().
1272
- *
1273
- * If the \ref libusb_transfer_flags::LIBUSB_TRANSFER_FREE_BUFFER
1274
- * "LIBUSB_TRANSFER_FREE_BUFFER" flag is set and the transfer buffer is
1275
- * non-NULL, this function will also free the transfer buffer using the
1276
- * standard system memory allocator (e.g. free()).
1277
- *
1278
- * It is legal to call this function with a NULL transfer. In this case,
1279
- * the function will simply return safely.
1280
- *
1281
- * It is not legal to free an active transfer (one which has been submitted
1282
- * and has not yet completed).
1283
- *
1284
- * \param transfer the transfer to free
1285
- */
1286
- void API_EXPORTED libusb_free_transfer(struct libusb_transfer *transfer)
1287
- {
1288
- struct usbi_transfer *itransfer;
1289
- if (!transfer)
1290
- return;
1291
-
1292
- usbi_dbg("transfer %p", transfer);
1293
- if (transfer->flags & LIBUSB_TRANSFER_FREE_BUFFER && transfer->buffer)
1294
- free(transfer->buffer);
1295
-
1296
- itransfer = LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer);
1297
- usbi_mutex_destroy(&itransfer->lock);
1298
- usbi_mutex_destroy(&itransfer->flags_lock);
1299
- free(itransfer);
1300
- }
1301
-
1302
- #ifdef USBI_TIMERFD_AVAILABLE
1303
- static int disarm_timerfd(struct libusb_context *ctx)
1304
- {
1305
- const struct itimerspec disarm_timer = { { 0, 0 }, { 0, 0 } };
1306
- int r;
1307
-
1308
- usbi_dbg("");
1309
- r = timerfd_settime(ctx->timerfd, 0, &disarm_timer, NULL);
1310
- if (r < 0)
1311
- return LIBUSB_ERROR_OTHER;
1312
- else
1313
- return 0;
1314
- }
1315
-
1316
- /* iterates through the flying transfers, and rearms the timerfd based on the
1317
- * next upcoming timeout.
1318
- * must be called with flying_list locked.
1319
- * returns 0 on success or a LIBUSB_ERROR code on failure.
1320
- */
1321
- static int arm_timerfd_for_next_timeout(struct libusb_context *ctx)
1322
- {
1323
- struct usbi_transfer *transfer;
1324
-
1325
- list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) {
1326
- struct timeval *cur_tv = &transfer->timeout;
1327
-
1328
- /* if we've reached transfers of infinite timeout, then we have no
1329
- * arming to do */
1330
- if (!timerisset(cur_tv))
1331
- goto disarm;
1332
-
1333
- /* act on first transfer that is not already cancelled */
1334
- if (!(transfer->flags & USBI_TRANSFER_TIMEOUT_HANDLED)) {
1335
- int r;
1336
- const struct itimerspec it = { {0, 0},
1337
- { cur_tv->tv_sec, cur_tv->tv_usec * 1000 } };
1338
- usbi_dbg("next timeout originally %dms", USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer)->timeout);
1339
- r = timerfd_settime(ctx->timerfd, TFD_TIMER_ABSTIME, &it, NULL);
1340
- if (r < 0)
1341
- return LIBUSB_ERROR_OTHER;
1342
- return 0;
1343
- }
1344
- }
1345
-
1346
- disarm:
1347
- return disarm_timerfd(ctx);
1348
- }
1349
- #else
1350
- static int arm_timerfd_for_next_timeout(struct libusb_context *ctx)
1351
- {
1352
- (void)ctx;
1353
- return 0;
1354
- }
1355
- #endif
1356
-
1357
- /* add a transfer to the (timeout-sorted) active transfers list.
1358
- * This function will return non 0 if fails to update the timer,
1359
- * in which case the transfer is *not* on the flying_transfers list. */
1360
- static int add_to_flying_list(struct usbi_transfer *transfer)
1361
- {
1362
- struct usbi_transfer *cur;
1363
- struct timeval *timeout = &transfer->timeout;
1364
- struct libusb_context *ctx = ITRANSFER_CTX(transfer);
1365
- int r = 0;
1366
- int first = 1;
1367
-
1368
- usbi_mutex_lock(&ctx->flying_transfers_lock);
1369
-
1370
- /* if we have no other flying transfers, start the list with this one */
1371
- if (list_empty(&ctx->flying_transfers)) {
1372
- list_add(&transfer->list, &ctx->flying_transfers);
1373
- goto out;
1374
- }
1375
-
1376
- /* if we have infinite timeout, append to end of list */
1377
- if (!timerisset(timeout)) {
1378
- list_add_tail(&transfer->list, &ctx->flying_transfers);
1379
- /* first is irrelevant in this case */
1380
- goto out;
1381
- }
1382
-
1383
- /* otherwise, find appropriate place in list */
1384
- list_for_each_entry(cur, &ctx->flying_transfers, list, struct usbi_transfer) {
1385
- /* find first timeout that occurs after the transfer in question */
1386
- struct timeval *cur_tv = &cur->timeout;
1387
-
1388
- if (!timerisset(cur_tv) || (cur_tv->tv_sec > timeout->tv_sec) ||
1389
- (cur_tv->tv_sec == timeout->tv_sec &&
1390
- cur_tv->tv_usec > timeout->tv_usec)) {
1391
- list_add_tail(&transfer->list, &cur->list);
1392
- goto out;
1393
- }
1394
- first = 0;
1395
- }
1396
- /* first is 0 at this stage (list not empty) */
1397
-
1398
- /* otherwise we need to be inserted at the end */
1399
- list_add_tail(&transfer->list, &ctx->flying_transfers);
1400
- out:
1401
- #ifdef USBI_TIMERFD_AVAILABLE
1402
- if (first && usbi_using_timerfd(ctx) && timerisset(timeout)) {
1403
- /* if this transfer has the lowest timeout of all active transfers,
1404
- * rearm the timerfd with this transfer's timeout */
1405
- const struct itimerspec it = { {0, 0},
1406
- { timeout->tv_sec, timeout->tv_usec * 1000 } };
1407
- usbi_dbg("arm timerfd for timeout in %dms (first in line)",
1408
- USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer)->timeout);
1409
- r = timerfd_settime(ctx->timerfd, TFD_TIMER_ABSTIME, &it, NULL);
1410
- if (r < 0) {
1411
- usbi_warn(ctx, "failed to arm first timerfd (errno %d)", errno);
1412
- r = LIBUSB_ERROR_OTHER;
1413
- }
1414
- }
1415
- #else
1416
- UNUSED(first);
1417
- #endif
1418
-
1419
- if (r)
1420
- list_del(&transfer->list);
1421
-
1422
- usbi_mutex_unlock(&ctx->flying_transfers_lock);
1423
- return r;
1424
- }
1425
-
1426
- /* remove a transfer from the active transfers list.
1427
- * This function will *always* remove the transfer from the
1428
- * flying_transfers list. It will return a LIBUSB_ERROR code
1429
- * if it fails to update the timer for the next timeout. */
1430
- static int remove_from_flying_list(struct usbi_transfer *transfer)
1431
- {
1432
- struct libusb_context *ctx = ITRANSFER_CTX(transfer);
1433
- int rearm_timerfd;
1434
- int r = 0;
1435
-
1436
- usbi_mutex_lock(&ctx->flying_transfers_lock);
1437
- rearm_timerfd = (timerisset(&transfer->timeout) &&
1438
- list_first_entry(&ctx->flying_transfers, struct usbi_transfer, list) == transfer);
1439
- list_del(&transfer->list);
1440
- if (usbi_using_timerfd(ctx) && rearm_timerfd)
1441
- r = arm_timerfd_for_next_timeout(ctx);
1442
- usbi_mutex_unlock(&ctx->flying_transfers_lock);
1443
-
1444
- return r;
1445
- }
1446
-
1447
- /** \ingroup asyncio
1448
- * Submit a transfer. This function will fire off the USB transfer and then
1449
- * return immediately.
1450
- *
1451
- * \param transfer the transfer to submit
1452
- * \returns 0 on success
1453
- * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected
1454
- * \returns LIBUSB_ERROR_BUSY if the transfer has already been submitted.
1455
- * \returns LIBUSB_ERROR_NOT_SUPPORTED if the transfer flags are not supported
1456
- * by the operating system.
1457
- * \returns another LIBUSB_ERROR code on other failure
1458
- */
1459
- int API_EXPORTED libusb_submit_transfer(struct libusb_transfer *transfer)
1460
- {
1461
- struct usbi_transfer *itransfer =
1462
- LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer);
1463
- int remove = 0;
1464
- int r;
1465
-
1466
- usbi_dbg("transfer %p", transfer);
1467
- usbi_mutex_lock(&itransfer->lock);
1468
- usbi_mutex_lock(&itransfer->flags_lock);
1469
- if (itransfer->flags & USBI_TRANSFER_IN_FLIGHT) {
1470
- r = LIBUSB_ERROR_BUSY;
1471
- goto out;
1472
- }
1473
- itransfer->transferred = 0;
1474
- itransfer->flags = 0;
1475
- r = calculate_timeout(itransfer);
1476
- if (r < 0) {
1477
- r = LIBUSB_ERROR_OTHER;
1478
- goto out;
1479
- }
1480
- itransfer->flags |= USBI_TRANSFER_SUBMITTING;
1481
- usbi_mutex_unlock(&itransfer->flags_lock);
1482
-
1483
- r = add_to_flying_list(itransfer);
1484
- if (r) {
1485
- usbi_mutex_lock(&itransfer->flags_lock);
1486
- itransfer->flags = 0;
1487
- goto out;
1488
- }
1489
-
1490
- /* keep a reference to this device */
1491
- libusb_ref_device(transfer->dev_handle->dev);
1492
- r = usbi_backend->submit_transfer(itransfer);
1493
-
1494
- usbi_mutex_lock(&itransfer->flags_lock);
1495
- itransfer->flags &= ~USBI_TRANSFER_SUBMITTING;
1496
- if (r == LIBUSB_SUCCESS) {
1497
- /* check for two possible special conditions:
1498
- * 1) device disconnect occurred immediately after submission
1499
- * 2) transfer completed before we got here to update the flags
1500
- */
1501
- if (itransfer->flags & USBI_TRANSFER_DEVICE_DISAPPEARED) {
1502
- usbi_backend->clear_transfer_priv(itransfer);
1503
- remove = 1;
1504
- r = LIBUSB_ERROR_NO_DEVICE;
1505
- }
1506
- else if (!(itransfer->flags & USBI_TRANSFER_COMPLETED)) {
1507
- itransfer->flags |= USBI_TRANSFER_IN_FLIGHT;
1508
- }
1509
- } else {
1510
- remove = 1;
1511
- }
1512
- out:
1513
- usbi_mutex_unlock(&itransfer->flags_lock);
1514
- if (remove) {
1515
- libusb_unref_device(transfer->dev_handle->dev);
1516
- remove_from_flying_list(itransfer);
1517
- }
1518
- usbi_mutex_unlock(&itransfer->lock);
1519
- return r;
1520
- }
1521
-
1522
- /** \ingroup asyncio
1523
- * Asynchronously cancel a previously submitted transfer.
1524
- * This function returns immediately, but this does not indicate cancellation
1525
- * is complete. Your callback function will be invoked at some later time
1526
- * with a transfer status of
1527
- * \ref libusb_transfer_status::LIBUSB_TRANSFER_CANCELLED
1528
- * "LIBUSB_TRANSFER_CANCELLED."
1529
- *
1530
- * \param transfer the transfer to cancel
1531
- * \returns 0 on success
1532
- * \returns LIBUSB_ERROR_NOT_FOUND if the transfer is not in progress,
1533
- * already complete, or already cancelled.
1534
- * \returns a LIBUSB_ERROR code on failure
1535
- */
1536
- int API_EXPORTED libusb_cancel_transfer(struct libusb_transfer *transfer)
1537
- {
1538
- struct usbi_transfer *itransfer =
1539
- LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer);
1540
- int r;
1541
-
1542
- usbi_dbg("transfer %p", transfer );
1543
- usbi_mutex_lock(&itransfer->lock);
1544
- usbi_mutex_lock(&itransfer->flags_lock);
1545
- if (!(itransfer->flags & USBI_TRANSFER_IN_FLIGHT)
1546
- || (itransfer->flags & USBI_TRANSFER_CANCELLING)) {
1547
- r = LIBUSB_ERROR_NOT_FOUND;
1548
- goto out;
1549
- }
1550
- r = usbi_backend->cancel_transfer(itransfer);
1551
- if (r < 0) {
1552
- if (r != LIBUSB_ERROR_NOT_FOUND &&
1553
- r != LIBUSB_ERROR_NO_DEVICE)
1554
- usbi_err(TRANSFER_CTX(transfer),
1555
- "cancel transfer failed error %d", r);
1556
- else
1557
- usbi_dbg("cancel transfer failed error %d", r);
1558
-
1559
- if (r == LIBUSB_ERROR_NO_DEVICE)
1560
- itransfer->flags |= USBI_TRANSFER_DEVICE_DISAPPEARED;
1561
- }
1562
-
1563
- itransfer->flags |= USBI_TRANSFER_CANCELLING;
1564
-
1565
- out:
1566
- usbi_mutex_unlock(&itransfer->flags_lock);
1567
- usbi_mutex_unlock(&itransfer->lock);
1568
- return r;
1569
- }
1570
-
1571
- /** \ingroup asyncio
1572
- * Set a transfers bulk stream id. Note users are advised to use
1573
- * libusb_fill_bulk_stream_transfer() instead of calling this function
1574
- * directly.
1575
- *
1576
- * Since version 1.0.19, \ref LIBUSB_API_VERSION >= 0x01000103
1577
- *
1578
- * \param transfer the transfer to set the stream id for
1579
- * \param stream_id the stream id to set
1580
- * \see libusb_alloc_streams()
1581
- */
1582
- void API_EXPORTED libusb_transfer_set_stream_id(
1583
- struct libusb_transfer *transfer, uint32_t stream_id)
1584
- {
1585
- struct usbi_transfer *itransfer =
1586
- LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer);
1587
-
1588
- itransfer->stream_id = stream_id;
1589
- }
1590
-
1591
- /** \ingroup asyncio
1592
- * Get a transfers bulk stream id.
1593
- *
1594
- * Since version 1.0.19, \ref LIBUSB_API_VERSION >= 0x01000103
1595
- *
1596
- * \param transfer the transfer to get the stream id for
1597
- * \returns the stream id for the transfer
1598
- */
1599
- uint32_t API_EXPORTED libusb_transfer_get_stream_id(
1600
- struct libusb_transfer *transfer)
1601
- {
1602
- struct usbi_transfer *itransfer =
1603
- LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer);
1604
-
1605
- return itransfer->stream_id;
1606
- }
1607
-
1608
- /* Handle completion of a transfer (completion might be an error condition).
1609
- * This will invoke the user-supplied callback function, which may end up
1610
- * freeing the transfer. Therefore you cannot use the transfer structure
1611
- * after calling this function, and you should free all backend-specific
1612
- * data before calling it.
1613
- * Do not call this function with the usbi_transfer lock held. User-specified
1614
- * callback functions may attempt to directly resubmit the transfer, which
1615
- * will attempt to take the lock. */
1616
- int usbi_handle_transfer_completion(struct usbi_transfer *itransfer,
1617
- enum libusb_transfer_status status)
1618
- {
1619
- struct libusb_transfer *transfer =
1620
- USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1621
- struct libusb_device_handle *handle = transfer->dev_handle;
1622
- uint8_t flags;
1623
- int r;
1624
-
1625
- r = remove_from_flying_list(itransfer);
1626
- if (r < 0)
1627
- usbi_err(ITRANSFER_CTX(itransfer), "failed to set timer for next timeout, errno=%d", errno);
1628
-
1629
- usbi_mutex_lock(&itransfer->flags_lock);
1630
- itransfer->flags &= ~USBI_TRANSFER_IN_FLIGHT;
1631
- itransfer->flags |= USBI_TRANSFER_COMPLETED;
1632
- usbi_mutex_unlock(&itransfer->flags_lock);
1633
-
1634
- if (status == LIBUSB_TRANSFER_COMPLETED
1635
- && transfer->flags & LIBUSB_TRANSFER_SHORT_NOT_OK) {
1636
- int rqlen = transfer->length;
1637
- if (transfer->type == LIBUSB_TRANSFER_TYPE_CONTROL)
1638
- rqlen -= LIBUSB_CONTROL_SETUP_SIZE;
1639
- if (rqlen != itransfer->transferred) {
1640
- usbi_dbg("interpreting short transfer as error");
1641
- status = LIBUSB_TRANSFER_ERROR;
1642
- }
1643
- }
1644
-
1645
- flags = transfer->flags;
1646
- transfer->status = status;
1647
- transfer->actual_length = itransfer->transferred;
1648
- usbi_dbg("transfer %p has callback %p", transfer, transfer->callback);
1649
- if (transfer->callback)
1650
- transfer->callback(transfer);
1651
- /* transfer might have been freed by the above call, do not use from
1652
- * this point. */
1653
- if (flags & LIBUSB_TRANSFER_FREE_TRANSFER)
1654
- libusb_free_transfer(transfer);
1655
- libusb_unref_device(handle->dev);
1656
- return r;
1657
- }
1658
-
1659
- /* Similar to usbi_handle_transfer_completion() but exclusively for transfers
1660
- * that were asynchronously cancelled. The same concerns w.r.t. freeing of
1661
- * transfers exist here.
1662
- * Do not call this function with the usbi_transfer lock held. User-specified
1663
- * callback functions may attempt to directly resubmit the transfer, which
1664
- * will attempt to take the lock. */
1665
- int usbi_handle_transfer_cancellation(struct usbi_transfer *transfer)
1666
- {
1667
- /* if the URB was cancelled due to timeout, report timeout to the user */
1668
- if (transfer->flags & USBI_TRANSFER_TIMED_OUT) {
1669
- usbi_dbg("detected timeout cancellation");
1670
- return usbi_handle_transfer_completion(transfer, LIBUSB_TRANSFER_TIMED_OUT);
1671
- }
1672
-
1673
- /* otherwise its a normal async cancel */
1674
- return usbi_handle_transfer_completion(transfer, LIBUSB_TRANSFER_CANCELLED);
1675
- }
1676
-
1677
- /* Add a completed transfer to the completed_transfers list of the
1678
- * context and signal the event. The backend's handle_transfer_completion()
1679
- * function will be called the next time an event handler runs. */
1680
- void usbi_signal_transfer_completion(struct usbi_transfer *transfer)
1681
- {
1682
- struct libusb_context *ctx = ITRANSFER_CTX(transfer);
1683
- int pending_events;
1684
-
1685
- usbi_mutex_lock(&ctx->event_data_lock);
1686
- pending_events = usbi_pending_events(ctx);
1687
- list_add_tail(&transfer->completed_list, &ctx->completed_transfers);
1688
- if (!pending_events)
1689
- usbi_signal_event(ctx);
1690
- usbi_mutex_unlock(&ctx->event_data_lock);
1691
- }
1692
-
1693
- /** \ingroup poll
1694
- * Attempt to acquire the event handling lock. This lock is used to ensure that
1695
- * only one thread is monitoring libusb event sources at any one time.
1696
- *
1697
- * You only need to use this lock if you are developing an application
1698
- * which calls poll() or select() on libusb's file descriptors directly.
1699
- * If you stick to libusb's event handling loop functions (e.g.
1700
- * libusb_handle_events()) then you do not need to be concerned with this
1701
- * locking.
1702
- *
1703
- * While holding this lock, you are trusted to actually be handling events.
1704
- * If you are no longer handling events, you must call libusb_unlock_events()
1705
- * as soon as possible.
1706
- *
1707
- * \param ctx the context to operate on, or NULL for the default context
1708
- * \returns 0 if the lock was obtained successfully
1709
- * \returns 1 if the lock was not obtained (i.e. another thread holds the lock)
1710
- * \ref mtasync
1711
- */
1712
- int API_EXPORTED libusb_try_lock_events(libusb_context *ctx)
1713
- {
1714
- int r;
1715
- unsigned int ru;
1716
- USBI_GET_CONTEXT(ctx);
1717
-
1718
- /* is someone else waiting to close a device? if so, don't let this thread
1719
- * start event handling */
1720
- usbi_mutex_lock(&ctx->event_data_lock);
1721
- ru = ctx->device_close;
1722
- usbi_mutex_unlock(&ctx->event_data_lock);
1723
- if (ru) {
1724
- usbi_dbg("someone else is closing a device");
1725
- return 1;
1726
- }
1727
-
1728
- r = usbi_mutex_trylock(&ctx->events_lock);
1729
- if (r)
1730
- return 1;
1731
-
1732
- ctx->event_handler_active = 1;
1733
- return 0;
1734
- }
1735
-
1736
- /** \ingroup poll
1737
- * Acquire the event handling lock, blocking until successful acquisition if
1738
- * it is contended. This lock is used to ensure that only one thread is
1739
- * monitoring libusb event sources at any one time.
1740
- *
1741
- * You only need to use this lock if you are developing an application
1742
- * which calls poll() or select() on libusb's file descriptors directly.
1743
- * If you stick to libusb's event handling loop functions (e.g.
1744
- * libusb_handle_events()) then you do not need to be concerned with this
1745
- * locking.
1746
- *
1747
- * While holding this lock, you are trusted to actually be handling events.
1748
- * If you are no longer handling events, you must call libusb_unlock_events()
1749
- * as soon as possible.
1750
- *
1751
- * \param ctx the context to operate on, or NULL for the default context
1752
- * \ref mtasync
1753
- */
1754
- void API_EXPORTED libusb_lock_events(libusb_context *ctx)
1755
- {
1756
- USBI_GET_CONTEXT(ctx);
1757
- usbi_mutex_lock(&ctx->events_lock);
1758
- ctx->event_handler_active = 1;
1759
- }
1760
-
1761
- /** \ingroup poll
1762
- * Release the lock previously acquired with libusb_try_lock_events() or
1763
- * libusb_lock_events(). Releasing this lock will wake up any threads blocked
1764
- * on libusb_wait_for_event().
1765
- *
1766
- * \param ctx the context to operate on, or NULL for the default context
1767
- * \ref mtasync
1768
- */
1769
- void API_EXPORTED libusb_unlock_events(libusb_context *ctx)
1770
- {
1771
- USBI_GET_CONTEXT(ctx);
1772
- ctx->event_handler_active = 0;
1773
- usbi_mutex_unlock(&ctx->events_lock);
1774
-
1775
- /* FIXME: perhaps we should be a bit more efficient by not broadcasting
1776
- * the availability of the events lock when we are modifying pollfds
1777
- * (check ctx->device_close)? */
1778
- usbi_mutex_lock(&ctx->event_waiters_lock);
1779
- usbi_cond_broadcast(&ctx->event_waiters_cond);
1780
- usbi_mutex_unlock(&ctx->event_waiters_lock);
1781
- }
1782
-
1783
- /** \ingroup poll
1784
- * Determine if it is still OK for this thread to be doing event handling.
1785
- *
1786
- * Sometimes, libusb needs to temporarily pause all event handlers, and this
1787
- * is the function you should use before polling file descriptors to see if
1788
- * this is the case.
1789
- *
1790
- * If this function instructs your thread to give up the events lock, you
1791
- * should just continue the usual logic that is documented in \ref mtasync.
1792
- * On the next iteration, your thread will fail to obtain the events lock,
1793
- * and will hence become an event waiter.
1794
- *
1795
- * This function should be called while the events lock is held: you don't
1796
- * need to worry about the results of this function if your thread is not
1797
- * the current event handler.
1798
- *
1799
- * \param ctx the context to operate on, or NULL for the default context
1800
- * \returns 1 if event handling can start or continue
1801
- * \returns 0 if this thread must give up the events lock
1802
- * \ref fullstory "Multi-threaded I/O: the full story"
1803
- */
1804
- int API_EXPORTED libusb_event_handling_ok(libusb_context *ctx)
1805
- {
1806
- unsigned int r;
1807
- USBI_GET_CONTEXT(ctx);
1808
-
1809
- /* is someone else waiting to close a device? if so, don't let this thread
1810
- * continue event handling */
1811
- usbi_mutex_lock(&ctx->event_data_lock);
1812
- r = ctx->device_close;
1813
- usbi_mutex_unlock(&ctx->event_data_lock);
1814
- if (r) {
1815
- usbi_dbg("someone else is closing a device");
1816
- return 0;
1817
- }
1818
-
1819
- return 1;
1820
- }
1821
-
1822
-
1823
- /** \ingroup poll
1824
- * Determine if an active thread is handling events (i.e. if anyone is holding
1825
- * the event handling lock).
1826
- *
1827
- * \param ctx the context to operate on, or NULL for the default context
1828
- * \returns 1 if a thread is handling events
1829
- * \returns 0 if there are no threads currently handling events
1830
- * \ref mtasync
1831
- */
1832
- int API_EXPORTED libusb_event_handler_active(libusb_context *ctx)
1833
- {
1834
- unsigned int r;
1835
- USBI_GET_CONTEXT(ctx);
1836
-
1837
- /* is someone else waiting to close a device? if so, don't let this thread
1838
- * start event handling -- indicate that event handling is happening */
1839
- usbi_mutex_lock(&ctx->event_data_lock);
1840
- r = ctx->device_close;
1841
- usbi_mutex_unlock(&ctx->event_data_lock);
1842
- if (r) {
1843
- usbi_dbg("someone else is closing a device");
1844
- return 1;
1845
- }
1846
-
1847
- return ctx->event_handler_active;
1848
- }
1849
-
1850
- /** \ingroup poll
1851
- * Acquire the event waiters lock. This lock is designed to be obtained under
1852
- * the situation where you want to be aware when events are completed, but
1853
- * some other thread is event handling so calling libusb_handle_events() is not
1854
- * allowed.
1855
- *
1856
- * You then obtain this lock, re-check that another thread is still handling
1857
- * events, then call libusb_wait_for_event().
1858
- *
1859
- * You only need to use this lock if you are developing an application
1860
- * which calls poll() or select() on libusb's file descriptors directly,
1861
- * <b>and</b> may potentially be handling events from 2 threads simultaenously.
1862
- * If you stick to libusb's event handling loop functions (e.g.
1863
- * libusb_handle_events()) then you do not need to be concerned with this
1864
- * locking.
1865
- *
1866
- * \param ctx the context to operate on, or NULL for the default context
1867
- * \ref mtasync
1868
- */
1869
- void API_EXPORTED libusb_lock_event_waiters(libusb_context *ctx)
1870
- {
1871
- USBI_GET_CONTEXT(ctx);
1872
- usbi_mutex_lock(&ctx->event_waiters_lock);
1873
- }
1874
-
1875
- /** \ingroup poll
1876
- * Release the event waiters lock.
1877
- * \param ctx the context to operate on, or NULL for the default context
1878
- * \ref mtasync
1879
- */
1880
- void API_EXPORTED libusb_unlock_event_waiters(libusb_context *ctx)
1881
- {
1882
- USBI_GET_CONTEXT(ctx);
1883
- usbi_mutex_unlock(&ctx->event_waiters_lock);
1884
- }
1885
-
1886
- /** \ingroup poll
1887
- * Wait for another thread to signal completion of an event. Must be called
1888
- * with the event waiters lock held, see libusb_lock_event_waiters().
1889
- *
1890
- * This function will block until any of the following conditions are met:
1891
- * -# The timeout expires
1892
- * -# A transfer completes
1893
- * -# A thread releases the event handling lock through libusb_unlock_events()
1894
- *
1895
- * Condition 1 is obvious. Condition 2 unblocks your thread <em>after</em>
1896
- * the callback for the transfer has completed. Condition 3 is important
1897
- * because it means that the thread that was previously handling events is no
1898
- * longer doing so, so if any events are to complete, another thread needs to
1899
- * step up and start event handling.
1900
- *
1901
- * This function releases the event waiters lock before putting your thread
1902
- * to sleep, and reacquires the lock as it is being woken up.
1903
- *
1904
- * \param ctx the context to operate on, or NULL for the default context
1905
- * \param tv maximum timeout for this blocking function. A NULL value
1906
- * indicates unlimited timeout.
1907
- * \returns 0 after a transfer completes or another thread stops event handling
1908
- * \returns 1 if the timeout expired
1909
- * \ref mtasync
1910
- */
1911
- int API_EXPORTED libusb_wait_for_event(libusb_context *ctx, struct timeval *tv)
1912
- {
1913
- struct timespec timeout;
1914
- int r;
1915
-
1916
- USBI_GET_CONTEXT(ctx);
1917
- if (tv == NULL) {
1918
- usbi_cond_wait(&ctx->event_waiters_cond, &ctx->event_waiters_lock);
1919
- return 0;
1920
- }
1921
-
1922
- r = usbi_backend->clock_gettime(USBI_CLOCK_REALTIME, &timeout);
1923
- if (r < 0) {
1924
- usbi_err(ctx, "failed to read realtime clock, error %d", errno);
1925
- return LIBUSB_ERROR_OTHER;
1926
- }
1927
-
1928
- timeout.tv_sec += tv->tv_sec;
1929
- timeout.tv_nsec += tv->tv_usec * 1000;
1930
- while (timeout.tv_nsec >= 1000000000) {
1931
- timeout.tv_nsec -= 1000000000;
1932
- timeout.tv_sec++;
1933
- }
1934
-
1935
- r = usbi_cond_timedwait(&ctx->event_waiters_cond,
1936
- &ctx->event_waiters_lock, &timeout);
1937
- return (r == ETIMEDOUT);
1938
- }
1939
-
1940
- static void handle_timeout(struct usbi_transfer *itransfer)
1941
- {
1942
- struct libusb_transfer *transfer =
1943
- USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
1944
- int r;
1945
-
1946
- itransfer->flags |= USBI_TRANSFER_TIMEOUT_HANDLED;
1947
- r = libusb_cancel_transfer(transfer);
1948
- if (r == 0)
1949
- itransfer->flags |= USBI_TRANSFER_TIMED_OUT;
1950
- else
1951
- usbi_warn(TRANSFER_CTX(transfer),
1952
- "async cancel failed %d errno=%d", r, errno);
1953
- }
1954
-
1955
- static int handle_timeouts_locked(struct libusb_context *ctx)
1956
- {
1957
- int r;
1958
- struct timespec systime_ts;
1959
- struct timeval systime;
1960
- struct usbi_transfer *transfer;
1961
-
1962
- if (list_empty(&ctx->flying_transfers))
1963
- return 0;
1964
-
1965
- /* get current time */
1966
- r = usbi_backend->clock_gettime(USBI_CLOCK_MONOTONIC, &systime_ts);
1967
- if (r < 0)
1968
- return r;
1969
-
1970
- TIMESPEC_TO_TIMEVAL(&systime, &systime_ts);
1971
-
1972
- /* iterate through flying transfers list, finding all transfers that
1973
- * have expired timeouts */
1974
- list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) {
1975
- struct timeval *cur_tv = &transfer->timeout;
1976
-
1977
- /* if we've reached transfers of infinite timeout, we're all done */
1978
- if (!timerisset(cur_tv))
1979
- return 0;
1980
-
1981
- /* ignore timeouts we've already handled */
1982
- if (transfer->flags & (USBI_TRANSFER_TIMEOUT_HANDLED | USBI_TRANSFER_OS_HANDLES_TIMEOUT))
1983
- continue;
1984
-
1985
- /* if transfer has non-expired timeout, nothing more to do */
1986
- if ((cur_tv->tv_sec > systime.tv_sec) ||
1987
- (cur_tv->tv_sec == systime.tv_sec &&
1988
- cur_tv->tv_usec > systime.tv_usec))
1989
- return 0;
1990
-
1991
- /* otherwise, we've got an expired timeout to handle */
1992
- handle_timeout(transfer);
1993
- }
1994
- return 0;
1995
- }
1996
-
1997
- static int handle_timeouts(struct libusb_context *ctx)
1998
- {
1999
- int r;
2000
- USBI_GET_CONTEXT(ctx);
2001
- usbi_mutex_lock(&ctx->flying_transfers_lock);
2002
- r = handle_timeouts_locked(ctx);
2003
- usbi_mutex_unlock(&ctx->flying_transfers_lock);
2004
- return r;
2005
- }
2006
-
2007
- #ifdef USBI_TIMERFD_AVAILABLE
2008
- static int handle_timerfd_trigger(struct libusb_context *ctx)
2009
- {
2010
- int r;
2011
-
2012
- usbi_mutex_lock(&ctx->flying_transfers_lock);
2013
-
2014
- /* process the timeout that just happened */
2015
- r = handle_timeouts_locked(ctx);
2016
- if (r < 0)
2017
- goto out;
2018
-
2019
- /* arm for next timeout*/
2020
- r = arm_timerfd_for_next_timeout(ctx);
2021
-
2022
- out:
2023
- usbi_mutex_unlock(&ctx->flying_transfers_lock);
2024
- return r;
2025
- }
2026
- #endif
2027
-
2028
- /* do the actual event handling. assumes that no other thread is concurrently
2029
- * doing the same thing. */
2030
- static int handle_events(struct libusb_context *ctx, struct timeval *tv)
2031
- {
2032
- int r;
2033
- struct usbi_pollfd *ipollfd;
2034
- POLL_NFDS_TYPE nfds = 0;
2035
- POLL_NFDS_TYPE internal_nfds;
2036
- struct pollfd *fds = NULL;
2037
- int i = -1;
2038
- int timeout_ms;
2039
- int special_event;
2040
-
2041
- /* there are certain fds that libusb uses internally, currently:
2042
- *
2043
- * 1) event pipe
2044
- * 2) timerfd
2045
- *
2046
- * the backend will never need to attempt to handle events on these fds, so
2047
- * we determine how many fds are in use internally for this context and when
2048
- * handle_events() is called in the backend, the pollfd list and count will
2049
- * be adjusted to skip over these internal fds */
2050
- if (usbi_using_timerfd(ctx))
2051
- internal_nfds = 2;
2052
- else
2053
- internal_nfds = 1;
2054
-
2055
- /* only reallocate the poll fds when the list of poll fds has been modified
2056
- * since the last poll, otherwise reuse them to save the additional overhead */
2057
- usbi_mutex_lock(&ctx->event_data_lock);
2058
- if (ctx->pollfds_modified) {
2059
- usbi_dbg("poll fds modified, reallocating");
2060
-
2061
- if (ctx->pollfds) {
2062
- free(ctx->pollfds);
2063
- ctx->pollfds = NULL;
2064
- }
2065
-
2066
- /* sanity check - it is invalid for a context to have fewer than the
2067
- * required internal fds (memory corruption?) */
2068
- assert(ctx->pollfds_cnt >= internal_nfds);
2069
-
2070
- ctx->pollfds = calloc(ctx->pollfds_cnt, sizeof(*ctx->pollfds));
2071
- if (!ctx->pollfds) {
2072
- usbi_mutex_unlock(&ctx->event_data_lock);
2073
- return LIBUSB_ERROR_NO_MEM;
2074
- }
2075
-
2076
- list_for_each_entry(ipollfd, &ctx->ipollfds, list, struct usbi_pollfd) {
2077
- struct libusb_pollfd *pollfd = &ipollfd->pollfd;
2078
- i++;
2079
- ctx->pollfds[i].fd = pollfd->fd;
2080
- ctx->pollfds[i].events = pollfd->events;
2081
- }
2082
-
2083
- /* reset the flag now that we have the updated list */
2084
- ctx->pollfds_modified = 0;
2085
-
2086
- /* if no further pending events, clear the event pipe so that we do
2087
- * not immediately return from poll */
2088
- if (!usbi_pending_events(ctx))
2089
- usbi_clear_event(ctx);
2090
- }
2091
- fds = ctx->pollfds;
2092
- nfds = ctx->pollfds_cnt;
2093
- usbi_mutex_unlock(&ctx->event_data_lock);
2094
-
2095
- timeout_ms = (int)(tv->tv_sec * 1000) + (tv->tv_usec / 1000);
2096
-
2097
- /* round up to next millisecond */
2098
- if (tv->tv_usec % 1000)
2099
- timeout_ms++;
2100
-
2101
- redo_poll:
2102
- usbi_dbg("poll() %d fds with timeout in %dms", nfds, timeout_ms);
2103
- r = usbi_poll(fds, nfds, timeout_ms);
2104
- usbi_dbg("poll() returned %d", r);
2105
- if (r == 0)
2106
- return handle_timeouts(ctx);
2107
- else if (r == -1 && errno == EINTR)
2108
- return LIBUSB_ERROR_INTERRUPTED;
2109
- else if (r < 0) {
2110
- usbi_err(ctx, "poll failed %d err=%d", r, errno);
2111
- return LIBUSB_ERROR_IO;
2112
- }
2113
-
2114
- special_event = 0;
2115
-
2116
- /* fds[0] is always the event pipe */
2117
- if (fds[0].revents) {
2118
- libusb_hotplug_message *message = NULL;
2119
- struct usbi_transfer *itransfer;
2120
- int ret = 0;
2121
-
2122
- usbi_dbg("caught a fish on the event pipe");
2123
-
2124
- /* take the the event data lock while processing events */
2125
- usbi_mutex_lock(&ctx->event_data_lock);
2126
-
2127
- /* check if someone added a new poll fd */
2128
- if (ctx->pollfds_modified)
2129
- usbi_dbg("someone updated the poll fds");
2130
-
2131
- /* check if someone is closing a device */
2132
- if (ctx->device_close)
2133
- usbi_dbg("someone is closing a device");
2134
-
2135
- /* check for any pending hotplug messages */
2136
- if (!list_empty(&ctx->hotplug_msgs)) {
2137
- usbi_dbg("hotplug message received");
2138
- special_event = 1;
2139
- message = list_first_entry(&ctx->hotplug_msgs, libusb_hotplug_message, list);
2140
- list_del(&message->list);
2141
- }
2142
-
2143
- /* complete any pending transfers */
2144
- while (ret == 0 && !list_empty(&ctx->completed_transfers)) {
2145
- itransfer = list_first_entry(&ctx->completed_transfers, struct usbi_transfer, completed_list);
2146
- list_del(&itransfer->completed_list);
2147
- usbi_mutex_unlock(&ctx->event_data_lock);
2148
- ret = usbi_backend->handle_transfer_completion(itransfer);
2149
- if (ret)
2150
- usbi_err(ctx, "backend handle_transfer_completion failed with error %d", ret);
2151
- usbi_mutex_lock(&ctx->event_data_lock);
2152
- }
2153
-
2154
- /* if no further pending events, clear the event pipe */
2155
- if (!usbi_pending_events(ctx))
2156
- usbi_clear_event(ctx);
2157
-
2158
- usbi_mutex_unlock(&ctx->event_data_lock);
2159
-
2160
- /* process the hotplug message, if any */
2161
- if (message) {
2162
- usbi_hotplug_match(ctx, message->device, message->event);
2163
-
2164
- /* the device left, dereference the device */
2165
- if (LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT == message->event)
2166
- libusb_unref_device(message->device);
2167
-
2168
- free(message);
2169
- }
2170
-
2171
- if (ret) {
2172
- /* return error code */
2173
- r = ret;
2174
- goto handled;
2175
- }
2176
-
2177
- if (0 == --r)
2178
- goto handled;
2179
- }
2180
-
2181
- #ifdef USBI_TIMERFD_AVAILABLE
2182
- /* on timerfd configurations, fds[1] is the timerfd */
2183
- if (usbi_using_timerfd(ctx) && fds[1].revents) {
2184
- /* timerfd indicates that a timeout has expired */
2185
- int ret;
2186
- usbi_dbg("timerfd triggered");
2187
- special_event = 1;
2188
-
2189
- ret = handle_timerfd_trigger(ctx);
2190
- if (ret < 0) {
2191
- /* return error code */
2192
- r = ret;
2193
- goto handled;
2194
- }
2195
-
2196
- if (0 == --r)
2197
- goto handled;
2198
- }
2199
- #endif
2200
-
2201
- r = usbi_backend->handle_events(ctx, fds + internal_nfds, nfds - internal_nfds, r);
2202
- if (r)
2203
- usbi_err(ctx, "backend handle_events failed with error %d", r);
2204
-
2205
- handled:
2206
- if (r == 0 && special_event) {
2207
- timeout_ms = 0;
2208
- goto redo_poll;
2209
- }
2210
-
2211
- return r;
2212
- }
2213
-
2214
- /* returns the smallest of:
2215
- * 1. timeout of next URB
2216
- * 2. user-supplied timeout
2217
- * returns 1 if there is an already-expired timeout, otherwise returns 0
2218
- * and populates out
2219
- */
2220
- static int get_next_timeout(libusb_context *ctx, struct timeval *tv,
2221
- struct timeval *out)
2222
- {
2223
- struct timeval timeout;
2224
- int r = libusb_get_next_timeout(ctx, &timeout);
2225
- if (r) {
2226
- /* timeout already expired? */
2227
- if (!timerisset(&timeout))
2228
- return 1;
2229
-
2230
- /* choose the smallest of next URB timeout or user specified timeout */
2231
- if (timercmp(&timeout, tv, <))
2232
- *out = timeout;
2233
- else
2234
- *out = *tv;
2235
- } else {
2236
- *out = *tv;
2237
- }
2238
- return 0;
2239
- }
2240
-
2241
- /** \ingroup poll
2242
- * Handle any pending events.
2243
- *
2244
- * libusb determines "pending events" by checking if any timeouts have expired
2245
- * and by checking the set of file descriptors for activity.
2246
- *
2247
- * If a zero timeval is passed, this function will handle any already-pending
2248
- * events and then immediately return in non-blocking style.
2249
- *
2250
- * If a non-zero timeval is passed and no events are currently pending, this
2251
- * function will block waiting for events to handle up until the specified
2252
- * timeout. If an event arrives or a signal is raised, this function will
2253
- * return early.
2254
- *
2255
- * If the parameter completed is not NULL then <em>after obtaining the event
2256
- * handling lock</em> this function will return immediately if the integer
2257
- * pointed to is not 0. This allows for race free waiting for the completion
2258
- * of a specific transfer.
2259
- *
2260
- * \param ctx the context to operate on, or NULL for the default context
2261
- * \param tv the maximum time to block waiting for events, or an all zero
2262
- * timeval struct for non-blocking mode
2263
- * \param completed pointer to completion integer to check, or NULL
2264
- * \returns 0 on success, or a LIBUSB_ERROR code on failure
2265
- * \ref mtasync
2266
- */
2267
- int API_EXPORTED libusb_handle_events_timeout_completed(libusb_context *ctx,
2268
- struct timeval *tv, int *completed)
2269
- {
2270
- int r;
2271
- struct timeval poll_timeout;
2272
-
2273
- USBI_GET_CONTEXT(ctx);
2274
- r = get_next_timeout(ctx, tv, &poll_timeout);
2275
- if (r) {
2276
- /* timeout already expired */
2277
- return handle_timeouts(ctx);
2278
- }
2279
-
2280
- retry:
2281
- if (libusb_try_lock_events(ctx) == 0) {
2282
- if (completed == NULL || !*completed) {
2283
- /* we obtained the event lock: do our own event handling */
2284
- usbi_dbg("doing our own event handling");
2285
- r = handle_events(ctx, &poll_timeout);
2286
- }
2287
- libusb_unlock_events(ctx);
2288
- return r;
2289
- }
2290
-
2291
- /* another thread is doing event handling. wait for thread events that
2292
- * notify event completion. */
2293
- libusb_lock_event_waiters(ctx);
2294
-
2295
- if (completed && *completed)
2296
- goto already_done;
2297
-
2298
- if (!libusb_event_handler_active(ctx)) {
2299
- /* we hit a race: whoever was event handling earlier finished in the
2300
- * time it took us to reach this point. try the cycle again. */
2301
- libusb_unlock_event_waiters(ctx);
2302
- usbi_dbg("event handler was active but went away, retrying");
2303
- goto retry;
2304
- }
2305
-
2306
- usbi_dbg("another thread is doing event handling");
2307
- r = libusb_wait_for_event(ctx, &poll_timeout);
2308
-
2309
- already_done:
2310
- libusb_unlock_event_waiters(ctx);
2311
-
2312
- if (r < 0)
2313
- return r;
2314
- else if (r == 1)
2315
- return handle_timeouts(ctx);
2316
- else
2317
- return 0;
2318
- }
2319
-
2320
- /** \ingroup poll
2321
- * Handle any pending events
2322
- *
2323
- * Like libusb_handle_events_timeout_completed(), but without the completed
2324
- * parameter, calling this function is equivalent to calling
2325
- * libusb_handle_events_timeout_completed() with a NULL completed parameter.
2326
- *
2327
- * This function is kept primarily for backwards compatibility.
2328
- * All new code should call libusb_handle_events_completed() or
2329
- * libusb_handle_events_timeout_completed() to avoid race conditions.
2330
- *
2331
- * \param ctx the context to operate on, or NULL for the default context
2332
- * \param tv the maximum time to block waiting for events, or an all zero
2333
- * timeval struct for non-blocking mode
2334
- * \returns 0 on success, or a LIBUSB_ERROR code on failure
2335
- */
2336
- int API_EXPORTED libusb_handle_events_timeout(libusb_context *ctx,
2337
- struct timeval *tv)
2338
- {
2339
- return libusb_handle_events_timeout_completed(ctx, tv, NULL);
2340
- }
2341
-
2342
- /** \ingroup poll
2343
- * Handle any pending events in blocking mode. There is currently a timeout
2344
- * hardcoded at 60 seconds but we plan to make it unlimited in future. For
2345
- * finer control over whether this function is blocking or non-blocking, or
2346
- * for control over the timeout, use libusb_handle_events_timeout_completed()
2347
- * instead.
2348
- *
2349
- * This function is kept primarily for backwards compatibility.
2350
- * All new code should call libusb_handle_events_completed() or
2351
- * libusb_handle_events_timeout_completed() to avoid race conditions.
2352
- *
2353
- * \param ctx the context to operate on, or NULL for the default context
2354
- * \returns 0 on success, or a LIBUSB_ERROR code on failure
2355
- */
2356
- int API_EXPORTED libusb_handle_events(libusb_context *ctx)
2357
- {
2358
- struct timeval tv;
2359
- tv.tv_sec = 60;
2360
- tv.tv_usec = 0;
2361
- return libusb_handle_events_timeout_completed(ctx, &tv, NULL);
2362
- }
2363
-
2364
- /** \ingroup poll
2365
- * Handle any pending events in blocking mode.
2366
- *
2367
- * Like libusb_handle_events(), with the addition of a completed parameter
2368
- * to allow for race free waiting for the completion of a specific transfer.
2369
- *
2370
- * See libusb_handle_events_timeout_completed() for details on the completed
2371
- * parameter.
2372
- *
2373
- * \param ctx the context to operate on, or NULL for the default context
2374
- * \param completed pointer to completion integer to check, or NULL
2375
- * \returns 0 on success, or a LIBUSB_ERROR code on failure
2376
- * \ref mtasync
2377
- */
2378
- int API_EXPORTED libusb_handle_events_completed(libusb_context *ctx,
2379
- int *completed)
2380
- {
2381
- struct timeval tv;
2382
- tv.tv_sec = 60;
2383
- tv.tv_usec = 0;
2384
- return libusb_handle_events_timeout_completed(ctx, &tv, completed);
2385
- }
2386
-
2387
- /** \ingroup poll
2388
- * Handle any pending events by polling file descriptors, without checking if
2389
- * any other threads are already doing so. Must be called with the event lock
2390
- * held, see libusb_lock_events().
2391
- *
2392
- * This function is designed to be called under the situation where you have
2393
- * taken the event lock and are calling poll()/select() directly on libusb's
2394
- * file descriptors (as opposed to using libusb_handle_events() or similar).
2395
- * You detect events on libusb's descriptors, so you then call this function
2396
- * with a zero timeout value (while still holding the event lock).
2397
- *
2398
- * \param ctx the context to operate on, or NULL for the default context
2399
- * \param tv the maximum time to block waiting for events, or zero for
2400
- * non-blocking mode
2401
- * \returns 0 on success, or a LIBUSB_ERROR code on failure
2402
- * \ref mtasync
2403
- */
2404
- int API_EXPORTED libusb_handle_events_locked(libusb_context *ctx,
2405
- struct timeval *tv)
2406
- {
2407
- int r;
2408
- struct timeval poll_timeout;
2409
-
2410
- USBI_GET_CONTEXT(ctx);
2411
- r = get_next_timeout(ctx, tv, &poll_timeout);
2412
- if (r) {
2413
- /* timeout already expired */
2414
- return handle_timeouts(ctx);
2415
- }
2416
-
2417
- return handle_events(ctx, &poll_timeout);
2418
- }
2419
-
2420
- /** \ingroup poll
2421
- * Determines whether your application must apply special timing considerations
2422
- * when monitoring libusb's file descriptors.
2423
- *
2424
- * This function is only useful for applications which retrieve and poll
2425
- * libusb's file descriptors in their own main loop (\ref pollmain).
2426
- *
2427
- * Ordinarily, libusb's event handler needs to be called into at specific
2428
- * moments in time (in addition to times when there is activity on the file
2429
- * descriptor set). The usual approach is to use libusb_get_next_timeout()
2430
- * to learn about when the next timeout occurs, and to adjust your
2431
- * poll()/select() timeout accordingly so that you can make a call into the
2432
- * library at that time.
2433
- *
2434
- * Some platforms supported by libusb do not come with this baggage - any
2435
- * events relevant to timing will be represented by activity on the file
2436
- * descriptor set, and libusb_get_next_timeout() will always return 0.
2437
- * This function allows you to detect whether you are running on such a
2438
- * platform.
2439
- *
2440
- * Since v1.0.5.
2441
- *
2442
- * \param ctx the context to operate on, or NULL for the default context
2443
- * \returns 0 if you must call into libusb at times determined by
2444
- * libusb_get_next_timeout(), or 1 if all timeout events are handled internally
2445
- * or through regular activity on the file descriptors.
2446
- * \ref pollmain "Polling libusb file descriptors for event handling"
2447
- */
2448
- int API_EXPORTED libusb_pollfds_handle_timeouts(libusb_context *ctx)
2449
- {
2450
- #if defined(USBI_TIMERFD_AVAILABLE)
2451
- USBI_GET_CONTEXT(ctx);
2452
- return usbi_using_timerfd(ctx);
2453
- #else
2454
- (void)ctx;
2455
- return 0;
2456
- #endif
2457
- }
2458
-
2459
- /** \ingroup poll
2460
- * Determine the next internal timeout that libusb needs to handle. You only
2461
- * need to use this function if you are calling poll() or select() or similar
2462
- * on libusb's file descriptors yourself - you do not need to use it if you
2463
- * are calling libusb_handle_events() or a variant directly.
2464
- *
2465
- * You should call this function in your main loop in order to determine how
2466
- * long to wait for select() or poll() to return results. libusb needs to be
2467
- * called into at this timeout, so you should use it as an upper bound on
2468
- * your select() or poll() call.
2469
- *
2470
- * When the timeout has expired, call into libusb_handle_events_timeout()
2471
- * (perhaps in non-blocking mode) so that libusb can handle the timeout.
2472
- *
2473
- * This function may return 1 (success) and an all-zero timeval. If this is
2474
- * the case, it indicates that libusb has a timeout that has already expired
2475
- * so you should call libusb_handle_events_timeout() or similar immediately.
2476
- * A return code of 0 indicates that there are no pending timeouts.
2477
- *
2478
- * On some platforms, this function will always returns 0 (no pending
2479
- * timeouts). See \ref polltime.
2480
- *
2481
- * \param ctx the context to operate on, or NULL for the default context
2482
- * \param tv output location for a relative time against the current
2483
- * clock in which libusb must be called into in order to process timeout events
2484
- * \returns 0 if there are no pending timeouts, 1 if a timeout was returned,
2485
- * or LIBUSB_ERROR_OTHER on failure
2486
- */
2487
- int API_EXPORTED libusb_get_next_timeout(libusb_context *ctx,
2488
- struct timeval *tv)
2489
- {
2490
- struct usbi_transfer *transfer;
2491
- struct timespec cur_ts;
2492
- struct timeval cur_tv;
2493
- struct timeval next_timeout = { 0, 0 };
2494
- int r;
2495
-
2496
- USBI_GET_CONTEXT(ctx);
2497
- if (usbi_using_timerfd(ctx))
2498
- return 0;
2499
-
2500
- usbi_mutex_lock(&ctx->flying_transfers_lock);
2501
- if (list_empty(&ctx->flying_transfers)) {
2502
- usbi_mutex_unlock(&ctx->flying_transfers_lock);
2503
- usbi_dbg("no URBs, no timeout!");
2504
- return 0;
2505
- }
2506
-
2507
- /* find next transfer which hasn't already been processed as timed out */
2508
- list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) {
2509
- if (transfer->flags & (USBI_TRANSFER_TIMEOUT_HANDLED | USBI_TRANSFER_OS_HANDLES_TIMEOUT))
2510
- continue;
2511
-
2512
- /* if we've reached transfers of infinte timeout, we're done looking */
2513
- if (!timerisset(&transfer->timeout))
2514
- break;
2515
-
2516
- next_timeout = transfer->timeout;
2517
- break;
2518
- }
2519
- usbi_mutex_unlock(&ctx->flying_transfers_lock);
2520
-
2521
- if (!timerisset(&next_timeout)) {
2522
- usbi_dbg("no URB with timeout or all handled by OS; no timeout!");
2523
- return 0;
2524
- }
2525
-
2526
- r = usbi_backend->clock_gettime(USBI_CLOCK_MONOTONIC, &cur_ts);
2527
- if (r < 0) {
2528
- usbi_err(ctx, "failed to read monotonic clock, errno=%d", errno);
2529
- return 0;
2530
- }
2531
- TIMESPEC_TO_TIMEVAL(&cur_tv, &cur_ts);
2532
-
2533
- if (!timercmp(&cur_tv, &next_timeout, <)) {
2534
- usbi_dbg("first timeout already expired");
2535
- timerclear(tv);
2536
- } else {
2537
- timersub(&next_timeout, &cur_tv, tv);
2538
- usbi_dbg("next timeout in %d.%06ds", tv->tv_sec, tv->tv_usec);
2539
- }
2540
-
2541
- return 1;
2542
- }
2543
-
2544
- /** \ingroup poll
2545
- * Register notification functions for file descriptor additions/removals.
2546
- * These functions will be invoked for every new or removed file descriptor
2547
- * that libusb uses as an event source.
2548
- *
2549
- * To remove notifiers, pass NULL values for the function pointers.
2550
- *
2551
- * Note that file descriptors may have been added even before you register
2552
- * these notifiers (e.g. at libusb_init() time).
2553
- *
2554
- * Additionally, note that the removal notifier may be called during
2555
- * libusb_exit() (e.g. when it is closing file descriptors that were opened
2556
- * and added to the poll set at libusb_init() time). If you don't want this,
2557
- * remove the notifiers immediately before calling libusb_exit().
2558
- *
2559
- * \param ctx the context to operate on, or NULL for the default context
2560
- * \param added_cb pointer to function for addition notifications
2561
- * \param removed_cb pointer to function for removal notifications
2562
- * \param user_data User data to be passed back to callbacks (useful for
2563
- * passing context information)
2564
- */
2565
- void API_EXPORTED libusb_set_pollfd_notifiers(libusb_context *ctx,
2566
- libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb,
2567
- void *user_data)
2568
- {
2569
- USBI_GET_CONTEXT(ctx);
2570
- ctx->fd_added_cb = added_cb;
2571
- ctx->fd_removed_cb = removed_cb;
2572
- ctx->fd_cb_user_data = user_data;
2573
- }
2574
-
2575
- /*
2576
- * Interrupt the iteration of the event handling thread, so that it picks
2577
- * up the fd change. Callers of this function must hold the event_data_lock.
2578
- */
2579
- static void usbi_fd_notification(struct libusb_context *ctx)
2580
- {
2581
- int pending_events;
2582
-
2583
- /* Record that there is a new poll fd.
2584
- * Only signal an event if there are no prior pending events. */
2585
- pending_events = usbi_pending_events(ctx);
2586
- ctx->pollfds_modified = 1;
2587
- if (!pending_events)
2588
- usbi_signal_event(ctx);
2589
- }
2590
-
2591
- /* Add a file descriptor to the list of file descriptors to be monitored.
2592
- * events should be specified as a bitmask of events passed to poll(), e.g.
2593
- * POLLIN and/or POLLOUT. */
2594
- int usbi_add_pollfd(struct libusb_context *ctx, int fd, short events)
2595
- {
2596
- struct usbi_pollfd *ipollfd = malloc(sizeof(*ipollfd));
2597
- if (!ipollfd)
2598
- return LIBUSB_ERROR_NO_MEM;
2599
-
2600
- usbi_dbg("add fd %d events %d", fd, events);
2601
- ipollfd->pollfd.fd = fd;
2602
- ipollfd->pollfd.events = events;
2603
- usbi_mutex_lock(&ctx->event_data_lock);
2604
- list_add_tail(&ipollfd->list, &ctx->ipollfds);
2605
- ctx->pollfds_cnt++;
2606
- usbi_fd_notification(ctx);
2607
- usbi_mutex_unlock(&ctx->event_data_lock);
2608
-
2609
- if (ctx->fd_added_cb)
2610
- ctx->fd_added_cb(fd, events, ctx->fd_cb_user_data);
2611
- return 0;
2612
- }
2613
-
2614
- /* Remove a file descriptor from the list of file descriptors to be polled. */
2615
- void usbi_remove_pollfd(struct libusb_context *ctx, int fd)
2616
- {
2617
- struct usbi_pollfd *ipollfd;
2618
- int found = 0;
2619
-
2620
- usbi_dbg("remove fd %d", fd);
2621
- usbi_mutex_lock(&ctx->event_data_lock);
2622
- list_for_each_entry(ipollfd, &ctx->ipollfds, list, struct usbi_pollfd)
2623
- if (ipollfd->pollfd.fd == fd) {
2624
- found = 1;
2625
- break;
2626
- }
2627
-
2628
- if (!found) {
2629
- usbi_dbg("couldn't find fd %d to remove", fd);
2630
- usbi_mutex_unlock(&ctx->event_data_lock);
2631
- return;
2632
- }
2633
-
2634
- list_del(&ipollfd->list);
2635
- ctx->pollfds_cnt--;
2636
- usbi_fd_notification(ctx);
2637
- usbi_mutex_unlock(&ctx->event_data_lock);
2638
- free(ipollfd);
2639
- if (ctx->fd_removed_cb)
2640
- ctx->fd_removed_cb(fd, ctx->fd_cb_user_data);
2641
- }
2642
-
2643
- /** \ingroup poll
2644
- * Retrieve a list of file descriptors that should be polled by your main loop
2645
- * as libusb event sources.
2646
- *
2647
- * The returned list is NULL-terminated and should be freed with libusb_free_pollfds()
2648
- * when done. The actual list contents must not be touched.
2649
- *
2650
- * As file descriptors are a Unix-specific concept, this function is not
2651
- * available on Windows and will always return NULL.
2652
- *
2653
- * \param ctx the context to operate on, or NULL for the default context
2654
- * \returns a NULL-terminated list of libusb_pollfd structures
2655
- * \returns NULL on error
2656
- * \returns NULL on platforms where the functionality is not available
2657
- */
2658
- DEFAULT_VISIBILITY
2659
- const struct libusb_pollfd ** LIBUSB_CALL libusb_get_pollfds(
2660
- libusb_context *ctx)
2661
- {
2662
- #ifndef OS_WINDOWS
2663
- struct libusb_pollfd **ret = NULL;
2664
- struct usbi_pollfd *ipollfd;
2665
- size_t i = 0;
2666
- USBI_GET_CONTEXT(ctx);
2667
-
2668
- usbi_mutex_lock(&ctx->event_data_lock);
2669
-
2670
- ret = calloc(ctx->pollfds_cnt + 1, sizeof(struct libusb_pollfd *));
2671
- if (!ret)
2672
- goto out;
2673
-
2674
- list_for_each_entry(ipollfd, &ctx->ipollfds, list, struct usbi_pollfd)
2675
- ret[i++] = (struct libusb_pollfd *) ipollfd;
2676
- ret[ctx->pollfds_cnt] = NULL;
2677
-
2678
- out:
2679
- usbi_mutex_unlock(&ctx->event_data_lock);
2680
- return (const struct libusb_pollfd **) ret;
2681
- #else
2682
- usbi_err(ctx, "external polling of libusb's internal descriptors "\
2683
- "is not yet supported on Windows platforms");
2684
- return NULL;
2685
- #endif
2686
- }
2687
-
2688
- /** \ingroup poll
2689
- * Free a list of libusb_pollfd structures. This should be called for all
2690
- * pollfd lists allocated with libusb_get_pollfds().
2691
- *
2692
- * Since version 1.0.20, \ref LIBUSB_API_VERSION >= 0x01000104
2693
- *
2694
- * It is legal to call this function with a NULL pollfd list. In this case,
2695
- * the function will simply return safely.
2696
- *
2697
- * \param pollfds the list of libusb_pollfd structures to free
2698
- */
2699
- void API_EXPORTED libusb_free_pollfds(const struct libusb_pollfd **pollfds)
2700
- {
2701
- if (!pollfds)
2702
- return;
2703
-
2704
- free((void *)pollfds);
2705
- }
2706
-
2707
- /* Backends may call this from handle_events to report disconnection of a
2708
- * device. This function ensures transfers get cancelled appropriately.
2709
- * Callers of this function must hold the events_lock.
2710
- */
2711
- void usbi_handle_disconnect(struct libusb_device_handle *handle)
2712
- {
2713
- struct usbi_transfer *cur;
2714
- struct usbi_transfer *to_cancel;
2715
-
2716
- usbi_dbg("device %d.%d",
2717
- handle->dev->bus_number, handle->dev->device_address);
2718
-
2719
- /* terminate all pending transfers with the LIBUSB_TRANSFER_NO_DEVICE
2720
- * status code.
2721
- *
2722
- * when we find a transfer for this device on the list, there are two
2723
- * possible scenarios:
2724
- * 1. the transfer is currently in-flight, in which case we terminate the
2725
- * transfer here
2726
- * 2. the transfer is not in-flight (or is but hasn't been marked as such),
2727
- * in which case we record that the device disappeared and this will be
2728
- * handled by libusb_submit_transfer()
2729
- */
2730
-
2731
- while (1) {
2732
- to_cancel = NULL;
2733
- usbi_mutex_lock(&HANDLE_CTX(handle)->flying_transfers_lock);
2734
- list_for_each_entry(cur, &HANDLE_CTX(handle)->flying_transfers, list, struct usbi_transfer)
2735
- if (USBI_TRANSFER_TO_LIBUSB_TRANSFER(cur)->dev_handle == handle) {
2736
- usbi_mutex_lock(&cur->flags_lock);
2737
- if (cur->flags & USBI_TRANSFER_IN_FLIGHT)
2738
- to_cancel = cur;
2739
- else
2740
- cur->flags |= USBI_TRANSFER_DEVICE_DISAPPEARED;
2741
- usbi_mutex_unlock(&cur->flags_lock);
2742
-
2743
- if (to_cancel)
2744
- break;
2745
- }
2746
- usbi_mutex_unlock(&HANDLE_CTX(handle)->flying_transfers_lock);
2747
-
2748
- if (!to_cancel)
2749
- break;
2750
-
2751
- usbi_dbg("cancelling transfer %p from disconnect",
2752
- USBI_TRANSFER_TO_LIBUSB_TRANSFER(to_cancel));
2753
-
2754
- usbi_mutex_lock(&to_cancel->lock);
2755
- usbi_backend->clear_transfer_priv(to_cancel);
2756
- usbi_mutex_unlock(&to_cancel->lock);
2757
- usbi_handle_transfer_completion(to_cancel, LIBUSB_TRANSFER_NO_DEVICE);
2758
- }
2759
-
2760
- }