GPSDriverNMEA library

Discussion in 'Additional Libraries' started by agraham, Nov 11, 2008.

  1. agraham

    agraham Expert Licensed User

    This library works alongside the GPSDriver library, or standalone, and provides access to the NMEA sentences that are being parsed by the GPS Intermediate Driver. Like the GPSDriver library it will only work on devices that implement the GPS Intermediate Driver - generally Windows Mobile 5.0 or later devices fitted with an internal GPS receiver. .NET 2.0 or later needed. This library lets you cross check the results from GPSDriver and was written to help me in the development of the original GPSDriver code.

    As usual demo, help and source for merging are included with the library.

    Attached Files:

  2. derez

    derez Expert Licensed User

    NMEA lib

    Thank you for providing us with this library.
    Although with the excelent functionality of the new GPSDriver it seems un-necessary - I still think it is useful for debuging. I find devices which behave in a different way then others and this lib might help.

  3. Merlot2309

    Merlot2309 Active Member Licensed User


    Yes, yes and :sign0162:
    After searching, trying, reading so much finally I found this.
    It works perfect on my HTC Touch Diamond 2 with a very fast fix as well.

    I do thank you from the bottom of my heart.
  4. nl1007

    nl1007 Member Licensed User

    I downloaded this, but the help file displays an error:
    "Navigation to the webpage was canceled"
    Is there a list of its functions and properties anywhere else?

    Edit: I found a mention of this problem, here:
    I 'unblocked' it, and now it works..

    It would probably be more useful to be able to read the (complete) NMEA messages from the GPS Driver, particularly if you could select particular ones, e.g. GGA or RMC..
    Last edited: Jul 8, 2009
  5. agraham

    agraham Expert Licensed User

    It would but they aren't available ready parsed as complete sentences from the Windows Intermediate Driver and, without using a serial port emulation which was the whole point of implementing GPSDriver and GPSDriverNMEA, the GPS data is only available as a read on-demand stream.

    If you want the complete ready parsed sentences then use GPSSerial. This should work in conjunction with the virtual serial ports provided by the Windows Intermediate Driver, or indeed an actual serial port, except on certain devices (like some HTC and rebadged HTC devices) that are known to have problems with the .NET Serial Port class (which was the main impetus for writing GPSDriver and GPSDriverNMEA).
  6. nl1007

    nl1007 Member Licensed User

    Surely the GPS driver library must assemble NMEA sentences from the stream, in order to extract the appropriate details; I was just thinking that if it (or this) made the 'last decoded' version of each message type (e.g. GGA, GSA or RMC) available, then if somebody wanted details not currently available, they could extract it from an already validated message, rather than duplicating that functionality..
    I would like to get the 'Position fix indicator' value from the GGA message, so I can tell if DGPS is being used (i.e. the EGNOS satellite(s) are visible)..
  7. agraham

    agraham Expert Licensed User

    Nope. The Windows Intermediate Driver (WIM) does that and provides a structure on demand via a system call with the latest individual items of data. The GPSDriver library gets this structure from the WIM and returns the individual data items as properties. If you are interested you can see the source code for the library in GPSDriver.cs in the Libraries folder.

    In order to emulate GPSDriver the GPSSerial library does have to parse the NMEA sentences and, as I said, also makes them individually available. They are not validated but do include the checksum if you want to do validation. Again you can see the source code in the library archive. GPSSerial only parses out four sentences but the raw unparsed stream is available from its NMEA port if you want to parse out any other data. Alternatively, if you have VS2005 or later you could build an enhanced library adding the parsing for extra sentences which would be a trivial exercise. If you don't have the capability I would be happy to add any sentences you wanted.
  8. navman

    navman Member Licensed User

    NMEA parsing request

    I'm attempting to write some tactical yacht racing software for my use that requires NMEA input from not only a GPS but also a wind instrument. From my reading regarding GPSDriver I understand that the NMEA parsing is "closed" due to processing by the intermediate driver. I thought I would have to go back to Serial2 until I came across your newer GPSSerial 1.3 that emulates the methods from GPSDriver and means I can reuse quite a bit of newer sample code. (this is quite a learning curve for me as I last programmed in uP assembler - although I am enjoying learning the basic4ppc environment).

    The one stumbling block I have would seem to be the parsing of the MWV NMEA sentence. I would be most grateful if you could extend your offer above to include this sentence in the library. If you are able to do so, I can come back with further details for you on the format of the sentence if necessary.
    Many thanks in advance.
  9. agraham

    agraham Expert Licensed User

    I've deleted the original message here because I thought of a better idea.

    Try the attached. There are two new read/write properties, GETUSER1 and GETUSER2. If you write to either of them a case-sensitive prefix such as "$GPMWV" then you should be able to read from that property the last NMEA sentence received with that prefix. There is no restriction on when you can change them, they take effect any time.

    Post if it works, or doesn't. There are a couple of very minor bug fixes in as well that weren't worth reposting the library for before so I'll repost it properly when it works.

    Attached Files:

  10. navman

    navman Member Licensed User

    re: NMEA parsing request

    Wow - that was quick. Thanks Andrew. Looks like a good option to get additional sentences read.
    I've been studying the example code again and now suspect that the "cleanest" way to be able to access the properties in the MWV sentence will be to write a "GetWindData" "method" that populates various property variables relating to that sentence. This would run after obtaining the MWV NMEA sentence. Clearly basic GPS data is but a subset of the full NMEA library and each sentence has its own format to deal with.
    I also assume from the text in your help file that it is OK to have the GPSserial and NMEA ports open at the same time? The NMEA data from GPS and wind instrument is combined in an external device so all comes in on one serial (bluetooth) port. If you have other suggestions on how to approach the task, please forward.
    The NMEA device is currently being installed on the boat so I'll let you know how things go when it's all up and running and I can write and test some code.
  11. agraham

    agraham Expert Licensed User

    StrSplit into a structure is probably the way to go. It is efficient and you can name the structure items appropriately.
    It's actually necessary to have the GPS open to get NMEA. The present help is not clear on this but the next help version will clarify that.
  12. icaedp

    icaedp New Member Licensed User

    Sample code

    Could you post a sample code about using gpsuser1 in conjuction with gpsnmea to catch latitude and longitude?
  13. agraham

    agraham Expert Licensed User

    Presumably you mean GetUser1 not gpsuser1 but I don't know what you mean by gpsnmea. If you mean GPSDriverNMEA then GetUser1 is not appplicable as I have only added it to GPSSerial.

    @Navman - I think this discussion of altering GPSSerial is out of place in the GPSDriverNMEA thread. When you repost whether it works or not please start a new thread in the "Questions and Help Needed" forum.
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice