This commit is contained in:
Kovid Goyal 2012-08-26 17:48:52 +05:30
parent 3cc8ef1875
commit 9a25f5c023
2 changed files with 18 additions and 11 deletions

View File

@ -12,7 +12,7 @@ from threading import RLock
from io import BytesIO
from collections import namedtuple
from calibre import prints
from calibre import prints, as_unicode
from calibre.constants import plugins
from calibre.ptempfile import SpooledTemporaryFile
from calibre.devices.errors import OpenFailed, DeviceError
@ -28,7 +28,7 @@ def fingerprint(d):
class MTP_DEVICE(MTPDeviceBase):
supported_platforms = ['linux']
supported_platforms = ['linux', 'osx']
def __init__(self, *args, **kwargs):
MTPDeviceBase.__init__(self, *args, **kwargs)
@ -138,11 +138,12 @@ class MTP_DEVICE(MTPDeviceBase):
time.sleep(2)
try:
self.dev = self.create_device(connected_device)
except self.libmtp.MTPError:
except self.libmtp.MTPError as e:
# Black list this device so that it is ignored for the
# remainder of this session.
self.blacklisted_devices.add(connected_device)
raise OpenFailed('%s is not a MTP device'%(connected_device,))
raise OpenFailed('Failed to open %s: Error: %s'%(
connected_device, as_unicode(e)))
except TypeError:
self.blacklisted_devices.add(connected_device)
raise OpenFailed('')
@ -309,9 +310,13 @@ if __name__ == '__main__':
from pprint import pprint
dev = MTP_DEVICE(None)
dev.startup()
from calibre.devices.scanner import linux_scanner
devs = linux_scanner()
from calibre.devices.scanner import DeviceScanner
scanner = DeviceScanner()
scanner.scan()
devs = scanner.devices
cd = dev.detect_managed_devices(devs)
if cd is None:
raise Exception('No MTP device found')
dev.open(cd, 'xxx')
d = dev.dev
print ("Opened device:", dev.get_gui_name())

View File

@ -212,22 +212,24 @@ libmtp_Device_dealloc(libmtp_Device* self)
static int
libmtp_Device_init(libmtp_Device *self, PyObject *args, PyObject *kwds)
{
int busnum, devnum, vendor_id, product_id;
uint32_t busnum;
uint8_t devnum;
uint16_t vendor_id, product_id;
PyObject *usb_serialnum;
char *vendor, *product, *friendly_name, *manufacturer_name, *model_name, *serial_number, *device_version;
LIBMTP_raw_device_t rawdev;
LIBMTP_mtpdevice_t *dev;
size_t i;
if (!PyArg_ParseTuple(args, "iiiissO", &busnum, &devnum, &vendor_id, &product_id, &vendor, &product, &usb_serialnum)) return -1;
if (!PyArg_ParseTuple(args, "IBHHssO", &busnum, &devnum, &vendor_id, &product_id, &vendor, &product, &usb_serialnum)) return -1;
if (devnum < 0 || devnum > 255 || busnum < 0) { PyErr_SetString(PyExc_TypeError, "Invalid busnum/devnum"); return -1; }
self->ids = Py_BuildValue("iiiiO", busnum, devnum, vendor_id, product_id, usb_serialnum);
self->ids = Py_BuildValue("IBHHO", busnum, devnum, vendor_id, product_id, usb_serialnum);
if (self->ids == NULL) return -1;
rawdev.bus_location = (uint32_t)busnum;
rawdev.devnum = (uint8_t)devnum;
rawdev.bus_location = busnum;
rawdev.devnum = devnum;
rawdev.device_entry.vendor = vendor;
rawdev.device_entry.product = product;
rawdev.device_entry.vendor_id = vendor_id;