Simple App for GPS Location

I have created the helloworld app and created several basic apps.

I am trying to wrap my head around what is required for a basic GPS app.

I have tried reviewing the sample GPS app, but it has so many moving parts that I am just getting confused.
Additionally, the GPSApp in the samples directory cannot even be compiled, it is just full of errors.

Here are the functions I would like to execute

le_gnss_Enable()
le_gnss_Disable()
le_gnss_Start()
le_gnss_Stop()
le_gnss_GetLocation()

I realize I may need to get a fix, or check other things along the way, but if I can have a starting point and build on it, that would be ideal.

Questions:

  1. Is there a basic way to call these functions that are already in the firmware of the unit?
    Shouldn’t I be able to just include the existing positioning program and make a call to that?

  2. I don’t understand how when ‘gnss enable’ is called from the command line, how is that written to allow a call directly from the command line?
    One sample GPSTest app I found in the forums, you had to call using:
    app runProc gpsTest TestLeGnssStart --exe=/legato/apps/bb0fdbc087d0d830831ce02847ea971f

which was lots of trial and error to even figure out how to call that.

I would like to setup my app so I can just call: MyGPSApp.le_gnss_Enable() where I can call it from another piece of code. Is that possible?

I basically want to-refactor the gnss code to return an integer instead of Success or Error - error message, so that I can process the errors without having to RegEx pattern match every possible error message.

  1. have you tried the gnss command?
  1. no problem is found for compiling gpsApp

Yes, I use the gnss command to test from the command line. What I would like to do is call similar functions to the gnss commands but receive back an integer instead of text.

So if there is a way to take the existing gnss.c code and copy it to a new directory with a new name, make my changes, and then recompile as a new app, that probably would work well. I am just not sure how to do that at this point.

The Sample gpsApp found in the legato-af github doesn’t compile as it is written (at least on my machine). The problem is not the gnss, but the other geocoding seems to be what is throwing the errors.

Posting the output of mkapp -t gpsApp below.

(lsh:fx30stable) me@me-VirtualBox:~/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp$ mkapp -t wp77xx gpsApp.adef
[1/7] Compiling C source
FAILED: /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/component/e6e6c2d0d9a158c2ea60d4593f6c4319/obj/35927508b797474269414bd6f8efdca8.o 
/home/me/.leaf/fx30-catm-legato_21.05.0/leaf-data/fx30stable/wp77-toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc --sysroot=/home/me/.leaf/fx30-catm-legato_21.05.0/leaf-data/fx30stable/wp77-toolchain/sysroots/armv7a-neon-poky-linux-gnueabi -MMD -MF /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/component/e6e6c2d0d9a158c2ea60d4593f6c4319/obj/35927508b797474269414bd6f8efdca8.o.d -Wall -Werror -fvisibility=hidden  -c /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/geocoding.c -o /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/component/e6e6c2d0d9a158c2ea60d4593f6c4319/obj/35927508b797474269414bd6f8efdca8.o  -DLE_FILENAME=`basename /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/geocoding.c` -DMK_TOOLS_BUILD  -DLEGATO_EMBEDDED -fPIC -I /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx -I/home/me/.leaf/fx30-catm-legato_21.05.0/leaf-data/fx30stable/fx30-catm-legato/interfaces -I/home/me/.leaf/fx30-catm-legato_21.05.0/leaf-data/fx30stable/fx30-catm-legato/framework/include -I/home/me/.leaf/fx30-catm-legato_21.05.0/leaf-data/fx30stable/fx30-catm-legato/build/wp77xx/framework/include -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/component/e6e6c2d0d9a158c2ea60d4593f6c4319/src -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/83dbe65997fdbcdedbf79369b6ae5cb6 -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/83dbe65997fdbcdedbf79369b6ae5cb6 -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/83dbe65997fdbcdedbf79369b6ae5cb6/server -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/83dbe65997fdbcdedbf79369b6ae5cb6/server -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/a9eebb8d6927869b477bbd0a364740a5 -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/a9eebb8d6927869b477bbd0a364740a5 -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/a9eebb8d6927869b477bbd0a364740a5/client -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/a9eebb8d6927869b477bbd0a364740a5/client -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/66a989705882a0d22b55c72240616d3c -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/66a989705882a0d22b55c72240616d3c -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/66a989705882a0d22b55c72240616d3c/client -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/66a989705882a0d22b55c72240616d3c/client -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/7a494079b20930d789214cd9ba420c12 -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/7a494079b20930d789214cd9ba420c12 -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/7a494079b20930d789214cd9ba420c12/client -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/7a494079b20930d789214cd9ba420c12/client -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/a9eebb8d6927869b477bbd0a364740a5 -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/a9eebb8d6927869b477bbd0a364740a5/client -I/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/a9eebb8d6927869b477bbd0a364740a5/client -DLE_COMPONENT_NAME=gpsComponent -DLE_LOG_SESSION=gpsComponent_LogSession  -DLE_LOG_LEVEL_FILTER_PTR=gpsComponent_LogLevelFilterPtr 
/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/geocoding.c: In function ‘gc_InitiateGeocode’:
/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/geocoding.c:199:11: error: implicit declaration of function ‘le_dcs_GetList’; did you mean ‘le_dcs_GetState’? [-Werror=implicit-function-declaration]
  199 |     res = le_dcs_GetList(channelList, &listLen);
      |           ^~~~~~~~~~~~~~
      |           le_dcs_GetState
/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/geocoding.c: In function ‘ctrlGPS_CleanUp’:
/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/geocoding.c:655:21: error: passing argument 1 of ‘le_dcs_Stop’ from incompatible pointer type [-Werror=incompatible-pointer-types]
  655 |         le_dcs_Stop(myChannel, reqObj);
      |                     ^~~~~~~~~
      |                     |
      |                     le_dcs_ChannelRef_t {aka struct le_dcs_Channel *}
In file included from /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/component/e6e6c2d0d9a158c2ea60d4593f6c4319/src/interfaces.h:14,
                 from /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/gnss.h:5,
                 from /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/geocoding.h:4,
                 from /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/geocoding.c:1:
/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/a9eebb8d6927869b477bbd0a364740a5/client/le_dcs_interface.h:649:24: note: expected ‘le_dcs_ReqObjRef_t’ {aka ‘struct le_dcs_ReqObj *’} but argument is of type ‘le_dcs_ChannelRef_t’ {aka ‘struct le_dcs_Channel *’}
  649 |     le_dcs_ReqObjRef_t reqRef
      |     ~~~~~~~~~~~~~~~~~~~^~~~~~
/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/geocoding.c:655:9: error: too many arguments to function ‘le_dcs_Stop’
  655 |         le_dcs_Stop(myChannel, reqObj);
      |         ^~~~~~~~~~~
In file included from /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/component/e6e6c2d0d9a158c2ea60d4593f6c4319/src/interfaces.h:14,
                 from /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/gnss.h:5,
                 from /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/geocoding.h:4,
                 from /home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/gpsComponent/geocoding.c:1:
/home/me/.leaf/fx30-catm-legato_21.05.0/apps/sample/gpsApp/_build_gpsApp/wp77xx/api/a9eebb8d6927869b477bbd0a364740a5/client/le_dcs_interface.h:647:13: note: declared here
  647 | le_result_t le_dcs_Stop
      |             ^~~~~~~~~~~
cc1: all warnings being treated as errors
ninja: build stopped: subcommand failed.

When I searched for the first failed item:
le_dcs_GetList it is no longer listed in the docs at legato.io (le_dcs API Reference - Legato Docs)

I tried changing it to le_dcs_getChannels, but that throws another error.

did you try this application?

I use the gnss command to test from the command line. What I would like to do is call similar functions to the gnss commands but receive back an integer instead of text.

Why don’t you recompile the legato.cwe?

Ok. I was able to get your version to compile. I see that the offending line (le_dcs_GetList ) was removed in your version.

Dumb question…

How do I run it?

The guide says run with map locate or map find

but doesn’t tell you if there is a directory to run it in or the proper way to run it…

Thanks.

Why don’t you recompile the legato.cwe if you want to modify the code of command gnss?

I don’t know how to do that, and I am trying to get just a basic application running.

Every GPS application I try doesn’t work. It seems what I want to do should not be this hard.

I know the commands I want to run, I just don’t know how to create the file.
Every example I try with gps seems to fail and shutdown right when it starts, or it won’t compile as a sample, or it has a bunch of other stuff in it that I don’t need and still won’t compile.

