How GPS Chips Interfaced with Windows Mobile 6.5
In Windows Mobile 6.5, standalone GPS chips communicated with software applications primarily through an abstraction layer known as the GPS Intermediate Driver (GPSID). This architectural layer sat between the physical hardware driver and user-level applications, solving the traditional limitation where only a single application could open a serial hardware port at one time. By parsing raw NMEA 0183 data streams from the physical chip and exposing both high-level programmatic APIs and multiplexed virtual COM ports, Windows Mobile 6.5 allowed multiple navigation and location-aware applications to access location data simultaneously.
The Hardware and Serial Interface Layer
Standalone GPS silicon—commonly manufactured by vendors like SiRF, Qualcomm, or Texas Instruments—was typically integrated into Windows Mobile devices via an internal UART (Universal Asynchronous Receiver-Transmitter) interface or an internal USB-to-serial bus.
At the base level, the original equipment manufacturer (OEM) provided
a standard Windows CE stream device driver that mapped the GPS receiver
to an internal physical COM port (such as COM4: at a
specific baud rate, usually 4800 or 9600 bps). The standalone chip
continuously broadcasted standard NMEA 0183 sentences, such as
$GPRMC, $GPGGA, and $GPGSV,
containing raw coordinates, altitude, velocity, and satellite
constellation health.
The GPS Intermediate Driver (GPSID)
Direct hardware access created a major bottleneck: Windows CE serial ports were strictly exclusive, meaning that if one application opened the hardware port, all other location-aware processes were locked out. Microsoft addressed this starting in Windows Mobile 5.0 and refined it through Windows Mobile 6.5 with the GPS Intermediate Driver.
The GPSID functioned as a system-level multiplexer and parser. Its
configuration was managed in the Windows Registry under
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver],
separated into two primary roles:
- Drivers Layer (
/Drivers): Configured the physical hardware interface. The registry pointed to the real stream driver (e.g.,COM4:) and set the appropriate baud rate so GPSID could capture the raw incoming NMEA stream. - Multiplexer Layer (
/Multiplexer): Created virtual stream ports (commonly designated asGPD1:or mapped to a virtual port likeCOM7:). This allowed legacy applications to read raw NMEA strings from a shared source without locking the physical serial port.
The Windows Mobile GPS API
For modern Windows Mobile 6.5 applications, Microsoft provided a
native C/C++ API (gpsapi.h) that bypassed the need for
developers to manually open COM ports and write custom NMEA parsers.
The API lifecycle operated through several core functions:
GPSOpenDevice: Initiated a session with the GPSID, requesting either an event handle for asynchronous position updates or a polling configuration.GPSGetPosition: Retrieved parsed, structured location data populated into aGPS_POSITIONstructure. This structure provided strongly typed fields, including latitude, longitude, altitude, heading, speed, dilution of precision (HDOP/VDOP), and fix status, eliminating the overhead of string manipulation in the client app.GPSGetDeviceState: Queried the current operational status of the GPS hardware (e.g., searching for satellites, fix acquired, or powered down).GPSCloseDevice: Terminated the connection, allowing the operating system to shut down the hardware if no other processes were requesting data.
Power Management Integration
Because standalone GPS receivers were significant power drains on
mobile batteries, the GPSID integrated directly with the Windows Mobile
Power Manager. When an application invoked GPSOpenDevice or
opened a virtual COM port, the GPSID asserted a power requirement,
prompting the underlying hardware driver to transition the chip from a
low-power sleep state (D4/D3) to full operational power (D0). Once all
active application handles were closed, the driver automatically
throttled down or turned off power to the GPS hardware to conserve
battery life.