1 /* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */
3 * libusb example program for hotplug API
4 * Copyright © 2012-2013 Nathan Hjelm <hjelmn@mac.ccom>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27 libusb_device_handle
*handle
;
29 static int LIBUSB_CALL
hotplug_callback(libusb_context
*ctx
, libusb_device
*dev
, libusb_hotplug_event event
, void *user_data
)
31 struct libusb_device_descriptor desc
;
34 rc
= libusb_get_device_descriptor(dev
, &desc
);
35 if (LIBUSB_SUCCESS
!= rc
) {
36 fprintf (stderr
, "Error getting device descriptor\n");
39 printf ("Device attached: %04x:%04x\n", desc
.idVendor
, desc
.idProduct
);
41 libusb_open (dev
, &handle
);
48 static int LIBUSB_CALL
hotplug_callback_detach(libusb_context
*ctx
, libusb_device
*dev
, libusb_hotplug_event event
, void *user_data
)
50 printf ("Device detached\n");
52 libusb_close (handle
);
58 int main(int argc
, char *argv
[])
60 libusb_hotplug_callback_handle hp
[2];
61 int product_id
, vendor_id
, class_id
;
64 vendor_id
= (argc
> 1) ? strtol (argv
[1], NULL
, 0) : 0x045a;
65 product_id
= (argc
> 2) ? strtol (argv
[2], NULL
, 0) : 0x5005;
66 class_id
= (argc
> 3) ? strtol (argv
[3], NULL
, 0) : LIBUSB_HOTPLUG_MATCH_ANY
;
68 rc
= libusb_init (NULL
);
71 printf("failed to initialise libusb: %s\n", libusb_error_name(rc
));
75 if (!libusb_has_capability (LIBUSB_CAP_HAS_HOTPLUG
)) {
76 printf ("Hotplug capabilites are not supported on this platform\n");
81 rc
= libusb_hotplug_register_callback (NULL
, LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED
, 0, vendor_id
,
82 product_id
, class_id
, hotplug_callback
, NULL
, &hp
[0]);
83 if (LIBUSB_SUCCESS
!= rc
) {
84 fprintf (stderr
, "Error registering callback 0\n");
89 rc
= libusb_hotplug_register_callback (NULL
, LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT
, 0, vendor_id
,
90 product_id
,class_id
, hotplug_callback_detach
, NULL
, &hp
[1]);
91 if (LIBUSB_SUCCESS
!= rc
) {
92 fprintf (stderr
, "Error registering callback 1\n");
98 rc
= libusb_handle_events (NULL
);
100 printf("libusb_handle_events() failed: %s\n", libusb_error_name(rc
));