Remove All Ads from XDA

[GPS] Mod Driver - GeoCaching, Lag, Compass, Cell Tower, Altitude, GPS support.

1,020 posts
Thanks Meter: 88
By Mach2003, Senior Member on 14th October 2009, 03:59 AM
Post Reply Email Thread
GPS Mod Driver (From original post in Diamond thread Ending Here)
This Driver installs between your gps application and the GPS driver that reads the hardware gps.

- Lag is compensated, by guessing your position 'some number' of milliseconds in the future, current course and speed changes are included in the guess.
- Driver corrects for invalid data in the gps strings, Out of range DOP values, and Heading values of 'NaN' (Not A Number). Position, Speed, and course are reported, even though the distance traveled is less than 30 meters.
- Cell Tower location is used when GPS is unavailable
- Altitude is corrected from/to WGS84/ASL
- Hardware Compass Support
- Allows selction of many input sources, including MSApi (GetPosition api)
- Suports GPS applications on any COM port, as well as GPSApi (GetPosition api)

Hardware Compass Support information is in Post Number two
QueStub support is in post Number Six, Garmin can now use GPS Intermediate Driver, so no longer needs QueStub

Newest Version:

Add back in the detection of dead input port

Fix GpsApi when calling app is stupid
- Caller asks for V1 data with V2 dwSize (I return V1 as version with V2 size, and V2 data in the return
FixGpsApi GPSGetDeviceStatus
Change ReadNewData to detect, and call GPSGetDeviceStatus, and set the waiting handles (if there are any)

Remove trap on stuck GPS from msapi, only COM ports are detected (TP2)
Rename gpx and csv files to: "ModDriver_{date}_{time}{In or Out}.{gpx or csv}"

Add GPX tracklog 'ending' to each log write, fseek back to overwrite.
Change time sync to CellInit, since clock is functioning when service loads.
- Detect when Cell service not loaded, and sync on GPS open port

Created a new device MsClock, provides current device time with millisecond resolution
Created and linked MachClock.dll (uses MsClock)
- Provides SystemTime and FileTime with 1 m/s resolution
- Uses device clock for base time
- Re-Sync time on device wake-up from sleep
Used MachClock to keep time in sync (all apps and drivers)

Fixed a bug in appending GPX tracks to existing logs

Move DeviceStatus maintenece to ModDriver
- Modify COM_Read, COM-Write to support transfer of data to caller (GPSApi.dll)
Remove Power up/down redundentcies from ModDriver and MachCell
Add Thread open count to MsClock
Fix Power up notify in MsClock
Fix Extra calls to UpdateDeviceStatus in ModDriver, when no-one is listening
Create Named event in GPSapi.dll to track mutiple instances of dll

Include AutoLog, RegUtil, and CardPath into MachClock.dll
- Should save some ram since the code will only load once (shared for all apps and drivers)
- On my device running GpsModSetup saves 20kb of ram
MachCell should have saved another 20kb too, but since it is a service I can't prove it
- Fix a COM port read issue when GSV is not sent regularaly (some BT recievers)

3.5.4 - 3.5.6
Fix EnableLogs Registry read error issue
Remove close COM port on PurgeCom (bug)
Fix time error
Fix GPX logging
- Could stop/delay output data

ModDriver could be sending data to the application way too often
MsClock driver was not being used by ModDriver
MsClock bit of tweeking, and was made faster too
could have stayed running 'awake' when nothing was using it.

GPX log files was still broken sometimes, another tweek there too.
reset the device clock to the GPS time (+500m/s)
added some logging to MsClock, but only for testing

Logging Owner Process Name in ModDriver and MsClock
Extra Delay removed reading some COM input devices
When input port times out, reader thread could stay active (or even duplicate)
MsClock, only reset device clock if it needs resetting (read current clock, and compare first)
Changed timing on EnableSmooth
- Used to return data at 600, 400+, 600...
- Now 500, 500+, 500, 500+,
Better handling when reader app crashes without closing the ports
- System sends me Ioctl_Psl_Notify
- I force close reader port, SetLastError( 6 )
- In GPSApi I react to GetLastError() == 6, by exiting the reader thread.

- Fixed a minor issue with sudden loss of BT com port

Version 3.10 and newer: Added Direct support for reading cell tower location.
See the change log and Cell Tower features starting on post 1346 here

External Card Storage
- If the card is removable, installing a device driver to it is just a BAD idea, don't do it!
- My attached shortcuts don't work, make your own or edit mine.
- Your card may not be avalable during early boot, so driver may not autoload.
- Driver will take londer to load, so phone will take longer to boot.
- ModSettings will take longer to load
- Uninstall is not as perfect, but still works fine, except it is possible that the dll on the card may not be removed if it is in use at the time.
- Did I say don't install to a card unless you have to?

- Install the driver cab, change your GPS application to the indicated port or to use Gps Intermediate Driver, instead of the original internal com port.

- Run GpsModSetup (found in start), you will see live gps data from the ModDriver on the main page. Tapping the screen will toggle to a sattelite view screen.

Menu/[Profile] (driving or Walking): to use a preset setup, Save will update driver to use new profile. If auto profile is enabled you will not be able to make this selection, but can still edit the profile's values.

Menu/System: to change the values used by ModDriver.
- Log File: Creates a debug log in \Mach2003 of the device.
- Extended: Adds more information to the logs.
- Track Log: Creates a GPX and CSV file to card\Mach2003 that can be viewed in Google Earth, or many other applications.
- Raw Data: Includes an extra GPX and CSV file for the raw input readings from the GPS source.
- Smooth: Allows Mod Driver to insert an extra GPS output at half the sleep time, so that some map displays are less jumpy.

GpsModDriver section
- Sleep Time: Amount of time that Mod Driver will wait for a new GPS reading. Default devices are 1000 ms.
- ComTimeOut: Passed on to the windows com driver when using a COM input port, amount of time readfile will wait for ANY data to arrive on the port.
- Keep Alive: Driver will keep reading raw data for this many milliseconds after the last reader port is closed. Allows for switching GPS applications without loosing fix.
Be very careful changing the following port, you may need a factory (HARD) reset if you change a port to one that is already in use!
- Com Port: The output port Mod Driver will use to send data to your GPS Application.
- Enable: Enable (or disable) All Mod Driver functions.

Internal GPS Device section
These settings are written to the internal GPS device registry, and MAY be used by the original driver
- Sleep Time: Time to Wait for data when no data is available ro read.
- Poll Rate: How often to check for new data from the internal driver.
- Input Buffer: Amount of phycical RAM to reserve for READING the internal GPS device.
- Output Buffer: Amount of RAM to reserve for communication to MS GPSID driver.
Be very careful changing the following port, you may need a factory (HARD) reset if you change a port to one that is already in use!
- Com Port: Com Port for GPSID data, same as using the 'External GPS' control panel 'software port' item.
- Enable: Enable (or disable) the internal GPS, same as "allow windows to manage device" under external GPS settings.

Menu/Extras: To configure additional settings.
Altitude Table section
- Altitude Fix, To enable driver to correct altitude to true (ASL)
- Prefer GPS, To use GPS altitude when avaiable instead of the table values
- Kill Feature Remove Table, Use to remove the altitude correction feature, and the table file from your card.
Auto Profile Selection
- Gsensor Angle, angle from vertical when to switch to/from walking profile.
- Enable portrait, To autoswitch profile when in portrait mode
- Enable landscape, To autoswitch profile when in landscape mode
Cell Tower Location
- Service is Running Now, Reports current service status, tap to update
- Enable Cell Service, ...
- Enable Service, Only with GPS, starts and stops cell service when Mod Driver is used/closed
- Enable Internet Cell Data, Allows Servicer to use data connection to resolve location of unknown cell towers
- Entries To Save, restricts the size of the cell tower database
- Default MCC, Can be set to YOUR Mobile Country Code for when your RIL does not have this vital information
- ReStart, Stop/Start Buttons.
- Export, To export known cell tower locations to a GPX file
- Update, Used to resolve all unknown cell tower locations, ignores Enable data Flag (use while connected through A/S)
- Kill Feature Remove Service, Use if you don't want cell tower location features.
Menu/Ports: To enable Mod Driver to use other input ports.
Port Scan Mode
- Scan On Power Only, default, allows scanning for a better input port only when the device is plugged in.
- Scan on Battery Too, allows port scan at all times, regardless if device is plugged in or not.
- Never Scan, disables the port scan feature.
- Scan Only Once, does an imediate scan, then sets itself to "never scan".

Input Port section
- Port (MSAPI, or Com Ports from 1 to 9)
- Enable, allows Mod Driver to read this port
- Fix, applies Mod Driver Lag, speed, and heading fixes to this port (some devices might not need these fixes)
- Order, Mod Driver tries to find GPS data on the Enabled ports in this order, 0 first, then 1, 2... (99) is auto entered for the "output" port, as it can not be used for input as well.

All screens have an 'Undo' and 'Save' button. Undo will revert all changes made to the screen, save will update the driver to use the new settings.

Profile Screens
- Name: Used for profile selection and display (alters the names on menu and selection screens)
- Set To Defaults button: Sets all profile fields to factory default values, as installed from the latest CAB.

To Insert Speed and Course section
- Distance Moved: Meters times 10 to update course and speed (30 = 3.0 meters)
- Zero Speed Time: Milliseconds to speed when distance above is not exceeded, your speed will "stick" until this time passes when not moving.
- Minimum Speed: Any speed below this value will be considered as "zero" to filter out erratic slow readings.

To Calcualte Lag Position section
- Speed Threshold: kph times 10 to update LagAdvance position (50 = 5.0 kph), readings with speeds below this value will not have lag applied.
- Lag Advance (ms): Number of milliseconds to project your position into the future to compensate for delay in GPS readings

Toggle Enable section
- Speed Fix: Allow the driver to correct speed
- Prefer GPS: If GPS raw data has a valid speed, use it instead of calcualting speed from position.
- Course Fix: Allow the driver to correct Course
- Prefer GPS: If GPS raw data had a valid course, use it instead of calculating course from position.
- Dop Fix: Allow the driver to correct bad dop values
- Compass: Allow hardware compass with this profile

Auto Input Selection
Mod Driver allows you to select more that one source port for reading GPS data. No matter what input port is used, your GPS application can read Mod Driver to get GPS data.
- You can enable Bluetooth GPS devices as well as MSAPI, and the internal COM port devices.
- 'Order' assigns the preferred port to use, 0 is the most prefered, 1 is next...
- When first started (any GPS application opens Mod Driver port), driver scans ports starting from 0, to find input data.
- If the scan mode is enabled, it tries lower order ports every 30 seconds or so, and switches 'up' to a better port if fixed data is there.
- If the current port looses connection, Driver will try any enabled port to get good data (regardless of scan mode).
- To install a BT device, pair it with your phone, and add an external com port to it.

Altitude Fix
The NMEA standard requires GPS altitude to contain Altitude above sea level (standard was made by boat people), and seperation from the WGS84 ellipsoid used in calculating the ASL. Sea level varies on the planet by up to +- 100 meters from the ellipsoid due to gravitational force changes. Using data from NGA (2008), a table was created (stored on CARD under \Mach2003, 64kb), and is used to determine the seperation value for the current GPS position. In testing, we found that the table value was more current (a more accurate value) then even the devices' driver was using. Prefer GPS will override the table value, and use what the device thinks is correct only if the GPS data actually has the seperation value. You CAN disable this feature and save a bit of card memory by deleting the Altitude*.RAW file. (if card memory can not be found, the file is retained in the devices \Windows folder).

There are also a couple of shortcuts attached here to auto-select a profile. You can copy them to start menu, or to app keys to assign to a hardware button. There is also a shortcut for running the "scan once" selection without "starting up" mod settings.

Used to remove a stuck un-install of the driver instead of using SKTools.
Copy the un-zipped file to the device and run it. It will remove all the files, registry entries, plus the Mod Driver entry in the uninstall database.

It may leave behind some registry entries, and does leave behind the files under \Windows\App Install. You may delete these files manually after running the kill driver application.
Attached Files
File Type: zip - [Click for QR Code] (3.0 KB, 7523 views)
File Type: cab - [Click for QR Code] (183.4 KB, 2167 views)
File Type: cab - [Click for QR Code] (167.1 KB, 4194 views)
File Type: cab - [Click for QR Code] (170.0 KB, 4946 views)
File Type: cab - [Click for QR Code] (148.1 KB, 3929 views)
The Following 5 Users Say Thank You to Mach2003 For This Useful Post: [ View ] Gift Mach2003 Ad-Free
14th October 2009, 04:00 AM |#2  
Mach2003's Avatar
OP Senior Member
Flag Kelowna
Thanks Meter: 88
Donate to Me
GPS Mod Driver - Hardware Compass Support

Mod Driver supports the hardware compass on the HTC, and Samsung devices that have a hardware compass.

- Mod Driver uses Compass Heading below Delta Speed for the current profile in place of GPS heading.
- Compass speed is configurable, default is 2.5 kph (works with Garmin Mobile XT)
- Not all GPS applications will use the heading without a speed, your results will vary.

Samsung Devices need to have the SDK 2.0 cab installed (attached here).

When a hardware Comapass is detected an additional menu item is available for presetting the difference between the hardware compass and actual heading. This is required because your phone may be mounted slightly off angle, and it also reports a 'magnetic' heading instead of the GPS 'True' heading.

Compass hardware does NOT detect landscape rotation properly, but Mod Driver adjusts for this automatically.
Calibration factors are retained for each profile, so mounting (or holding) position is accounted for.

Hardware compass is quite useless in an automobile because of the huge amount of metal around you, and teh EMI that the car generates. You can disable the compass under "Driving" profile, and when using auto profile selection, the compass will only be used when you have the phone out of it's car cradle. Or if you don't use auto-profile, when you select walking profile.

The best way to calibrate the driver's compass value to to just edit the value directly, note that you can not enter a negitive value, but just add 360, and enter that (ie: -21 degrees = 339 degrees).

[b]To calibrate the compass[b]
Choose compass from the menu button.
Be prepared to exceed your current 'Delta Speed' Value for at least 10 seconds, and travel in a relatively straght path.

Compass Screen:
- Num Averages: The number of compass/g_sensor readings to average together
- Landscape Angle: For HTC only, the amount of rotation to determine that landscape is triggered.
- Poll Time: How often to read the sensors.

- The portrait and Landscape buttons are not selectable, but will show the current orientation of the device.
- Values for the current calibration from GPS to COmpass heading can be enetered manually, or viewed here.
- Reset to Zero, allows a simple reset function for each orientaion.
- Calibrate button enters self calibarate mode (see below)
- Help?, condensed version of this post

There are three 'status' messages displayed. One for speed, averages, and overall status.
Each message has a check box that will tell you if that item has been satisfied.

Press Calibrate button,
Notice that count (at the bottom) will count down the number of seconds until you get to Delta Speed.
Once at speed, the count will change to teh number of readings included in the calibration average.
Compass and GPS heading are updated as messages arrive from the driver (about once a second).

Once 10 readings are taken for the average value, the updated value will be shown.
Attached Files
File Type: zip - [Click for QR Code] (47.2 KB, 2843 views)
File Type: cab - [Click for QR Code] (304.6 KB, 2209 views)
The Following 3 Users Say Thank You to Mach2003 For This Useful Post: [ View ] Gift Mach2003 Ad-Free
14th October 2009, 11:49 AM |#3  
Senior Member
Thanks Meter: 68
any advantage for using this?
The Following User Says Thank You to tcchuin For This Useful Post: [ View ] Gift tcchuin Ad-Free
14th October 2009, 04:05 PM |#4  
Thanks Meter: 1
Hi Mach2003,

nice work! Awaiting unpatiently your test results!
The Following User Says Thank You to IIIIIChrisIIIII For This Useful Post: [ View ] Gift IIIIIChrisIIIII Ad-Free
14th October 2009, 06:26 PM |#5  
Senior Member
Thanks Meter: 1
Originally Posted by Mach2003

Edit: Math is done, I found a formulla that works! I am testing it now with a fixed 1 second "De-Lag" time.

That's good news, well done!

If the formula 'decreases' lag this way, it should be easy to adjust the components to compensate for any amount of lag.

And for those without lag, who just want a more accurate GPS driver, the formula could be optional.
The Following User Says Thank You to Mandragore For This Useful Post: [ View ] Gift Mandragore Ad-Free
14th October 2009, 11:15 PM |#6  
Mach2003's Avatar
OP Senior Member
Flag Kelowna
Thanks Meter: 88
Donate to Me
Now that Mod Driver supports GPS Intermediate Driver as a port, QueStub is no longer required. In fact GPS Intermediate Driver works better as it re-connects after a sleep cycle

Garmin Moble XT (and Others):

Garmin Mobile XT, refuses to use the GpsModPort to read gps data, it insists on using the original com port. QueStub is an application that changes the reg entries for the default gps port to the GpsModDriver port, runs the Que program, and restores the values back when Que exits. It is only 5 kb when sitting in memory.

Make sure at least one of these is set/exists before running!
1) The 'QuePath' REG_SZ here: [HKLM\Software\Garmin\Que] the complete path to your gps program,  "\Internal Storage\Garmin\QuePPC.exe" for example.
2) "\Garmin\Que.exe",
3) "\Internal Storage\Garmin\Apps\WM\QuePPC.exe",
4) "\Internal Storage\Garmin\WM\QuePPC.exe",
5) "\Storage Card\Garmin\Apps\WM\QuePPC.exe",
6) "\Storage Card\Garmin\WM\QuePPC.exe"
7) "\My Storage\Garmin\Apps\WM\QuePPC.exe",
8) "\My Storage\Garmin\WM\QuePPC.exe"
QueStub can be used for ANY ONE application, not just Garmin Mobile XT. Use it if your application insists on opening the original COM port, even when set to use GpsModDriver's port. Just insert your application into one of the registry as above.
Attached Files
File Type: cab QueStub_310.CAB - [Click for QR Code] (23.3 KB, 885 views)
File Type: cab - [Click for QR Code] (23.3 KB, 383 views)
The Following User Says Thank You to Mach2003 For This Useful Post: [ View ] Gift Mach2003 Ad-Free
14th October 2009, 11:31 PM |#7  
Senior Member
Thanks Meter: 1
Sure, good thinking.
15th October 2009, 01:26 AM |#8  
Senior Member
Flag Appleton, WI
Thanks Meter: 16
I just have to say that this is going to pretty awesome! Be sure to have a donate link if this actually works to reduce/eliminate the percieved lag in gps software
15th October 2009, 04:58 AM |#9  
Mach2003's Avatar
OP Senior Member
Flag Kelowna
Thanks Meter: 88
Donate to Me
0.4 version added to first post.

