Access GPS data from an IOx App via serial interface on IR1101

One can access GPS data from an IOx App running on IR1101 via serial port. Below are the steps and an example of app reading GPS data.

IOS GPS Configuration

Before one can start using GPS service, one needs to configure IOS to start streaming the GPS NMEA data. Following steps use cellular unit 0/1/0 as example where the unit argument identifies the router slot, module slot, and the port, and is separated by slashes (0/1/0).

Enable GPS and NMEA data streaming.

Router#config t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#controller cellular 0/1/0
Router(config-controller)#lte gps enable
Warning: [Cellular0/1/0]: GPS Feature enabled.
Please issue a modem reset/power-cycle or router-reload for the configuration change to take effect
Router(config-controller)#lte gps mode standalone
Warning: [Cellular0/1/0]: Please ensure NMEA is enabled in order to get all satellite and GPS location information!
Info: [Cellular0/1/0]: GPS mode selected successfully
Warning: Please issue a modem reset/power-cycle or router-reload for the configuration  change to take effect
Router(config-controller)#lte gps nmea 
[Cellular0/1/0]: NMEA streaming engine switched ON
Router(config-controller)#service internal
Router(config)#end

Power cycle modem for GPS to take effect

Router#test cellular 0/1/0 modem-power-cycle 
[Cellular0/1/0]: NMEA streaming engine switched OFF
Modem Power cycled successfully
Router#
[Cellular0/1/0]: NMEA streaming engine switched ON

One can check GPS details after modem is reset

Router#show cellular 0/1/0 gps detail
GPS Feature =  enabled
GPS Mode Configured =  standalone
GPS Port Selected =  Dedicated GPS port
GPS Status =  GPS coordinates acquired
Last Location Fix Error =  Offline [0x0]
Latitude =  37 Deg 25 Min 5.1840 Sec North
Longitude =  121 Deg 55 Min 8.5088 Sec West
Timestamp (GMT) =  Thu Mar 25 21:38:05 2021

Fix type index =  0, Height =  14 m
HDOP =  0.6, GPS Mode Used =  standalone

Satellite Info
----------------
Satellite #1, elevation 6, azimuth 33, SNR 41  
Satellite #2, elevation 13, azimuth 181, SNR 40  
Satellite #6, elevation 35, azimuth 150, SNR 44  
Satellite #12, elevation 12, azimuth 284, SNR 45  
Satellite #13, elevation 24, azimuth 215, SNR 48  
Satellite #14, elevation 32, azimuth 77, SNR 44  
Satellite #15, elevation 20, azimuth 251, SNR 42  
Satellite #17, elevation 57, azimuth 39, SNR 47  
Satellite #19, elevation 84, azimuth 8, SNR 50  
Satellite #24, elevation 41, azimuth 306, SNR 50  
Satellite #28, elevation 38, azimuth 70, SNR 46  
Satellite #30, elevation 14, azimuth 142, SNR 35  
Satellite #46, elevation 0, azimuth 0, SNR 44  **
Satellite #51, elevation 0, azimuth 0, SNR 46  **
Satellite #78, elevation 49, azimuth 94, SNR 47  
Satellite #70, elevation 5, azimuth 309, SNR 30  
Satellite #82, elevation 25, azimuth 195, SNR 47  
Satellite #77, elevation 2, azimuth 120, SNR 21  
Satellite #80, elevation 7, azimuth 313, SNR 38  
Satellite #79, elevation 57, azimuth 347, SNR 49  
Satellite #69, elevation 2, azimuth 255, SNR 45  
Satellite #88, elevation 41, azimuth 36, SNR 48  
Satellite #87, elevation 4, azimuth 25, SNR 33  
Satellite #81, elevation 74, azimuth 156, SNR 49  
Router#

IOx App Configuration

Enable IOx

Router#config t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#iox
Router(config)#ip http server
Router(config)#ip http secure-server
Router(config)#username cisco privilege 15 password 0 cisco
 WARNING: Command has been added to the configuration using a type 0 password. However, recommended to migrate to strong type-6 encryption
