iPhone 4(S) access via gphoto2

Alexey Dokuchaev danfe at nsu.ru
Sun Oct 13 08:22:12 UTC 2013


On Sun, Oct 13, 2013 at 08:50:53AM +0200, Hans Petter Selasky wrote:
> iPhones sometimes have multiple configurations.
> 
> usbconfig -d X.Y dump_device_desc

Dumping desc produced almost identical files (the only differences were in
idProduct and iSerialNumber, quite expectedly).

> usbconfig -d X.Y set_config 1
> usbconfig -d X.Y set_config 2
> usbconfig -d X.Y set_config 3

I presume I do not need to re-plug or otherwise re-init the phone after
setting config, correct?  (It seems I don't, asking just to make sure.)

> PTP might not always be available from the first configuration.

I've tried to play with set_config, but without much luck.  However, I did
dump_all_config_desc to discover that config index 2 (the one that is "PTP
+ Apple Mobile Device", with bInterfaceClass = 0x0006) is missing from the
output for the "bad" iPhone (diff attached).

Why is it missing?  Is there any way to force/inject it into the stack?

./danfe
-------------- next part --------------
--- ok.all_config	2013-10-13 15:34:36.000000000 +0800
+++ bad.all_config	2013-10-13 15:35:04.000000000 +0800
@@ -203,92 +203,6 @@
 
 
 
- Configuration index 2
-
-    bLength = 0x0009 
-    bDescriptorType = 0x0002 
-    wTotalLength = 0x003e 
-    bNumInterfaces = 0x0002 
-    bConfigurationValue = 0x0003 
-    iConfiguration = 0x0007  <PTP + Apple Mobile Device>
-    bmAttributes = 0x00c0 
-    bMaxPower = 0x00fa 
-
-    Interface 0
-      bLength = 0x0009 
-      bDescriptorType = 0x0004 
-      bInterfaceNumber = 0x0000 
-      bAlternateSetting = 0x0000 
-      bNumEndpoints = 0x0003 
-      bInterfaceClass = 0x0006 
-      bInterfaceSubClass = 0x0001 
-      bInterfaceProtocol = 0x0001 
-      iInterface = 0x0000  <no string>
-
-     Endpoint 0
-        bLength = 0x0007 
-        bDescriptorType = 0x0005 
-        bEndpointAddress = 0x0002  <OUT>
-        bmAttributes = 0x0002  <BULK>
-        wMaxPacketSize = 0x0200 
-        bInterval = 0x000a 
-        bRefresh = 0x0000 
-        bSynchAddress = 0x0000 
-
-     Endpoint 1
-        bLength = 0x0007 
-        bDescriptorType = 0x0005 
-        bEndpointAddress = 0x0081  <IN>
-        bmAttributes = 0x0002  <BULK>
-        wMaxPacketSize = 0x0200 
-        bInterval = 0x000a 
-        bRefresh = 0x0000 
-        bSynchAddress = 0x0000 
-
-     Endpoint 2
-        bLength = 0x0007 
-        bDescriptorType = 0x0005 
-        bEndpointAddress = 0x0083  <IN>
-        bmAttributes = 0x0003  <INTERRUPT>
-        wMaxPacketSize = 0x0040 
-        bInterval = 0x000a 
-        bRefresh = 0x0000 
-        bSynchAddress = 0x0000 
-
-
-    Interface 1
-      bLength = 0x0009 
-      bDescriptorType = 0x0004 
-      bInterfaceNumber = 0x0001 
-      bAlternateSetting = 0x0000 
-      bNumEndpoints = 0x0002 
-      bInterfaceClass = 0x00ff 
-      bInterfaceSubClass = 0x00fe 
-      bInterfaceProtocol = 0x0002 
-      iInterface = 0x0000  <no string>
-
-     Endpoint 0
-        bLength = 0x0007 
-        bDescriptorType = 0x0005 
-        bEndpointAddress = 0x0004  <OUT>
-        bmAttributes = 0x0002  <BULK>
-        wMaxPacketSize = 0x0200 
-        bInterval = 0x0000 
-        bRefresh = 0x0000 
-        bSynchAddress = 0x0000 
-
-     Endpoint 1
-        bLength = 0x0007 
-        bDescriptorType = 0x0005 
-        bEndpointAddress = 0x0085  <IN>
-        bmAttributes = 0x0002  <BULK>
-        wMaxPacketSize = 0x0200 
-        bInterval = 0x0000 
-        bRefresh = 0x0000 
-        bSynchAddress = 0x0000 
-
-
-
  Configuration index 3
 
     bLength = 0x0009 


More information about the freebsd-usb mailing list