[26.Aug.2011][Dev] GPS Libraries v2.1 with AGPS support for HD2 Gingerbread

Status
Not open for further replies.
Search This thread

tytung

Senior Member
Jun 21, 2010
3,574
15,005
sites.google.com
This implementation is based on GPS Library in HTC-HD2 Android Libraries. (Thanks to dan1j3l.)
You can find my modified source code and AGPS development info in the second post.

New Features:
  • Show the number of satellites before getting a location fix.
  • Show or hide the GPS symbol in the status bar instantly when you start or stop a GPS app.
  • Support the leap seconds. (Thanks to arne182.)
  • Modify the Accuracy (i.e. Error in meter) to be more reasonable.
  • Add AGPS interface. (Won't see "no AGPS interface in agps_data_conn_open" in logcat now.)
  • Add the missing functions to receive the NTP, XTRA, and SUPL settings from gps.conf.
  • Add AGPS implementation including injecting AGPS data (xtra.bin) and NTP time into the gpsOne engine.
  • Hide Fix/Sats info and make the GPS symbol in the status bar flashing when you go to basement or tunnel.
  • Show DOP/HDOP/VDOP values in GPS Status.
  • Show Altitude above Geoid (i.e. mean sea level) and Geoid height. (You will see both of them in GPS Status. The value within parentheses is Geoid height.)
  • Show correct SNR (Signal to noise ratio) value.
  • Activate the AGPS data injection. (You can get a cold lock very quickly due to the working AGPS.) (Thanks to qwerty_7564.)

Known issues:
  • Accuracy value is for reference only.
    • Position Accuracy (meter) = HDOP (unitless) * Measurement Precision (meter). (Please confirm whether this formula is correct.)
    • We only get the correct HDOP value, and we assume the value of Measurement Precision, and then do a post calculation to get Accuracy. So don't trust it completely.
  • Some ROMs are not compatible with NMEA version of libgps.so.
    • Those ROMs don't set the correct permission to /dev/smd27, so libgps.so cannot read NMEA sentences from it.
    • The solution is to flash GPS_NMEA_permission_update.zip for correcting the permission after booting.
  • Some ROMs suffer from the "GPS off-and-on" bug.
    • Those ROMs can shutdown the gpsOne engine properly when turning off GPS setting using gps_cleanup(), but they cannot restart the gpsOne engine again because gps_init() is never called when turning GPS setting on after turning it off.
    • It's a Gingerbread bug which is fixed by applying this commit from the source code.
    • If you cannot modify the source code, the workaround is to set/add GPS1_CLEANUP_ENABLED=0 into gps.conf to avoid doing full cleanup.

Downloads:

Mod edit: Links removed

Installation for CWM:
  • Place your downloaded file (GPS_Libraries_v1.x_for_HD2_Gingerbread_update.zip) in the SD card.
  • Enter CWM (ClockworkMod) Recovery
    • MAGLDR 1.13: Hold "Power" button during boot to enter MAGLDR, and then select "AD Recovery" or "Boot AD SD" (if ever copied CWM's initrd.gz and zImage to SD) to enter CMW.
    • cLK 1.4.0.1: Hold "Home" button during boot to enter CMW.
  • Choose install zip from sdcard and locate your downloaded file to finish the installation.
  • All done.

You can install GPS Status & Toolbox or GPS TEST to test the new libs.

How to inject the AGPS data (xtra.bin):
It will be done in the following situations. (Data connection, WiFi or 3G, is a must in all of them.)
  • When you turn off GPS in setting and turn it on again.
  • When you keep GPS on and reboot. (also inject NTP time)
  • When you keep GPS on and run Leo AGPS Injector. (also inject NTP time)
  • When you keep GPS on and run GPS Status. (or any similar apps to download AGPS)
    • AGPS will be downloaded when you start GPS Status if AGPS is older than X days or Y hours where X and Y are read from the settings.
    • Or you can download it manually from Tools.
  • When you keep GPS on and replace with the modified gps.conf to set AGPS auto-download intervals when using GPS libs v1.8 or above.
    • AGPS auto-download intervals are disabled in default if you don't modify gps.conf.

How to verify if AGPS works or not:
  • When AGPS works, you will be able to get a full lock (e.g. 7/7, 8/8, or 9/9) in cold start less than 20 seconds if you're outdoor in a sunny day.
    (Full locks mean fix and satellites equals to each other.)
  • If AGPS not works, you may see 5/7, 6/7, 5/8 (fix is less than satellites) right after you get a lock.

How /system/etc/gps.conf works?
There're three stock gps.conf in AOSP repository for different regions.
1. gps.conf_AS_SUPL (Asia)
2. gps.conf_EU_SUPL (Europe)
3. gps.conf_US_SUPL (North-America)
# Explanations are added. Don't copy them below to your gps.conf.
NTP_SERVER=north-america.pool.ntp.org   (Used for NTP time injection)
XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin   (Used for AGPS data xtra.bin injection. Randomly choose from one of these three servers and download xtra.bin from it.)
XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin
XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin
SUPL_HOST=supl.google.com   (Be read but never be used)
SUPL_PORT=7276   (Be read but never be used)
SUPL_HOST and SUPL_PORT are not used in current GPS libs implementation, so you can delete them.

Supported extra settings for /system/etc/gps.conf when using v2.0 or above. (Only valid for HD2)
Beginning with character # means this line is a comment, so you can remove it.
You don't need to add any of them if you don't know what they are.
Code:
###########################################
# Enable/disable automatic (periodic)     #
# download requests of gpsOneXTRA         #
# assistance data to client               #
# Range: 0 to 1                           #
# Default: 0 (Disabled)                   #
###########################################
[COLOR="Red"]GPS1_XTRA_AUTO_DOWNLOAD_ENABLED=0[/COLOR]

###########################################
# Time (in hours) between automatic       #
# download requests of gpsOneXTRA         #
# assistance data to client               #
# Range: 1 to 168 (168 = hr in a week)    #
# Default: 24 hr                          #
###########################################
[COLOR="red"]GPS1_XTRA_DOWNLOAD_INTERVAL=24[/COLOR]

###########################################
# Enable/disable to shutdown the gpsOne   #
# engine properly on GPS off              #
# Range: 0 to 1                           #
# Default: 1 (Enabled)                    #
###########################################
[COLOR="red"]GPS1_CLEANUP_ENABLED=1[/COLOR]

###########################################
# Time (in seconds) between invoking      #
# pdsm_get_position()                     #
# Range: 2 to 120                         #
# Default: 2 seconds                      #
###########################################
[COLOR="red"]GPS1_SESSION_TIMEOUT=2[/COLOR]

AGPS works in v1.7. The following workaround is for v1.6 and below versions only.
Instructions for the AGPS data Injection.
There're at least three methods (I recommend free apps here.) to be able to inject AGPS data.
GScript method is the base, so I describe it as follows.
Please download libgps_Switcher_v1.6.zip, decompress it to your SD card, and follow the steps below if you want AGPS support.
You need to repeat steps 4 and 5 every time when you need AGPS.
  1. Put the following files in the SD card.
    /sdcard/ClockworkMod/GPS_Libraries_v1.6_for_HD2_Gingerbread_update.zip (Remember to download it.)
    /sdcard/ClockworkMod/libgps_with_AGPS_update.zip (Remember to download it.)
    /sdcard/GScript/1_install_Magic_AGPS.sh
    /sdcard/GScript/2_install_libgps_v1.6.sh
  2. Install GScript or GScript Lite.
  3. Add 1_install_Magic_AGPS.sh and 2_install_libgps_v1.6.sh to GScript.
  4. Run 1_install_Magic_AGPS.sh, and the phone will hot reboot itself.
    After reboot, make sure you have network connection, and wait at lease 1 min to let Android download and inject AGPS data.
  5. Run 2_install_libgps_v1.6.sh, and the phone will hot reboot itself.
    After reboot, you can enjoy the quicker GPS cold lock.

Changelog:
  • Version 2.1 NMEA|RPC - (Aug. 26)
    • Both: Remove or reduce some debugging info output to logcat. (Cleanup and optimization stage.)
    • Both: Output NMEA or RPC version and parsed settings of gps.conf to logcat.
  • Version 2.0 NMEA|RPC - (Aug. 6)
    • Both: Add GPS1_SESSION_TIMEOUT in gps.conf to set time between invoking pdsm_get_position(). (Default is 2 seconds. Range is 2~120 seconds.)
    • RPC: Hide Fix/Sats info and make the GPS symbol in the status bar flashing when you go to basement or tunnel. (NMEA already has this feature. This is for RPC version.)
  • Version 1.9 NMEA|RPC - (Jul. 29)
    • Both: Include v1.7's latest gps.htcleo.so, gps.leo.so, and gps.bravo.so again.
    • Both: Add a new thread for getting GPS location locks: (Credits to qwerty_7564)
      • gps_get_position() is called in its own thread using callbacks to request the next position.
      • remove unnecessary sleep and the can_send flag in pdsm_get_position().
    • Both: Remove unnecessary mallocs since there is a performance cost for use. (Credits to qwerty_7564)
    • Both: Shutdown the gpsOne engine properly on GPS off. (i.e. turning off GPS from settings) (Credits to qwerty_7564)
    • Both: Support loading the GPS1_CLEANUP_ENABLED flag from gps.conf. (Set it to 0 if you use a ROM that has "GPS off-and-on bug".)
    • Both: Parse gps.conf and invoke pdsm_xtra_set_auto_download_params() only once until reboot.
    • Both: Support the customized fix update frequency, which is set by a GPS tracking app, via gps_get_position(int timeout).
    • NMEA: Add a timer thread for supporting the customized fix update frequency which is set by a GPS tracking app.
      (As a result, we won't see the fast-forwarding effect in time field in GPS Status, and the random hot reboot issue in NMEA version may be fixed too.)
  • Version 1.8 NMEA|RPC - (Jul. 19)
    • Both: Support automatic (periodic) download requests of gpsOneXTRA assistance data to client. (Default is disabled.) (Credits to qwerty_7564.)
    • Both: Support enabling xtra.bin download requests and setting download interval from gps.conf.
    • Both: Include v1.6's old gps.htcleo.so, gps.leo.so, and gps.bravo.so. (It seems that v1.7's new gps.xxx.so causes the battery drain in some ROMs, but not all ROMs.)
    • NMEA: Disable $GPGSV report to make NMEA version more stable. (It seems that random hot reboot issue is reduced.)
    • RPC: Support the negative altitude. (Credits to arne182.)
    • RPC: Fix the incorrect HDOP value.
  • Version 1.7 NMEA|RPC - (Jul. 10)
    • Both: Activate the AGPS data injection. (You can get a cold lock very quickly due to the working AGPS.) (Thanks to qwerty_7564.)
    • Both: Include updated gps.htcleo.so, gps.leo.so, and gps.bravo.so. (Fix suspension issues.) (Thanks to rmcc.)
    • RPC: Disable NMEA sentences output and enable RPC Callback function output.
  • Version 1.6 - (Jul. 05)
    • Set Measurement Precision to 10.0 meters.
  • Version 1.5 - (Jun. 26)
    • Support daylight saving time (DST).
  • Version 1.4 - (Jun. 24)
    • A whole new version using NMEA sentences.
    • Hide Fix/Sats info when you go to basement or tunnel.
    • Show DOP/HDOP/VDOP values in GPS Status.
    • Show Altitude above Geoid (i.e. mean sea level) and Geoid height. (You will see both of them in GPS Status. The value within parentheses is Geoid height.)
    • Show correct SNR (Signal to noise ratio) value.
    • Disable AGPS Ephemeris data (xtra.bin) injection.
    • Assume Measurement Precision to 5.0 meters.
    • Include updated gps.htcleo.so, gps.leo.so, and gps.bravo.so. (Only one file will be used by your ROM. I suggest to delete the other two files in this zip file, and then flash it.)
  • Version 1.3 - (Jun. 15)
    • Fix the reboot issue. (In v1.2, reboot your phone when the GPS setting is off, you will enter the boot loop.)
    • Inject the correct time to the gpsOne engine.
    • Comment out some debugging data.
  • Version 1.2 - (Jun. 12)
    • Support injecting AGPS Ephemeris data (xtra.bin) into the gpsOne engine by implementing pdsm_xtra_set_data().
    • Support injecting time into the gpsOne engine by implementing pdsm_xtra_inject_time_info().
    • Assume Measurement Precision to 2.5 meters.
  • Version 1.1 - (Jun. 02)
    • Assume Measurement Precision to 2.0 meters.
  • Version 1.0 - (May 28)
    • Show the number of satellites before getting a location fix.
    • Show or hide the GPS icon in the status bar instantly when you start or stop a GPS app.
    • Support the leap seconds. (Thanks to arne182 for figuring it out.)
    • Modify the Accuracy to be more reasonable. (Assume Measurement Precision to 10 meters)
    • Add AGPS interface. (Won't see "no AGPS interface in agps_data_conn_open" in logcat now.)
    • Add the missing functions to receive the NTP, XTRA, and SUPL settings from gps.conf.

Credits: the XDAndroid Project, dan1j3l, rmcc, tytung, arne182, clyder, ozkaya, qwerty_7564, and everyone who participated in the related discussion or helped test the libs.
 

Attachments

  • libgps_Switcher_v1.6.zip
    1.9 KB · Views: 2,038
  • GPS_NMEA_permission_update.zip
    152.1 KB · Views: 5,544
  • android-sdk-platform-tools_r6-lite_for_windows.zip
    240.5 KB · Views: 891
Last edited by a moderator:

tytung

Senior Member
Jun 21, 2010
3,574
15,005
sites.google.com
AGPS Development is finished.

My modified source code of libgps.so has been uploaded to Github. https://github.com/tytung/android_hardware_leo_libgps

Notice:
The source code is released under the GNU General Public License version 3 (GPLv3).
So you must release your modified source code if you would like to release a modified libgps.so.

Development info:
Credits: tytung, clyder, ozkaya, qwerty_7564, and everyone who participated in the related discussion or helped test the libs.
 
Last edited:

shendan

Member
Sep 7, 2010
49
0
Nice work~testing
After I mod the gps.conf, the google map works well
but the GPS Test Plus can't find any satellites
 
Last edited:

YZ

Retired Forum Moderator
Mar 24, 2010
1,665
3,430
Wow! Awesome to have developers like you ! Keep up the good work :)

Sent from my HTC HD2 using XDA Premium App
 

ksubedi

Inactive Recognized Developer
Nov 18, 2010
271
1,107
Boulder, CO, US
Thanks a lot tytung, just what i was waiting for. Thanks a lot for everything you have done for hd2. I will try and report soon. :)
 

Bib_x

Senior Member
Oct 10, 2007
962
38
What about standby settings? Can i set my gps to work while phone is in standby? (e.g. log my track when jogging)

With Run.GPS it doesn´t work.
 
  • Like
Reactions: Max Mustermann123

shendan

Member
Sep 7, 2010
49
0
It can make the gps work better ,the old one can't work with gps.conf,the lastest one improve this
 

tytung

Senior Member
Jun 21, 2010
3,574
15,005
sites.google.com
i've just tried with typhoon 3.3.3 and before flash the new library more than 3 minutes and i'ven't got fix, after flash the new library istant fix.
Great job Tytung

I reduce fix_frequency and timeout value of gps_get_position(), so it may improve the time you get a location fix.

However, there're too many environmental factors to affect getting the location fix time.
So it still needs more people to test and confirm it.
 

jaba_cz

Senior Member
Jan 2, 2008
119
23
Prague
Hi and thanks a lot for taking care of this for us, who are too dummy to make any coding :)

