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:
    1. Virtual COM Ports: Exposes virtual serial interfaces (such as GPD1:) that output standard NMEA sentences to legacy software requiring standard serial communication.
    2. GPSID API: Provides a native Windows Mobile C/C++ API (using functions such as GPSOpenDevice, GPSGetPosition, and GPSCloseDevice) that delivers structured positioning data directly, sparing applications from having to parse raw NMEA strings manually.

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.