[Windows Mobile Apps and Games] Mach2003:
TomTom Testing: Close any application using GpsModPost (com1)

Regedit: EnableLogs to 2 (extended logging),

Run TomTom on GpsModPort, for just a minute or two, but at least until you get a fix. Close TomTom, reset the EnableLogs to 0. Email me the \GpsModLog.txt file from the phone. Use my addy from the paypal link below.

Of course you can inspect the log on your own too. Fyi, EnableLogs=1 is normal logging, much smaller logfile.

@Lycox your reg:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial5]
"GpsComPort"=dword:00000001 ;[b]leftover from 0.9< install, but should have been 4, not 1, RCx will ignore this anyway[/b]
"Uninstall"=dword:00000002 ;[b]leftover from bad uninstall of <RCx, no problem[/b]
"ActiveDriver"="Drivers\\Active\\20" ; leftover no problem
"Index"=dword:00000001 ; [b]GpsMod is on COM1, good[/b]

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Drivers]
"SleepOnDoData"=dword:000001F4 [b]; RCx wants this changed this to 1000, 0x3e8 (matches SleepTime), see the comments below[/b]
"SleepOnNoData"=dword:000001F4; [RCx=03e8[/b]

[b] the next whole key should not exist: no drivers\multiplexer[HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Drivers\Multiplexer]
"DriverInterface"="COM4:"
"MaxBufferSize"=dword:00000200
[/b]

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Drivers\Multiplexer\ActiveDevice]
"Prefix"="COM"
"Index"=dword:00000004 [b]; Yup Original gps on COM4[/b]

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Drivers\GPSOneDevice]
"PollInterval"=dword:000001F4; [b] RCx=03e8[/b]

[b] this is the correct location for multiplexer[/b]
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Multiplexer]
"DriverInterface"="COM4:" [b]; Orininal on COM4, good[/b]
"MaxBufferSize"=dword:00000200;[b] this key/value should not exist[/b]

[b] This key should only exist under RCx [/b]
[HKEY_LOCAL_MACHINE\Software\Mach2003\GpsModDriver]
"SleepTime"=dword:000001F4;[b] this might be the problem[/b]

Timing is everything...

A typical full message from the GPSID port is USUALLY 448+- bytes, occasionally it will get as high as 588, in the event that your phone is busy, two messages could arrive back to back, RCx creates a buffer of 1024 bytes, and changes the other two reg to match.

The GpsOne chip updates position only ONCE per SECOND, period!, if an application requests data more often than that it sleeps (does not return to the application), until WaitOnNoData time expires or the position is updated what ever comes first. When you set the timeout to less than 1 second, you force the application (or my driver for that matter), to process the empty data return, and make another request, (and another, and another), but still no new position data will be sent. 1 Second is the perfect timeout value. Again all three values should be the same.

In case you want to know:

The GpsOneChip, reads sat radio messages constantly, and keeps updating its own information accordingly. The GPSID driver 'polls' the chip for data, but the chip's firmware only updates once a second. The GPSID driver reads the data from the chip, and buffers it, translating it into message data, (and into the GPSID api structure). The GPSID driver will then send this data to any waiting processes, almost simultaniously. Now if your application is reading COM4, it will see this data. If you are Using GpsModDriver, then the data has to pass through one more layer, GpsMod sees that data from the GPSID layer, modifies it, and sends it to your app (if it is waiting for data), or holds on to the message UNTIL your app reads it. Your app sees data as soon as it is available, by wating (up to 1 second) for the data, rather than polling more often.

According to my Diamond logs (EnableLogs=2), GpsModDriver RC2 only adds 2 or 3 milliseconds delay to the messages. I have reduced my LadAdvance from 2800 to 2000 since changing to RC2: RC2 sends updated position data to Garmin 800 milliseconds quicker every ~~3 seconds, than 0.9 did.

So all three buffers should be the same size, they all see almost the same data, except each layer can and does alter the data (altering the data is what we use GpsModDriver for).

One more for the curious minds out there. Microsoft provides its own GPSID driver (GPSID.dll), but our phones use one modified by HTC for whatever reason (GPSID_HTC.dll), MS allows and provides the code base to the OEM's to allow them to tweek the driver to suit the chips in the phone.