If I could just understand the commands to do this:
le_gnss_Enable()
le_gnss_Disable()

make that work, then I can add to it.

But for now, I would like to start the gpsApp that I just installed, if I can figure out how to start it. The guide is no help…

didn’t you already compile the legato.cwe?

If you are talking about this:

sudo apt-get install cmake
make clean
make wp77xx

Then yes, I did that the other day to get VS Code to work with Leaf and Legato

I am not sure how re-compiling will help me if I don’t understand how things are called.

I still haven’t figured out how the tools can be called with ‘gnss enable’ or ‘cm info’, but when I try to do an app, I have to run some long command like:
app runProc gpsTest TestLeGnssStart --exe=/legato/apps/bb0fdbc087d0d830831ce02847ea971f

I don’t see how that is going to be called from a script easily.

Additionally, when I called that. It only worked one time, and then failed the other 5 to 10 times I ran it.

Can you please tell me how to start the gpsApp that you linked for me?

I finally was able to get that loaded with your fixed version of the code, but now I don’t know how to start it.

I tried running from my home directory.

I tried going to:
/legato/apps/bf37a44c832c936035121b715d206b12/read-only/bin where map resides and calling it from there and it doesn’t run from their either.

I have never tried this application in real board before

But after compiling the gpsApp.adef and download to the module, I can run like this

root@swi-mdm9x28-wp:~# app runProc gpsApp  --exe=map -- -h
NAME
        map - perform GNSS/positioning operations such as finding nearby places using forward geocoding.

Prerequisites
        A MapBox Access Token is needed for all operations.
        A GNSS receiver as well as data connection are required as well.

SYNOPSIS
        map [OPTION]... COMMAND [Place Name]
        map -h
        map --help

COMMANDS
       find
               Searches for <Place Name> in the proximity of the current coordinates provided by the GNSS
                service and fed into the mapbox api.

       locate
               Get the current coordinates using the GNSS service, and feed them into mapbox's reverse-
                geocoding api to turn the coordinates into an address.

OPTIONS
       -w N
       --within=N
               Confine the search to within an imaginary square with sides 2*N KM and your current
                coordinates are at the center of the square. The provided N KMs will be converted
                to coordinates and fed into the mapbox api.
               If not specified, the current coordinates will be used and results will be found,
                within the proximity of the current location.
       -a N
       --accuracy=N
               This is the accuracy in meters to which the device will be located. In other words,
                if the accuracy reaches 20m the algorithm will not try to further the accuracy and use
                the available coordinates.
               If not specified, it will be set to 20 meters by default.

root@swi-mdm9x28-wp:~#

Ok. It appears that:
app runProc gpsApp --exe=map – locate
is the magic command to get it to run.

Unfortunately, it is pouring down rain and really late here to go outside for the gps sensor to reach, so I will test tomorrow morning.

Thanks for the help tonight!

I got it loaded and ran it with app runProc gpsApp --exe=map – locate

Gnss is working from command line:

root@fx30s:~/myapp# gnss enable
The GNSS device is already enabled
root@fx30s:~/myapp# gnss start
The GNSS device is already started
root@fx30s:~/myapp# gnss fix 30
TTFF start = 2999 msec
root@fx30s:~/myapp# gnss get loc2d
Latitude(positive->north) : 38.202844      (location edited for privacy)
Longitude(positive->east) : -105.09680
hAccuracy                 : 3.00m
root@fx30s:~/myapp#

So Gnss service is working…

root@fx30s:~/myapp# app status
...
[stopped] gpsApp
root@fx30s:~/myapp# app start gpsApp
root@fx30s:~/myapp# app status
....
[running] gpsApp

root@fx30s:~/myapp# app runProc gpsApp --exe=map -- locate
root@fx30s:~/myapp#

logread -f | grep gps

Jan 24 07:31:08 fx30s user.info Legato:  INFO | supervisor[1258]/supervisor T=main | proc.c proc_Start() 1419 | Starting process 'gpsApp' with pid 4170
Jan 24 07:31:08 fx30s user.info Legato:  INFO | supervisor[4170]/supervisor T=main | proc.c proc_Start() 1379 | Execing 'gpsApp'
Jan 24 07:33:28 fx30s user.err Legato: =ERR= | gpsApp[4170]/gpsComponent T=main | gnss.c gnss_InitiateWatchGNSS() 129 | Failed to start gnss
Jan 24 07:33:28 fx30s user.info Legato:  INFO | supervisor[1258]/supervisor T=main | proc.c proc_SigChildHandler() 2094 | Process 'gpsApp' (PID: 4170) has exited with exit code 1.
Jan 24 07:33:28 fx30s user.warn Legato: -WRN- | supervisor[1258]/supervisor T=main | app.c app_SigChildHandler() 4182 | Process 'gpsApp' in app 'gpsApp' faulted: Ignored.
Jan 24 07:33:28 fx30s user.warn Legato: -WRN- | supervisor[1258]/supervisor T=main | app.c app_SigChildHandler() 4182 | Process 'map@0' in app 'gpsApp' faulted: Ignored.
Jan 24 07:33:28 fx30s user.info Legato:  INFO | supervisor[1258]/supervisor T=main | app.c app_StopComplete() 4881 | app 'gpsApp' has stopped.
Jan 24 07:33:28 fx30s user.info Legato:  INFO | supervisor[1258]/supervisor T=main | apps.c DeactivateAppContainer() 374 | Application 'gpsApp' has stopped.

So it appears it is failing with a gnss.c gnss_InitiateWatchGNSS() 129 | Failed to start gnss

even though gnss is already started and running.

no problem is found on my side after “app runProc gpsApp --exe=map – locate”