Router(config)#end

Configure App Networking

Router#config t             
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#app-hosting appid gps
Router(config-app-hosting)#app-vnic gateway0 virtualportgroup 0 guest-interface 0     
Router(config-app-hosting-gateway0)#guest-ipaddress 192.168.0.6 netmask 255.255.255.0 
Router(config-app-hosting-gateway0)#app-default-gateway 192.168.0.1 guest-interface 0 
Router(config-app-hosting)#app-resource docker
Router(config-app-hosting-docker)#run-opts 1 "--entrypoint '/bin/sleep 10000' --device /dev/ttyNMEA0:/dev/ttyNMEA0" 
Router(config-app-hosting-docker)#end

Router#config t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#interface Cellular0/1/0
Router(config-if)#ip address negotiated
Router(config-if)#ip tcp adjust-mss 1460
Router(config-if)#load-interval 30      
Router(config-if)#dialer in-band
Router(config-if)#dialer idle-timeout 0
Router(config-if)#dialer watch-group 30
Router(config-if)#dialer-group 1
Router(config-if)#ipv6 enable
Router(config-if)#pulse-time 1
Router(config-if)#end
Router#config t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#interface VirtualPortGroup0
Router(config-if)#ip address 192.168.0.1 255.255.255.0
Router(config-if)#end

Test App to read GPS data

Install and start App

Router#app-hosting install appid gps package bootflash:gps_test_read.tar.gz
Installing package 'bootflash:gps_test_read.tar.gz' for 'gps'. Use 'show app-hosting list' for progress.

Router#show app-hosting list
App id                                   State
---------------------------------------------------------
gps                                      DEPLOYED


Router#app-hosting activate appid gps
gps activated successfully
Current state is: ACTIVATED

Router#app-hosting start appid gps
gps started successfully
Current state is: RUNNING

Check GPS coordinates in the App

Router#app-hosting connect appid gps session
/usr/share/gpsserviceapp # cat /dev/ttyNMEA0
$GNGNS,,,,,,NNN,,,,,,*1D
$GPVTG,,T,,M,,N,,K,N*2C
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GNGSA,A,1,,,,,,,,,,,,,,,*00
$GPGGA,,,,,,0,,,,,,,,*66
$GPRMC,,V,,,,,,,,,,N*53
$GLGSV,3,1,10,78,50.6,91.4,,70,6.3,312.2,,82,23.2,195.5,,77,3.5,119.5,*5D
$GLGSV,3,2,10,80,6.3,312.2,,79,54.8,344.5,,69,4.2,257.3,,88,42.9,38.0,*55
$GLGSV,3,3,10,81,71.7,158.9,,71,,,*5F
$GPGSV,4,1,16,19,86.5,338.9,46.7,01,7.7,35.2,,02,12.7,182.8,,03,,,*51
$GPGSV,4,2,16,05,,,,06,33.8,150.5,,07,,,,10,,,*44
$GPGSV,4,3,16,12,12.0,282.7,,13,26.7,215.2,,14,33.8,75.9,,15,21.8,253.1,*4F
$GPGSV,4,4,16,17,59.8,39.4,,21,,,,22,,,,23,,,*70
$GNGNS,,,,,,NNN,,,,,,*1D
$GPVTG,,T,,M,,N,,K,N*2C
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GNGSA,A,1,,,,,,,,,,,,,,,*00
$GPGGA,,,,,,0,,,,,,,,*66
$GPRMC,,V,,,,,,,,,,N*53
$GLGSV,3,1,10,79,54.8,344.5,46.2,81,71.7,158.9,46.0,78,50.6,91.4,,70,6.3,312.2,*68
$GLGSV,3,2,10,82,23.2,195.5,,77,3.5,119.5,,80,6.3,312.2,,69,4.2,257.3,*5B
$GLGSV,3,3,10,88,42.9,38.0,,71,,,*66
$GPGSV,4,1,16,06,33.8,150.5,39.1,17,59.8,39.4,46.7,19,86.5,338.9,49.9,24,39.4,308.0,44.8*4B
$GPGSV,4,2,16,28,39.4,68.9,46.3,01,7.7,35.2,,02,12.7,182.8,,03,,,*67
$GPGSV,4,3,16,05,,,,07,,,,10,,,,12,12.0,282.7,*45
$GPGSV,4,4,16,13,26.7,215.2,,14,33.8,75.9,,21,,,,22,,,*4E
$GNGNS,,,,,,NNN,,,,,,*1D
$GPVTG,,T,,M,,N,,K,N*2C
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GNGSA,A,1,,,,,,,,,,,,,,,*00
$GPGGA,,,,,,0,,,,,,,,*66
$GPRMC,,V,,,,,,,,,,N*53
$GLGSV,3,1,10,78,50.6,91.4,43.3,79,54.8,344.5,48.9,88,42.9,38.0,47.6,81,71.7,158.9,48.3*65
$GLGSV,3,2,10,70,6.3,312.2,,82,23.2,195.5,,77,3.5,119.5,,80,6.3,312.2,*51
$GLGSV,3,3,10,69,4.2,257.3,,71,,,*68
$GPGSV,4,1,16,06,33.8,150.5,39.7,13,26.7,215.2,43.6,14,33.8,75.9,44.4,15,21.8,253.1,45.7*43
$GPGSV,4,2,16,17,59.8,39.4,47.9,19,86.5,338.9,50.2,24,39.4,308.0,47.6,28,39.4,68.9,48.8*7A
$GPGSV,4,3,16,01,7.7,35.2,,03,,,,05,,,,07,,,*4D
$GPGSV,4,4,16,10,,,,21,,,,22,,,,23,,,*7D
$GNGNS,,,,,,NNN,,,,,,*1D
$GPVTG,,T,,M,,N,,K,N*2C
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GNGSA,A,1,,,,,,,,,,,,,,,*00
$GPGGA,,,,,,0,,,,,,,,*66
$GPRMC,,V,,,,,,,,,,N*53
$GLGSV,3,1,10,78,50.6,91.4,47.1,82,23.2,195.5,43.2,79,54.8,344.5,49.4,88,42.9,38.0,49.7*66
$GLGSV,3,2,10,81,71.7,158.9,48.6,70,6.3,312.2,,77,3.5,119.5,,80,6.3,312.2,*49
$GLGSV,3,3,10,69,4.2,257.3,,71,,,*68
$GPGSV,4,1,16,01,7.7,35.2,45.2,06,33.8,150.5,40.1,12,12.0,282.7,39.4,13,26.7,215.2,45.7*75
$GPGSV,4,2,16,14,33.8,75.9,47.0,15,21.8,253.1,46.3,17,59.8,39.4,47.2,19,86.5,338.9,49.9*7D
$GPGSV,4,3,16,24,39.4,308.0,47.4,28,39.4,68.9,49.0,05,,,,07,,,*41
$GPGSV,4,4,16,10,,,,21,,,,23,,,,25,,,*7A
$GNGNS,,,,,,NNN,,,,,,*1D
$GPVTG,,T,,M,,N,,K,N*2C
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GNGSA,A,1,,,,,,,,,,,,,,,*00
$GPGGA,,,,,,0,,,,,,,,*66
$GPRMC,,V,,,,,,,,,,N*53
$GLGSV,3,1,11,78,50.6,91.4,45.8,82,23.2,195.5,45.3,79,54.8,344.5,48.6,88,42.9,38.0,50.2*65
$GLGSV,3,2,11,87,6.3,25.3,43.8,81,71.7,158.9,47.8,70,6.3,312.2,,77,3.5,119.5,*69
$GLGSV,3,3,11,80,6.3,312.2,,69,4.2,257.3,,71,,,*66
$GPGSV,4,1,13,01,7.7,35.2,46.0,06,33.8,150.5,40.3,12,12.0,282.7,39.5,13,26.7,215.2,45.6*73
$GPGSV,4,2,13,14,33.8,75.9,47.3,15,21.8,253.1,46.4,17,59.8,39.4,47.6,19,86.5,340.3,49.8*7C
$GPGSV,4,3,13,24,39.4,308.0,47.3,28,39.4,68.9,48.9,05,,,,23,,,*4D
$GPGSV,4,4,13,25,,,*7C
$GNGNS,213243.7,,,,,NNN,,,,,,*01
$GPVTG,,T,,M,,N,,K,N*2C
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GNGSA,A,1,,,,,,,,,,,,,,,*00
$GPGGA,,,,,,0,,,,,,,,*66
$GPRMC,,V,,,,,,,,,,N*53
$GLGSV,3,1,11,78,50.6,91.4,45.8,82,23.2,195.5,45.3,79,54.8,344.5,48.6,88,42.9,38.0,50.2*65
$GLGSV,3,2,11,87,6.3,25.3,43.8,81,71.7,158.9,47.8,70,6.3,312.2,,77,3.5,119.5,*69
$GLGSV,3,3,11,80,6.3,312.2,,69,4.2,257.3,,71,,,*66
$GPGSV,4,1,13,01,7.7,35.2,46.0,06,33.8,150.5,40.3,12,12.0,282.7,39.5,13,26.7,215.2,45.6*73
$GPGSV,4,2,13,14,33.8,75.9,47.3,15,21.8,253.1,46.4,17,59.8,39.4,47.6,19,86.5,340.3,49.8*7C
$GPGSV,4,3,13,24,39.4,308.0,47.3,28,39.4,68.9,48.9,05,,,,23,,,*4D
$GPGSV,4,4,13,25,,,*7C
$GNGNS,213244.8,,,,,NNN,,,,,,*09
$GPVTG,,T,,M,,N,,K,N*2C
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GNGSA,A,1,,,,,,,,,,,,,,,*00
$GPGGA,,,,,,0,,,,,,,,*66
$GPRMC,,V,,,,,,,,,,N*53
$GLGSV,3,1,10,78,50.6,91.4,47.1,82,23.2,195.5,45.5,79,54.8,345.9,49.3,69,4.2,257.3,48.4*61
$GLGSV,3,2,10,88,42.9,38.0,49.0,87,6.3,25.3,47.0,81,71.7,158.9,48.6,70,6.3,312.2,*78
$GLGSV,3,3,10,77,3.5,119.5,,80,6.3,312.2,*61
$GPGSV,3,1,10,01,7.7,35.2,45.7,06,33.8,150.5,40.2,12,12.0,282.7,39.8,13,26.7,215.2,45.7*7E
$GPGSV,3,2,10,14,33.8,75.9,47.3,15,21.8,253.1,46.4,17,59.8,39.4,47.6,19,86.5,351.6,49.8*7D
$GPGSV,3,3,10,24,39.4,308.0,47.3,28,39.4,68.9,49.1*44
$GPGGA,213245.0,3725.102066,N,12155.157495,W,1,06,2.1,24.6,M,-27.0,M,,*59
$GNGNS,213245.0,3725.102066,N,12155.157495,W,ANN,06,2.1,24.6,-27.0,,*2C
$GPVTG,,T,345.0,M,0.4,N,0.8,K,A*03
$GPRMC,213245.0,A,3725.102066,N,12155.157495,W,0.4,,250321,15.0,E,A*04
$GPGSA,A,3,01,13,14,17,19,28,,,,,,,2.6,2.1,1.5*33
$GNGSA,A,3,01,13,14,17,19,28,,,,,,,2.6,2.1,1.5,1*30
$GNGSA,A,3,,,,,,,,,,,,,2.6,2.1,1.5,2*31
$GNGSA,A,3,,,,,,,,,,,,,2.6,2.1,1.5*2F
$GNGSA,A,3,,,,,,,,,,,,,2.6,2.1,1.5,3*30
$PSTIS,*61
$GLGSV,3,1,10,78,50.6,91.4,46.9,82,23.2,195.5,45.6,79,54.8,345.9,49.2,69,4.2,257.3,48.5*6B
$GLGSV,3,2,10,88,42.9,38.0,50.1,87,6.3,25.3,46.9,81,71.7,158.9,48.5,70,6.3,312.2,*7A
$GLGSV,3,3,10,77,3.5,119.5,,80,6.3,312.2,*61
$GPGSV,3,1,10,01,7.7,35.2,45.5,06,33.8,150.5,40.1,12,12.0,282.7,40.2,13,26.7,215.2,45.7*7B
$GPGSV,3,2,10,14,33.8,75.9,47.3,15,21.8,253.1,46.3,17,59.8,39.4,48.3,19,86.5,351.6,50.2*72
$GPGSV,3,3,10,24,39.4,308.0,47.6,28,39.4,68.9,48.9*48
$GPGGA,213246.0,3725.102606,N,12155.157801,W,1,06,2.0,23.8,M,-27.0,M,,*53
$GNGNS,213246.0,3725.102606,N,12155.157801,W,ANN,06,2.0,23.8,-27.0,,*26
$GPVTG,0.0,T,345.0,M,0.0,N,0.0,K,A*21
$GPRMC,213246.0,A,3725.102606,N,12155.157801,W,0.0,0.0,250321,15.0,E,A*2C
$GPGSA,A,2,01,13,14,17,19,28,,,,,,,2.2,2.0,0.8*3B
$GNGSA,A,2,01,13,14,17,19,28,,,,,,,2.2,2.0,0.8,1*38
$GNGSA,A,2,,,,,,,,,,,,,2.2,2.0,0.8,2*39
$GNGSA,A,2,,,,,,,,,,,,,2.2,2.0,0.8*27
$GNGSA,A,2,,,,,,,,,,,,,2.2,2.0,0.8,3*38
$PSTIS,*61
$GLGSV,3,1,10,78,50.6,91.4,47.0,70,6.3,312.2,26.1,82,23.2,195.5,45.6,77,3.5,119.5,27.0*59
$GLGSV,3,2,10,80,6.3,312.2,29.9,79,54.8,345.9,49.2,69,4.2,257.3,48.8,88,42.9,38.0,50.1*55
$GLGSV,3,3,10,87,6.3,25.3,47.0,81,71.7,158.9,48.4*6C
$GPGSV,3,1,10,01,7.7,35.2,45.9,06,33.8,150.5,40.6,12,12.0,282.7,40.4,13,26.7,215.2,45.9*78
$GPGSV,3,2,10,14,33.8,75.9,46.7,15,21.8,253.1,46.5,17,59.8,39.4,47.3,19,86.5,351.6,50.2*7E
$GPGSV,3,3,10,24,39.4,308.0,47.5,28,39.4,68.9,49.3*40
$GPGGA,213247.0,3725.102760,N,12155.157739,W,1,06,2.0,23.2,M,-27.0,M,,*5D
$GNGNS,213247.0,3725.102760,N,12155.157739,W,ANN,06,2.0,23.2,-27.0,,*28
$GPVTG,0.0,T,345.0,M,0.0,N,0.0,K,A*21
$GPRMC,213247.0,A,3725.102760,N,12155.157739,W,0.0,0.0,250321,15.0,E,A*28
$GPGSA,A,2,01,13,14,17,19,28,,,,,,,2.2,2.0,0.8*3B
$GNGSA,A,2,01,13,14,17,19,28,,,,,,,2.2,2.0,0.8,1*38
$GNGSA,A,2,,,,,,,,,,,,,2.2,2.0,0.8,2*39
$GNGSA,A,2,,,,,,,,,,,,,2.2,2.0,0.8*27
$GNGSA,A,2,,,,,,,,,,,,,2.2,2.0,0.8,3*38