From: Jérémie D. <Ba...@us...> - 2011-03-19 16:22:01
|
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 6409bfb8555556ae6d525498687b33f1ec8d125f (commit) from 97c23c71ca7612812e3e6e1faaa59b75084b2c68 (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 6409bfb8555556ae6d525498687b33f1ec8d125f Author: Jérémie Dimino <je...@di...> Date: Sat Mar 19 17:21:11 2011 +0100 [info] add a tool for recording can frames and a tool for replaying them ----------------------------------------------------------------------- Changes: diff --git a/info/control2011/_oasis b/info/control2011/_oasis index ad461ed..b85b498 100644 --- a/info/control2011/_oasis +++ b/info/control2011/_oasis @@ -76,6 +76,20 @@ Executable "krobot-dump" MainIs: krobot_dump.ml BuildDepends: krobot, lwt.syntax +Executable "krobot-record" + Path: src/tools + Install: true + CompiledObject: best + MainIs: krobot_record.ml + BuildDepends: krobot, lwt.syntax + +Executable "krobot-replay" + Path: src/tools + Install: true + CompiledObject: best + MainIs: krobot_replay.ml + BuildDepends: krobot, lwt.syntax + Executable "krobot-plot" Path: src/tools Install: true diff --git a/info/control2011/_tags b/info/control2011/_tags index 91cf530..9c6da6c 100644 --- a/info/control2011/_tags +++ b/info/control2011/_tags @@ -2,7 +2,7 @@ <src/interfaces/*.ml>: -syntax_camlp4o # OASIS_START -# DO NOT EDIT (digest: 737f6ffc25aca37ee689df337eca3afe) +# DO NOT EDIT (digest: 404e613a369861087dfd1cb3215a1db4) # Library krobot-interfaces "src/interfaces": include <src/interfaces/*.ml{,i}>: pkg_obus @@ -44,6 +44,12 @@ <src/driver/*.ml{,i}>: pkg_obus <src/driver/*.ml{,i}>: pkg_lwt.unix <src/driver/*.ml{,i}>: pkg_lwt.syntax +# Executable krobot-replay +<src/tools/krobot_replay.{native,byte}>: use_krobot +<src/tools/krobot_replay.{native,byte}>: use_krobot-interfaces +<src/tools/krobot_replay.{native,byte}>: pkg_obus +<src/tools/krobot_replay.{native,byte}>: pkg_lwt.unix +<src/tools/krobot_replay.{native,byte}>: pkg_lwt.syntax # Executable dump-can <examples/dump_can.{native,byte}>: use_krobot-can <examples/dump_can.{native,byte}>: use_krobot @@ -57,6 +63,12 @@ <examples/*.ml{,i}>: pkg_obus <examples/*.ml{,i}>: pkg_lwt.unix <examples/*.ml{,i}>: pkg_lwt.syntax +# Executable krobot-record +<src/tools/krobot_record.{native,byte}>: use_krobot +<src/tools/krobot_record.{native,byte}>: use_krobot-interfaces +<src/tools/krobot_record.{native,byte}>: pkg_obus +<src/tools/krobot_record.{native,byte}>: pkg_lwt.unix +<src/tools/krobot_record.{native,byte}>: pkg_lwt.syntax # Executable krobot-plot <src/tools/krobot_plot.{native,byte}>: use_krobot <src/tools/krobot_plot.{native,byte}>: use_krobot-interfaces diff --git a/info/control2011/setup.ml b/info/control2011/setup.ml index aa37ba5..3e81a39 100644 --- a/info/control2011/setup.ml +++ b/info/control2011/setup.ml @@ -1,7 +1,7 @@ (* setup.ml generated for the first time by OASIS v0.2.0~alpha1 *) (* OASIS_START *) -(* DO NOT EDIT (digest: c4a37702729314af3884a7f930148eae) *) +(* DO NOT EDIT (digest: c0061e3e8da638912d5008f7a294c616) *) (* Regenerated by OASIS v0.2.0 Visit http://oasis.forge.ocamlcore.org for more information and @@ -5244,6 +5244,33 @@ let setup_t = {exec_custom = false; exec_main_is = "krobot_driver.ml"; }); Executable ({ + cs_name = "krobot-replay"; + cs_data = PropList.Data.create (); + cs_plugin_data = []; + }, + { + bs_build = [(OASISExpr.EBool true, true)]; + bs_install = [(OASISExpr.EBool true, true)]; + bs_path = "src/tools"; + bs_compiled_object = Best; + bs_build_depends = + [ + InternalLibrary "krobot"; + FindlibPackage ("lwt.syntax", None) + ]; + bs_build_tools = [ExternalTool "ocamlbuild"]; + bs_c_sources = []; + bs_data_files = []; + bs_ccopt = [(OASISExpr.EBool true, [])]; + bs_cclib = [(OASISExpr.EBool true, [])]; + bs_dlllib = [(OASISExpr.EBool true, [])]; + bs_dllpath = [(OASISExpr.EBool true, [])]; + bs_byteopt = [(OASISExpr.EBool true, [])]; + bs_nativeopt = [(OASISExpr.EBool true, [])]; + }, + {exec_custom = false; exec_main_is = "krobot_replay.ml"; }); + Executable + ({ cs_name = "dump-can"; cs_data = PropList.Data.create (); cs_plugin_data = []; @@ -5271,6 +5298,33 @@ let setup_t = {exec_custom = false; exec_main_is = "dump_can.ml"; }); Executable ({ + cs_name = "krobot-record"; + cs_data = PropList.Data.create (); + cs_plugin_data = []; + }, + { + bs_build = [(OASISExpr.EBool true, true)]; + bs_install = [(OASISExpr.EBool true, true)]; + bs_path = "src/tools"; + bs_compiled_object = Best; + bs_build_depends = + [ + InternalLibrary "krobot"; + FindlibPackage ("lwt.syntax", None) + ]; + bs_build_tools = [ExternalTool "ocamlbuild"]; + bs_c_sources = []; + bs_data_files = []; + bs_ccopt = [(OASISExpr.EBool true, [])]; + bs_cclib = [(OASISExpr.EBool true, [])]; + bs_dlllib = [(OASISExpr.EBool true, [])]; + bs_dllpath = [(OASISExpr.EBool true, [])]; + bs_byteopt = [(OASISExpr.EBool true, [])]; + bs_nativeopt = [(OASISExpr.EBool true, [])]; + }, + {exec_custom = false; exec_main_is = "krobot_record.ml"; }); + Executable + ({ cs_name = "krobot-plot"; cs_data = PropList.Data.create (); cs_plugin_data = []; diff --git a/info/control2011/src/lib/krobot_can.ml b/info/control2011/src/lib/krobot_can.ml index 02a64f6..b533422 100644 --- a/info/control2011/src/lib/krobot_can.ml +++ b/info/control2011/src/lib/krobot_can.ml @@ -170,7 +170,7 @@ let value_of_frame (timestamp, frame) = | F29bits -> 1l), frame.data) -let frame_of_values (timestamp, identifier, kind, remote, format, data) = +let frame_of_tuple (timestamp, identifier, kind, remote, format, data) = let identifier = Int32.to_int identifier in let kind = match kind with @@ -187,7 +187,7 @@ let frame_of_values (timestamp, identifier, kind, remote, format, data) = (timestamp, frame ~identifier ~kind ~remote ~format ~data) let frame_of_value v = - frame_of_values (C.cast_single typ v) + frame_of_tuple (C.cast_single typ v) (* +-----------------------------------------------------------------+ | Sending/receiving frames | @@ -214,5 +214,5 @@ let recv bus = (E.delay (OBus_signal.connect (OBus_signal.with_context - (OBus_signal.map frame_of_values + (OBus_signal.map frame_of_tuple (OBus_signal.make Krobot_interface_can.Fr_krobot_CAN.s_message proxy))))) diff --git a/info/control2011/src/lib/krobot_can.mli b/info/control2011/src/lib/krobot_can.mli index 717092d..a0f9869 100644 --- a/info/control2011/src/lib/krobot_can.mli +++ b/info/control2011/src/lib/krobot_can.mli @@ -97,6 +97,9 @@ val value_of_frame : float * frame -> OBus_value.V.single val frame_of_value : OBus_value.V.single -> float * frame (** Converts a D-Bus structure into a can frame. *) +val frame_of_tuple : float * int32 * int32 * bool * int32 * string -> float * frame + (** Converts a tuple into a can frame. *) + (** {6 Sending/receiving frames} *) val send : Krobot_bus.t -> (float * frame) -> unit Lwt.t diff --git a/info/control2011/src/tools/krobot_record.ml b/info/control2011/src/tools/krobot_record.ml new file mode 100644 index 0000000..be68c96 --- /dev/null +++ b/info/control2011/src/tools/krobot_record.ml @@ -0,0 +1,31 @@ +(* + * krobot_record.ml + * ---------------- + * Copyright : (c) 2011, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +(* Record CAN frames. *) + +open Lwt +open Lwt_react + +lwt () = + let file = ref "krobot.record" in + Krobot_init.arg "-output" (Arg.Set_string file) "<file> output file"; + lwt bus = Krobot_init.init_program "Record" in + + lwt oc = Lwt_io.open_file ~mode:Lwt_io.output !file in + + (* The proxy for the driver. *) + let driver = OBus_proxy.make (OBus_peer.make (Krobot_bus.to_bus bus) "fr.krobot.Driver") ["fr"; "krobot"; "CAN"] in + + (* Receive frames comming from the driver. *) + lwt ev = OBus_signal.connect (OBus_signal.make Krobot_interface_can.Fr_krobot_CAN.s_message driver) in + + (* Write all frames to the output file. *) + E.keep (E.map_s (fun v -> Lwt_io.write_value oc (Krobot_can.frame_of_tuple v)) ev); + + fst (wait ()) diff --git a/info/control2011/src/tools/krobot_replay.ml b/info/control2011/src/tools/krobot_replay.ml new file mode 100644 index 0000000..ffabded --- /dev/null +++ b/info/control2011/src/tools/krobot_replay.ml @@ -0,0 +1,33 @@ +(* + * krobot_replay.ml + * ---------------- + * Copyright : (c) 2011, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +(* Record CAN frames. *) + +open Lwt +open Lwt_react + +lwt () = + let file = ref "krobot.record" in + Krobot_init.arg "-input" (Arg.Set_string file) "<file> input file"; + lwt bus = Krobot_init.init_program "Record" in + + lwt ic = Lwt_io.open_file ~mode:Lwt_io.input !file in + + try_lwt + (* Read the first frame. *) + lwt timestamp, frame = Lwt_io.read_value ic in + (* Compute the difference of time to add to each timestamp. *) + let delta = Unix.gettimeofday () -. timestamp in + lwt () = Krobot_can.send bus (timestamp +. delta, frame) in + while_lwt true do + lwt timestamp, frame = Lwt_io.read_value ic in + Krobot_can.send bus (timestamp +. delta, frame) + done + with End_of_file -> + Lwt_io.close ic hooks/post-receive -- krobot |