This is a bit technical, and is primarily for @JoeBearcat, but I'm posting it publicly because the issue affects compatibility between all current Uniden scanner models and all GNSS units that are capable of receiving multiple satellite navigation systems (Beidou, Galileo, GLONASS, etc), and has probably affected other forum members.
The issue has to do with the way Uniden is parsing NMEA sentences. The basics of the standard can be found here: http://navspark.mybigcommerce.com/content/NMEA_Format_v0.1.pdf
For GPS-only receivers, a typical data output from the receiver looks like this (comments in italics):
Time, date, position, course and speed data
15:11:42 $GPRMC,151142.00,A,3905.42289,N,07810.38664,W,0.845,,240621,,,A*61
Course and speed relative to the ground
15:11:42 $GPVTG,,T,,M,0.845,N,1.565,K,A*2D
Time, position, and fix related data of the receiver
15:11:42 $GPGGA,151142.00,3905.42289,N,07810.38664,W,1,05,5.57,324.7,M,-34.3,M,,*6E
IDs of satellites which are used for position fix
15:11:42 $GPGSA,A,3,17,14,,,,,,,,,,,8.98,5.57,7.05*0D
15:11:42 $GPGSA,A,3,82,74,73,,,,,,,,,,8.98,5.57,7.05*03
Satellite elevation, azimuth and CNR
15:11:42 $GPGSV,2,1,06,06,23,213,20,07,01,172,,14,83,085,22,17,66,320,17*79
15:11:42 $GPGSV,2,2,06,28,,,24,30,28,197,*45
15:11:42 $GPGSV,2,1,08,66,03,020,,67,05,067,21,73,79,254,28,74,34,325,11*76
15:11:42 $GPGSV,2,2,08,80,37,163,18,82,19,040,27,83,61,008,20,84,42,249,15*74
Position, time and fix status
15:11:42 $GPGLL,3905.42289,N,07810.38664,W,151142.00,A,A*72
This data is typically output once per second, with all the variables being refreshed each time.
$ is always the first character of the sentence. The GP after the $ is the talker ID, which indicates the data is derived from the US GPS system. However, the talker ID changes when other satellite systems are introduced into the mix:
So when the receiver is combining data from multiple systems (in this example, GPS and GLONASS), the data looks like this:
15:49:53 $GNRMC,154953.00,A,3905.41318,N,07810.42978,W,0.080,,240621,,,A*76
15:49:53 $GNVTG,,T,,M,0.080,N,0.148,K,A*38
15:49:53 $GNGGA,154953.00,3905.41318,N,07810.42978,W,1,06,1.55,243.0,M,-34.3,M,,*7A
15:49:53 $GNGSA,A,3,14,06,,,,,,,,,,,2.65,1.55,2.16*1A
15:49:53 $GNGSA,A,3,74,73,67,83,,,,,,,,,2.65,1.55,2.16*14
15:49:53 $GPGSV,3,1,12,01,23,045,,02,09,227,,03,33,080,,06,39,222,27*75
15:49:53 $GPGSV,3,2,12,11,09,221,,14,68,138,25,17,68,004,13,19,56,303,20*72
15:49:53 $GPGSV,3,3,12,21,05,048,,22,22,054,,24,17,308,21,30,13,190,*70
15:49:53 $GLGSV,3,1,10,67,12,049,28,68,10,097,,73,61,201,36,74,52,311,26*64
15:49:53 $GLGSV,3,2,10,75,03,334,22,80,16,168,18,82,04,051,18,83,44,028,25*6C
15:49:53 $GLGSV,3,3,10,84,54,279,23,85,04,245,25*69
15:49:53 $GNGLL,3905.41318,N,07810.42978,W,154953.00,A,A*64
Instead of every sentence having the GP talker ID, GN is used where data from multiple systems is combined, GL is used for GLONASS satellite position data, and GP is used for GPS satellite position data. And that is where the problem arises.
The firmware for all current Uniden scanners incorrectly looks at the first 6 characters of the sentence to parse the sentence type, rather than just characters 4, 5, and 6 ($ being character 1). As a result, all valid NMEA GLL and GGA data sentences with talker IDs other than GP are ignored, and the scanner will not update its position from the data, even though the data is correctly formatted and being received by the scanner, when the GNSS receiver is receiving multiple systems, or any satellite navigation system other than GPS. This also breaks compatibility with ALL multi-system GNSS receivers.
The Reyax modules I use for my internal GPS installs receive GLONASS and GPS, so I've been dealing with this issue for a few years. I've been working around this bug by reprogramming them to always use the GP talker ID, but any time the module gets reset to factory defaults, it resumes using the correct talker IDs, and the scanner doesn't recognize the position data from the module anymore. From a customer's view, that's indistinguishable from a module failure, and I get the joy of doing a warranty repair on a perfectly good module.
Fixing the problem won't just make my life easier, it will benefit everyone who wants to use a multi-system GNSS receiver for mobile scanning. And it should be easy to do; only a line or two of code should need to be changed.
The issue has to do with the way Uniden is parsing NMEA sentences. The basics of the standard can be found here: http://navspark.mybigcommerce.com/content/NMEA_Format_v0.1.pdf
For GPS-only receivers, a typical data output from the receiver looks like this (comments in italics):
Time, date, position, course and speed data
15:11:42 $GPRMC,151142.00,A,3905.42289,N,07810.38664,W,0.845,,240621,,,A*61
Course and speed relative to the ground
15:11:42 $GPVTG,,T,,M,0.845,N,1.565,K,A*2D
Time, position, and fix related data of the receiver
15:11:42 $GPGGA,151142.00,3905.42289,N,07810.38664,W,1,05,5.57,324.7,M,-34.3,M,,*6E
IDs of satellites which are used for position fix
15:11:42 $GPGSA,A,3,17,14,,,,,,,,,,,8.98,5.57,7.05*0D
15:11:42 $GPGSA,A,3,82,74,73,,,,,,,,,,8.98,5.57,7.05*03
Satellite elevation, azimuth and CNR
15:11:42 $GPGSV,2,1,06,06,23,213,20,07,01,172,,14,83,085,22,17,66,320,17*79
15:11:42 $GPGSV,2,2,06,28,,,24,30,28,197,*45
15:11:42 $GPGSV,2,1,08,66,03,020,,67,05,067,21,73,79,254,28,74,34,325,11*76
15:11:42 $GPGSV,2,2,08,80,37,163,18,82,19,040,27,83,61,008,20,84,42,249,15*74
Position, time and fix status
15:11:42 $GPGLL,3905.42289,N,07810.38664,W,151142.00,A,A*72
This data is typically output once per second, with all the variables being refreshed each time.
$ is always the first character of the sentence. The GP after the $ is the talker ID, which indicates the data is derived from the US GPS system. However, the talker ID changes when other satellite systems are introduced into the mix:
Galileo Positioning System | GA |
BDS (BeiDou System) | GB |
NavIC (IRNSS) | GI |
GLONASS | GL |
Global Positioning System (GPS) | GP |
QZSS | GQ |
The “GN” Talker Identifier shall be used when the data in the sentence is produced from a combination of multiple satellite systems. | GN |
So when the receiver is combining data from multiple systems (in this example, GPS and GLONASS), the data looks like this:
15:49:53 $GNRMC,154953.00,A,3905.41318,N,07810.42978,W,0.080,,240621,,,A*76
15:49:53 $GNVTG,,T,,M,0.080,N,0.148,K,A*38
15:49:53 $GNGGA,154953.00,3905.41318,N,07810.42978,W,1,06,1.55,243.0,M,-34.3,M,,*7A
15:49:53 $GNGSA,A,3,14,06,,,,,,,,,,,2.65,1.55,2.16*1A
15:49:53 $GNGSA,A,3,74,73,67,83,,,,,,,,,2.65,1.55,2.16*14
15:49:53 $GPGSV,3,1,12,01,23,045,,02,09,227,,03,33,080,,06,39,222,27*75
15:49:53 $GPGSV,3,2,12,11,09,221,,14,68,138,25,17,68,004,13,19,56,303,20*72
15:49:53 $GPGSV,3,3,12,21,05,048,,22,22,054,,24,17,308,21,30,13,190,*70
15:49:53 $GLGSV,3,1,10,67,12,049,28,68,10,097,,73,61,201,36,74,52,311,26*64
15:49:53 $GLGSV,3,2,10,75,03,334,22,80,16,168,18,82,04,051,18,83,44,028,25*6C
15:49:53 $GLGSV,3,3,10,84,54,279,23,85,04,245,25*69
15:49:53 $GNGLL,3905.41318,N,07810.42978,W,154953.00,A,A*64
Instead of every sentence having the GP talker ID, GN is used where data from multiple systems is combined, GL is used for GLONASS satellite position data, and GP is used for GPS satellite position data. And that is where the problem arises.
The firmware for all current Uniden scanners incorrectly looks at the first 6 characters of the sentence to parse the sentence type, rather than just characters 4, 5, and 6 ($ being character 1). As a result, all valid NMEA GLL and GGA data sentences with talker IDs other than GP are ignored, and the scanner will not update its position from the data, even though the data is correctly formatted and being received by the scanner, when the GNSS receiver is receiving multiple systems, or any satellite navigation system other than GPS. This also breaks compatibility with ALL multi-system GNSS receivers.
The Reyax modules I use for my internal GPS installs receive GLONASS and GPS, so I've been dealing with this issue for a few years. I've been working around this bug by reprogramming them to always use the GP talker ID, but any time the module gets reset to factory defaults, it resumes using the correct talker IDs, and the scanner doesn't recognize the position data from the module anymore. From a customer's view, that's indistinguishable from a module failure, and I get the joy of doing a warranty repair on a perfectly good module.
Fixing the problem won't just make my life easier, it will benefit everyone who wants to use a multi-system GNSS receiver for mobile scanning. And it should be easy to do; only a line or two of code should need to be changed.
Last edited: