|
From: Jérémie D. <Ba...@us...> - 2010-02-10 20:30:29
|
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 6c3fce1be59b3862417f78688e4bf3368f15b9ad (commit)
via 120f4fe59bb7f4cb35cf13b2cc4e6fe7d38e2918 (commit)
via 185013267259fd0be1b691db23634b47d0a376f7 (commit)
via 57074afff06e02fccd0489375e4ebc0a30c7edd2 (commit)
via 1d47f0a6aaf997b20870ff615e4686ec76e92858 (commit)
from 08af0919e78e3e6c1687744414c3202dff61ed51 (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 6c3fce1be59b3862417f78688e4bf3368f15b9ad
Author: Jérémie Dimino <je...@di...>
Date: Wed Feb 10 21:27:33 2010 +0100
typo
commit 120f4fe59bb7f4cb35cf13b2cc4e6fe7d38e2918
Author: Jérémie Dimino <je...@di...>
Date: Wed Feb 10 21:22:46 2010 +0100
typo
commit 185013267259fd0be1b691db23634b47d0a376f7
Author: Jérémie Dimino <je...@di...>
Date: Wed Feb 10 21:21:20 2010 +0100
typo
commit 57074afff06e02fccd0489375e4ebc0a30c7edd2
Author: Jérémie Dimino <je...@di...>
Date: Wed Feb 10 21:18:32 2010 +0100
Add signals for motors state
commit 1d47f0a6aaf997b20870ff615e4686ec76e92858
Author: Jérémie Dimino <je...@di...>
Date: Wed Feb 10 20:58:34 2010 +0100
[controller] write logs in the main window
-----------------------------------------------------------------------
Changes:
diff --git a/PC_Mainboard/clients/lib-krobot/krobot.ml b/PC_Mainboard/clients/lib-krobot/krobot.ml
index cb9490a..eacc4da 100644
--- a/PC_Mainboard/clients/lib-krobot/krobot.ml
+++ b/PC_Mainboard/clients/lib-krobot/krobot.ml
@@ -31,6 +31,10 @@ type t = {
sensor : card;
motor : card;
+ (* Motors state *)
+ inhibited_forward_until : float React.signal;
+ inhibited_backward_until : float React.signal;
+
peer : OBus_peer.t;
(* The driver peer *)
}
@@ -118,12 +122,16 @@ let create ?peer () =
and interface_state = make_card_signal peer "Interface" "GetState" "StateChanged" <:obus_type< state >>
and sensor_state = make_card_signal peer "Sensor" "GetState" "StateChanged" <:obus_type< state >>
and motor_state = make_card_signal peer "Motor" "GetState" "StateChanged" <:obus_type< state >>
+ and inhibited_forward_until = make_dev_signal peer "Motors" "InhibitedForward" "InhibitedForwardChanged" <:obus_type< float >>
+ and inhibited_backward_until = make_dev_signal peer "Motors" "InhibitedBackward" "InhibitedBackwardChanged" <:obus_type< float >>
in
return {
peer = peer;
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 = interface_state };
sensor = { card_state = sensor_state };
motor = { card_state = motor_state };
@@ -136,6 +144,8 @@ let create ?peer () =
let compass krobot = krobot.compass
let logic_sensors krobot = krobot.logic_sensors
let range_finders krobot = krobot.range_finders
+let inhibited_forward_until krobot = krobot.inhibited_forward_until
+let inhibited_backward_until krobot = krobot.inhibited_backward_until
let team krobot =
React.S.map (fun ls -> if ls.(14) then Team_red else Team_green) krobot.logic_sensors
diff --git a/PC_Mainboard/clients/lib-krobot/krobot.mli b/PC_Mainboard/clients/lib-krobot/krobot.mli
index 178779a..f5c8a53 100644
--- a/PC_Mainboard/clients/lib-krobot/krobot.mli
+++ b/PC_Mainboard/clients/lib-krobot/krobot.mli
@@ -74,6 +74,14 @@ val inhibit_backward : t -> float -> unit Lwt.t
(** [inhibit_backward krobot delay] forbid backward moves during
[delay] seconds *)
+val inhibited_forward_until : t -> float React.signal
+ (** Signal holding the date until which the robot is reallowed to
+ move forward *)
+
+val inhibited_backward_until : t -> float React.signal
+ (** Signal holding the date until which the robot is reallowed to
+ move backward *)
+
(** {6 Cards} *)
module Card : sig
diff --git a/PC_Mainboard/clients/tools/controller.ml b/PC_Mainboard/clients/tools/controller.ml
index 0eed0f3..d10ff37 100644
--- a/PC_Mainboard/clients/tools/controller.ml
+++ b/PC_Mainboard/clients/tools/controller.ml
@@ -58,7 +58,11 @@ let draw_text clip ?style x y txt =
let drawer_mutex = Lwt_mutex.create ()
(* Draw the whole screen *)
-let rec draw size (compass, logic_sensors, range_finders, team, jack) (engine_state, box, logs) (state_interface, state_sensor, state_motor) =
+let rec draw size
+ (compass, logic_sensors, range_finders, team, jack)
+ (inhibited_forward_until, inhibited_backward_until)
+ (engine_state, box, logs)
+ (state_interface, state_sensor, state_motor) =
Lwt_mutex.with_lock drawer_mutex begin fun () ->
if Lwt_mutex.is_empty drawer_mutex then begin
(* Redraw the screen only if there is no other thread waiting to
@@ -118,6 +122,15 @@ let rec draw size (compass, logic_sensors, range_finders, team, jack) (engine_st
Draw.textf zone x 3 "interface card is %s" (string_of_state state_interface);
Draw.textf zone x 4 "sensor card is %s" (string_of_state state_sensor);
Draw.textf zone x 5 "motor card is %s" (string_of_state state_motor);
+ let date = Unix.gettimeofday () in
+ let string_of_motor_state until =
+ if date < until then
+ "inhibited"
+ else
+ "OK"
+ in
+ Draw.textf zone x 6 "move forward: %s" (string_of_motor_state inhibited_forward_until);
+ Draw.textf zone x 7 "move backward: %s" (string_of_motor_state inhibited_backward_until);
(* ===== History ===== *)
@@ -271,12 +284,21 @@ let rec loop krobot history =
| Entry point |
+-----------------------------------------------------------------+ *)
+let rec copy_logs ic =
+ lwt line = Lwt_io.read_line ic in
+ set_logs (line :: React.S.value logs);
+ copy_logs ic
+
lwt () =
lwt () = hide_cursor () 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));
lwt krobot = Krobot.create () in
let signal =
- React.S.l4 draw
+ React.S.l5 draw
Lwt_term.size
(React.S.l5 (fun a b c d e -> (a, b, c, d, e))
(Krobot.compass krobot)
@@ -284,6 +306,9 @@ lwt () =
(Krobot.range_finders krobot)
(Krobot.team krobot)
(Krobot.jack krobot))
+ (React.S.l2 (fun a b -> (a, b))
+ (Krobot.inhibited_forward_until krobot)
+ (Krobot.inhibited_backward_until krobot))
(React.S.l3 (fun a b c -> (a, b, c))
engine_state
box
diff --git a/PC_Mainboard/driver/src/driver.ml b/PC_Mainboard/driver/src/driver.ml
index b0ede4f..82af766 100644
--- a/PC_Mainboard/driver/src/driver.ml
+++ b/PC_Mainboard/driver/src/driver.ml
@@ -330,15 +330,26 @@ struct
| Motors inhbition |
+---------------------------------------------------------------+ *)
+ OL_method InhibitedForward : float = fun dev ->
+ return dev.inhibit_forward_until
+
+ OL_method InhibitedBackward : float = fun dev ->
+ return dev.inhibit_backward_until
+
+ OL_signal InhibitedForwardChanged : float
+ OL_signal InhibitedBackwardChanged : float
+
OL_method InhibitForward : float -> unit =
fun dev delay ->
- dev.inhibit_forward_until <- Unix.gettimeofday () +. delay;
- return ()
+ let until = Unix.gettimeofday () +. delay in
+ dev.inhibit_forward_until <- until;
+ inhibited_forward_changed dev until
OL_method InhibitBackward : float -> unit =
fun dev delay ->
- dev.inhibit_backward_until <- Unix.gettimeofday () +. delay;
- return ()
+ let until = Unix.gettimeofday () +. delay in
+ dev.inhibit_backward_until <- until;
+ inhibited_backward_changed dev until
let make card path =
let dev = {
hooks/post-receive
--
krobot
|