123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- /*
- * darwin backend for libusb 1.0
- * Copyright (C) 2008-2013 Nathan Hjelm <hjelmn@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- #if !defined(LIBUSB_DARWIN_H)
- #define LIBUSB_DARWIN_H
- #include "libusbi.h"
- #include <IOKit/IOTypes.h>
- #include <IOKit/IOCFBundle.h>
- #include <IOKit/usb/IOUSBLib.h>
- #include <IOKit/IOCFPlugIn.h>
- /* IOUSBInterfaceInferface */
- #if defined (kIOUSBInterfaceInterfaceID300)
- #define usb_interface_t IOUSBInterfaceInterface300
- #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID300
- #define InterfaceVersion 300
- #elif defined (kIOUSBInterfaceInterfaceID245)
- #define usb_interface_t IOUSBInterfaceInterface245
- #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID245
- #define InterfaceVersion 245
- #elif defined (kIOUSBInterfaceInterfaceID220)
- #define usb_interface_t IOUSBInterfaceInterface220
- #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID220
- #define InterfaceVersion 220
- #elif defined (kIOUSBInterfaceInterfaceID197)
- #define usb_interface_t IOUSBInterfaceInterface197
- #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID197
- #define InterfaceVersion 197
- #elif defined (kIOUSBInterfaceInterfaceID190)
- #define usb_interface_t IOUSBInterfaceInterface190
- #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID190
- #define InterfaceVersion 190
- #elif defined (kIOUSBInterfaceInterfaceID182)
- #define usb_interface_t IOUSBInterfaceInterface182
- #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID182
- #define InterfaceVersion 182
- #else
- #error "IOUSBFamily is too old. Please upgrade your OS"
- #endif
- /* IOUSBDeviceInterface */
- #if defined (kIOUSBDeviceInterfaceID500)
- #define usb_device_t IOUSBDeviceInterface500
- #define DeviceInterfaceID kIOUSBDeviceInterfaceID500
- #define DeviceVersion 500
- #elif defined (kIOUSBDeviceInterfaceID320)
- #define usb_device_t IOUSBDeviceInterface320
- #define DeviceInterfaceID kIOUSBDeviceInterfaceID320
- #define DeviceVersion 320
- #elif defined (kIOUSBDeviceInterfaceID300)
- #define usb_device_t IOUSBDeviceInterface300
- #define DeviceInterfaceID kIOUSBDeviceInterfaceID300
- #define DeviceVersion 300
- #elif defined (kIOUSBDeviceInterfaceID245)
- #define usb_device_t IOUSBDeviceInterface245
- #define DeviceInterfaceID kIOUSBDeviceInterfaceID245
- #define DeviceVersion 245
- #elif defined (kIOUSBDeviceInterfaceID197)
- #define usb_device_t IOUSBDeviceInterface197
- #define DeviceInterfaceID kIOUSBDeviceInterfaceID197
- #define DeviceVersion 197
- #elif defined (kIOUSBDeviceInterfaceID187)
- #define usb_device_t IOUSBDeviceInterface187
- #define DeviceInterfaceID kIOUSBDeviceInterfaceID187
- #define DeviceVersion 187
- #elif defined (kIOUSBDeviceInterfaceID182)
- #define usb_device_t IOUSBDeviceInterface182
- #define DeviceInterfaceID kIOUSBDeviceInterfaceID182
- #define DeviceVersion 182
- #else
- #error "IOUSBFamily is too old. Please upgrade your OS"
- #endif
- #if !defined(IO_OBJECT_NULL)
- #define IO_OBJECT_NULL ((io_object_t) 0)
- #endif
- typedef IOCFPlugInInterface *io_cf_plugin_ref_t;
- typedef IONotificationPortRef io_notification_port_t;
- /* private structures */
- struct darwin_device_priv {
- IOUSBDeviceDescriptor dev_descriptor;
- UInt32 location;
- char sys_path[21];
- usb_device_t **device;
- int open_count;
- UInt8 first_config, active_config;
- };
- struct darwin_device_handle_priv {
- int is_open;
- CFRunLoopSourceRef cfSource;
- int fds[2];
- struct darwin_interface {
- usb_interface_t **interface;
- uint8_t num_endpoints;
- CFRunLoopSourceRef cfSource;
- uint64_t frames[256];
- uint8_t endpoint_addrs[USB_MAXENDPOINTS];
- } interfaces[USB_MAXINTERFACES];
- };
- struct darwin_transfer_priv {
- /* Isoc */
- IOUSBIsocFrame *isoc_framelist;
- int num_iso_packets;
- /* Control */
- #if !defined (LIBUSB_NO_TIMEOUT_DEVICE)
- IOUSBDevRequestTO req;
- #else
- IOUSBDevRequest req;
- #endif
- /* Bulk */
- };
- /* structure for signaling io completion */
- struct darwin_msg_async_io_complete {
- struct usbi_transfer *itransfer;
- IOReturn result;
- UInt32 size;
- };
- #endif
|