root@swi-mdm9x28-wp:~# app status
[running] atAirVantage
[running] atQmiLinker
[running] atService
[running] audioService
[running] avcService
[running] cellNetService
[running] dataConnectionService
[running] fwupdateService
[running] gpioService
[running] modemService
[running] portService
[running] positioningService
[running] powerMgr
[running] qmiAirVantage
[running] secStore
[stopped] smsInboxService
[stopped] spiService
[stopped] tools
[stopped] voiceCallService
[stopped] wifi
[stopped] wifiApTest
[stopped] wifiClientTest
[running] wifiService
[stopped] wifiWebAp
[stopped] loggerServer4_payload_test
[stopped] IPC_step4_payload_test
[stopped] gpsApp
root@swi-mdm9x28-wp:~# logread -f
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c app_Create() 3258 | Creating app 'gpsApp'
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | proc.c GetFaultAction() 326 | No fault action specified for process 'gpsApp'. Assuming 'ignore'.
Jan 24 21:50:28 swi-mdm9x28-wp user.warn Legato: -WRN- | supervisor[1024]/supervisor T=main | proc.c GetWatchdogAction() 362 | gpsApp watchdogAction '' in proc section
Jan 24 21:50:28 swi-mdm9x28-wp user.warn Legato: -WRN- | supervisor[1024]/supervisor T=main | proc.c GetWatchdogAction() 362 | gpsApp watchdogAction '' in proc section
Jan 24 21:50:28 swi-mdm9x28-wp user.warn Legato: -WRN- | supervisor[1024]/supervisor T=main | proc.c GetWatchdogAction() 362 | map@0 watchdogAction '' in proc section
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c app_Start() 3471 | Starting app 'gpsApp'
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libComponent_gpsComponent.so' to '/legato/systems/current/appsWriteable/gpsApp/lib
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libComponent_ctrlComponent.so' to '/legato/systems/current/appsWriteable/gpsApp/li
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libssl.so.1.0.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libssl.so.1.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcrypto.so.1.0.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcrypto
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcurl.so.4' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcurl.so.4':
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libz.so.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libz.so.1': Alread
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/bin/map' to '/legato/systems/current/appsWriteable/gpsApp/bin/map': Already exists
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/bin/gpsApp' to '/legato/systems/current/appsWriteable/gpsApp/bin/gpsApp': Already exis
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcurl.so.4' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcurl.so.4':
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcrypto.so.1.0.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcrypto
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libssl.so.1.0.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libssl.so.1.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libz.so.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libz.so.1': Alread
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/bin/date' to '/legato/systems/current/appsWriteable/gpsApp/bin/date': Already exists
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/bin/sh' to '/legato/systems/current/appsWriteable/gpsApp/bin/sh': Already exists
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/etc/hosts' to '/legato/systems/current/appsWriteable/gpsApp/etc/hosts': Already exists
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/etc/nsswitch.conf' to '/legato/systems/current/appsWriteable/gpsApp/etc/nsswitch.conf': Already exists
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/etc/resolv.conf' to '/legato/systems/current/appsWriteable/gpsApp/etc/resolv.conf': Already exists
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/etc/ssl/certs/ca-certificates.crt' to '/legato/systems/current/appsWriteable/gpsApp/etc/ssl/certs/ca-certificates.crt': Already exi
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/lib/libnss_compat.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_compat.so.2': Already exists
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/lib/libnss_dns.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_dns.so.2': Already exists
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/lib/libnss_files.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_files.so.2': Already exists
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/lib/libresolv.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libresolv.so.2': Already exists
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2084 | Skipping file link '/usr/bin/curl' to '/legato/systems/current/appsWriteable/gpsApp/usr/bin/curl': Already exists
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2154 | Created file link '/dev/null' to '/legato/systems/current/appsWriteable/gpsApp/dev/null'.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2154 | Created file link '/dev/random' to '/legato/systems/current/appsWriteable/gpsApp/dev/random'.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | app.c CreateFileLink() 2154 | Created file link '/dev/urandom' to '/legato/systems/current/appsWriteable/gpsApp/dev/urandom'.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | resourceLimits.c GetCfgResourceLimit() 207 | Configured resource limit maxStackBytes is not available.  Using the default value 0.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | proc.c proc_Start() 1403 | Starting process 'gpsApp' with pid 2360
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | proc.c proc_Start() 1403 | Starting process 'map@0' with pid 2361
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | supervisor.c SigChildHandler() 899 | Reaping unconfigured child process 2356.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2361]/supervisor T=main | proc.c proc_Start() 1363 | Execing 'map'
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2361]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxCoreDumpFileBytes to value 8192.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2361]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxFileBytes to value 90112.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2361]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxLockedMemoryBytes to value 8192.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2361]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxFileDescriptors to value 256.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2361]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxMQueueBytes to value 512.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2361]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxThreads to value 20.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2361]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxQueuedSignals to value 100.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2360]/supervisor T=main | proc.c proc_Start() 1363 | Execing 'gpsApp'
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2360]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxCoreDumpFileBytes to value 102400.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2360]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxFileBytes to value 102400.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2360]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxLockedMemoryBytes to value 8192.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2360]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxFileDescriptors to value 256.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2360]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxMQueueBytes to value 512.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2360]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxThreads to value 20.
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[2360]/supervisor T=main | resourceLimits.c SetRLimitValue() 301 | Setting resource limit maxQueuedSignals to value 100.
Jan 24 21:50:28 swi-mdm9x28-wp user.warn Legato: -WRN- | posDaemon[1166]/framework T=main | safeRef.c le_ref_CreateRef() 547 | Safe reference map maximum exceeded for refFdMonitors, new size 42
Jan 24 21:50:28 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_Start() 3584 | EngineState ON
Jan 24 21:50:34 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:34 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:34 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:34 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23373.340000
Jan 24 21:50:35 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:35 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:35 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:35 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23394.840000
Jan 24 21:50:36 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:36 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:36 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:36 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23416.330000
Jan 24 21:50:37 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:37 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:37 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:37 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23356.870000
Jan 24 21:50:38 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:38 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:38 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:38 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23378.370000
Jan 24 21:50:39 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:39 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:39 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:39 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23399.870000
Jan 24 21:50:40 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:40 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:40 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:40 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23340.400000
Jan 24 21:50:41 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:41 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:41 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:41 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23361.900000
Jan 24 21:50:42 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:42 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:42 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:42 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23383.400000
Jan 24 21:50:43 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:43 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:43 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:43 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23404.900000
Jan 24 21:50:44 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:44 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:44 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:44 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23426.390000
Jan 24 21:50:45 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:45 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:45 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:45 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23447.900000
Jan 24 21:50:46 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:46 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:46 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:46 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23469.390000
Jan 24 21:50:47 swi-mdm9x28-wp user.info Legato:  INFO | supervisor[1024]/supervisor T=main | supervisor.c SigChildHandler() 899 | Reaping unconfigured child process 2361.
Jan 24 21:50:47 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:47 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:47 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:47 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23490.890000
Jan 24 21:50:48 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:48 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:48 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:48 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23512.390000
Jan 24 21:50:49 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:49 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:49 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:49 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23533.890000
Jan 24 21:50:50 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:50 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:50 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:50 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23340.380000
Jan 24 21:50:51 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:51 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:51 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:51 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23361.880000
Jan 24 21:50:52 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:52 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:52 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:52 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23383.380000
Jan 24 21:50:53 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:53 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:53 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:53 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23404.880000
Jan 24 21:50:54 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:54 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:54 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:54 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23426.380000
Jan 24 21:50:55 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 188 | Failed to get epoch time
Jan 24 21:50:55 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 0:
Jan 24 21:50:55 swi-mdm9x28-wp user.info Legato:  INFO | posDaemon[1166]/le_pa_gnss T=main | pa_gnss_qmi.c pa_gnss_InjectUtcTime() 4098 | UTC time injected to the GNSS device
Jan 24 21:50:55 swi-mdm9x28-wp user.info Legato:  INFO | gpsApp[2360]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 218 | Position lat.22.330002, long.114.180000, hAccuracy 23447.870000
^C
root@swi-mdm9x28-wp:~#

I just ran it again, this time without starting the app…

root@fx30s:~/myapp# logread -f | grep gps
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c app_Create() 3376 | Creating app 'gpsApp'
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | proc.c GetFaultAction() 325 | No fault action specified for process 'gpsApp'. Assuming 'ignore'.
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c app_Start() 3589 | Starting app 'gpsApp'
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libComponent_gpsComponent.so' to '/legato/systems/cu                                  rrent/appsWriteable/gpsApp/lib
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libComponent_ctrlComponent.so' to '/legato/systems/c                                  urrent/appsWriteable/gpsApp/li
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcrypto.so.1.1' to '/legato/systems/current/appsWr                                  iteable/gpsApp/lib/libcrypto.s
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcurl.so.4' to '/legato/systems/current/appsWritea                                  ble/gpsApp/lib/libcurl.so.4':
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libssl.so.1.1' to '/legato/systems/current/appsWrite                                  able/gpsApp/lib/libssl.so.1.1'
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libz.so.1' to '/legato/systems/current/appsWriteable                                  /gpsApp/lib/libz.so.1': Alread
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/bin/map' to '/legato/systems/current/appsWriteable/gpsAp                                  p/bin/map': Already exists
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/bin/gpsApp' to '/legato/systems/current/appsWriteable/gp                                  sApp/bin/gpsApp': Already exis
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcurl.so.4' to '/legato/systems/current/appsWritea                                  ble/gpsApp/lib/libcurl.so.4':
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libz.so.1' to '/legato/systems/current/appsWriteable                                  /gpsApp/lib/libz.so.1': Alread
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcrypto.so.1.1' to '/legato/systems/current/appsWr                                  iteable/gpsApp/lib/libcrypto.s
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libssl.so.1.1' to '/legato/systems/current/appsWrite                                  able/gpsApp/lib/libssl.so.1.1'
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/bin/date' to '/legato/systems/current/appsWriteable/gpsApp/bin/date': Already exists
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/bin/sh' to '/legato/systems/current/appsWriteable/gpsApp/bin/sh': Already exists
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/etc/hosts' to '/legato/systems/current/appsWriteable/gpsApp/etc/hosts': Already exists
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/etc/nsswitch.conf' to '/legato/systems/current/appsWriteable/gpsApp/etc/nsswitch.conf': Already exist                                  s
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/etc/resolv.conf' to '/legato/systems/current/appsWriteable/gpsApp/etc/resolv.conf': Already exists
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/etc/ssl/certs/ca-certificates.crt' to '/legato/systems/current/appsWriteable/gpsApp/etc/ssl/certs/ca-                                  certificates.crt': Already exi
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/lib/libnss_compat.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_compat.so.2': Alr                                  eady exists
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/lib/libnss_dns.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_dns.so.2': Already e                                  xists
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/lib/libnss_files.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_files.so.2': Alrea                                  dy exists
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/lib/libresolv.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libresolv.so.2': Already exi                                  sts
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/usr/bin/curl' to '/legato/systems/current/appsWriteable/gpsApp/usr/bin/curl': Already exists
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/dev/null' to '/legato/systems/current/appsWriteable/gpsApp/dev/null'.
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/dev/random' to '/legato/systems/current/appsWriteable/gpsApp/dev/random'.
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/dev/urandom' to '/legato/systems/current/appsWriteable/gpsApp/dev/urandom'.
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | proc.c proc_Start() 1419 | Starting process 'gpsApp' with pid 4470
Jan 24 08:13:42 fx30s user.info Legato:  INFO | supervisor[4470]/supervisor T=main | proc.c proc_Start() 1379 | Execing 'gpsApp'
Jan 24 08:13:42 fx30s user.err Legato: =ERR= | gpsApp[4470]/gpsComponent T=main | gnss.c gnss_InitiateWatchGNSS() 129 | Failed to start gnss
Jan 24 08:13:43 fx30s user.warn Legato: -WRN- | supervisor[1257]/supervisor T=main | app.c app_SigChildHandler() 4182 | Process 'map@0' in app 'gpsApp' faulted: Ignored.
Jan 24 08:13:43 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | proc.c proc_SigChildHandler() 2094 | Process 'gpsApp' (PID: 4470) has exited with exit code 1.
Jan 24 08:13:43 fx30s user.warn Legato: -WRN- | supervisor[1257]/supervisor T=main | app.c app_SigChildHandler() 4182 | Process 'gpsApp' in app 'gpsApp' faulted: Ignored.
Jan 24 08:13:43 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c app_StopComplete() 4881 | app 'gpsApp' has stopped.
Jan 24 08:13:43 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | apps.c DeactivateAppContainer() 374 | Application 'gpsApp' has stopped.

