<div dir="ltr"><div><div><div>Wait, hold that thought.  I made a silly mistake!  I was sending 0x555B, when it should be 0x555F.  Relevant part of the new transaction log:<br><br>Sent to modem 0x555F request <br><br>03 00 00 00 3D 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 D1 A3 0B C2 F9 7A 6E 43 BF 65 C7 E2 4F B0 F0 D3 01 00 00 00 01 00 00 00 0D 00 00 00 01 0C 00 00 02 14 00 01 00 5F 55 00 00<br><br>Response recieved from modem <br><br>03 00 00 80 44 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 D1 A3 0B C2 F9 7A 6E 43 BF 65 C7 E2 4F B0 F0 D3 01 00 00 00 00 00 00 00 14 00 00 00 01 13 00 80 02 14 02 01 00 5F 55 07 00 02 04 00 00 00 00 00<br><br><br></div>After this, it is necessary to reset the device (software detach and reattach via USB authorized flag worked fine).  Then, I am able to connect!  Finally!<br><br></div>I will clean up my code and make a utility available for anyone else having this problem.  Then I'll work on integrating it into libqmi to create a "MBIM layer" for QMI commands.<br><br></div>Collin<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 30, 2015 at 4:05 PM, Collin McMillan <span dir="ltr"><<a href="mailto:cmc@nd.edu" target="_blank">cmc@nd.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Continuing this thread... :-)<br><br></div>It turns out that I was not actually using the CID allocated during the CTL request.  That much was easy enough to fix.  The "03" at the CTL 0x0022 response needed to be in the DMS 0x555b request.  My complete transaction sequence is at the bottom.<br><br></div><div>The short version is that it *does* look like I can access the QMI-over-MBIM interface this way.  However, I am getting a weird reply on the 0x555b response.  The power state is still low after I do this.<br><br></div><div>The only major difference between Bjorn's sequence and mine is the 0x555b response.  His was:<span class=""><br><br>03 00 00 80 5d 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 d1 a3 0b c2 
f9 7a 6e 43 bf 65 c7 e2 4f b0 f0 d3 01 00 00 00 00 00 00 00 2d 00 00 00 
01 2c 00 80 02 34 02 06 00 5b 55 20 00 02 04 00 00 00 00 00 10 01 00 13 
11 12 00 11 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16<br><br></span></div><div>Mine was <br><br>03 00 00 80 56 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 D1 A3 0B C2 
F9 7A 6E 43 BF 65 C7 E2 4F B0 F0 D3 01 00 00 00 00 00 00 00 26 00 00 00 
01 25 00 80 02 03 02 06 00 5B 55 19 00 02 04 00 00 00 00 00 10 01 00 0E 
11 0B 00 0A 01 06 07 08 09 0A 0B 0C 0E 13<br><br></div><div>Without a QMI spec it is rather hard to decode this (why is it so hard to find btw), so I need to feed it through libqmi.  Unless there are any more clues here on the list?<br><br></div><div>I may also try to monitor the USB device in Windows, to see what is being sent to the device anyway.  I wonder if there is some other command that I am missing.  Or perhaps the drivers from Lenovo are locking the card somehow.<br></div><div><br></div><div><span class=""><br><br>MBIM OPEN <br>01 00 00 00 10 00 00 00 01 00 00 00 00 10 00 00<br><br>MBIM OPEN_DONE <br>01 00 00 80 10 00 00 00 01 00 00 00 00 00 00 00<br><br>CTL 0x0022 request <br>03 00 00 00 40 00 00 00 05 00 00 00 01 00 00 00 00 00 00 00 d1 a3 0b c2 f9 7a 6e 43 bf 65 c7 e2 4f b0 f0 d3 01 00 00 00 01 00 00 00 10 00 00 00 01 0f 00 00 00 00 00 04 22 00 04 00 01 01 00 02<br><br>CTL 0x0022 response <br></span>03 00 00 80 48 00 00 00 05 00 00 00 01 00 00 00 00 00 00 00 D1 A3 0B C2 F9 7A 6E 43 BF 65 C7 E2 4F B0 F0 D3 01 00 00 00 00 00 00 00 18 00 00 00 01 17 00 80 00 00 01 04 22 00 0C 00 02 04 00 00 00 00 00 01 02 00 02 03<br><br>DMS 0x555b request <br>03 00 00 00 3d 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 d1 a3 0b c2 f9 7a 6e 43 bf 65 c7 e2 4f b0 f0 d3 01 00 00 00 01 00 00 00 0d 00 00 00 01 0c 00 00 02 03 00 06 00 5b 55 00 00<br><br>DMS 0x555b response <br>03 00 00 80 56 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 D1 A3 0B C2 F9 7A 6E 43 BF 65 C7 E2 4F B0 F0 D3 01 00 00 00 00 00 00 00 26 00 00 00 01 25 00 80 02 03 02 06 00 5B 55 19 00 02 04 00 00 00 00 00 10 01 00 0E 11 0B 00 0A 01 06 07 08 09 0A 0B 0C 0E 13<br><br>CTL 0x0023 request <br>03 00 00 00 41 00 00 00 09 00 00 00 01 00 00 00 00 00 00 00 d1 a3 0b c2 f9 7a 6e 43 bf 65 c7 e2 4f b0 f0 d3 01 00 00 00 01 00 00 00 11 00 00 00 01 10 00 00 00 00 00 08 23 00 05 00 01 02 00 02 03<br><br>CTL 0x0023 response <br>03 00 00 80 48 00 00 00 09 00 00 00 01 00 00 00 00 00 00 00 D1 A3 0B C2 F9 7A 6E 43 BF 65 C7 E2 4F B0 F0 D3 01 00 00 00 00 00 00 00 18 00 00 00 01 17 00 80 00 00 01 08 23 00 0C 00 02 04 00 00 00 00 00 01 02 00 02 03<span class=""><br><br>MBIM CLOSE<br>02 00 00 00 0c 00 00 00 0a 00 00 00<br><br>MBIM CLOSE_DONE<br></span>02 00 00 80 10 00 00 00 0A 00 00 00 00 00 00 00<br><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Wed, Jul 29, 2015 at 4:54 PM, Bjørn Mork <span dir="ltr"><<a href="mailto:bjorn@mork.no" target="_blank">bjorn@mork.no</a>></span> wrote:<br></span><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>Collin McMillan <<a href="mailto:cmc@nd.edu" target="_blank">cmc@nd.edu</a>> writes:<br>
<br>
> Hi Folks<br>
><br>
> I have been continuing to look at this -- it's a really interesting problem<br>
> and library!  Before I dive into libqmi, I'm trying to make it work for a<br>
> specific case in libmbim.  I'm just trying to make a program that sends QMI<br>
> messages to the QMI-over-MBIM service.<br>
><br>
> If I understand correctly, all I need to do is send a message like this one:<br>
><br>
> 03 00 00 00 40 00 00 00 04 00 00 00 01 00 00 00 00 00 00 00 D1 A3 0B C2 F9<br>
> 7A 6E 43 BF 65 C7 E2 4F B0 F0 D3 01 00 00 00 01 00 00 00 10 00 00 00 01 0C<br>
> 00 00 02 01 00 01 00 5F 55 00 00 00 00 00<br>
><br>
> Checking the spec (<a href="http://caxapa.ru/thumbs/334029/MBIM_v1_0_USBIF_FINAL.pdf" rel="noreferrer" target="_blank">http://caxapa.ru/thumbs/334029/MBIM_v1_0_USBIF_FINAL.pdf</a>),<br>
> that means:<br>
><br>
> 03 00 00 00: MessageType, 3 for command, see table 9.1 in the above PDF<br>
> 40 00 00 00: MessageLength, 64 bytes<br>
> 04 00 00 00: TransactionID, libmbim picked this for me<br>
><br>
> 01 00 00 00 00 00 00 00: FragmentHeader (table 9.3)<br>
> D1 ... D3: 16 bytes for the service UUID<br>
> 01 00 00 00: CID, I believe this has to be 1 because 1 is the only CID<br>
> listed as possible on this service (see my output of mbimcli -d<br>
> /dev/cdc-wdm0 --query-device-services in an above email)<br>
> 01 00 00 00: 1 for a SET operation (table 9-6 in the spec PDF)<br>
> 10 00 00 00: InformationBufferLength, 16 bytes<br>
> 01 0C...end: InformationBuffer<br>
><br>
> Then InformationBuffer is the QMI message.  In this case, I sent:<br>
> 01 0C 00 00 02 01 00 01 00 5F 55 00 00<br>
><br>
> I got this from running:<br>
> qmicli -d /dev/cdc-wdm0 --dms-set-fcc-authentication -v --client-cid=1<br>
> This command fails, but it does output the raw data sent to the device,<br>
> using the verbose flag.<br>
><br>
><br>
> Anyway, what I have now is:<br>
> 1) A modified version of libmbim 1.12.2 that includes a new service called<br>
> QMIOVER.  I can send all the gory details, but essentially it is just a new<br>
> data/json service file, and several appropriate changes to libmbim e.g. to<br>
> mbim-cid.h/c and mbim-uuid.h/.c.<br>
><br>
>     //<br>
> *********************************************************************************<br>
>     { "type" : "Service",<br>
>       "name" : "QMI Over" },<br>
><br>
>   //<br>
> *********************************************************************************<br>
>   { "name"     : "qmi",<br>
>     "service"  : "QMIOver",<br>
>     "type"     : "Command",<br>
>     "set"    : [ { "name"       : "QmiMsg",<br>
>                      "format"     : "byte-array",<br>
>                      "array-size" : "16" } ],<br>
>     "response" : [ { "name"       : "QMUX",<br>
>                      "format"     : "byte-array",<br>
>                      "array-size" : "65" } ] }<br>
><br>
><br>
> 2) A pretty ugly stripped down version of mbimcli, that just opens the<br>
> device, tries to send a QMI allocate CID message, then the FCC message, and<br>
> the closes the device.  Here's the relevant output of that program (same a<br>
> mbimcli's verbose output):<br>
><br>
> [29 Jul 2015, 16:06:01] -Error ** mbim_cid_get_printable: assertion<br>
> 'service > MBIM_SERVICE_INVALID' failed<br>
> [29 Jul 2015, 16:06:01] [Debug] [/dev/cdc-wdm0] Received message<br>
> (translated)...<br>
>>>>>>> Header:<br>
>>>>>>>   length      = 72<br>
>>>>>>>   type        = command-done (0x80000003)<br>
>>>>>>>   transaction = 3<br>
>>>>>>> Fragment header:<br>
>>>>>>>   total   = 1<br>
>>>>>>>   current = 0<br>
>>>>>>> Contents:<br>
>>>>>>>   status error = 'None' (0x00000000)<br>
>>>>>>>   service      = 'invalid' (d1a30bc2-f97a-6e43-bf65-c7e24fb0f0d3)<br>
>>>>>>>   cid          = '(null)' (0x00000001)<br>
><br>
> [29 Jul 2015, 16:06:01] [Debug] Asynchronously sending QMI test message...<br>
> [29 Jul 2015, 16:06:01] [Debug] [/dev/cdc-wdm0] Sent message...<br>
> <<<<<< RAW:<br>
> <<<<<<   length = 64<br>
> <<<<<<   data   =<br>
> 03:00:00:00:40:00:00:00:04:00:00:00:01:00:00:00:00:00:00:00:D1:A3:0B:C2:F9:7A:6E:43:BF:65:C7:E2:4F:B0:F0:D3:01:00:00:00:01:00:00:00:10:00:00:00:01:0C:00:00:02:01:00:01:00:5F:55:00:00:00:00:00<br>
><br>
> [29 Jul 2015, 16:06:01] -Error ** mbim_cid_get_printable: assertion<br>
> 'service > MBIM_SERVICE_INVALID' failed<br>
> [29 Jul 2015, 16:06:01] [Debug] [/dev/cdc-wdm0] Sent message (translated)...<br>
> <<<<<< Header:<br>
> <<<<<<   length      = 64<br>
> <<<<<<   type        = command (0x00000003)<br>
> <<<<<<   transaction = 4<br>
> <<<<<< Fragment header:<br>
> <<<<<<   total   = 1<br>
> <<<<<<   current = 0<br>
> <<<<<< Contents:<br>
> <<<<<<   service = 'invalid' (d1a30bc2-f97a-6e43-bf65-c7e24fb0f0d3)<br>
> <<<<<<   cid     = '(null)' (0x00000001)<br>
> <<<<<<   type    = 'set' (0x00000001)<br>
><br>
> [29 Jul 2015, 16:06:01] [Debug] [/dev/cdc-wdm0] Received message...<br>
>>>>>>> RAW:<br>
>>>>>>>   length = 48<br>
>>>>>>>   data   =<br>
> 03:00:00:80:30:00:00:00:04:00:00:00:01:00:00:00:00:00:00:00:D1:A3:0B:C2:F9:7A:6E:43:BF:65:C7:E2:4F:B0:F0:D3:01:00:00:00:02:00:00:00:00:00:00:00<br>
><br>
> [29 Jul 2015, 16:06:01] -Error ** mbim_cid_get_printable: assertion<br>
> 'service > MBIM_SERVICE_INVALID' failed<br>
> [29 Jul 2015, 16:06:01] [Debug] [/dev/cdc-wdm0] Received message<br>
> (translated)...<br>
>>>>>>> Header:<br>
>>>>>>>   length      = 48<br>
>>>>>>>   type        = command-done (0x80000003)<br>
>>>>>>>   transaction = 4<br>
>>>>>>> Fragment header:<br>
>>>>>>>   total   = 1<br>
>>>>>>>   current = 0<br>
>>>>>>> Contents:<br>
>>>>>>>   status error = 'Failure' (0x00000002)<br>
>>>>>>>   service      = 'invalid' (d1a30bc2-f97a-6e43-bf65-c7e24fb0f0d3)<br>
>>>>>>>   cid          = '(null)' (0x00000001)<br>
><br>
> (BTW, I am not sure why the mbim_cid_get_printable function gives an error<br>
> here -- I have added the service macros, etc., everywhere I can find)<br>
><br>
> Yes, this is a serious hack job at this point, but I am wondering if you<br>
> could tell me if I'm on the right track here. :-)  It seems that I *can*<br>
> communicate with the QMI interface, but that the FCC message is failing for<br>
> some reason.  It could be that I am allocating the CID improperly, or that<br>
> the FCC message is improperly formatted, or that I am missing some other<br>
> step.<br>
><br>
> Once I wrap my mind completely around the problem, I'm going take your<br>
> suggestion and combine it with libqmi.  Then, modify qmicli so that I can<br>
> run arbitrary QMI commands over MBIM.<br>
><br>
><br>
> Thanks again!<br>
<br>
</div></div>The above looks basically fine to me.  I cannot see any obvious reason<br>
why it fails.  But it's an MBIM failure, so I don't think it's related<br>
to the actual QMI message.  There's probably some weird formatting<br>
thing missing.<br>
<br>
I do notice that you send a 16 byte InfoBuffer with a zero-padded 13<br>
byte QMI message.  Maybe that doesn't work?<br>
<br>
FWIW, here's a transaction sequence I used when I briefly tested this a<br>
month ago.  As you can see, I used the exact QMI message length for the<br>
MBIM InfoBuffer:<br>
<br>
<br>
MBIM OPEN:<br>
01 00 00 00 10 00 00 00 01 00 00 00 00 10 00 00<br>
<br>
MBIM OPEN_DONE:<br>
01 00 00 80 10 00 00 00 01 00 00 00 00 00 00 00<br>
<br>
CTL 0x0022 request:<br>
03 00 00 00 40 00 00 00 05 00 00 00 01 00 00 00 00 00 00 00 d1 a3 0b c2 f9 7a 6e 43 bf 65 c7 e2 4f b0 f0 d3 01 00 00 00 01 00 00 00 10 00 00 00 01 0f 00 00 00 00 00 04 22 00 04 00 01 01 00 02<br>
<br>
CTL 0x0022 response:<br>
03 00 00 80 48 00 00 00 05 00 00 00 01 00 00 00 00 00 00 00 d1 a3 0b c2 f9 7a 6e 43 bf 65 c7 e2 4f b0 f0 d3 01 00 00 00 00 00 00 00 18 00 00 00 01 17 00 80 00 00 01 04 22 00 0c 00 02 04 00 00 00 00 00 01 02 00 02 34<br>
<br>
DMS 0x555b request:<br>
03 00 00 00 3d 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 d1 a3 0b c2 f9 7a 6e 43 bf 65 c7 e2 4f b0 f0 d3 01 00 00 00 01 00 00 00 0d 00 00 00 01 0c 00 00 02 34 00 06 00 5b 55 00 00<br>
<br>
DMS 0x555b response:<br>
03 00 00 80 5d 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 d1 a3 0b c2 f9 7a 6e 43 bf 65 c7 e2 4f b0 f0 d3 01 00 00 00 00 00 00 00 2d 00 00 00 01 2c 00 80 02 34 02 06 00 5b 55 20 00 02 04 00 00 00 00 00 10 01 00 13 11 12 00 11 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16<br>
<br>
CTL 0x0023 request:<br>
03 00 00 00 41 00 00 00 09 00 00 00 01 00 00 00 00 00 00 00 d1 a3 0b c2 f9 7a 6e 43 bf 65 c7 e2 4f b0 f0 d3 01 00 00 00 01 00 00 00 11 00 00 00 01 10 00 00 00 00 00 08 23 00 05 00 01 02 00 02 34<br>
<br>
CTL 0x0023 response:<br>
03 00 00 80 48 00 00 00 09 00 00 00 01 00 00 00 00 00 00 00 d1 a3 0b c2 f9 7a 6e 43 bf 65 c7 e2 4f b0 f0 d3 01 00 00 00 00 00 00 00 18 00 00 00 01 17 00 80 00 00 01 08 23 00 0c 00 02 04 00 00 00 00 00 01 02 00 02 34<br>
<br>
MBIM CLOSE<br>
02 00 00 00 0c 00 00 00 0a 00 00 00<br>
<br>
MBIM CLOSE_DONE<br>
02 00 00 80 10 00 00 00 0a 00 00 00 00 00 00 00<br>
<span><font color="#888888"><br>
<br>
<br>
Bjørn<br>
</font></span><div><div>_______________________________________________<br>
libmbim-devel mailing list<br>
<a href="mailto:libmbim-devel@lists.freedesktop.org" target="_blank">libmbim-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/libmbim-devel" rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/libmbim-devel</a><br>
</div></div></blockquote></div></div></div><br></div>
</blockquote></div><br></div>