mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-04 22:17:01 +08:00
telemetry status indicator in strip
This commit is contained in:
@@ -601,8 +601,16 @@
|
|||||||
<field name="west_long" type="float" unit="deg"/>
|
<field name="west_long" type="float" unit="deg"/>
|
||||||
<field name="south_lat" type="float" unit="deg"/>
|
<field name="south_lat" type="float" unit="deg"/>
|
||||||
</message>
|
</message>
|
||||||
|
|
||||||
|
<message name="TELEMETRY_STATUS" ID="32">
|
||||||
|
<field name="ac_id" type="uint8"/>
|
||||||
|
<field name="time_since_last_bat_msg" type="float" unit="s"/>
|
||||||
|
</message>
|
||||||
</class>
|
</class>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<class name="alert">
|
<class name="alert">
|
||||||
<message name="BAT_LOW" ID="1">
|
<message name="BAT_LOW" ID="1">
|
||||||
<field name="ac_id" type="string"/>
|
<field name="ac_id" type="string"/>
|
||||||
|
|||||||
@@ -575,6 +575,7 @@ let _main =
|
|||||||
Live.listen_waypoint_moved ();
|
Live.listen_waypoint_moved ();
|
||||||
Live.listen_infrared ();
|
Live.listen_infrared ();
|
||||||
Live.listen_svsinfo ();
|
Live.listen_svsinfo ();
|
||||||
|
Live.listen_telemetry_status ();
|
||||||
Live.listen_alert my_alert;
|
Live.listen_alert my_alert;
|
||||||
|
|
||||||
(** Display the window *)
|
(** Display the window *)
|
||||||
|
|||||||
@@ -643,3 +643,13 @@ let get_svsinfo = fun _sender vs ->
|
|||||||
let listen_svsinfo = fun () -> safe_bind "SVSINFO" get_svsinfo
|
let listen_svsinfo = fun () -> safe_bind "SVSINFO" get_svsinfo
|
||||||
|
|
||||||
let message_request = Ground_Pprz.message_req
|
let message_request = Ground_Pprz.message_req
|
||||||
|
|
||||||
|
let get_ts = fun _sender vs ->
|
||||||
|
let ac = get_ac vs in
|
||||||
|
let t = Pprz.float_assoc "time_since_last_bat_msg" vs in
|
||||||
|
Strip.set_label ac.strip "telemetry_status" (if t > 2. then sprintf "%.1f" t else " ");
|
||||||
|
Strip.set_color ac.strip "telemetry_status" (if t > 5. then "red" else "green")
|
||||||
|
|
||||||
|
|
||||||
|
let listen_telemetry_status = fun () ->
|
||||||
|
safe_bind "TELEMETRY_STATUS" get_ts
|
||||||
|
|||||||
@@ -13,3 +13,4 @@ val listen_waypoint_moved : unit -> unit
|
|||||||
val listen_infrared : unit -> unit
|
val listen_infrared : unit -> unit
|
||||||
val listen_svsinfo : unit -> unit
|
val listen_svsinfo : unit -> unit
|
||||||
val listen_alert : < add : string -> unit; .. > -> unit
|
val listen_alert : < add : string -> unit; .. > -> unit
|
||||||
|
val listen_telemetry_status : unit -> unit
|
||||||
|
|||||||
@@ -38,9 +38,11 @@ let add config color select center_ac commit_moves mark =
|
|||||||
|
|
||||||
let ac_name = Pprz.string_assoc "ac_name" config in
|
let ac_name = Pprz.string_assoc "ac_name" config in
|
||||||
|
|
||||||
|
let tooltips = GData.tooltips () in
|
||||||
|
|
||||||
(* frame of the strip *)
|
(* frame of the strip *)
|
||||||
let frame = GBin.frame ~shadow_type: `IN ~packing: (widget#attach ~top: (strip_number) ~left: 0) () in
|
let frame = GBin.frame ~shadow_type: `IN ~packing: (widget#attach ~top: (strip_number) ~left: 0) () in
|
||||||
let strip = GPack.table ~rows: 2 ~columns: 2 ~col_spacings: 10 ~packing: frame#add () in
|
let strip = GPack.table ~rows:2 ~columns: 2 ~col_spacings: 10 ~packing: frame#add () in
|
||||||
ignore (GMisc.label ~text: (ac_name) ~packing: (strip#attach ~top: 0 ~left: 0) ());
|
ignore (GMisc.label ~text: (ac_name) ~packing: (strip#attach ~top: 0 ~left: 0) ());
|
||||||
|
|
||||||
let plane_color = GBin.event_box ~width:10 ~height:10 ~packing:(strip#attach ~top:0 ~left: 1) () in
|
let plane_color = GBin.event_box ~width:10 ~height:10 ~packing:(strip#attach ~top:0 ~left: 1) () in
|
||||||
@@ -53,12 +55,18 @@ let add config color select center_ac commit_moves mark =
|
|||||||
let block_name = GMisc.label ~text: "______" ~packing:h#add () in
|
let block_name = GMisc.label ~text: "______" ~packing:h#add () in
|
||||||
add_label ("block_name_value") (plane_color, block_name);
|
add_label ("block_name_value") (plane_color, block_name);
|
||||||
|
|
||||||
|
(* battery and telemetry status *)
|
||||||
(* battery and flight time *)
|
let vb = GPack.vbox ~packing:(strip#attach ~top:1 ~left:0) () in
|
||||||
let pb = GRange.progress_bar ~orientation: `BOTTOM_TO_TOP ~packing:(strip#attach ~top:1 ~left:0) () in
|
let pb = GRange.progress_bar ~orientation: `BOTTOM_TO_TOP ~packing:vb#add () in
|
||||||
|
pb#misc#set_size_request ~height:50 ();
|
||||||
pb#coerce#misc#modify_fg [`PRELIGHT, `NAME "green"];
|
pb#coerce#misc#modify_fg [`PRELIGHT, `NAME "green"];
|
||||||
pb#coerce#misc#modify_font_by_name "sans 12";
|
pb#coerce#misc#modify_font_by_name "sans 12";
|
||||||
|
|
||||||
|
let eb = GBin.event_box ~packing:vb#add () in
|
||||||
|
let ts = GMisc.label ~text:"N/A" ~packing:eb#add () in
|
||||||
|
add_label "telemetry_status_value" (eb, ts);
|
||||||
|
tooltips#set_tip eb#coerce ~text:"Telemetry status\nGreen if time since last bat message < 5s";
|
||||||
|
|
||||||
let left_box = GPack.table ~rows ~columns: 6 ~col_spacings: 5
|
let left_box = GPack.table ~rows ~columns: 6 ~col_spacings: 5
|
||||||
~packing: (strip#attach ~top: 1 ~left: 1) () in
|
~packing: (strip#attach ~top: 1 ~left: 1) () in
|
||||||
|
|
||||||
|
|||||||
@@ -116,5 +116,6 @@ type aircraft = {
|
|||||||
mutable horiz_mode : horiz_mode;
|
mutable horiz_mode : horiz_mode;
|
||||||
dl_setting_values : float array;
|
dl_setting_values : float array;
|
||||||
mutable nb_dl_setting_values : int;
|
mutable nb_dl_setting_values : int;
|
||||||
mutable survey : (Latlong.geographic * Latlong.geographic) option
|
mutable survey : (Latlong.geographic * Latlong.geographic) option;
|
||||||
|
mutable last_bat_msg_date : float
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,5 +103,6 @@ type aircraft = {
|
|||||||
mutable horiz_mode : horiz_mode;
|
mutable horiz_mode : horiz_mode;
|
||||||
dl_setting_values : float array;
|
dl_setting_values : float array;
|
||||||
mutable nb_dl_setting_values : int;
|
mutable nb_dl_setting_values : int;
|
||||||
mutable survey : (Latlong.geographic * Latlong.geographic) option
|
mutable survey : (Latlong.geographic * Latlong.geographic) option;
|
||||||
|
mutable last_bat_msg_date : float
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -189,6 +189,7 @@ let log_and_parse = fun logging ac_name a msg values ->
|
|||||||
a.cur_stage <- ivalue "cur_stage";
|
a.cur_stage <- ivalue "cur_stage";
|
||||||
a.desired_course <- norm_course ((Deg>>Rad)(fvalue "desired_course" /. 10.));
|
a.desired_course <- norm_course ((Deg>>Rad)(fvalue "desired_course" /. 10.));
|
||||||
| "BAT" ->
|
| "BAT" ->
|
||||||
|
a.last_bat_msg_date <- U.gettimeofday ();
|
||||||
a.throttle <- fvalue "desired_gaz" /. 9600. *. 100.;
|
a.throttle <- fvalue "desired_gaz" /. 9600. *. 100.;
|
||||||
a.flight_time <- ivalue "flight_time";
|
a.flight_time <- ivalue "flight_time";
|
||||||
a.rpm <- a.throttle *. 100.;
|
a.rpm <- a.throttle *. 100.;
|
||||||
@@ -429,6 +430,16 @@ let send_wind = fun a ->
|
|||||||
with
|
with
|
||||||
_exc -> ()
|
_exc -> ()
|
||||||
|
|
||||||
|
let send_telemetry_status = fun a ->
|
||||||
|
let id = a.id in
|
||||||
|
try
|
||||||
|
let vs =
|
||||||
|
["ac_id", Pprz.String id;
|
||||||
|
"time_since_last_bat_msg", Pprz.Float (U.gettimeofday () -. a.last_bat_msg_date)] in
|
||||||
|
Ground_Pprz.message_send my_id "TELEMETRY_STATUS" vs
|
||||||
|
with
|
||||||
|
_exc -> ()
|
||||||
|
|
||||||
let send_moved_waypoints = fun a ->
|
let send_moved_waypoints = fun a ->
|
||||||
Hashtbl.iter
|
Hashtbl.iter
|
||||||
(fun wp_id wp ->
|
(fun wp_id wp ->
|
||||||
@@ -511,7 +522,8 @@ let send_aircraft_msg = fun ac ->
|
|||||||
send_horiz_status a;
|
send_horiz_status a;
|
||||||
send_survey_status a;
|
send_survey_status a;
|
||||||
send_dl_values a;
|
send_dl_values a;
|
||||||
send_moved_waypoints a
|
send_moved_waypoints a;
|
||||||
|
send_telemetry_status a
|
||||||
with
|
with
|
||||||
Not_found -> prerr_endline ac
|
Not_found -> prerr_endline ac
|
||||||
| x -> prerr_endline (Printexc.to_string x)
|
| x -> prerr_endline (Printexc.to_string x)
|
||||||
@@ -539,7 +551,7 @@ let new_aircraft = fun id ->
|
|||||||
flight_time = 0; stage_time = 0; block_time = 0;
|
flight_time = 0; stage_time = 0; block_time = 0;
|
||||||
horiz_mode = UnknownHorizMode;
|
horiz_mode = UnknownHorizMode;
|
||||||
horizontal_mode = 0;
|
horizontal_mode = 0;
|
||||||
waypoints = Hashtbl.create 3; survey = None
|
waypoints = Hashtbl.create 3; survey = None; last_bat_msg_date = 0.
|
||||||
}
|
}
|
||||||
|
|
||||||
let check_alerts = fun a ->
|
let check_alerts = fun a ->
|
||||||
|
|||||||
Reference in New Issue
Block a user