Adapter program to enable assisted GPS on the Verizon xv6800 "MR1" (WM 6.1) ROM
I've written up a program that will enable the use of assisted GPS on the MR1 Verizon ROM. This may be of use to you if you do not want to use a custom ROM, -or- you cannot get GPS working on a custom ROM.
Note: This method does not currently work on dcd's releases. My code has only been verified to work on the Verizion MR1 ROM. I believe this is because the Sprint GPS intermediate driver does not support the DRM/locked down GPS functionality required to talk to gpsOne once the firmware has been programmed for locked down GPS mode.
You can always flash back to MR1 from a custom ROM. If you already have GPS working on your custom ROM, this is probably not necessary, and you should keep your existing ROM.
A cab installer (courtsey of gc14) can be found here: http://forum.xda-developers.com/attachment.php?attachmentid=111774&d=1220913180. Note that due to a bug in the .cab file, you cannot automatically uninstall the cab, but you can just manually delete the files that it installs (see below to discover which files those include).
Otherwise, you can manually install the program, as detailed below.
The installation of my GPS adapter is a bit complicated right now, and this is a fairly beta release. I have only tested it with Google Maps. However, it should work with any GPS-enabled program that can use the standard GPSAPI.dll functions.
Note that your GPS program must be configured to use Windows-managed GPS and not an explicit COM port. My adapter module does not support the NMEA serial interface, only the "cooked" GPSAPI.dll interface. Notably, the HTC GPC Test program uses the NMEA COM port interface, and will not work with the GPS adapter.
The GPS adapter system consists of several parts under the hood:
- gpssrv.exe, a program that I wrote which understands how to decrypt GPS data from the chipset when it is operating in locked down GPS mode. This program acts as an intermediary server, through which all GPS clients can indirectly access location information.
- gpsapi.dll, a replacement for the OS-level gpsapi.dll. The replacement DLL communicates with gpssrv.exe to retrieve positioning information. This model allows multiple programs to receive GPS data at the same time, as the locked down GPS interface only supports one concurrent user.
- oemgpsOne.dll, a modified version of the Verizon oemgpsOne.dll module for communicating with the gpsOne chipset driver.
- stdgps.dll, a copy of the standard OS gpsapi.dll. Due to limitations in Windows CE, this needs to have a different name than the replacement gpsap.dll. It is otherwise identical to the shipping version of gpsapi.dll.
To install the GPS adapter, you should grab the program files at the following URL:
http://www.nynaeve.net/Skywing/xv6800gps/gpsserver.zip
Currently, there's no CAB installer, so all of the installation must be done manually. Sorry. A CAB may come later on, if someone feels like doing the work to build one for me.
After extracting the zip onto your device, follow these instructions:
1. Create a "\Program Files\GPSServer" directory on your device.
2. Copy gpssrv.exe, oemgpsOne.dll, and stdgps.dll to "\Program Files\GPSServer".
3. Copy gpsapi.dll into the directory where your GPS program resides. For example, "\Program Files\GoogleMaps".
Optionally, you can copy gpsapi.dll to your \Windows directory instead of the directory for the main .exe of your chosen GPS application. This may be more reliable, as if something loads the Windows-supplied gpsapi.dll before the custom gpsapi.dll, things will break. Doing this is slightly more complicated.
To (optionally) copy the new gpsapi.dll to your \Windows directory, you may use these steps:
1. Rename gpsapi.dll to something else (e.g. "gpsapix.dll").
2. Copy the renamed gpsapi.dll to \Windows
3. Rename the renamed gpsapi.dll in \Windows back to gpsapi.dll.
The renaming juggling is necessary as File Explorer will otherwise refuse to supersede an XIP ROM file. You can simply delete \Windows\gpsapi.dll after doing these steps to revert back to the standard Windows gpsapi.dll, without having to hard reset your device, although this will again break GPS for you.
After that, you should be able to start your GPS program (e.g. Google Maps) and receive location data. Note that being inside in a shielded location may impede the process of acquiring a GPS fix. Also, to gain the benefit of assisted GPS mode, you need to have an active cell data connection, and you should not be connected to ActiveSync or Wi-Fi.
There are some registry settings that you can create on the device to tweak how the GPS adapter functions:
REG_SZ HKEY_LOCAL_MACHINE\Software\Valhalla Legends\GPSServer\ServerPath = "Path to gpssrv.exe". Defaults to "\Program Files\GPSServer\gpssrv.exe" if not set.
REG_DWORD HKEY_LOCAL_MACHINE\Software\Valhalla Legends\GPSServer\AllowDeviceStateChange = 0/1. Defaults to 0 if not set. If set to 1, then gpsapi.dll will send device state change notifications to your GPS program. Some programs appear to have buggy GPS handling (Google Maps in particular), and will break if this option is set.
REG_DWORD HKEY_LOCAL_MACHINE\Software\Valhalla Legends\GPSServer\PDEAddress = IP address of the PDE to use. Defaults to 0x845FAE42.
REG_DWORD HKEY_LOCAL_MACHINE\Software\Valhalla Legends\GPSServer\PDEPort = Port number for the PDE. Defaults to 8888.
REG_DWORD HKEY_LOCAL_MACHINE\Software\Valhalla Legends\GPSServer\Mode = gpsOne mode to set. Defaults to 2.
REG_DWORD HKEY_LOCAL_MACHINE\Software\Valhalla Legends\GPSServer\QoSAccuracy = Relative fix accuracy requested. Defaults to 64. (Max of 255, higher values request a more accurate fix, but this may increase the time to acquire a fix.)
REG_DWORD HKEY_LOCAL_MACHINE\Software\Valhalla Legends\GPSServer\QoSPerformance = QoS performance flag. Defaults to 10. As to what effect this has on the gpsOne chipset, I'm not entirely certain yet. Debugging reveals that the value internally is called the QoS performance value, hence the name. The meaning of this value is likely buried in some gpsOne technical document that I have not found yet.
REG_DWORD HKEY_LOCAL_MACHINE\Software\Valhalla Legends\GPSServer\FixInterval = Time, in milliseconds, between requests to the gpsOne chipset for an updated GPS fix. Defaults to 1000.
The default values should work fine, so you don't need to bother with the registry values unless you really want to. Most of the defaults were gathered by researching the settings that VZ Navigator uses internally.
---
Program compatibility list:
---
- Only programs that use GPSAPI.dll and not a COM port will work with the adapter. Most GPS programs will support using GPSAPI.dll.
- Google Maps will function if you configure it such that the GPS setting is set to "Managed by Windows". This is the default setting. Also, remember to check "Use GPS" in the menu when you start Google Maps, in order to enable GPS inside of Google Maps.
- Live Search will function if you configure it such that the GPS setting is set to "GPS Intermediate Driver". This is the default setting.
- HTC GPS Tool will not work properly, as it can only use a COM port.
- If you want to use VZ Navigator after having installed the GPS adapter, then you need to place oemgpsOne.dll and stdgps.dll in \Windows.
---
Other notes:
- The GPS adater does not enable free use of VZ Navigator. It only allows third party programs that are designed to talk to the standard Windows Mobile GPSAPI.dll interface to operate on the xv6800 MR1 ROM.
- You do not need to manually start gpssrv.exe. When a program loads the custom gpsapi.dll and requests a position fix, gpssrv.exe will be automatically started on demand to power up the gpsOne hardware and start acquiring position data. It will automatically turn off the gpsOne hardware and exit on its own 60 seconds after there are no programs open that are still requesting a GPS fix.
---
Troubleshooting:
Here are some steps that you can take if you are having problems getting things to work.
1) Make sure that you're on the Verizion MR1 ROM and not a third party custom ROM, or the original release Verizion ROM.
2) Make sure that your Location setting is set to "LOCATION ON" and not "911 ONLY" in your Phone > Services > Location settings.
3) Make sure that your GPS program is configured to use Windows-managed GPS or "GPS Intermediate Driver", and not a specific COM port.
4) Give the following test program a try, to verify that GPS is working in general. The test program does not require the GPS adapter to run. If the test program can receive GPS data, then either the GPS adapter program is not installed correctly, or your GPS-enabled application is not configured properly. If the test program cannot receive GPS data, then you have a different problem (perhaps your location option is still set to 911 only?). Test program link: http://www.nynaeve.net/Skywing/xv6800gps/gpstest.zip
Reserved for future updates.
Adapter
Downloading now but awfully slow.
I will also work on a cab install for you too.
Steve
so this is just a modified version of the Verizon GPS driver?
I was wondering if it would be possible to OEM that into one of the Custom ROMS through the kitchen and making it work without a hitch (assuming this program replaces those bad .dll files)
No, it's a bunch of new code that I wrote that understands how to decrypt the obfuscated GPS data returned by the Verizon GPS driver, when the firmware is in locked down GPS mode.
Posted a new version (updated gpssrv.exe and gpsapi.dll, be sure to update both files when you upgrade).
This release fixes compatibility with Windows Live Search, adds support for caching position across API calls (required for some GPS programs), and fixes a number of bugs.
Please let me know if you have any issues with it.
Skywing said:
Note that your GPS program must be configured to use Windows-managed GPS and not an explicit COM port. .
Click to expand...
Click to collapse
I use Iguidance that requires me to choose a port. How would I tell it to use the above method? There is an option to search for a gps. Should I try to find it that way?
The gpssrv.exe file, does it need to be run at some point?
If the program can only do NMEA serial, then it's not going to work, unfortunately. Reimplementing the virtual serial port interface is much more complicated to do on my end than reimplementing the GPSAPI.dll interface.
If your program has an "automatic", "use Windows settings", or "GPS Intermediate Driver" option, those options would typically mean that the GPSAPI.dll functions instead of NMEA serial will be used (if selected).
Doesn't work...
If anyone gets this to work with Iguidance v4.0 PLEASE let me know!!
I just wanted to say great work to Skywing. I dont have any gps problems anymore, but I must commend you for coming up with solutions to help.
No real value to this post, just to say thanks to the community in general!
thundaar2000 said:
Doesn't work...
If anyone gets this to work with Iguidance v4.0 PLEASE let me know!!
Click to expand...
Click to collapse
You might try and see if you get location data returned by Google Maps, which will work if you do not configure it to use a specific COM port.
I just downloaded the adapter zip and followed the instructions to a "T" and was able to get a lock on some sat's using GPS Viewer, but spent an hour or better trying to get GOOGLE maps or LIVE Search to work and neither one could get a lock on any sat's... Any ideas?
Thanks,
GA MADMAN
Are you certain that you placed gpsapi.dll in \Windows or in the directory with GoogleMaps.exe?
Other things to check:
- Make sure location is enabled in your phone setting. I assume that you have already done this, however.
- Make sure that Google Maps has the GPS confiugration set to "Managed by Windows".
Skywing,
Thanks for posting this software. I look forward to using it. I am convinced that mine is not working because I have not replaced the file in the \Windows folder.
I cannot rename it, I am using Total Commander.
I am convinced that I cannot rename it because something is using it.
I have a pretty basic install of XV6800 with MR1. Just a couple of programs installed.
Any advice on how to rename the file?
Thanks
New build did not get put up properly; this has been remedied. Please re-grab the .zip if you had previously downloaded it before this message, and then update all of the files.
Note that you need to completely delete the gpsapi.dll in \Windows and then do the renaming trick again, otherwise, File Explorer will claim to copy the new file over, but it will actually delete it and switch to the ROM version.
kilgore19K said:
Skywing,
Thanks for posting this software. I look forward to using it. I am convinced that mine is not working because I have not replaced the file in the \Windows folder.
I cannot rename it, I am using Total Commander.
I am convinced that I cannot rename it because something is using it.
I have a pretty basic install of XV6800 with MR1. Just a couple of programs installed.
Any advice on how to rename the file?
Thanks
Click to expand...
Click to collapse
No idea about using Total Commander for it. You can use the (cumbersome, but working) steps I posted with the built in File Explorer (fexplore.exe) program. Those steps are confirmed to work.
Downloaded the app.
Works perfectly.
Thank You!
I also followed each step and my XV6800 is unable to get a GPS location in either Google maps or Live search.
THANK YOU!
Thank you for the amazing tool!!! This has my MR1 ROM running GPS fast and efficiently. Let me know if I can be of any assistance... I have access to some webhosting space and other resources to keep this project alive if needed.
Mugenakuma said:
I also followed each step and my XV6800 is unable to get a GPS location in either Google maps or Live search.
Click to expand...
Click to collapse
Can you list all of the steps that you took and what state you are in right now (e.g. which files copied where, and soforth)?
I've been trying for the last couple of days to solve an issue (it's not really a problem) that has been irritating me for a while. The issue is that everytime i flash a new rom i have to spent a coupe of hours after configuring everything again. Now, I use the 6.5.x tree of NRGZ28's energy rom series, specifically the standard variant and i want to create some scripts that will automatically setup things like my exchange server, hotmail, opera user-agent string and wifi. I already have a script that is supposed to work for exchange (not tested it yet) and one for the wifi. The wifi one just doesn't work but i've just done some reading and i think i know why (More on that in a mo). So, i was wondering, has anyone tried this already? If so do you have the scripts that are needed or know where i can find them?
Now, back to the wifi script. The reason i believe it doesn't work is because it would appear that the wifi has to be on for the WLAN driver to accept the new configuration. Now when you install a new rom, as most of you will know, the wifi is turned off and those of you familiar with the energy rom series will know that xda_uc runs right after first boot allowing no time for the wifi to be enabled manually. So, i was thinking, is it possible to write some code that will enable the wifi at first boot so the configuration script will successfully modify the wifi configuration?
Thanks for your thoughts in advance guys and girls.
Have a look in the FAQ for the ROM and there is post for sample scripts. I used them last night and got hotmail and exchange working. Here's the link:
http://forum.xda-developers.com/showpost.php?p=7333558&postcount=19477
Check the FAQ - each time I re-read it I figure something else out.
lol and there was me thinking it would be a lot harder. i always skip past the faq because 9 times out of 10 they are always filled with things like "How do i flash a rom" etc but i do still have a feeling it's not going to cover all my questions, things like can i write some code to enable the wifi at first boot or some other things i haven't meantioned like can i write a script that will automatically configure omarket with my login details.
I want to go all out on this and have it set up so i have to do as little manual configuration as possible so some code samples and/or further pointer would be really handy.
Just had another look at the faq and found i already had the xml generator listed in the energy addons page. One small problem... I have no idea what the hotmail server configuration is. Any clues? if not i will google it later.
Got my hotmail script. No idea if it works, guess i'll have to test it at some point.
I'm still looking for info on how to enable the wifi at first boot. Although at this point i am open to suggestions on different methods that could be used.
I am also a little disappointed. i thought this one had more legs to it. oh well, you can't always get everything you want i guess.
Just a litlle update. I got the wifi to take the settings without turning it on. Well i say i did it when really it just seemed to work. i think it might have somethig to do with some new drivers that were cooked into the rom i use.
I dropped the hotmail script because i do actually use windows live fair often and i ended up with 2 hotmail email accounts in the email tab but with a couple of tweaks i did get my exchange settings script to work like a dream.
I'm now looking into setting the phone identity using a reg file. I gave it a go using a script i picked up but instead of doing what it was supposed to it just stopped the windows and HTC sms clients from working correctly and i can't figure out why (it caused the phone to create several undeleteable sms messages). I'll post the code at the bottom. I'm also wondering if it is possbile to have a script that will copy files (ringtones specifically) to the right location. I think XDA_UC will do this if you create the directory structure in a folder in the XDA_UC folder on the sd card (hope you followed that one). Can anyone confirm that? I also created a script to configure quickgps but that didn't seem to work, i'll post the code for that too.
I'm still wondering if it would be possible to configure the opera user agent string using some form of script or reg file and it would be really nice if i could something similar with BSB tweaks, agps, HTC location service and pretty much everything else tbh. So if anyone has any scripts, reg files or cab files they wanna share i will certainly welcome them and i'm sure that many others will too.
Anyway, to posting those reg files:
Code:
[HKEY_LOCAL_MACHINE\Ident]
"Name"="Lucifer"
"Desc"="HTC HD2"
"OrigName"="Lucifer"
Code:
[HKEY_LOCAL_MACHINE\Software\HTC\QuickGPS]
"auto"=dword:00000001
"actSync"=dword:00000001
"ExpiredTime"=dword:00002760
"remind"=dword:00000001
Check this out for reference [XDA_UC][UC][SASHIMI][S4X] S4X_Auto & S4X_Backup [AUG.10.2010] XDA_UC Mods & Answers
id some looking up on the device name thing and found this: http://msdn.microsoft.com/en-us/library/aa924188.aspx seems my reg key was a little wrong.
I've also managed to create a cab file that will install my ringtones and then setthem with all related options as the defaults. I know it's not very impressive but it's a step in the right direction. I think i may have a look at exporting the bsb tweaks settings later and see how that goes.
Oh one question: i have been looking for an .reg to xml converter but my google results all seem a little vague and i don;t know if can trust the programs i'm finding. Has anyone got any suggestions?
M3PH said:
Oh one question: i have been looking for an .reg to xml converter but my google results all seem a little vague and i don;t know if can trust the programs i'm finding. Has anyone got any suggestions?
Click to expand...
Click to collapse
I don't think you need to convert reg to xml. Just leave the .reg files in the XDA_UC directory and it should run automatically.
darkblak said:
I don't think you need to convert reg to xml. Just leave the .reg files in the XDA_UC directory and it should run automatically.
Click to expand...
Click to collapse
No, you're right. I have no idea what i was thinking.
Another little update. I have working reg files for opera ua string and quickgps. I've decided not to bother with bsb tweaks because it's so easy to setup but being able to preconfigure windows live would be cool. Also being able to preconfigure agps would be nice
Hi,
I am looking for an android app able to log GPS data like coordinates, altitude, current speed and would be nice if also the GPS accuracy/number of satellites. Many GPS apps are able to display these data, but not to log them.
Reason is that while doing a monitoring (no matter if helicopter, car or on foot), there is a variable accuracy of the coordinates and so this also influences the measurement results and the output maps. So it would be helpful to know these data to take this into consideration.
I am currently using Oruxmaps, but it logs only date/time, position and elevation and not the other data. Also found Geopaparazzi, however it exports only to KMZ which I currently cannot read - prefer GPX, KML or something simple like CSV which I can later use in some GIS programs like Quantum GIS.
One user on Stackexchange recommended me Sport Tracker (originally developed by Nokia) but it looks like it is not possible to export some usable output without having the phone online and connected to their website. This is problem for me, because I need something able to export the data to phone card directly.
My last chance is currently Antimap Log which I will surely try, but would also appreciate your experiences and recommendations.
thanks
PS: also found app called Aspara, which should be able to log NMEA data directly to SD cards so will check it too.
Juhele said:
... KMZ which I currently cannot read - prefer GPX, KML ...
Click to expand...
Click to collapse
KMZ files can be converted to GPX. Also can be converted to KML, following these simple steps:
Change the extension from KMZ to ZIP.
Unzip the file.
You'll get a KML file
thanks,
this is strange. I already explored the KMZ file on my desktop using 7zip and it simply refused to extract the KML file so I though there is something special with the compression etc.
However, just now tried the same on my phone and Total Commander did it without problems. Unfortunately the KML file from Geopaparazzi contains only coordinates - no other data like speed etc. so it is even less usable for me than Oruxmaps.
OK, will continue my search.
Please use the Q&A Forum for questions &
Read the Forum Rules Ref Posting
Moving to Q&A