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 =