GPS and the DeviceEmulator, Part 1 - emulated GPS without a GPS receiver
Have you ever wanted to run a GPS-aware application inside the DeviceEmulator, without using a hardware GPS receiver? This would make both demos and test automation of GPS-aware applications much easier!
It turns out that the support is built right into Windows Mobile 5.0, both for the DeviceEmulator and for hardware PocketPCs. The GPS Intermediate Driver can use a file as its data feed instead of a serial port.
Here is how:
- Launch the Windows Mobile 5.0 PocketPC emulator
- Use the Remote Registry Editor (in your PC's "Start\All Programs\Microsoft Studio 2005\Visual Studio Remote Tools") and connect to the Windows Mobile 5.0 PocketPC emulator
- Navigate down into "HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Drivers"
- Create a new value under "Drivers", with type REG_SZ, named "CurrentDriver", with value "FileDriver"
- Add a new key under "Drivers", called "FileDriver". Inside that key, add three values:
- "InterfaceType" REG_SZ "File"
- "FriendlyName" REG_SZ "File Driver"
- "File1" REG_SZ "\gpsdata.txt"
- Close the Remote Registry Editor. The Windows Mobile 5.0 GPS Intermediate Driver is now configured to retrieve GPS NMEA data strings from a file named "\gpsdata.txt" instead of from a hardware GPS receiver.
- Create \gpsdata.txt and populate it with NMEA data strings. I used notepad on my PC to create a file containing the following data:
$GPRMC,183729,A,3907.356,N,12102.482,W,000.0,360.0,080301,015.5,E*6F
$GPRMB,A,,,,,,,,,,,,V*71
$GPGGA,183730,3907.356,N,12102.482,W,1,05,1.6,646.4,M,-24.1,M,,*75
$GPGSA,A,3,02,,,07,,09,24,26,,,,,1.6,1.6,1.0*3D
$GPGSV,2,1,08,02,43,088,38,04,42,145,00,05,11,291,00,07,60,043,35*71
$GPGSV,2,2,08,08,02,145,00,09,46,303,47,24,16,178,32,26,18,231,43*77
$PGRME,22.0,M,52.9,M,51.0,M*14
$GPGLL,3907.360,N,12102.481,W,183730,A*33
$PGRMZ,2062,f,3*2D
$PGRMM,WGS 84*06
$GPBOD,,T,,M,,*47
$GPRTE,1,1,c,0*07
$GPRMC,183731,A,3907.482,N,12102.436,W,000.0,360.0,080301,015.5,E*67
$GPRMB,A,,,,,,,,,,,,V*71
- Use the Remote File Viewer to copy that file into the emulator as "\gpsdata.txt"
Now, if you use a GPS-aware application, such as the sample in " C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket\PC SDK\Samples\Cs\Gps\Gps.sln", the application will report updated location information about once per second.
Here are links to relevant documentation:
- GPS Intermediate Driver GPS Hardware Registry Settings (note that the registry keys may be protected on some devices)
- GPS Intermediate Driver File Registry Settings
- NMEA data (my sample GPS data was cut and pasted from this site)
- Windows Mobile 5.0 PocketPC GPS Sample
Barry
Comments
- Anonymous
May 26, 2006
The comment has been removed - Anonymous
May 26, 2006
Hi Barry,
This is getting quite deep for a blog comment, but I think the problem is to do with the following method from the PocketPC GPS Sample code in the GPSPosition class:
private DegreesMinutesSeconds ParseDegreesMinutesSeconds(double val)
{
double degrees = (val / 100.0);
double minutes = (Math.Abs(degrees) - Math.Abs((double)(int)(degrees))) * 100;
double seconds = (Math.Abs(val) - Math.Abs((double)(int)val)) * 60.0;
return new DegreesMinutesSeconds((int)degrees, (int)minutes, seconds);
}
which turns a degree decimal from a gps reading to degree minutes and seconds.
So
val = 1324.24 returns 12d 24m 34.79s
and
24.24 return 0d 24m 34.79s
The problem is when there is a negative val (e.g western longitude) with zero degrees. E.g:
-24.24 should return -0d 24m 34.79s but the above code would return 0d 24m 34.79s because you can't have a negative zero int*.
If the negative is 1 or larger there is no problem. E.g.
-124.24 gives -1d 24m 34.79s
It's late and there is not a clear answer for me here? I must be missing something....
Hope you can help... - Anonymous
June 09, 2006
Ian, thanks for the feedback about the GPS sample - I have passed it along to the sample code owner.
As for my instructions not working for you, I'll reply them again on my machine and see if I missed a step when composing the blog.
Barry - Anonymous
June 13, 2006
This blog: http://blogs.msdn.com/cenet/archive/2006/02/10/529744.aspx, talks about an important difference between GPS on the DeviceEmulator vs on hardware devices. - Anonymous
August 09, 2006
I wroted an application that work directly on serial port with nmea protocol.
http://www.codeproject.com/useritems/GpsTracer.asp
I can change that to work with GPS ntermediate driver.
what do you think? - Anonymous
March 18, 2007
hi all,ok, i loaded the sample GPS application and ran it; all worked well...made a copy and then 'upgraded' the project to the v2.0 of .NET compact and now my form will not actually run properly in the emulator (form name not correct, controls not showing up, etc)... any thoughts?cheers and thanks in advancenik - Anonymous
January 23, 2008
PingBack from http://softwareinformation.247blogging.info/barrybo-gps-and-the-deviceemulator-part-1-emulated-gps-without-a/ - Anonymous
June 15, 2009
PingBack from http://workfromhomecareer.info/story.php?id=13807