I liked the result overall with 2.8 seconds LagAdvance.

I have my mapping (Garmin Mobile XT) set for actual GPS position, and not stick to roads.

When turning, you appear to make a wide turn, going off the road a bit.
You appear to jump back a few meters when slowing while on a curve.

The perfect time of advance is not consistant, some times 2000 would be better than 2800. Find a good balance that works for you. Your phone may require a much different setting. Too big, and you appear to pass an intersection before you actually get there, too little, and you pass the interection before you appear to get there. Drive at a consistant speed, and straight during the adjustments.

Note that you must close your mapping program (realy close it, not let it run in the background), or change the port from the GpsModPort, before editing the registry, or any changes will not take effect.

Please report your results here.

Next up (besides fixing anything that goes wrong): Create a UI for the registry settings.
15th October 2009, 06:27 AM |#10  
Senior Member
Flag Tangerang
Thanks Meter: 4
i try to install that and edit all of the registry and its success..
but, every time i change enable the com 6 in my garmin, it always change back to COM 4.. is it normal?

look my attachment for the video..
Attached Files
File Type: zip - [Click for QR Code] (204.7 KB, 1056 views)
The Following User Says Thank You to mutokenji For This Useful Post: [ View ] Gift mutokenji Ad-Free
15th October 2009, 06:33 AM |#11  
Mach2003's Avatar
OP Senior Member
Flag Kelowna
Thanks Meter: 88
Donate to Me
Garmin Mobile Xt requires a trick.

Make sure your external GPS settings are correct, I'll assume COM4, and the ModDriver at the default COM6.

Close XT, and then change this key:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Multiplexer]
Unfortanatly you need to reset the external GPS settings to COM4, and then modify the key ater each soft reset. I have this 'patch' on my list of things to automate.
Post Reply Subscribe to Thread

gps, gps driver, gps lag, omnia gps enhance

Guest Quick Reply (no urls or BBcode)
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes