ChroGPS Dash GNSS Receiver Compatibility Guide
Overview
ChroGPS Dash is universally compatible with all GPS/GNSS receivers supported by GPSd. The dashboard communicates with GPSd via its JSON protocol, which acts as a universal translator for dozens of different GPS chip protocols.
Popular Compatible GPS Chips
u-blox
- u-blox 5/6/7/8/9/10 series
- Protocol: UBX (u-blox proprietary binary)
- Multi-GNSS: Yes (GPS, GLONASS, Galileo, BeiDou)
- Multi-Band: Yes (u-blox 9/10 support L1+L5)
Quectel
- L76/L80/L86 series (MTK-based)
- LC79/LC86/LG77/LG69 series (modern)
- Protocol: NMEA + proprietary binary
- Multi-GNSS: Yes (depends on model)
SkyTraq
- Venus 6/7/8 chipsets
- NavSpark modules
- Protocol: SkyTraq binary protocol
- Multi-GNSS: Yes (GPS, GLONASS, Galileo, BeiDou)
Unicore Communications
- UM220/UM230/UM330 series
- UM430/UM442/UM482 (high-precision)
- Protocol: Unicore binary protocol
- Multi-GNSS: Yes (all constellations)
MediaTek (MTK)
- MT3318/MT3329/MT3333/MT3339
- Protocol: MTK binary (PMTK commands)
- Multi-GNSS: Limited (mostly GPS + GLONASS)
Trimble
- Copernicus/Copernicus II
- Thunderbolt/Thunderbolt-E
- Resolution T/SMT 360
- Protocol: TSIP (Trimble Standard Interface Protocol)
- Multi-GNSS: Varies by model
Garmin
- Various GPS devices
- Protocol: Garmin binary protocol
- Multi-GNSS: Depends on model
SiRF Technology
- SiRFstar II/III/IV/V chipsets
- Protocol: SiRF binary protocol
- Multi-GNSS: SiRFstar IV/V support GLONASS
Broadcom
- BCM4752/BCM47755/BCM47765
- Protocol: NMEA (standard)
- Multi-GNSS: Yes (modern chips)
Telit
- Jupiter/Super Jupiter series
- GL868 modules
- Protocol: NMEA + proprietary extensions
- Multi-GNSS: Limited
Generic NMEA Devices
- Any GPS outputting standard NMEA-0183 sentences
- Protocol: NMEA-0183
- Multi-GNSS: If device supports it
How Compatibility Works
1. GPSd as Universal Translator
Step 1 Step 2 Step 3 Step 4 Step 5
------- ------- ------- ------- -------
GPS Chip → Protocol → gpsd → JSON → ChroGPS Dash
(hardware) (language) (translator) (standard)
Examples:
u-blox → UBX binary → gpsd → JSON → Shows satellites!
Quectel → MTK binary → gpsd → JSON → Shows satellites!
Trimble → TSIP → gpsd → JSON → Shows satellites!
Generic → NMEA text → gpsd → JSON → Shows satellites!
2. Field Normalization
ChroGPS Dash handles different field naming conventions:
PRNorsvid→ Satellite identifierssorsnrorcn0→ Signal strengthelorelevation→ Elevation angleazorazimuth→ Azimuth anglegnssid→ Constellation identifiersigid→ Signal/frequency identifier (for multi-band)
3. Constellation Detection (Enhanced Three-Tier Fallback)
ChroGPS Dash uses intelligent constellation detection that handles both NMEA and u-blox numbering schemes:
Priority 1: gnssid with dual-scheme support
- Tries NMEA 4.10+ mapping first (2=GLONASS, 3=Galileo)
- Validates against PRN range
- Falls back to u-blox mapping if mismatch (6=GLONASS, 2=Galileo)
↓ (if gnssid not available or invalid)
Priority 2: PRN/SVID ranges (standard ranges)
- GPS: 1-32
- SBAS: 33-64, 120-158
- GLONASS: 65-96
- etc.
↓ (if ambiguous)
Priority 3: Talker ID (NMEA only, legacy)
- GP=GPS, GL=GLONASS, GA=Galileo, etc.
Important: Different GPS manufacturers use different gnssid numbering:
- NMEA 4.10+ standard: gnssid 2=GLONASS, 3=Galileo
- u-blox proprietary: gnssid 6=GLONASS, 2=Galileo
ChroGPS Dash automatically detects which scheme your receiver uses by validating gnssid against PRN ranges!
4. Multi-Band Receiver Support
Modern dual/tri-band receivers (L1+L5, L1+L2+L5) report the same satellite on multiple frequencies. ChroGPS Dash handles this intelligently:
Backend Storage:
- Tracks each signal separately:
PRN_gnssid_sigid - Example: GPS PRN 10 on L1 =
10_0_0, on L5I =10_0_6 - Preserves all signal data in cache
Frontend Display:
- Aggregates signals by PRN
- Shows strongest signal per satellite
- One dot per satellite on skyview
- No duplicate PRNs in tables
Supported Signal Types:
- GPS: L1C/A, L2C, L5
- GLONASS: L1OF, L2OF
- Galileo: E1, E5a, E5b
- BeiDou: B1, B2, B3
- QZSS: L1, L2, L5
5. Satellite Caching System
ChroGPS Dash maintains a persistent satellite cache to show ALL satellites even when gpsd sends them in batches:
How it works:
- Cache location:
/var/tmp/chrogps-sat-cache.json - TTL: 30 seconds per satellite
- Accumulates satellites across refreshes
- Individual satellite expiration (not whole cache)
- Automatically filters out stale satellites
Benefits:
- See 25+ satellites instead of just 15-17
- Satellites persist across page refreshes
- No missing satellites from batched gpsd messages
6. Ghost Satellite Filtering
ChroGPS Dash filters out “ghost” satellites that GPS receivers report from almanac data but aren’t actually visible:
Filtered when ALL of:
- Elevation = 0°
- Azimuth = 0°
- Signal strength = 0 dBHz
- Not used in position fix
Example: QZSS satellites (PRN 193-197) visible only in Japan/Asia will be filtered out for users in other locations.
7. Multi-GNSS Support
Automatically detects and displays:
- 🇺🇸 GPS (USA)
- 🇷🇺 GLONASS (Russia)
- 🇪🇺 Galileo (European Union)
- 🇨🇳 BeiDou (China)
- 🇯🇵 QZSS (Japan)
- 🇮🇳 NavIC (India)
- 🛰️ SBAS (WAAS/EGNOS/MSAS/GAGAN)
Troubleshooting
“Wrong constellation colors”
Your GPS receiver may be using u-blox-style gnssid values instead of NMEA standard. ChroGPS Dash handles both automatically by validating gnssid against PRN ranges.
To verify:
gpspipe -w | grep '"class":"SKY"' | head -3 | jq '.satellites[]? | {PRN, gnssid}'
If you see GLONASS satellites (PRN 65-96) with gnssid=6, that’s u-blox numbering (correct). If you see gnssid=2, that’s NMEA numbering (also correct). ChroGPS handles both!
Note: requires gpspipe and jq programs. If any of those commands are not found, run:
sudo apt-get install -y gpsd-clients jq
Then you can re-run the test command.
“Missing satellites”
- Some chips report satellites in multiple gpsd messages
- ChroGPS caches satellites for 30 seconds to accumulate all of them
- Satellite count should grow from 15→20→25 over a few refreshes
- Check cache:
cat /tmp/chrogps-sat-cache.json | jq '.satellites | length'
“Duplicate satellites on multi-band receiver”
ChroGPS automatically aggregates multiple signals per satellite and shows only the strongest. You should see one entry per PRN regardless of how many bands are being tracked.
“Satellites showing but no position fix”
Check that you have:
- Clear view of sky
- At least 4 satellites with good signal (>25 dBHz)
- HDOP < 5.0
- Wait 30-60 seconds for initial fix
Protocol Details
Protocols Supported by GPSd (and thus ChroGPS Dash):
| Protocol | Chips Using It | Binary/Text | Multi-GNSS | Multi-Band |
|---|---|---|---|---|
| UBX | u-blox 5/6/7/8/9/10 | Binary | Yes | 9/10 only |
| NMEA-0183/4.1 | Almost all GPS | Text | Depends | 4.1+ only |
| TSIP | Trimble | Binary | Yes | Yes |
| SiRF | SiRF chipsets | Binary | Limited | No |
| MTK | MediaTek, Quectel | Binary | Limited | No |
| SkyTraq | SkyTraq Venus | Binary | Yes | Limited |
| Unicore | Unicore UM series | Binary | Yes | Yes |
| Garmin | Garmin devices | Binary | Varies | Varies |
| Zodiac | Rockwell Zodiac | Binary | No | No |
| EverMore | GlobalSat, iBlue | Binary | No | No |
Testing Your GPS
To run a quick compatibility test, simply run this command:
curl -ssL https://w0chp.radio/gpsd-test | bash
Note: requires gpspipe and jq programs. If any of those commands are not found, run:
sudo apt-get install -y gpsd-clients jq
Then you can re-run the test script.
The test will show:
- ✓ GPS fix status (Mode 0/1/2/3)
- ✓ Satellite count and signal strengths
- ✓ Position accuracy
- ✓ Message types received
- ✓ Compatibility verdict
Technical Details
GNSS ID Numbering Schemes
ChroGPS Dash supports both NMEA and u-blox gnssid numbering:
NMEA 4.10+ Standard:
| gnssid | Constellation |
|---|---|
| 0 | GPS |
| 1 | SBAS |
| 2 | GLONASS |
| 3 | Galileo |
| 4 | BeiDou |
| 5 | QZSS |
| 6 | NavIC |
u-blox Proprietary:
| gnssid | Constellation |
|---|---|
| 0 | GPS |
| 1 | SBAS |
| 2 | Galileo |
| 3 | BeiDou |
| 5 | QZSS |
| 6 | GLONASS |
ChroGPS detects which scheme by validating gnssid against PRN ranges and automatically uses the correct mapping!
Signal ID (sigid) Values
Signal IDs vary by constellation and are used to identify different frequency bands:
GPS:
- 0 = L1C/A
- 3 = L2 CL
- 4 = L2 CM
- 6 = L5 I
- 7 = L5 Q
GLONASS:
- 0 = L1 OF
- 2 = L2 OF
Galileo:
- 0 = E1 C
- 1 = E1 B
- 3 = E5 aI
- 4 = E5 aQ
- 5 = E5 bl
- 6 = E5 bQ
Source: gpsd JSON Protocol Documentation
Conclusion
Bottom line: If your GPS works with GPSd, it works with ChroGPS Dash. No special configuration needed beyond normal GPSd setup.
The robust constellation detection with dual-scheme support, multi-band aggregation, satellite caching, and ghost filtering ensure accurate display across all GPS chip manufacturers and protocols.
Key Features:
- Universal gpsd protocol support
- NMEA + u-blox gnssid scheme detection
- Multi-band receiver support (L1+L5)
- 30-second satellite caching
- Ghost satellite filtering
- Field normalization across chip types
- 7 constellation support (GPS/GLONASS/Galileo/BeiDou/QZSS/NavIC/SBAS)