blob: 50b47083a6436a0311dee02a62a18bd1d1811829 [file] [log] [blame]
/**
* \file libusb-glue.h
* Low-level USB interface glue towards libusb.
*
* Copyright (C) 2005-2007 Richard A. Low <richard@wentnet.com>
* Copyright (C) 2005-2007 Linus Walleij <triad@df.lth.se>
* Copyright (C) 2006-2007 Marcus Meissner
* Copyright (C) 2007 Ted Bullock
*
* 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 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., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* Created by Richard Low on 24/12/2005.
* Modified by Linus Walleij
*
*/
#include "ptp.h"
#include <usb.h>
#include "libmtp.h"
#define USB_BULK_READ usb_bulk_read
#define USB_BULK_WRITE usb_bulk_write
/**
* Internal USB struct.
*/
typedef struct _PTP_USB PTP_USB;
struct _PTP_USB {
PTPParams *params;
usb_dev_handle* handle;
uint8_t interface;
int inep;
int inep_maxpacket;
int outep;
int outep_maxpacket;
int intep;
/** File transfer callbacks and counters */
int callback_active;
uint64_t current_transfer_total;
uint64_t current_transfer_complete;
LIBMTP_progressfunc_t current_transfer_callback;
void const * current_transfer_callback_data;
/** Any special device flags, only used internally */
uint32_t device_flags;
};
struct mtpdevice_list_struct {
struct usb_device *libusb_device;
PTPParams *params;
PTP_USB *ptp_usb;
struct mtpdevice_list_struct *next;
};
typedef struct mtpdevice_list_struct mtpdevice_list_t;
int open_device (int busn, int devn, short force, PTP_USB *ptp_usb, PTPParams *params, struct usb_device **dev);
void dump_usbinfo(PTP_USB *ptp_usb);
void close_device (PTP_USB *ptp_usb, PTPParams *params);
LIBMTP_error_number_t find_usb_devices(mtpdevice_list_t **devlist);
void free_mtpdevice_list(mtpdevice_list_t *devlist);
/* connect_first_device return codes */
#define PTP_CD_RC_CONNECTED 0
#define PTP_CD_RC_NO_DEVICES 1
#define PTP_CD_RC_ERROR_CONNECTING 2