Home | History | Annotate | Download | only in os
      1 /*
      2  * darwin backend for libusb 1.0
      3  * Copyright (C) 2008-2009 Nathan Hjelm <hjelmn (at) users.sourceforge.net>
      4  *
      5  * This library is free software; you can redistribute it and/or
      6  * modify it under the terms of the GNU Lesser General Public
      7  * License as published by the Free Software Foundation; either
      8  * version 2.1 of the License, or (at your option) any later version.
      9  *
     10  * This library is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13  * Lesser General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU Lesser General Public
     16  * License along with this library; if not, write to the Free Software
     17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     18  */
     19 
     20 #if !defined(LIBUSB_DARWIN_H)
     21 #define LIBUSB_DARWIN_H
     22 
     23 #include "libusbi.h"
     24 
     25 #include <IOKit/IOCFBundle.h>
     26 #include <IOKit/usb/IOUSBLib.h>
     27 #include <IOKit/IOCFPlugIn.h>
     28 
     29 /* IOUSBInterfaceInferface */
     30 #if defined (kIOUSBInterfaceInterfaceID300)
     31 
     32 #define usb_interface_t IOUSBInterfaceInterface300
     33 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID300
     34 #define InterfaceVersion 300
     35 
     36 #elif defined (kIOUSBInterfaceInterfaceID245)
     37 
     38 #define usb_interface_t IOUSBInterfaceInterface245
     39 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID245
     40 #define InterfaceVersion 245
     41 
     42 #elif defined (kIOUSBInterfaceInterfaceID220)
     43 
     44 #define usb_interface_t IOUSBInterfaceInterface220
     45 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID220
     46 #define InterfaceVersion 220
     47 
     48 #elif defined (kIOUSBInterfaceInterfaceID197)
     49 
     50 #define usb_interface_t IOUSBInterfaceInterface197
     51 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID197
     52 #define InterfaceVersion 197
     53 
     54 #elif defined (kIOUSBInterfaceInterfaceID190)
     55 
     56 #define usb_interface_t IOUSBInterfaceInterface190
     57 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID190
     58 #define InterfaceVersion 190
     59 
     60 #elif defined (kIOUSBInterfaceInterfaceID182)
     61 
     62 #define usb_interface_t IOUSBInterfaceInterface182
     63 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID182
     64 #define InterfaceVersion 182
     65 
     66 #else
     67 
     68 #error "IOUSBFamily is too old. Please upgrade your OS"
     69 
     70 #endif
     71 
     72 /* IOUSBDeviceInterface */
     73 #if defined (kIOUSBDeviceInterfaceID320)
     74 
     75 #define usb_device_t    IOUSBDeviceInterface320
     76 #define DeviceInterfaceID kIOUSBDeviceInterfaceID320
     77 #define DeviceVersion 320
     78 
     79 #elif defined (kIOUSBDeviceInterfaceID300)
     80 
     81 #define usb_device_t    IOUSBDeviceInterface300
     82 #define DeviceInterfaceID kIOUSBDeviceInterfaceID300
     83 #define DeviceVersion 300
     84 
     85 #elif defined (kIOUSBDeviceInterfaceID245)
     86 
     87 #define usb_device_t    IOUSBDeviceInterface245
     88 #define DeviceInterfaceID kIOUSBDeviceInterfaceID245
     89 #define DeviceVersion 245
     90 
     91 #elif defined (kIOUSBDeviceInterfaceID197)
     92 
     93 #define usb_device_t    IOUSBDeviceInterface197
     94 #define DeviceInterfaceID kIOUSBDeviceInterfaceID197
     95 #define DeviceVersion 197
     96 
     97 #elif defined (kIOUSBDeviceInterfaceID187)
     98 
     99 #define usb_device_t    IOUSBDeviceInterface187
    100 #define DeviceInterfaceID kIOUSBDeviceInterfaceID187
    101 #define DeviceVersion 187
    102 
    103 #elif defined (kIOUSBDeviceInterfaceID182)
    104 
    105 #define usb_device_t    IOUSBDeviceInterface182
    106 #define DeviceInterfaceID kIOUSBDeviceInterfaceID182
    107 #define DeviceVersion 182
    108 
    109 #else
    110 
    111 #error "IOUSBFamily is too old. Please upgrade your OS"
    112 
    113 #endif
    114 
    115 typedef IOCFPlugInInterface *io_cf_plugin_ref_t;
    116 typedef IONotificationPortRef io_notification_port_t;
    117 
    118 /* private structures */
    119 struct darwin_device_priv {
    120   IOUSBDeviceDescriptor dev_descriptor;
    121   UInt32                location;
    122   char                  sys_path[21];
    123   usb_device_t        **device;
    124   int                  open_count;
    125 };
    126 
    127 struct darwin_device_handle_priv {
    128   int                  is_open;
    129   CFRunLoopSourceRef   cfSource;
    130   int                  fds[2];
    131 
    132   struct __darwin_interface {
    133     usb_interface_t    **interface;
    134     uint8_t              num_endpoints;
    135     CFRunLoopSourceRef   cfSource;
    136     uint8_t            endpoint_addrs[USB_MAXENDPOINTS];
    137   } interfaces[USB_MAXINTERFACES];
    138 };
    139 
    140 struct darwin_transfer_priv {
    141   /* Isoc */
    142   IOUSBIsocFrame *isoc_framelist;
    143 
    144   /* Control */
    145 #if !defined (LIBUSB_NO_TIMEOUT_DEVICE)
    146   IOUSBDevRequestTO req;
    147 #else
    148   IOUSBDevRequest req;
    149 #endif
    150 
    151   /* Bulk */
    152 };
    153 
    154 enum {
    155   MESSAGE_DEVICE_GONE,
    156   MESSAGE_ASYNC_IO_COMPLETE
    157 };
    158 
    159 
    160 
    161 #endif
    162