From: Jérémie D. <Ba...@us...> - 2010-02-17 20:20:56
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 8a7d0ca23efcdaef4335200e175fbe686a52c23a (commit) via f983d690042d57af4aacfd3939b3498914a9d3a3 (commit) from f8512130a8770901d89f22a2498e67ac6f704ea2 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8a7d0ca23efcdaef4335200e175fbe686a52c23a Author: Jérémie Dimino <je...@di...> Date: Wed Feb 17 21:19:47 2010 +0100 [lib_krobot] better initialisation commit f983d690042d57af4aacfd3939b3498914a9d3a3 Author: Jérémie Dimino <je...@di...> Date: Wed Feb 17 13:29:10 2010 +0100 [controller] better initialisation ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/controller.ml b/PC_Mainboard/clients/controller.ml index 7ed5956..469f514 100644 --- a/PC_Mainboard/clients/controller.ml +++ b/PC_Mainboard/clients/controller.ml @@ -259,30 +259,34 @@ let rec copy_logs ic = set_logs (line :: React.S.value logs); copy_logs ic +let redirect_stderr () = + let fdr, fdw = Unix.pipe () in + Unix.dup2 fdw Unix.stderr; + Unix.close fdw; + ignore (copy_logs (Lwt_io.of_unix_fd ~mode:Lwt_io.input fdr)); + (* Logs to the log window: *) + Lwt_log.default := + Lwt_log.make + ~output:(fun level lines -> + let buffer = Buffer.create 128 in + let lines = + List.map (fun line -> + Buffer.clear buffer; + Lwt_log.render ~buffer ~level ~message:line ~template:"$(date): $(message)"; + Buffer.contents buffer) lines + in + set_logs (lines @ React.S.value logs); + return ()) + ~close:return + () + lwt () = - lwt () = save_state () in - lwt () = hide_cursor () in + Log#notice "connecting to the krobot bus..."; + lwt krobot = Krobot.create () in try_lwt - let fdr, fdw = Unix.pipe () in - Unix.dup2 fdw Unix.stderr; - Unix.close fdw; - ignore (copy_logs (Lwt_io.of_unix_fd ~mode:Lwt_io.input fdr)); - (* Logs to the log window: *) - Lwt_log.default := - Lwt_log.make - ~output:(fun level lines -> - let buffer = Buffer.create 128 in - let lines = - List.map (fun line -> - Buffer.clear buffer; - Lwt_log.render ~buffer ~level ~message:line ~template:"$(date): $(message)"; - Buffer.contents buffer) lines - in - set_logs (lines @ React.S.value logs); - return ()) - ~close:return - (); - lwt krobot = Krobot.create () in + lwt () = save_state () in + lwt () = hide_cursor () in + redirect_stderr (); let signal = React.S.l5 draw Lwt_term.size diff --git a/PC_Mainboard/driver/driver.ml b/PC_Mainboard/driver/driver.ml index adc9951..1a7f4f1 100644 --- a/PC_Mainboard/driver/driver.ml +++ b/PC_Mainboard/driver/driver.ml @@ -427,6 +427,15 @@ struct | Some card -> Card.close card + OL_method CardStates : OBus_connection.t -> Types.card_state * Types.card_state * Types.card_state = fun () connection -> + let state card = match React.S.value card with + | Some _ -> `Present + | None -> `Absent + in + return (state card_interface, + state card_sensor, + state card_motor) + OL_method Shutdown : OBus_connection.t -> unit = fun () connection -> Log#info "exiting"; quit := true; diff --git a/PC_Mainboard/lib_krobot/krobot.ml b/PC_Mainboard/lib_krobot/krobot.ml index 8be64e7..5ecd375 100644 --- a/PC_Mainboard/lib_krobot/krobot.ml +++ b/PC_Mainboard/lib_krobot/krobot.ml @@ -54,15 +54,27 @@ module MakeDevice(Name : sig val name : string end) = let name = "fr.krobot.Device." ^ Name.name end) -let make_dev_signal ~peer ~name ~update ~typ ~initial = +let make_dev_signal ~peer ~name ~get ~update ~typ ~default = let proxy = OBus_proxy.make peer ["fr"; "krobot"; "Devices"; name] in let interface = "fr.krobot.Device." ^ name in - React.S.hold initial (OBus_signal.connect proxy ~interface ~member:update typ)#event + lwt initial = + try_lwt + OBus_proxy.method_call proxy ~interface ~member:get (OBus_type.reply typ) + with exn -> + return default + in + return (React.S.hold initial (OBus_signal.connect proxy ~interface ~member:update typ)#event) -let make_card_signal ~peer ~name ~update ~typ ~initial = +let make_card_signal ~peer ~name ~get ~update ~typ ~default = let proxy = OBus_proxy.make peer ["fr"; "krobot"; "Cards"; name] in let interface = "fr.krobot.Card" in - React.S.hold initial (OBus_signal.connect proxy ~interface ~member:update typ)#event + lwt initial = + try_lwt + OBus_proxy.method_call proxy ~interface ~member:get (OBus_type.reply typ) + with exn -> + return default + in + return (React.S.hold initial (OBus_signal.connect proxy ~interface ~member:update typ)#event) (* +-----------------------------------------------------------------+ | Creation | @@ -108,16 +120,24 @@ let create ?peer () = lwt bus = get_bus () in return (OBus_peer.make bus "fr.krobot") in + lwt compass = make_dev_signal peer "Compass" "Get" "Value" <:obus_type< int >> 0 + and logic_sensors = make_dev_signal peer "LogicSensors" "Get" "Value" <:obus_type< bool array >> (Array.make 16 false) + and range_finders = make_dev_signal peer "RangeFinders" "Get" "Value" <:obus_type< int array >> (Array.make 8 0) + and inhibited_forward_until = make_dev_signal peer "Motors" "InhibitedForward" "InhibitedForwardChanged" <:obus_type< float >> 0. + and inhibited_backward_until = make_dev_signal peer "Motors" "InhibitedBackward" "InhibitedBackwardChanged" <:obus_type< float >> 0. + and card_interface = make_card_signal peer "Interface" "GetState" "StateChanged" <:obus_type< Types.card_state >> `Absent + and card_sensor = make_card_signal peer "Sensor" "GetState" "StateChanged" <:obus_type< Types.card_state >> `Absent + and card_motor = make_card_signal peer "Motor" "GetState" "StateChanged" <:obus_type< Types.card_state >> `Absent in return { peer = peer; - compass = make_dev_signal peer "Compass" "Value" <:obus_type< int >> 0; - logic_sensors = make_dev_signal peer "LogicSensors" "Value" <:obus_type< bool array >> (Array.make 16 false); - range_finders = make_dev_signal peer "RangeFinders" "Value" <:obus_type< int array >> (Array.make 8 0); - inhibited_forward_until = make_dev_signal peer "Motors" "InhibitedForwardChanged" <:obus_type< float >> 0.; - inhibited_backward_until = make_dev_signal peer "Motors" "InhibitedBackwardChanged" <:obus_type< float >> 0.; - interface = { card_state = make_card_signal peer "Interface" "StateChanged" <:obus_type< Types.card_state >> `Absent }; - sensor = { card_state = make_card_signal peer "Sensor" "StateChanged" <:obus_type< Types.card_state >> `Absent }; - motor = { card_state = make_card_signal peer "Motor" "StateChanged" <:obus_type< Types.card_state >> `Absent }; + compass = compass; + logic_sensors = logic_sensors; + range_finders = range_finders; + inhibited_forward_until = inhibited_forward_until; + inhibited_backward_until = inhibited_backward_until; + interface = { card_state = card_interface }; + sensor = { card_state = card_sensor }; + motor = { card_state = card_motor }; } (* +-----------------------------------------------------------------+ hooks/post-receive -- krobot |