GPS Direct Virtual Sensor Driver
Windows 7 introduces the Sensor API which provides an abstraction to use many sensors, and the Location API which provides a way for applications to know the location of the user. However most GPS devices come with a bluetooth or a usb interface without a Windows 7 sensor driver.
Here is a user-level driver (UMDF) that can read a COM port that contains GPS NMEA data and map it to a Windows 7 GPS Sensor for your Windows 7 applications to be gps-sensor-aware. The driver also provides ILocation* information for Location-Aware applications.
To test the driver in an application capable of getting GPS information from a sensor, try Turbo GPS.
Note #1: You need administrator privileges to install or uninstall the driver.
Note #2: The driver checks for updates each time it is run.
Interested for the C++ sources for the driver? Contact me via the Business Support Forum here.
To install the driver, select the COM port in which your GPS is sending its data, then press "Install". That port number must not be in use by another application. The application stores the port configuration in HKLM\SOFTWARE\GPSSensor7. After the driver is installed and the sensor is enabled in Control Panel, any application can access the sensor.
The CLSID for the ISensor (for developers) is {800EE0CB-71EC-40f0-991C-7E76BFABD1AF}.

To uninstall the driver, select the "Uninstall" button. Although the Sensor API model allows driver uninstallation when a driver is in use, it is recommended to uninstall the driver only if no other apps are using the sensor.
To learn how you can develop sensor-enabled and location-aware applications, see my article on CodeProject.
Returned Values
| X | SENSOR_DATA_TYPE_LONGITUDE_DEGREES |
| Y | SENSOR_DATA_TYPE_LATITUDE_DEGREES |
| Z | SENSOR_DATA_TYPE_ALTITUDE_SEALEVEL_METERS |
| HDOP | SENSOR_DATA_TYPE_HORIZONAL_DILUTION_OF_PRECISION |
| VDOP | SENSOR_DATA_TYPE_VERTICAL_DILUTION_OF_PRECISION |
| PDOP | SENSOR_DATA_TYPE_POSITION_DILUTION_OF_PRECISION |
| NSAT | SENSOR_DATA_TYPE_SATELLITES_IN_VIEW |
| Speed | SENSOR_DATA_TYPE_SPEED_KNOTS |
| True Heading | SENSOR_DATA_TYPE_TRUE_HEADING_DEGREES |
| Fix Quality | SENSOR_DATA_TYPE_FIX_QUALITY |
| Satellite information | SENSOR_DATA_TYPE_SATELLITES_IN_VIEW SENSOR_DATA_TYPE_SATELLITES_USED_COUNT SENSOR_DATA_TYPE_SATELLITES_IN_VIEW_AZIMUTH SENSOR_DATA_TYPE_SATELLITES_IN_VIEW_ELEVATION SENSOR_DATA_TYPE_SATELLITES_IN_VIEW_PRNS SENSOR_DATA_TYPE_SATELLITES_IN_VIEW_ID SENSOR_DATA_TYPE_SATELLITES_IN_VIEW_STN_RATIO SENSOR_DATA_TYPE_SATELLITES_USED_PRNS |
To use this driver in Turbo GPS, Start Turbo GPS, goto Tools->GPS->GPS Setup and select the Sensor API and the Sensor Driver:

After that, trying Tools->GPS->Connect will connect Turbo GPS to the driver.
Change Log