I have just tried the virtual port, it is working fine for my Ubuntu 18 to output NMEA frame in virtual port:
- sudo apt-get install libmbim-utils
- make sure MBIM port is enabled in AT!USBCOMP?
- connect antenna to AUX antenna port
- power on the EM9191 with FW SWIX55C_03.09.11.00
- Make sure GPSENABLE has been enabled in AT!CUSTOM?
- type AT!GPSAUTOSTART=1
- kernel log should show the following:
[ 355.731518] usb 3-2.1: Product: Sierra Wireless EM9191
[ 355.731519] usb 3-2.1: Manufacturer: Sierra Wireless, Incorporated
[ 355.731520] usb 3-2.1: SerialNumber: 7821475120012345
[ 355.842587] usbcore: registered new interface driver cdc_ncm
[ 355.844384] usbcore: registered new interface driver cdc_wdm
[ 355.975016] cdc_mbim 3-2.1:1.0: setting rx_max = 16384
[ 356.012935] usbcore: registered new interface driver usbserial
[ 356.013726] usbcore: registered new interface driver usbserial_generic
[ 356.013811] usbserial: USB Serial support registered for generic
[ 356.017132] usb_wwan: loading out-of-tree module taints kernel.
[ 356.017170] usb_wwan: module verification failed: signature and/or required key missing - tainting kernel
[ 356.020363] usbcore: registered new interface driver qcserial
[ 356.021087] usbserial: USB Serial support registered for Qualcomm USB modem
[ 356.021156] usbserial: USB Serial support registered for Qualcomm USB modem
[ 356.023816] cdc_mbim 3-2.1:1.0: cdc-wdm0: USB WDM device
[ 356.024230] cdc_mbim 3-2.1:1.0 wwan0: register 'cdc_mbim' at usb-0000:03:00.0-2.1, CDC MBIM, 5a:49:43:0c:a8:d1
[ 356.025267] usbcore: registered new interface driver cdc_mbim
[ 356.026301] qcserial 3-2.1:1.3: Qualcomm USB modem converter detected
[ 356.026444] usb 3-2.1: Qualcomm USB modem converter now attached to ttyUSB0
[ 356.030435] qcserial 3-2.1:1.4: Qualcomm USB modem converter detected
[ 356.030631] usb 3-2.1: Qualcomm USB modem converter now attached to ttyUSB1
- Get the CID
owner@ubuntu:~/Downloads$ sudo qmicli -p --device=/dev/cdc-wdm0 --loc-start --client-no-release-cid --loc-session-id=53
[sudo] password for owner:
[/dev/cdc-wdm0] Successfully started location tracking (session id 53)
[/dev/cdc-wdm0] Client ID not released:
Service: 'loc'
CID: '4'
- Put the CID in the following command and NMEA frame should be coming out.
owner@ubuntu:~/Downloads$ sudo qmicli -p --device=/dev/cdc-wdm0 --loc-follow-nmea --client-cid=4 --client-no-release-cid --loc-session-id=53
$GPGSV,1,1,03,30,26,203,13,07,10,178,,08,,,,1*63
$GQGSV,1,1,02,02,56,143,24,04,,,28,1*58
$GBGSV,2,1,08,01,47,122,,02,45,234,,03,63,188,,04,33,108,,1*72
$GBGSV,2,2,08,22,30,125,,24,44,286,,25,,,,26,50,209,,1*4C
$GAGSV,1,1,01,21,,,27,7*74
$GNDTM,P90,,,N,,W,,W84*4F
$GPGGA,034719.00,,,,,0,,,,,,,,*40
$GBGGA,034719.00,,,,,0,,,,,,,,*52
$GNGGA,034719.00,,,,,0,,,,,,,,*5E
$GNGNS,034719.00,,,,,NNN,,,,,,,V*41
$GBVTG,,T,,M,,N,,K,N*3E
$GNVTG,,T,,M,,N,,K,N*32
$GPRMC,,V,,,,,,,,,,N,V*29
$GBRMC,,V,,,,,,,,,,N,V*3B
$GNRMC,,V,,,,,,,,,,N*4D
$GBGSA,A,1,,,,,,,,,,,,,,,,*20
$GNGSA,A,1,,,,,,,,,,,,,,,,*2C
$GPGSV,1,1,03,30,26,203,13,07,10,178,,08,,,,1*63
$GQGSV,1,1,02,02,56,143,23,04,,,30,1*56
$GBGSV,2,1,08,01,47,122,,02,45,234,,03,63,188,,04,33,108,,1*72
$GBGSV,2,2,08,22,30,125,,24,44,286,,25,,,,26,50,209,,1*4C
$GAGSV,1,1,01,21,,,27,7*74
$GNDTM,P90,,,N,,W,,W84*4F
$GPGGA,034720.00,,,,,0,,,,,,,,*4A
$GBGGA,034720.00,,,,,0,,,,,,,,*58
$GNGGA,034720.00,,,,,0,,,,,,,,*54
$GNGNS,034720.00,,,,,NNN,,,,,,,V*4B
$GBVTG,,T,,M,,N,,K,N*3E
$GNVTG,,T,,M,,N,,K,N*32
$GPRMC,,V,,,,,,,,,,N,V*29
$GBRMC,,V,,,,,,,,,,N,V*3B
$GNRMC,,V,,,,,,,,,,N*4D
$GBGSA,A,1,,,,,,,,,,,,,,,,*20
$GNGSA,A,1,,,,,,,,,,,,,,,,*2C
^Ccancelling the operation...
[/dev/cdc-wdm0] Client ID not released:
Service: 'loc'
CID: '4'
- install socat by “sudo apt-get install socat”
- sudo socat -d -d PTY,raw,echo=0,link=/dev/ttyVA00 PTY,raw,echo=0,link=/dev/ttyVB00
- now /dev/pts/1 and /dev/pts/2 should be generated
- sudo chmod 777 /dev/pts/1
- sudo chmod 777 /dev/pts/2
- to make sure these virtual ports work, you can use minicom to open these two ports and type some characters to verify
- use minicom to open /dev/pts/2
- sudo qmicli -p --device=/dev/cdc-wdm0 --loc-follow-nmea --client-cid=4 --client-no-release-cid --loc-session-id=53 > /dev/pts/1
- now the port /dev/pts/2 in minicom should output NMEA frame