These two lines are the only Error and Warn messages:

Jan 24 08:13:42 fx30s user.err Legato: =ERR= | gpsApp[4470]/gpsComponent T=main | gnss.c gnss_InitiateWatchGNSS() 129 | Failed to start gnss
Jan 24 08:13:43 fx30s user.warn Legato: -WRN- | supervisor[1257]/supervisor T=main | app.c app_SigChildHandler() 4182 | Process ‘map@0’ in app ‘gpsApp’ faulted: Ignored.

Should I try to mkapp again?

Or how do I troubleshoot gnss.c gnss_InitiateWatchGNSS() 129 | Failed to start gnss when I know that gnss service works?

no idea, i don’t see problem here, you can try to troubleshoot why it works in gnss command

On a whim, I decided to issue ‘gnss stop’ prior to running command.

It is kind of working now, but is hanging, and I have a different output than you…

Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c app_Start() 3589 | Starting app 'gpsApp'
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libComponent_gpsComponent.so' to '/legato/systems/current/appsWriteable/gpsApp/lib
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libComponent_ctrlComponent.so' to '/legato/systems/current/appsWriteable/gpsApp/li
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcrypto.so.1.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcrypto.s
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcurl.so.4' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcurl.so.4':
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libssl.so.1.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libssl.so.1.1'
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libz.so.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libz.so.1': Alread
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/bin/map' to '/legato/systems/current/appsWriteable/gpsApp/bin/map': Already exists
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/bin/gpsApp' to '/legato/systems/current/appsWriteable/gpsApp/bin/gpsApp': Already exis
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcurl.so.4' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcurl.so.4':
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libz.so.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libz.so.1': Alread
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcrypto.so.1.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcrypto.s
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libssl.so.1.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libssl.so.1.1'
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/bin/date' to '/legato/systems/current/appsWriteable/gpsApp/bin/date': Already exists
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/bin/sh' to '/legato/systems/current/appsWriteable/gpsApp/bin/sh': Already exists
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/etc/hosts' to '/legato/systems/current/appsWriteable/gpsApp/etc/hosts': Already exists
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/etc/nsswitch.conf' to '/legato/systems/current/appsWriteable/gpsApp/etc/nsswitch.conf': Already exists
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/etc/resolv.conf' to '/legato/systems/current/appsWriteable/gpsApp/etc/resolv.conf': Already exists
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/etc/ssl/certs/ca-certificates.crt' to '/legato/systems/current/appsWriteable/gpsApp/etc/ssl/certs/ca-certificates.crt': Already exi
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/lib/libnss_compat.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_compat.so.2': Already exists
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/lib/libnss_dns.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_dns.so.2': Already exists
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/lib/libnss_files.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_files.so.2': Already exists
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/lib/libresolv.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libresolv.so.2': Already exists
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/usr/bin/curl' to '/legato/systems/current/appsWriteable/gpsApp/usr/bin/curl': Already exists
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/dev/null' to '/legato/systems/current/appsWriteable/gpsApp/dev/null'.
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/dev/random' to '/legato/systems/current/appsWriteable/gpsApp/dev/random'.
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/dev/urandom' to '/legato/systems/current/appsWriteable/gpsApp/dev/urandom'.
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[1257]/supervisor T=main | proc.c proc_Start() 1419 | Starting process 'gpsApp' with pid 6423
Jan 24 08:35:23 fx30s user.info Legato:  INFO | supervisor[6423]/supervisor T=main | proc.c proc_Start() 1379 | Execing 'gpsApp'
Jan 24 08:35:29 fx30s user.info Legato:  INFO | gpsApp[6423]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 1706106930000:
Jan 24 08:35:29 fx30s user.info Legato:  INFO | gpsApp[6423]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 215 | Position lat.38.252886, long.-99.769648, hAccuracy 11.000000
Jan 24 08:35:30 fx30s user.info Legato:  INFO | gpsApp[6423]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 215 | asking for channel reference for channel
Jan 24 08:35:30 fx30s user.info Legato:  INFO | gpsApp[6423]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 217 | returned channel reference: (nil)
Jan 24 08:35:30 fx30s user.info Legato:  INFO | gpsApp[6423]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 220 | asking to add event handler for channel
Jan 24 08:35:30 fx30s user.info Legato:  INFO | gpsApp[6423]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 222 | channel event handler added 0xb6ef7254 for channel
Jan 24 08:35:30 fx30s user.info Legato:  INFO | gpsApp[6423]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 226 | asking to start channel
Jan 24 08:35:30 fx30s user.info Legato:  INFO | gpsApp[6423]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 228 | returned RequestObj (nil)
Jan 24 08:35:35 fx30s user.info Legato:  INFO | gpsApp[6423]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 232 | asking to add route for channel

It seems now that mine is hanging on the channel reference or a route to channel.

I didn’t see a reference to channel in your logs though…
Are we running the exact same code from your gpsApp code you posted yesterday?

I used this application:
gpsApp.7z (106.3 KB)

I ran your version and it does the same thing. I guess the app just doesn’t work.

Here is the description of what the locate command is supposed to do:

locate
Get the current coordinates using the GNSS service, and feed them into mapbox’s reverse-
geocoding api to turn the coordinates into an address.

root@fx30s:~# logread -f | grep gps
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c app_Create() 3376 | Creating app 'gpsApp'
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | proc.c GetFaultAction() 325 | No fault action specified for process 'gpsApp'. Assuming 'ignore'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c app_Start() 3589 | Starting app 'gpsApp'
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/legato/systems/current/apps/gpsApp/read-only/lib/libComponent_gpsComponent.so' to '/legato/systems/current/appsWriteable/gpsApp/lib/
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/legato/systems/current/apps/gpsApp/read-only/lib/libComponent_ctrlComponent.so' to '/legato/systems/current/appsWriteable/gpsApp/lib
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcrypto.so.1.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcrypto.so
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcurl.so.4' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcurl.so.4'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/legato/systems/current/apps/gpsApp/read-only/lib/libssl.so.1.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libssl.so.1.1'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/legato/systems/current/apps/gpsApp/read-only/lib/libz.so.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libz.so.1'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/legato/systems/current/apps/gpsApp/read-only/bin/map' to '/legato/systems/current/appsWriteable/gpsApp/bin/map'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/legato/systems/current/apps/gpsApp/read-only/bin/gpsApp' to '/legato/systems/current/appsWriteable/gpsApp/bin/gpsApp'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcurl.so.4' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcurl.so.4':
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libz.so.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libz.so.1': Alread
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libcrypto.so.1.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libcrypto.s
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2202 | Skipping file link '/legato/systems/current/apps/gpsApp/read-only/lib/libssl.so.1.1' to '/legato/systems/current/appsWriteable/gpsApp/lib/libssl.so.1.1'
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/bin/date' to '/legato/systems/current/appsWriteable/gpsApp/bin/date'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/bin/sh' to '/legato/systems/current/appsWriteable/gpsApp/bin/sh'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/etc/hosts' to '/legato/systems/current/appsWriteable/gpsApp/etc/hosts'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/etc/nsswitch.conf' to '/legato/systems/current/appsWriteable/gpsApp/etc/nsswitch.conf'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/etc/resolv.conf' to '/legato/systems/current/appsWriteable/gpsApp/etc/resolv.conf'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/etc/ssl/certs/ca-certificates.crt' to '/legato/systems/current/appsWriteable/gpsApp/etc/ssl/certs/ca-certificates.crt'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/lib/libnss_compat.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_compat.so.2'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/lib/libnss_dns.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_dns.so.2'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/lib/libnss_files.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libnss_files.so.2'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/lib/libresolv.so.2' to '/legato/systems/current/appsWriteable/gpsApp/lib/libresolv.so.2'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/usr/bin/curl' to '/legato/systems/current/appsWriteable/gpsApp/usr/bin/curl'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/dev/null' to '/legato/systems/current/appsWriteable/gpsApp/dev/null'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/dev/random' to '/legato/systems/current/appsWriteable/gpsApp/dev/random'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | app.c CreateFileLink() 2272 | Created file link '/dev/urandom' to '/legato/systems/current/appsWriteable/gpsApp/dev/urandom'.
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[1255]/supervisor T=main | proc.c proc_Start() 1419 | Starting process 'gpsApp' with pid 5311
Jan 24 12:20:50 fx30s user.info Legato:  INFO | supervisor[5311]/supervisor T=main | proc.c proc_Start() 1379 | Execing 'gpsApp'
Jan 24 12:20:56 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 1706120457000:
Jan 24 12:20:56 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 215 | Position lat.38.256634, long.-90.145864, hAccuracy 18.000000
Jan 24 12:20:57 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 215 | asking for channel reference for channel
Jan 24 12:20:57 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 217 | returned channel reference: (nil)
Jan 24 12:20:57 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 220 | asking to add event handler for channel
Jan 24 12:20:57 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 222 | channel event handler added 0xb6edf254 for channel
Jan 24 12:20:57 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 226 | asking to start channel
Jan 24 12:20:57 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 228 | returned RequestObj (nil)
Jan 24 12:21:02 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 232 | asking to add route for channel
Jan 24 12:40:13 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 215 | asking for channel reference for channel
Jan 24 12:40:13 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 217 | returned channel reference: (nil)
Jan 24 12:40:13 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 220 | asking to add event handler for channel
Jan 24 12:40:13 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 222 | channel event handler added 0xb6edf254 for channel
Jan 24 12:40:13 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 226 | asking to start channel
Jan 24 12:40:13 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 228 | returned RequestObj (nil)
Jan 24 12:40:13 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 192 | epoch time: 1706121614000:
Jan 24 12:40:13 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=PositionThread | gnss.c PositionHandlerFunction() 215 | Position lat.38.356736, long.-99.456408, hAccuracy 10.000000
Jan 24 12:40:13 fx30s user.warn Legato: -WRN- | gpsApp[5311]/framework T=PositionThread | mem.c VerifyUniquenessOfName() 673 | Multiple memory pools share the same name 'gpsComponent.CoordinateInformat'. This will become illegal in future releases.
Jan 24 12:40:18 fx30s user.info Legato:  INFO | gpsApp[5311]/gpsComponent T=main | geocoding.c gc_InitiateGeocode() 232 | asking to add route for channel

I left it for 5 minutes and it just hangs on (asking to add route for channel)

I think it is just another sample app that doesn’t work, there are quite a few.

Thanks.

Through more investigation of the github, I found the apps/test/positioning folder and have run both the gnssTest and positioningTest and got them to work.

I found the positioning Test has both 2d and 3d location information in there…

I started commenting out sections I don’t need of the positioningTest.

/**
  * This module implements the le_posCtrl's tests.
  *
  * Copyright (C) Sierra Wireless Inc.
  *
  */

#include "legato.h"
#include <stdio.h>

#include "interfaces.h"

//--------------------------------------------------------------------------------------------------
/**
 * Movement Handler References
 */
//--------------------------------------------------------------------------------------------------
static le_pos_MovementHandlerRef_t  NavigationHandlerRef;
static le_pos_MovementHandlerRef_t  FiftyNavigationHandlerRef;

//--------------------------------------------------------------------------------------------------
/**
 * Default acquisition rate is 1 sample/sec
 */
//--------------------------------------------------------------------------------------------------
#define DEFAULT_ACQUISITION_RATE 1000

#ifdef LE_CONFIG_LINUX
#define LINUX_OS 1
#else
#define LINUX_OS 0
#endif

//--------------------------------------------------------------------------------------------------
/**
 * Handler function for Navigation notification.
 *
 */
//--------------------------------------------------------------------------------------------------
static void NavigationHandler
(
    le_pos_SampleRef_t positionSampleRef,
    void* contextPtr
)
{
    int32_t  val, val1, accuracy;
    uint32_t uval, uAccuracy;
    // Date parameters
    uint16_t year;
    uint16_t month;
    uint16_t day;
    // Time parameters
    uint16_t hours;
    uint16_t minutes;
    uint16_t seconds;
    uint16_t milliseconds;
    le_pos_FixState_t fixState;

    if (NULL == positionSampleRef)
    {
        LE_ERROR("New Position sample is NULL!");
    }
    else
    {
        LE_INFO("New Position sample %p", positionSampleRef);
    }

    le_pos_sample_GetFixState(positionSampleRef, &fixState);
    LE_INFO("GetFixState: %d", fixState);

    le_pos_sample_Get2DLocation(positionSampleRef, &val, &val1, &accuracy);
    LE_INFO("Get2DLocation: lat.%d, long.%d, accuracy.%d", val, val1, accuracy);

    le_pos_sample_GetDate(positionSampleRef, &year, &month, &day);
    LE_INFO("GetDate: year.%d, month.%d, day.%d", year, month, day);

    le_pos_sample_GetTime(positionSampleRef, &hours, &minutes, &seconds, &milliseconds);
    LE_INFO("GetTime: hours.%d, minutes.%d, seconds.%d, milliseconds.%d", hours, minutes, seconds,
            milliseconds);

    le_pos_sample_GetAltitude(positionSampleRef, &val, &accuracy);
    LE_INFO("GetAltitude: alt.%d, accuracy.%d", val, accuracy);

    le_pos_sample_GetHorizontalSpeed(positionSampleRef, &uval, &uAccuracy);
    LE_INFO("GetHorizontalSpeed: hSpeed.%u, accuracy.%u", uval, uAccuracy);

    le_pos_sample_GetVerticalSpeed(positionSampleRef, &val, &accuracy);
    LE_INFO("GetVerticalSpeed: vSpeed.%d, accuracy.%d", val, accuracy);

    le_pos_sample_GetHeading(positionSampleRef, &uval, &uAccuracy);
    LE_INFO("GetHeading: heading.%u, accuracy.%u", uval, uAccuracy);

    le_pos_sample_GetDirection(positionSampleRef, &uval, &uAccuracy);
    LE_INFO("GetDirection: direction.%u, accuracy.%u", uval, uAccuracy);

    le_pos_sample_Release(positionSampleRef);
}

//--------------------------------------------------------------------------------------------------
/**
 * Handler function for Profile State Change Notifications.
 *
 */
//--------------------------------------------------------------------------------------------------
static void FiftyMeterNavigationHandler
(
    le_pos_SampleRef_t positionSampleRef,
    void* contextPtr
)
{
    int32_t  val, val1, accuracy;
    uint32_t uval, uAccuracy;
    le_pos_FixState_t fixState;

    if (NULL == positionSampleRef)
    {
        LE_ERROR("New Position sample is NULL!");
    }
    else
    {
        LE_INFO("New Position sample %p", positionSampleRef);
    }

    le_pos_sample_GetFixState(positionSampleRef, &fixState);
    LE_INFO("GetFixState: %d", fixState);

    le_pos_sample_Get2DLocation(positionSampleRef, &val, &val1, &accuracy);
    LE_INFO("Get2DLocation: lat.%d, long.%d, accuracy.%d", val, val1, accuracy);

    le_pos_sample_GetAltitude(positionSampleRef, &val, &accuracy);
    LE_INFO("GetAltitude: alt.%d, accuracy.%d", val, accuracy);

    le_pos_sample_GetHorizontalSpeed(positionSampleRef, &uval, &uAccuracy);
    LE_INFO("GetHorizontalSpeed: hSpeed.%u, accuracy.%u", uval, uAccuracy);

    le_pos_sample_GetVerticalSpeed(positionSampleRef, &val, &accuracy);
    LE_INFO("GetVerticalSpeed: vSpeed.%d, accuracy.%d", val, accuracy);

    le_pos_sample_GetHeading(positionSampleRef, &uval, &uAccuracy);
    LE_INFO("GetHeading: heading.%u, accuracy.%u", uval, uAccuracy);

    le_pos_sample_GetDirection(positionSampleRef, &uval, &uAccuracy);
    LE_INFO("GetDirection: direction.%u, accuracy.%u", uval, uAccuracy);

    le_pos_sample_Release(positionSampleRef);
}

//--------------------------------------------------------------------------------------------------
/**
 * Test: Add Position Handler
 *
*/
//--------------------------------------------------------------------------------------------------
static void* NavigationThread
(
    void* context
)
{
    le_pos_ConnectService();

    LE_INFO("======== Navigation Handler thread  ========");

    // Test the registration of an handler for movement notifications.
    // The movement notification range can be set to an horizontal and a vertical magnitude of 50
    // meters each.
    FiftyNavigationHandlerRef = le_pos_AddMovementHandler(50, 50, FiftyMeterNavigationHandler, NULL);
    LE_ASSERT(NULL != FiftyNavigationHandlerRef);

    // le_pos_AddMovementHandler calculates an acquisitionRate (look at le_pos_AddMovementHandler
    // and CalculateAcquisitionRate())
    // Test that the acquisitionRate is 4000 msec.
    LE_ASSERT(4000 == le_pos_GetAcquisitionRate());

    // Test the registration of an handler for movement notifications with horizontal or vertical
    // magnitude of 0 meters. (It will set an acquisition rate of 1sec).
    NavigationHandlerRef = le_pos_AddMovementHandler(0, 0, NavigationHandler, NULL);
    LE_ASSERT(NULL != NavigationHandlerRef);

    // Test that the acquisitionRate is 1000 msec
    // (because final acquisitionRate is the smallest calculated).
    LE_ASSERT(1000 == le_pos_GetAcquisitionRate());

    le_event_RunLoop();
    return NULL;
}

//--------------------------------------------------------------------------------------------------
/**
 * Test: le_pos_SetDistanceResolution
 *
 * The results can also be cheched visualy
 *
 */
//--------------------------------------------------------------------------------------------------
// static void Testle_pos_DistanceResolutionUpdate
// (
//     void
// )
// {
//     int32_t           latitude;
//     int32_t           longitude;
//     int32_t           altitude, altitudeSav;
//     int32_t           hAccuracy, hAccuracySav;
//     int32_t           vAccuracy, vAccuracySav;
//     le_result_t       res;

//     LE_ASSERT(LE_BAD_PARAMETER == le_pos_SetDistanceResolution(LE_POS_RES_UNKNOWN));

//     // get the default values (in meters)
//     LE_ASSERT_OK(le_pos_SetDistanceResolution(LE_POS_RES_METER));
//     res = le_pos_Get3DLocation(&latitude, &longitude, &hAccuracy, &altitude, &vAccuracy);
//     LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
//     LE_INFO("Meter resolution: hAccuracy %d, altitude %d, vAccuracy %d",
//             hAccuracy, altitude, vAccuracy);
//     altitudeSav = altitude;
//     hAccuracySav = hAccuracy;
//     vAccuracySav = vAccuracy;

//     // test decmeter resolution
//     LE_ASSERT_OK(le_pos_SetDistanceResolution(LE_POS_RES_DECIMETER));
//     res = le_pos_Get3DLocation(&latitude, &longitude, &hAccuracy, &altitude, &vAccuracy);
//     LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
//     LE_INFO("Decimeter: hAccuracy %d, altitude %d, vAccuracy %d", hAccuracy, altitude, vAccuracy);

//     if ((UINT32_MAX != hAccuracy) && (UINT32_MAX != hAccuracySav))
//     {
//         LE_ASSERT(hAccuracy != hAccuracySav);
//     }
//     if ((UINT32_MAX != vAccuracy) && (UINT32_MAX != vAccuracySav))
//     {
//         LE_ASSERT(vAccuracy != vAccuracySav);
//     }
//     if ((UINT32_MAX != altitude) && (UINT32_MAX != altitudeSav))
//     {
//         LE_ASSERT(altitude != altitudeSav);
//     }
//     altitudeSav = altitude;
//     hAccuracySav = hAccuracy;
//     vAccuracySav = vAccuracy;

//     // test centimeter resolution
//     LE_ASSERT_OK(le_pos_SetDistanceResolution(LE_POS_RES_CENTIMETER));
//     res = le_pos_Get3DLocation(&latitude, &longitude, &hAccuracy, &altitude, &vAccuracy);
//     LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
//     LE_INFO("Centimeter: hAccuracy.%d, altitude.%d, vAccuracy.%d", hAccuracy, altitude, vAccuracy);

//     if ((UINT32_MAX != hAccuracy) && (UINT32_MAX != hAccuracySav))
//     {
//         LE_ASSERT(hAccuracy != hAccuracySav);
//     }
//     if ((UINT32_MAX != vAccuracy) && (UINT32_MAX != vAccuracySav))
//     {
//         LE_ASSERT(vAccuracy != vAccuracySav);
//     }
//     if ((UINT32_MAX != altitude) && (UINT32_MAX != altitudeSav))
//     {
//         LE_ASSERT(altitude != altitudeSav);
//     }
//     altitudeSav = altitude;
//     hAccuracySav = hAccuracy;
//     vAccuracySav = vAccuracy;

//     // test millimeter resolution
//     LE_ASSERT_OK(le_pos_SetDistanceResolution(LE_POS_RES_MILLIMETER));
//     res = le_pos_Get3DLocation(&latitude, &longitude, &hAccuracy, &altitude, &vAccuracy);
//     LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
//     LE_INFO("Millimeter: hAccuracy.%d, altitude.%d, vAccuracy.%d", hAccuracy, altitude, vAccuracy);

//     if ((UINT32_MAX != hAccuracy) && (UINT32_MAX != hAccuracySav))
//     {
//         LE_ASSERT(hAccuracy != hAccuracySav);
//     }
//     if ((UINT32_MAX != vAccuracy) && (UINT32_MAX != vAccuracySav))
//     {
//         LE_ASSERT(vAccuracy != vAccuracySav);
//     }
//     if ((UINT32_MAX != altitude) && (UINT32_MAX != altitudeSav))
//     {
//         LE_ASSERT(altitude != altitudeSav);
//     }
//     altitudeSav = altitude;
//     hAccuracySav = hAccuracy;
//     vAccuracySav = vAccuracy;

//     // test meter resolution
//     LE_ASSERT_OK(le_pos_SetDistanceResolution(LE_POS_RES_METER));
//     res = le_pos_Get3DLocation(&latitude, &longitude, &hAccuracy, &altitude, &vAccuracy);
//     LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
//     LE_INFO("Meter: hAccuracy.%d, altitude.%d, vAccuracy.%d", hAccuracy, altitude, vAccuracy);

//     if ((UINT32_MAX != hAccuracy) && (UINT32_MAX != hAccuracySav))
//     {
//         LE_ASSERT(hAccuracy != hAccuracySav);
//     }
//     if ((UINT32_MAX != vAccuracy) && (UINT32_MAX != vAccuracySav))
//     {
//         LE_ASSERT(vAccuracy != vAccuracySav);
//     }
//     if ((UINT32_MAX != altitude) && (UINT32_MAX != altitudeSav))
//     {
//         LE_ASSERT(altitude != altitudeSav);
//     }
// }

//--------------------------------------------------------------------------------------------------
/**
 * Test: Get position Fix info.
 *
 */
