<div>Hello again!</div><div> </div><div>I am still researching EC25 mdm9607 based modem and looking for some way to send qmi command directly via AF_MSM_IPC socket.</div><div> </div><div>Using some code and info from <a href="https://github.com/Biktorgj/meta-qcom/blob/honister/recipes-modem/openqti/files/src/ipc.c" rel="noopener noreferrer" target="_blank">https://github.com/Biktorgj/meta-qcom/blob/honister/recipes-modem/openqti/files/src/ipc.c</a></div><div>I can open AF_MSM_IPC socket and look for avalible services there:</div><div> <div>lookup test</div><div>service 1 instance 1 node_id 3 port_id 33 resolve 'Wireless Data Service'</div><div>service 2 instance 1 node_id 3 port_id 47 resolve 'Device Management Service'</div><div>service 3 instance 1 node_id 3 port_id 29 resolve 'Network Access Service'</div><div>service 4 instance 1 node_id 3 port_id 34 resolve 'Quality Of Service service'</div><div>service 5 instance 1 node_id 3 port_id 41 resolve 'Wireless Messaging Service'</div><div>service 7 instance 1 node_id 3 port_id 36 resolve 'Authentication service'</div><div>service 8 instance 1 node_id 3 port_id 37 resolve 'AT service'</div><div>service 11 instance 1 node_id 3 port_id 39 resolve 'User Identity Module service'</div><div>service 12 instance 1 node_id 3 port_id 30 resolve 'Phonebook Management service'</div><div>service 15 instance 1 node_id 3 port_id 4 resolve 'Test service'</div><div>service 17 instance 1 node_id 3 port_id 12 resolve 'Specific absorption rate service'</div><div>service 22 instance 1 node_id 3 port_id 8 resolve 'Time service'</div><div>service 23 instance 1 node_id 3 port_id 7 resolve 'Thermal sensors service'</div><div>service 24 instance 1 node_id 3 port_id 6 resolve 'Thermal mitigation device service'</div><div>service 25 instance 1 node_id 3 port_id 32 resolve 'Service access proxy service'</div><div>service 26 instance 1 node_id 3 port_id 35 resolve 'Wireless data administrative service'</div><div>service 29 instance 1 node_id 3 port_id 38 resolve 'Circuit switched videotelephony service'</div><div>service 34 instance 1 node_id 3 port_id 13 resolve 'Coexistence service'</div><div>service 36 instance 1 node_id 3 port_id 9 resolve 'Persistent device configuration service'</div><div>service 41 instance 257 node_id 3 port_id 10 resolve 'RF radiated performance enhancement service'</div><div>service 42 instance 1 node_id 3 port_id 46 resolve 'Data system determination service'</div><div>service 45 instance 1 node_id 3 port_id 26 resolve 'unknown'</div><div>service 47 instance 1 node_id 3 port_id 31 resolve 'Data Port Mapper service'</div><div>service 48 instance 1 node_id 3 port_id 48 resolve 'unknown'</div><div>service 50 instance 1 node_id 3 port_id 27 resolve 'unknown'</div><div>service 54 instance 1 node_id 3 port_id 11 resolve 'unknown'</div><div>service 55 instance 513 node_id 3 port_id 25 resolve 'unknown'</div><div>service 227 instance 1 node_id 3 port_id 5 resolve 'unknown'</div><div>service 228 instance 1 node_id 3 port_id 14 resolve 'unknown'</div><div> </div><div>I also made several experiments and for example I can send Get Time query to DMS directly via node_id 3 port_id 47</div><div><div> </div><div><<<<<< RAW:</div><div><<<<<<   length = 13</div><div><<<<<<   data   = 01:0C:00:00:02:01:00:01:00:2F:00:00:00</div><div> </div><div>[01 Jan 1970, 02:52:36] [Debug] [/dev/smdcntl0] Sent generic request (translated)...</div><div><<<<<< QMUX:</div><div><<<<<<   length  = 12</div><div><<<<<<   flags   = 0x00</div><div><<<<<<   service = "dms"</div><div><<<<<<   client  = 1</div><div><<<<<< QMI:</div><div><<<<<<   flags       = "none"</div><div><<<<<<   transaction = 1</div><div><<<<<<   tlv_length  = 0</div><div><<<<<<   message     = "Get Time" (0x002F)</div><div> </div></div><div>But in order to get proper answer I have to delete first 6 bytes (01:0C:00:00:02:01) - QMUX header.</div><div>So seems CID is not handled by the service itself (as qmicli always query CID before any query).</div><div>Here I don't understand the overall conception of QMI routing, CID and other things.</div><div> </div><div><div>Sending message 7 bytes</div><div>buffer[7]: 00:01:00:2f:00:00:00:</div><div>sendto() 7</div><div>recv() got 47 bytes</div><div>buffer[47]: 02:01:00:2f:00:28:00:02:04:00:00:00:00:00:01:08:00:2d:a4:db:b8:f6:00:00:00:10:08:00:39:8d:12:67:34:01:00:00:11:08:00:6c:14:9e:00:00:00:00:00:</div><div> </div></div></div><div>First I thought to add some feature to libqmi in order to send qmi directly via AF_MSM, but now it seems too complicated (moreover I am not familiar with libglib2).</div><div>Now think that some proxy app that expose serial port (like socat) and send queries to socket will be ok.</div><div>I didn't manage tune qmuxd to work directly with AF_MSM, only with /dev/smdcntl0 and it not exposed after system startup.</div><div><br /><div><div>The idea is to send several qmi queries to Data Port Mapper service in order to expose dev/smdcntl0 and rmnet_dataX.</div></div><div>After I can use qmicli (or even ModemManager) ordinary way and avoid any qualcomm proprietary sw stack.</div><div> </div><div>Maybe somebody can somehow comment on this?</div></div><div>-- </div><div>Nikita Orlov</div><div>Skype: nik_stet</div><div>QQ: 2717846083</div><div> </div>