You can subscribe to this list here.
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(13) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2010 |
Jan
(50) |
Feb
(137) |
Mar
(84) |
Apr
(36) |
May
(100) |
Jun
(5) |
Jul
|
Aug
(4) |
Sep
(13) |
Oct
(1) |
Nov
(4) |
Dec
(22) |
2011 |
Jan
(4) |
Feb
(9) |
Mar
(113) |
Apr
(76) |
May
(31) |
Jun
(19) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
(4) |
Feb
|
Mar
(2) |
Apr
(6) |
May
(19) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
(2) |
Apr
(22) |
May
(6) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Jérémie D. <Ba...@us...> - 2010-01-31 20:30:32
|
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 e007ef2fec366cfa70104c5d23dd9f53fa4b3947 (commit) from 6e15de85f5b0e2ebccb0047fcacd4e3cf2755d50 (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 e007ef2fec366cfa70104c5d23dd9f53fa4b3947 Author: Jérémie Dimino <je...@di...> Date: Sun Jan 31 21:29:34 2010 +0100 add interfaces for cards ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/lib-krobot/krobot.ml b/PC_Mainboard/clients/lib-krobot/krobot.ml index 9f05595..020fc0f 100644 --- a/PC_Mainboard/clients/lib-krobot/krobot.ml +++ b/PC_Mainboard/clients/lib-krobot/krobot.ml @@ -16,12 +16,21 @@ open Lwt type team = Team_red | Team_green +type card = { + card_state : [ `Running | `Opening | `Closed ] React.signal; +} + type t = { (* Basic signals: *) compass : int React.signal; logic_sensors : bool array React.signal; range_finders : int array React.signal; + (* Cards *) + interface : card; + sensor : card; + motor : card; + peer : OBus_peer.t; (* The driver peer *) } @@ -46,12 +55,18 @@ module MakeDevice(Name : sig val name : string end) = - a [get] method - an [update] signal *) -let make_signal ~peer ~name ~get ~update ~typ = +let make_dev_signal ~peer ~name ~get ~update ~typ = let proxy = OBus_proxy.make peer ["fr"; "krobot"; "Devices"; name] in let interface = "fr.krobot.Device." ^ name in lwt initial = OBus_proxy.method_call proxy ~interface ~member:get (OBus_type.reply typ) in return (React.S.hold initial (OBus_signal.connect proxy ~interface ~member:update typ)#event) +let make_card_signal ~peer ~name ~get ~update ~typ = + let proxy = OBus_proxy.make peer ["fr"; "krobot"; "Cards"; name] in + let interface = "fr.krobot.Card" in + lwt initial = OBus_proxy.method_call proxy ~interface ~member:get (OBus_type.reply typ) in + return (React.S.hold initial (OBus_signal.connect proxy ~interface ~member:update typ)#event) + (* +-----------------------------------------------------------------+ | Creation | +-----------------------------------------------------------------+ *) @@ -84,6 +99,11 @@ let get_bus () = Log#exn exn "failed to connect to system bus"; fail exn +let obus_state = + OBus_type.mapping + OBus_pervasives.obus_uint + [(`Running, 0); (`Opening, 1); (`Closed, 2)] + let create ?peer () = lwt peer = match peer with | Some peer -> @@ -92,15 +112,21 @@ let create ?peer () = lwt bus = get_bus () in return (OBus_peer.make bus "fr.krobot") in - lwt compass = make_signal peer "Compass" "Get" "Value" <:obus_type< int >> - and logic_sensors = make_signal peer "LogicSensors" "Get" "Value" <:obus_type< bool array >> - and range_finders = make_signal peer "RangeFinders" "Get" "Value" <:obus_type< int array >> + lwt compass = make_dev_signal peer "Compass" "Get" "Value" <:obus_type< int >> + and logic_sensors = make_dev_signal peer "LogicSensors" "Get" "Value" <:obus_type< bool array >> + and range_finders = make_dev_signal peer "RangeFinders" "Get" "Value" <:obus_type< int array >> + 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 >> in return { peer = peer; compass = compass; logic_sensors = logic_sensors; range_finders = range_finders; + interface = { card_state = interface_state }; + sensor = { card_state = sensor_state }; + motor = { card_state = motor_state }; } (* +-----------------------------------------------------------------+ @@ -167,3 +193,38 @@ OP_method Move : int -> int -> int -> unit let turn krobot ~angle ~speed ~acc = turn krobot angle speed acc let move krobot ~dist ~speed ~acc = turn krobot dist speed acc + +(* +-----------------------------------------------------------------+ + | Cards | + +-----------------------------------------------------------------+ *) + +module Card = +struct + type card = [ `Interface | `Sensor | `Motor ] + type state = [ `Running | `Opening | `Closed ] + + let name = function + | `Interface -> "interface" + | `Sensor -> "sensor" + | `Motor -> "motor" + + let state krobot = function + | `Interface -> krobot.interface.card_state + | `Sensor -> krobot.sensor.card_state + | `Motor -> krobot.motor.card_state + + include OBus_interface.Make(struct let name = "fr.krobot.Card" end) + + OP_method GetFirmwareBuild : string + OP_method GetBoardInfo : string + + let proxy krobot card = + OBus_proxy.make krobot.peer + ["fr"; "krobot"; "Cards"; (match card with + | `Interface -> "Interface" + | `Sensor -> "Sensor" + | `Motor -> "Motor")] + + let get_firmware_build krobot card = get_firmware_build (proxy krobot card) + let get_board_info krobot card = get_board_info (proxy krobot card) +end diff --git a/PC_Mainboard/clients/lib-krobot/krobot.mli b/PC_Mainboard/clients/lib-krobot/krobot.mli index 49168e4..546751e 100644 --- a/PC_Mainboard/clients/lib-krobot/krobot.mli +++ b/PC_Mainboard/clients/lib-krobot/krobot.mli @@ -70,3 +70,20 @@ val close_grip : t -> unit Lwt.t val turn : t -> angle : int -> speed : int -> acc : int -> unit Lwt.t val move : t -> dist : int -> speed : int -> acc : int -> unit Lwt.t + +(** {6 Cards} *) + +module Card : sig + type card = [ `Interface | `Sensor | `Motor ] + + type state = [ `Running | `Opening | `Closed ] + + val name : card -> string + (** Returns the name of a card *) + + val state : t -> card -> state React.signal + (** Returns the status of one of the card of the krobot *) + + val get_firmware_build : t -> card -> string Lwt.t + val get_board_info : t -> card -> string Lwt.t +end diff --git a/PC_Mainboard/clients/tools/status.ml b/PC_Mainboard/clients/tools/status.ml index 007cf63..1cfa1bd 100644 --- a/PC_Mainboard/clients/tools/status.ml +++ b/PC_Mainboard/clients/tools/status.ml @@ -10,23 +10,42 @@ (* Print status and exit *) open Lwt +open Lwt_io open Krobot +let print_card krobot card = + match React.S.value (Card.state krobot card) with + | `Running -> + lwt firmware_build = Card.get_firmware_build krobot card + and board_info = Card.get_board_info krobot card in + let name = Card.name card in + lwt () = printlf "card.%s.state = running" name in + lwt () = printlf "card.%s.firmware_build = %s" name firmware_build in + lwt () = printlf "card.%s.board_info = %s" name board_info in + return () + | `Opening -> + printlf "card.%s.state = opening" (Card.name card) + | `Closed -> + printlf "card.%s.state = closed" (Card.name card) + lwt () = lwt krobot = Krobot.create () in - lwt () = Lwt_io.printlf "compass = %d" (React.S.value (compass krobot)) in + lwt () = printlf "compass = %d" (React.S.value (compass krobot)) in let arr = React.S.value (logic_sensors krobot) in lwt () = for_lwt i = 0 to Array.length arr - 1 do - Lwt_io.printlf "logic_sensors[%d] = %s" i (if arr.(i) then "O" else ".") + printlf "logic_sensors[%d] = %s" i (if arr.(i) then "O" else ".") done in let arr = React.S.value (range_finders krobot) in lwt () = for_lwt i = 0 to Array.length arr - 1 do - Lwt_io.printlf "range_finders[%d] = %d" i arr.(i) + printlf "range_finders[%d] = %d" i arr.(i) done in - lwt () = Lwt_io.printlf "team = %s" (match React.S.value (team krobot) with Team_red -> "red" | Team_green -> "green") in - lwt () = Lwt_io.printlf "jack = %s" (match React.S.value (jack krobot) with true -> "present" | false -> "absent") in + lwt () = printlf "team = %s" (match React.S.value (team krobot) with Team_red -> "red" | Team_green -> "green") in + lwt () = printlf "jack = %s" (match React.S.value (jack krobot) with true -> "present" | false -> "absent") in + lwt () = print_card krobot `Interface in + lwt () = print_card krobot `Sensor in + lwt () = print_card krobot `Motor in return () diff --git a/PC_Mainboard/driver/_tags b/PC_Mainboard/driver/_tags index f288f8c..aeaf11e 100644 --- a/PC_Mainboard/driver/_tags +++ b/PC_Mainboard/driver/_tags @@ -1,4 +1,5 @@ # -*- conf -*- <src/*.ml>: syntax_camlp4o, pkg_camlp4, pkg_lwt.syntax, pkg_lwt.syntax.log, pkg_obus.syntax +<src/card.mli>: syntax_camlp4o, pkg_obus.syntax <src/*>: thread, pkg_usb, pkg_obus diff --git a/PC_Mainboard/driver/src/card.ml b/PC_Mainboard/driver/src/card.ml index 4c2500a..80196f1 100644 --- a/PC_Mainboard/driver/src/card.ml +++ b/PC_Mainboard/driver/src/card.ml @@ -77,6 +77,11 @@ module SerialMap = Map.Make(struct type t = serial let compare = compare end) type state = Running | Opening | Closed +let obus_state = + OBus_type.mapping + OBus_pervasives.obus_uint + [(Running, 0); (Opening, 1); (Closed, 2)] + (* Type of a up and running card *) type card = { diff --git a/PC_Mainboard/driver/src/card.mli b/PC_Mainboard/driver/src/card.mli index 0e64417..b3ca5bf 100644 --- a/PC_Mainboard/driver/src/card.mli +++ b/PC_Mainboard/driver/src/card.mli @@ -22,6 +22,7 @@ type state = (** The card is being opened *) | Closed (** The card has been closed *) + with obus(basic) val state : t -> state React.signal (** [state card] is the state of a card, as a reactive value *) diff --git a/PC_Mainboard/driver/src/driver.ml b/PC_Mainboard/driver/src/driver.ml index 1ebef34..b3287cc 100644 --- a/PC_Mainboard/driver/src/driver.ml +++ b/PC_Mainboard/driver/src/driver.ml @@ -439,6 +439,57 @@ struct end (* +-----------------------------------------------------------------+ + | Objects for cards | + +-----------------------------------------------------------------+ *) + +module MCard = +struct + type t = { + card : Card.t; + obus : OBus_object.t; + } + + module OBus = OBus_object.Make(struct + type obj = t + let get obj = obj.obus + end) + + include OBus.MakeInterface(struct let name = "fr.krobot.Card" end) + + OL_property_r Name : string = fun card -> + return (Card.name card.card) + + let string_of_azt data = + try + String.sub data 0 (String.index data '\000') + with Not_found -> + data + + OL_method GetFirmwareBuild : string = fun card -> + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.get_firmware_build; + Card.send_request card Protocol.cmd_get data >|= string_of_azt + + OL_method GetBoardInfo : string = fun card -> + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.get_board_info; + Card.send_request card Protocol.cmd_get data >|= string_of_azt + + OL_method GetState : Card.state = fun card -> + return (React.S.value (Card.state card.card)) + + OL_signal StateChanged : Card.state + + let make card path = + let card = { + card = card; + obus = OBus_object.make path; + } in + Lwt_signal.always_notify_s (state_changed card) (Card.state card.card); + card +end + +(* +-----------------------------------------------------------------+ | Entry point | +-----------------------------------------------------------------+ *) @@ -495,6 +546,11 @@ lwt () = (* Motor card *) Motors.OBus.export bus (Motors.make card_motor ["fr"; "krobot"; "Devices"; "Motors"]); + (* Cards *) + MCard.OBus.export bus (MCard.make card_interface ["fr"; "krobot"; "Cards"; "Interface"]); + MCard.OBus.export bus (MCard.make card_sensor ["fr"; "krobot"; "Cards"; "Sensor"]); + MCard.OBus.export bus (MCard.make card_motor ["fr"; "krobot"; "Cards"; "Motor"]); + (* Internal objects *) Manager.OBus.export bus (); hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-01-31 19:45:32
|
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 6e15de85f5b0e2ebccb0047fcacd4e3cf2755d50 (commit) from 48ea6eff525ebbd96d2fa14de78f5bff22c6b782 (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 6e15de85f5b0e2ebccb0047fcacd4e3cf2755d50 Author: Jérémie Dimino <je...@di...> Date: Sun Jan 31 20:44:17 2010 +0100 do not open everything automatically ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/lib-krobot/krobot.ml b/PC_Mainboard/clients/lib-krobot/krobot.ml index cde6b32..9f05595 100644 --- a/PC_Mainboard/clients/lib-krobot/krobot.ml +++ b/PC_Mainboard/clients/lib-krobot/krobot.ml @@ -10,143 +10,160 @@ open OBus_pervasives open Lwt -lwt bus = - let host = - try - Sys.getenv "KROBOT" - with Not_found -> - if Unix.gethostname () = "mrp" then - "localhost" - else - "mrp.wifi.crans.org" - in - if host = "localhost" then - Lazy.force OBus_bus.system - else begin - try_lwt - let ssh = Lwt_process.open_process ("ssh", [|"ssh"; "-l"; "olivier"; host; "/home/olivier/bin/forward_dbus.native"|]) in - let transport = - OBus_transport.make - ~send:(fun msg -> OBus_wire.write_message ssh#stdin msg) - ~recv:(fun () -> OBus_wire.read_message ssh#stdout) - ~shutdown:(fun () -> ssh#close >> return ()) - () - in - let connection = OBus_connection.of_transport transport in - lwt () = OBus_bus.register_connection connection in - return connection - with exn -> - Log#exn exn "failed to create remote transport"; - fail exn - end - -let driver = OBus_peer.make bus "fr.krobot" - (* +-----------------------------------------------------------------+ - | Compass | + | Types | +-----------------------------------------------------------------+ *) -include OBus_interface.Make(struct let name = "fr.krobot.Device.Compass" end) +type team = Team_red | Team_green -OP_signal Value : int -OP_method Get : int +type t = { + (* Basic signals: *) + compass : int React.signal; + logic_sensors : bool array React.signal; + range_finders : int array React.signal; -lwt compass = - let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "Compass" ] in - lwt initial = get proxy in - return (React.S.hold initial (value proxy)#event) + peer : OBus_peer.t; + (* The driver peer *) +} (* +-----------------------------------------------------------------+ - | AX12 | + | Helpers | +-----------------------------------------------------------------+ *) -let op_method_call member typ = - let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "AX12" ] in - OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.AX12" ~member typ - -OP_method OpenClaw : unit -> unit -OP_method CloseClaw : unit -> unit -OP_method OpenCylinder : unit -> unit -OP_method CloseCylinder : unit -> unit +(* Create an interface using [t] as type for proxies *) +module MakeDevice(Name : sig val name : string end) = + OBus_interface.MakeCustom + (struct + type proxy = t + let get krobot = OBus_proxy.make krobot.peer ["fr"; "krobot"; "Devices"; Name.name] + end) + (struct + let name = "fr.krobot.Device." ^ Name.name + end) + +(* Create a reactive signal from: + + - a [get] method + - an [update] signal +*) +let make_signal ~peer ~name ~get ~update ~typ = + let proxy = OBus_proxy.make peer ["fr"; "krobot"; "Devices"; name] in + let interface = "fr.krobot.Device." ^ name in + lwt initial = OBus_proxy.method_call proxy ~interface ~member:get (OBus_type.reply typ) in + return (React.S.hold initial (OBus_signal.connect proxy ~interface ~member:update typ)#event) (* +-----------------------------------------------------------------+ - | Elevator | + | Creation | +-----------------------------------------------------------------+ *) -let op_method_call member typ = - let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "Elevator" ] in - OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.Elevator" ~member typ +let get_bus () = + match try Some(Sys.getenv "KROBOT") with Not_found -> None with + | Some command -> begin + try_lwt + Log#info "connecting to the krobot with command %S" command; + let process = Lwt_process.open_process (Lwt_process.shell command) in + let transport = + OBus_transport.make + ~send:(fun msg -> OBus_wire.write_message process#stdin msg) + ~recv:(fun () -> OBus_wire.read_message process#stdout) + ~shutdown:(fun () -> process#close >> return ()) + () + in + let connection = OBus_connection.of_transport transport in + lwt () = OBus_bus.register_connection connection in + return connection + with exn -> + Log#exn exn "failed to create remote transport"; + fail exn + end + | None -> + try_lwt + Log#info "connecting to the krobot with the local system bus"; + Lazy.force OBus_bus.system + with exn -> + Log#exn exn "failed to connect to system bus"; + fail exn + +let create ?peer () = + lwt peer = match peer with + | Some peer -> + return peer + | None -> + lwt bus = get_bus () in + return (OBus_peer.make bus "fr.krobot") + in + lwt compass = make_signal peer "Compass" "Get" "Value" <:obus_type< int >> + and logic_sensors = make_signal peer "LogicSensors" "Get" "Value" <:obus_type< bool array >> + and range_finders = make_signal peer "RangeFinders" "Get" "Value" <:obus_type< int array >> + in + return { + peer = peer; + compass = compass; + logic_sensors = logic_sensors; + range_finders = range_finders; + } -OP_method ElevatorUp : int -> int -> unit -OP_method ElevatorDown : int -> int -> unit +(* +-----------------------------------------------------------------+ + | Reactive signals | + +-----------------------------------------------------------------+ *) -let opt = function - | Some d -> d - | None -> -1 +let compass krobot = krobot.compass +let logic_sensors krobot = krobot.logic_sensors +let range_finders krobot = krobot.range_finders -let elevator_up ?speed ?delay () = - elevator_up (opt speed) (opt delay) +let team krobot = + React.S.map (fun ls -> if ls.(14) then Team_red else Team_green) krobot.logic_sensors -let elevator_down ?speed ?delay () = - elevator_down (opt speed) (opt delay) +let jack krobot = + React.S.map (fun ls -> ls.(15)) krobot.logic_sensors (* +-----------------------------------------------------------------+ - | Grip | + | AX12 | +-----------------------------------------------------------------+ *) -let op_method_call member typ = - let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "Grip" ] in - OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.Grip" ~member typ +include MakeDevice(struct let name = "AX12" end) -OP_method OpenGrip : unit -> unit -OP_method CloseGrip : unit -> unit +OP_method OpenClaw : unit +OP_method CloseClaw : unit +OP_method OpenCylinder : unit +OP_method CloseCylinder : unit (* +-----------------------------------------------------------------+ - | Logic sensors | + | Elevator | +-----------------------------------------------------------------+ *) -include OBus_interface.Make(struct let name = "fr.krobot.Device.LogicSensors" end) +include MakeDevice(struct let name = "Elevator" end) -OP_signal Value : bool array -OP_method Get : bool array - -lwt logic_sensors = - let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "LogicSensors" ] in - lwt initial = get proxy in - return (React.S.hold initial (value proxy)#event) +OP_method ElevatorUp : int -> int -> unit +OP_method ElevatorDown : int -> int -> unit -type team = Team_red | Team_green +let opt = function + | Some d -> d + | None -> -1 -let team = - React.S.map (fun ls -> if ls.(14) then Team_red else Team_green) logic_sensors +let elevator_up krobot ?speed ?delay () = + elevator_up krobot (opt speed) (opt delay) -let jack = - React.S.map (fun ls -> ls.(15)) logic_sensors +let elevator_down krobot ?speed ?delay () = + elevator_down krobot (opt speed) (opt delay) (* +-----------------------------------------------------------------+ - | Range finders | + | Grip | +-----------------------------------------------------------------+ *) -include OBus_interface.Make(struct let name = "fr.krobot.Device.RangeFinders" end) - -OP_signal Value : int array -OP_method Get : int array +include MakeDevice(struct let name = "Grip" end) -lwt range_finders = - let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "RangeFinders" ] in - lwt initial = get proxy in - return (React.S.hold initial (value proxy)#event) +OP_method OpenGrip : unit +OP_method CloseGrip : unit (* +-----------------------------------------------------------------+ | Motors | +-----------------------------------------------------------------+ *) -let op_method_call member typ = - let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "Motors" ] in - OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.Motors" ~member typ +include MakeDevice(struct let name = "Motors" end) OP_method Turn : int -> int -> int -> unit OP_method Move : int -> int -> int -> unit -let turn ~angle ~speed ~acc = turn angle speed acc -let move ~dist ~speed ~acc = turn dist speed acc +let turn krobot ~angle ~speed ~acc = turn krobot angle speed acc +let move krobot ~dist ~speed ~acc = turn krobot dist speed acc diff --git a/PC_Mainboard/clients/lib-krobot/krobot.mli b/PC_Mainboard/clients/lib-krobot/krobot.mli index 0ec8e9c..49168e4 100644 --- a/PC_Mainboard/clients/lib-krobot/krobot.mli +++ b/PC_Mainboard/clients/lib-krobot/krobot.mli @@ -7,50 +7,66 @@ * This file is a part of [kro]bot. *) +(** Krobot client library *) + +(** {6 Krobot object} *) + +type t + (** Type of a Krobot client. *) + +val create : ?peer : OBus_peer.t -> unit -> t Lwt.t + (** [create ?peer ()] makes a Krobot client value. If [peer] is not + specified, then: + + - if the environment variable [KROBOT] is set, it is used as a + command to connect to the message bus the krobot is using. + - otherwise it uses the local system bus + *) + (** {6 Compass} *) -val compass : int React.signal +val compass : t -> int React.signal (** Signal holding the current value of the compass. *) (** {6 Logic sensors} *) -val logic_sensors : bool array React.signal +val logic_sensors : t -> bool array React.signal (** Signal holding the current state of logic sensors. *) (** {6 Team/jack stuff} *) type team = Team_red | Team_green -val team : team React.signal +val team : t -> team React.signal (** Signal holding the state of the team button *) -val jack : bool React.signal +val jack : t -> bool React.signal (** Signal holding the status of the jack *) (** {6 Range finders} *) -val range_finders : int array React.signal +val range_finders : t -> int array React.signal (** Signal holding the current range finders state *) (** {6 Manipulation of AX12s} *) -val open_claw : unit -> unit Lwt.t -val close_claw : unit -> unit Lwt.t +val open_claw : t -> unit Lwt.t +val close_claw : t -> unit Lwt.t -val open_cylinder : unit -> unit Lwt.t -val close_cylinder : unit -> unit Lwt.t +val open_cylinder : t -> unit Lwt.t +val close_cylinder : t -> unit Lwt.t (** {6 Manipulation of the elevator} *) -val elevator_up : ?speed : int -> ?delay : int -> unit -> unit Lwt.t -val elevator_down : ?speed : int -> ?delay : int -> unit -> unit Lwt.t +val elevator_up : t -> ?speed : int -> ?delay : int -> unit -> unit Lwt.t +val elevator_down : t -> ?speed : int -> ?delay : int -> unit -> unit Lwt.t (** {6 Manipulation of the grip} *) -val open_grip : unit -> unit Lwt.t -val close_grip : unit -> unit Lwt.t +val open_grip : t -> unit Lwt.t +val close_grip : t -> unit Lwt.t (** {6 Motors} *) -val turn : angle : int -> speed : int -> acc : int -> unit Lwt.t -val move : dist : int -> speed : int -> acc : int -> unit Lwt.t +val turn : t -> angle : int -> speed : int -> acc : int -> unit Lwt.t +val move : t -> dist : int -> speed : int -> acc : int -> unit Lwt.t diff --git a/PC_Mainboard/clients/tools/monitor.ml b/PC_Mainboard/clients/tools/monitor.ml index bfada3d..c62812d 100644 --- a/PC_Mainboard/clients/tools/monitor.ml +++ b/PC_Mainboard/clients/tools/monitor.ml @@ -24,32 +24,41 @@ let draw_text screen line column txt = in loop column (Text.pointer_l txt) -let print_status size compass logic_sensors range_finders team jack = - let screen = Array.make_matrix size.lines size.columns blank in - draw_text screen 1 1 ("team = " ^ match team with Krobot.Team_red -> "red" | Krobot.Team_green -> "green"); - draw_text screen 2 1 ("jack = " ^ if jack then "present" else "absent"); - draw_text screen 3 1 ("compass = " ^ string_of_int compass); - draw_text screen 4 1 ("logic_sensors = " ^ String.concat "" (List.map (function true -> "O" | false -> ".") (Array.to_list logic_sensors))); - for i = 0 to Array.length range_finders - 1 do - draw_text screen (5 + i) 1 (Printf.sprintf "range_finders[%d] = %d" i range_finders.(i)) - done; - for i = 1 to size.columns - 2 do - screen.(0).(i) <- { blank with char = "─" }; - screen.(size.lines - 1).(i) <- { blank with char = "─" } - done; - for i = 1 to size.lines - 2 do - screen.(i).(0) <- { blank with char = "│" }; - screen.(i).(size.columns - 1) <- { blank with char = "│" } - done; - screen.(0).(0) <- { blank with char = "┌" }; - screen.(size.lines - 1).(0) <- { blank with char = "└" }; - screen.(size.lines - 1).(size.columns - 1) <- { blank with char = "┘" }; - screen.(0).(size.columns - 1) <- { blank with char = "┐" }; - Lwt_term.render screen +(* Prevent concurrent drawing: *) +let drawer_mutex = Lwt_mutex.create () -let signal = - React.S.l6 print_status size Krobot.compass Krobot.logic_sensors Krobot.range_finders Krobot.team Krobot.jack +(* Draw the whole screen *) +let rec draw size compass logic_sensors range_finders team jack = + 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 + do it *) + let screen = Array.make_matrix size.lines size.columns blank in + draw_text screen 1 1 ("team = " ^ match team with Krobot.Team_red -> "red" | Krobot.Team_green -> "green"); + draw_text screen 2 1 ("jack = " ^ if jack then "present" else "absent"); + draw_text screen 3 1 ("compass = " ^ string_of_int compass); + draw_text screen 4 1 ("logic_sensors = " ^ String.concat "" (List.map (function true -> "O" | false -> ".") (Array.to_list logic_sensors))); + for i = 0 to Array.length range_finders - 1 do + draw_text screen (5 + i) 1 (Printf.sprintf "range_finders[%d] = %d" i range_finders.(i)) + done; + for i = 1 to size.columns - 2 do + screen.(0).(i) <- { blank with char = "─" }; + screen.(size.lines - 1).(i) <- { blank with char = "─" } + done; + for i = 1 to size.lines - 2 do + screen.(i).(0) <- { blank with char = "│" }; + screen.(i).(size.columns - 1) <- { blank with char = "│" } + done; + screen.(0).(0) <- { blank with char = "┌" }; + screen.(size.lines - 1).(0) <- { blank with char = "└" }; + screen.(size.lines - 1).(size.columns - 1) <- { blank with char = "┘" }; + screen.(0).(size.columns - 1) <- { blank with char = "┐" }; + Lwt_term.render screen + end else + return () + end +(* Loop until an exit key is pressed *) let rec loop_key () = Lwt_term.read_key () >>= function | Lwt_term.Key "q" | Lwt_term.Key_control ('c' | '[') -> @@ -60,6 +69,18 @@ let rec loop_key () = lwt () = lwt () = hide_cursor () in try_lwt + lwt krobot = Krobot.create () in + let signal = + React.S.l6 draw + Lwt_term.size + (Krobot.compass krobot) + (Krobot.logic_sensors krobot) + (Krobot.range_finders krobot) + (Krobot.team krobot) + (Krobot.jack krobot) + in + (* Make the compiler happy: *) + ignore signal; Lwt_term.with_raw_mode loop_key finally show_cursor () diff --git a/PC_Mainboard/clients/tools/status.ml b/PC_Mainboard/clients/tools/status.ml index 09cc72a..007cf63 100644 --- a/PC_Mainboard/clients/tools/status.ml +++ b/PC_Mainboard/clients/tools/status.ml @@ -13,15 +13,20 @@ open Lwt open Krobot lwt () = - Lwt_io.printf "\ -compass = %d -logic_sensors = %s -range_finders = %s -team = %s -jack = %s -" - (React.S.value compass) - (String.concat "" (List.map (function true -> "O" | false -> ".") (Array.to_list (React.S.value logic_sensors)))) - (String.concat " " (List.map string_of_int (Array.to_list (React.S.value range_finders)))) - (match React.S.value team with Team_red -> "red" | Team_green -> "green") - (match React.S.value jack with true -> "present" | false -> "absent") + lwt krobot = Krobot.create () in + lwt () = Lwt_io.printlf "compass = %d" (React.S.value (compass krobot)) in + let arr = React.S.value (logic_sensors krobot) in + lwt () = + for_lwt i = 0 to Array.length arr - 1 do + Lwt_io.printlf "logic_sensors[%d] = %s" i (if arr.(i) then "O" else ".") + done + in + let arr = React.S.value (range_finders krobot) in + lwt () = + for_lwt i = 0 to Array.length arr - 1 do + Lwt_io.printlf "range_finders[%d] = %d" i arr.(i) + done + in + lwt () = Lwt_io.printlf "team = %s" (match React.S.value (team krobot) with Team_red -> "red" | Team_green -> "green") in + lwt () = Lwt_io.printlf "jack = %s" (match React.S.value (jack krobot) with true -> "present" | false -> "absent") in + return () hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-01-30 19:03:10
|
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 48ea6eff525ebbd96d2fa14de78f5bff22c6b782 (commit) from 182605606955fdaa815cce416d69a3780ffd9280 (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 48ea6eff525ebbd96d2fa14de78f5bff22c6b782 Author: Jérémie Dimino <je...@di...> Date: Sat Jan 30 20:02:30 2010 +0100 allow to use the Debug log level ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/driver/src/driver.ml b/PC_Mainboard/driver/src/driver.ml index 7b5b7ff..1ebef34 100644 --- a/PC_Mainboard/driver/src/driver.ml +++ b/PC_Mainboard/driver/src/driver.ml @@ -444,7 +444,7 @@ end lwt () = (* Be verbose: *) - Lwt_log.set_level !Lwt_log.default Lwt_log.Info; + Lwt_log.set_level !Lwt_log.default (min Lwt_log.Info Lwt_log.default_level); lwt bus = Lazy.force OBus_bus.system in @@ -471,7 +471,10 @@ lwt () = else begin Log#info "starting krobot driver in daemon mode"; (* In daemon mode, send messages to syslog: *) - Lwt_log.default := Lwt_log.syslog ~level:Lwt_log.Info ~facility:`Daemon (); + Lwt_log.default := Lwt_log.syslog + ~level:(min Lwt_log.Info Lwt_log.default_level) + ~facility:`Daemon + (); (* Become a daemon. Keep stderr for possible error messages of libusb. *) Lwt_unix.daemonize ~keep_stderr:true () hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-01-30 17:11:32
|
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 182605606955fdaa815cce416d69a3780ffd9280 (commit) via 320ef0c22a0792bfd3dc15aaf8eab9b0e63c82b4 (commit) via 9f50ac99d7c16555b36012b36868a1da631145ba (commit) from aa454675ff1f8c9a040ffbb6bf8d67edc1296e6f (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 182605606955fdaa815cce416d69a3780ffd9280 Author: Olivier BICHLER <oli...@gm...> Date: Sat Jan 30 18:10:39 2010 +0100 Ajout des cartes AX12 Interface et Robot Interface + plusieurs optimisations dans le design du bras pour la saisie des épis et le guidage des tomates commit 320ef0c22a0792bfd3dc15aaf8eab9b0e63c82b4 Merge: 9f50ac99d7c16555b36012b36868a1da631145ba aa454675ff1f8c9a040ffbb6bf8d67edc1296e6f Author: Olivier BICHLER <oli...@gm...> Date: Sat Jan 30 18:09:21 2010 +0100 Merge branch 'master' of ssh://krobot.git.sourceforge.net/gitroot/krobot/krobot commit 9f50ac99d7c16555b36012b36868a1da631145ba Author: Olivier BICHLER <oli...@gm...> Date: Sat Jan 30 11:48:16 2010 +0100 Suppression des fichiers de projet CodeBlocks, inutiles ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.cbp b/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.cbp deleted file mode 100644 index 7c3a101..0000000 --- a/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.cbp +++ /dev/null @@ -1,52 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> -<CodeBlocks_project_file> - <FileVersion major="1" minor="6" /> - <Project> - <Option title="USB_Com_Layer" /> - <Option pch_mode="2" /> - <Option compiler="gcc" /> - <Build> - <Target title="Release"> - <Option output="bin\Release\libUSB_Com_Layer" prefix_auto="1" extension_auto="1" /> - <Option object_output="obj\Release\" /> - <Option type="3" /> - <Option compiler="gcc" /> - <Option createDefFile="1" /> - <Option createStaticLib="1" /> - <Compiler> - <Add option="-O2" /> - <Add option="-Wmain" /> - <Add option="-W" /> - <Add option="-Wall" /> - <Add directory="..\..\..\..\Python26\include" /> - </Compiler> - <Linker> - <Add option="-s" /> - <Add library="..\..\..\..\MinGW\lib\libsetupapi.a" /> - <Add library="..\..\..\..\Python26\libs\libpython30.a" /> - </Linker> - </Target> - </Build> - <Compiler> - <Add option="-Wmain" /> - <Add option="-pedantic" /> - <Add option="-Wall" /> - </Compiler> - <Unit filename="src\msw\usb_com_layer.c"> - <Option compilerVar="CC" /> - </Unit> - <Unit filename="src\msw\usb_com_layer.h" /> - <Unit filename="src\unix\usb_com_layer.c"> - <Option compilerVar="CC" /> - </Unit> - <Unit filename="src\unix\usb_com_layer.h" /> - <Unit filename="src\usb_com_layer.h" /> - <Unit filename="src\usb_com_layer_wrap.c"> - <Option compilerVar="CC" /> - </Unit> - <Extensions> - <code_completion /> - <debugger /> - </Extensions> - </Project> -</CodeBlocks_project_file> diff --git a/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.depend b/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.depend deleted file mode 100644 index 780b04c..0000000 --- a/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.depend +++ /dev/null @@ -1,20 +0,0 @@ -# depslib dependency file v1.0 -1232119272 source:c:\krobot\pc_mainboard\apps\usb_com_layer\src\msw\usb_com_layer.c - "../usb_com_layer.h" - -1231185852 c:\krobot\pc_mainboard\apps\usb_com_layer\src\msw\usb_com_layer.h - <Windows.h> - <setupapi.h> - <stdio.h> - <ctype.h> - "../usb_com_layer.h" - -1232118435 c:\krobot\pc_mainboard\apps\usb_com_layer\src\usb_com_layer.h - "msw/usb_com_layer.h" - "linux/usb_com_layer.h" - -1231184058 c:\krobot\pc_mainboard\apps\usb_com_layer\src\generic_types.h - -1232119272 source:c:\krobot\pc_mainboard\apps\usb_com_layer\src\unix\usb_com_layer.c - "../usb_com_layer.h" - diff --git a/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.layout b/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.layout deleted file mode 100644 index 1e1bd6a..0000000 --- a/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.layout +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> -<CodeBlocks_layout_file> - <ActiveTarget name="Release" /> - <File name="src\msw\usb_com_layer.c" open="1" top="0" tabpos="3"> - <Cursor position="12790" topLine="0" /> - </File> - <File name="src\msw\usb_com_layer.h" open="1" top="0" tabpos="2"> - <Cursor position="592" topLine="0" /> - </File> - <File name="src\unix\usb_com_layer.c" open="1" top="0" tabpos="5"> - <Cursor position="388" topLine="0" /> - </File> - <File name="src\unix\usb_com_layer.h" open="1" top="0" tabpos="4"> - <Cursor position="486" topLine="0" /> - </File> - <File name="src\usb_com_layer.h" open="1" top="1" tabpos="1"> - <Cursor position="482" topLine="0" /> - </File> - <File name="src\usb_com_layer_wrap.c" open="0" top="0" tabpos="0"> - <Cursor position="82643" topLine="2825" /> - </File> -</CodeBlocks_layout_file> diff --git a/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.workspace b/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.workspace deleted file mode 100644 index fc2ef16..0000000 --- a/PC_Mainboard/dev/USB_Com_Layer/USB_Com_Layer.workspace +++ /dev/null @@ -1,6 +0,0 @@ -<?xml vers ion="1.0" encoding="UTF-8" standalone="yes" ?> -<CodeBlocks_workspace_file> - <Workspace title="Workspace"> - <Project filename="USB_Com_Layer.cbp" active="1" /> - </Workspace> -</CodeBlocks_workspace_file> diff --git a/meca/Antiblocant balles .CATPart b/meca/Antiblocant balles .CATPart new file mode 100644 index 0000000..3c1eb6c Binary files /dev/null and b/meca/Antiblocant balles .CATPart differ diff --git a/meca/Base assemblee.CATProduct b/meca/Base assemblee.CATProduct index fa7dbe6..5a4edb1 100644 Binary files a/meca/Base assemblee.CATProduct and b/meca/Base assemblee.CATProduct differ diff --git a/meca/Base.CATPart b/meca/Base.CATPart index c6434d6..8fd0706 100644 Binary files a/meca/Base.CATPart and b/meca/Base.CATPart differ diff --git a/meca/Bras tige 1.CATPart b/meca/Bras tige 1.CATPart index e698f37..a972c68 100644 Binary files a/meca/Bras tige 1.CATPart and b/meca/Bras tige 1.CATPart differ diff --git a/meca/Bras.CATProduct b/meca/Bras.CATProduct index 2cccf72..8f27b68 100644 Binary files a/meca/Bras.CATProduct and b/meca/Bras.CATProduct differ diff --git a/meca/Cartes/AX12 Interface.CATPart b/meca/Cartes/AX12 Interface.CATPart new file mode 100644 index 0000000..2a9da00 Binary files /dev/null and b/meca/Cartes/AX12 Interface.CATPart differ diff --git a/meca/Cartes/Robot Interface.CATPart b/meca/Cartes/Robot Interface.CATPart new file mode 100644 index 0000000..67bc81d Binary files /dev/null and b/meca/Cartes/Robot Interface.CATPart differ diff --git a/meca/Courroie.CATPart b/meca/Courroie.CATPart new file mode 100644 index 0000000..395aed5 Binary files /dev/null and b/meca/Courroie.CATPart differ diff --git a/meca/Niveau 1 bac.CATPart b/meca/Niveau 1 bac.CATPart index 7552286..24edab8 100644 Binary files a/meca/Niveau 1 bac.CATPart and b/meca/Niveau 1 bac.CATPart differ diff --git a/meca/Niveau 1.CATPart b/meca/Niveau 1.CATPart index 523ce56..b05ed76 100644 Binary files a/meca/Niveau 1.CATPart and b/meca/Niveau 1.CATPart differ diff --git a/meca/Niveau 2.CATPart b/meca/Niveau 2.CATPart index 0e02941..4d4f932 100644 Binary files a/meca/Niveau 2.CATPart and b/meca/Niveau 2.CATPart differ diff --git a/meca/Support axe porte sym.CATPart b/meca/Support axe porte sym.CATPart index 11054eb..b8d51a1 100644 Binary files a/meca/Support axe porte sym.CATPart and b/meca/Support axe porte sym.CATPart differ diff --git a/meca/Support axe porte.CATPart b/meca/Support axe porte.CATPart index c6df0d3..7cb6f12 100644 Binary files a/meca/Support axe porte.CATPart and b/meca/Support axe porte.CATPart differ diff --git a/meca/Support bras.CATPart b/meca/Support bras.CATPart index 2073f45..98a6f4e 100644 Binary files a/meca/Support bras.CATPart and b/meca/Support bras.CATPart differ hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-01-30 17:01:36
|
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 aa454675ff1f8c9a040ffbb6bf8d67edc1296e6f (commit) from 4895e2f16c55d98053d1849d4ae9a7c7711b89d2 (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 aa454675ff1f8c9a040ffbb6bf8d67edc1296e6f Author: Jérémie Dimino <je...@di...> Date: Sat Jan 30 18:01:00 2010 +0100 do not open cards if we just want to kill the dirver ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/driver/src/driver.ml b/PC_Mainboard/driver/src/driver.ml index 2bcb781..7b5b7ff 100644 --- a/PC_Mainboard/driver/src/driver.ml +++ b/PC_Mainboard/driver/src/driver.ml @@ -12,6 +12,37 @@ open OBus_pervasives open Lwt +(* Kill a running driver *) +let kill bus = + OBus_connection.method_call bus + ~path:["fr"; "krobot"; "Manager"] + ~interface:"fr.krobot.Manager" + ~member:"Shutdown" + ~destination:"fr.krobot" + <:obus_func< unit >> + +(* +-----------------------------------------------------------------+ + | Command line options | + +-----------------------------------------------------------------+ *) + +let foreground = ref false +let kill_and_exit = ref false + +let () = + let args = [ + "-n", Arg.Set foreground, "do not daemonize"; + "-k", Arg.Set kill_and_exit, "kill any running driver and exit"; + ] in + let usage_msg = Printf.sprintf "Usage: %s [-n]\n\noptions are:" (Filename.basename (Sys.argv.(0))) in + Arg.parse args ignore usage_msg; + + if !kill_and_exit then + Lwt_main.run begin + lwt bus = Lazy.force OBus_bus.system in + lwt () = kill bus in + exit 0 + end + (* +-----------------------------------------------------------------+ | Cards | +-----------------------------------------------------------------+ *) @@ -397,6 +428,7 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Manager" end) OL_method Shutdown : unit = fun () -> + Log#info "exiting"; lwt bus = Lazy.force OBus_bus.system in lwt () = Card.close card_interface and () = Card.close card_sensor @@ -410,84 +442,58 @@ end | Entry point | +-----------------------------------------------------------------+ *) -(* Kill a running driver *) -let kill bus = - OBus_connection.method_call bus - ~path:["fr"; "krobot"; "Manager"] - ~interface:"fr.krobot.Manager" - ~member:"Shutdown" - ~destination:"fr.krobot" - <:obus_func< unit >> - lwt () = - (* Command line options *) - let foreground = ref false and kill_and_exit = ref false in - let args = [ - "-n", Arg.Set foreground, "do not daemonize"; - "-k", Arg.Set kill_and_exit, "kill any running driver and exit"; - ] in - let usage_msg = Printf.sprintf "Usage: %s [-n]\n\noptions are:" (Filename.basename (Sys.argv.(0))) in - Arg.parse args ignore usage_msg; - (* Be verbose: *) Lwt_log.set_level !Lwt_log.default Lwt_log.Info; lwt bus = Lazy.force OBus_bus.system in - if !kill_and_exit then - try_lwt - kill bus - with exn -> - return () + lwt () = OBus_bus.name_has_owner bus "fr.krobot" >>= function + | true -> + (* If a daemon is already running, kill it: *) + Log#info "killing the currently running driver"; + kill bus + | false -> + return () + in + + (* Request the bus name for the driver: *) + lwt () = OBus_bus.request_name bus "fr.krobot" >>= function + | `primary_owner -> + return () + | _ -> + fail (Failure "cannot obtain the name 'fr.krobot'") + in + if !foreground then + (* Running foreground, prints message on stderr: *) + Log#info "starting krobot driver in foreground mode" else begin - lwt () = OBus_bus.name_has_owner bus "fr.krobot" >>= function - | true -> - (* If a daemon is already running, kill it: *) - Log#info "killing the currently running driver"; - kill bus - | false -> - return () - in - - (* Request the bus name for the driver: *) - lwt () = OBus_bus.request_name bus "fr.krobot" >>= function - | `primary_owner -> - return () - | _ -> - fail (Failure "cannot obtain the name 'fr.krobot'") - in - - if !foreground then - (* Running foreground, prints message on stderr: *) - Log#info "starting krobot driver in foreground mode" - else begin - Log#info "starting krobot driver in daemon mode"; - (* In daemon mode, send messages to syslog: *) - Lwt_log.default := Lwt_log.syslog ~level:Lwt_log.Info ~facility:`Daemon (); - (* Become a daemon. Keep stderr for possible error messages of - libusb. *) - Lwt_unix.daemonize ~keep_stderr:true () - end; - - Log#info "creating and exporting objects"; - - (* Interface card *) - Compass.OBus.export bus (Compass.make card_interface ["fr"; "krobot"; "Devices"; "Compass"]); - AX12.OBus.export bus (AX12.make card_interface ["fr"; "krobot"; "Devices"; "AX12"]); - Elevator.OBus.export bus (Elevator.make card_interface ["fr"; "krobot"; "Devices"; "Elevator"]); - Grip.OBus.export bus (Grip.make card_interface ["fr"; "krobot"; "Devices"; "Grip"]); - - (* Sensor card *) - LogicSensors.OBus.export bus (LogicSensors.make card_sensor ["fr"; "krobot"; "Devices"; "LogicSensors"]); - RangeFinders.OBus.export bus (RangeFinders.make card_sensor ["fr"; "krobot"; "Devices"; "RangeFinders"]); - - (* Motor card *) - Motors.OBus.export bus (Motors.make card_motor ["fr"; "krobot"; "Devices"; "Motors"]); - - (* Internal objects *) - Manager.OBus.export bus (); - - Log#info "ready, waiting for requests"; - done_waiter - end + Log#info "starting krobot driver in daemon mode"; + (* In daemon mode, send messages to syslog: *) + Lwt_log.default := Lwt_log.syslog ~level:Lwt_log.Info ~facility:`Daemon (); + (* Become a daemon. Keep stderr for possible error messages of + libusb. *) + Lwt_unix.daemonize ~keep_stderr:true () + end; + + Log#info "creating and exporting objects"; + + (* Interface card *) + Compass.OBus.export bus (Compass.make card_interface ["fr"; "krobot"; "Devices"; "Compass"]); + AX12.OBus.export bus (AX12.make card_interface ["fr"; "krobot"; "Devices"; "AX12"]); + Elevator.OBus.export bus (Elevator.make card_interface ["fr"; "krobot"; "Devices"; "Elevator"]); + Grip.OBus.export bus (Grip.make card_interface ["fr"; "krobot"; "Devices"; "Grip"]); + + (* Sensor card *) + LogicSensors.OBus.export bus (LogicSensors.make card_sensor ["fr"; "krobot"; "Devices"; "LogicSensors"]); + RangeFinders.OBus.export bus (RangeFinders.make card_sensor ["fr"; "krobot"; "Devices"; "RangeFinders"]); + + (* Motor card *) + Motors.OBus.export bus (Motors.make card_motor ["fr"; "krobot"; "Devices"; "Motors"]); + + (* Internal objects *) + Manager.OBus.export bus (); + + Log#info "ready, waiting for requests"; + done_waiter hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-01-30 16:56:00
|
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 4895e2f16c55d98053d1849d4ae9a7c7711b89d2 (commit) via cc55bd7091ec232ff6fd2a5cfecf74ce08d894a5 (commit) from 5255dd22baf3b168c0761660b3dc61d99ec97188 (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 4895e2f16c55d98053d1849d4ae9a7c7711b89d2 Author: Jérémie Dimino <je...@di...> Date: Sat Jan 30 17:55:32 2010 +0100 allow to specify the host for lib-krobot commit cc55bd7091ec232ff6fd2a5cfecf74ce08d894a5 Author: Jérémie Dimino <je...@di...> Date: Sat Jan 30 17:49:11 2010 +0100 handle card accessibility in Card ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/lib-krobot/krobot.ml b/PC_Mainboard/clients/lib-krobot/krobot.ml index 3329f21..cde6b32 100644 --- a/PC_Mainboard/clients/lib-krobot/krobot.ml +++ b/PC_Mainboard/clients/lib-krobot/krobot.ml @@ -11,27 +11,34 @@ open OBus_pervasives open Lwt lwt bus = - match (try Sys.getenv "KROBOT" with Not_found -> ""), Unix.gethostname () with - | "local", _ | _, "mrp" -> - (* On the robot use the local connection *) - Lazy.force OBus_bus.system - | _ -> - (* Start remove connection if on another computer *) - try_lwt - let ssh = Lwt_process.open_process ("ssh", [|"ssh"; "-l"; "olivier"; "mrp.wifi.crans.org"; "/home/olivier/bin/forward_dbus.native"|]) in - let transport = - OBus_transport.make - ~send:(fun msg -> OBus_wire.write_message ssh#stdin msg) - ~recv:(fun () -> OBus_wire.read_message ssh#stdout) - ~shutdown:(fun () -> ssh#close >> return ()) - () - in - let connection = OBus_connection.of_transport transport in - lwt () = OBus_bus.register_connection connection in - return connection - with exn -> - Log#exn exn "failed to create remote transport"; - fail exn + let host = + try + Sys.getenv "KROBOT" + with Not_found -> + if Unix.gethostname () = "mrp" then + "localhost" + else + "mrp.wifi.crans.org" + in + if host = "localhost" then + Lazy.force OBus_bus.system + else begin + try_lwt + let ssh = Lwt_process.open_process ("ssh", [|"ssh"; "-l"; "olivier"; host; "/home/olivier/bin/forward_dbus.native"|]) in + let transport = + OBus_transport.make + ~send:(fun msg -> OBus_wire.write_message ssh#stdin msg) + ~recv:(fun () -> OBus_wire.read_message ssh#stdout) + ~shutdown:(fun () -> ssh#close >> return ()) + () + in + let connection = OBus_connection.of_transport transport in + lwt () = OBus_bus.register_connection connection in + return connection + with exn -> + Log#exn exn "failed to create remote transport"; + fail exn + end let driver = OBus_peer.make bus "fr.krobot" diff --git a/PC_Mainboard/driver/src/card.ml b/PC_Mainboard/driver/src/card.ml index c781e78..4c2500a 100644 --- a/PC_Mainboard/driver/src/card.ml +++ b/PC_Mainboard/driver/src/card.ml @@ -9,7 +9,9 @@ open Lwt -let fatal fmt = Printf.ksprintf (fun txt -> prerr_endline ("Fatal error: " ^ txt); exit 2) fmt +(* Log an error message and exit: *) +let fatal fmt = + Printf.ksprintf (fun txt -> Log#fatal "%s" txt; exit 2) fmt (* +-----------------------------------------------------------------+ | Messages | @@ -66,12 +68,17 @@ let forge_message msg = end (* +-----------------------------------------------------------------+ - | Connections | + | Definitions | +-----------------------------------------------------------------+ *) +exception Card_closed + module SerialMap = Map.Make(struct type t = serial let compare = compare end) -type t = { +type state = Running | Opening | Closed + +(* Type of a up and running card *) +type card = { mutable serial_pool : serial list; (* Pool de serial disponibles, comme il n'y a que 256 serial @@ -90,89 +97,209 @@ type t = { mutex : Lwt_mutex.t; (* Mutex pour envoyer des commandes, les cartes n'aiment pas les appels parallèles. *) +} + +type wrapper_state = + | Ws_running of card + | Ws_opening of unit Lwt.t + | Ws_closed + +type wrapper = { + mutable state : wrapper_state; + + public_state : state React.signal; + set_public_state : state -> unit; + (* The state that is returning to the user *) + + vendor_id : int; + product_id : int; + (* Informations needed to reopen the card when it crashes *) - mutable abort : bool; + name : string; } -let close k = - lwt _ = USB.release_interface k.handle 0 in - if k.kernel_active then USB.attach_kernel_driver k.handle 0; - USB.close k.handle; +type t = wrapper + +let name wrapper = wrapper.name + +(* Returns the public state of a wrapper *) +let state wrapper = wrapper.public_state + +(* Set the state of a wrapper *) +let set_state wrapper state = + wrapper.state <- state; + wrapper.set_public_state + (match state with + | Ws_running _ -> Running + | Ws_opening _ -> Opening + | Ws_closed -> Closed) + +(* +-----------------------------------------------------------------+ + | Opening, closing and dispatching | + +-----------------------------------------------------------------+ *) + +(* Return a running card, if possible. *) +let rec get_card wrapper = match wrapper.state with + | Ws_running card -> + return card + | Ws_opening waiter -> + lwt () = waiter in + get_card wrapper + | Ws_closed -> + fail Card_closed + +let close_card card = + lwt _ = USB.release_interface card.handle 0 in + if card.kernel_active then USB.attach_kernel_driver card.handle 0; + USB.close card.handle; return () -let rec dispatch k = +let close wrapper = match wrapper.state with + | Ws_running card -> + set_state wrapper Ws_closed; + close_card card + | Ws_opening waiter -> + set_state wrapper Ws_closed; + Lwt.cancel waiter; + return () + | Ws_closed -> + return () + +(* Retry continuously to open a card until it succeed: *) +let rec reopen_card wakener wrapper = + let rec loop is_first = + try_lwt + (* USB stuff *) + let handle = USB.open_device_with ~vendor_id:wrapper.vendor_id ~product_id:wrapper.product_id in + lwt () = USB.reset_device handle in + let kernel_active = USB.kernel_driver_active handle 0 in + if kernel_active then USB.detach_kernel_driver handle 0; + lwt () = USB.set_configuration handle 1 in + lwt () = USB.claim_interface handle 0 in + + Log#info "%s card opened" wrapper.name; + + let card = { + serial_pool = (let rec loop = function + | 256 -> [] + | n -> n :: loop (n + 1) + in + loop 1); + reply_waiters = SerialMap.empty; + handle = handle; + kernel_active = kernel_active; + mutex = Lwt_mutex.create (); + } in + set_state wrapper (Ws_running card); + ignore (dispatch card); + Lwt.wakeup wakener (); + return () + with exn -> + if is_first then Log#exn exn "failed to open %s card" wrapper.name; + lwt () = Lwt_unix.sleep Config.reopen_delay in + loop false + in + loop true + +(* Dispatch incomming messages *) +and dispatch card = let buffer = String.create 64 in - lwt len = USB.interrupt_recv ~handle:k.handle ~endpoint:1 buffer 0 64 in - if len <> 64 then - fatal "message de moins de 64 octets reçu!" - else begin - let msg = parse_message buffer in - if msg.command = Protocol.cmd_respond then begin - (* Réponse à un message *) - match try Some(SerialMap.find msg.host_serial k.reply_waiters) with Not_found -> None with - | Some (_, w) -> - k.reply_waiters <- SerialMap.remove msg.host_serial k.reply_waiters; - k.serial_pool <- k.serial_pool @ [msg.host_serial]; - Lwt.wakeup w msg.data - | None -> - () - end; - dispatch k - end + lwt len = USB.interrupt_recv ~handle:card.handle ~endpoint:1 buffer 0 64 in + if len <> 64 then fatal "read <> 64!"; + let msg = parse_message buffer in + if msg.command = Protocol.cmd_respond then begin + (* Réponse à un message *) + match try Some(SerialMap.find msg.host_serial card.reply_waiters) with Not_found -> None with + | Some (_, w) -> + card.reply_waiters <- SerialMap.remove msg.host_serial card.reply_waiters; + card.serial_pool <- card.serial_pool @ [msg.host_serial]; + Lwt.wakeup w msg.data + | None -> + () + end; + dispatch card -let open_card ~vendor_id ~product_id = - let handle = USB.open_device_with ~vendor_id ~product_id in - lwt _ = USB.reset_device handle in - let kernel_active = USB.kernel_driver_active handle 0 in - if kernel_active then USB.detach_kernel_driver handle 0; - lwt _ = USB.set_configuration handle 1 in - lwt _ = USB.claim_interface handle 0 in - let k = { serial_pool = (let rec loop = function - | 256 -> [] - | n -> n :: loop (n + 1) - in - loop 1); - reply_waiters = SerialMap.empty; - handle = handle; - kernel_active = kernel_active; - mutex = Lwt_mutex.create (); - abort = false } in - let _ = Lwt_sequence.add_l (fun _ -> close k) Lwt_main.exit_hooks in - ignore (dispatch k); - return k - -(* Envoie une commande et attend une réponse: *) -let send_request k command data = - if k.abort then fail (Failure "abort") else begin - let serial = match k.serial_pool with - | [] -> - fatal "plus aucun serial disponible!" - | s :: l -> - k.serial_pool <- l; - s - in - let (w1, w2) as w = Lwt.wait () in - k.reply_waiters <- SerialMap.add serial w k.reply_waiters; - let buffer = forge_message { host_serial = serial; - device_serial = 0; - command = command; - error = 0; - data = data } in - Lwt_mutex.with_lock k.mutex - (fun _ -> USB.interrupt_send ~handle:k.handle ~endpoint:1 buffer 0 64 >> w1) - end +let open_card ~name ~vendor_id ~product_id = + let waiter, wakener = Lwt.task () in + let state, set_state = React.S.create Opening in + let wrapper = { + state = Ws_opening waiter; + public_state = state; + set_public_state = set_state; + vendor_id = vendor_id; + product_id = product_id; + name = name; + } in + ignore (reopen_card wakener wrapper); + wrapper -(* Envoie une commande et attend une commande: *) -let send_command k command data = - if k.abort then fail (Failure "abort") else begin - let buffer = forge_message { host_serial = 0; - device_serial = 0; - command = command; - error = 0; - data = data } in - lwt _ = USB.interrupt_send ~handle:k.handle ~endpoint:1 buffer 0 64 in - return () - end +(* Close and reopen a card: *) +let restart wrapper = + Log#info "restarting %s card" wrapper.name; + match wrapper.state with + | Ws_opening _ | Ws_closed -> + return () + | Ws_running card -> + let waiter, wakener = Lwt.task () in + set_state wrapper (Ws_opening waiter); + lwt () = + (* Try to close the card before reopening it: *) + try_lwt + close_card card + with exn -> + Log#exn exn "cannot close %s card" wrapper.name; + return () + in + ignore (reopen_card wakener wrapper); + return () + +(* +-----------------------------------------------------------------+ + | Sending/receiving messages | + +-----------------------------------------------------------------+ *) + +(* Send a command and wait for the response: *) +let rec send_request wrapper command data = + lwt card = get_card wrapper in + let serial = match card.serial_pool with + | [] -> + fatal "no more serial available!" + | s :: l -> + card.serial_pool <- l; + s + in + let (waiter, wakener) as w = Lwt.wait () in + card.reply_waiters <- SerialMap.add serial w card.reply_waiters; + let buffer = forge_message { host_serial = serial; + device_serial = 0; + command = command; + error = 0; + data = data } in + try_lwt + Lwt_mutex.with_lock card.mutex + (fun () -> + lwt len = USB.interrupt_send ~handle:card.handle ~endpoint:1 buffer 0 64 in + if len <> 64 then fatal "write <> 64!"; + waiter) + with exn -> + Log#exn exn "write to %s card failed" wrapper.name; + lwt () = restart wrapper in + send_request wrapper command data +(* Send a command without waiting for the reply: *) +let rec send_command wrapper command data = + lwt card = get_card wrapper in + let buffer = forge_message { host_serial = 0; + device_serial = 0; + command = command; + error = 0; + data = data } in + try_lwt + lwt len = USB.interrupt_send ~handle:card.handle ~endpoint:1 buffer 0 64 in + if len <> 64 then fatal "write <> 64!"; + return () + with exn -> + Log#exn exn "write to %s card failed" wrapper.name; + lwt () = restart wrapper in + send_command wrapper command data let connect card command = failwith "not implemented" diff --git a/PC_Mainboard/driver/src/card.mli b/PC_Mainboard/driver/src/card.mli index 058d664..0e64417 100644 --- a/PC_Mainboard/driver/src/card.mli +++ b/PC_Mainboard/driver/src/card.mli @@ -10,12 +10,38 @@ (** Lowlevel card interfaces *) type t - (** Type of an opened card *) + (** Type of a card *) -val open_card : vendor_id : int -> product_id : int -> t Lwt.t - (** Opten the card with given product-id and vendor-id *) +(** {6 Card state} *) + +(** State of a card: *) +type state = + | Running + (** The card is up and running *) + | Opening + (** The card is being opened *) + | Closed + (** The card has been closed *) + +val state : t -> state React.signal + (** [state card] is the state of a card, as a reactive value *) + +val name : t -> string + (** Returns the name of a card *) + +(** {6 Card opening/closing} *) + +val open_card : name : string -> vendor_id : int -> product_id : int -> t + (** Opten the card with given product-id and vendor-id. [name] is + used for debug messages. *) val close : t -> unit Lwt.t + (** Close the given card *) + +exception Card_closed + (** Exception raised when trying to use a closed card *) + +(** {6 Sending/receving messages} *) val make_buffer : unit -> string (** Creates a new buffer for serialization (with the right size) *) diff --git a/PC_Mainboard/driver/src/config.ml b/PC_Mainboard/driver/src/config.ml index e1ee58f..4d5953a 100644 --- a/PC_Mainboard/driver/src/config.ml +++ b/PC_Mainboard/driver/src/config.ml @@ -8,3 +8,4 @@ *) let update_delay = 0.05 +let reopen_delay = 1.0 diff --git a/PC_Mainboard/driver/src/config.mli b/PC_Mainboard/driver/src/config.mli index 08c5861..614cd16 100644 --- a/PC_Mainboard/driver/src/config.mli +++ b/PC_Mainboard/driver/src/config.mli @@ -10,3 +10,5 @@ val update_delay : float (** Time to wait between updates *) +val reopen_delay : float + (** Time to wait before retrying to open a card *) diff --git a/PC_Mainboard/driver/src/driver.ml b/PC_Mainboard/driver/src/driver.ml index 3d67efd..2bcb781 100644 --- a/PC_Mainboard/driver/src/driver.ml +++ b/PC_Mainboard/driver/src/driver.ml @@ -16,9 +16,38 @@ open Lwt | Cards | +-----------------------------------------------------------------+ *) -let card_interface = ref None -let card_sensor = ref None -let card_motor = ref None +let card_interface = Card.open_card ~name:"interface" ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_robot_interface +let card_sensor = Card.open_card ~name:"sensor" ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_proximity_sensor +let card_motor = Card.open_card ~name:"motor" ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_motor_controller + +(* Enable a motor *) +let motor_enable card = + Log#info "enabling motors on %s card" (Card.name card); + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.motor_enable; + RW.set_uint8 data 1 Protocol.motor_both; + Card.send_command card Protocol.cmd_motor data + +(* Enable motors when a card comes up *) +let enable_motor_on_running card = + let stop = ref ignore in + let notifier = + Lwt_signal.notify_p + (function + | Card.Running -> + motor_enable card + | Card.Opening -> + return () + | Card.Closed -> + !stop (); + return ()) + (Card.state card) + in + stop := (fun () -> Lwt_signal.disable notifier) + +let () = + enable_motor_on_running card_interface; + enable_motor_on_running card_motor (* +-----------------------------------------------------------------+ | Compass | @@ -28,7 +57,7 @@ module Compass = struct type t = { obus : OBus_object.t; - card : Card.t option ref; + card : Card.t; mutable data : int; } @@ -43,12 +72,8 @@ struct OL_method Get : int = fun dev -> return dev.data let get card = - match !card with - | Some card -> - lwt data = Card.send_request card Protocol.get_cmp03_data "" in - return (RW.get_int16 data 2) - | None -> - return 0 + lwt data = Card.send_request card Protocol.get_cmp03_data "" in + return (RW.get_int16 data 2) let rec loop dev = lwt data = get dev.card in @@ -62,14 +87,13 @@ struct loop dev let make card path = - lwt data = get card in let dev = { obus = OBus_object.make path; card = card; - data = data; + data = 0; } in ignore (loop dev); - return dev + dev end (* +-----------------------------------------------------------------+ @@ -80,7 +104,7 @@ module AX12 = struct type t = { obus : OBus_object.t; - card : Card.t option ref; + card : Card.t; } module OBus = OBus_object.Make(struct @@ -91,17 +115,13 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Device.AX12" end) let ax12_goto card id pos speed = - match !card with - | Some card -> - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.ax12_goto; - RW.set_uint8 data 1 id; - RW.set_uint16 data 2 pos; - RW.set_uint16 data 4 speed; - lwt _ = Card.send_request card Protocol.cmd_ax12 data in - return () - | None -> - return () + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.ax12_goto; + RW.set_uint8 data 1 id; + RW.set_uint16 data 2 pos; + RW.set_uint16 data 4 speed; + lwt _ = Card.send_request card Protocol.cmd_ax12 data in + return () OL_method OpenClaw : unit = fun dev -> ax12_goto dev.card 1 1023 0 @@ -115,11 +135,10 @@ struct OL_method CloseCylinder : unit = fun dev -> ax12_goto dev.card 2 579 0 - let make card path = - return { - obus = OBus_object.make path; - card = card; - } + let make card path = { + obus = OBus_object.make path; + card = card; + } end (* +-----------------------------------------------------------------+ @@ -130,7 +149,7 @@ module Elevator = struct type t = { obus : OBus_object.t; - card : Card.t option ref; + card : Card.t; } module OBus = OBus_object.Make(struct @@ -141,17 +160,13 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Device.Elevator" end) let motor_move card sens speed duration = - match !card with - | Some card -> - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.motor_move; - RW.set_uint8 data 1 Protocol.motor_right; - RW.set_uint8 data 2 (if sens < 0 then 200 else sens); - RW.set_uint8 data 3 (if speed < 0 then 2000 else speed); - RW.set_uint32 data 4 duration; - Card.send_command card Protocol.cmd_motor data - | None -> - return () + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.motor_move; + RW.set_uint8 data 1 Protocol.motor_right; + RW.set_uint8 data 2 (if sens < 0 then 200 else sens); + RW.set_uint8 data 3 (if speed < 0 then 2000 else speed); + RW.set_uint32 data 4 duration; + Card.send_command card Protocol.cmd_motor data OL_method ElevatorUp : int -> int -> unit = fun dev speed delay -> motor_move dev.card 0 speed delay @@ -159,11 +174,10 @@ struct OL_method ElevatorDown : int -> int -> unit = fun dev speed delay -> motor_move dev.card 1 speed delay - let make card path = - return { - obus = OBus_object.make path; - card = card; - } + let make card path = { + obus = OBus_object.make path; + card = card; + } end (* +-----------------------------------------------------------------+ @@ -174,7 +188,7 @@ module Grip = struct type t = { obus : OBus_object.t; - card : Card.t option ref; + card : Card.t; } module OBus = OBus_object.Make(struct @@ -186,15 +200,11 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Device.Grip" end) let set_servo_state card angles = - match !card with - | Some card -> - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.set_servo_state; - RW.set_uint8 data 1 (List.fold_left (fun acc (s, _) -> acc lor (1 lsl s)) 0 angles); - List.iter (fun (s, a) -> RW.set_uint8 data (2 + s) a) angles; - Card.send_command card Protocol.cmd_set data - | None -> - return () + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.set_servo_state; + RW.set_uint8 data 1 (List.fold_left (fun acc (s, _) -> acc lor (1 lsl s)) 0 angles); + List.iter (fun (s, a) -> RW.set_uint8 data (2 + s) a) angles; + Card.send_command card Protocol.cmd_set data let left = 1 let right = 2 @@ -209,11 +219,10 @@ struct lwt () = Lwt_unix.sleep 0.2 in set_servo_state dev.card [(left, 50)] - let make card path = - return { - obus = OBus_object.make path; - card = card; - } + let make card path = { + obus = OBus_object.make path; + card = card; + } end (* +-----------------------------------------------------------------+ @@ -224,7 +233,7 @@ module LogicSensors = struct type t = { obus : OBus_object.t; - card : Card.t option ref; + card : Card.t; mutable data : bool array; } @@ -239,15 +248,11 @@ struct OL_method Get : bool array = fun dev -> return dev.data let get card = - match !card with - | Some card -> - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.get_tor_state; - lwt data = Card.send_request card Protocol.cmd_get data in - let x = RW.get_uint16 data 0 in - return (Array.init 16 (fun i -> x land (1 lsl i) <> 0)) - | None -> - return (Array.make 16 false) + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.get_tor_state; + lwt data = Card.send_request card Protocol.cmd_get data in + let x = RW.get_uint16 data 0 in + return (Array.init 16 (fun i -> x land (1 lsl i) <> 0)) let rec loop dev = lwt data = get dev.card in @@ -261,14 +266,13 @@ struct loop dev let make card path = - lwt data = get card in let dev = { obus = OBus_object.make path; card = card; - data = data; + data = Array.create 16 false; } in ignore (loop dev); - return dev + dev end (* +-----------------------------------------------------------------+ @@ -279,7 +283,7 @@ module RangeFinders = struct type t = { obus : OBus_object.t; - card : Card.t option ref; + card : Card.t; mutable data : int array; } @@ -294,14 +298,10 @@ struct OL_method Get : int array = fun dev -> return dev.data let get card = - match !card with - | Some card -> - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.get_rangefinder_state; - lwt data = Card.send_request card Protocol.cmd_get data in - return (Array.init 8 (fun i -> RW.get_int32 data (i * 4))) - | None -> - return (Array.create 8 0) + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.get_rangefinder_state; + lwt data = Card.send_request card Protocol.cmd_get data in + return (Array.init 8 (fun i -> RW.get_int32 data (i * 4))) let rec loop dev = lwt data = get dev.card in @@ -315,14 +315,13 @@ struct loop dev let make card path = - lwt data = get card in let dev = { obus = OBus_object.make path; card = card; - data = data; + data = Array.create 8 0; } in ignore (loop dev); - return dev + dev end open OBus_pervasives @@ -336,7 +335,7 @@ module Motors = struct type t = { obus : OBus_object.t; - card : Card.t option ref; + card : Card.t; } module OBus = OBus_object.Make(struct @@ -347,16 +346,12 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Device.Motors" end) let move cmd card arg1 arg2 arg3 = - match !card with - | Some card -> - let data = String.create 7 in - RW.set_uint8 data 0 cmd; - RW.set_int16 data 1 arg1; - RW.set_int16 data 3 arg2; - RW.set_int16 data 5 arg3; - Card.send_command card Protocol.cmd_traj data - | None -> - return () + let data = String.create 7 in + RW.set_uint8 data 0 cmd; + RW.set_int16 data 1 arg1; + RW.set_int16 data 3 arg2; + RW.set_int16 data 5 arg3; + Card.send_command card Protocol.cmd_traj data let move_forward = move Protocol.traj_forward let move_backward = move Protocol.traj_backward @@ -378,11 +373,10 @@ struct OL_method Turn : int -> int -> int -> unit OL_method Move : int -> int -> int -> unit - let make card path = - return { - obus = OBus_object.make path; - card = card; - } + let make card path = { + obus = OBus_object.make path; + card = card; + } end (* +-----------------------------------------------------------------+ @@ -402,17 +396,11 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Manager" end) - let close_card card = match !card with - | Some card -> - Card.close card - | None -> - return () - OL_method Shutdown : unit = fun () -> lwt bus = Lazy.force OBus_bus.system in - lwt () = close_card card_interface - and () = close_card card_sensor - and () = close_card card_motor + lwt () = Card.close card_interface + and () = Card.close card_sensor + and () = Card.close card_motor and _ = OBus_bus.release_name bus "fr.krobot" in Lwt.wakeup done_wakener (); return () @@ -422,26 +410,6 @@ end | Entry point | +-----------------------------------------------------------------+ *) -let motor_enable card = - match !card with - | Some card -> - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.motor_enable; - RW.set_uint8 data 1 Protocol.motor_both; - Card.send_command card Protocol.cmd_motor data - | None -> - return () - -let open_card store ~vendor_id ~product_id = - try_lwt - lwt card = Card.open_card ~vendor_id ~product_id in - store := Some card; - return () - with exn -> - Log#exn exn "failed to open card with vendor_id %04x and product_id %04x" vendor_id product_id; - store := None; - return () - (* Kill a running driver *) let kill bus = OBus_connection.method_call bus @@ -502,40 +470,24 @@ lwt () = Lwt_unix.daemonize ~keep_stderr:true () end; - Log#info "opening cards"; - lwt () = open_card card_interface ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_robot_interface - and () = open_card card_sensor ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_proximity_sensor - and () = open_card card_motor ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_motor_controller in - - Log#info "enabling motors"; - lwt () = motor_enable card_interface - and () = motor_enable card_motor in - - Log#info "creating objects"; + Log#info "creating and exporting objects"; (* Interface card *) - lwt compass = Compass.make card_interface [ "fr"; "krobot"; "Devices"; "Compass" ] - and ax12 = AX12.make card_interface [ "fr"; "krobot"; "Devices"; "AX12" ] - and elevator = Elevator.make card_interface [ "fr"; "krobot"; "Devices"; "Elevator" ] - and grip = Grip.make card_interface [ "fr"; "krobot"; "Devices"; "Grip" ] + Compass.OBus.export bus (Compass.make card_interface ["fr"; "krobot"; "Devices"; "Compass"]); + AX12.OBus.export bus (AX12.make card_interface ["fr"; "krobot"; "Devices"; "AX12"]); + Elevator.OBus.export bus (Elevator.make card_interface ["fr"; "krobot"; "Devices"; "Elevator"]); + Grip.OBus.export bus (Grip.make card_interface ["fr"; "krobot"; "Devices"; "Grip"]); (* Sensor card *) - and logic_sensors = LogicSensors.make card_sensor [ "fr"; "krobot"; "Devices"; "LogicSensors" ] - and range_finders = RangeFinders.make card_sensor [ "fr"; "krobot"; "Devices"; "RangeFinders" ] + LogicSensors.OBus.export bus (LogicSensors.make card_sensor ["fr"; "krobot"; "Devices"; "LogicSensors"]); + RangeFinders.OBus.export bus (RangeFinders.make card_sensor ["fr"; "krobot"; "Devices"; "RangeFinders"]); (* Motor card *) - and motors = Motors.make card_motor [ "fr"; "krobot"; "Devices"; "Motors" ] in - - Log#info "exporting objects"; - Compass.OBus.export bus compass; - AX12.OBus.export bus ax12; - Elevator.OBus.export bus elevator; - Grip.OBus.export bus grip; - LogicSensors.OBus.export bus logic_sensors; - RangeFinders.OBus.export bus range_finders; - Motors.OBus.export bus motors; + Motors.OBus.export bus (Motors.make card_motor ["fr"; "krobot"; "Devices"; "Motors"]); + (* Internal objects *) Manager.OBus.export bus (); + Log#info "ready, waiting for requests"; done_waiter end hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-01-30 14:24:14
|
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 5255dd22baf3b168c0761660b3dc61d99ec97188 (commit) from 4f75b2c0e65d4101d9064485f687ac32ee4495f2 (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 5255dd22baf3b168c0761660b3dc61d99ec97188 Author: Jérémie Dimino <je...@di...> Date: Sat Jan 30 15:23:42 2010 +0100 release the name in shutdown ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/driver/src/driver.ml b/PC_Mainboard/driver/src/driver.ml index 382fc57..3d67efd 100644 --- a/PC_Mainboard/driver/src/driver.ml +++ b/PC_Mainboard/driver/src/driver.ml @@ -409,9 +409,11 @@ struct return () OL_method Shutdown : unit = fun () -> + lwt bus = Lazy.force OBus_bus.system in lwt () = close_card card_interface and () = close_card card_sensor - and () = close_card card_motor in + and () = close_card card_motor + and _ = OBus_bus.release_name bus "fr.krobot" in Lwt.wakeup done_wakener (); return () end @@ -494,7 +496,7 @@ lwt () = else begin Log#info "starting krobot driver in daemon mode"; (* In daemon mode, send messages to syslog: *) - Lwt_log.default := Lwt_log.syslog ~facility:`Daemon (); + Lwt_log.default := Lwt_log.syslog ~level:Lwt_log.Info ~facility:`Daemon (); (* Become a daemon. Keep stderr for possible error messages of libusb. *) Lwt_unix.daemonize ~keep_stderr:true () hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-01-29 21:46:59
|
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 4f75b2c0e65d4101d9064485f687ac32ee4495f2 (commit) from 50c027108ad86dc99649d4bb86741b422b48143d (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 4f75b2c0e65d4101d9064485f687ac32ee4495f2 Author: Jérémie Dimino <je...@di...> Date: Fri Jan 29 22:46:23 2010 +0100 handle cards opening failure ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/driver/src/config.mli b/PC_Mainboard/driver/src/config.mli index dda1d49..08c5861 100644 --- a/PC_Mainboard/driver/src/config.mli +++ b/PC_Mainboard/driver/src/config.mli @@ -9,3 +9,4 @@ val update_delay : float (** Time to wait between updates *) + diff --git a/PC_Mainboard/driver/src/driver.ml b/PC_Mainboard/driver/src/driver.ml index abc9593..382fc57 100644 --- a/PC_Mainboard/driver/src/driver.ml +++ b/PC_Mainboard/driver/src/driver.ml @@ -13,6 +13,14 @@ open OBus_pervasives open Lwt (* +-----------------------------------------------------------------+ + | Cards | + +-----------------------------------------------------------------+ *) + +let card_interface = ref None +let card_sensor = ref None +let card_motor = ref None + +(* +-----------------------------------------------------------------+ | Compass | +-----------------------------------------------------------------+ *) @@ -20,7 +28,7 @@ module Compass = struct type t = { obus : OBus_object.t; - card : Card.t; + card : Card.t option ref; mutable data : int; } @@ -35,8 +43,12 @@ struct OL_method Get : int = fun dev -> return dev.data let get card = - lwt data = Card.send_request card Protocol.get_cmp03_data "" in - return (RW.get_int16 data 2) + match !card with + | Some card -> + lwt data = Card.send_request card Protocol.get_cmp03_data "" in + return (RW.get_int16 data 2) + | None -> + return 0 let rec loop dev = lwt data = get dev.card in @@ -68,7 +80,7 @@ module AX12 = struct type t = { obus : OBus_object.t; - card : Card.t; + card : Card.t option ref; } module OBus = OBus_object.Make(struct @@ -79,13 +91,17 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Device.AX12" end) let ax12_goto card id pos speed = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.ax12_goto; - RW.set_uint8 data 1 id; - RW.set_uint16 data 2 pos; - RW.set_uint16 data 4 speed; - lwt _ = Card.send_request card Protocol.cmd_ax12 data in - return () + match !card with + | Some card -> + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.ax12_goto; + RW.set_uint8 data 1 id; + RW.set_uint16 data 2 pos; + RW.set_uint16 data 4 speed; + lwt _ = Card.send_request card Protocol.cmd_ax12 data in + return () + | None -> + return () OL_method OpenClaw : unit = fun dev -> ax12_goto dev.card 1 1023 0 @@ -114,7 +130,7 @@ module Elevator = struct type t = { obus : OBus_object.t; - card : Card.t; + card : Card.t option ref; } module OBus = OBus_object.Make(struct @@ -125,13 +141,17 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Device.Elevator" end) let motor_move card sens speed duration = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.motor_move; - RW.set_uint8 data 1 Protocol.motor_right; - RW.set_uint8 data 2 (if sens < 0 then 200 else sens); - RW.set_uint8 data 3 (if speed < 0 then 2000 else speed); - RW.set_uint32 data 4 duration; - Card.send_command card Protocol.cmd_motor data + match !card with + | Some card -> + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.motor_move; + RW.set_uint8 data 1 Protocol.motor_right; + RW.set_uint8 data 2 (if sens < 0 then 200 else sens); + RW.set_uint8 data 3 (if speed < 0 then 2000 else speed); + RW.set_uint32 data 4 duration; + Card.send_command card Protocol.cmd_motor data + | None -> + return () OL_method ElevatorUp : int -> int -> unit = fun dev speed delay -> motor_move dev.card 0 speed delay @@ -154,7 +174,7 @@ module Grip = struct type t = { obus : OBus_object.t; - card : Card.t; + card : Card.t option ref; } module OBus = OBus_object.Make(struct @@ -166,11 +186,15 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Device.Grip" end) let set_servo_state card angles = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.set_servo_state; - RW.set_uint8 data 1 (List.fold_left (fun acc (s, _) -> acc lor (1 lsl s)) 0 angles); - List.iter (fun (s, a) -> RW.set_uint8 data (2 + s) a) angles; - Card.send_command card Protocol.cmd_set data + match !card with + | Some card -> + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.set_servo_state; + RW.set_uint8 data 1 (List.fold_left (fun acc (s, _) -> acc lor (1 lsl s)) 0 angles); + List.iter (fun (s, a) -> RW.set_uint8 data (2 + s) a) angles; + Card.send_command card Protocol.cmd_set data + | None -> + return () let left = 1 let right = 2 @@ -200,7 +224,7 @@ module LogicSensors = struct type t = { obus : OBus_object.t; - card : Card.t; + card : Card.t option ref; mutable data : bool array; } @@ -215,11 +239,15 @@ struct OL_method Get : bool array = fun dev -> return dev.data let get card = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.get_tor_state; - lwt data = Card.send_request card Protocol.cmd_get data in - let x = RW.get_uint16 data 0 in - return (Array.init 16 (fun i -> x land (1 lsl i) <> 0)) + match !card with + | Some card -> + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.get_tor_state; + lwt data = Card.send_request card Protocol.cmd_get data in + let x = RW.get_uint16 data 0 in + return (Array.init 16 (fun i -> x land (1 lsl i) <> 0)) + | None -> + return (Array.make 16 false) let rec loop dev = lwt data = get dev.card in @@ -251,7 +279,7 @@ module RangeFinders = struct type t = { obus : OBus_object.t; - card : Card.t; + card : Card.t option ref; mutable data : int array; } @@ -266,10 +294,14 @@ struct OL_method Get : int array = fun dev -> return dev.data let get card = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.get_rangefinder_state; - lwt data = Card.send_request card Protocol.cmd_get data in - return (Array.init 8 (fun i -> RW.get_int32 data (i * 4))) + match !card with + | Some card -> + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.get_rangefinder_state; + lwt data = Card.send_request card Protocol.cmd_get data in + return (Array.init 8 (fun i -> RW.get_int32 data (i * 4))) + | None -> + return (Array.create 8 0) let rec loop dev = lwt data = get dev.card in @@ -304,7 +336,7 @@ module Motors = struct type t = { obus : OBus_object.t; - card : Card.t; + card : Card.t option ref; } module OBus = OBus_object.Make(struct @@ -315,12 +347,16 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Device.Motors" end) let move cmd card arg1 arg2 arg3 = - let data = String.create 7 in - RW.set_uint8 data 0 cmd; - RW.set_int16 data 1 arg1; - RW.set_int16 data 3 arg2; - RW.set_int16 data 5 arg3; - Card.send_command card Protocol.cmd_traj data + match !card with + | Some card -> + let data = String.create 7 in + RW.set_uint8 data 0 cmd; + RW.set_int16 data 1 arg1; + RW.set_int16 data 3 arg2; + RW.set_int16 data 5 arg3; + Card.send_command card Protocol.cmd_traj data + | None -> + return () let move_forward = move Protocol.traj_forward let move_backward = move Protocol.traj_backward @@ -353,6 +389,8 @@ end | Manager | +-----------------------------------------------------------------+ *) +let done_waiter, done_wakener = Lwt.wait () + module Manager = struct let manager = OBus_object.make ["fr"; "krobot"; "Manager"] @@ -364,7 +402,18 @@ struct include OBus.MakeInterface(struct let name = "fr.krobot.Manager" end) - OL_method shutdown : unit = fun () -> exit 0 + let close_card card = match !card with + | Some card -> + Card.close card + | None -> + return () + + OL_method Shutdown : unit = fun () -> + lwt () = close_card card_interface + and () = close_card card_sensor + and () = close_card card_motor in + Lwt.wakeup done_wakener (); + return () end (* +-----------------------------------------------------------------+ @@ -372,10 +421,24 @@ end +-----------------------------------------------------------------+ *) let motor_enable card = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.motor_enable; - RW.set_uint8 data 1 Protocol.motor_both; - Card.send_command card Protocol.cmd_motor data + match !card with + | Some card -> + let data = Card.make_buffer () in + RW.set_uint8 data 0 Protocol.motor_enable; + RW.set_uint8 data 1 Protocol.motor_both; + Card.send_command card Protocol.cmd_motor data + | None -> + return () + +let open_card store ~vendor_id ~product_id = + try_lwt + lwt card = Card.open_card ~vendor_id ~product_id in + store := Some card; + return () + with exn -> + Log#exn exn "failed to open card with vendor_id %04x and product_id %04x" vendor_id product_id; + store := None; + return () (* Kill a running driver *) let kill bus = @@ -438,9 +501,9 @@ lwt () = end; Log#info "opening cards"; - lwt card_interface = Card.open_card ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_robot_interface - and card_sensor = Card.open_card ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_proximity_sensor - and card_motor = Card.open_card ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_motor_controller in + lwt () = open_card card_interface ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_robot_interface + and () = open_card card_sensor ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_proximity_sensor + and () = open_card card_motor ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_motor_controller in Log#info "enabling motors"; lwt () = motor_enable card_interface @@ -472,5 +535,5 @@ lwt () = Manager.OBus.export bus (); - fst (Lwt.wait ()) + done_waiter end hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-01-29 21:20:44
|
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 50c027108ad86dc99649d4bb86741b422b48143d (commit) from e0d4b08a4fc5530a34eac0d46d8f91be05d7f094 (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 50c027108ad86dc99649d4bb86741b422b48143d Author: Jérémie Dimino <je...@di...> Date: Fri Jan 29 22:20:13 2010 +0100 merge D-Bus drivers ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/lib-krobot/krobot.ml b/PC_Mainboard/clients/lib-krobot/krobot.ml index 6c77010..3329f21 100644 --- a/PC_Mainboard/clients/lib-krobot/krobot.ml +++ b/PC_Mainboard/clients/lib-krobot/krobot.ml @@ -33,6 +33,8 @@ lwt bus = Log#exn exn "failed to create remote transport"; fail exn +let driver = OBus_peer.make bus "fr.krobot" + (* +-----------------------------------------------------------------+ | Compass | +-----------------------------------------------------------------+ *) @@ -43,7 +45,7 @@ OP_signal Value : int OP_method Get : int lwt compass = - let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.Compass") [ "fr"; "krobot"; "Devices"; "Compass" ] in + let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "Compass" ] in lwt initial = get proxy in return (React.S.hold initial (value proxy)#event) @@ -52,7 +54,7 @@ lwt compass = +-----------------------------------------------------------------+ *) let op_method_call member typ = - let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.AX12") [ "fr"; "krobot"; "Devices"; "AX12" ] in + let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "AX12" ] in OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.AX12" ~member typ OP_method OpenClaw : unit -> unit @@ -65,7 +67,7 @@ OP_method CloseCylinder : unit -> unit +-----------------------------------------------------------------+ *) let op_method_call member typ = - let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.Elevator") [ "fr"; "krobot"; "Devices"; "Elevator" ] in + let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "Elevator" ] in OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.Elevator" ~member typ OP_method ElevatorUp : int -> int -> unit @@ -86,7 +88,7 @@ let elevator_down ?speed ?delay () = +-----------------------------------------------------------------+ *) let op_method_call member typ = - let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.Grip") [ "fr"; "krobot"; "Devices"; "Grip" ] in + let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "Grip" ] in OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.Grip" ~member typ OP_method OpenGrip : unit -> unit @@ -102,7 +104,7 @@ OP_signal Value : bool array OP_method Get : bool array lwt logic_sensors = - let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.LogicSensors") [ "fr"; "krobot"; "Devices"; "LogicSensors" ] in + let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "LogicSensors" ] in lwt initial = get proxy in return (React.S.hold initial (value proxy)#event) @@ -124,7 +126,7 @@ OP_signal Value : int array OP_method Get : int array lwt range_finders = - let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.RangeFinders") [ "fr"; "krobot"; "Devices"; "RangeFinders" ] in + let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "RangeFinders" ] in lwt initial = get proxy in return (React.S.hold initial (value proxy)#event) @@ -133,7 +135,7 @@ lwt range_finders = +-----------------------------------------------------------------+ *) let op_method_call member typ = - let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.Motors") [ "fr"; "krobot"; "Devices"; "Motors" ] in + let proxy = OBus_proxy.make driver [ "fr"; "krobot"; "Devices"; "Motors" ] in OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.Motors" ~member typ OP_method Turn : int -> int -> int -> unit diff --git a/PC_Mainboard/daemons/Makefile b/PC_Mainboard/daemons/Makefile deleted file mode 100644 index 5120c74..0000000 --- a/PC_Mainboard/daemons/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -# Makefile -# -------- -# Copyright : (c) 2009, Jeremie Dimino <je...@di...> -# Licence : BSD3 -# -# This file is a part of [kro]bot. - -PREFIX=/usr/local - -OC = ocamlbuild -OF = ocamlfind - -ifeq ($(TERM),dumb) -OC += -classic-display -endif - -.PHONY: all -all: - $(OC) all - -.PHONY: clean -clean: - $(OC) -clean - -.PHONY: install -install: - install -m0644 dbus-rules/fr.krobot.conf /etc/dbus-1/system.d/fr.krobot.conf - install _build/dbus-drivers/card_interface.native $(PREFIX)/bin/krobot-card-interface - install _build/dbus-drivers/card_sensor.native $(PREFIX)/bin/krobot-card-sensor - -.PHONY: uninstall -uninstall: - rm -f /etc/dbus-1/system.d/fr.krobot.conf - rm -f $(PREFIX)/bin/krobot-card-interface - rm -f $(PREFIX)/bin/krobot-card-sensor diff --git a/PC_Mainboard/daemons/PcInterface.h b/PC_Mainboard/daemons/PcInterface.h deleted file mode 100644 index 6928d8e..0000000 --- a/PC_Mainboard/daemons/PcInterface.h +++ /dev/null @@ -1,208 +0,0 @@ -/** - * @file PcInterface.h - * Fichier commun avec le programme hsur la carte m (USB PC). - * Ce fichier dnit de nombreuses constantes utilis pour le protocole - * de communication carte <-> PC. -*/ - -#ifndef PC_INTERFACE_H -#define PC_INTERFACE_H - -#define USB_VID 0x04D8 ///< Vendor ID commun aux diffntes cartes USB -#define USB_PID_USB_DEV_BOARD 0x0001 ///< Product ID de la Carte d'essais -#define USB_PID_PROXIMITY_SENSOR 0x0002 ///< Product ID de la Carte capteurs -#define USB_PID_MOTOR_CONTROLLER 0x0003 ///< Product ID de la Carte d'asservissement -#define USB_PID_ROBOT_INTERFACE 0x0004 ///< Product ID de la Carte d'actionneur -#define USB_PID_BATTERY_MONITORING 0x0005 ///< Product ID de la carte Battery Monitoring -#define USB_PID_BOOTLOADER 0x000b ///< Product ID d'une carte en mode bootloader - -// Protocole USB -#define UP_HSEQ 0 ///< Host sequence number -#define UP_DSEQ 1 ///< Device sequence number -#define UP_CMD 2 -#define UP_ERR 3 -#define UP_RES0 4 -#define UP_RES1 5 -#define UP_RES2 6 -#define UP_RES3 7 -#define UP_RES4 60 -#define UP_RES5 61 -#define UP_RES6 62 -#define UP_RES7 63 -#define UP_DATA 8 - -// Commande (premier bit) -#define CMD_RESET 0 ///< Reset du PIC -#define CMD_BOOTLOADER 1 ///< Reset du PIC en mode bootloader -#define CMD_GET 2 ///< Obtenir une information -#define CMD_RESPOND 3 ///< Rnse ne commande -#define CMD_ERR 4 ///< Envoyer une erreur -#define CMD_SEND 5 ///< Envoyer du texte -#define CMD_SET 6 ///< Dnir l't d'un parame -#define CMD_TEST 7 ///< Commande grique pour dencher une action de test -#define CMD_CALIBRATE 8 ///< Lance la calibration d'un tme [Carte capteurs] -#define CMD_AX12 9 -#define CMD_TRAJ 10 ///< Transmet une trajetoire au Krobot -#define CMD_MOTOR 11 ///< Gestion des moteurs -#define CMD_MOTOR_TOR 12 - -// CMD_GET arguments -#define GET_RESET_SOURCE 0 ///< Demande au PIC la source du Reset -#define GET_BOARD_INFO 1 ///< Demande au PIC le nom de la carte et l'auteur -#define GET_FIRMWARE_BUILD 2 ///< Demande au PIC la date et l'heure de compilation du firmware -#define GET_PORTS_CONFIG 3 ///< Demande la config TRIS des ports du PIC -#define GET_PORTS_STATE 4 ///< Demande l't des ports du PIC -#define GET_RANGEFINDER_STATE 5 ///< Demande au PIC les mesures des tmes [Carte capteurs] -#define GET_ISENS 6 ///< Demande au PIC les valeurs des courants moteurs mesur [Carte d'asservissement] -#define GET_CURRENT_POS 7 ///< Demande au PIC les positions actuelles des moteurs [Carte d'asservissement] -#define GET_RANGEFINDER_CALIBRATION 8 ///< Demande au PIC les valeurs de calibration des tmes [Carte capteurs] -#define GET_TOR_STATE 9 ///< Demande au PIC l't des capteurs de contact [Carte capteurs] -#define GET_CMP03_DATA 10 ///< Rp les infos du compas ctronique CMP03 -#define GET_CELL_VOLTAGE 11 ///< Tensions des cellules [Battery Monitoring] -#define GET_CURRENT 12 ///< Valeur instantandu courant dtar la batterie [Battery Monitoring] -#define GET_POWER_STATE 13 ///< Etat de l'alimentation de puissance (On/Off) [Battery Monitoring] -#define GET_BATTERY_STATE 14 ///< Etat des batteries (Pleine charge/Charge moyenne/Charge faible) [Battery Monitoring] - -// CMD_ERR arguments -#define ERR_UNKNOWN_CMD 1 ///< Commande inconnue -#define ERR_UNKNOWN_GET 2 ///< Demande inconnue -#define ERR_UNKNOWN_SET 3 ///< Demande inconnue -#define ERR_INVALID_RESPONSE 4 ///< Rnse invalide -#define ERR_AX12_WRONG_PACKET 5 -#define ERR_AX12_ERROR 6 -#define ERR_AX12_CHKSUM 7 -#define ERR_CMP03_NOT_RESPONDING 8 -#define ERR_ADJD_S371_NOT_RESPONDING 9 - -// CMD_SET arguments -#define SET_PORTS_CONFIG_INPUTS 0x00 ///< Dnir les entr du PIC -#define SET_PORTS_CONFIG_OUTPUTS 0x01 ///< Dnir les sorties du PIC -#define SET_PORTS_STATE_LOW 0x02 ///< Dnir les sorties 't bas du PIC -#define SET_PORTS_STATE_HIGH 0x03 ///< Dnir les sorties 't haut du PIC -#define SET_SERVO_CONFIG 0x04 ///< Dnir la config des servomoteurs -#define SET_SERVO_STATE 0x05 ///< Dnir l't des servomoteurs - -// CMD_CALIBRATE arguments -#define CAL_START 0x00 -#define CAL_CONTINUE 0x01 -#define CAL_STOP 0x02 -#define CAL_ERROR 0x03 -#define CAL_DONE 0x04 -#define CAL_PLACE_INF 0x05 -#define CAL_PLACE_30 0x06 -#define CAL_PLACE_100 0x07 - -// GET_RESET_SOURCE reponse -#define RESET_SOURCE_POR 0x01 ///< Power-on Reset -#define RESET_SOURCE_RI 0x02 ///< RESET Instruction -#define RESET_SOURCE_BOR 0x03 ///< Brown-out Reset -#define RESET_SOURCE_WDT 0x04 ///< Watchdog Time-out Reset -#define RESET_SOURCE_STKFUL 0x05 ///< Stack Full Reset -#define RESET_SOURCE_STKUNF 0x06 ///< Stack Underflow Reset -#define RESET_SOURCE_MCLR 0x07 ///< Master Clear Reset - -// CMD_AX12 -#define AX12_PING 0x01 -#define AX12_READ 0x02 -#define AX12_WRITE 0x03 -#define AX12_GOTO 0x04 -#define AX12_GET_POS 0x05 -#define AX12_GET_SPEED 0x06 -#define AX12_GET_LOAD 0x07 -#define AX12_GET_STATS 0x08 -#define AX12_WRITE_REG 0x09 -#define AX12_ACTION 0x10 - -// CMD_TRAJ -#define TRAJ_INIT 0x00 -#define TRAJ_FORWARD 0x01 -#define TRAJ_BACKWARD 0x02 -#define TRAJ_TR 0x03 -#define TRAJ_TL 0x04 -#define TRAJ_GOTO 0x05 -#define TRAJ_FINISHED 0x06 -#define TRAJ_STOP 0x07 -#define TRAJ_NEW_POSITION 0x08 -#define TRAJ_NEW_VELOCITY 0x09 -#define TRAJ_CHANGE_VELOCITY 0x0A -#define TRAJ_CONFIG 0x0B -#define TRAJ_CONFIG_DEFAULT 0x0C -#define TRAJ_START 0x0D -#define TRAJ_GET_REL_POS 0x0E -#define TRAJ_READ_CONFIG 0x0F - -#define TRAJ_NOT_COMPLETED 0x00 -#define TRAJ_COMPLETED 0x01 - -#define TRAJ_STOP_MOTOR_OFF 256 -#define TRAJ_STOP_ABRUPT 512 -#define TRAJ_STOP_SMOOTH 1024 - -// CMD_MOTOR -#define MOTOR_ENABLE 1 -#define MOTOR_DISABLE 2 -#define MOTOR_MOVE 3 - -#define MOTOR_RIGHT 0 ///< Sction du moteur de droite (moteur 1) -#define MOTOR_LEFT 1 ///< Sction du moteur de gauche (moteur 2) -#define MOTOR_BOTH 2 ///< Sction des 2 moteurs simultannt - -// XXX omplr -#define READ_VERSION 0x00 -#define READ_FLASH 0x01 -#define WRITE_FLASH 0x02 -#define ERASE_FLASH 0x03 -#define READ_EEDATA 0x04 -#define WRITE_EEDATA 0x05 -#define READ_CONFIG 0x06 -#define WRITE_CONFIG 0x07 -#define UPDATE_LED 0x32 -#define RESET 0xFF - -#define FLASH_BOOT_START 0x00 -#define FLASH_BOOT_END 0x7FF -#define FLASH_VECTOR_START 0x800 -#define FLASH_VECTOR_END 0x829 -#define FLASH_PAGE_START 0x82A -#define FLASH_PAGE_END 0x7FFF - -#define PORTA_RA0 1 -#define PORTA_RA1 2 -#define PORTA_RA2 4 -#define PORTA_RA3 8 -#define PORTA_RA4 16 -#define PORTA_RA5 32 -#define PORTA_RA6 64 - -#define PORTB_RB0 1 -#define PORTB_RB1 2 -#define PORTB_RB2 4 -#define PORTB_RB3 8 -#define PORTB_RB4 16 -#define PORTB_RB5 32 -#define PORTB_RB6 64 -#define PORTB_RB7 128 - -#define PORTC_RC0 1 -#define PORTC_RC1 2 -#define PORTC_RC2 4 -#define PORTC_RC4 16 -#define PORTC_RC5 32 -#define PORTC_RC6 64 -#define PORTC_RC7 128 - -#define PORTD_RD0 1 -#define PORTD_RD1 2 -#define PORTD_RD2 4 -#define PORTD_RD3 8 -#define PORTD_RD4 16 -#define PORTD_RD5 32 -#define PORTD_RD6 64 -#define PORTD_RD7 128 - -#define PORTE_RE0 1 -#define PORTE_RE1 2 -#define PORTE_RE2 4 -#define PORTE_RE3 8 - -#endif // PC_INTERFACE_H diff --git a/PC_Mainboard/daemons/README b/PC_Mainboard/daemons/README deleted file mode 100644 index 6ad88cc..0000000 --- a/PC_Mainboard/daemons/README +++ /dev/null @@ -1,5 +0,0 @@ -* "usb" contains the lowlevel interface to cards - -* "dbus-drivers" contains programs doing the interfaces between - qlowlevel usb communication and high-level functions exported via - D-Bus diff --git a/PC_Mainboard/daemons/_tags b/PC_Mainboard/daemons/_tags deleted file mode 100644 index 24a3ec1..0000000 --- a/PC_Mainboard/daemons/_tags +++ /dev/null @@ -1,8 +0,0 @@ -# -*- conf -*- - -<**/*.ml>: syntax_camlp4o, pkg_camlp4 -<usb/**/*.ml>: pkg_lwt.syntax -<dbus-drivers/**/*.ml>: pkg_lwt.syntax, pkg_obus.syntax - -<usb/**/*>: thread, pkg_threads, pkg_usb -<dbus-drivers/**/*>: thread, pkg_threads, pkg_obus, pkg_usb diff --git a/PC_Mainboard/daemons/dbus-drivers/card_interface.ml b/PC_Mainboard/daemons/dbus-drivers/card_interface.ml deleted file mode 100644 index 8bf514e..0000000 --- a/PC_Mainboard/daemons/dbus-drivers/card_interface.ml +++ /dev/null @@ -1,233 +0,0 @@ -(* - * card_interface.ml - * ----------------- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -(* Driver for the interface card *) - -open OBus_pervasives -open Lwt - -(* +-----------------------------------------------------------------+ - | Compass | - +-----------------------------------------------------------------+ *) - -module Compass = -struct - type t = { - obus : OBus_object.t; - card : Card.t; - mutable data : int; - } - - module OBus = OBus_object.Make(struct - type obj = t - let get obj = obj.obus - end) - - include OBus.MakeInterface(struct let name = "fr.krobot.Device.Compass" end) - - OL_signal Value : int - OL_method Get : int = fun dev -> return dev.data - - let get card = - lwt data = Card.send_request card Protocol.get_cmp03_data "" in - return (RW.get_int16 data 2) - - let rec loop dev = - lwt data = get dev.card in - if data <> dev.data then begin - dev.data <- data; - lwt () = value dev data in - lwt () = Lwt_unix.sleep Config.update_delay in - loop dev - end else - lwt () = Lwt_unix.sleep Config.update_delay in - loop dev - - let make card path = - lwt data = get card in - let dev = { - obus = OBus_object.make path; - card = card; - data = data; - } in - ignore (loop dev); - return dev -end - -(* +-----------------------------------------------------------------+ - | AX12 | - +-----------------------------------------------------------------+ *) - -module AX12 = -struct - type t = { - obus : OBus_object.t; - card : Card.t; - } - - module OBus = OBus_object.Make(struct - type obj = t - let get obj = obj.obus - end) - - include OBus.MakeInterface(struct let name = "fr.krobot.Device.AX12" end) - - let ax12_goto card id pos speed = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.ax12_goto; - RW.set_uint8 data 1 id; - RW.set_uint16 data 2 pos; - RW.set_uint16 data 4 speed; - lwt _ = Card.send_request card Protocol.cmd_ax12 data in - return () - - OL_method OpenClaw : unit = fun dev -> - ax12_goto dev.card 1 1023 0 - - OL_method CloseClaw : unit = fun dev -> - ax12_goto dev.card 1 770 0 - - OL_method OpenCylinder : unit = fun dev -> - ax12_goto dev.card 2 154 0 - - OL_method CloseCylinder : unit = fun dev -> - ax12_goto dev.card 2 579 0 - - let make card path = - return { - obus = OBus_object.make path; - card = card; - } -end - -(* +-----------------------------------------------------------------+ - | Elevator | - +-----------------------------------------------------------------+ *) - -module Elevator = -struct - type t = { - obus : OBus_object.t; - card : Card.t; - } - - module OBus = OBus_object.Make(struct - type obj = t - let get obj = obj.obus - end) - - include OBus.MakeInterface(struct let name = "fr.krobot.Device.Elevator" end) - - let motor_move card sens speed duration = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.motor_move; - RW.set_uint8 data 1 Protocol.motor_right; - RW.set_uint8 data 2 (if sens < 0 then 200 else sens); - RW.set_uint8 data 3 (if speed < 0 then 2000 else speed); - RW.set_uint32 data 4 duration; - Card.send_command card Protocol.cmd_motor data - - OL_method ElevatorUp : int -> int -> unit = fun dev speed delay -> - motor_move dev.card 0 speed delay - - OL_method ElevatorDown : int -> int -> unit = fun dev speed delay -> - motor_move dev.card 1 speed delay - - let make card path = - return { - obus = OBus_object.make path; - card = card; - } -end - -(* +-----------------------------------------------------------------+ - | Grip | - +-----------------------------------------------------------------+ *) - -module Grip = -struct - type t = { - obus : OBus_object.t; - card : Card.t; - } - - module OBus = OBus_object.Make(struct - type obj = t - let get obj = obj.obus - end) - - - include OBus.MakeInterface(struct let name = "fr.krobot.Device.Grip" end) - - let set_servo_state card angles = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.set_servo_state; - RW.set_uint8 data 1 (List.fold_left (fun acc (s, _) -> acc lor (1 lsl s)) 0 angles); - List.iter (fun (s, a) -> RW.set_uint8 data (2 + s) a) angles; - Card.send_command card Protocol.cmd_set data - - let left = 1 - let right = 2 - - OL_method OpenGrip : unit = fun dev -> - lwt () = set_servo_state dev.card [(left, 45); (right, -5)] in - lwt () = Lwt_unix.sleep 0.5 in - set_servo_state dev.card [(left, 10); (right, 45)] - - OL_method CloseGrip : unit = fun dev -> - lwt () = set_servo_state dev.card [(right, -10)] in - lwt () = Lwt_unix.sleep 0.2 in - set_servo_state dev.card [(left, 50)] - - let make card path = - return { - obus = OBus_object.make path; - card = card; - } -end - -(* +-----------------------------------------------------------------+ - | Entry point | - +-----------------------------------------------------------------+ *) - -let motor_enable card = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.motor_enable; - RW.set_uint8 data 1 Protocol.motor_both; - Card.send_command card Protocol.cmd_motor data - -lwt () = - if not !Common.foreground then Lwt_unix.daemonize ~keep_stderr:true (); - - lwt card = Card.open_card ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_robot_interface - and bus = Lazy.force OBus_bus.system in - - lwt () = motor_enable card in - - lwt compass = Compass.make card [ "fr"; "krobot"; "Devices"; "Compass" ] - and ax12 = AX12.make card [ "fr"; "krobot"; "Devices"; "AX12" ] - and elevator = Elevator.make card [ "fr"; "krobot"; "Devices"; "Elevator" ] - and grip = Grip.make card [ "fr"; "krobot"; "Devices"; "Grip" ] in - - Compass.OBus.export bus compass; - AX12.OBus.export bus ax12; - Elevator.OBus.export bus elevator; - Grip.OBus.export bus grip; - - (* Request bus names: *) - lwt () = - Lwt_util.iter (fun name -> OBus_bus.request_name bus name >> return ()) [ - "fr.krobot.Device.Compass"; - "fr.krobot.Device.AX12"; - "fr.krobot.Device.Elevator"; - "fr.krobot.Device.Grip"; - ] - in - - fst (Lwt.wait ()) diff --git a/PC_Mainboard/daemons/dbus-drivers/card_motor.ml b/PC_Mainboard/daemons/dbus-drivers/card_motor.ml deleted file mode 100644 index 524db2c..0000000 --- a/PC_Mainboard/daemons/dbus-drivers/card_motor.ml +++ /dev/null @@ -1,97 +0,0 @@ -(* - * card_motor.ml - * ------------- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -(* Driver for the motor card *) - -open OBus_pervasives -open Lwt - -(* +-----------------------------------------------------------------+ - | Motors | - +-----------------------------------------------------------------+ *) - -module Motors = -struct - type t = { - obus : OBus_object.t; - card : Card.t; - } - - module OBus = OBus_object.Make(struct - type obj = t - let get obj = obj.obus - end) - - include OBus.MakeInterface(struct let name = "fr.krobot.Device.Motors" end) - - let move cmd card arg1 arg2 arg3 = - let data = String.create 7 in - RW.set_uint8 data 0 cmd; - RW.set_int16 data 1 arg1; - RW.set_int16 data 3 arg2; - RW.set_int16 data 5 arg3; - Card.send_command card Protocol.cmd_traj data - - let move_forward = move Protocol.traj_forward - let move_backward = move Protocol.traj_backward - let turn_right = move Protocol.traj_tr - let turn_left = move Protocol.traj_tl - - let turn dev angle speed acc = - if angle < 0 then - move Protocol.traj_tl dev.card (-angle) speed acc - else - move Protocol.traj_tr dev.card angle speed acc - - let move dev dist speed acc = - if dist < 0 then - move Protocol.traj_backward dev.card (-dist) speed acc - else - move Protocol.traj_forward dev.card dist speed acc - - OL_method Turn : int -> int -> int -> unit - OL_method Move : int -> int -> int -> unit - - let make card path = - return { - obus = OBus_object.make path; - card = card; - } -end - -(* +-----------------------------------------------------------------+ - | Entry point | - +-----------------------------------------------------------------+ *) - -let motor_enable card = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.motor_enable; - RW.set_uint8 data 1 Protocol.motor_both; - Card.send_command card Protocol.cmd_motor data - -lwt () = - if not !Common.foreground then Lwt_unix.daemonize ~keep_stderr:true (); - - lwt card = Card.open_card ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_motor_controller - and bus = Lazy.force OBus_bus.system in - - lwt () = motor_enable card in - - lwt motors = Motors.make card [ "fr"; "krobot"; "Devices"; "Motors" ] in - - Motors.OBus.export bus motors; - - (* Request bus names: *) - lwt () = - Lwt_util.iter (fun name -> OBus_bus.request_name bus name >> return ()) [ - "fr.krobot.Device.Motors"; - ] - in - - fst (Lwt.wait ()) diff --git a/PC_Mainboard/daemons/dbus-drivers/card_sensor.ml b/PC_Mainboard/daemons/dbus-drivers/card_sensor.ml deleted file mode 100644 index bca7626..0000000 --- a/PC_Mainboard/daemons/dbus-drivers/card_sensor.ml +++ /dev/null @@ -1,141 +0,0 @@ -(* - * card_sensor.ml - * -------------- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -(* Driver for the sensor card *) - -open OBus_pervasives -open Lwt - -(* +-----------------------------------------------------------------+ - | Logic sensors | - +-----------------------------------------------------------------+ *) - -module LogicSensors = -struct - type t = { - obus : OBus_object.t; - card : Card.t; - mutable data : bool array; - } - - module OBus = OBus_object.Make(struct - type obj = t - let get obj = obj.obus - end) - - include OBus.MakeInterface(struct let name = "fr.krobot.Device.LogicSensors" end) - - OL_signal Value : bool array - OL_method Get : bool array = fun dev -> return dev.data - - let get card = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.get_tor_state; - lwt data = Card.send_request card Protocol.cmd_get data in - let x = RW.get_uint16 data 0 in - return (Array.init 16 (fun i -> x land (1 lsl i) <> 0)) - - let rec loop dev = - lwt data = get dev.card in - if data <> dev.data then begin - dev.data <- data; - lwt () = value dev data in - lwt () = Lwt_unix.sleep Config.update_delay in - loop dev - end else - lwt () = Lwt_unix.sleep Config.update_delay in - loop dev - - let make card path = - lwt data = get card in - let dev = { - obus = OBus_object.make path; - card = card; - data = data; - } in - ignore (loop dev); - return dev -end - -(* +-----------------------------------------------------------------+ - | Range finders | - +-----------------------------------------------------------------+ *) - -module RangeFinders = -struct - type t = { - obus : OBus_object.t; - card : Card.t; - mutable data : int array; - } - - module OBus = OBus_object.Make(struct - type obj = t - let get obj = obj.obus - end) - - include OBus.MakeInterface(struct let name = "fr.krobot.Device.RangeFinders" end) - - OL_signal Value : int array - OL_method Get : int array = fun dev -> return dev.data - - let get card = - let data = Card.make_buffer () in - RW.set_uint8 data 0 Protocol.get_rangefinder_state; - lwt data = Card.send_request card Protocol.cmd_get data in - return (Array.init 8 (fun i -> RW.get_int32 data (i * 4))) - - let rec loop dev = - lwt data = get dev.card in - if data <> dev.data then begin - dev.data <- data; - lwt () = value dev data in - lwt () = Lwt_unix.sleep Config.update_delay in - loop dev - end else - lwt () = Lwt_unix.sleep Config.update_delay in - loop dev - - let make card path = - lwt data = get card in - let dev = { - obus = OBus_object.make path; - card = card; - data = data; - } in - ignore (loop dev); - return dev -end - -(* +-----------------------------------------------------------------+ - | Entry point | - +-----------------------------------------------------------------+ *) - -lwt () = - if not !Common.foreground then Lwt_unix.daemonize ~keep_stderr:true (); - - lwt card = Card.open_card ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_proximity_sensor - and bus = Lazy.force OBus_bus.system in - - (* Object exportation over the system bus *) - lwt logic_sensors = LogicSensors.make card [ "fr"; "krobot"; "Devices"; "LogicSensors" ] - and range_finders = RangeFinders.make card [ "fr"; "krobot"; "Devices"; "RangeFinders" ] in - - LogicSensors.OBus.export bus logic_sensors; - RangeFinders.OBus.export bus range_finders; - - (* Request bus names: *) - lwt () = - Lwt_util.iter (fun name -> OBus_bus.request_name bus name >> return ()) [ - "fr.krobot.Device.LogicSensors"; - "fr.krobot.Device.RangeFinders"; - ] - in - - fst (Lwt.wait ()) diff --git a/PC_Mainboard/daemons/dbus-drivers/common.ml b/PC_Mainboard/daemons/dbus-drivers/common.ml deleted file mode 100644 index df6ce0c..0000000 --- a/PC_Mainboard/daemons/dbus-drivers/common.ml +++ /dev/null @@ -1,19 +0,0 @@ -(* - * common.ml - * --------- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -let foreground = ref false - -let args = [ - "-n", Arg.Set foreground, "do not daemonize"; -] - -let usage_msg = Printf.sprintf "Usage: %s [-n]\n\noptions are:" (Filename.basename (Sys.argv.(0))) - -let () = - Arg.parse args ignore usage_msg diff --git a/PC_Mainboard/daemons/dbus-drivers/config.ml b/PC_Mainboard/daemons/dbus-drivers/config.ml deleted file mode 100644 index e1ee58f..0000000 --- a/PC_Mainboard/daemons/dbus-drivers/config.ml +++ /dev/null @@ -1,10 +0,0 @@ -(* - * config.ml - * --------- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -let update_delay = 0.05 diff --git a/PC_Mainboard/daemons/dbus-drivers/config.mli b/PC_Mainboard/daemons/dbus-drivers/config.mli deleted file mode 100644 index dda1d49..0000000 --- a/PC_Mainboard/daemons/dbus-drivers/config.mli +++ /dev/null @@ -1,11 +0,0 @@ -(* - * config.mli - * ---------- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -val update_delay : float - (** Time to wait between updates *) diff --git a/PC_Mainboard/daemons/dbus-drivers/fake.ml b/PC_Mainboard/daemons/dbus-drivers/fake.ml deleted file mode 100644 index 94981af..0000000 --- a/PC_Mainboard/daemons/dbus-drivers/fake.ml +++ /dev/null @@ -1,136 +0,0 @@ -(* - * fake.ml - * ------- - * Copyright : (c) 2010, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -(* A fake server that does nothing. FOr testing purpose.*) - -open OBus_pervasives -open Lwt - -module Id = struct - type obj = OBus_object.t - let get obj = obj -end - -(* +-----------------------------------------------------------------+ - | Compass | - +-----------------------------------------------------------------+ *) - -module Compass = -struct - module OBus = OBus_object.Make(Id) - include OBus.MakeInterface(struct let name = "fr.krobot.Device.Compass" end) - OL_signal Value : int - OL_method Get : int = fun _ -> return 0 -end - -(* +-----------------------------------------------------------------+ - | AX12 | - +-----------------------------------------------------------------+ *) - -module AX12 = -struct - module OBus = OBus_object.Make(Id) - include OBus.MakeInterface(struct let name = "fr.krobot.Device.AX12" end) - OL_method OpenClaw : unit = fun _ -> return () - OL_method CloseClaw : unit = fun _ -> return () - OL_method OpenCylinder : unit = fun _ -> return () - OL_method CloseCylinder : unit = fun _ -> return () -end - -(* +-----------------------------------------------------------------+ - | Elevator | - +-----------------------------------------------------------------+ *) - -module Elevator = -struct - module OBus = OBus_object.Make(Id) - include OBus.MakeInterface(struct let name = "fr.krobot.Device.Elevator" end) - OL_method ElevatorUp : int -> int -> unit = fun _ _ _ -> return () - OL_method ElevatorDown : int -> int -> unit = fun _ _ _ -> return () -end - -(* +-----------------------------------------------------------------+ - | Grip | - +-----------------------------------------------------------------+ *) - -module Grip = -struct - module OBus = OBus_object.Make(Id) - include OBus.MakeInterface(struct let name = "fr.krobot.Device.Grip" end) - OL_method OpenGrip : unit = fun _ -> return () - OL_method CloseGrip : unit = fun _ -> return () -end - -(* +-----------------------------------------------------------------+ - | Motors | - +-----------------------------------------------------------------+ *) - -module Motors = -struct - module OBus = OBus_object.Make(Id) - include OBus.MakeInterface(struct let name = "fr.krobot.Device.Motors" end) - OL_method Turn : int -> int -> int -> unit = fun _ _ _ _ -> return () - OL_method Move : int -> int -> int -> unit = fun _ _ _ _ -> return () -end - -(* +-----------------------------------------------------------------+ - | Logic sensors | - +-----------------------------------------------------------------+ *) - -module LogicSensors = -struct - module OBus = OBus_object.Make(Id) - include OBus.MakeInterface(struct let name = "fr.krobot.Device.LogicSensors" end) - OL_signal Value : bool array - OL_method Get : bool array = fun _ -> return (Array.create 16 false) -end - -(* +-----------------------------------------------------------------+ - | Range finders | - +-----------------------------------------------------------------+ *) - -module RangeFinders = -struct - module OBus = OBus_object.Make(Id) - include OBus.MakeInterface(struct let name = "fr.krobot.Device.RangeFinders" end) - OL_signal Value : int array - OL_method Get : int array = fun _ -> return (Array.create 8 0) -end - -(* +-----------------------------------------------------------------+ - | Entry point | - +-----------------------------------------------------------------+ *) - -lwt () = - if not !Common.foreground then Lwt_unix.daemonize ~keep_stderr:true (); - - lwt bus = Lazy.force OBus_bus.system in - - Compass.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "Compass" ]); - AX12.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "AX12" ]); - Elevator.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "Elevator" ]); - Grip.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "Grip" ]); - Motors.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "Motors" ]); - LogicSensors.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "LogicSensors" ]); - RangeFinders.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "RangeFinders" ]); - - (* Request bus names: *) - lwt () = - Lwt_util.iter (fun name -> OBus_bus.request_name bus name >> return ()) [ - "fr.krobot.Device.Compass"; - "fr.krobot.Device.AX12"; - "fr.krobot.Device.Elevator"; - "fr.krobot.Device.Grip"; - "fr.krobot.Device.Motors"; - "fr.krobot.Device.LogicSensors"; - "fr.krobot.Device.RangeFinders"; - ] - in - - fst (Lwt.wait ()) diff --git a/PC_Mainboard/daemons/dbus-rules/fr.krobot.conf b/PC_Mainboard/daemons/dbus-rules/fr.krobot.conf deleted file mode 100644 index 3e04cb6..0000000 --- a/PC_Mainboard/daemons/dbus-rules/fr.krobot.conf +++ /dev/null @@ -1,82 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- --> - -<!DOCTYPE busconfig PUBLIC - "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" - "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> -<busconfig> - <!-- Only root can own the service --> - <policy user="root"> - <allow own="fr.krobot.Device.Compass"/> - <allow own="fr.krobot.Device.AX12"/> - <allow own="fr.krobot.Device.Grip"/> - <allow own="fr.krobot.Device.Elevator"/> - <allow own="fr.krobot.Device.LogicSensors"/> - <allow own="fr.krobot.Device.RangeFinders"/> - <allow own="fr.krobot.Device.Motors"/> - </policy> - - <policy context="default"> - <!-- Compass --> - <allow send_destination="fr.krobot.Device.Compass"/> - <allow send_destination="fr.krobot.Device.Compasss" - send_interface="org.freedesktop.DBus.Properties"/> - <allow send_destination="fr.krobot.Device.Compass" - send_interface="org.freedesktop.DBus.Introspectable"/> - <allow send_destination="fr.krobot.Device.Compass" - send_interface="fr.krobot.Device.Compass"/> - - <!-- AX12 --> - <allow send_destination="fr.krobot.Device.AX12"/> - <allow send_destination="fr.krobot.Device.AX12s" - send_interface="org.freedesktop.DBus.Properties"/> - <allow send_destination="fr.krobot.Device.AX12" - send_interface="org.freedesktop.DBus.Introspectable"/> - <allow send_destination="fr.krobot.Device.AX12" - send_interface="fr.krobot.Device.AX12"/> - - <!-- Grip --> - <allow send_destination="fr.krobot.Device.Grip"/> - <allow send_destination="fr.krobot.Device.Grip" - send_interface="org.freedesktop.DBus.Properties"/> - <allow send_destination="fr.krobot.Device.Grip" - send_interface="org.freedesktop.DBus.Introspectable"/> - <allow send_destination="fr.krobot.Device.Grip" - send_interface="fr.krobot.Device.Grip"/> - - <!-- Elevator --> - <allow send_destination="fr.krobot.Device.Elevator"/> - <allow send_destination="fr.krobot.Device.Elevator" - send_interface="org.freedesktop.DBus.Properties"/> - <allow send_destination="fr.krobot.Device.Elevator" - send_interface="org.freedesktop.DBus.Introspectable"/> - <allow send_destination="fr.krobot.Device.Elevator" - send_interface="fr.krobot.Device.Elevator"/> - - <!-- LogicSensors --> - <allow send_destination="fr.krobot.Device.LogicSensors"/> - <allow send_destination="fr.krobot.Device.LogicSensors" - send_interface="org.freedesktop.DBus.Properties"/> - <allow send_destination="fr.krobot.Device.LogicSensors" - send_interface="org.freedesktop.DBus.Introspectable"/> - <allow send_destination="fr.krobot.Device.LogicSensors" - send_interface="fr.krobot.Device.LogicSensors"/> - - <!-- RangeFinders --> - <allow send_destination="fr.krobot.Device.RangeFinders"/> - <allow send_destination="fr.krobot.Device.RangeFinders" - send_interface="org.freedesktop.DBus.Properties"/> - <allow send_destination="fr.krobot.Device.RangeFinders" - send_interface="org.freedesktop.DBus.Introspectable"/> - <allow send_destination="fr.krobot.Device.RangeFinders" - send_interface="fr.krobot.Device.RangeFinders"/> - - <!-- Motors --> - <allow send_destination="fr.krobot.Device.Motors"/> - <allow send_destination="fr.krobot.Device.Motorss" - send_interface="org.freedesktop.DBus.Properties"/> - <allow send_destination="fr.krobot.Device.Motors" - send_interface="org.freedesktop.DBus.Introspectable"/> - <allow send_destination="fr.krobot.Device.Motors" - send_interface="fr.krobot.Device.Motors"/> - </policy> -</busconfig> diff --git a/PC_Mainboard/daemons/myocamlbuild.ml b/PC_Mainboard/daemons/myocamlbuild.ml deleted file mode 100644 index ba302e3..0000000 --- a/PC_Mainboard/daemons/myocamlbuild.ml +++ /dev/null @@ -1,117 +0,0 @@ -(* - * myocamlbuild.ml - * --------------- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -open Printf -open Ocamlbuild_plugin - -(* +-----------------------------------------------------------------+ - | Ocamlfind | - +-----------------------------------------------------------------+ *) - -(* Put here packages you may use in this project: *) -let packages = [ - "type-conv"; - "type-conv.syntax"; - "camlp4"; - "camlp4.extend"; - "camlp4.lib"; - "camlp4.macro"; - "camlp4.quotations.o"; - "camlp4.quotations.r"; - "lwt"; - "lwt.unix"; - "lwt.syntax"; - "str"; - "xmlm"; - "react"; - "usb"; - "obus"; - "obus.syntax"; - "bitstring"; - "bitstring.syntax"; -] - -(* List of available syntaxes :*) -let syntaxes = [ - "camlp4o"; - "camlp4r"; -] - -(* +-----------------------------------------------------------------+ - | Utils | - +-----------------------------------------------------------------+ *) - -let flag_all_stages_except_link tag f = - flag ["ocaml"; "compile"; tag] f; - flag ["ocaml"; "ocamldep"; tag] f; - flag ["ocaml"; "doc"; tag] f - -let flag_all_stages tag f = - flag_all_stages_except_link tag f; - flag ["ocaml"; "link"; tag] f - -let _ = - dispatch begin function - | Before_options -> - - (* override default commands by ocamlfind ones *) - let ocamlfind x = S[A"ocamlfind"; A x] in - Options.ocamlc := ocamlfind "ocamlc"; - Options.ocamlopt := ocamlfind "ocamlopt"; - Options.ocamldep := ocamlfind "ocamldep"; - (* FIXME: sometimes ocamldoc say that elements are not found - even if they are present: *) - Options.ocamldoc := S[A"ocamlfind"; A"ocamldoc"; A"-hide-warnings"] - - | After_rules -> - - (* D-Bus drivers can see the lowlevel interfaces *) - Pathname.define_context "dbus-drivers" [ "usb" ]; - - (* Génération du fichier contenant les détails du protocol à - partir du fichier .h *) - rule "protocol du krobot" ~dep:"PcInterface.h" ~prod:"protocol.ml" - (fun _ _ -> - Cmd(S[Sh"awk '$1 == \"#define\" && $3 != \"\" { print \"let \" tolower($2) \" = \" $3 }' PcInterface.h > protocol.ml"])); - - (* +---------------------------------------------------------+ - | Virtual targets | - +---------------------------------------------------------+ *) - - let virtual_rule name deps = - rule name ~stamp:name ~deps (fun _ _ -> Nop) - in - - virtual_rule "all" ["dbus-drivers/card_interface.native"; - "dbus-drivers/card_sensor.native"; - "dbus-drivers/card_motor.native"; - "dbus-drivers/fake.native"]; - - (* +---------------------------------------------------------+ - | Ocamlfind stuff | - +---------------------------------------------------------+ *) - - (* When one link an OCaml binary, one should use -linkpkg *) - flag ["ocaml"; "link"; "program"] & A"-linkpkg"; - - (* For each ocamlfind package one inject the -package option - when compiling, computing dependencies, generating - documentation and linking. *) - List.iter - (fun package -> flag_all_stages ("pkg_" ^ package) (S[A"-package"; A package])) - packages; - - (* Like -package but for extensions syntax. Morover -syntax is - useless when linking. *) - List.iter - (fun syntax -> flag_all_stages_except_link ("syntax_" ^ syntax) (S[A"-syntax"; A syntax])) - syntaxes; - - | _ -> () - end diff --git a/PC_Mainboard/daemons/usb/RW.ml b/PC_Mainboard/daemons/usb/RW.ml deleted file mode 100644 index f7c417a..0000000 --- a/PC_Mainboard/daemons/usb/RW.ml +++ /dev/null @@ -1,37 +0,0 @@ -(* - * RW.ml - * ----- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -let get_uint8 data ofs = Char.code data.[ofs] -let set_uint8 data ofs v = data.[ofs] <- Char.unsafe_chr v -let get_int8 = get_uint8 -let set_int8 = set_uint8 - -let get_int16 data ofs = - (get_uint8 data ofs lsl 8) - lor (get_uint8 data (ofs + 1)) -let get_uint16 = get_int16 - -let set_int16 data ofs v = - set_uint8 data ofs ((v lsr 8) land 0xff); - set_uint8 data (ofs + 1) (v land 0xff) -let set_uint16 = set_int16 - -let get_int32 data ofs = - (get_uint8 data ofs lsl 24) - lor (get_uint8 data (ofs + 1) lsl 16) - lor (get_uint8 data (ofs + 2) lsl 8) - lor (get_uint8 data (ofs + 3)) -let get_uint32 = get_int32 - -let set_int32 data ofs v = - set_uint8 data ofs ((v lsr 24) land 0xff); - set_uint8 data (ofs + 1) ((v lsr 16) land 0xff); - set_uint8 data (ofs + 2) ((v lsr 8) land 0xff); - set_uint8 data (ofs + 3) (v land 0xff) -let set_uint32 = set_int32 diff --git a/PC_Mainboard/daemons/usb/RW.mli b/PC_Mainboard/daemons/usb/RW.mli deleted file mode 100644 index 4fe39fa..0000000 --- a/PC_Mainboard/daemons/usb/RW.mli +++ /dev/null @@ -1,26 +0,0 @@ -(* - * RW.mli - * ------ - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -val get_int8 : string -> int -> int -val set_int8 : string -> int -> int -> unit - -val get_int16 : string -> int -> int -val set_int16 : string -> int -> int -> unit - -val get_int32 : string -> int -> int -val set_int32 : string -> int -> int -> unit - -val get_uint8 : string -> int -> int -val set_uint8 : string -> int -> int -> unit - -val get_uint16 : string -> int -> int -val set_uint16 : string -> int -> int -> unit - -val get_uint32 : string -> int -> int -val set_uint32 : string -> int -> int -> unit diff --git a/PC_Mainboard/daemons/usb/card.ml b/PC_Mainboard/daemons/usb/card.ml deleted file mode 100644 index c781e78..0000000 --- a/PC_Mainboard/daemons/usb/card.ml +++ /dev/null @@ -1,178 +0,0 @@ -(* - * card.ml - * ------- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -open Lwt - -let fatal fmt = Printf.ksprintf (fun txt -> prerr_endline ("Fatal error: " ^ txt); exit 2) fmt - -(* +-----------------------------------------------------------------+ - | Messages | - +-----------------------------------------------------------------+ *) - -let data_length = 52 - (* Taille en octet du corps d'un message *) - -type serial = int - (* Type d'un numéro de série d'un message *) - -type message = { - host_serial : serial; - (* Le numéro de série du message, émis par l'ordinateur. Vaut 0 pour - les messages émis par le PIC. *) - - device_serial : serial; - (* Le numéro de série du message, émis par le PIC. Vaut 0 pour les - messages émis par l'ordinateur. *) - - command : int; - (* La commande, en fait c'est plutôt le type du message *) - - error : int; - (* Si c'est un message d'erreur ce flag est non-nul *) - - data : string; - (* Les données du messages, il y a 52 octets. *) -} - -let make_buffer () = String.make data_length '\000' - -(* Parse un message depuis un buffer brut: *) -let parse_message buf = { - host_serial = Char.code buf.[Protocol.up_hseq]; - device_serial = Char.code buf.[Protocol.up_dseq]; - command = Char.code buf.[Protocol.up_cmd]; - error = Char.code buf.[Protocol.up_err]; - data = String.sub buf Protocol.up_data 52; -} - -(* Créé un buffer brut depuis un message: *) -let forge_message msg = - let buf = String.make 64 '\000' in - buf.[Protocol.up_hseq] <- Char.chr msg.host_serial; - buf.[Protocol.up_dseq] <- Char.chr msg.device_serial; - buf.[Protocol.up_cmd] <- Char.chr msg.command; - buf.[Protocol.up_err] <- Char.chr msg.error; - if String.length msg.data > 52 then - fatal "message trop grand pour être envoyé" - else begin - String.blit msg.data 0 buf Protocol.up_data (String.length msg.data); - buf - end - -(* +-----------------------------------------------------------------+ - | Connections | - +-----------------------------------------------------------------+ *) - -module SerialMap = Map.Make(struct type t = serial let compare = compare end) - -type t = { - - mutable serial_pool : serial list; - (* Pool de serial disponibles, comme il n'y a que 256 serial - disponibles on évite de juste incrémenter un compteur au pif. *) - - mutable reply_waiters : (string Lwt.t * string Lwt.u) SerialMap.t; - (* Threads en attente d'une réponse *) - - handle : USB.handle; - (* Handle pour le périphérique usb *) - - kernel_active : bool; - (* Est-ce qu'un driver noyau était attaché à la carte avant qu'on - l'utilise ? *) - - mutex : Lwt_mutex.t; - (* Mutex pour envoyer des commandes, les cartes n'aiment pas les - appels parallèles. *) - - mutable abort : bool; -} - -let close k = - lwt _ = USB.release_interface k.handle 0 in - if k.kernel_active then USB.attach_kernel_driver k.handle 0; - USB.close k.handle; - return () - -let rec dispatch k = - let buffer = String.create 64 in - lwt len = USB.interrupt_recv ~handle:k.handle ~endpoint:1 buffer 0 64 in - if len <> 64 then - fatal "message de moins de 64 octets reçu!" - else begin - let msg = parse_message buffer in - if msg.command = Protocol.cmd_respond then begin - (* Réponse à un message *) - match try Some(SerialMap.find msg.host_serial k.reply_waiters) with Not_found -> None with - | Some (_, w) -> - k.reply_waiters <- SerialMap.remove msg.host_serial k.reply_waiters; - k.serial_pool <- k.serial_pool @ [msg.host_serial]; - Lwt.wakeup w msg.data - | None -> - () - end; - dispatch k - end - -let open_card ~vendor_id ~product_id = - let handle = USB.open_device_with ~vendor_id ~product_id in - lwt _ = USB.reset_device handle in - let kernel_active = USB.kernel_driver_active handle 0 in - if kernel_active then USB.detach_kernel_driver handle 0; - lwt _ = USB.set_configuration handle 1 in - lwt _ = USB.claim_interface handle 0 in - let k = { serial_pool = (let rec loop = function - | 256 -> [] - | n -> n :: loop (n + 1) - in - loop 1); - reply_waiters = SerialMap.empty; - handle = handle; - kernel_active = kernel_active; - mutex = Lwt_mutex.create (); - abort = false } in - let _ = Lwt_sequence.add_l (fun _ -> close k) Lwt_main.exit_hooks in - ignore (dispatch k); - return k - -(* Envoie une commande et attend une réponse: *) -let send_request k command data = - if k.abort then fail (Failure "abort") else begin - let serial = match k.serial_pool with - | [] -> - fatal "plus aucun serial disponible!" - | s :: l -> - k.serial_pool <- l; - s - in - let (w1, w2) as w = Lwt.wait () in - k.reply_waiters <- SerialMap.add serial w k.reply_waiters; - let buffer = forge_message { host_serial = serial; - device_serial = 0; - command = command; - error = 0; - data = data } in - Lwt_mutex.with_lock k.mutex - (fun _ -> USB.interrupt_send ~handle:k.handle ~endpoint:1 buffer 0 64 >> w1) - end - -(* Envoie une commande et attend une commande: *) -let send_command k command data = - if k.abort then fail (Failure "abort") else begin - let buffer = forge_message { host_serial = 0; - device_serial = 0; - command = command; - error = 0; - data = data } in - lwt _ = USB.interrupt_send ~handle:k.handle ~endpoint:1 buffer 0 64 in - return () - end - - -let connect card command = failwith "not implemented" diff --git a/PC_Mainboard/daemons/usb/card.mli b/PC_Mainboard/daemons/usb/card.mli deleted file mode 100644 index 058d664..0000000 --- a/PC_Mainboard/daemons/usb/card.mli +++ /dev/null @@ -1,32 +0,0 @@ -(* - * card.mli - * -------- - * Copyright : (c) 2009, Jeremie Dimino <je...@di...> - * Licence : BSD3 - * - * This file is a part of [kro]bot. - *) - -(** Lowlevel card interfaces *) - -type t - (** Type of an opened card *) - -val open_card : vendor_id : int -> product_id : int -> t Lwt.t - (** Opten the card with given product-id and vendor-id *) - -val close : t -> unit Lwt.t - -val make_buffer : unit -> string - (** Creates a new buffer for serialization (with the right size) *) - -val send_request : t -> int -> string -> string Lwt.t - (** [send_request card request data] sends a request to the USB - device and wait for the reply *) - -val send_command : t -> int -> string -> unit Lwt.t - (** Sends a command to the device *) - -val connect : t -> int -> < event : string React.event; stop : unit > - (** [connect card command] connects to signals [command] emitted by - [card] *) diff --git a/PC_Mainboard/driver/Makefile b/PC_Mainboard/driver/Makefile new file mode 100644 index 0000000..59cf6b3 --- /dev/null +++ b/PC_Mainboard/driver/Makefile @@ -0,0 +1,36 @@ +# Makefile +# -------- +# Copyright : (c) 2009, Jeremie Dimino <je...@di...> +# Licence : BSD3 +# +# This file is a part of [kro]bot. + +PREFIX=/usr/local + +OC = ocamlbuild +OF = ocamlfind + +ifeq ($(TERM),dumb) +OC += -classic-display +endif + +.PHONY: all +all: + $(OC) all + +.PHONY: clean +clean: + $(OC) -clean + +.PHONY: install +install: + install -m0644 dbus-rules/fr.krobot.conf /etc/dbus-1/system.d/fr.krobot.conf + install _build/src/driver.best $(PREFIX)/bin/krobot-driver + +.PHONY: uninstall +uninstall: + rm -f /etc/dbus-1/system.d/fr.krobot.conf + rm -f $(PREFIX)/bin/krobot-driver + +.PHONY: reinstall +reinstall: uninstall install diff --git a/PC_Mainboard/driver/PcInterface.h b/PC_Mainboard/driver/PcInterface.h new file mode 100644 index 0000000..6928d8e --- /dev/null +++ b/PC_Mainboard/driver/PcInterface.h @@ -0,0 +1,208 @@ +/** + * @file PcInterface.h + * Fichier commun avec le programme hsur la carte m (USB PC). + * Ce fichier dnit de nombreuses constantes utilis pour le protocole + * de communication carte <-> PC. +*/ + +#ifndef PC_INTERFACE_H +#define PC_INTERFACE_H + +#define USB_VID 0x04D8 ///< Vendor ID commun aux diffntes cartes USB +#define USB_PID_USB_DEV_BOARD 0x0001 ///< Product ID de la Carte d'essais +#define USB_PID_PROXIMITY_SENSOR 0x0002 ///< Product ID de la Carte capteurs +#define USB_PID_MOTOR_CONTROLLER 0x0003 ///< Product ID de la Carte d'asservissement +#define USB_PID_ROBOT_INTERFACE 0x0004 ///< Product ID de la Carte d'actionneur +#define USB_PID_BATTERY_MONITORING 0x0005 ///< Product ID de la carte Battery Monitoring +#define USB_PID_BOOTLOADER 0x000b ///< Product ID d'une carte en mode bootloader + +// Protocole USB +#define UP_HSEQ 0 ///< Host sequence number +#define UP_DSEQ 1 ///< Device sequence number +#define UP_CMD 2 +#define UP_ERR 3 +#define UP_RES0 4 +#define UP_RES1 5 +#define UP_RES2 6 +#define UP_RES3 7 +#define UP_RES4 60 +#define UP_RES5 61 +#define UP_RES6 62 +#define UP_RES7 63 +#define UP_DATA 8 + +// Commande (premier bit) +#define CMD_RESET 0 ///< Reset du PIC +#define CMD_BOOTLOADER 1 ///< Reset du PIC en mode bootloader +#define CMD_GET 2 ///< Obtenir une information +#define CMD_RESPOND 3 ///< Rnse ne commande +#define CMD_ERR 4 ///< Envoyer une erreur +#define CMD_SEND 5 ///< Envoyer du texte +#define CMD_SET 6 ///< Dnir l't d'un parame +#define CMD_TEST 7 ///< Commande grique pour dencher une action de test +#define CMD_CALIBRATE 8 ///< Lance la calibration d'un tme [Carte capteurs] +#define CMD_AX12 9 +#define CMD_TRAJ 10 ///< Transmet une trajetoire au Krobot +#define CMD_MOTOR 11 ///< Gestion des moteurs +#define CMD_MOTOR_TOR 12 + +// CMD_GET arguments +#define GET_RESET_SOURCE 0 ///< Demande au PIC la source du Reset +#define GET_BOARD_INFO 1 ///< Demande au PIC le nom de la carte et l'auteur +#define GET_FIRMWARE_BUILD 2 ///< Demande au PIC la date et l'heure de compilation du firmware +#define GET_PORTS_CON... [truncated message content] |
From: Jérémie D. <Ba...@us...> - 2010-01-28 23:13:42
|
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 e0d4b08a4fc5530a34eac0d46d8f91be05d7f094 (commit) via ad99f48e3fd63484ad8cfb86d10112488005f170 (commit) via a6eae1639721abd40d30048f7f39b695346e0382 (commit) via f15d680daa0f68804b5e57b3e1c5a49999bd54e3 (commit) from e0dfd2ab56f51760e8151bb4a88724aabf949b94 (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 e0d4b08a4fc5530a34eac0d46d8f91be05d7f094 Author: Jérémie Dimino <je...@di...> Date: Fri Jan 29 00:12:25 2010 +0100 configuration pour l'accès à distance commit ad99f48e3fd63484ad8cfb86d10112488005f170 Author: Jérémie Dimino <je...@di...> Date: Thu Jan 28 22:59:09 2010 +0100 ajout du jack dans les status commit a6eae1639721abd40d30048f7f39b695346e0382 Author: Jérémie Dimino <je...@di...> Date: Thu Jan 28 22:54:57 2010 +0100 monitor un peu plus beau commit f15d680daa0f68804b5e57b3e1c5a49999bd54e3 Author: Jérémie Dimino <je...@di...> Date: Thu Jan 28 20:25:51 2010 +0100 ajout d'un fake driver pour tester sur son PC ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/lib-krobot/krobot.ml b/PC_Mainboard/clients/lib-krobot/krobot.ml index 9944bbd..6c77010 100644 --- a/PC_Mainboard/clients/lib-krobot/krobot.ml +++ b/PC_Mainboard/clients/lib-krobot/krobot.ml @@ -10,7 +10,28 @@ open OBus_pervasives open Lwt -lwt bus = Lazy.force OBus_bus.system +lwt bus = + match (try Sys.getenv "KROBOT" with Not_found -> ""), Unix.gethostname () with + | "local", _ | _, "mrp" -> + (* On the robot use the local connection *) + Lazy.force OBus_bus.system + | _ -> + (* Start remove connection if on another computer *) + try_lwt + let ssh = Lwt_process.open_process ("ssh", [|"ssh"; "-l"; "olivier"; "mrp.wifi.crans.org"; "/home/olivier/bin/forward_dbus.native"|]) in + let transport = + OBus_transport.make + ~send:(fun msg -> OBus_wire.write_message ssh#stdin msg) + ~recv:(fun () -> OBus_wire.read_message ssh#stdout) + ~shutdown:(fun () -> ssh#close >> return ()) + () + in + let connection = OBus_connection.of_transport transport in + lwt () = OBus_bus.register_connection connection in + return connection + with exn -> + Log#exn exn "failed to create remote transport"; + fail exn (* +-----------------------------------------------------------------+ | Compass | @@ -22,7 +43,6 @@ OP_signal Value : int OP_method Get : int lwt compass = - lwt bus = Lazy.force OBus_bus.system in let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.Compass") [ "fr"; "krobot"; "Devices"; "Compass" ] in lwt initial = get proxy in return (React.S.hold initial (value proxy)#event) @@ -31,12 +51,9 @@ lwt compass = | AX12 | +-----------------------------------------------------------------+ *) -let op_method_call member ty = - OBus_type.make_func ty - (fun body -> - lwt bus = Lazy.force OBus_bus.system in - let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.AX12") [ "fr"; "krobot"; "Devices"; "AX12" ] in - OBus_proxy.method_call' proxy ~interface:"fr.krobot.Device.AX12" ~member body (OBus_type.func_reply ty)) +let op_method_call member typ = + let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.AX12") [ "fr"; "krobot"; "Devices"; "AX12" ] in + OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.AX12" ~member typ OP_method OpenClaw : unit -> unit OP_method CloseClaw : unit -> unit @@ -47,12 +64,9 @@ OP_method CloseCylinder : unit -> unit | Elevator | +-----------------------------------------------------------------+ *) -let op_method_call member ty = - OBus_type.make_func ty - (fun body -> - lwt bus = Lazy.force OBus_bus.system in - let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.Elevator") [ "fr"; "krobot"; "Devices"; "Elevator" ] in - OBus_proxy.method_call' proxy ~interface:"fr.krobot.Device.Elevator" ~member body (OBus_type.func_reply ty)) +let op_method_call member typ = + let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.Elevator") [ "fr"; "krobot"; "Devices"; "Elevator" ] in + OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.Elevator" ~member typ OP_method ElevatorUp : int -> int -> unit OP_method ElevatorDown : int -> int -> unit @@ -71,12 +85,9 @@ let elevator_down ?speed ?delay () = | Grip | +-----------------------------------------------------------------+ *) -let op_method_call member ty = - OBus_type.make_func ty - (fun body -> - lwt bus = Lazy.force OBus_bus.system in - let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.Grip") [ "fr"; "krobot"; "Devices"; "Grip" ] in - OBus_proxy.method_call' proxy ~interface:"fr.krobot.Device.Grip" ~member body (OBus_type.func_reply ty)) +let op_method_call member typ = + let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.Grip") [ "fr"; "krobot"; "Devices"; "Grip" ] in + OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.Grip" ~member typ OP_method OpenGrip : unit -> unit OP_method CloseGrip : unit -> unit @@ -91,7 +102,6 @@ OP_signal Value : bool array OP_method Get : bool array lwt logic_sensors = - lwt bus = Lazy.force OBus_bus.system in let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.LogicSensors") [ "fr"; "krobot"; "Devices"; "LogicSensors" ] in lwt initial = get proxy in return (React.S.hold initial (value proxy)#event) @@ -114,7 +124,6 @@ OP_signal Value : int array OP_method Get : int array lwt range_finders = - lwt bus = Lazy.force OBus_bus.system in let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.RangeFinders") [ "fr"; "krobot"; "Devices"; "RangeFinders" ] in lwt initial = get proxy in return (React.S.hold initial (value proxy)#event) @@ -123,12 +132,9 @@ lwt range_finders = | Motors | +-----------------------------------------------------------------+ *) -let op_method_call member ty = - OBus_type.make_func ty - (fun body -> - lwt bus = Lazy.force OBus_bus.system in - let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.Motors") [ "fr"; "krobot"; "Devices"; "Motors" ] in - OBus_proxy.method_call' proxy ~interface:"fr.krobot.Device.Motors" ~member body (OBus_type.func_reply ty)) +let op_method_call member typ = + let proxy = OBus_proxy.make (OBus_peer.make bus "fr.krobot.Device.Motors") [ "fr"; "krobot"; "Devices"; "Motors" ] in + OBus_proxy.method_call proxy ~interface:"fr.krobot.Device.Motors" ~member typ OP_method Turn : int -> int -> int -> unit OP_method Move : int -> int -> int -> unit diff --git a/PC_Mainboard/clients/myocamlbuild.ml b/PC_Mainboard/clients/myocamlbuild.ml index 2d6a8a3..863a811 100644 --- a/PC_Mainboard/clients/myocamlbuild.ml +++ b/PC_Mainboard/clients/myocamlbuild.ml @@ -27,6 +27,7 @@ let packages = [ "lwt"; "lwt.unix"; "lwt.syntax"; + "lwt.syntax.log"; "lwt.text"; "str"; "xmlm"; @@ -94,6 +95,7 @@ let _ = "lib-krobot/krobot.cmxa"; "tools/status.native"; "tools/monitor.native"; + "remote/forward_dbus.native"; ]; (* +---------------------------------------------------------+ diff --git a/PC_Mainboard/clients/remote/forward_dbus.ml b/PC_Mainboard/clients/remote/forward_dbus.ml new file mode 100644 index 0000000..af19b40 --- /dev/null +++ b/PC_Mainboard/clients/remote/forward_dbus.ml @@ -0,0 +1,27 @@ +(* + * forward_dbus.ml + * --------------- + * Copyright : (c) 2010, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +open Lwt + +let rec copy ta tb = + lwt msg = OBus_transport.recv ta in + lwt () = OBus_transport.send tb msg in + copy ta tb + +lwt () = + lwt addresses = Lazy.force OBus_address.system in + lwt (_, ta) = OBus_transport.of_addresses addresses in + let tb = + OBus_transport.make + ~send:(fun msg -> OBus_wire.write_message Lwt_io.stdout msg) + ~recv:(fun () -> OBus_wire.read_message Lwt_io.stdin) + ~shutdown:return + () + in + copy ta tb <&> copy tb ta diff --git a/PC_Mainboard/clients/tools/monitor.ml b/PC_Mainboard/clients/tools/monitor.ml index cd98a62..bfada3d 100644 --- a/PC_Mainboard/clients/tools/monitor.ml +++ b/PC_Mainboard/clients/tools/monitor.ml @@ -10,22 +10,45 @@ (* Prints status continuously *) open Lwt +open Lwt_term -let print_status compass logic_sensors range_finders team = - lwt () = Lwt_term.goto_beginning_of_line 4 in - Lwt_io.printf "\ -compass = %d -logic_sensors = %s -range_finders = %s -team = %s -" - compass - (String.concat "" (List.map (function true -> "O" | false -> ".") (Array.to_list logic_sensors))) - (String.concat " " (List.map string_of_int (Array.to_list range_finders))) - (match team with Krobot.Team_red -> "red" | Krobot.Team_green -> "green") +let draw_text screen line column txt = + if line >= 0 && line < Array.length screen then + let rec loop column ptr = match Text.next ptr with + | None -> + () + | Some(ch, ptr) -> + if column >= 0 && column < Array.length screen.(line) then + screen.(line).(column) <- { blank with char = ch }; + loop (column + 1) ptr + in + loop column (Text.pointer_l txt) + +let print_status size compass logic_sensors range_finders team jack = + let screen = Array.make_matrix size.lines size.columns blank in + draw_text screen 1 1 ("team = " ^ match team with Krobot.Team_red -> "red" | Krobot.Team_green -> "green"); + draw_text screen 2 1 ("jack = " ^ if jack then "present" else "absent"); + draw_text screen 3 1 ("compass = " ^ string_of_int compass); + draw_text screen 4 1 ("logic_sensors = " ^ String.concat "" (List.map (function true -> "O" | false -> ".") (Array.to_list logic_sensors))); + for i = 0 to Array.length range_finders - 1 do + draw_text screen (5 + i) 1 (Printf.sprintf "range_finders[%d] = %d" i range_finders.(i)) + done; + for i = 1 to size.columns - 2 do + screen.(0).(i) <- { blank with char = "─" }; + screen.(size.lines - 1).(i) <- { blank with char = "─" } + done; + for i = 1 to size.lines - 2 do + screen.(i).(0) <- { blank with char = "│" }; + screen.(i).(size.columns - 1) <- { blank with char = "│" } + done; + screen.(0).(0) <- { blank with char = "┌" }; + screen.(size.lines - 1).(0) <- { blank with char = "└" }; + screen.(size.lines - 1).(size.columns - 1) <- { blank with char = "┘" }; + screen.(0).(size.columns - 1) <- { blank with char = "┐" }; + Lwt_term.render screen let signal = - React.S.l4 print_status Krobot.compass Krobot.logic_sensors Krobot.range_finders Krobot.team + React.S.l6 print_status size Krobot.compass Krobot.logic_sensors Krobot.range_finders Krobot.team Krobot.jack let rec loop_key () = Lwt_term.read_key () >>= function @@ -34,4 +57,9 @@ let rec loop_key () = | _ -> loop_key () -lwt () = Lwt_term.with_raw_mode loop_key +lwt () = + lwt () = hide_cursor () in + try_lwt + Lwt_term.with_raw_mode loop_key + finally + show_cursor () diff --git a/PC_Mainboard/clients/tools/status.ml b/PC_Mainboard/clients/tools/status.ml index 76e4cf0..09cc72a 100644 --- a/PC_Mainboard/clients/tools/status.ml +++ b/PC_Mainboard/clients/tools/status.ml @@ -18,8 +18,10 @@ compass = %d logic_sensors = %s range_finders = %s team = %s +jack = %s " (React.S.value compass) (String.concat "" (List.map (function true -> "O" | false -> ".") (Array.to_list (React.S.value logic_sensors)))) (String.concat " " (List.map string_of_int (Array.to_list (React.S.value range_finders)))) (match React.S.value team with Team_red -> "red" | Team_green -> "green") + (match React.S.value jack with true -> "present" | false -> "absent") diff --git a/PC_Mainboard/daemons/dbus-drivers/fake.ml b/PC_Mainboard/daemons/dbus-drivers/fake.ml new file mode 100644 index 0000000..94981af --- /dev/null +++ b/PC_Mainboard/daemons/dbus-drivers/fake.ml @@ -0,0 +1,136 @@ +(* + * fake.ml + * ------- + * Copyright : (c) 2010, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +(* A fake server that does nothing. FOr testing purpose.*) + +open OBus_pervasives +open Lwt + +module Id = struct + type obj = OBus_object.t + let get obj = obj +end + +(* +-----------------------------------------------------------------+ + | Compass | + +-----------------------------------------------------------------+ *) + +module Compass = +struct + module OBus = OBus_object.Make(Id) + include OBus.MakeInterface(struct let name = "fr.krobot.Device.Compass" end) + OL_signal Value : int + OL_method Get : int = fun _ -> return 0 +end + +(* +-----------------------------------------------------------------+ + | AX12 | + +-----------------------------------------------------------------+ *) + +module AX12 = +struct + module OBus = OBus_object.Make(Id) + include OBus.MakeInterface(struct let name = "fr.krobot.Device.AX12" end) + OL_method OpenClaw : unit = fun _ -> return () + OL_method CloseClaw : unit = fun _ -> return () + OL_method OpenCylinder : unit = fun _ -> return () + OL_method CloseCylinder : unit = fun _ -> return () +end + +(* +-----------------------------------------------------------------+ + | Elevator | + +-----------------------------------------------------------------+ *) + +module Elevator = +struct + module OBus = OBus_object.Make(Id) + include OBus.MakeInterface(struct let name = "fr.krobot.Device.Elevator" end) + OL_method ElevatorUp : int -> int -> unit = fun _ _ _ -> return () + OL_method ElevatorDown : int -> int -> unit = fun _ _ _ -> return () +end + +(* +-----------------------------------------------------------------+ + | Grip | + +-----------------------------------------------------------------+ *) + +module Grip = +struct + module OBus = OBus_object.Make(Id) + include OBus.MakeInterface(struct let name = "fr.krobot.Device.Grip" end) + OL_method OpenGrip : unit = fun _ -> return () + OL_method CloseGrip : unit = fun _ -> return () +end + +(* +-----------------------------------------------------------------+ + | Motors | + +-----------------------------------------------------------------+ *) + +module Motors = +struct + module OBus = OBus_object.Make(Id) + include OBus.MakeInterface(struct let name = "fr.krobot.Device.Motors" end) + OL_method Turn : int -> int -> int -> unit = fun _ _ _ _ -> return () + OL_method Move : int -> int -> int -> unit = fun _ _ _ _ -> return () +end + +(* +-----------------------------------------------------------------+ + | Logic sensors | + +-----------------------------------------------------------------+ *) + +module LogicSensors = +struct + module OBus = OBus_object.Make(Id) + include OBus.MakeInterface(struct let name = "fr.krobot.Device.LogicSensors" end) + OL_signal Value : bool array + OL_method Get : bool array = fun _ -> return (Array.create 16 false) +end + +(* +-----------------------------------------------------------------+ + | Range finders | + +-----------------------------------------------------------------+ *) + +module RangeFinders = +struct + module OBus = OBus_object.Make(Id) + include OBus.MakeInterface(struct let name = "fr.krobot.Device.RangeFinders" end) + OL_signal Value : int array + OL_method Get : int array = fun _ -> return (Array.create 8 0) +end + +(* +-----------------------------------------------------------------+ + | Entry point | + +-----------------------------------------------------------------+ *) + +lwt () = + if not !Common.foreground then Lwt_unix.daemonize ~keep_stderr:true (); + + lwt bus = Lazy.force OBus_bus.system in + + Compass.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "Compass" ]); + AX12.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "AX12" ]); + Elevator.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "Elevator" ]); + Grip.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "Grip" ]); + Motors.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "Motors" ]); + LogicSensors.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "LogicSensors" ]); + RangeFinders.OBus.export bus (OBus_object.make [ "fr"; "krobot"; "Devices"; "RangeFinders" ]); + + (* Request bus names: *) + lwt () = + Lwt_util.iter (fun name -> OBus_bus.request_name bus name >> return ()) [ + "fr.krobot.Device.Compass"; + "fr.krobot.Device.AX12"; + "fr.krobot.Device.Elevator"; + "fr.krobot.Device.Grip"; + "fr.krobot.Device.Motors"; + "fr.krobot.Device.LogicSensors"; + "fr.krobot.Device.RangeFinders"; + ] + in + + fst (Lwt.wait ()) diff --git a/PC_Mainboard/daemons/myocamlbuild.ml b/PC_Mainboard/daemons/myocamlbuild.ml index ecee873..ba302e3 100644 --- a/PC_Mainboard/daemons/myocamlbuild.ml +++ b/PC_Mainboard/daemons/myocamlbuild.ml @@ -90,7 +90,8 @@ let _ = virtual_rule "all" ["dbus-drivers/card_interface.native"; "dbus-drivers/card_sensor.native"; - "dbus-drivers/card_motor.native"]; + "dbus-drivers/card_motor.native"; + "dbus-drivers/fake.native"]; (* +---------------------------------------------------------+ | Ocamlfind stuff | hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-01-28 21:13:59
|
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 e0dfd2ab56f51760e8151bb4a88724aabf949b94 (commit) via cc869011e3cffc8f928c733dd983683117f8330d (commit) from 69e4e108cbce6550755c49ad6c05fbe0e0f53edf (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 e0dfd2ab56f51760e8151bb4a88724aabf949b94 Merge: cc869011e3cffc8f928c733dd983683117f8330d 69e4e108cbce6550755c49ad6c05fbe0e0f53edf Author: Olivier BICHLER <oli...@gm...> Date: Thu Jan 28 22:13:06 2010 +0100 Merge branch 'master' of ssh://krobot.git.sourceforge.net/gitroot/krobot/krobot commit cc869011e3cffc8f928c733dd983683117f8330d Author: Olivier BICHLER <oli...@gm...> Date: Thu Jan 28 22:12:07 2010 +0100 Ajout pinces de guidage des balles, boussole électronique et carte fille pour la carte mère EPIA P700 ----------------------------------------------------------------------- Changes: diff --git a/meca/Bac cote 2.CATPart b/meca/Bac cote 2.CATPart index ebfa09a..28cc2e7 100644 Binary files a/meca/Bac cote 2.CATPart and b/meca/Bac cote 2.CATPart differ diff --git a/meca/Base assemblee.CATProduct b/meca/Base assemblee.CATProduct index 8c8d245..fa7dbe6 100644 Binary files a/meca/Base assemblee.CATProduct and b/meca/Base assemblee.CATProduct differ diff --git a/meca/Base.CATPart b/meca/Base.CATPart index 0d9cf32..c6434d6 100644 Binary files a/meca/Base.CATPart and b/meca/Base.CATPart differ diff --git a/meca/Bras.CATProduct b/meca/Bras.CATProduct index 4cef903..2cccf72 100644 Binary files a/meca/Bras.CATProduct and b/meca/Bras.CATProduct differ diff --git a/meca/Cartes/Boussole CMP03.CATPart b/meca/Cartes/Boussole CMP03.CATPart new file mode 100644 index 0000000..7e629ab Binary files /dev/null and b/meca/Cartes/Boussole CMP03.CATPart differ diff --git a/meca/Cartes/VIA EPIA P700-A.CATPart b/meca/Cartes/VIA EPIA P700-A.CATPart new file mode 100644 index 0000000..f845216 Binary files /dev/null and b/meca/Cartes/VIA EPIA P700-A.CATPart differ diff --git a/meca/Cartes/VIA EPIA P700.CATPart b/meca/Cartes/VIA EPIA P700.CATPart index dce61ec..2332b4c 100644 Binary files a/meca/Cartes/VIA EPIA P700.CATPart and b/meca/Cartes/VIA EPIA P700.CATPart differ diff --git a/meca/Decalage pince guidage.CATPart b/meca/Decalage pince guidage.CATPart new file mode 100644 index 0000000..ba6ec52 Binary files /dev/null and b/meca/Decalage pince guidage.CATPart differ diff --git a/meca/Niveau 1 bac.CATPart b/meca/Niveau 1 bac.CATPart index c7a9a45..7552286 100644 Binary files a/meca/Niveau 1 bac.CATPart and b/meca/Niveau 1 bac.CATPart differ diff --git a/meca/Niveau 1.CATPart b/meca/Niveau 1.CATPart index 9e69a52..523ce56 100644 Binary files a/meca/Niveau 1.CATPart and b/meca/Niveau 1.CATPart differ diff --git a/meca/Niveau 2.CATPart b/meca/Niveau 2.CATPart index bc7d937..0e02941 100644 Binary files a/meca/Niveau 2.CATPart and b/meca/Niveau 2.CATPart differ diff --git a/meca/Pince guidage.CATPart b/meca/Pince guidage.CATPart new file mode 100644 index 0000000..fbca056 Binary files /dev/null and b/meca/Pince guidage.CATPart differ diff --git a/meca/Servo S3010.CATPart b/meca/Servo S3010.CATPart new file mode 100644 index 0000000..8e439de Binary files /dev/null and b/meca/Servo S3010.CATPart differ diff --git a/meca/Tete servo S3010.CATPart b/meca/Tete servo S3010.CATPart new file mode 100644 index 0000000..cf3d897 Binary files /dev/null and b/meca/Tete servo S3010.CATPart differ diff --git a/meca/Vis/Vis tete bombee pozi M4x40.CATPart b/meca/Vis/Vis tete bombee pozi M4x40.CATPart new file mode 100644 index 0000000..3731fba Binary files /dev/null and b/meca/Vis/Vis tete bombee pozi M4x40.CATPart differ hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-01-28 19:24:25
|
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 69e4e108cbce6550755c49ad6c05fbe0e0f53edf (commit) from e33ec4b458d37bf85e80167bb00632f35f2a3ef6 (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 69e4e108cbce6550755c49ad6c05fbe0e0f53edf Author: Jérémie Dimino <je...@di...> Date: Thu Jan 28 20:23:45 2010 +0100 ajout de l'interface fr.krobot.Device.Motors dans les règles D-Bus ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/daemons/dbus-rules/fr.krobot.conf b/PC_Mainboard/daemons/dbus-rules/fr.krobot.conf index c793c6d..3e04cb6 100644 --- a/PC_Mainboard/daemons/dbus-rules/fr.krobot.conf +++ b/PC_Mainboard/daemons/dbus-rules/fr.krobot.conf @@ -12,6 +12,7 @@ <allow own="fr.krobot.Device.Elevator"/> <allow own="fr.krobot.Device.LogicSensors"/> <allow own="fr.krobot.Device.RangeFinders"/> + <allow own="fr.krobot.Device.Motors"/> </policy> <policy context="default"> @@ -68,5 +69,14 @@ send_interface="org.freedesktop.DBus.Introspectable"/> <allow send_destination="fr.krobot.Device.RangeFinders" send_interface="fr.krobot.Device.RangeFinders"/> + + <!-- Motors --> + <allow send_destination="fr.krobot.Device.Motors"/> + <allow send_destination="fr.krobot.Device.Motorss" + send_interface="org.freedesktop.DBus.Properties"/> + <allow send_destination="fr.krobot.Device.Motors" + send_interface="org.freedesktop.DBus.Introspectable"/> + <allow send_destination="fr.krobot.Device.Motors" + send_interface="fr.krobot.Device.Motors"/> </policy> </busconfig> hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-01-28 19:08:36
|
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 e33ec4b458d37bf85e80167bb00632f35f2a3ef6 (commit) from b390b8ba32db284ca0862c893a8b6240235da7a9 (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 e33ec4b458d37bf85e80167bb00632f35f2a3ef6 Author: Jérémie Dimino <je...@di...> Date: Thu Jan 28 20:08:09 2010 +0100 Ajout d'un monitor ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/_tags b/PC_Mainboard/clients/_tags index fca1be6..ada7748 100644 --- a/PC_Mainboard/clients/_tags +++ b/PC_Mainboard/clients/_tags @@ -9,3 +9,4 @@ # lib-krobot uses obus <**/*>: pkg_obus +<tools/*>: pkg_lwt.text diff --git a/PC_Mainboard/clients/myocamlbuild.ml b/PC_Mainboard/clients/myocamlbuild.ml index 5d9fb2a..2d6a8a3 100644 --- a/PC_Mainboard/clients/myocamlbuild.ml +++ b/PC_Mainboard/clients/myocamlbuild.ml @@ -27,6 +27,7 @@ let packages = [ "lwt"; "lwt.unix"; "lwt.syntax"; + "lwt.text"; "str"; "xmlm"; "react"; @@ -92,6 +93,7 @@ let _ = "lib-krobot/krobot.cma"; "lib-krobot/krobot.cmxa"; "tools/status.native"; + "tools/monitor.native"; ]; (* +---------------------------------------------------------+ diff --git a/PC_Mainboard/clients/tools/monitor.ml b/PC_Mainboard/clients/tools/monitor.ml new file mode 100644 index 0000000..cd98a62 --- /dev/null +++ b/PC_Mainboard/clients/tools/monitor.ml @@ -0,0 +1,37 @@ +(* + * monitor.ml + * ---------- + * Copyright : (c) 2010, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +(* Prints status continuously *) + +open Lwt + +let print_status compass logic_sensors range_finders team = + lwt () = Lwt_term.goto_beginning_of_line 4 in + Lwt_io.printf "\ +compass = %d +logic_sensors = %s +range_finders = %s +team = %s +" + compass + (String.concat "" (List.map (function true -> "O" | false -> ".") (Array.to_list logic_sensors))) + (String.concat " " (List.map string_of_int (Array.to_list range_finders))) + (match team with Krobot.Team_red -> "red" | Krobot.Team_green -> "green") + +let signal = + React.S.l4 print_status Krobot.compass Krobot.logic_sensors Krobot.range_finders Krobot.team + +let rec loop_key () = + Lwt_term.read_key () >>= function + | Lwt_term.Key "q" | Lwt_term.Key_control ('c' | '[') -> + return () + | _ -> + loop_key () + +lwt () = Lwt_term.with_raw_mode loop_key diff --git a/PC_Mainboard/clients/tools/status.ml b/PC_Mainboard/clients/tools/status.ml index 47d92a2..76e4cf0 100644 --- a/PC_Mainboard/clients/tools/status.ml +++ b/PC_Mainboard/clients/tools/status.ml @@ -7,10 +7,12 @@ * This file is a part of [kro]bot. *) +(* Print status and exit *) + open Lwt open Krobot -let () = Lwt_main.run begin +lwt () = Lwt_io.printf "\ compass = %d logic_sensors = %s @@ -21,4 +23,3 @@ team = %s (String.concat "" (List.map (function true -> "O" | false -> ".") (Array.to_list (React.S.value logic_sensors)))) (String.concat " " (List.map string_of_int (Array.to_list (React.S.value range_finders)))) (match React.S.value team with Team_red -> "red" | Team_green -> "green") -end diff --git a/PC_Mainboard/clients/www/.depend b/PC_Mainboard/clients/www/.depend index e31d7f0..e69de29 100644 --- a/PC_Mainboard/clients/www/.depend +++ b/PC_Mainboard/clients/www/.depend @@ -1,8 +0,0 @@ -krobot.cmo: \ - /home/olivier/krobot/PC_Mainboard/Apps/usb/_build/src/protocol.cmo \ - /home/olivier/krobot/PC_Mainboard/Apps/usb/_build/src/kard.cmi \ - /home/olivier/krobot/PC_Mainboard/Apps/usb/_build/src/bootloader.cmi -krobot.cmx: \ - /home/olivier/krobot/PC_Mainboard/Apps/usb/_build/src/protocol.cmx \ - /home/olivier/krobot/PC_Mainboard/Apps/usb/_build/src/kard.cmx \ - /home/olivier/krobot/PC_Mainboard/Apps/usb/_build/src/bootloader.cmx hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-01-28 18:38:54
|
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 b390b8ba32db284ca0862c893a8b6240235da7a9 (commit) from bf3fd75b6941a6c1c29615bedf9774f1c2e62bda (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 b390b8ba32db284ca0862c893a8b6240235da7a9 Author: Jérémie Dimino <je...@di...> Date: Thu Jan 28 19:38:18 2010 +0100 daemonize immediatly, otherwise libusb crash ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/daemons/dbus-drivers/card_interface.ml b/PC_Mainboard/daemons/dbus-drivers/card_interface.ml index e483eed..8bf514e 100644 --- a/PC_Mainboard/daemons/dbus-drivers/card_interface.ml +++ b/PC_Mainboard/daemons/dbus-drivers/card_interface.ml @@ -202,7 +202,9 @@ let motor_enable card = RW.set_uint8 data 1 Protocol.motor_both; Card.send_command card Protocol.cmd_motor data -let () = Lwt_main.run begin +lwt () = + if not !Common.foreground then Lwt_unix.daemonize ~keep_stderr:true (); + lwt card = Card.open_card ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_robot_interface and bus = Lazy.force OBus_bus.system in @@ -228,6 +230,4 @@ let () = Lwt_main.run begin ] in - if not !Common.foreground then Lwt_unix.daemonize (); fst (Lwt.wait ()) -end diff --git a/PC_Mainboard/daemons/dbus-drivers/card_motor.ml b/PC_Mainboard/daemons/dbus-drivers/card_motor.ml index 14a4974..524db2c 100644 --- a/PC_Mainboard/daemons/dbus-drivers/card_motor.ml +++ b/PC_Mainboard/daemons/dbus-drivers/card_motor.ml @@ -75,7 +75,9 @@ let motor_enable card = RW.set_uint8 data 1 Protocol.motor_both; Card.send_command card Protocol.cmd_motor data -let () = Lwt_main.run begin +lwt () = + if not !Common.foreground then Lwt_unix.daemonize ~keep_stderr:true (); + lwt card = Card.open_card ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_motor_controller and bus = Lazy.force OBus_bus.system in @@ -92,6 +94,4 @@ let () = Lwt_main.run begin ] in - if not !Common.foreground then Lwt_unix.daemonize (); fst (Lwt.wait ()) -end diff --git a/PC_Mainboard/daemons/dbus-drivers/card_sensor.ml b/PC_Mainboard/daemons/dbus-drivers/card_sensor.ml index f503c17..bca7626 100644 --- a/PC_Mainboard/daemons/dbus-drivers/card_sensor.ml +++ b/PC_Mainboard/daemons/dbus-drivers/card_sensor.ml @@ -117,7 +117,9 @@ end | Entry point | +-----------------------------------------------------------------+ *) -let () = Lwt_main.run begin +lwt () = + if not !Common.foreground then Lwt_unix.daemonize ~keep_stderr:true (); + lwt card = Card.open_card ~vendor_id:Protocol.usb_vid ~product_id:Protocol.usb_pid_proximity_sensor and bus = Lazy.force OBus_bus.system in @@ -136,6 +138,4 @@ let () = Lwt_main.run begin ] in - if not !Common.foreground then Lwt_unix.daemonize (); fst (Lwt.wait ()) -end hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-01-28 18:25: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 bf3fd75b6941a6c1c29615bedf9774f1c2e62bda (commit) from 815176fcdd53c5846a6541986616e8fa5b708ca8 (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 bf3fd75b6941a6c1c29615bedf9774f1c2e62bda Author: Jérémie Dimino <je...@di...> Date: Thu Jan 28 19:23:52 2010 +0100 OBus_type.Pervasives --> OBus_pervasives ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/clients/lib-krobot/krobot.ml b/PC_Mainboard/clients/lib-krobot/krobot.ml index 409939c..9944bbd 100644 --- a/PC_Mainboard/clients/lib-krobot/krobot.ml +++ b/PC_Mainboard/clients/lib-krobot/krobot.ml @@ -7,7 +7,7 @@ * This file is a part of [kro]bot. *) -open OBus_type.Pervasives +open OBus_pervasives open Lwt lwt bus = Lazy.force OBus_bus.system diff --git a/PC_Mainboard/daemons/dbus-drivers/card_interface.ml b/PC_Mainboard/daemons/dbus-drivers/card_interface.ml index be36c16..e483eed 100644 --- a/PC_Mainboard/daemons/dbus-drivers/card_interface.ml +++ b/PC_Mainboard/daemons/dbus-drivers/card_interface.ml @@ -9,7 +9,7 @@ (* Driver for the interface card *) -open OBus_type.Pervasives +open OBus_pervasives open Lwt (* +-----------------------------------------------------------------+ diff --git a/PC_Mainboard/daemons/dbus-drivers/card_motor.ml b/PC_Mainboard/daemons/dbus-drivers/card_motor.ml index d28df4e..14a4974 100644 --- a/PC_Mainboard/daemons/dbus-drivers/card_motor.ml +++ b/PC_Mainboard/daemons/dbus-drivers/card_motor.ml @@ -9,7 +9,7 @@ (* Driver for the motor card *) -open OBus_type.Pervasives +open OBus_pervasives open Lwt (* +-----------------------------------------------------------------+ diff --git a/PC_Mainboard/daemons/dbus-drivers/card_sensor.ml b/PC_Mainboard/daemons/dbus-drivers/card_sensor.ml index 6f92c9e..f503c17 100644 --- a/PC_Mainboard/daemons/dbus-drivers/card_sensor.ml +++ b/PC_Mainboard/daemons/dbus-drivers/card_sensor.ml @@ -9,7 +9,7 @@ (* Driver for the sensor card *) -open OBus_type.Pervasives +open OBus_pervasives open Lwt (* +-----------------------------------------------------------------+ hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-01-26 21:40:58
|
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 815176fcdd53c5846a6541986616e8fa5b708ca8 (commit) from 8a94886e901be1fb3a25e7e6aaa8656135595635 (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 815176fcdd53c5846a6541986616e8fa5b708ca8 Author: Olivier BICHLER <oli...@gm...> Date: Tue Jan 26 22:40:18 2010 +0100 Ajout SSD, collier axe porte et éléments porte bac à épis ----------------------------------------------------------------------- Changes: diff --git a/meca/Base assemblee.CATProduct b/meca/Base assemblee.CATProduct index 9ffb45b..8c8d245 100644 Binary files a/meca/Base assemblee.CATProduct and b/meca/Base assemblee.CATProduct differ diff --git a/meca/Bras.CATProduct b/meca/Bras.CATProduct index 0e2d093..4cef903 100644 Binary files a/meca/Bras.CATProduct and b/meca/Bras.CATProduct differ diff --git a/meca/Cartes/Alim Pico-ITX.CATPart b/meca/Cartes/Alim Pico-ITX.CATPart index d686bf1..d3e9d79 100644 Binary files a/meca/Cartes/Alim Pico-ITX.CATPart and b/meca/Cartes/Alim Pico-ITX.CATPart differ diff --git a/meca/Cartes/CarteAsservissement.CATPart b/meca/Cartes/CarteAsservissement.CATPart index f214088..96f8f0b 100644 Binary files a/meca/Cartes/CarteAsservissement.CATPart and b/meca/Cartes/CarteAsservissement.CATPart differ diff --git a/meca/Cartes/SSD.CATPart b/meca/Cartes/SSD.CATPart new file mode 100644 index 0000000..7afb9eb Binary files /dev/null and b/meca/Cartes/SSD.CATPart differ diff --git a/meca/Collier 3mm.CATPart b/meca/Collier 3mm.CATPart new file mode 100644 index 0000000..549306f Binary files /dev/null and b/meca/Collier 3mm.CATPart differ diff --git a/meca/Niveau 1 bac.CATPart b/meca/Niveau 1 bac.CATPart index f47c69a..c7a9a45 100644 Binary files a/meca/Niveau 1 bac.CATPart and b/meca/Niveau 1 bac.CATPart differ diff --git a/meca/Niveau 2.CATPart b/meca/Niveau 2.CATPart index b2f4200..bc7d937 100644 Binary files a/meca/Niveau 2.CATPart and b/meca/Niveau 2.CATPart differ diff --git a/meca/Porte.CATPart b/meca/Porte.CATPart new file mode 100644 index 0000000..629801b Binary files /dev/null and b/meca/Porte.CATPart differ diff --git a/meca/Support axe porte sym.CATPart b/meca/Support axe porte sym.CATPart new file mode 100644 index 0000000..11054eb Binary files /dev/null and b/meca/Support axe porte sym.CATPart differ hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-01-25 22:36:06
|
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 8a94886e901be1fb3a25e7e6aaa8656135595635 (commit) from 7a413cb94d60429599f09228309ac994903a5ec1 (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 8a94886e901be1fb3a25e7e6aaa8656135595635 Author: Olivier BICHLER <oli...@gm...> Date: Mon Jan 25 23:35:29 2010 +0100 Ajout de la base du bac à épis (a priori taillée dans du polystyrène) ----------------------------------------------------------------------- Changes: diff --git a/meca/Base assemblee.CATProduct b/meca/Base assemblee.CATProduct index cfede1e..9ffb45b 100644 Binary files a/meca/Base assemblee.CATProduct and b/meca/Base assemblee.CATProduct differ diff --git a/meca/Base bac.CATPart b/meca/Base bac.CATPart new file mode 100644 index 0000000..65c8450 Binary files /dev/null and b/meca/Base bac.CATPart differ diff --git a/meca/Base.CATPart b/meca/Base.CATPart index e112744..0d9cf32 100644 Binary files a/meca/Base.CATPart and b/meca/Base.CATPart differ diff --git a/meca/Bras.CATProduct b/meca/Bras.CATProduct index c6140ed..0e2d093 100644 Binary files a/meca/Bras.CATProduct and b/meca/Bras.CATProduct differ diff --git a/meca/Niveau 1 bac.CATPart b/meca/Niveau 1 bac.CATPart index a6f7431..f47c69a 100644 Binary files a/meca/Niveau 1 bac.CATPart and b/meca/Niveau 1 bac.CATPart differ diff --git a/meca/Niveau 1.CATPart b/meca/Niveau 1.CATPart index 82fcd9e..9e69a52 100644 Binary files a/meca/Niveau 1.CATPart and b/meca/Niveau 1.CATPart differ diff --git a/meca/Niveau 2 bac.CATPart b/meca/Niveau 2 bac.CATPart index 6328dc5..4f850b4 100644 Binary files a/meca/Niveau 2 bac.CATPart and b/meca/Niveau 2 bac.CATPart differ diff --git a/meca/Niveau 2.CATPart b/meca/Niveau 2.CATPart index 808b0d4..b2f4200 100644 Binary files a/meca/Niveau 2.CATPart and b/meca/Niveau 2.CATPart differ hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-01-25 18:18:12
|
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 7a413cb94d60429599f09228309ac994903a5ec1 (commit) from 6473ef2f1b0e7ba7f0be5e43d902d20c9ecae7a1 (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 7a413cb94d60429599f09228309ac994903a5ec1 Author: Olivier BICHLER <oli...@gm...> Date: Mon Jan 25 19:17:24 2010 +0100 Ajout de la plaque support du 2ème niveau ----------------------------------------------------------------------- Changes: diff --git a/meca/Bac cote 1.CATPart b/meca/Bac cote 1.CATPart index 621ee73..4242128 100644 Binary files a/meca/Bac cote 1.CATPart and b/meca/Bac cote 1.CATPart differ diff --git a/meca/Base assemblee.CATProduct b/meca/Base assemblee.CATProduct index 4d55637..cfede1e 100644 Binary files a/meca/Base assemblee.CATProduct and b/meca/Base assemblee.CATProduct differ diff --git a/meca/Bras.CATProduct b/meca/Bras.CATProduct index 0353c53..c6140ed 100644 Binary files a/meca/Bras.CATProduct and b/meca/Bras.CATProduct differ diff --git a/meca/Niveau 1 bac.CATPart b/meca/Niveau 1 bac.CATPart index e804095..a6f7431 100644 Binary files a/meca/Niveau 1 bac.CATPart and b/meca/Niveau 1 bac.CATPart differ diff --git a/meca/Niveau 1.CATPart b/meca/Niveau 1.CATPart index 2c6bcc9..82fcd9e 100644 Binary files a/meca/Niveau 1.CATPart and b/meca/Niveau 1.CATPart differ diff --git a/meca/Niveau 2 bac.CATPart b/meca/Niveau 2 bac.CATPart new file mode 100644 index 0000000..6328dc5 Binary files /dev/null and b/meca/Niveau 2 bac.CATPart differ diff --git a/meca/Niveau 2.CATPart b/meca/Niveau 2.CATPart new file mode 100644 index 0000000..808b0d4 Binary files /dev/null and b/meca/Niveau 2.CATPart differ hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-01-25 17:27:47
|
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 6473ef2f1b0e7ba7f0be5e43d902d20c9ecae7a1 (commit) from 324203b6438b3aa64e4e64ce3fdb61218633842d (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 6473ef2f1b0e7ba7f0be5e43d902d20c9ecae7a1 Author: Olivier BICHLER <oli...@gm...> Date: Mon Jan 25 18:27:14 2010 +0100 Ajout de chanfreins sur les moyeux des roues omni ----------------------------------------------------------------------- Changes: diff --git a/meca/Base assemblee.CATProduct b/meca/Base assemblee.CATProduct index f028f09..4d55637 100644 Binary files a/meca/Base assemblee.CATProduct and b/meca/Base assemblee.CATProduct differ diff --git a/meca/Base.CATPart b/meca/Base.CATPart index 4590c9a..e112744 100644 Binary files a/meca/Base.CATPart and b/meca/Base.CATPart differ diff --git a/meca/Bras tige 1.CATPart b/meca/Bras tige 1.CATPart index 616565f..e698f37 100644 Binary files a/meca/Bras tige 1.CATPart and b/meca/Bras tige 1.CATPart differ diff --git a/meca/Bras.CATProduct b/meca/Bras.CATProduct index 3ca941c..0353c53 100644 Binary files a/meca/Bras.CATProduct and b/meca/Bras.CATProduct differ diff --git a/meca/Moyeu omni 1.CATPart b/meca/Moyeu omni 1.CATPart index 70a31ec..8f2173a 100644 Binary files a/meca/Moyeu omni 1.CATPart and b/meca/Moyeu omni 1.CATPart differ diff --git a/meca/Moyeu omni 2.CATPart b/meca/Moyeu omni 2.CATPart index 2d48173..4463a76 100644 Binary files a/meca/Moyeu omni 2.CATPart and b/meca/Moyeu omni 2.CATPart differ diff --git a/meca/Niveau 1 bac.CATPart b/meca/Niveau 1 bac.CATPart index b710419..e804095 100644 Binary files a/meca/Niveau 1 bac.CATPart and b/meca/Niveau 1 bac.CATPart differ diff --git a/meca/Niveau 1.CATPart b/meca/Niveau 1.CATPart index 6ef5a18..2c6bcc9 100644 Binary files a/meca/Niveau 1.CATPart and b/meca/Niveau 1.CATPart differ hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-01-25 01:00:32
|
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 324203b6438b3aa64e4e64ce3fdb61218633842d (commit) from ad72166e25526315507c05c0a833b04c5b25fe89 (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 324203b6438b3aa64e4e64ce3fdb61218633842d Author: Xavier Lagorce <Xav...@cr...> Date: Mon Jan 25 01:59:03 2010 +0100 Ajout du design des épis de mais fixes + Ajout sur la table d'une configuration des épis fixe la plus défavorables pour les manoeuvres sur zone de marquage (il reste à combler les trous avec les autres épis) ----------------------------------------------------------------------- Changes: diff --git a/meca/Base assemblee.CATProduct b/meca/Base assemblee.CATProduct index ec7dd85..f028f09 100644 Binary files a/meca/Base assemblee.CATProduct and b/meca/Base assemblee.CATProduct differ diff --git a/meca/Base.CATPart b/meca/Base.CATPart index be80c88..4590c9a 100644 Binary files a/meca/Base.CATPart and b/meca/Base.CATPart differ diff --git a/meca/Bras tige 1.CATPart b/meca/Bras tige 1.CATPart index 1b43864..616565f 100644 Binary files a/meca/Bras tige 1.CATPart and b/meca/Bras tige 1.CATPart differ diff --git a/meca/Bras.CATProduct b/meca/Bras.CATProduct index 9df551c..3ca941c 100644 Binary files a/meca/Bras.CATProduct and b/meca/Bras.CATProduct differ diff --git a/meca/Coupe 2010/Assemblage mais fixe.CATProduct b/meca/Coupe 2010/Assemblage mais fixe.CATProduct new file mode 100644 index 0000000..433a9f4 Binary files /dev/null and b/meca/Coupe 2010/Assemblage mais fixe.CATProduct differ diff --git a/meca/Coupe 2010/AssemblageTable.CATProduct b/meca/Coupe 2010/AssemblageTable.CATProduct index 08ed417..f7cb946 100644 Binary files a/meca/Coupe 2010/AssemblageTable.CATProduct and b/meca/Coupe 2010/AssemblageTable.CATProduct differ diff --git a/meca/Coupe 2010/Corps mais fixe.CATPart b/meca/Coupe 2010/Corps mais fixe.CATPart new file mode 100644 index 0000000..52a41b2 Binary files /dev/null and b/meca/Coupe 2010/Corps mais fixe.CATPart differ diff --git a/meca/Coupe 2010/Table.CATPart b/meca/Coupe 2010/Table.CATPart index e5136bf..ff25f6b 100644 Binary files a/meca/Coupe 2010/Table.CATPart and b/meca/Coupe 2010/Table.CATPart differ diff --git a/meca/Coupe 2010/Vis mais fixe.CATPart b/meca/Coupe 2010/Vis mais fixe.CATPart new file mode 100644 index 0000000..debcfb0 Binary files /dev/null and b/meca/Coupe 2010/Vis mais fixe.CATPart differ diff --git a/meca/Niveau 1 bac.CATPart b/meca/Niveau 1 bac.CATPart index 7ef95d5..b710419 100644 Binary files a/meca/Niveau 1 bac.CATPart and b/meca/Niveau 1 bac.CATPart differ diff --git a/meca/Niveau 1.CATPart b/meca/Niveau 1.CATPart index f39babc..6ef5a18 100644 Binary files a/meca/Niveau 1.CATPart and b/meca/Niveau 1.CATPart differ hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-01-24 23:43:49
|
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 b93033c7b5c062dc44998cdb1df582ee01b95597 (commit) from 6bfa05ca9a1c7204535c02220bd25271a2a5f529 (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 b93033c7b5c062dc44998cdb1df582ee01b95597 Author: Olivier BICHLER <oli...@gm...> Date: Sun Jan 24 23:49:13 2010 +0100 Modification des moyeux roues omni ----------------------------------------------------------------------- Changes: diff --git a/meca/Moyeu omni 1.CATPart b/meca/Moyeu omni 1.CATPart index bdd4b81..70a31ec 100644 Binary files a/meca/Moyeu omni 1.CATPart and b/meca/Moyeu omni 1.CATPart differ diff --git a/meca/Moyeu omni 2.CATPart b/meca/Moyeu omni 2.CATPart index 0eb0f22..cf537d5 100644 Binary files a/meca/Moyeu omni 2.CATPart and b/meca/Moyeu omni 2.CATPart differ hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-01-24 23:30:22
|
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 ad72166e25526315507c05c0a833b04c5b25fe89 (commit) from b93033c7b5c062dc44998cdb1df582ee01b95597 (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 ad72166e25526315507c05c0a833b04c5b25fe89 Author: Xavier Lagorce <Xav...@cr...> Date: Mon Jan 25 00:29:40 2010 +0100 Élargissement du "mur" du moyeu pour qu'il soit rigide après impression 3D ----------------------------------------------------------------------- Changes: diff --git a/meca/Moyeu omni 2.CATPart b/meca/Moyeu omni 2.CATPart index cf537d5..2d48173 100644 Binary files a/meca/Moyeu omni 2.CATPart and b/meca/Moyeu omni 2.CATPart differ hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-01-24 22:27:50
|
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 6bfa05ca9a1c7204535c02220bd25271a2a5f529 (commit) from c603cc5adbc68bb8ed2b7426d39cd248054d5424 (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 6bfa05ca9a1c7204535c02220bd25271a2a5f529 Author: Olivier BICHLER <oli...@gm...> Date: Sun Jan 24 23:27:13 2010 +0100 Ajout de quelques trous d'assemblage ----------------------------------------------------------------------- Changes: diff --git a/meca/Base assemblee.CATProduct b/meca/Base assemblee.CATProduct index 82365cd..ec7dd85 100644 Binary files a/meca/Base assemblee.CATProduct and b/meca/Base assemblee.CATProduct differ diff --git a/meca/Base.CATPart b/meca/Base.CATPart index 9c67dc6..be80c88 100644 Binary files a/meca/Base.CATPart and b/meca/Base.CATPart differ diff --git a/meca/Bras tige 1.CATPart b/meca/Bras tige 1.CATPart index c2e82de..1b43864 100644 Binary files a/meca/Bras tige 1.CATPart and b/meca/Bras tige 1.CATPart differ diff --git a/meca/Bras.CATProduct b/meca/Bras.CATProduct index f762dea..9df551c 100644 Binary files a/meca/Bras.CATProduct and b/meca/Bras.CATProduct differ diff --git a/meca/Cartes/Alim Pico-ITX.CATPart b/meca/Cartes/Alim Pico-ITX.CATPart index 6246d9d..d686bf1 100644 Binary files a/meca/Cartes/Alim Pico-ITX.CATPart and b/meca/Cartes/Alim Pico-ITX.CATPart differ diff --git a/meca/Cartes/CarteAsservissement.CATPart b/meca/Cartes/CarteAsservissement.CATPart index 7560a8b..f214088 100644 Binary files a/meca/Cartes/CarteAsservissement.CATPart and b/meca/Cartes/CarteAsservissement.CATPart differ diff --git a/meca/Niveau 1 bac.CATPart b/meca/Niveau 1 bac.CATPart index 90b4b8d..7ef95d5 100644 Binary files a/meca/Niveau 1 bac.CATPart and b/meca/Niveau 1 bac.CATPart differ diff --git a/meca/Niveau 1.CATPart b/meca/Niveau 1.CATPart index 9e6803c..f39babc 100644 Binary files a/meca/Niveau 1.CATPart and b/meca/Niveau 1.CATPart differ diff --git a/meca/Support BH0102-40-606.CATPart b/meca/Support BH0102-40-606.CATPart index 19a9651..c4e9431 100644 Binary files a/meca/Support BH0102-40-606.CATPart and b/meca/Support BH0102-40-606.CATPart differ diff --git a/meca/Support axe porte.CATPart b/meca/Support axe porte.CATPart index 8cdad89..c6df0d3 100644 Binary files a/meca/Support axe porte.CATPart and b/meca/Support axe porte.CATPart differ diff --git a/meca/Support bras.CATPart b/meca/Support bras.CATPart index b4cbe70..2073f45 100644 Binary files a/meca/Support bras.CATPart and b/meca/Support bras.CATPart differ diff --git a/meca/Support moteur C03092.CATPart b/meca/Support moteur C03092.CATPart index 89b5b37..dbdc7a3 100644 Binary files a/meca/Support moteur C03092.CATPart and b/meca/Support moteur C03092.CATPart differ hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-01-24 21:56:20
|
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 c603cc5adbc68bb8ed2b7426d39cd248054d5424 (commit) from 345f6c6336afc7daf0b9920c87fea4b5328b9b13 (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 c603cc5adbc68bb8ed2b7426d39cd248054d5424 Author: Olivier BICHLER <oli...@gm...> Date: Sun Jan 24 22:55:32 2010 +0100 Ajout des trous d'assemblage et de texte sur les cartes ! ----------------------------------------------------------------------- Changes: diff --git a/meca/Bac cote 2.CATPart b/meca/Bac cote 2.CATPart index 6a852ca..ebfa09a 100644 Binary files a/meca/Bac cote 2.CATPart and b/meca/Bac cote 2.CATPart differ diff --git a/meca/Base assemblee.CATProduct b/meca/Base assemblee.CATProduct index 07e1172..82365cd 100644 Binary files a/meca/Base assemblee.CATProduct and b/meca/Base assemblee.CATProduct differ diff --git a/meca/Base.CATPart b/meca/Base.CATPart index 46f5f91..9c67dc6 100644 Binary files a/meca/Base.CATPart and b/meca/Base.CATPart differ diff --git a/meca/Bras.CATProduct b/meca/Bras.CATProduct index 621ee75..f762dea 100644 Binary files a/meca/Bras.CATProduct and b/meca/Bras.CATProduct differ diff --git a/meca/Cartes/Alim Pico-ITX.CATPart b/meca/Cartes/Alim Pico-ITX.CATPart index 1c715e9..6246d9d 100644 Binary files a/meca/Cartes/Alim Pico-ITX.CATPart and b/meca/Cartes/Alim Pico-ITX.CATPart differ diff --git a/meca/Cartes/CarteAsservissement.CATPart b/meca/Cartes/CarteAsservissement.CATPart index a7831e1..7560a8b 100644 Binary files a/meca/Cartes/CarteAsservissement.CATPart and b/meca/Cartes/CarteAsservissement.CATPart differ diff --git a/meca/Cartes/Monitoring batteries.CATPart b/meca/Cartes/Monitoring batteries.CATPart index 12de653..5875258 100644 Binary files a/meca/Cartes/Monitoring batteries.CATPart and b/meca/Cartes/Monitoring batteries.CATPart differ diff --git a/meca/Cartes/PontH.CATPart b/meca/Cartes/PontH.CATPart index 2618469..1ee0f07 100644 Binary files a/meca/Cartes/PontH.CATPart and b/meca/Cartes/PontH.CATPart differ diff --git a/meca/Cartes/VIA EPIA P700.CATPart b/meca/Cartes/VIA EPIA P700.CATPart index 2fd39fc..dce61ec 100644 Binary files a/meca/Cartes/VIA EPIA P700.CATPart and b/meca/Cartes/VIA EPIA P700.CATPart differ diff --git a/meca/Niveau 1 bac.CATPart b/meca/Niveau 1 bac.CATPart index 0e35572..90b4b8d 100644 Binary files a/meca/Niveau 1 bac.CATPart and b/meca/Niveau 1 bac.CATPart differ diff --git a/meca/Niveau 1.CATPart b/meca/Niveau 1.CATPart index 95250d7..9e6803c 100644 Binary files a/meca/Niveau 1.CATPart and b/meca/Niveau 1.CATPart differ hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-01-24 17:46:55
|
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 345f6c6336afc7daf0b9920c87fea4b5328b9b13 (commit) from 4d157b10ac1e297a02842550b70afae5eeaf04f4 (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 345f6c6336afc7daf0b9920c87fea4b5328b9b13 Author: Olivier BICHLER <oli...@gm...> Date: Sun Jan 24 18:46:17 2010 +0100 Repositionnement du bras et ajout de la carte mère et de son alim ----------------------------------------------------------------------- Changes: diff --git a/meca/Assemblage moteur.CATProduct b/meca/Assemblage moteur.CATProduct index 55b4e16..c0488fd 100644 Binary files a/meca/Assemblage moteur.CATProduct and b/meca/Assemblage moteur.CATProduct differ diff --git a/meca/Bac cote 1.CATPart b/meca/Bac cote 1.CATPart index 2747f4e..621ee73 100644 Binary files a/meca/Bac cote 1.CATPart and b/meca/Bac cote 1.CATPart differ diff --git a/meca/Bac cote 2.CATPart b/meca/Bac cote 2.CATPart index 3a20875..6a852ca 100644 Binary files a/meca/Bac cote 2.CATPart and b/meca/Bac cote 2.CATPart differ diff --git a/meca/Base assemblee.CATProduct b/meca/Base assemblee.CATProduct index caa99fe..07e1172 100644 Binary files a/meca/Base assemblee.CATProduct and b/meca/Base assemblee.CATProduct differ diff --git a/meca/Base.CATPart b/meca/Base.CATPart index e03b7ba..46f5f91 100644 Binary files a/meca/Base.CATPart and b/meca/Base.CATPart differ diff --git a/meca/Bras tige 1.CATPart b/meca/Bras tige 1.CATPart index ff25527..c2e82de 100644 Binary files a/meca/Bras tige 1.CATPart and b/meca/Bras tige 1.CATPart differ diff --git a/meca/Bras.CATProduct b/meca/Bras.CATProduct index c674616..621ee75 100644 Binary files a/meca/Bras.CATProduct and b/meca/Bras.CATProduct differ diff --git a/meca/Cartes/Alim Pico-ITX.CATPart b/meca/Cartes/Alim Pico-ITX.CATPart new file mode 100644 index 0000000..1c715e9 Binary files /dev/null and b/meca/Cartes/Alim Pico-ITX.CATPart differ diff --git a/meca/Cartes/CarteAsservissement.CATPart b/meca/Cartes/CarteAsservissement.CATPart index 546a157..a7831e1 100644 Binary files a/meca/Cartes/CarteAsservissement.CATPart and b/meca/Cartes/CarteAsservissement.CATPart differ diff --git a/meca/Cartes/VIA EPIA P700.CATPart b/meca/Cartes/VIA EPIA P700.CATPart new file mode 100644 index 0000000..2fd39fc Binary files /dev/null and b/meca/Cartes/VIA EPIA P700.CATPart differ diff --git a/meca/Coupe 2010/AssemblageTable.CATProduct b/meca/Coupe 2010/AssemblageTable.CATProduct index 74e7189..08ed417 100644 Binary files a/meca/Coupe 2010/AssemblageTable.CATProduct and b/meca/Coupe 2010/AssemblageTable.CATProduct differ diff --git a/meca/Niveau 1 bac.CATPart b/meca/Niveau 1 bac.CATPart index 7dd1e97..0e35572 100644 Binary files a/meca/Niveau 1 bac.CATPart and b/meca/Niveau 1 bac.CATPart differ diff --git a/meca/Niveau 1.CATPart b/meca/Niveau 1.CATPart index c2e7b39..95250d7 100644 Binary files a/meca/Niveau 1.CATPart and b/meca/Niveau 1.CATPart differ diff --git a/meca/Support axe porte.CATPart b/meca/Support axe porte.CATPart index ad47b3c..8cdad89 100644 Binary files a/meca/Support axe porte.CATPart and b/meca/Support axe porte.CATPart differ hooks/post-receive -- krobot |