//--------------------------------------------------------------------------------------------------
static void Testle_pos_GetInfo
(
    void
)
{
    int32_t           latitude;
    int32_t           longitude;
    int32_t           altitude;
    int32_t           hAccuracy;
    int32_t           vAccuracy;
    uint32_t          hSpeed;
    uint32_t          hSpeedAccuracy;
    int32_t           vSpeed;
    int32_t           vSpeedAccuracy;
    uint32_t          heading;
    uint32_t          headingAccuracy=0;
    uint32_t          direction;
    uint32_t          directionAccuracy=0;
    uint16_t          year = 0;
    uint16_t          month = 0;
    uint16_t          day = 0;
    uint16_t          hours = 0;
    uint16_t          minutes = 0;
    uint16_t          seconds = 0;
    uint16_t          milliseconds = 0;
    le_pos_FixState_t fixState;
    le_result_t       res;

    LE_ASSERT_OK(le_pos_GetFixState(&fixState));
    LE_INFO("position fix state %d", fixState);

    res = le_pos_Get2DLocation(&latitude, &longitude, &hAccuracy);
    LE_INFO("le_pos_Get2DLocation %s",
            (LE_OK == res) ? "OK" : (LE_OUT_OF_RANGE == res) ? "parameter(s) out of range":"ERROR");
    LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
    LE_INFO("Check le_pos_Get2DLocation latitude.%d, longitude.%d, hAccuracy.%d",
            latitude, longitude, hAccuracy);

    res = le_pos_Get3DLocation(&latitude, &longitude, &hAccuracy, &altitude, &vAccuracy);
    LE_INFO("le_pos_Get3DLocation %s",
            (LE_OK == res) ? "OK" : (LE_OUT_OF_RANGE == res) ? "parameter(s) out of range":"ERROR");
    LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
    LE_INFO("Check le_pos_Get3DLocation latitude.%d, longitude.%d, hAccuracy.%d, altitude.%d"
            ", vAccuracy.%d",
            latitude, longitude, hAccuracy, altitude, vAccuracy);

    res = le_pos_GetDate(&year, &month, &day);
    LE_INFO("le_pos_GetDate %s",
            (LE_OK == res) ? "OK" : (LE_OUT_OF_RANGE == res) ? "parameter(s) out of range":"ERROR");
    LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
    LE_INFO("Check le_pos_GetDate year.%d, month.%d, day.%d",
            year, month, day);

    res = le_pos_GetTime(&hours, &minutes, &seconds, &milliseconds);
    LE_INFO("le_pos_GetTime %s",
            (LE_OK == res) ? "OK" : (LE_OUT_OF_RANGE == res) ? "parameter(s) out of range":"ERROR");
    LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
    LE_INFO("Check le_pos_GetTime hours.%d, minutes.%d, seconds.%d, milliseconds.%d",
            hours, minutes, seconds, milliseconds);

    res = le_pos_GetMotion(&hSpeed, &hSpeedAccuracy, &vSpeed, &vSpeedAccuracy);
    LE_INFO("le_pos_GetMotion %s",
            (LE_OK == res) ? "OK" : (LE_OUT_OF_RANGE == res) ? "parameter(s) out of range":"ERROR");
    LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
    LE_INFO("Check le_pos_GetMotion hSpeed.%u, hSpeedAccuracy.%u, vSpeed.%d, vSpeedAccuracy.%d",
            hSpeed, hSpeedAccuracy, vSpeed, vSpeedAccuracy);

    res = le_pos_GetHeading(&heading, &headingAccuracy);
    LE_INFO("le_pos_GetHeading %s",
            (LE_OK == res) ? "OK" : (LE_OUT_OF_RANGE == res) ? "parameter(s) out of range":"ERROR");
    LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
    LE_INFO("Check le_pos_GetHeading heading.%u, headingAccuracy.%u",
            heading, headingAccuracy);

    res = le_pos_GetDirection(&direction, &directionAccuracy);
    LE_INFO("le_pos_GetDirection %s",
            (LE_OK == res) ? "OK" : (LE_OUT_OF_RANGE == res) ? "parameter(s) out of range":"ERROR");
    LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
    LE_INFO("Check le_pos_GetDirection direction.%u, directionAccuracy.%u",
            direction, directionAccuracy);

    // Test NULL pointer (regression test for LE-4708)
    res = le_pos_GetDirection(&direction, NULL);
    LE_INFO("le_pos_GetDirection %s",
            (LE_OK == res) ? "OK" : (LE_OUT_OF_RANGE == res) ? "parameter(s) out of range":"ERROR");
    LE_ASSERT((LE_OK == res) || (LE_OUT_OF_RANGE == res));
}

//--------------------------------------------------------------------------------------------------
/**
 * Test: Get position Fix info.
 *
 */
//--------------------------------------------------------------------------------------------------
static void Testle_pos_TestAcquisitionRate
(
    void
)
{
    uint32_t    acquisitionRate=0;
    le_result_t res = le_pos_SetAcquisitionRate(3000);
    LE_ASSERT((LE_OK == res) || (LE_UNSUPPORTED == res));

    acquisitionRate = le_pos_GetAcquisitionRate();
    LE_ASSERT((3000 == acquisitionRate) || (DEFAULT_ACQUISITION_RATE == acquisitionRate));

    res = le_pos_SetAcquisitionRate(0);
    LE_ASSERT((LE_OUT_OF_RANGE == res) || (LE_UNSUPPORTED == res));

    res = le_pos_SetAcquisitionRate(1000);
    LE_ASSERT((LE_OK == res) || (LE_UNSUPPORTED == res));

    acquisitionRate = le_pos_GetAcquisitionRate();
    LE_ASSERT((1000 == acquisitionRate) || (DEFAULT_ACQUISITION_RATE == acquisitionRate));
}

//--------------------------------------------------------------------------------------------------
/**
 * Setting/Getting enabled GPS NMEA sentences mask
 *
 */
//--------------------------------------------------------------------------------------------------
// static void Testle_pos_ActivateGpsNmeaSentences
// (
//     void
// )
// {
//     int i = 0;
//     le_gnss_NmeaBitMask_t nmeaMask;
//     le_gnss_NmeaBitMask_t saveNmeaMask;

//     LE_TEST_INFO("Start Test TestLeGnssNmeaSentences");

//     // Test 1: bit mask too big, error
//     nmeaMask = (LE_GNSS_NMEA_SENTENCES_MAX << 1) | 1;
//     LE_TEST_OK(LE_BAD_PARAMETER == le_gnss_SetNmeaSentences(nmeaMask),
//             "Set invalid NMEA mask %d", nmeaMask);

//     // Test 2: test all bits from the bit mask
//     le_gnss_NmeaBitMask_t nmeaSentencesList[] = {
//         LE_GNSS_NMEA_MASK_GPGGA,
//         LE_GNSS_NMEA_MASK_GPGSA,
//         LE_GNSS_NMEA_MASK_GPGSV,
//         LE_GNSS_NMEA_MASK_GPRMC,
//         LE_GNSS_NMEA_MASK_GPVTG,
//         LE_GNSS_NMEA_MASK_GPGLL,
// #ifdef LE_CONFIG_LINUX
//         LE_GNSS_NMEA_MASK_GLGSV,
//         LE_GNSS_NMEA_MASK_GNGNS,
//         LE_GNSS_NMEA_MASK_GNGSA,
//         LE_GNSS_NMEA_MASK_GAGGA,
//         LE_GNSS_NMEA_MASK_GAGSA,
//         LE_GNSS_NMEA_MASK_GAGSV,
//         LE_GNSS_NMEA_MASK_GARMC,
//         LE_GNSS_NMEA_MASK_GAVTG,
// #else
//         LE_GNSS_NMEA_MASK_GPGNS,
//         LE_GNSS_NMEA_MASK_GPZDA,
//         LE_GNSS_NMEA_MASK_GPGST,
// #endif

//         0
//     };

//     for (i = 0; nmeaSentencesList[i]; i++)
//     {
//         LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(nmeaSentencesList[i]),
//                 "Set NMEA sentence mask to 0x%08X",nmeaSentencesList[i]);
//         LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask), "Get NMEA sentences");
//         LE_TEST_OK(nmeaMask == nmeaSentencesList[i],
//                 "Confirm NMEA sentence mask is set to 0x%08X", nmeaSentencesList[i]);
//     }

//     // @deprecated, PQXFI is deprecated. PTYPE is used instead.
//     LE_TEST_BEGIN_SKIP(!LINUX_OS, 21);
//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(LE_GNSS_NMEA_MASK_PTYPE),
//             "Set NMEA sentence mask to %08X",LE_GNSS_NMEA_MASK_PTYPE);
//     LE_TEST_OK(le_gnss_GetNmeaSentences(&nmeaMask), "Get NMEA sentences");
//     LE_TEST_OK(nmeaMask == LE_GNSS_NMEA_MASK_PTYPE,
//             "Confirm NMEA sentence mask is set to %08X",
//             LE_GNSS_NMEA_MASK_PTYPE);

//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(LE_GNSS_NMEA_MASK_PSTIS),
//             "Set NMEA sentence mask to %08X", LE_GNSS_NMEA_MASK_PSTIS);
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask), "Get NMEA sentences");
//     LE_TEST_OK((LE_GNSS_NMEA_MASK_PSTIS == nmeaMask) || (0 == nmeaMask),
//             "Confirm NMEA sentence mask is set to %08X or 0", LE_GNSS_NMEA_MASK_PSTIS);

