GPS Intermediate Driver in Windows Mobile 6.5
In Windows Mobile 6.5, the GPS Intermediate Driver (GPSID) served as the dedicated intermediate driver architecture responsible for managing GPS hardware multiplexing. Prior to its introduction, hardware GPS receivers were mapped directly to physical serial ports, restricting hardware access to a single client at a time. The GPS Intermediate Driver solved this resource-locking constraint by abstracting the underlying physical GPS receiver, parsing NMEA 0183 data streams, and multiplexing location data so that multiple applications could access device positioning simultaneously.
The Problem of Serial Port Locking
Traditional mobile hardware exposed GPS receivers through standard
serial (COM) stream drivers. When a mobile application opened a
connection to a physical COM port (such as COM4:), the
operating system placed an exclusive lock on that port. Consequently, no
other application could read positioning data until the initial
application closed its handle. This prevented users from running
background tracking utilities, navigation tools, and geotagging camera
software concurrently.
How the GPS Intermediate Driver Works
GPSID operates as an abstraction layer between the physical GPS hardware driver and consumer applications. It consists of three primary components:
- Hardware Layer: Interacts directly with the physical GPS receiver via its actual hardware port (e.g., a physical serial port or integrated chipset interface) and reads raw positioning data, typically formatted as NMEA 0183 sentences.
- Multiplexer Layer: Parses incoming NMEA data, extracts positioning metrics (such as latitude, longitude, altitude, and satellite lock status), and duplicates the data across virtual endpoints.
- Application Layer: Exposes two distinct programming
interfaces to consumer software:
- Virtual COM Ports: Exposes virtual serial
interfaces (such as
GPD1:) that output standard NMEA sentences to legacy software requiring standard serial communication. - GPSID API: Provides a native Windows Mobile C/C++
API (using functions such as
GPSOpenDevice,GPSGetPosition, andGPSCloseDevice) that delivers structured positioning data directly, sparing applications from having to parse raw NMEA strings manually.
- Virtual COM Ports: Exposes virtual serial
interfaces (such as
Core Capabilities and Management
Beyond multiplexing, the GPS Intermediate Driver managed several critical device-level tasks:
- Data Caching: GPSID cached the most recent valid location fix. When a new application requested coordinates, GPSID could immediately return the cached fix while waiting for fresh hardware updates.
- Power Management: The driver dynamically managed the power state of the physical receiver. If no applications held an open handle to GPSID, the driver powered down the GPS hardware to preserve battery life, reinitializing the receiver automatically when an application requested a new session.
- Registry-Based Configuration: System integrators
and developers configured the driver via the Windows Mobile registry
under the key
HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver. This path held subkeys specifying the input hardware port, baud rate, output virtual COM ports, and logging parameters.