kopia lustrzana https://github.com/cyoung/stratux
Remove hardcoded alert flag on traffic report and replace with simple logic to set it only if a target is within 2nm. This addresses issue #580 .
rodzic
bcd62e7c00
commit
24d20e7cdb
|
@ -111,9 +111,9 @@ type TrafficInfo struct {
|
|||
Last_speed time.Time // Time of last velocity and track update (stratuxClock).
|
||||
Last_source uint8 // Last frequency on which this target was received.
|
||||
ExtrapolatedPosition bool //TODO: True if Stratux is "coasting" the target from last known position.
|
||||
BearingDist_valid bool // set when bearing and distance information is valid
|
||||
Bearing float64 // Bearing in degrees true to traffic from ownship, if it can be calculated.
|
||||
Distance float64 // Distance to traffic from ownship, if it can be calculated.
|
||||
//FIXME: Some indicator that Bearing and Distance are valid, since they aren't always available.
|
||||
//FIXME: Rename variables for consistency, especially "Last_".
|
||||
}
|
||||
|
||||
|
@ -191,6 +191,7 @@ func sendTrafficUpdates() {
|
|||
dist, bearing := distance(float64(mySituation.Lat), float64(mySituation.Lng), float64(ti.Lat), float64(ti.Lng))
|
||||
ti.Distance = dist
|
||||
ti.Bearing = bearing
|
||||
ti.BearingDist_valid = true
|
||||
}
|
||||
ti.Age = stratuxClock.Since(ti.Last_seen).Seconds()
|
||||
ti.AgeLastAlt = stratuxClock.Since(ti.Last_alt).Seconds()
|
||||
|
@ -251,12 +252,30 @@ func registerTrafficUpdate(ti TrafficInfo) {
|
|||
trafficUpdate.SendJSON(ti)
|
||||
}
|
||||
|
||||
func isTrafficAlertable(ti TrafficInfo) bool {
|
||||
// Set alert bit if possible and traffic is within some threshold
|
||||
// TODO: Could be more intelligent, taking into account headings etc.
|
||||
if ti.BearingDist_valid &&
|
||||
ti.Distance < 3704 { // TODO: Maybe make configurable?
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func makeTrafficReportMsg(ti TrafficInfo) []byte {
|
||||
msg := make([]byte, 28)
|
||||
// See p.16.
|
||||
msg[0] = 0x14 // Message type "Traffic Report".
|
||||
|
||||
msg[1] = 0x10 | ti.Addr_type // Alert status, address type.
|
||||
// Address type
|
||||
msg[1] = ti.Addr_type
|
||||
|
||||
// Set alert if needed
|
||||
if isTrafficAlertable(ti) {
|
||||
// Set the alert bit. See pg. 18 of GDL90 ICD
|
||||
msg[1] |= 0x10
|
||||
}
|
||||
|
||||
// ICAO Address.
|
||||
msg[2] = byte((ti.Icao_addr & 0x00FF0000) >> 16)
|
||||
|
@ -568,6 +587,7 @@ func parseDownlinkReport(s string, signalLevel int) {
|
|||
ti.Lng = lng
|
||||
if isGPSValid() {
|
||||
ti.Distance, ti.Bearing = distance(float64(mySituation.Lat), float64(mySituation.Lng), float64(ti.Lat), float64(ti.Lng))
|
||||
ti.BearingDist_valid = true
|
||||
}
|
||||
ti.Last_seen = stratuxClock.Time
|
||||
ti.ExtrapolatedPosition = false
|
||||
|
@ -849,6 +869,7 @@ func esListen() {
|
|||
ti.Lng = lng
|
||||
if isGPSValid() {
|
||||
ti.Distance, ti.Bearing = distance(float64(mySituation.Lat), float64(mySituation.Lng), float64(ti.Lat), float64(ti.Lng))
|
||||
ti.BearingDist_valid = true
|
||||
}
|
||||
ti.Position_valid = true
|
||||
ti.ExtrapolatedPosition = false
|
||||
|
@ -1083,6 +1104,7 @@ func updateDemoTraffic(icao uint32, tail string, relAlt float32, gs float64, off
|
|||
ti.Lng = float32(lng + traffRelLng)
|
||||
|
||||
ti.Distance, ti.Bearing = distance(float64(lat), float64(lng), float64(ti.Lat), float64(ti.Lng))
|
||||
ti.BearingDist_valid = true
|
||||
|
||||
ti.Position_valid = true
|
||||
ti.ExtrapolatedPosition = false
|
||||
|
|
Ładowanie…
Reference in New Issue