libusb-glue.h revision 335a81cf1f504d9ba87702181eaa13f8476f3166
17b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij/**
27cf02643117f11ab3c7d11dd49c1fc9d1776ba4eLinus Walleij * \file libusb-glue.h
37b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * Low-level USB interface glue towards libusb.
47b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij *
57b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * Copyright (C) 2005-2007 Richard A. Low <richard@wentnet.com>
6e04a1b943a8cab73dc03b14382e1803fcf7eaf3fLinus Walleij * Copyright (C) 2005-2007 Linus Walleij <triad@df.lth.se>
7fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij * Copyright (C) 2006-2007 Marcus Meissner
87b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * Copyright (C) 2007 Ted Bullock
92f62281923b4ec12538b47f5d56a5e2b95c45006Linus Walleij *
107b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * This library is free software; you can redistribute it and/or
117b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * modify it under the terms of the GNU Lesser General Public
127b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * License as published by the Free Software Foundation; either
137b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * version 2 of the License, or (at your option) any later version.
147b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij *
157b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * This library is distributed in the hope that it will be useful,
167b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * but WITHOUT ANY WARRANTY; without even the implied warranty of
177b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
187b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * Lesser General Public License for more details.
197b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij *
207b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * You should have received a copy of the GNU Lesser General Public
217b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * License along with this library; if not, write to the
227b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
237b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * Boston, MA 02111-1307, USA.
247b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij *
25eb8c6fe031f5ba155cabcbfabcc235acffbc2fbLinus Walleij * Created by Richard Low on 24/12/2005.
267b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij * Modified by Linus Walleij
277b7a0e2b9d465dad85dca593693280f1df79a74dLinus Walleij *
28eb8c6fe031f5ba155cabcbfabcc235acffbc2fbLinus Walleij */
29eb8c6fe031f5ba155cabcbfabcc235acffbc2fbLinus Walleij
307cf02643117f11ab3c7d11dd49c1fc9d1776ba4eLinus Walleij#include "ptp.h"
317cf02643117f11ab3c7d11dd49c1fc9d1776ba4eLinus Walleij#include <usb.h>
32eb8c6fe031f5ba155cabcbfabcc235acffbc2fbLinus Walleij#include "libmtp.h"
33b02a066363ab3c9b4f8f48b227c9b7b71cf7705eLinus Walleij#include "device-flags.h"
34fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij
35fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij#define USB_BULK_READ usb_bulk_read
36fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij#define USB_BULK_WRITE usb_bulk_write
37fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij
387cf02643117f11ab3c7d11dd49c1fc9d1776ba4eLinus Walleij/**
39fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij * Internal USB struct.
4015e344f57021b532da574b73aa74d1de3d6cdc73Linus Walleij */
41fec4d56d33e839b0d02e4d7f47a8ec16abb3bdcdLinus Walleijtypedef struct _PTP_USB PTP_USB;
42eb8c6fe031f5ba155cabcbfabcc235acffbc2fbLinus Walleijstruct _PTP_USB {
43d866d24d1673ba48ad2397908018b0761bb3beffLinus Walleij  PTPParams *params;
44d866d24d1673ba48ad2397908018b0761bb3beffLinus Walleij  usb_dev_handle* handle;
45d866d24d1673ba48ad2397908018b0761bb3beffLinus Walleij  uint8_t interface;
46d866d24d1673ba48ad2397908018b0761bb3beffLinus Walleij  int inep;
47d866d24d1673ba48ad2397908018b0761bb3beffLinus Walleij  int inep_maxpacket;
48daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklas  int outep;
49daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklas  int outep_maxpacket;
50daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklas  int intep;
51daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklas  /** File transfer callbacks and counters */
52daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklas  int callback_active;
530358408fe9faa91c1c6737a785771dfaf691e101nicklas  uint64_t current_transfer_total;
54daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklas  uint64_t current_transfer_complete;
55daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklas  LIBMTP_progressfunc_t current_transfer_callback;
56daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklas  void const * current_transfer_callback_data;
57daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklas  /** Any special device flags, only used internally */
58daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklas  LIBMTP_raw_device_t rawdevice;
590358408fe9faa91c1c6737a785771dfaf691e101nicklas};
60daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklas
61daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklasint open_device (int busn, int devn, short force, PTP_USB *ptp_usb, PTPParams *params, struct usb_device **dev);
62daadbf2e26eca84c9d250f0e09d9efbe2c70d77anicklasvoid dump_usbinfo(PTP_USB *ptp_usb);
63fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleijchar const * const get_playlist_extension(PTP_USB *ptp_usb);
64fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleijvoid close_device(PTP_USB *ptp_usb, PTPParams *params);
65fbbef8b16876568f760986e4ff8f4921b8373fd5Linus WalleijLIBMTP_error_number_t configure_usb_device(LIBMTP_raw_device_t *device,
66fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij					   PTPParams *params,
67fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij					   void **usbinfo);
687cf02643117f11ab3c7d11dd49c1fc9d1776ba4eLinus Walleij
697cf02643117f11ab3c7d11dd49c1fc9d1776ba4eLinus Walleij/* Flag check macros */
70fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij#define FLAG_BROKEN_MTPGETOBJPROPLIST_ALL(a) \
71eb8c6fe031f5ba155cabcbfabcc235acffbc2fbLinus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL)
722d411dbbac42bec217126c9bf97f6bef9977c484Linus Walleij#define FLAG_UNLOAD_DRIVER(a) \
730558ac5a7223633c592b05c2e10b7591e0b48db4Linus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_UNLOAD_DRIVER)
742d411dbbac42bec217126c9bf97f6bef9977c484Linus Walleij#define FLAG_BROKEN_MTPGETOBJPROPLIST(a) \
752d411dbbac42bec217126c9bf97f6bef9977c484Linus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST)
762d411dbbac42bec217126c9bf97f6bef9977c484Linus Walleij#define FLAG_NO_ZERO_READS(a) \
773e418e20db3fa3ec60d069478314238b47e71354Linus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_NO_ZERO_READS)
78fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij#define FLAG_IRIVER_OGG_ALZHEIMER(a) \
79fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_IRIVER_OGG_ALZHEIMER)
80fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij#define FLAG_ONLY_7BIT_FILENAMES(a) \
81fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_ONLY_7BIT_FILENAMES)
827cf02643117f11ab3c7d11dd49c1fc9d1776ba4eLinus Walleij#define FLAG_NO_RELEASE_INTERFACE(a) \
83fbbef8b16876568f760986e4ff8f4921b8373fd5Linus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_NO_RELEASE_INTERFACE)
84b0ab548319faa7bd1b8fb3cb6371d6d9ec98ce50Linus Walleij#define FLAG_IGNORE_HEADER_ERRORS(a) \
85c6210fb655cbf972efe722328e504434dc4d171cLinus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_IGNORE_HEADER_ERRORS)
86c6210fb655cbf972efe722328e504434dc4d171cLinus Walleij#define FLAG_BROKEN_SET_OBJECT_PROPLIST(a) \
87c6210fb655cbf972efe722328e504434dc4d171cLinus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_BROKEN_SET_OBJECT_PROPLIST)
88c6210fb655cbf972efe722328e504434dc4d171cLinus Walleij#define FLAG_OGG_IS_UNKNOWN(a) \
89c6210fb655cbf972efe722328e504434dc4d171cLinus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_OGG_IS_UNKNOWN)
90d214b9bae4e9b0c106a21ff3a3c24029982f9d50Linus Walleij#define FLAG_BROKEN_SET_SAMPLE_DIMENSIONS(a) \
91d214b9bae4e9b0c106a21ff3a3c24029982f9d50Linus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_BROKEN_SET_SAMPLE_DIMENSIONS)
92e04a1b943a8cab73dc03b14382e1803fcf7eaf3fLinus Walleij#define FLAG_ALWAYS_PROBE_DESCRIPTOR(a) \
93e04a1b943a8cab73dc03b14382e1803fcf7eaf3fLinus Walleij  ((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_ALWAYS_PROBE_DESCRIPTOR)
94d214b9bae4e9b0c106a21ff3a3c24029982f9d50Linus Walleij
95d214b9bae4e9b0c106a21ff3a3c24029982f9d50Linus Walleij/* connect_first_device return codes */
96d214b9bae4e9b0c106a21ff3a3c24029982f9d50Linus Walleij#define PTP_CD_RC_CONNECTED	0
97ee73ef2300dae31ead0bf9dd755192207b18df53Linus Walleij#define PTP_CD_RC_NO_DEVICES	1
980558ac5a7223633c592b05c2e10b7591e0b48db4Linus Walleij#define PTP_CD_RC_ERROR_CONNECTING	2
99fec4d56d33e839b0d02e4d7f47a8ec16abb3bdcdLinus Walleij