diff --git a/conf/messages.xml b/conf/messages.xml
index bfb8bc8127..f0b486f047 100644
--- a/conf/messages.xml
+++ b/conf/messages.xml
@@ -559,7 +559,20 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2474,19 +2487,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sw/ground_segment/cockpit/live.ml b/sw/ground_segment/cockpit/live.ml
index fa01a2fcd2..1f9583551f 100644
--- a/sw/ground_segment/cockpit/live.ml
+++ b/sw/ground_segment/cockpit/live.ml
@@ -118,7 +118,7 @@ let find_ac = fun ac_id ->
let active_ac = ref ""
let get_ac = fun vs ->
let ac_id = Pprz.string_assoc "ac_id" vs in
- find_ac ac_id
+ find_ac ac_id
let show_fp = fun ac ->
ac.fp_group#show ();
@@ -825,8 +825,8 @@ let get_fbw_msg = fun alarm _sender vs ->
log_and_say alarm ac.ac_name (sprintf "%s, mayday, AP Failure. Switch to manual." ac.ac_speech_name)
end
-let get_link_status_msg = fun alarm _sender vs ->
- let ac = get_ac vs in
+let get_link_status_msg = fun alarm sender vs ->
+ let ac = find_ac sender in
let link_id = Pprz.int_assoc "link_id" vs in
let time_since_last_msg = Pprz.float_assoc "time_since_last_msg" vs in
let rx_msgs_rate = Pprz.float_assoc "rx_msgs_rate" vs in
@@ -869,7 +869,7 @@ let listen_if_calib_msg = fun () ->
safe_bind "INFLIGH_CALIB" get_if_calib_msg
let listen_link_status_msg = fun a ->
- safe_bind "LINK_STATUS" (get_link_status_msg a)
+ tele_bind "LINK_STATUS" (get_link_status_msg a)
let list_separator = Str.regexp ","
diff --git a/sw/ground_segment/python/redundant_link/link_combiner.py b/sw/ground_segment/python/redundant_link/link_combiner.py
index c4a40e591a..a3927edf72 100755
--- a/sw/ground_segment/python/redundant_link/link_combiner.py
+++ b/sw/ground_segment/python/redundant_link/link_combiner.py
@@ -121,9 +121,9 @@ class Link:
def __init__(self, name, ac_id, buffer_size=10, verbose=0):
self.buffer = Circular_Buffer(buffer_size)
self.name = name
- self.ac_id = ac_id
self.time_of_last_message = time()
self.verbose = verbose
+ self.acs = [ac_id] #Storing a list of the aircrafts that use this link. Usually it's just one.
# The following are stored values from the DOWNLINK_STATUS message:
self.run_time = 0
@@ -153,22 +153,26 @@ class Link:
def timeSinceLastMessage(self):
return time() - self.time_of_last_message
+ def acAc(self, ac_id):
+ self.acs = self.acs + [ac_id]
+
+ def aircrafts(self):
+ return self.acs
+
def sendLinkStatusMessage(self):
- values = ( self.name,
- self.ac_id,
- self.timeSinceLastMessage(),
- self.run_time,
- self.rx_bytes,
- self.rx_msgs,
- self.rx_err,
- self.rx_bytes_rate,
- self.rx_msgs_rate,
- self.ping_time)
-
- IvySendMsg("ground LINK_STATUS %s %s %f %s %s %s %s %s %s %s" % values)
- threading.Timer(LINK_STATUS_PERIOD, self.sendLinkStatusMessage).start()
-
+ for ac_id in self.acs:
+ values = ( self.name,
+ self.timeSinceLastMessage(),
+ self.run_time,
+ self.rx_bytes,
+ self.rx_msgs,
+ self.rx_err,
+ self.rx_bytes_rate,
+ self.rx_msgs_rate,
+ self.ping_time)
+ IvySendMsg("%s LINK_STATUS %s %f %s %s %s %s %s %s %s" % ((ac_id,) + values))
+ threading.Timer(LINK_STATUS_PERIOD, self.sendLinkStatusMessage).start()
def updateStatus(self, downlink_status_message):
@@ -220,12 +224,15 @@ class Link_Combiner:
self.repeatSendLinkStatusMessage(message)
#Processing messages from an already added link
- sent = self.sendMessage(message)
+ link = self.links[message.linkName()]
+ self.sendMessage(message)
self.bufferMessage(message)
if message.name() != "DOWNLINK_STATUS":
- self.links[message.linkName()].updateTimeOfLastMessage()
+ link.updateTimeOfLastMessage()
else:
- self.links[message.linkName()].updateStatus(message)
+ link.updateStatus(message)
+ if message.sender() not in link.aircrafts():
+ link.addAc(message.sender())
def sendMessage(self, message):
diff --git a/sw/lib/ocaml/pprz.ml b/sw/lib/ocaml/pprz.ml
index e8f702e8fc..bab82a1fc5 100644
--- a/sw/lib/ocaml/pprz.ml
+++ b/sw/lib/ocaml/pprz.ml
@@ -597,7 +597,7 @@ module MessagesOfXml(Class:CLASS_Xml) = struct
formatted_string_of_value field.fformat v)
msg.fields)
- let message_send = fun ?timestamp sender msg_name values ->
+ let message_send = fun ?timestamp ?link_id sender msg_name values ->
let m = snd (message_of_name msg_name) in
let s = string_of_message m values in
let timestamp_string =