//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(LE_GNSS_NMEA_MASK_GPGRS),
//             "set NMEA sentence mask to %08X", LE_GNSS_NMEA_MASK_GPGRS);
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask),
//             "Get NMEA sentences");
//     LE_TEST_OK((LE_GNSS_NMEA_MASK_GPGRS == nmeaMask) || (0 == nmeaMask),
//             "Confirm NMEA sentence mas is set to %08X or 0", LE_GNSS_NMEA_MASK_GPGRS);

//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(LE_GNSS_NMEA_MASK_DEBUG),
//             "Set NMEA sentence mask to %08X", LE_GNSS_NMEA_MASK_DEBUG);
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask), "Get NMEA sentences");
//     LE_TEST_OK((LE_GNSS_NMEA_MASK_DEBUG == nmeaMask) || (0 == nmeaMask),
//             "Confirm NMEA sentence mask is set to %08X or 0", LE_GNSS_NMEA_MASK_DEBUG);

//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(LE_GNSS_NMEA_MASK_GPDTM),
//             "Set NMEA sentence mask to %08X", LE_GNSS_NMEA_MASK_GPDTM);
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask),
//             "Get NMEA sentences");
//     LE_TEST_OK((LE_GNSS_NMEA_MASK_GPDTM == nmeaMask) || (0 == nmeaMask),
//             "Confirm NMEA sentence mask is set to %08X or 0", LE_GNSS_NMEA_MASK_GPDTM);

//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(LE_GNSS_NMEA_MASK_GAGNS),
//             "Set NMEA sentences to %08X", LE_GNSS_NMEA_MASK_GAGNS);
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask),
//             "Get NMEA sentences");
//     LE_TEST_OK((LE_GNSS_NMEA_MASK_GAGNS == nmeaMask) || (0 == nmeaMask),
//             "Confirm NMEA sentence mask is set to %08X or 0", LE_GNSS_NMEA_MASK_GAGNS);
//     LE_TEST_END_SKIP();

//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(LE_GNSS_NMEA_MASK_GPGLL),
//             "Set NMEA sentence mask to %08X", LE_GNSS_NMEA_MASK_GPGLL);
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask),
//             "Get NMEA sentences");
//     LE_TEST_OK((LE_GNSS_NMEA_MASK_GPGLL == nmeaMask) || (0 == nmeaMask),
//             "Confirm NMEA sentence mask is set to %08X or 0", LE_GNSS_NMEA_MASK_GPGLL);

//     // Test 3: test bit mask combinations
//     saveNmeaMask = LE_GNSS_NMEA_MASK_GPGGA | LE_GNSS_NMEA_MASK_GPGSA | LE_GNSS_NMEA_MASK_GPGSV;

//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(saveNmeaMask),
//             "Set NMEA sentence mask to %08X", saveNmeaMask);
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask),
//             "Get NMEA sentences");
//     LE_TEST_OK(nmeaMask == saveNmeaMask,
//             "Confirm NMEA sentence mask is set to %08X", saveNmeaMask);

//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(saveNmeaMask | LE_GNSS_NMEA_MASK_GPRMC),
//             "Set NMEA sentence mask to %08X", (saveNmeaMask | LE_GNSS_NMEA_MASK_GPRMC));
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask), "Get NMEA sentences");
//     LE_TEST_OK(((saveNmeaMask | LE_GNSS_NMEA_MASK_GPRMC) == nmeaMask) || (saveNmeaMask == nmeaMask),
//             "Confirm NMEA mask is set correctly");

//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(saveNmeaMask | LE_GNSS_NMEA_MASK_GPGLL),
//             "Set NMEA sentence mask to %08X", (saveNmeaMask | LE_GNSS_NMEA_MASK_GPGLL));
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask), "Get NMEA sentences");
//     LE_TEST_OK(((saveNmeaMask | LE_GNSS_NMEA_MASK_GPGLL) == nmeaMask) || (saveNmeaMask == nmeaMask),
//             "Confirm NMEA mask is set correctly");

//     LE_TEST_BEGIN_SKIP(!LINUX_OS, 9);
//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(saveNmeaMask | LE_GNSS_NMEA_MASK_DEBUG),
//             "Set NMEA sentence mask to %08X", (saveNmeaMask | LE_GNSS_NMEA_MASK_DEBUG));
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask), "Get NMEA sentences");
//     LE_TEST_OK(((saveNmeaMask | LE_GNSS_NMEA_MASK_DEBUG) == nmeaMask) ||
//             (saveNmeaMask == nmeaMask), "Confirm NMEA sentence mask is set correctly");

//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(saveNmeaMask | LE_GNSS_NMEA_MASK_GPDTM),
//             "Set NMEA sentence mask to %08X", (saveNmeaMask | LE_GNSS_NMEA_MASK_GPDTM));
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask), "Get NMEA sentences");
//     LE_TEST_OK(((saveNmeaMask | LE_GNSS_NMEA_MASK_GPDTM) == nmeaMask) || (saveNmeaMask == nmeaMask),
//             "Confirm NMEA sentence mask is set correctly");

//     LE_TEST_OK(LE_OK == le_gnss_SetNmeaSentences(saveNmeaMask | LE_GNSS_NMEA_MASK_GAGNS),
//             "Set NMEA sentence mask to %08X", (saveNmeaMask | LE_GNSS_NMEA_MASK_GAGNS));
//     LE_TEST_OK(LE_OK == le_gnss_GetNmeaSentences(&nmeaMask), "Get NMEA sentence mask");
//     LE_TEST_OK(((saveNmeaMask | LE_GNSS_NMEA_MASK_GAGNS) == nmeaMask) || (saveNmeaMask == nmeaMask),
//             "Confirm NMEA sentence mask is set correctly");
//     LE_TEST_END_SKIP();

//     LE_TEST_INFO("Test Testle_pos_ActivateGpsNmeaSentences OK");
// }

//--------------------------------------------------------------------------------------------------
/**
 * Reset the GPS NMEA sentences mask
 *
 */
//--------------------------------------------------------------------------------------------------
        // static void Testle_pos_ResetGpsNmeaSentences
        // (
        // void
        // )
        // {
        // le_gnss_NmeaBitMask_t gpsNmeaMask = 0;
        // le_gnss_NmeaBitMask_t nmeaMask;
        // LE_ASSERT_OK(le_gnss_SetNmeaSentences(gpsNmeaMask));
        // LE_ASSERT_OK(le_gnss_GetNmeaSentences(&nmeaMask));
        // LE_ASSERT(nmeaMask == gpsNmeaMask);
        // }

//--------------------------------------------------------------------------------------------
/**
 * Remove the movement handlers
 *
 */
//--------------------------------------------------------------------------------------------------
static void RemoveMovementHandlers
(
    void
)
{
    le_pos_RemoveMovementHandler(NavigationHandlerRef);
    NavigationHandlerRef = NULL;

    le_pos_RemoveMovementHandler(FiftyNavigationHandlerRef);
    FiftyNavigationHandlerRef = NULL;
}

//--------------------------------------------------------------------------------------------------
/**
 * App init.
 *
 */
//--------------------------------------------------------------------------------------------------
COMPONENT_INIT
{
    //le_posCtrl_ActivationRef_t      activationRef;
    le_thread_Ref_t                 navigationThreadRef;

    LE_INFO("======== Positioning Test started  ========");
    Testle_pos_TestAcquisitionRate();
    // Add Position Handler Test
    navigationThreadRef = le_thread_Create("NavigationThread",NavigationThread,NULL);
    le_thread_Start(navigationThreadRef);

    LE_INFO("Get initial position");
    Testle_pos_GetInfo();
    //LE_INFO("Request activation of the positioning service");
    //LE_ASSERT((activationRef = le_posCtrl_Request()) != NULL);
    //LE_INFO("Wait 120 seconds for a 3D fix");
    //le_thread_Sleep(120);
    le_thread_Sleep(5);
    //Testle_pos_DistanceResolutionUpdate();
    Testle_pos_GetInfo();
    le_thread_Sleep(1);
    LE_INFO("Release the positioning service");
    //le_posCtrl_Release(activationRef);

    //Remove the movement handlers
    RemoveMovementHandlers();
    // Stop Navigation thread
    le_thread_Cancel(navigationThreadRef);

    //Testle_pos_ActivateGpsNmeaSentences();
    //Testle_pos_ResetGpsNmeaSentences();

    LE_INFO("======== Positioning Test finished ========");

    exit(EXIT_SUCCESS);
}

I am not sure what everything is, but it does give me both 2d and 3d location using this method.