mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-06 07:53:43 +08:00
new alert messages handling
This commit is contained in:
@@ -450,6 +450,10 @@
|
||||
<field name="level" type="string" values="CATASTROPHIC|CRITIC|WARNING"/>
|
||||
<field name="value" type="float"/>
|
||||
</message>
|
||||
<message name="AIR_PROX" ID="2">
|
||||
<field name="ac_id" type="string"/>
|
||||
<field name="level" type="string" values="CATASTROPHIC|CRITIC|WARNING"/>
|
||||
</message>
|
||||
</class>
|
||||
|
||||
<class name="datalink">
|
||||
|
||||
@@ -256,8 +256,8 @@ let ac_msg = fun log ac_name a m ->
|
||||
let msg = Tele_Pprz.message_of_id msg_id in
|
||||
log_and_parse log ac_name a msg values
|
||||
with
|
||||
Pprz.Unknown_msg_name x ->
|
||||
fprintf stderr "Unknown message %s from %s: %s\n" x ac_name m
|
||||
Pprz.Unknown_msg_name (x, c) ->
|
||||
fprintf stderr "Unknown message %s in class %s from %s: %s\n" x c ac_name m
|
||||
| x -> prerr_endline (Printexc.to_string x)
|
||||
|
||||
|
||||
@@ -464,12 +464,17 @@ let periodic_airprox_check = fun name ->
|
||||
let list_ac = List.map (fun name -> Hashtbl.find aircrafts name) ac_names in
|
||||
|
||||
let check_airprox = fun ac ->
|
||||
match Airprox.check_airprox thisac ac with
|
||||
None -> ()
|
||||
| Some level ->
|
||||
let vs =
|
||||
["ac_id", Pprz.String (thisac.id ^ "," ^ ac.id) ; "level", Pprz.String level; "value", Pprz.String ac.id] in
|
||||
Alerts_Pprz.message_send my_id "AIR_PROX" vs in
|
||||
try
|
||||
match Airprox.check_airprox thisac ac with
|
||||
None -> ()
|
||||
| Some level ->
|
||||
let vs =
|
||||
["ac_id", Pprz.String (thisac.id ^ "," ^ ac.id) ; "level", Pprz.String level] in
|
||||
Alerts_Pprz.message_send my_id "AIR_PROX" vs
|
||||
with
|
||||
x -> fprintf stderr "check_airprox: %s\n%!" (Printexc.to_string x)
|
||||
|
||||
in
|
||||
|
||||
List.iter
|
||||
(fun ac ->
|
||||
|
||||
@@ -209,7 +209,7 @@ let sprint_value = fun buf i field_type v ->
|
||||
|
||||
module type CLASS = sig val name : string end
|
||||
|
||||
exception Unknown_msg_name of string
|
||||
exception Unknown_msg_name of string * string
|
||||
|
||||
module Protocol(Class:CLASS) = struct
|
||||
let stx = Char.chr 0x05
|
||||
@@ -222,7 +222,11 @@ module Protocol(Class:CLASS) = struct
|
||||
with
|
||||
Not_found -> failwith (sprintf "Unknown message class: %s" Class.name)
|
||||
let message_of_id = fun id -> Hashtbl.find messages_by_id id
|
||||
let message_of_name = fun name -> Hashtbl.find messages_by_name name
|
||||
let message_of_name = fun name ->
|
||||
try
|
||||
Hashtbl.find messages_by_name name
|
||||
with
|
||||
Not_found -> raise (Unknown_msg_name (name, Class.name))
|
||||
|
||||
let length = fun buf start ->
|
||||
let len = String.length buf - start in
|
||||
@@ -289,8 +293,7 @@ module Protocol(Class:CLASS) = struct
|
||||
let values = List.map2 (fun (field_name, field) v -> (field_name, value field._type v)) msg.fields args in
|
||||
(msg_id, values)
|
||||
with
|
||||
Not_found -> raise (Unknown_msg_name msg_name)
|
||||
| Invalid_argument "List.map2" -> failwith (sprintf "Pprz.values_of_string: '%s'" s)
|
||||
Invalid_argument "List.map2" -> failwith (sprintf "Pprz.values_of_string: '%s'" s)
|
||||
end
|
||||
| [] -> invalid_arg "Pprz.values_of_string"
|
||||
|
||||
|
||||
@@ -55,7 +55,9 @@ val int_assoc : string -> values -> int
|
||||
val int32_assoc : string -> values -> int
|
||||
(** May raise Not_found or Invalid_argument *)
|
||||
|
||||
exception Unknown_msg_name of string
|
||||
exception Unknown_msg_name of string * string
|
||||
(** [Unknown_msg_name (name, class_name)] Raised if message [name] is not
|
||||
found in class [class_name]. *)
|
||||
|
||||
module type CLASS = sig val name : string end
|
||||
module Protocol : functor (Class : CLASS) -> sig
|
||||
|
||||
Reference in New Issue
Block a user