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

Search This thread

Mach2003

Senior Member
Sep 3, 2008
1,020
88
Kelowna
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:

3.4.4
Add back in the detection of dead input port

3.4.5
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)

3.4.6
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}"

3.5.0
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

3.5.1
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

3.5.2
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

3.5.3
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

3.5.7
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

3.5.8
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.


3.6.0
- 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.

KillDriver.exe
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.
 

Attachments

  • KillDriver.zip
    3 KB · Views: 7,662
  • GpsModDriver_3.3.4_PPC2003.cab
    183.4 KB · Views: 2,268
  • GpsModDriver_3_4_3.cab
    167.1 KB · Views: 4,316
  • GpsModDriver_3_6_0.cab
    170 KB · Views: 5,077
  • GpsModDriver_3_6_0_nologging.cab
    148.1 KB · Views: 4,093
Last edited:

Mach2003

Senior Member
Sep 3, 2008
1,020
88
Kelowna
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).

To calibrate the compass
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 :)

Calibration
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.
 

Attachments

  • SamsungMobilesdk_2.zip
    47.2 KB · Views: 2,891
  • smi_wm_pro_sdk_redist_2_2_0.cab
    304.6 KB · Views: 2,256
Last edited:

Mandragore

Senior Member
Jul 2, 2008
422
1
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.
 
  • Like
Reactions: wandel

Mach2003

Senior Member
Sep 3, 2008
1,020
88
Kelowna
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 QueStub.cab!
Code:
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.
 

Attachments

  • QueStub_310.CAB
    23.3 KB · Views: 951
  • QueStub_2003_310.cab
    23.3 KB · Views: 411
Last edited:
  • Like
Reactions: wandel

mbritten

Senior Member
Feb 17, 2007
167
16
Appleton, WI
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
 

Mach2003

Senior Member
Sep 3, 2008
1,020
88
Kelowna
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.
 

mutokenji

Senior Member
May 8, 2009
166
7
Tangerang
OnePlus 6
Xiaomi Poco F3
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..
 

Attachments

  • garmin.zip
    204.7 KB · Views: 1,085
Last edited:
  • Like
Reactions: wandel

Mach2003

Senior Member
Sep 3, 2008
1,020
88
Kelowna
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:
Code:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Multiplexer]
"DriverInterface"="COM6:"

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.
 

Mach2003

Senior Member
Sep 3, 2008
1,020
88
Kelowna
Two users reported after installing this driver on a CDMA Diamond, they had to Hard Reset their phones. The driver did not load properly and CAUSED the need to hard reset the phone. They HAD to reset to 'factory' due to the driver appearing to lock up the device entirely on first boot.
 

oruam57

Senior Member
Aug 27, 2005
306
4
Two users reported after installing this driver on a CDMA Diamond, they had to Hard Reset their phones. The driver did not load properly and CAUSED the need to hard reset the phone. They HAD to reset to 'factory' due to the driver appearing to lock up the device entirely on first boot.

Now...
GSM Diamond, :)
CDMA Diamond, :eek: :(
other GSM phones, anyone ???
 

sandervanzijl

Senior Member
Jan 14, 2008
571
6
I tried installing it for tomtom. but it did not work.
can someone post a short tutorial how to install this on tomtom?
 

Top Liked Posts

  • There are no posts matching your filters.
  • 5
    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:

    3.4.4
    Add back in the detection of dead input port

    3.4.5
    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)

    3.4.6
    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}"

    3.5.0
    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

    3.5.1
    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

    3.5.2
    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

    3.5.3
    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

    3.5.7
    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

    3.5.8
    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.


    3.6.0
    - 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.

    KillDriver.exe
    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.
    3
    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).

    To calibrate the compass
    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 :)

    Calibration
    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.
    3
    Thank you Mach i thought that you left from this threat

    I will test it and i will tell you as soon as possible

    Thank you again

    :eek: Left the thread :confused: no way! I've been making test builds and letting RoryB do all the work of testing them (via email). He deserves a thanks for his hard work.
    3
    New Public beta build

    I am now using a new build number version system for this project.

    Currently Major version 3, will change with whole program update
    Minor Version 3, will change if new features are added
    Release Version 4, will change anytime I email or post an update
    Build Version (various), each module has it's own counter.

    Build numbers may not be the same on all apps/drivers in a cab (they don't all get built the same number of times).


    Changes from 3.29 to 3.3.4
    -Exiting COM input by testing good messages recieved
    -Fixing altitude, whole new line of thought
    My old routines were not updated when I changed from saving seperation value to saving AEL
    No longer need to compare last reading to this reading to detect changing items
    I am introducing a small error for some devices, when your actual seperation value is exactly 0.0
    I will assume you have AEL in the data, when you actually have ASL and AEL, but they are equal
    Driver will use its table, and alter ASL incorrectly, but table will be very close to zero, so the error will be very small

    -Added version checking/logging for ALL related apps and drivers, including your GPS application itself
    -Simplified ModSettings main page text (and font used)
    Using off screen composting now
    - Allowed restore backup settings on fresh install
    - Detect loss of GPS data string, and switch ports (sudden BT power off)
    - First "KeepFix time" of connection will use CellTower location, even when KeepFix is not enabled
    - ReDo all the insert speed/heading, and keep fix logic
    - Using KeepFix time for ALL cell tower insertion timeouts.

    - rework portscan
    - Changed scan allowance to get fix from 30 to 60 seconds
    - Repair time difference calculation, messed up everything
    - Reset GPS string time on first fixed position only
    - Re-Work switch over to Cell/Unknown rules
    - Clear GPS valid speed flag, and reset speed to zero as required
    - Add short name to version screen/logging
    - Menu, About, displays version info for all related aps and drivers, tap screen to close

    For those that need the PPC2003 version of the driver, I have attached a beta version for you to try now as well.
    3
    Update

    3.6.2
    - Fixed a bug where when loss of fix happens, the time to "keep fix" may have been incorrect.
    - If device clock was in the past, it would never be reset to GPS time.
    - Better detection of lost GPS input
    - If allowing MSAPI, and COMx (both internal GPS, default config), and the current port looses GPS, ModDriver will switch to the other port. This recovers a stuck internal GPS on some devices.