/* usbmuxd - iPhone/iPod Touch USB multiplex server daemon Copyright (C) 2009 Hector Martin "marcan" Copyright (C) 2009 Nikias Bassen Copyright (C) 2009 Martin Szulecki This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 or version 3. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __USB_H__ #define __USB_H__ #include #include "utils.h" #define INTERFACE_CLASS 255 #define INTERFACE_SUBCLASS 254 #define INTERFACE_PROTOCOL 2 // libusb fragments packets larger than this (usbfs limitation) // on input, this creates race conditions and other issues #define USB_MRU 16384 // max transmission packet size // libusb fragments these too, but doesn't send ZLPs so we're safe // but we need to send a ZLP ourselves at the end (see usb-linux.c) // we're using 3 * 16384 to optimize for the fragmentation // this results in three URBs per full transfer, 32 USB packets each // if there are ZLP issues this should make them show up easily too #define USB_MTU (3 * 16384) #define USB_PACKET_SIZE 512 #define VID_APPLE 0x5ac #define PID_RANGE_LOW 0x1290 #define PID_RANGE_MAX 0x12af struct usb_device; int usb_init(void); void usb_shutdown(void); const char *usb_get_serial(struct usb_device *dev); uint32_t usb_get_location(struct usb_device *dev); uint16_t usb_get_pid(struct usb_device *dev); void usb_get_fds(struct fdlist *list); int usb_get_timeout(void); int usb_send(struct usb_device *dev, const unsigned char *buf, int length); int usb_discover(void); void usb_autodiscover(int enable); int usb_process(void); int usb_process_timeout(int msec); #endif