Attend XDA's Second Annual Developer Conference, XDA:DevCon 2014!
5,729,054 Members 40,675 Now Online
XDA Developers Android and Mobile Development Forum

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

Tip us?
 
tytung
Old
(Last edited by kinfauns; 10th July 2013 at 07:44 PM.) Reason: V2.1
#1  
tytung's Avatar
Senior Member - OP
Thanks Meter 15054
Posts: 3,573
Join Date: Jun 2010
Question [26.Aug.2011][Dev] GPS Libraries v2.1 with AGPS support for HD2 Gingerbread

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.

Quote:
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.)
Quote:
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

Quote:
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.

Quote:
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.
Quote:
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.
Quote:
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)
Quote:
# 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)                   #
###########################################
GPS1_XTRA_AUTO_DOWNLOAD_ENABLED=0

###########################################
# 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                          #
###########################################
GPS1_XTRA_DOWNLOAD_INTERVAL=24

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

###########################################
# Time (in seconds) between invoking      #
# pdsm_get_position()                     #
# Range: 2 to 120                         #
# Default: 2 seconds                      #
###########################################
GPS1_SESSION_TIMEOUT=2
Quote:
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.


Quote:
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.
The Following 269 Users Say Thank You to tytung For This Useful Post: [ Click to Expand ]
 
tytung
Old
(Last edited by tytung; 10th July 2011 at 11:37 AM.)
#2  
tytung's Avatar
Senior Member - OP
Thanks Meter 15054
Posts: 3,573
Join Date: Jun 2010
Default 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.

Quote:
Development info:
Credits: tytung, clyder, ozkaya, qwerty_7564, and everyone who participated in the related discussion or helped test the libs.
The Following 58 Users Say Thank You to tytung For This Useful Post: [ Click to Expand ]
 
tinuz97
Old
(Last edited by tinuz97; 28th May 2011 at 11:09 AM.)
#4  
tinuz97's Avatar
Senior Member
Thanks Meter 39
Posts: 1,414
Join Date: May 2008
Edit: Deleted by myself...
Anyway thx for the answer


♠Samsung Galaxy S4 i9505♠
♠PhilZ Touch CWM♠
♠FoxHound GearEngine 1.7 AROMA | Themed | Smooth | Clean | Hybrid♠

♠Sd Card: Samsung 32gb class 10 UHS-I microsdhc♠
 
shendan
Old
(Last edited by shendan; 28th May 2011 at 10:52 AM.)
#5  
Member
Thanks Meter 0
Posts: 49
Join Date: Sep 2010
Nice work~testing
After I mod the gps.conf, the google map works well
but the GPS Test Plus can't find any satellites
 
YZ
Old
#6  
YZ's Avatar
Retired Forum Moderator
Thanks Meter 3445
Posts: 1,668
Join Date: Mar 2010
Wow! Awesome to have developers like you ! Keep up the good work

Sent from my HTC HD2 using XDA Premium App

 

Quote of the week:
“A successful man is one who makes more money than his wife can spend. A successful woman is one who can find such a man.”

- Lana Turner


 
ksubedi
Old
#7  
ksubedi's Avatar
Recognized Developer
Thanks Meter 1107
Posts: 271
Join Date: Nov 2010
Location: Boulder, CO, US

 
DONATE TO ME
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.
Devices: Nokia 1600 -> Sony Ericsson K660i -> Nokia X3 -> BlackBerry Pearl 8120 -> Samsung Feature Phone -> myTouch 3G -> myTouch Slide 3G -> Motorola Defy -> HTC HD2 -> Samsung Galaxy S Vibrant -> myTouch 4g -> Nexus S -> Nexus One -> HTC HD2 -> G2 -> Sensation 4g -> LG Optimus 3D -> HTC One S -> Nexus 4




Follow Me On Twitter
or Check My Blog http://wireshock.com
 
Bib_x
Old
#8  
Bib_x's Avatar
Senior Member
Thanks Meter 20
Posts: 773
Join Date: Oct 2007
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.

Device: HTC HD2 (Leo) European Version
Radio: 2.15
ROM: tytung NexusHD2-KitKat-CM11 V4.3 with DataOnEXT


The Following User Says Thank You to Bib_x For This Useful Post: [ Click to Expand ]
 
xaoc747
Old
#9  
xaoc747's Avatar
Senior Member
Thanks Meter 933
Posts: 2,062
Join Date: Feb 2008
Location: Kazan
Sorry, why this app need?
Acer Iconia A500 + 32Gb Kingstone Class10
Samsung Galaxy Note 3 + 64Gb SanDisk Ultra SDXC 1
Samsung Galaxy Note I + 16Gb
Samsung Galaxy S II + 64Gb KingMax Class 6
PUSH THE BUTTON <THANKS>
 
pecora
Old
#10  
Senior Member
Thanks Meter 94
Posts: 505
Join Date: Nov 2008
Quote:
Originally Posted by xaoc747 View Post
Sorry, why this app need?
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

THREAD CLOSED
Subscribe
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes