|
From: Jérémie D. <Ba...@us...> - 2010-02-03 21:01:15
|
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 6c6fc54b41b825a7fd7a7c4e3b66b5991e92b084 (commit)
via 42ea7b3fc3549e99b5dd1f690acbd4e2973c7471 (commit)
from 306a26a4ab748da3e97fe47c4c07e8330f4fecbc (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 6c6fc54b41b825a7fd7a7c4e3b66b5991e92b084
Author: Jérémie Dimino <je...@di...>
Date: Wed Feb 3 22:00:25 2010 +0100
fixes command parsing
commit 42ea7b3fc3549e99b5dd1f690acbd4e2973c7471
Author: Jérémie Dimino <je...@di...>
Date: Wed Feb 3 21:59:47 2010 +0100
enable lm629 on motor card
-----------------------------------------------------------------------
Changes:
diff --git a/PC_Mainboard/clients/tools/script.ml b/PC_Mainboard/clients/tools/script.ml
index a23183a..3fc468c 100644
--- a/PC_Mainboard/clients/tools/script.ml
+++ b/PC_Mainboard/clients/tools/script.ml
@@ -96,41 +96,31 @@ let motor_of_string = function
| _ -> failwith "Script.motor_of_strig: invalid motor"
let exec krobot line =
- match Text.words line with
- | [] ->
+ let action, args = Script_lexer.whole_command (Lexing.from_string line) in
+ let arg_int key default = try int_of_string (List.assoc key args) with Not_found -> default in
+ let arg_string key default = try List.assoc key args with Not_found -> default in
+ match action with
+ | "forward" ->
+ Krobot.move krobot ~dist:(arg_int "dist" 100) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)
+ | "backward" ->
+ Krobot.move krobot ~dist:(-(arg_int "dist" 100)) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)
+ | "left" ->
+ Krobot.turn krobot ~angle:(arg_int "dist" 100) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)
+ | "right" ->
+ Krobot.turn krobot ~angle:(-(arg_int "dist" 100)) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)
+ | "stop-motors" ->
+ Krobot.stop_motors krobot
+ ~motor:(motor_of_string (arg_string "motor" "both"))
+ ~mode:(match arg_string "mode" "off" with
+ | "off" -> `Off
+ | "abrupt" -> `Abrupt
+ | "smooth" -> `Smooth
+ | _ -> failwith "Script.exec: invalid stop mode")
+ | "set-speed" ->
+ Krobot.set_speed krobot
+ ~motor:(motor_of_string (arg_string "motor" "both"))
+ ~speed:(arg_int "speed" 100)
+ ~acc:(arg_int "acc" 800)
+ | _ ->
return ()
- | action :: args ->
- let rec make_args acc = function
- | [] | [_] ->
- acc
- | key :: value :: rest ->
- make_args ((key, value) :: acc) rest
- in
- let args = make_args [] args in
- let arg_int key default = try int_of_string (List.assoc key args) with Not_found -> default in
- let arg_string key default = try List.assoc key args with Not_found -> default in
- match action with
- | "forward" ->
- Krobot.move krobot ~dist:(arg_int "dist" 100) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)
- | "backward" ->
- Krobot.move krobot ~dist:(-(arg_int "dist" 100)) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)
- | "left" ->
- Krobot.turn krobot ~angle:(arg_int "dist" 100) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)
- | "right" ->
- Krobot.turn krobot ~angle:(-(arg_int "dist" 100)) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)
- | "stop-motors" ->
- Krobot.stop_motors krobot
- ~motor:(motor_of_string (arg_string "motor" "both"))
- ~mode:(match arg_string "mode" "off" with
- | "off" -> `Off
- | "abrupt" -> `Abrupt
- | "smooth" -> `Smooth
- | _ -> failwith "Script.exec: invalid stop mode")
- | "set-speed" ->
- Krobot.set_speed krobot
- ~motor:(motor_of_string (arg_string "motor" "both"))
- ~speed:(arg_int "speed" 100)
- ~acc:(arg_int "acc" 800)
- | _ ->
- return ()
diff --git a/PC_Mainboard/clients/tools/script_lexer.mll b/PC_Mainboard/clients/tools/script_lexer.mll
index fea99ef..a32c26e 100644
--- a/PC_Mainboard/clients/tools/script_lexer.mll
+++ b/PC_Mainboard/clients/tools/script_lexer.mll
@@ -56,3 +56,15 @@ and arguments buf = parse
(TextSet.add key set, x) }
| ""
{ (TextSet.empty, `Nothing) }
+
+and whole_command = parse
+ | blank* (ident as command)
+ { (command, whole_arguments lexbuf) }
+ | ""
+ { raise Exit }
+
+and whole_arguments = parse
+ | blank+ (ident as key) blank* "=" blank* (value as value)
+ { (key, value) :: whole_arguments lexbuf }
+ | blank* eof
+ { [] }
diff --git a/PC_Mainboard/driver/src/driver.ml b/PC_Mainboard/driver/src/driver.ml
index 93aca19..2defde7 100644
--- a/PC_Mainboard/driver/src/driver.ml
+++ b/PC_Mainboard/driver/src/driver.ml
@@ -59,14 +59,20 @@ let motor_enable card =
RW.set_uint8 data 1 Protocol.motor_both;
Card.send_command card Protocol.cmd_motor data
+let init_lm629 card =
+ Log#info "enabling lm629 on %s card" (Card.name card);
+ let data = Card.make_buffer () in
+ RW.set_uint8 data 0 Protocol.traj_init;
+ Card.send_command card Protocol.cmd_traj data
+
(* Enable motors when a card comes up *)
-let enable_motor_on_running card =
+let on_running card f =
let stop = ref ignore in
let notifier =
Lwt_signal.notify_p
(function
| Card.Running ->
- motor_enable card
+ f card
| Card.Opening ->
return ()
| Card.Closed ->
@@ -77,8 +83,9 @@ let enable_motor_on_running card =
stop := (fun () -> Lwt_signal.disable notifier)
let () =
- enable_motor_on_running card_interface;
- enable_motor_on_running card_motor
+ on_running card_interface motor_enable;
+ on_running card_motor
+ (fun card -> motor_enable card <&> init_lm629 card)
(* +-----------------------------------------------------------------+
| Compass |
hooks/post-receive
--
krobot
|