Fix issue 1) not recognizes some usb device, 2) reconnect when ffmpeg encoder error
[rtmpclient.git] / app / src / main / jni / libusb-1.0.22 / libusb / hotplug.h
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 #ifndef USBI_HOTPLUG_H
23 #define USBI_HOTPLUG_H
24
25 #include "libusbi.h"
26
27 enum usbi_hotplug_flags {
28         /* This callback is interested in device arrivals */
29         USBI_HOTPLUG_DEVICE_ARRIVED = LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED,
30
31         /* This callback is interested in device removals */
32         USBI_HOTPLUG_DEVICE_LEFT = LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT,
33
34         /* IMPORTANT: The values for the below entries must start *after*
35          * the highest value of the above entries!!!
36          */
37
38         /* The vendor_id field is valid for matching */
39         USBI_HOTPLUG_VENDOR_ID_VALID = (1 << 3),
40
41         /* The product_id field is valid for matching */
42         USBI_HOTPLUG_PRODUCT_ID_VALID = (1 << 4),
43
44         /* The dev_class field is valid for matching */
45         USBI_HOTPLUG_DEV_CLASS_VALID = (1 << 5),
46
47         /* This callback has been unregistered and needs to be freed */
48         USBI_HOTPLUG_NEEDS_FREE = (1 << 6),
49 };
50
51 /** \ingroup hotplug
52  * The hotplug callback structure. The user populates this structure with
53  * libusb_hotplug_prepare_callback() and then calls libusb_hotplug_register_callback()
54  * to receive notification of hotplug events.
55  */
56 struct libusb_hotplug_callback {
57         /** Flags that control how this callback behaves */
58         uint8_t flags;
59
60         /** Vendor ID to match (if flags says this is valid) */
61         uint16_t vendor_id;
62
63         /** Product ID to match (if flags says this is valid) */
64         uint16_t product_id;
65
66         /** Device class to match (if flags says this is valid) */
67         uint8_t dev_class;
68
69         /** Callback function to invoke for matching event/device */
70         libusb_hotplug_callback_fn cb;
71
72         /** Handle for this callback (used to match on deregister) */
73         libusb_hotplug_callback_handle handle;
74
75         /** User data that will be passed to the callback function */
76         void *user_data;
77
78         /** List this callback is registered in (ctx->hotplug_cbs) */
79         struct list_head list;
80 };
81
82 struct libusb_hotplug_message {
83         /** The hotplug event that occurred */
84         libusb_hotplug_event event;
85
86         /** The device for which this hotplug event occurred */
87         struct libusb_device *device;
88
89         /** List this message is contained in (ctx->hotplug_msgs) */
90         struct list_head list;
91 };
92
93 void usbi_hotplug_deregister(struct libusb_context *ctx, int forced);
94 void usbi_hotplug_match(struct libusb_context *ctx, struct libusb_device *dev,
95                         libusb_hotplug_event event);
96 void usbi_hotplug_notification(struct libusb_context *ctx, struct libusb_device *dev,
97                         libusb_hotplug_event event);
98
99 #endif