I want to publish some additional info I have found.
I was playing with libs from MIUI as there gps works better.
The point I want to pick up is this: there is line in build.prop
"ro.ril.def.agps.mode=2"

When I switched the HW lib and added this line to build prop, the cold start shortened from 3-5 min into 30-50 sec.

Maybe it's not anything to help you, as you can go other way. But ... for any case I wanted to share :)

edit: PS. I'm with customized GBX12
 
Last edited:

YZ

Retired Forum Moderator
Mar 24, 2010
1,665
3,430
WOW!

Wow Tytung!! I got gps signal in 2 seconds!!

the only negative thing I can say is that the gps signal was low. Used gps test plus, and the gps signal was at 30, usally it's 50- 70.
 
Status
Not open for further replies.

Top Liked Posts

  • There are no posts matching your filters.
  • 265
    This implementation is based on GPS Library in HTC-HD2 Android Libraries. (Thanks to dan1j3l.)
    You can find my modified source code and AGPS development info in the second post.

    New Features:
    • Show the number of satellites before getting a location fix.
    • Show or hide the GPS symbol in the status bar instantly when you start or stop a GPS app.
    • Support the leap seconds. (Thanks to arne182.)
    • Modify the Accuracy (i.e. Error in meter) to be more reasonable.
    • Add AGPS interface. (Won't see "no AGPS interface in agps_data_conn_open" in logcat now.)
    • Add the missing functions to receive the NTP, XTRA, and SUPL settings from gps.conf.
    • Add AGPS implementation including injecting AGPS data (xtra.bin) and NTP time into the gpsOne engine.
    • Hide Fix/Sats info and make the GPS symbol in the status bar flashing when you go to basement or tunnel.
    • Show DOP/HDOP/VDOP values in GPS Status.
    • Show Altitude above Geoid (i.e. mean sea level) and Geoid height. (You will see both of them in GPS Status. The value within parentheses is Geoid height.)
    • Show correct SNR (Signal to noise ratio) value.
    • Activate the AGPS data injection. (You can get a cold lock very quickly due to the working AGPS.) (Thanks to qwerty_7564.)

    Known issues:
    • Accuracy value is for reference only.
      • Position Accuracy (meter) = HDOP (unitless) * Measurement Precision (meter). (Please confirm whether this formula is correct.)
      • We only get the correct HDOP value, and we assume the value of Measurement Precision, and then do a post calculation to get Accuracy. So don't trust it completely.
    • Some ROMs are not compatible with NMEA version of libgps.so.
      • Those ROMs don't set the correct permission to /dev/smd27, so libgps.so cannot read NMEA sentences from it.
      • The solution is to flash GPS_NMEA_permission_update.zip for correcting the permission after booting.
    • Some ROMs suffer from the "GPS off-and-on" bug.
      • Those ROMs can shutdown the gpsOne engine properly when turning off GPS setting using gps_cleanup(), but they cannot restart the gpsOne engine again because gps_init() is never called when turning GPS setting on after turning it off.
      • It's a Gingerbread bug which is fixed by applying this commit from the source code.
      • If you cannot modify the source code, the workaround is to set/add GPS1_CLEANUP_ENABLED=0 into gps.conf to avoid doing full cleanup.

    Downloads:

    Mod edit: Links removed

    Installation for CWM:
    • Place your downloaded file (GPS_Libraries_v1.x_for_HD2_Gingerbread_update.zip) in the SD card.
    • Enter CWM (ClockworkMod) Recovery
      • MAGLDR 1.13: Hold "Power" button during boot to enter MAGLDR, and then select "AD Recovery" or "Boot AD SD" (if ever copied CWM's initrd.gz and zImage to SD) to enter CMW.
      • cLK 1.4.0.1: Hold "Home" button during boot to enter CMW.
    • Choose install zip from sdcard and locate your downloaded file to finish the installation.
    • All done.

    You can install GPS Status & Toolbox or GPS TEST to test the new libs.

    How to inject the AGPS data (xtra.bin):
    It will be done in the following situations. (Data connection, WiFi or 3G, is a must in all of them.)
    • When you turn off GPS in setting and turn it on again.
    • When you keep GPS on and reboot. (also inject NTP time)
    • When you keep GPS on and run Leo AGPS Injector. (also inject NTP time)
    • When you keep GPS on and run GPS Status. (or any similar apps to download AGPS)
      • AGPS will be downloaded when you start GPS Status if AGPS is older than X days or Y hours where X and Y are read from the settings.
      • Or you can download it manually from Tools.
    • When you keep GPS on and replace with the modified gps.conf to set AGPS auto-download intervals when using GPS libs v1.8 or above.
      • AGPS auto-download intervals are disabled in default if you don't modify gps.conf.

    How to verify if AGPS works or not:
    • When AGPS works, you will be able to get a full lock (e.g. 7/7, 8/8, or 9/9) in cold start less than 20 seconds if you're outdoor in a sunny day.
      (Full locks mean fix and satellites equals to each other.)
    • If AGPS not works, you may see 5/7, 6/7, 5/8 (fix is less than satellites) right after you get a lock.

    How /system/etc/gps.conf works?
    There're three stock gps.conf in AOSP repository for different regions.
    1. gps.conf_AS_SUPL (Asia)
    2. gps.conf_EU_SUPL (Europe)
    3. gps.conf_US_SUPL (North-America)
    # Explanations are added. Don't copy them below to your gps.conf.
    NTP_SERVER=north-america.pool.ntp.org   (Used for NTP time injection)
    XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin   (Used for AGPS data xtra.bin injection. Randomly choose from one of these three servers and download xtra.bin from it.)
    XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin
    XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin
    SUPL_HOST=supl.google.com   (Be read but never be used)
    SUPL_PORT=7276   (Be read but never be used)
    SUPL_HOST and SUPL_PORT are not used in current GPS libs implementation, so you can delete them.

    Supported extra settings for /system/etc/gps.conf when using v2.0 or above. (Only valid for HD2)
    Beginning with character # means this line is a comment, so you can remove it.
    You don't need to add any of them if you don't know what they are.
    Code:
    ###########################################
    # Enable/disable automatic (periodic)     #
    # download requests of gpsOneXTRA         #
    # assistance data to client               #
    # Range: 0 to 1                           #
    # Default: 0 (Disabled)                   #
    ###########################################
    [COLOR="Red"]GPS1_XTRA_AUTO_DOWNLOAD_ENABLED=0[/COLOR]
    
    ###########################################
    # Time (in hours) between automatic       #
    # download requests of gpsOneXTRA         #
    # assistance data to client               #
    # Range: 1 to 168 (168 = hr in a week)    #
    # Default: 24 hr                          #
    ###########################################
    [COLOR="red"]GPS1_XTRA_DOWNLOAD_INTERVAL=24[/COLOR]
    
    ###########################################
    # Enable/disable to shutdown the gpsOne   #
    # engine properly on GPS off              #
    # Range: 0 to 1                           #
    # Default: 1 (Enabled)                    #
    ###########################################
    [COLOR="red"]GPS1_CLEANUP_ENABLED=1[/COLOR]
    
    ###########################################
    # Time (in seconds) between invoking      #
    # pdsm_get_position()                     #
    # Range: 2 to 120                         #
    # Default: 2 seconds                      #
    ###########################################
    [COLOR="red"]GPS1_SESSION_TIMEOUT=2[/COLOR]

    AGPS works in v1.7. The following workaround is for v1.6 and below versions only.
    Instructions for the AGPS data Injection.
    There're at least three methods (I recommend free apps here.) to be able to inject AGPS data.
    GScript method is the base, so I describe it as follows.
    Please download libgps_Switcher_v1.6.zip, decompress it to your SD card, and follow the steps below if you want AGPS support.
    You need to repeat steps 4 and 5 every time when you need AGPS.
    1. Put the following files in the SD card.
      /sdcard/ClockworkMod/GPS_Libraries_v1.6_for_HD2_Gingerbread_update.zip (Remember to download it.)
      /sdcard/ClockworkMod/libgps_with_AGPS_update.zip (Remember to download it.)
      /sdcard/GScript/1_install_Magic_AGPS.sh
      /sdcard/GScript/2_install_libgps_v1.6.sh
    2. Install GScript or GScript Lite.
    3. Add 1_install_Magic_AGPS.sh and 2_install_libgps_v1.6.sh to GScript.
    4. Run 1_install_Magic_AGPS.sh, and the phone will hot reboot itself.
      After reboot, make sure you have network connection, and wait at lease 1 min to let Android download and inject AGPS data.
    5. Run 2_install_libgps_v1.6.sh, and the phone will hot reboot itself.
      After reboot, you can enjoy the quicker GPS cold lock.

    Changelog:
    • Version 2.1 NMEA|RPC - (Aug. 26)
      • Both: Remove or reduce some debugging info output to logcat. (Cleanup and optimization stage.)
      • Both: Output NMEA or RPC version and parsed settings of gps.conf to logcat.
    • Version 2.0 NMEA|RPC - (Aug. 6)
      • Both: Add GPS1_SESSION_TIMEOUT in gps.conf to set time between invoking pdsm_get_position(). (Default is 2 seconds. Range is 2~120 seconds.)
      • RPC: Hide Fix/Sats info and make the GPS symbol in the status bar flashing when you go to basement or tunnel. (NMEA already has this feature. This is for RPC version.)
    • Version 1.9 NMEA|RPC - (Jul. 29)
      • Both: Include v1.7's latest gps.htcleo.so, gps.leo.so, and gps.bravo.so again.
      • Both: Add a new thread for getting GPS location locks: (Credits to qwerty_7564)
        • gps_get_position() is called in its own thread using callbacks to request the next position.
        • remove unnecessary sleep and the can_send flag in pdsm_get_position().
      • Both: Remove unnecessary mallocs since there is a performance cost for use. (Credits to qwerty_7564)
      • Both: Shutdown the gpsOne engine properly on GPS off. (i.e. turning off GPS from settings) (Credits to qwerty_7564)
      • Both: Support loading the GPS1_CLEANUP_ENABLED flag from gps.conf. (Set it to 0 if you use a ROM that has "GPS off-and-on bug".)
      • Both: Parse gps.conf and invoke pdsm_xtra_set_auto_download_params() only once until reboot.
      • Both: Support the customized fix update frequency, which is set by a GPS tracking app, via gps_get_position(int timeout).
      • NMEA: Add a timer thread for supporting the customized fix update frequency which is set by a GPS tracking app.
        (As a result, we won't see the fast-forwarding effect in time field in GPS Status, and the random hot reboot issue in NMEA version may be fixed too.)
    • Version 1.8 NMEA|RPC - (Jul. 19)
      • Both: Support automatic (periodic) download requests of gpsOneXTRA assistance data to client. (Default is disabled.) (Credits to qwerty_7564.)
      • Both: Support enabling xtra.bin download requests and setting download interval from gps.conf.
      • Both: Include v1.6's old gps.htcleo.so, gps.leo.so, and gps.bravo.so. (It seems that v1.7's new gps.xxx.so causes the battery drain in some ROMs, but not all ROMs.)
      • NMEA: Disable $GPGSV report to make NMEA version more stable. (It seems that random hot reboot issue is reduced.)
      • RPC: Support the negative altitude. (Credits to arne182.)
      • RPC: Fix the incorrect HDOP value.
    • Version 1.7 NMEA|RPC - (Jul. 10)
      • Both: Activate the AGPS data injection. (You can get a cold lock very quickly due to the working AGPS.) (Thanks to qwerty_7564.)
      • Both: Include updated gps.htcleo.so, gps.leo.so, and gps.bravo.so. (Fix suspension issues.) (Thanks to rmcc.)
      • RPC: Disable NMEA sentences output and enable RPC Callback function output.
    • Version 1.6 - (Jul. 05)
      • Set Measurement Precision to 10.0 meters.
    • Version 1.5 - (Jun. 26)
      • Support daylight saving time (DST).
    • Version 1.4 - (Jun. 24)
      • A whole new version using NMEA sentences.
      • Hide Fix/Sats info when you go to basement or tunnel.
      • Show DOP/HDOP/VDOP values in GPS Status.
      • Show Altitude above Geoid (i.e. mean sea level) and Geoid height. (You will see both of them in GPS Status. The value within parentheses is Geoid height.)
      • Show correct SNR (Signal to noise ratio) value.
      • Disable AGPS Ephemeris data (xtra.bin) injection.
      • Assume Measurement Precision to 5.0 meters.
      • Include updated gps.htcleo.so, gps.leo.so, and gps.bravo.so. (Only one file will be used by your ROM. I suggest to delete the other two files in this zip file, and then flash it.)
    • Version 1.3 - (Jun. 15)
      • Fix the reboot issue. (In v1.2, reboot your phone when the GPS setting is off, you will enter the boot loop.)
      • Inject the correct time to the gpsOne engine.
      • Comment out some debugging data.
    • Version 1.2 - (Jun. 12)
      • Support injecting AGPS Ephemeris data (xtra.bin) into the gpsOne engine by implementing pdsm_xtra_set_data().
      • Support injecting time into the gpsOne engine by implementing pdsm_xtra_inject_time_info().
      • Assume Measurement Precision to 2.5 meters.
    • Version 1.1 - (Jun. 02)
      • Assume Measurement Precision to 2.0 meters.
    • Version 1.0 - (May 28)
      • Show the number of satellites before getting a location fix.
      • Show or hide the GPS icon in the status bar instantly when you start or stop a GPS app.
      • Support the leap seconds. (Thanks to arne182 for figuring it out.)
      • Modify the Accuracy to be more reasonable. (Assume Measurement Precision to 10 meters)
      • Add AGPS interface. (Won't see "no AGPS interface in agps_data_conn_open" in logcat now.)
      • Add the missing functions to receive the NTP, XTRA, and SUPL settings from gps.conf.

    Credits: the XDAndroid Project, dan1j3l, rmcc, tytung, arne182, clyder, ozkaya, qwerty_7564, and everyone who participated in the related discussion or helped test the libs.
    73
    Leo AGPS Injector v0.5

    Leo AGPS Injector is an Android app for quickly injecting NTP time and AGPS xtra.bin data, and lets you explicitly know when the AGPS data is injected.

    • Manual execution: Run this app to finish the AGPS injection task manually.
    • Auto execution: Use Script Manager(free app) or Tasker(paid app) to schedule the routine task by using the script below or using any similar method.
      agps_injection.sh
      Code:
      am startservice -n leo.android.agps/leo.android.agps.AGpsService
    Download and install LeoAGpsInjector_v0.5.apk
    chart



    Changelog:
    • v0.5:
      • Add a network check for refreshing widget's injection time only if connecting to a really available network. (i.e. can download xtra.bin and get NTP time)
        In v0.4, it will still refresh the time even if you are roaming and disable data roaming. (Under this situation, you cannot download anything but this app doesn't know.)
    • v0.4:
      • Merge versions 0.3 and 0.3a:
        Add a check box for determining if showing the setting dialog every time when running this app.
        • When you uncheck it and run this app again, it will inject NTP time and AGPS xtra.bin data, and then destroy this app by itself. So you won't see any UI.
        • When you uncheck it and leave this dialog, you must go to [Settings]->[Applications]->[Manage appliciation]->[Leo AGPS Injector], and press "Clear data" to get this dialog popped up again.
    • v0.3:
      • Add a widget for quickly injecting NTP time and AGPS xtra.bin data.
      • Display the last injection time in the widget.
      • Include three types of notifications: Notification/Status Bar, Pop-up message, and None.
    • v0.2:
      • You can choose to see the real injection time in the notification bar or to be notified through a pop-up message.
    • v0.1:
      • If you network is unavailable, this app will run as a background Service and passively wait for the connectivity change notification from the Android.
        • Besides, you can see the "Waiting for an available network." message in the notification bar.
      • When you network is available, this app will download and inject NTP time and xtra.bin, and then the Service will destroy itself to free the memory, so this app won't occupy your memory.
        • Besides, you can see the real injection time in the notification bar, and you can clear it if needed.
    LeoAGPSInjector_v0.5_01.png
    LeoAGPSInjector_v0.5_02.png
    56
    AGPS Development is finished.

    My modified source code of libgps.so has been uploaded to Github. https://github.com/tytung/android_hardware_leo_libgps

    Notice:
    The source code is released under the GNU General Public License version 3 (GPLv3).
    So you must release your modified source code if you would like to release a modified libgps.so.

    Development info:
    Credits: tytung, clyder, ozkaya, qwerty_7564, and everyone who participated in the related discussion or helped test the libs.
    36
    AGPS Devel

    I changed this line in gps_xtra_set_data from leo-gps-rpc.c.
    from:
    Code:
    res = pdsm_xtra_set_data(_clnt, 0, client_IDs[0xb], 0, xtra_data_ptr, part_len, part, total_parts, 0);
    to:
    Code:
    res = pdsm_xtra_set_data(_clnt, 0, client_IDs[0xb], 0, xtra_data_ptr, part_len, part, total_parts, 1);
    and agps appears to be working. I have uploaded the modified libgps.so in tytung's zip package just replaced the libgps.so. I was wondering if people would try it out.
    23
    If you want to enable xtra.bin download requests and set download interval, you need to modify gps.conf.
    Set GPS1_XTRA_AUTO_DOWNLOAD_ENABLED to 1 and set GPS1_XTRA_DOWNLOAD_INTERVAL to 24 hr or whatever. (range is 1~168)

    Code:
    NTP_SERVER=north-america.pool.ntp.org
    XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin
    XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin
    XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin
    SUPL_HOST=supl.google.com
    SUPL_PORT=7276
    
    ###########################################
    # Enable/disable automatic (periodic)     #
    # download requests of gpsOneXTRA         #
    # assistance data to client               #
    # Range: 0 to 1                           #
    # Default value: 0 (Disabled)             #
    ###########################################
    [COLOR="Red"]GPS1_XTRA_AUTO_DOWNLOAD_ENABLED=1[/COLOR]
    
    ###########################################
    # Time (in hours) between automatic       #
    # download requests of gpsOneXTRA         #
    # assistance data to client               #
    # Range: 1 to 168 (168 = hr in a week)    #
    # Default value: 24 hr                    #
    ###########################################
    [COLOR="red"]GPS1_XTRA_DOWNLOAD_INTERVAL=24[/COLOR]