GPSd on Android/AOSP: --------------------- The files in this path, as well as the Android.bp in the path below, are used for building the GPSd client as a platform library for AOSP. Five components are currently implemented; gpsd executable, Shared library, libgps (builds libgps.so) Static library, libgps_static Test client, gps_test (builds executable gps_test) Android GNSS 1.1 HAL, (builds android.hardware.gnss@1.1-service.gpsd) Build instructions: ------------------- 1) clone gpsd into your Android build tree at; platform/external/gpsd 2) initialize your build environment for your target device; cd platform/ . build/envsetup.sh lunch 3) build the component; m libgps or m gps_test This will build the component and output it at; platform/out/target/product//vendor/ As a platform dependency: ------------------------- You can add the components to your device's dependency list by adding it to the PRODUCT_PACKAGES variable in one of your device's makefiles. For example; PRODUCT_PACKAGES += libgps gps_test Following this, performing a full build for your device will incorporate the component(s) into the vendor partition image for your device. Note that for the HAL, you also have to include some additional components; PRODUCT_PACKAGES += android.hardware.gnss@1.1 \ android.hardware.gnss@1.1-impl \ android.hardware.gnss@1.1-service.gpsd Running gps_test: ----------------- gps_test is an extremely simple test client that continually prints fix and SV details to the console. It accepts one parameter, which is the IP address or hostname of a running instance of GPSd. Building other components using libgps: --------------------------------------- gps_test is a good starting point for building other components using libgps. libgps can be added either as a shared object or static linked. For use as a shared object, add "libgps" to the list of shared_libs that your module depends on. For static, use "libgps_static" in the list of static_libs. GPSd: ----- The only configuration needed for GPSd is to set a system property with the launch parameters to use. This should be appended to the PRODUCT_PROPERTY_OVERRIDES variable in an appropriate device specific makefile. This is a comma-separated list of parameters. For example (note that this is the default if unspecified); PRODUCT_PROPERTY_OVERRIDES += \ service.gpsd.parameters=-Nn,-D2,/dev/ttyACM0,/dev/ttyACM1 GNSS 1.1 HAL for Android: ------------------------- This is the part that wraps everything together on Android. It makes it possible for location services on Android to be fed location data by gpsd. The HAL is able to operate with or without gpsd running on the same device. By default, the HAL will look to localhost:2947 for gpsd, however, it is possible to change both the host and port by setting the system properties "service.gpsd.host" and "service.gpsd.port" to reflect the hostname or ip address of the gpsd host, and the port number it is listening on. The HAL also has a special automotive mode that can be activated by setting the system property "service.gpsd.automotive" to any value. When the automotive mode is activated, the HAL will feed the location services with the last known fix coordinates until the first valid fix has been received. If the fix is later lost, it will correctly NOT continue to feed a fix. The updated fix will be stored in persistent system properties every 30 seconds while there is a valid fix. The purpose of automotive mode is to make it possible to immediately input a destination into navigation software without having to wait for a valid fix. A valid fix can take minutes to establish, even with a clear view of the sky, but worse, a fix can even be impossible if the vehicle is parked underground or in any structure that effectively blocks the signals. The consequence is that without automotive mode, it would be necessary to drive the vehicle from its current location to somewhere with a clear view of the sky, and then wait potentially several minutes for a valid fix before being able to enter a destination. With automotive mode, it is possible to immediately enter a destination, and begin driving. Once a fix has been established, the navigation software will update to the current location on the route. Note that in addition to including the components, it is also necessary to make adjustments to the device's selinux policy in order for the HAL to properly interact with the network. A typical policy file will be provided. VERY IMPORTANT: SEPOLICY! ------------------------- In the old days prior to Android 8, it was possible to achieve full system functionality by simply disabling selinux enforcement. This is no longer enough with Android 8+, since the init process does its own selinux checks before it will even attempt to launch a daemon. And not only this, but it is also very important to enforce a certain degree of security. As such, appropriate policy for the GPSd process and the GNSS HAL are included, however, it is necessary for it to be included in the device configuration. Add the following to an appropriate device specific makefile; BOARD_SEPOLICY_DIRS += external/gpsd/android/sepolicy Putting it all together: ------------------------ Adding the following to your device's makefile will build and install GPSd and its GNSS HAL: PRODUCT_PACKAGES += android.hardware.gnss@1.1 \ android.hardware.gnss@1.1-impl \ android.hardware.gnss@1.1-service.gpsd \ gpsd PRODUCT_PROPERTY_OVERRIDES += \ service.gpsd.parameters=-Nn,-G,/dev/ttyACM0 BOARD_SEPOLICY_DIRS += external/gpsd/android/sepolicy Contact: Adam Serbinski