
GPSCom2 v1.01 A freeware COM
Library for GPS support
IConnectionPointImplMT v1.03 A freeware IConnectionPoint implementation
for ATL
Welcome to GPSCom2, a simple freeware COM based library which
can be used to add GPS support to your Windows applications. GPSCom2 is a
standard COM EXE developed in ATL in VC 2010. It is based on the design of the
existing shareware GPSCom
component of the author which has now been obsoleted by GPSCom2. GPSCom2 internally
uses an advanced ATL class called IConnectionPointImplMT to support firing COM
events from worker threads different that the threads on which the COM object
was originally created. The GPSCom2 code internally used asynchronous IO when
reading from the serial port to provide the best performance and avoids the need
for polling. Included in the
download is prebuilt GPSCom2 binaries for x86 and x64. The GPSCom2 component
delivers a simple string value of a sentence back to client applications using
the standard COM Connection Point notification mechanism. A set of MFC client
classes further abstracts this to provide a simple C++ class with virtual
functions for each type of NMEA sentence. These set of classes are provided in
the GPSCom2Client\GPSCom2Client.h header file which you can simple include in
your existing MFC applications. These classes provide comprehensive support for
the following NMEA sentences: $GPRMC, $GPGGA, $GPGSV, $GPGLL, $GPVTG, $GPGSA,
$GPGRS & $GPGST. All the parsing of these sentences is handled for you and
standard virtual function and parsed structures are available for client
applications to code against.
The enclosed zip file contains the GPSCom2 source code, and
a x86 and x64 Unicode Release binary and a sample VC++ 2008 test app which
exercises the MFC client classes.
Features
- Provides a very simple MFC client API to the out of process COM object
hiding all the COM plumbing required to achieve this.
- Allows connections to GPS devices to be shared between multiple clients
i.e. multiple client processes can share the one connection to the receivers
serial port !!. This is achieved by the IGPSConnection::CreateConnection
method which hands back existing connections if the port number requested
matches an already open port.
- Standard COM Connection points are provided in the library to allow
client apps to be notified in real time of incoming GPS NMEA sentences, but
this plumbing is all hidden by the MFC client classes.
- Provides a concrete example on how COM collection classes should be
implemented.
- Comprehensive support for the following NMEA sentences: $GPRMC, $GPGGA,
$GPGSV, $GPGLL, $GPVTG, $GPGSA, $GPGRS & $GPGST. This is a pretty
comprehensive set of NMEA sentences available from most GPS devices.
- Client apps can also poll the connection for the NMEA information if
they so desire or hook into the virtual functions which get called when a
specific sentence is received.
- Supports any standard GPS device which supports the NMEA 0183 standard and
which presents its data on a Windows Serial Port (Physical or
Virtual/Emulated).
- The GPSCom2 binary does not have any dependencies on ATL or MFC DLLs. It
is a purely ATL based implementation unlike GPSCom and only takes
dependencies on standard Windows DLLs.
- Will work with any version of Windows from Windows 2000 onwards.
Updates
V1.0 GPSCom2 / v1.03 IConnectionPointImplMP (1 May 2010)
- Initial public release of GPSCom2.
- IConnectionPointImplMP has been updated to work when "using namespace ATL" is
now explicitly set in client code.
- IConnectionPointImplMP::GetInterfaceAt method has been reworked to surface a
HRESULT as a return value. In addition the IDispatch pointer is now returned
already wrapped in a CComPtr<IDispatch> smart pointer reference parameter. The
instructions of how you recode the Fire_* methods have also been reworked.
V1.01 GPSCom2 (1 May 2010)
- Updated the CSentence::Time method to correctly handle centiseconds values
- Updated the CSentence::Angle method to correctly handle empty fields
- Fixed logic errors in CVTGSentence::Parse
- CSentence::Tokenize now removes all fields from the array before it starts
parsing
- All places which parse a floating point number now handle empty fields