1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch/* -*- Mode: C; indent-tabs-mode:t ; c-basic-offset:8 -*- */ 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch/* 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Hotplug support for libusbx 4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Copyright © 2012-2013 Nathan Hjelm <hjelmn@mac.com> 5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Copyright © 2012-2013 Peter Stuge <peter@stuge.se> 6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * 7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * This library is free software; you can redistribute it and/or 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * modify it under the terms of the GNU Lesser General Public 9ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * License as published by the Free Software Foundation; either 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * version 2.1 of the License, or (at your option) any later version. 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * This library is distributed in the hope that it will be useful, 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Lesser General Public License for more details. 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * You should have received a copy of the GNU Lesser General Public 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * License along with this library; if not, write to the Free Software 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if !defined(USBI_HOTPLUG_H) 23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define USBI_HOTPLUG_H 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef LIBUSBI_H 26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "libusbi.h" 27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch/** \ingroup hotplug 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * The hotplug callback structure. The user populates this structure with 31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * libusb_hotplug_prepare_callback() and then calls libusb_hotplug_register_callback() 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * to receive notification of hotplug events. 33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochstruct libusb_hotplug_callback { 35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** Context this callback is associated with */ 36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch struct libusb_context *ctx; 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** Vendor ID to match or LIBUSB_HOTPLUG_MATCH_ANY */ 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int vendor_id; 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** Product ID to match or LIBUSB_HOTPLUG_MATCH_ANY */ 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int product_id; 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** Device class to match or LIBUSB_HOTPLUG_MATCH_ANY */ 45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int dev_class; 46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** Hotplug callback flags */ 48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch libusb_hotplug_flag flags; 49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** Event(s) that will trigger this callback */ 51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch libusb_hotplug_event events; 52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** Callback function to invoke for matching event/device */ 54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch libusb_hotplug_callback_fn cb; 55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** Handle for this callback (used to match on deregister) */ 57ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch libusb_hotplug_callback_handle handle; 58ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** User data that will be passed to the callback function */ 60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void *user_data; 61ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** Callback is marked for deletion */ 63ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int needs_free; 64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** List this callback is registered in (ctx->hotplug_cbs) */ 66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch struct list_head list; 67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}; 68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochtypedef struct libusb_hotplug_callback libusb_hotplug_callback; 70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 71ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochstruct libusb_hotplug_message { 72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch libusb_hotplug_event event; 73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch struct libusb_device *device; 74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}; 75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 76ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochtypedef struct libusb_hotplug_message libusb_hotplug_message; 77ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 78ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid usbi_hotplug_deregister_all(struct libusb_context *ctx); 79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid usbi_hotplug_match(struct libusb_context *ctx, struct libusb_device *dev, 80ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch libusb_hotplug_event event); 81ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 83