Fix transponder capability overwriting aircraft type in popups
Add dedicated transponder fields to prevent Mode S decoder from overwriting the aircraft Category field with transponder capability information. **Problem Fixed:** - DF11 All-Call Reply messages were setting aircraft.Category to "Enhanced Transponder" - This overwrote the actual aircraft type (Light, Medium, Heavy, etc.) from ADS-B - Users saw "Enhanced Transponder" instead of proper aircraft classification **Solution:** - Added dedicated TransponderCapability and TransponderLevel fields to Aircraft struct - Updated JSON marshaling to include new transponder fields - Modified decodeAllCallReply() to use dedicated fields instead of Category - Enhanced popup display to show transponder info separately from aircraft type - Removed Category overwriting in decodeCommD() for DF24 messages **New Aircraft Fields:** - TransponderCapability: Human-readable capability description - TransponderLevel: Numeric capability level (0-7) **Popup Display:** - Aircraft type now shows correctly (Light, Medium, Heavy, etc.) - Transponder capability displayed as separate "Transponder:" field when available - Only shows transponder info when DF11 messages have been received **Data Quality Indicators Clarification:** - NACp: Navigation Accuracy Category - Position (0-11, higher = more accurate) - NACv: Navigation Accuracy Category - Velocity (0-4, higher = more accurate) - SIL: Surveillance Integrity Level (0-3, higher = more reliable) Users now see both proper aircraft classification AND transponder capability information without conflicts between different message types. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
9242852c01
commit
056c2b8346
3 changed files with 178 additions and 46 deletions
|
|
@ -112,29 +112,31 @@ func (a *AircraftState) MarshalJSON() ([]byte, error) {
|
|||
// Create a struct that mirrors AircraftState but with ICAO24 as string
|
||||
return json.Marshal(&struct {
|
||||
// From embedded modes.Aircraft
|
||||
ICAO24 string `json:"ICAO24"`
|
||||
Callsign string `json:"Callsign"`
|
||||
Latitude float64 `json:"Latitude"`
|
||||
Longitude float64 `json:"Longitude"`
|
||||
Altitude int `json:"Altitude"`
|
||||
BaroAltitude int `json:"BaroAltitude"`
|
||||
GeomAltitude int `json:"GeomAltitude"`
|
||||
VerticalRate int `json:"VerticalRate"`
|
||||
GroundSpeed int `json:"GroundSpeed"`
|
||||
Track int `json:"Track"`
|
||||
Heading int `json:"Heading"`
|
||||
Category string `json:"Category"`
|
||||
Squawk string `json:"Squawk"`
|
||||
Emergency string `json:"Emergency"`
|
||||
OnGround bool `json:"OnGround"`
|
||||
Alert bool `json:"Alert"`
|
||||
SPI bool `json:"SPI"`
|
||||
NACp uint8 `json:"NACp"`
|
||||
NACv uint8 `json:"NACv"`
|
||||
SIL uint8 `json:"SIL"`
|
||||
SelectedAltitude int `json:"SelectedAltitude"`
|
||||
SelectedHeading float64 `json:"SelectedHeading"`
|
||||
BaroSetting float64 `json:"BaroSetting"`
|
||||
ICAO24 string `json:"ICAO24"`
|
||||
Callsign string `json:"Callsign"`
|
||||
Latitude float64 `json:"Latitude"`
|
||||
Longitude float64 `json:"Longitude"`
|
||||
Altitude int `json:"Altitude"`
|
||||
BaroAltitude int `json:"BaroAltitude"`
|
||||
GeomAltitude int `json:"GeomAltitude"`
|
||||
VerticalRate int `json:"VerticalRate"`
|
||||
GroundSpeed int `json:"GroundSpeed"`
|
||||
Track int `json:"Track"`
|
||||
Heading int `json:"Heading"`
|
||||
Category string `json:"Category"`
|
||||
Squawk string `json:"Squawk"`
|
||||
Emergency string `json:"Emergency"`
|
||||
OnGround bool `json:"OnGround"`
|
||||
Alert bool `json:"Alert"`
|
||||
SPI bool `json:"SPI"`
|
||||
NACp uint8 `json:"NACp"`
|
||||
NACv uint8 `json:"NACv"`
|
||||
SIL uint8 `json:"SIL"`
|
||||
TransponderCapability string `json:"TransponderCapability"`
|
||||
TransponderLevel uint8 `json:"TransponderLevel"`
|
||||
SelectedAltitude int `json:"SelectedAltitude"`
|
||||
SelectedHeading float64 `json:"SelectedHeading"`
|
||||
BaroSetting float64 `json:"BaroSetting"`
|
||||
|
||||
// From AircraftState
|
||||
Sources map[string]*SourceData `json:"sources"`
|
||||
|
|
@ -156,29 +158,31 @@ func (a *AircraftState) MarshalJSON() ([]byte, error) {
|
|||
Flag string `json:"flag"`
|
||||
}{
|
||||
// Copy all fields from Aircraft
|
||||
ICAO24: fmt.Sprintf("%06X", a.Aircraft.ICAO24),
|
||||
Callsign: a.Aircraft.Callsign,
|
||||
Latitude: a.Aircraft.Latitude,
|
||||
Longitude: a.Aircraft.Longitude,
|
||||
Altitude: a.Aircraft.Altitude,
|
||||
BaroAltitude: a.Aircraft.BaroAltitude,
|
||||
GeomAltitude: a.Aircraft.GeomAltitude,
|
||||
VerticalRate: a.Aircraft.VerticalRate,
|
||||
GroundSpeed: a.Aircraft.GroundSpeed,
|
||||
Track: a.Aircraft.Track,
|
||||
Heading: a.Aircraft.Heading,
|
||||
Category: a.Aircraft.Category,
|
||||
Squawk: a.Aircraft.Squawk,
|
||||
Emergency: a.Aircraft.Emergency,
|
||||
OnGround: a.Aircraft.OnGround,
|
||||
Alert: a.Aircraft.Alert,
|
||||
SPI: a.Aircraft.SPI,
|
||||
NACp: a.Aircraft.NACp,
|
||||
NACv: a.Aircraft.NACv,
|
||||
SIL: a.Aircraft.SIL,
|
||||
SelectedAltitude: a.Aircraft.SelectedAltitude,
|
||||
SelectedHeading: a.Aircraft.SelectedHeading,
|
||||
BaroSetting: a.Aircraft.BaroSetting,
|
||||
ICAO24: fmt.Sprintf("%06X", a.Aircraft.ICAO24),
|
||||
Callsign: a.Aircraft.Callsign,
|
||||
Latitude: a.Aircraft.Latitude,
|
||||
Longitude: a.Aircraft.Longitude,
|
||||
Altitude: a.Aircraft.Altitude,
|
||||
BaroAltitude: a.Aircraft.BaroAltitude,
|
||||
GeomAltitude: a.Aircraft.GeomAltitude,
|
||||
VerticalRate: a.Aircraft.VerticalRate,
|
||||
GroundSpeed: a.Aircraft.GroundSpeed,
|
||||
Track: a.Aircraft.Track,
|
||||
Heading: a.Aircraft.Heading,
|
||||
Category: a.Aircraft.Category,
|
||||
Squawk: a.Aircraft.Squawk,
|
||||
Emergency: a.Aircraft.Emergency,
|
||||
OnGround: a.Aircraft.OnGround,
|
||||
Alert: a.Aircraft.Alert,
|
||||
SPI: a.Aircraft.SPI,
|
||||
NACp: a.Aircraft.NACp,
|
||||
NACv: a.Aircraft.NACv,
|
||||
SIL: a.Aircraft.SIL,
|
||||
TransponderCapability: a.Aircraft.TransponderCapability,
|
||||
TransponderLevel: a.Aircraft.TransponderLevel,
|
||||
SelectedAltitude: a.Aircraft.SelectedAltitude,
|
||||
SelectedHeading: a.Aircraft.SelectedHeading,
|
||||
BaroSetting: a.Aircraft.BaroSetting,
|
||||
|
||||
// Copy all fields from AircraftState
|
||||
Sources: a.Sources,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue