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: oiffrig <Ba...@us...> - 2010-05-19 21:22:48
|
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 01b2cdeb8eb11b676481e41d063dffaa328d9a39 (commit) from 8fd8ec3e9dcd92b88815208378605cc61d4125bf (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 01b2cdeb8eb11b676481e41d063dffaa328d9a39 Author: Olivier Iffrig <if...@cr...> Date: Wed May 19 23:20:47 2010 +0200 Made ax12Configure a bit safer ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c index b985cfe..dd17855 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c @@ -134,19 +134,22 @@ void ax12SendPacket(uint8_t id, uint8_t instruction, uint8_t len, uint8_t *param chSysUnlock(); } -void ax12Configure(uint8_t id) { +void ax12Configure(uint8_t old_id, uint8_t new_id) { uint8_t paramsDelay[] = {P_RETURN_DELAY_TIME, 0x0A}; - uint8_t paramsID[] = {P_ID, id}; + uint8_t paramsID[] = {P_ID, new_id}; + // UNSAFE !! + /* // Reset default settings ax12SendPacket(ID_BROADCAST, INST_RESET, 0, NULL); chThdSleepMilliseconds(1); // Set response delay at maximum ax12SendPacket(ID_BROADCAST, INST_WRITE, sizeof(paramsDelay), paramsDelay); chThdSleepMilliseconds(1); + */ // Set ID - ax12SendPacket(ID_BROADCAST, INST_WRITE, sizeof(paramsID), paramsID); + ax12SendPacket(old_id, INST_WRITE, sizeof(paramsID), paramsID); chThdSleepMilliseconds(1); } diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.h index 1bc22a9..a685bcc 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.h +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.h @@ -126,7 +126,7 @@ void ax12Init(void); void ax12SendPacket(uint8_t id, uint8_t instruction, uint8_t len, uint8_t *params); -void ax12Configure(uint8_t id); +void ax12Configure(uint8_t old_id, uint8_t new_id); void ax12Goto(uint8_t id, uint16_t position, uint16_t speed, uint8_t mode); void ax12Action(uint8_t id); void ax12Ping(uint8_t id); diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c index d798cab..abf1662 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c @@ -200,7 +200,7 @@ void liftHandler(BaseChannel *chp, int argc, char* argv[]) { void ax12Handler(BaseChannel *chp, int argc, char* argv[]) { - uint8_t id; + uint8_t id, new_id; uint16_t pos, spd; if (argc < 2) { @@ -211,11 +211,12 @@ void ax12Handler(BaseChannel *chp, int argc, char* argv[]) { id = atoi_h(argv[1]); if(strcmp(argv[0], "config") == 0) { - if (argc != 2) { - shellPrintLine(chp, "Usage : ax12 config id"); + if (argc != 3) { + shellPrintLine(chp, "Usage : ax12 config old_id new_id"); return; } - ax12Configure(id); + new_id = atoi_h(argv[2]); + ax12Configure(id, new_id); } else if(strcmp(argv[0], "goto") == 0) { if (argc != 4) { hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-19 09:52:07
|
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 8fd8ec3e9dcd92b88815208378605cc61d4125bf (commit) from b25653dbb69c8bfeeaaf7428192a3c431aa28157 (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 8fd8ec3e9dcd92b88815208378605cc61d4125bf Author: Jérémie Dimino <je...@di...> Date: Wed May 19 11:49:34 2010 +0200 use the new standard ProeprtiesChanged signal to monitor D-Bus properties ----------------------------------------------------------------------- Changes: diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index 078baa5..ae34e5b 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -16,9 +16,6 @@ open Lwt module String_map = Map.Make(String) -(* THe notification mode for all interfaces: *) -let notify_mode = OBus_object.notify_update "PropertiesChanged" - (* +-----------------------------------------------------------------+ | Cards | +-----------------------------------------------------------------+ *) @@ -165,7 +162,7 @@ struct let () = OBus_object.add_interfaces obus - [make ~notify_mode + [make { m_SetBuzzerState = ( fun ctx obj state -> @@ -190,7 +187,7 @@ struct let () = OBus_object.add_interfaces obus - [make ~notify_mode + [make { p_Value = (fun () -> React.S.map Int32.of_int value); }] @@ -227,7 +224,7 @@ struct let () = OBus_object.add_interfaces obus - [make ~notify_mode + [make { m_Set = ( fun ctx () lines -> @@ -274,7 +271,7 @@ struct let () = OBus_object.add_interfaces obus - [make ~notify_mode { + [make { m_Enable = ( fun ctx obj () -> lwt result = claws_enable obj in @@ -429,7 +426,7 @@ struct let () = OBus_object.add_interfaces obus - [make ~notify_mode + [make { m_Up = ( fun ctx obj () -> @@ -598,7 +595,7 @@ struct let () = OBus_object.add_interfaces obus - [make ~notify_mode + [make { p_States = (fun () -> React.S.map (fun ar -> List.map Int32.of_int (Array.to_list ar)) states); m_GoLeft = ( @@ -653,7 +650,7 @@ struct let () = OBus_object.add_interfaces obus - [make ~notify_mode + [make { p_Value = (fun () -> React.S.map Array.to_list value); }] @@ -688,7 +685,7 @@ struct let () = OBus_object.add_interfaces obus - [make ~notify_mode + [make { p_Value = (fun () -> React.S.map (fun x -> List.map Int32.of_int (Array.to_list x)) value); }] @@ -724,7 +721,7 @@ struct let () = OBus_object.add_interfaces obus - [make ~notify_mode + [make { m_Enable = ( fun ctx obj () -> @@ -1067,7 +1064,7 @@ struct let () = OBus_object.add_interfaces obus - [make ~notify_mode + [make { m_Turn = ( fun ctx () (angle, velocity, acceleration) -> @@ -1164,7 +1161,7 @@ struct let () = OBus_object.attach obus (); OBus_object.add_interfaces obus - [make ~notify_mode + [make { p_ServicesStatus = (fun () -> services_status); m_Shutdown = ( @@ -1214,7 +1211,6 @@ struct OBus_object.make ~interfaces:[Export_unsafe.interface "Card" card; Krobot_interfaces.Fr_krobot_Card.make - ~notify_mode:(OBus_object.notify_update "PropertiesChanged") { p_Name = (fun obj -> React.S.const card.card_name); p_State = (fun obj -> React.S.map int32_of_card_state obj.state); diff --git a/info/control/driver/export_unsafe.ml b/info/control/driver/export_unsafe.ml index 6e1d478..77b1a22 100644 --- a/info/control/driver/export_unsafe.ml +++ b/info/control/driver/export_unsafe.ml @@ -48,7 +48,7 @@ let make_method card cmd = card.card_name) let make_interface card name commands = - OBus_object.make_interface name ~notify_mode:OBus_object.notify_none (List.map (make_method card) commands) + OBus_object.make_interface name (List.map (make_method card) commands) let interface name card = let interface_commands = List.assoc name commands in diff --git a/info/control/lib-krobot/krobot.ml b/info/control/lib-krobot/krobot.ml index 86cec74..d0543c5 100644 --- a/info/control/lib-krobot/krobot.ml +++ b/info/control/lib-krobot/krobot.ml @@ -12,10 +12,6 @@ let section = Lwt_log.Section.make "krobot" open Lwt open Types -(* The notification mode used by all D-Bus interfaces of the - Krobot: *) -let notify_mode = OBus_property.notify_update "PropertiesChanged" - (* +-----------------------------------------------------------------+ | Types | +-----------------------------------------------------------------+ *) @@ -60,7 +56,7 @@ let services_status krobot = srv_power = List.assoc "Power" l; }) (OBus_property.make - ~notify_mode + Krobot_interfaces.Fr_krobot_Manager.p_ServicesStatus (OBus_proxy.make krobot ["fr"; "krobot"; "Manager"])) @@ -78,7 +74,7 @@ struct let states krobot = OBus_property.map_r (fun l -> Array.of_list (List.map Int32.to_int l)) - (OBus_property.make ~notify_mode p_States (service krobot "Infrared")) + (OBus_property.make p_States (service krobot "Infrared")) let go_left krobot = OBus_method.call m_GoLeft (service krobot "Infrared") () @@ -109,7 +105,7 @@ struct OBus_method.call m_SetBuzzerState (service krobot "Power") state let current krobot = - OBus_property.map_r Int32.to_int (OBus_property.make ~notify_mode p_Current (service krobot "Power")) + OBus_property.map_r Int32.to_int (OBus_property.make p_Current (service krobot "Power")) end (* +-----------------------------------------------------------------+ @@ -148,7 +144,7 @@ struct open Krobot_interfaces.Fr_krobot_Service_Compass let measure krobot = - OBus_property.map_r Int32.to_int (OBus_property.make p_Value ~notify_mode (service krobot "Compass")) + OBus_property.map_r Int32.to_int (OBus_property.make p_Value (service krobot "Compass")) end (* +-----------------------------------------------------------------+ @@ -162,7 +158,7 @@ struct let states krobot = OBus_property.map_r Array.of_list - (OBus_property.make p_Value ~notify_mode (service krobot "LogicSensors")) + (OBus_property.make p_Value (service krobot "LogicSensors")) end (* +-----------------------------------------------------------------+ @@ -194,7 +190,7 @@ struct let measures krobot = OBus_property.map_r (fun l -> Array.of_list (List.map Int32.to_int l)) - (OBus_property.make p_Value ~notify_mode (service krobot "RangeFinders")) + (OBus_property.make p_Value (service krobot "RangeFinders")) end (* +-----------------------------------------------------------------+ @@ -283,13 +279,13 @@ struct duration) let inhibit_forward_until krobot = - OBus_property.make p_InhibitForwardUntil ~notify_mode (service krobot "Motors") + OBus_property.make p_InhibitForwardUntil (service krobot "Motors") let inhibit_backward_until krobot = - OBus_property.make p_InhibitBackwardUntil ~notify_mode (service krobot "Motors") + OBus_property.make p_InhibitBackwardUntil (service krobot "Motors") let state krobot = - OBus_property.make p_State ~notify_mode (service krobot "Motors") + OBus_property.make p_State (service krobot "Motors") end (* +-----------------------------------------------------------------+ @@ -372,7 +368,7 @@ struct let state krobot c = OBus_property.map_r card_state_of_int32 - (OBus_property.make ~notify_mode p_State (card krobot c)) + (OBus_property.make p_State (card krobot c)) let errors krobot c = OBus_signal.connect s_Error (card krobot c) diff --git a/info/control/protocol/krobot.obus b/info/control/protocol/krobot.obus index dcc78b3..6daf8cf 100644 --- a/info/control/protocol/krobot.obus +++ b/info/control/protocol/krobot.obus @@ -9,10 +9,6 @@ (** This file contains definition of DBus interfaces used by the driver and the clients. - - Note that all interfaces contains a member [PropertiesChanged] - which is used to notify clients that at least one property of the - interface have changed. *) interface "fr.krobot.Service.Power" { @@ -55,8 +51,6 @@ interface "fr.krobot.Service.Gate" { interface "fr.krobot.Service.Compass" { property.r Value : int32 (** Current value of the compass *) - - signal PropertiesChanged : (properties : (string, variant) dict) } interface "fr.krobot.Service.LCD" { @@ -65,8 +59,6 @@ interface "fr.krobot.Service.LCD" { method BacklightOn : () -> () method BacklightOff : () -> () - - signal PropertiesChanged : (properties : (string, variant) dict) } interface "fr.krobot.Service.Claws" { @@ -82,8 +74,6 @@ interface "fr.krobot.Service.Claws" { method Take : () -> () (** Put the claws in a position allowing to capture a ball *) - - signal PropertiesChanged : (properties : (string, variant) dict) } interface "fr.krobot.Service.Grip" { @@ -93,20 +83,14 @@ interface "fr.krobot.Service.Grip" { method Open : () -> () method Close : () -> () method Release : () -> () - - signal PropertiesChanged : (properties : (string, variant) dict) } interface "fr.krobot.Service.LogicSensors" { property.r Value : boolean array - - signal PropertiesChanged : (properties : (string, variant) dict) } interface "fr.krobot.Service.RangeFinders" { property.r Value : int32 array - - signal PropertiesChanged : (properties : (string, variant) dict) } interface "fr.krobot.Service.Motors" { @@ -127,8 +111,6 @@ interface "fr.krobot.Service.Motors" { property.rw InhibitForwardUntil : double property.rw InhibitBackwardUntil : double - - signal PropertiesChanged : (properties : (string, variant) dict) } interface "fr.krobot.Manager" { @@ -137,8 +119,6 @@ interface "fr.krobot.Manager" { method Shutdown : () -> () (** Shutdown the driver *) - - signal PropertiesChanged : (properties : (string, variant) dict) } interface "fr.krobot.Card" { hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-05-18 23:51: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 b25653dbb69c8bfeeaaf7428192a3c431aa28157 (commit) from d05c9f4fcaf087b3c8d806193618f7e33659394a (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 b25653dbb69c8bfeeaaf7428192a3c431aa28157 Author: Xavier Lagorce <Xav...@cr...> Date: Wed May 19 01:50:40 2010 +0200 Stop the motors after the given time... ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c index d6865e5..d798cab 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c @@ -176,6 +176,7 @@ void moveHandler(BaseChannel *chp, int argc, char* argv[]) { canSetScrew(ptX, ptY, vX, vY, omega); chThdSleepMilliseconds(t); + canSetScrew(0, 0, 0, 0, 0); } void liftHandler(BaseChannel *chp, int argc, char* argv[]) { hooks/post-receive -- krobot |
From: oiffrig <Ba...@us...> - 2010-05-18 23:35:38
|
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 d05c9f4fcaf087b3c8d806193618f7e33659394a (commit) from e210cf32046edcd41ea8d62c4f6d323ad3d6ce25 (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 d05c9f4fcaf087b3c8d806193618f7e33659394a Author: Olivier Iffrig <if...@cr...> Date: Wed May 19 01:35:00 2010 +0200 Added AX-12 handler ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c index d8808f0..d6865e5 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c @@ -253,6 +253,7 @@ static const ShellCommand commands[] = { {"getSpeed", getSpeedHandler}, {"move", moveHandler}, {"lift", liftHandler}, + {"ax12", ax12Handler}, {NULL, NULL} }; hooks/post-receive -- krobot |
From: oiffrig <Ba...@us...> - 2010-05-18 23:31:35
|
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 e210cf32046edcd41ea8d62c4f6d323ad3d6ce25 (commit) from d9ffe60d59e2f1028b71a01b1d4e0b095510dbef (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 e210cf32046edcd41ea8d62c4f6d323ad3d6ce25 Author: Olivier Iffrig <if...@cr...> Date: Wed May 19 01:30:17 2010 +0200 Serial interface for AX-12 ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c index 97fe585..d8808f0 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c @@ -182,8 +182,8 @@ void liftHandler(BaseChannel *chp, int argc, char* argv[]) { uint16_t h; - if (argc != 1 && argc != 2) { - shellPrintLine(chp, "Usage : lift (up|down|move h)"); + if (argc != 1) { + shellPrintLine(chp, "Usage : lift (up|down|h)"); return; } @@ -191,18 +191,56 @@ void liftHandler(BaseChannel *chp, int argc, char* argv[]) { h = LIFT_UP; else if(strcmp(argv[0], "down") == 0) h = LIFT_DOWN; - else if(strcmp(argv[0], "move") == 0) { - if(argc != 2) { - shellPrintLine(chp, "Usage : lift (up|down|move h)"); - return; - } + else h = atoi_h(argv[1]); + + liftGoto(h); +} + +void ax12Handler(BaseChannel *chp, int argc, char* argv[]) { + + uint8_t id; + uint16_t pos, spd; + + if (argc < 2) { + shellPrintLine(chp, "Usage : ax12 (config|goto|goto_delayed|action) id ..."); + return; + } + + id = atoi_h(argv[1]); + + if(strcmp(argv[0], "config") == 0) { + if (argc != 2) { + shellPrintLine(chp, "Usage : ax12 config id"); + return; + } + ax12Configure(id); + } + else if(strcmp(argv[0], "goto") == 0) { + if (argc != 4) { + shellPrintLine(chp, "Usage : ax12 goto id pos speed"); + return; + } + pos = atoi_h(argv[2]); + spd = atoi_h(argv[3]); + ax12Goto(id, pos, spd, CMD_NOW); + } + else if(strcmp(argv[0], "goto_delayed") == 0) { + if (argc != 4) { + shellPrintLine(chp, "Usage : ax12 goto_delayed id pos speed"); + return; + } + pos = atoi_h(argv[2]); + spd = atoi_h(argv[3]); + ax12Goto(id, pos, spd, CMD_ACTION); + } + else if(strcmp(argv[0], "action") == 0) { + ax12Action(id); } else { - shellPrintLine(chp, "Usage : lift (up|down|move h)"); + shellPrintLine(chp, "Usage : ax12 (config|goto|goto_delayed|action) ..."); return; } - liftGoto(h); } /* diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h index 588c86a..77fb7ed 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h @@ -19,6 +19,7 @@ #include "hal.h" #include "shell.h" #include "can_monitor.h" +#include "ax12.h" #include "lift.h" extern Thread *cdtp; hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-05-18 22:44:30
|
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 d9ffe60d59e2f1028b71a01b1d4e0b095510dbef (commit) via c4316748672e6ceaf721f27f5d13325aafaacd55 (commit) from d542edc38e91ec78cb02cff00a424482e0ed4431 (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 d9ffe60d59e2f1028b71a01b1d4e0b095510dbef Author: Xavier Lagorce <Xav...@cr...> Date: Wed May 19 00:39:16 2010 +0200 Modifications in AX12 communication code. The communication direction management is now automatic. Added new functions to manage AX12s FIXME : the first byte sent on the USART is not correctly sent, so one dummy byte is sent at AX12s init. There may be a better way to fix this problem... commit c4316748672e6ceaf721f27f5d13325aafaacd55 Author: Xavier Lagorce <Xav...@cr...> Date: Tue May 18 23:20:06 2010 +0200 Now working AX12 communication (at least TX) ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c index 2c59100..b985cfe 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c @@ -107,6 +107,7 @@ void ax12Init(void) { palSetPad(IOPORT1, 1); // reading mode sdStart(&SD2, &ax12_config); + chIOPut(ax12_chp, 0xFF); //chThdCreateStatic(waThreadAX12Rec, sizeof(waThreadAX12Rec), NORMALPRIO+1, ThreadAX12Rec, NULL); } @@ -119,10 +120,7 @@ void ax12SendPacket(uint8_t id, uint8_t instruction, uint8_t len, uint8_t *param chksum += params[i]; chksum = ~chksum; - // Writing mode - palClearPad(IOPORT1, 1); - - for (j=0; j < 1000; j++); + chSysLock(); chIOPut(ax12_chp, 0xFF); chIOPut(ax12_chp, 0xFF); @@ -133,13 +131,42 @@ void ax12SendPacket(uint8_t id, uint8_t instruction, uint8_t len, uint8_t *param chIOPut(ax12_chp, params[i]); chIOPut(ax12_chp, chksum); - chSysLock(); + chSysUnlock(); +} - while (chIOPutWouldBlock(ax12_chp)) ; +void ax12Configure(uint8_t id) { - chThdSleep(1); + uint8_t paramsDelay[] = {P_RETURN_DELAY_TIME, 0x0A}; + uint8_t paramsID[] = {P_ID, id}; - chSysUnlock(); + // Reset default settings + ax12SendPacket(ID_BROADCAST, INST_RESET, 0, NULL); + chThdSleepMilliseconds(1); + // Set response delay at maximum + ax12SendPacket(ID_BROADCAST, INST_WRITE, sizeof(paramsDelay), paramsDelay); + chThdSleepMilliseconds(1); + // Set ID + ax12SendPacket(ID_BROADCAST, INST_WRITE, sizeof(paramsID), paramsID); + chThdSleepMilliseconds(1); + +} + +void ax12Goto(uint8_t id, uint16_t position, uint16_t speed, uint8_t mode) { + + uint8_t paramsGoto[] = {P_GOAL_POSITION, position%256, position/256, speed%256, speed/256}; + + if (mode == CMD_ACTION) + ax12SendPacket(id, INST_REG_WRITE, sizeof(paramsGoto), paramsGoto); + else + ax12SendPacket(id, INST_WRITE, sizeof(paramsGoto), paramsGoto); +} + +void ax12Action(uint8_t id) { + + ax12SendPacket(id, INST_ACTION, 0, NULL); +} + +void ax12Ping(uint8_t id) { - palSetPad(IOPORT1, 1); + ax12SendPacket(id, INST_PING, 0, NULL); } diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.h index e46a9fb..1bc22a9 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.h +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.h @@ -108,11 +108,28 @@ // --- Valeurs specifiques --- #define ID_BROADCAST 0xFE -// Événements +// Events #define EVT_AX12_ERROR 1 #define EVT_AX12_PACKET 2 +// Command modes +#define CMD_NOW 1 +#define CMD_ACTION 2 + +// AX12 names +#define AX12_ARM1 1 +#define AX12_GRIP1 2 +#define AX12_ARM2 3 +#define AX12_GRIP2 4 +#define AX12_ARM3 5 +#define AX12_GRIP3 6 + void ax12Init(void); void ax12SendPacket(uint8_t id, uint8_t instruction, uint8_t len, uint8_t *params); +void ax12Configure(uint8_t id); +void ax12Goto(uint8_t id, uint16_t position, uint16_t speed, uint8_t mode); +void ax12Action(uint8_t id); +void ax12Ping(uint8_t id); + #endif diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/hal/platforms/STM32/serial_lld.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/hal/platforms/STM32/serial_lld.c index 99a8653..842be3e 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/hal/platforms/STM32/serial_lld.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/hal/platforms/STM32/serial_lld.c @@ -178,6 +178,56 @@ static void serve_interrupt(SerialDriver *sdp) { } } +/** + * @brief Common IRQ handler for rs485. + * + * @param[in] sdp communication channel associated to the USART + */ + +static void serve_interruptAX12(SerialDriver *sdp) { + + USART_TypeDef *u = sdp->usart; + uint16_t cr1 = u->CR1; + uint16_t sr = u->SR; /* SR reset step 1.*/ + uint16_t dr = u->DR; /* SR reset step 2.*/ + + if (sr & (USART_SR_LBD | USART_SR_ORE | USART_SR_NE | + USART_SR_FE | USART_SR_PE)) { + set_error(sdp, sr); + u->SR = 0; /* Clears the LBD bit in the SR.*/ + } + + if (sr & USART_SR_RXNE) { + chSysLockFromIsr(); + sdIncomingDataI(sdp, (uint8_t)dr); + chSysUnlockFromIsr(); + } + + if ((cr1 & USART_CR1_TXEIE) && (sr & USART_SR_TXE)) { + msg_t b; + chSysLockFromIsr(); + b = chOQGetI(&sdp->oqueue); + if (b < Q_OK) { + chEvtBroadcastI(&sdp->oevent); + u->CR1 &= ~USART_CR1_TXEIE; /* Deshabilito interrupcion por Data Register Empty */ + u->CR1 |= USART_CR1_TCIE; /* y la habilito para cuando termine la transmision */ + } + else { + palClearPad(IOPORT1, 1); + u->DR = b; + } + + chSysUnlockFromIsr(); + } + + if (sr & USART_SR_TC) { + palSetPad(IOPORT1, 1); /* Desactivo TX */ // antes TXRX1_PIN + u->CR1 &= ~USART_CR1_TCIE; /* Deshabilito interrupcion por Transmision completed */ + u->SR &= ~USART_SR_TC; /* quito el flag de Transmision Complete */ + } +} + + #if USE_STM32_USART1 || defined(__DOXYGEN__) static void notify1(void) { @@ -235,7 +285,7 @@ CH_IRQ_HANDLER(VectorD8) { CH_IRQ_PROLOGUE(); - serve_interrupt(&SD2); + serve_interruptAX12(&SD2); CH_IRQ_EPILOGUE(); } hooks/post-receive -- krobot |
From: oiffrig <Ba...@us...> - 2010-05-18 22:41: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 d542edc38e91ec78cb02cff00a424482e0ed4431 (commit) from cbac0a188371704814e4d9a0e96e857c412900b2 (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 d542edc38e91ec78cb02cff00a424482e0ed4431 Author: Olivier Iffrig <if...@cr...> Date: Wed May 19 00:39:45 2010 +0200 Handmade atoi, the built-in one crashes... ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c index e412837..97fe585 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c @@ -10,6 +10,32 @@ Thread *cdtp; /* + * Handmade atoi, because the one from standard lib does not work + */ +int32_t atoi_h(char *str) { + int32_t res = 0; + uint8_t neg = 0; + + while(isspace((int)*str)) + str++; + + switch(*str) { + case '-': + neg = 1; + case '+': + str++; + break; + } + + for(; isdigit((int)*str); str++) { + res *= 10; + res += *str - '0'; + } + + return neg? -res : res; +} + +/* * Thread to print text into the monitor in a thread safe way */ static msg_t consoleThread(void* arg) { @@ -141,12 +167,12 @@ void moveHandler(BaseChannel *chp, int argc, char* argv[]) { shellPrintLine(chp, "Usage : move ptX ptY vX vY omega t"); return; } - ptX = atoi(argv[0]); - ptY = atoi(argv[1]); - vX = atoi(argv[2]); - vY = atoi(argv[3]); - omega = atoi(argv[4]); - t = atoi(argv[5]); + ptX = atoi_h(argv[0]); + ptY = atoi_h(argv[1]); + vX = atoi_h(argv[2]); + vY = atoi_h(argv[3]); + omega = atoi_h(argv[4]); + t = atoi_h(argv[5]); canSetScrew(ptX, ptY, vX, vY, omega); chThdSleepMilliseconds(t); @@ -170,7 +196,7 @@ void liftHandler(BaseChannel *chp, int argc, char* argv[]) { shellPrintLine(chp, "Usage : lift (up|down|move h)"); return; } - h = atoi(argv[1]); + h = atoi_h(argv[1]); } else { shellPrintLine(chp, "Usage : lift (up|down|move h)"); hooks/post-receive -- krobot |
From: Stephane G. <Ba...@us...> - 2010-05-18 22:16:18
|
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 cbac0a188371704814e4d9a0e96e857c412900b2 (commit) from d5f1d8ffbe7fc9e9f7d3f8fd3ba85b413253dafb (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 cbac0a188371704814e4d9a0e96e857c412900b2 Author: Stephane Glondu <st...@gl...> Date: Wed May 19 00:12:39 2010 +0200 Initial import of serial bindings ----------------------------------------------------------------------- Changes: diff --git a/info/ocaml-serial/.gitignore b/info/ocaml-serial/.gitignore new file mode 100644 index 0000000..cc9318f --- /dev/null +++ b/info/ocaml-serial/.gitignore @@ -0,0 +1,5 @@ +*.so +*.cm[xoai] +*.cmxa +*.o +*.a diff --git a/info/ocaml-serial/META b/info/ocaml-serial/META new file mode 100644 index 0000000..5488d29 --- /dev/null +++ b/info/ocaml-serial/META @@ -0,0 +1,2 @@ +archive(byte) = "serial.cma" +archive(native) = "serial.cmxa" diff --git a/info/ocaml-serial/Makefile b/info/ocaml-serial/Makefile new file mode 100644 index 0000000..7a5cddc --- /dev/null +++ b/info/ocaml-serial/Makefile @@ -0,0 +1,33 @@ +OCAMLFIND=ocamlfind +OCAMLC=ocamlc +OCAMLOPT=ocamlopt +OCAMLMKLIB=ocamlmklib +TO_COMPILE=serial.cma serial.cmxa +TO_INSTALL=$(wildcard *.cmi *.cma *.cmxa *.cmx *.a *.so) + +all: $(TO_COMPILE) + +clean: + rm -f *.cm* *.o *.a *.so + +install: + $(OCAMLFIND) install serial META $(TO_INSTALL) + +uninstall: + $(OCAMLFIND) remove serial + +reinstall: + -$(MAKE) uninstall + $(MAKE) install + +$(TO_COMPILE): serial.cmo serial.cmx serial_stubs.o + $(OCAMLMKLIB) -o serial $^ + +%.o: %.c + $(OCAMLC) -c $< + +%.cmo: %.ml + $(OCAMLC) -c $< + +%.cmx: %.ml + $(OCAMLOPT) -c $< diff --git a/info/ocaml-serial/serial.ml b/info/ocaml-serial/serial.ml new file mode 100644 index 0000000..d0b6430 --- /dev/null +++ b/info/ocaml-serial/serial.ml @@ -0,0 +1,22 @@ +(* + * serial.ml + * --------- + * Copyright : (c) 2010, Stéphane Glondu <st...@gl...> + * Licence : BSD3 + *) + +external crtscts : Unix.file_descr -> int = "ml_crtscts" +(** Enable RTS/CTS (hardware) flow control. See CRTSCTS in + tcsetattr(3). *) + +external tiocmget : Unix.file_descr -> int = "ml_tiocmget" +(** Get the status of modem bits. See TIOCMGET in tty_ioctl(4). *) + +external tiocmset : Unix.file_descr -> int -> int = "ml_tiocmset" +(** Set the satus of modem bits. See TIOCMSET in tty_ioctl(4). *) + +external tiocmbic : Unix.file_descr -> int -> int = "ml_tiocmbic" +(** Clear the indicated modem bits. See TIOCMBIC in tty_ioctl(4). *) + +external tiocmbis : Unix.file_descr -> int -> int = "ml_tiocmbis" +(** Set the indicated modem bits. See TIOCMBIC in tty_ioctl(4). *) diff --git a/info/ocaml-serial/serial_stubs.c b/info/ocaml-serial/serial_stubs.c new file mode 100644 index 0000000..bc6a40d --- /dev/null +++ b/info/ocaml-serial/serial_stubs.c @@ -0,0 +1,68 @@ +/* + * rx64.c + * ------ + * Copyright : (c) 2010, Stéphane Glondu <st...@gl...> + * Licence : BSD3 + */ + +#include <termios.h> +#include <sys/ioctl.h> +#include <caml/memory.h> +#include <caml/mlvalues.h> +#include <caml/fail.h> + +/* FIXME: proper error handling an OCaml wrapping... */ + +CAMLprim value ml_crtscts(value mlfd) +{ + CAMLparam1(mlfd); + struct termios t; + int r, fd = Int_val(mlfd); + + r = tcgetattr(fd, &t); + if (!r) { + t.c_cflag |= CRTSCTS; + r = tcsetattr(fd, TCSANOW, &t); + } + CAMLreturn(Val_int(r)); +} + +CAMLprim value ml_tiocmget(value mlfd) +{ + CAMLparam1(mlfd); + int arg = 0; + int fd = Int_val(mlfd); + + ioctl(fd, TIOCMGET, &arg); + CAMLreturn(Val_int(arg)); +} + +CAMLprim value ml_tiocmset(value mlfd, value mlarg) +{ + CAMLparam2(mlfd, mlarg); + int r, fd = Int_val(mlfd); + int arg = Int_val(mlarg); + + r = ioctl(fd, TIOCMSET, &arg); + CAMLreturn(Val_int(r)); +} + +CAMLprim value ml_tiocmbic(value mlfd, value mlarg) +{ + CAMLparam2(mlfd, mlarg); + int r, fd = Int_val(mlfd); + int arg = Int_val(mlarg); + + r = ioctl(fd, TIOCMBIC, &arg); + CAMLreturn(Val_int(r)); +} + +CAMLprim value ml_tiocmbis(value mlfd, value mlarg) +{ + CAMLparam2(mlfd, mlarg); + int fd = Int_val(mlfd), r; + int arg = Int_val(mlarg); + + r = ioctl(fd, TIOCMBIS, &arg); + CAMLreturn(Val_int(r)); +} hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-18 20:15:27
|
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 d5f1d8ffbe7fc9e9f7d3f8fd3ba85b413253dafb (commit) via deeb90a45c78c125a8d0bc6075559ecaae1bca8b (commit) from e3f33788e79e9241470742226c84c3e94bbcf028 (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 d5f1d8ffbe7fc9e9f7d3f8fd3ba85b413253dafb Author: Jérémie Dimino <je...@di...> Date: Tue May 18 22:14:38 2010 +0200 show when a command returns, even if it returns nothing commit deeb90a45c78c125a8d0bc6075559ecaae1bca8b Author: Jérémie Dimino <je...@di...> Date: Tue May 18 22:08:54 2010 +0200 start of a simple ia ----------------------------------------------------------------------- Changes: diff --git a/info/control/Makefile b/info/control/Makefile index ae5a197..5a20a41 100644 --- a/info/control/Makefile +++ b/info/control/Makefile @@ -52,6 +52,7 @@ install: install -m 0755 _build/clients/recorder.best $(PREFIX)/bin/krobot-recorder install -m 0755 _build/clients/jack.best $(PREFIX)/bin/krobot-jack install -m 0755 _build/clients/write_lcd.best $(PREFIX)/bin/krobot-write-lcd + install -m 0755 _build/clients/ia.best $(PREFIX)/bin/krobot-ia .PHONY: uninstall uninstall: diff --git a/info/control/_tags b/info/control/_tags index c909cb5..00d5dce 100644 --- a/info/control/_tags +++ b/info/control/_tags @@ -67,4 +67,4 @@ # +------------------------------------------------------------------+ <tests/**/*.ml>: syntax_camlp4o, pkg_lwt.syntax, pkg_lwt.syntax.log -<tests/**>: pkg_lwt.unix, pkg_obus +<tests/**>: pkg_lwt.unix, pkg_obus, pkg_lwt.text diff --git a/info/control/clients/ia.ml b/info/control/clients/ia.ml new file mode 100644 index 0000000..8f7ab55 --- /dev/null +++ b/info/control/clients/ia.ml @@ -0,0 +1,241 @@ +(* + * ia.ml + * ----- + * Copyright : (c) 2010, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +open Lwt +open Krobot_move + +let section = Lwt_log.Section.make "ia" + +let velocity = 100 +let acceleration = 800 + +(* +-----------------------------------------------------------------+ + | Graph of the game board | + +-----------------------------------------------------------------+ *) + +let a = { vx = 240; vy = 1960 } +let b = { vx = 500; vy = 1378 } +let c = { vx = 600; vy = 878 } +let d = { vx = 600; vy = 378 } +let e = { vx = 1050; vy = 628 } +let f = { vx = 1050; vy = 1128 } +let g = { vx = 1050; vy = 1378 } +let h = { vx = 1500; vy = 378 } +let i = { vx = 1500; vy = 878 } +let j = { vx = 1500; vy = 1128 } +let k = { vx = 1500; vy = 1378 } +let l = { vx = 1950; vy = 628 } +let m = { vx = 1950; vy = 1128 } +let n = { vx = 1950; vy = 1378 } +let o = { vx = 2400; vy = 378 } +let p = { vx = 2400; vy = 878 } +let q = { vx = 2500; vy = 1378 } +let r = { vx = 2760; vy = 1960 } + +let vertices = [a; b; c; d; e; f; g; h; i; j; k; l; m; n; o; p; q; r] + +let graph = List.fold_left (fun graph edge -> Krobot_move.add_edge edge graph) Krobot_move.empty [ + (a, b); + (b, g); + (b, f); + (c, f); + (c, e); + (d, e); + (g, f); + (g, k); + (g, j); + (g, i); + (e, i); + (e, h); + (k, j); + (k, n); + (k, m); + (j, n); + (j, i); + (j, m); + (i, n); + (i, m); + (i, l); + (h, l); + (n, q); + (n, m); + (m, q); + (m, p); + (l, p); + (l, o); + (q, r); +] + +(* +-----------------------------------------------------------------+ + | Ears | + +-----------------------------------------------------------------+ *) + +(* List of potentially valid ears *) +let ears = ref [ + { vx = 150; vy = 378 }; + { vx = 150; vy = 878 }; + { vx = 150; vy = 1378 }; + + { vx = 600; vy = 128 }; + { vx = 600; vy = 628 }; + { vx = 600; vy = 1128 }; + + { vx = 1050; vy = 378 }; + { vx = 1050; vy = 878 }; + + { vx = 1500; vy = 128 }; + { vx = 1500; vy = 628 }; + + { vx = 1950; vy = 378 }; + { vx = 1950; vy = 878 }; + + { vx = 2400; vy = 128 }; + { vx = 2400; vy = 628 }; + { vx = 2400; vy = 1128 }; + + { vx = 2850; vy = 378 }; + { vx = 2850; vy = 878 }; + { vx = 2850; vy = 1378 }; +] + +(* Mark an ear as a fake *) +let mark_fake v = + ears := List.filter (fun v' -> v.vy <> v'.vy || (v.vx <> v'.vx && v.vx <> 3000 - v'.vx)) !ears + +(* Look for the closest reachable ear, and returns the ear and the + vertex from which the ear can be reached *) +let closest_ear pos = + let rec aux acc = function + | [] -> + acc + | ear :: ears -> + let rec search acc = function + | [] -> + acc + | v :: rest -> + if (match acc with + | None -> true + | Some v' -> Krobot_move.distance pos v < Krobot_move.distance pos v') + && v.vy = ear.vy && abs (v.vx - ear.vx) = 450 + && (try let _ = Krobot_move.next graph pos v in true with Not_found -> false) + then + search (Some v) rest + else + search acc rest + in + match search None vertices with + | None -> + aux acc ears + | Some v -> + match acc with + | None -> + aux (Some(ear, v)) ears + | Some(ear', v') -> + if Krobot_move.distance pos v < Krobot_move.distance pos v' then + aux (Some(ear, v)) ears + else + aux acc ears + in + aux None !ears + +(* +-----------------------------------------------------------------+ + | Movements | + +-----------------------------------------------------------------+ *) + +let reverse_orientation krobot = + lwt _ = Krobot.Motors.move krobot ~distance:(-250) ~velocity ~acceleration in + lwt _ = Krobot.Motors.turn krobot ~angle:(-90) ~velocity ~acceleration in + lwt _ = Krobot.Motors.move krobot ~distance:200 ~velocity ~acceleration in + lwt _ = Krobot.Motors.turn krobot ~angle:(-51) ~velocity ~acceleration in + lwt _ = Krobot.Motors.move krobot ~distance:(-320) ~velocity ~acceleration in + lwt _ = Krobot.Motors.turn krobot ~angle:(-39) ~velocity ~acceleration in + return () + +let rec goto krobot state dest = + if state.position = dest then + return state + else + let next = Krobot_move.next graph state.position dest in + let angle, distance, state' = Krobot_move.move state next in + lwt () = + if angle <> 0 then + lwt _ = Krobot.Motors.turn krobot ~angle ~velocity ~acceleration in + return () + else + return () + in + lwt _ = Krobot.Motors.move krobot ~distance ~velocity ~acceleration in + goto krobot state' dest + +let take_ear krobot state ear = + lwt () = Lwt_log.info_f ~section "taking ear at position (%d, %d)" ear.vx ear.vy in + lwt state = + match abs state.orientation <= 90, ear.vx > state.position.vx with + | true, true -> + lwt _ = Krobot.Motors.turn krobot ~angle:(-state.orientation) ~velocity ~acceleration in + return { state with orientation = 0 } + | true, false -> + lwt _ = Krobot.Motors.turn krobot ~angle:(-state.orientation) ~velocity ~acceleration in + lwt () = reverse_orientation krobot in + return { state with orientation = 180 } + | false, true -> + lwt _ = + if state.orientation < 0 then + Krobot.Motors.turn krobot ~angle:(-180 - state.orientation) ~velocity ~acceleration + else + Krobot.Motors.turn krobot ~angle:(180 - state.orientation) ~velocity ~acceleration + in + lwt () = reverse_orientation krobot in + return { state with orientation = 0 } + | false, false -> + lwt _ = + if state.orientation < 0 then + Krobot.Motors.turn krobot ~angle:(-180 - state.orientation) ~velocity ~acceleration + else + Krobot.Motors.turn krobot ~angle:(180 - state.orientation) ~velocity ~acceleration + in + return { state with orientation = 180 } + in + lwt _ = Krobot.Motors.move krobot ~distance:50 ~velocity ~acceleration in + lwt () = Lwt_unix.sleep 2.0 in + lwt _ = Krobot.Motors.move krobot ~distance:(-50) ~velocity ~acceleration in + return state + +(* +-----------------------------------------------------------------+ + | Entry point | + +-----------------------------------------------------------------+ *) + +lwt () = + lwt krobot = Krobot.create () in + lwt team = Krobot.team krobot in + lwt () = + Lwt_log.notice_f ~section "starting as team %s" + (match team with + | `Blue -> "blue" + | `Yellow -> "yellow") + in + let rec loop state = function + | 0 -> + return () + | n -> + match closest_ear state.position with + | None -> + return () + | Some(ear, dest) -> + lwt () = Lwt_log.info_f ~section "going to take ear at position (%d, %d), by going at (%d, %d)" ear.vx ear.vy dest.vx dest.vy in + lwt state = goto krobot state dest in + lwt () = Lwt_log.info_f ~section "position (%d, %d) reached" dest.vx dest.vy in + lwt state = take_ear krobot state ear in + loop state (n - 1) + in + let init = { + orientation = -90; + position = if team = `Blue then a else r; + } in + loop init 1 diff --git a/info/control/clients/script.ml b/info/control/clients/script.ml index 769542e..66068c8 100644 --- a/info/control/clients/script.ml +++ b/info/control/clients/script.ml @@ -737,6 +737,7 @@ let make_command cmd = { | _ -> assert false in + lwt () = logger [textf "> %s" (convert_name cmd.Commands.name)] in loop (arg_names cmd.Commands.recv) (C.type_sequence (arg_types cmd.Commands.recv)) diff --git a/info/control/lib-krobot/krobot.ml b/info/control/lib-krobot/krobot.ml index 913a5af..86cec74 100644 --- a/info/control/lib-krobot/krobot.ml +++ b/info/control/lib-krobot/krobot.ml @@ -22,8 +22,6 @@ let notify_mode = OBus_property.notify_update "PropertiesChanged" include OBus_peer.Private -type team = Team_red | Team_green - let card krobot card = OBus_proxy.make krobot ["fr"; "krobot"; "Cards"; (match card with @@ -439,3 +437,10 @@ let bus () = let create () = lwt bus = bus () in return (OBus_peer.make bus "fr.krobot.Driver") + +let team krobot = + lwt (a, b, c, d, e) = Card.unsafe_call Commands.Card.get_ports_state krobot `Interface () in + if d land 64 = 0 then + return `Yellow + else + return `Blue diff --git a/info/control/lib-krobot/krobot.mli b/info/control/lib-krobot/krobot.mli index aeba103..aa0b023 100644 --- a/info/control/lib-krobot/krobot.mli +++ b/info/control/lib-krobot/krobot.mli @@ -43,6 +43,8 @@ type services_status = { val services_status : t -> services_status OBus_property.r (** List of services with their status *) +val team : t -> [ `Yellow | `Blue ] Lwt.t + module Infrared : sig val states : t -> int array OBus_property.r (** Property holding the state of the infrared sensors *) diff --git a/info/control/lib-krobot/krobot_move.ml b/info/control/lib-krobot/krobot_move.ml index d25ab55..f085011 100644 --- a/info/control/lib-krobot/krobot_move.ml +++ b/info/control/lib-krobot/krobot_move.ml @@ -39,7 +39,7 @@ let add_edge (a, b) graph = let square x = x * x let distance a b = truncate (sqrt (float_of_int (square (a.vx - b.vx) + square (a.vy - b.vy)))) -let angle a b = truncate (atan2 (float_of_int (b.vy - a.vy)) (float_of_int (b.vx - a.vx)) *. 180. /. 3.14159265) - 90 +let angle a b = truncate (atan2 (float_of_int (b.vy - a.vy)) (float_of_int (b.vx - a.vx)) *. 180. /. 3.14159265) type vertex_search_info = { vsi_distance : int; @@ -106,7 +106,25 @@ let move ~robot ~destination = else diff in - (diff mod 360, - distance robot.position destination, + let diff, inverse = + if diff < -90 then + (diff + 180, true) + else if diff > 90 then + (diff - 180, true) + else + (diff, false) + in + let d = distance robot.position destination in + let orientation = (robot.orientation + diff) mod 360 in + let orientation = + if orientation < -180 then + orientation + 360 + else if orientation > 180 then + orientation - 360 + else + orientation + in + (diff, + (if inverse then -d else d), { position = destination; - orientation = robot.orientation + diff }) + orientation = orientation }) diff --git a/info/control/lib-krobot/lwt_pqueue.mli b/info/control/lib-krobot/lwt_pqueue.mli new file mode 100644 index 0000000..0fc86f1 --- /dev/null +++ b/info/control/lib-krobot/lwt_pqueue.mli @@ -0,0 +1,44 @@ +(* Lightweight thread library for Objective Caml + * http://www.ocsigen.org/lwt + * Interface Lwt_pqueue + * Copyright (C) 1999-2004 Jme Vouillon + * Laboratoire PPS - CNRS Universitaris Diderot + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, with linking exceptions; + * either version 2.1 of the License, or (at your option) any later + * version. See COPYING file for details. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + *) + +module type OrderedType = + sig + type t + val compare: t -> t -> int + end + +module type S = + sig + type elt + type t + val empty: t + val is_empty: t -> bool + val add: elt -> t -> t + val union: t -> t -> t + val find_min: t -> elt + val lookup_min: t -> elt option + val remove_min: t -> t + val size: t -> int + end + +module Make(Ord: OrderedType) : S with type elt = Ord.t diff --git a/info/control/myocamlbuild.ml b/info/control/myocamlbuild.ml index 0ab6141..0812201 100644 --- a/info/control/myocamlbuild.ml +++ b/info/control/myocamlbuild.ml @@ -82,6 +82,7 @@ let targets = List.filter_opt (function (true, target) -> Some target | (false, (have_lwt_unix && have_obus, "clients/recorder.best"); (have_lwt_unix && have_obus, "clients/jack.best"); (have_lwt_unix && have_obus, "clients/write_lcd.best"); + (have_lwt_unix && have_obus, "clients/ia.best"); (* Services *) (have_lwt_unix && have_obus, "services/hard_stop.best"); hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-18 15:15: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 e3f33788e79e9241470742226c84c3e94bbcf028 (commit) via b7de81419d83e46680fb4fd3e00c71a200b30349 (commit) from 6e40e45accc2b802974c2194f515f152b2d89374 (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 e3f33788e79e9241470742226c84c3e94bbcf028 Author: Jérémie Dimino <je...@di...> Date: Tue May 18 17:13:53 2010 +0200 script to reverse the robot orientation commit b7de81419d83e46680fb4fd3e00c71a200b30349 Author: Jérémie Dimino <je...@di...> Date: Mon May 17 16:59:31 2010 +0200 add a program to display lines on the lcd ----------------------------------------------------------------------- Changes: diff --git a/info/control/Makefile b/info/control/Makefile index 2df1ff4..ae5a197 100644 --- a/info/control/Makefile +++ b/info/control/Makefile @@ -51,6 +51,7 @@ install: install -m 0755 _build/clients/play.best $(PREFIX)/bin/krobot-play install -m 0755 _build/clients/recorder.best $(PREFIX)/bin/krobot-recorder install -m 0755 _build/clients/jack.best $(PREFIX)/bin/krobot-jack + install -m 0755 _build/clients/write_lcd.best $(PREFIX)/bin/krobot-write-lcd .PHONY: uninstall uninstall: diff --git a/info/control/clients/write_lcd.ml b/info/control/clients/write_lcd.ml new file mode 100644 index 0000000..4ff335a --- /dev/null +++ b/info/control/clients/write_lcd.ml @@ -0,0 +1,16 @@ +(* + * write_lcd.ml + * ------------ + * Copyright : (c) 2010, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +lwt () = + try_lwt + lwt krobot = Krobot.create () in + Krobot.LCD.set krobot (List.tl (Array.to_list Sys.argv)) + with exn -> + prerr_endline (Printexc.to_string exn); + exit 0 diff --git a/info/control/myocamlbuild.ml b/info/control/myocamlbuild.ml index cf13383..0ab6141 100644 --- a/info/control/myocamlbuild.ml +++ b/info/control/myocamlbuild.ml @@ -81,6 +81,7 @@ let targets = List.filter_opt (function (true, target) -> Some target | (false, (have_lwt_unix && have_obus && have_lwt_text, "clients/play.best"); (have_lwt_unix && have_obus, "clients/recorder.best"); (have_lwt_unix && have_obus, "clients/jack.best"); + (have_lwt_unix && have_obus, "clients/write_lcd.best"); (* Services *) (have_lwt_unix && have_obus, "services/hard_stop.best"); diff --git a/info/control/scripts/reversse b/info/control/scripts/reversse new file mode 100644 index 0000000..7b6107e --- /dev/null +++ b/info/control/scripts/reversse @@ -0,0 +1,6 @@ +backward distance=250 velocity=100 +right angle=90 velocity=100 +forward distance=200 velocity=100 +right angle=51 velocity=100 +backward distance=320 velocity=100 +right angle=39 velocity=100 hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-05-17 22:35: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 6e40e45accc2b802974c2194f515f152b2d89374 (commit) from a9a70558043912e9a39566e8ac917afdd122d49f (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 6e40e45accc2b802974c2194f515f152b2d89374 Author: Xavier Lagorce <Xav...@cr...> Date: Tue May 18 00:35:06 2010 +0200 * Typo in monitor.c * Modification of shell.h to accepte 6 arguments ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/various/shell.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/various/shell.h index 821a2c9..a36714a 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/various/shell.h +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/various/shell.h @@ -38,7 +38,7 @@ * @brief Shell maximum arguments per command. */ #if !defined(SHELL_MAX_ARGUMENTS) || defined(__DOXYGEN__) -#define SHELL_MAX_ARGUMENTS 4 +#define SHELL_MAX_ARGUMENTS 6 #endif /** diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c index 3eee1c8..e412837 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c @@ -144,7 +144,7 @@ void moveHandler(BaseChannel *chp, int argc, char* argv[]) { ptX = atoi(argv[0]); ptY = atoi(argv[1]); vX = atoi(argv[2]); - vX = atoi(argv[3]); + vY = atoi(argv[3]); omega = atoi(argv[4]); t = atoi(argv[5]); hooks/post-receive -- krobot |
From: oiffrig <Ba...@us...> - 2010-05-17 22:24:08
|
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 a9a70558043912e9a39566e8ac917afdd122d49f (commit) from 8a7c64cf0f12578f4d5d61033fe4f7a9b018ee52 (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 a9a70558043912e9a39566e8ac917afdd122d49f Author: Olivier Iffrig <if...@cr...> Date: Tue May 18 00:21:14 2010 +0200 Added move and lift functions for serial interface ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c index 514d026..3eee1c8 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c @@ -134,12 +134,50 @@ void getSpeedHandler(BaseChannel *chp, int argc, char* argv[]) { void moveHandler(BaseChannel *chp, int argc, char* argv[]) { - if (argc != 1) { - shellPrintLine(chp, "Usage : move."); + int16_t ptX, ptY, vX, vY, omega; + uint16_t t; + + if (argc != 6) { + shellPrintLine(chp, "Usage : move ptX ptY vX vY omega t"); return; } + ptX = atoi(argv[0]); + ptY = atoi(argv[1]); + vX = atoi(argv[2]); + vX = atoi(argv[3]); + omega = atoi(argv[4]); + t = atoi(argv[5]); + + canSetScrew(ptX, ptY, vX, vY, omega); + chThdSleepMilliseconds(t); } +void liftHandler(BaseChannel *chp, int argc, char* argv[]) { + + uint16_t h; + + if (argc != 1 && argc != 2) { + shellPrintLine(chp, "Usage : lift (up|down|move h)"); + return; + } + + if(strcmp(argv[0], "up") == 0) + h = LIFT_UP; + else if(strcmp(argv[0], "down") == 0) + h = LIFT_DOWN; + else if(strcmp(argv[0], "move") == 0) { + if(argc != 2) { + shellPrintLine(chp, "Usage : lift (up|down|move h)"); + return; + } + h = atoi(argv[1]); + } + else { + shellPrintLine(chp, "Usage : lift (up|down|move h)"); + return; + } + liftGoto(h); +} /* * Shell configuration variables @@ -149,6 +187,8 @@ static const ShellCommand commands[] = { {"get", getHandler}, {"demo", demoHandler}, {"getSpeed", getSpeedHandler}, + {"move", moveHandler}, + {"lift", liftHandler}, {NULL, NULL} }; diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h index 4f3950f..588c86a 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h @@ -19,6 +19,7 @@ #include "hal.h" #include "shell.h" #include "can_monitor.h" +#include "lift.h" extern Thread *cdtp; hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-05-17 22:11: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 8a7c64cf0f12578f4d5d61033fe4f7a9b018ee52 (commit) from 3a35b41acfd17f147cb596ccec9c9ad33d5e2576 (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 8a7c64cf0f12578f4d5d61033fe4f7a9b018ee52 Author: Xavier Lagorce <Xav...@cr...> Date: Tue May 18 00:09:36 2010 +0200 Corrected error in checksum calculation when sending AX12 packets. The servos are now responding. But their status packets are sent before the bus direction is changed back for it to be read by the ARM. This should be fixed. ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c index 848c303..2c59100 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c @@ -104,22 +104,25 @@ void ax12Init(void) { }; palSetPadMode(IOPORT1, 1, PAL_MODE_OUTPUT_PUSHPULL); - palClearPad(IOPORT1, 1); // reading mode + palSetPad(IOPORT1, 1); // reading mode sdStart(&SD2, &ax12_config); - chThdCreateStatic(waThreadAX12Rec, sizeof(waThreadAX12Rec), NORMALPRIO+1, ThreadAX12Rec, NULL); + //chThdCreateStatic(waThreadAX12Rec, sizeof(waThreadAX12Rec), NORMALPRIO+1, ThreadAX12Rec, NULL); } void ax12SendPacket(uint8_t id, uint8_t instruction, uint8_t len, uint8_t *params) { uint8_t chksum, i; + uint64_t j; - chksum = id + len + 2; + chksum = id + len + 2 + instruction; for (i = 0; i < len; i++) chksum += params[i]; chksum = ~chksum; // Writing mode - //palClearPad(IOPORT1, 1); + palClearPad(IOPORT1, 1); + + for (j=0; j < 1000; j++); chIOPut(ax12_chp, 0xFF); chIOPut(ax12_chp, 0xFF); @@ -130,6 +133,13 @@ void ax12SendPacket(uint8_t id, uint8_t instruction, uint8_t len, uint8_t *param chIOPut(ax12_chp, params[i]); chIOPut(ax12_chp, chksum); - // Back to reading mode - //palSetPad(IOPORT1, 1); + chSysLock(); + + while (chIOPutWouldBlock(ax12_chp)) ; + + chThdSleep(1); + + chSysUnlock(); + + palSetPad(IOPORT1, 1); } hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-05-17 22:08:45
|
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 3a35b41acfd17f147cb596ccec9c9ad33d5e2576 (commit) from f50aad34014c2009e1e23450cec47096d8782dab (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 3a35b41acfd17f147cb596ccec9c9ad33d5e2576 Author: Xavier Lagorce <Xav...@cr...> Date: Tue May 18 00:06:41 2010 +0200 spurious line addition ?... maybe a cosmic ray... ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile b/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile index 0d7fbdc..8f09bc3 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile @@ -186,7 +186,6 @@ DLIBS = # List all user C define here, like -D_DEBUG=1 UDEFS = -DCH_DBG_FILL_THREADS=1 -UDEFS = # Define ASM defines here UADEFS = hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-05-17 21:54:30
|
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 f50aad34014c2009e1e23450cec47096d8782dab (commit) from 90c088244d254d59a2297f2cad00407ceaf0010c (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 f50aad34014c2009e1e23450cec47096d8782dab Author: Xavier Lagorce <Xav...@cr...> Date: Mon May 17 23:51:37 2010 +0200 Added a function to move the lift ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.c index 6f7d7cd..0d0cc27 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.c @@ -68,5 +68,25 @@ void liftInit(void) { // TIM3 enable counter TIM_Cmd(TIM3, ENABLE); +} + +// Set the lift position : +// * LIFT_DOWN : max down +// * LIFT_UP : max up +void liftGoto(uint16_t position) { + + TIM_OCInitTypeDef TIM_OCInitStructure; + if (position > LIFT_UP) + position = LIFT_UP; + + // PWM1 Mode configuration: Channel1 + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + + TIM_OCInitStructure.TIM_Pulse = (uint16_t)(6545 - (int32_t)position); + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); + TIM_ARRPreloadConfig(TIM3, ENABLE); } diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.h index d4f467f..56238f4 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.h +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.h @@ -13,6 +13,10 @@ #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" +#define LIFT_UP 3273 +#define LIFT_DOWN 0 + void liftInit(void); +void liftGoto(uint16_t position); #endif hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-05-17 16:54:15
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 90c088244d254d59a2297f2cad00407ceaf0010c (commit) from 3188949ef9590cf6d27f7b664dbb2a32f9d498a3 (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 90c088244d254d59a2297f2cad00407ceaf0010c Author: Olivier BICHLER <oli...@cr...> Date: Mon May 17 18:53:54 2010 +0200 Added PDF version of some schematics for easier visualization ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/H_Bridge_TB6612FNG_EMG30/Schematic/PDF/H_Bridge_TB6612FNG_EMG30-1.0.pdf b/elec/boards/H_Bridge_TB6612FNG_EMG30/Schematic/PDF/H_Bridge_TB6612FNG_EMG30-1.0.pdf new file mode 100644 index 0000000..42b8580 Binary files /dev/null and b/elec/boards/H_Bridge_TB6612FNG_EMG30/Schematic/PDF/H_Bridge_TB6612FNG_EMG30-1.0.pdf differ diff --git a/elec/boards/Interface_AX12_Jr/Schematic/PDF/Interface_AX12_Jr-1.0.pdf b/elec/boards/Interface_AX12_Jr/Schematic/PDF/Interface_AX12_Jr-1.0.pdf new file mode 100644 index 0000000..9620459 Binary files /dev/null and b/elec/boards/Interface_AX12_Jr/Schematic/PDF/Interface_AX12_Jr-1.0.pdf differ diff --git a/elec/boards/Sensor_USRangeFinder/Schematic/PDF/Sensor_USRangeFinder-1.0.pdf b/elec/boards/Sensor_USRangeFinder/Schematic/PDF/Sensor_USRangeFinder-1.0.pdf new file mode 100644 index 0000000..91246ee Binary files /dev/null and b/elec/boards/Sensor_USRangeFinder/Schematic/PDF/Sensor_USRangeFinder-1.0.pdf differ hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-05-17 16:24:51
|
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 3188949ef9590cf6d27f7b664dbb2a32f9d498a3 (commit) from cca377a8e66eb33b0a243b4807ff421bf6d24d0e (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 3188949ef9590cf6d27f7b664dbb2a32f9d498a3 Author: Xavier Lagorce <Xav...@cr...> Date: Mon May 17 18:24:22 2010 +0200 added a demo command (previous move command) and an empty move command ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c index 4fcb348..514d026 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c @@ -62,10 +62,13 @@ void getHandler(BaseChannel *chp, int argc, char* argv[]) { (position)%10); }; -void moveHandler(BaseChannel *chp, int argc, char* argv[]) { +void demoHandler(BaseChannel *chp, int argc, char* argv[]) { if (argc != 1) { - shellPrintLine(chp, "Usage : move mode."); + shellPrintLine(chp, "Usage : demo mode."); + shellPrintLine(chp, " 1 : carré"); + shellPrintLine(chp, " 2 : tourne"); + shellPrintLine(chp, " 3 : tourne autour d'un point"); return; } switch (argv[0][0]) { @@ -129,6 +132,14 @@ void getSpeedHandler(BaseChannel *chp, int argc, char* argv[]) { (speed)%10); } +void moveHandler(BaseChannel *chp, int argc, char* argv[]) { + + if (argc != 1) { + shellPrintLine(chp, "Usage : move."); + return; + } +} + /* * Shell configuration variables @@ -136,7 +147,7 @@ void getSpeedHandler(BaseChannel *chp, int argc, char* argv[]) { static const ShellCommand commands[] = { {"bonjour", bonjourHandler}, {"get", getHandler}, - {"move", moveHandler}, + {"demo", demoHandler}, {"getSpeed", getSpeedHandler}, {NULL, NULL} }; hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-05-17 15:28:17
|
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 cca377a8e66eb33b0a243b4807ff421bf6d24d0e (commit) via d2e6aa0c441efc08c30ce1243aaa53f2f0096b7b (commit) via a9ddabc53c3289331e69ca738e4c8896b66f8452 (commit) from 10395230bcd78851504981612ca1ed3b82bdc8e2 (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 cca377a8e66eb33b0a243b4807ff421bf6d24d0e Author: Xavier Lagorce <Xav...@cr...> Date: Mon May 17 17:25:18 2010 +0200 Modifications during the French Robotic Cup : * The lift is working * AX12 are not currently operationals * a new board has been added to use chibios PORT definition system * The monitor is now running again Partial Match logic has been implemented to do the necessary things for the cup. They need to be rewritten cleanly ! commit d2e6aa0c441efc08c30ce1243aaa53f2f0096b7b Author: Xavier Lagorce <Xav...@cr...> Date: Mon May 17 17:15:15 2010 +0200 Adapted Firmware to work with the real boards (not the developpement ones) commit a9ddabc53c3289331e69ca738e4c8896b66f8452 Author: Xavier Lagorce <Xav...@cr...> Date: Fri May 14 00:37:06 2010 +0200 typo correction ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Controller_HolonomicDrive/Firmware/encoder.c b/elec/boards/Controller_HolonomicDrive/Firmware/encoder.c index 59d306a..7c1fd72 100644 --- a/elec/boards/Controller_HolonomicDrive/Firmware/encoder.c +++ b/elec/boards/Controller_HolonomicDrive/Firmware/encoder.c @@ -24,12 +24,12 @@ void encodersInit(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //Setup timer for quadrature encoder interface - //Encoder1 A channel at PA0.6 (Ch1) - // B channel at PA0.7 (Ch2) - //Encoder2 A channel at PA0.8 (Ch1) - // B channel at PA0.9 (Ch2) - //Encoder3 A channel at PB0.6 (Ch1) - // B channel at PB0.7 (Ch2) + //Encoder1 A channel at PA8 (Ch1) + // B channel at PA9 (Ch2) -> TIM1 + //Encoder2 A channel at PA6 (Ch1) + // B channel at PA7 (Ch2) -> TIM3 + //Encoder3 A channel at PB6 (Ch1) + // B channel at PB7 (Ch2) -> TIM4 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; diff --git a/elec/boards/Controller_HolonomicDrive/Firmware/main.c b/elec/boards/Controller_HolonomicDrive/Firmware/main.c index 7988cf8..71d05e5 100644 --- a/elec/boards/Controller_HolonomicDrive/Firmware/main.c +++ b/elec/boards/Controller_HolonomicDrive/Firmware/main.c @@ -46,7 +46,7 @@ static msg_t Thread1(void *arg) { static void TimerHandler(eventid_t id) { (void)id; - if (palReadPad(IOPORT1, GPIOA_BUTTON)) { + if (!palReadPad(IOPORT1, GPIOA_BUTTON)) { palClearPad(IOPORT3, GPIOC_LED); chThdSleepMilliseconds(100); @@ -96,7 +96,7 @@ static void TimerHandler(eventid_t id) { setScrew(0, 0, 282, 282, 0); chThdSleepMilliseconds(1500); turn(0); - } + } } /* @@ -122,12 +122,12 @@ int main(int argc, char **argv) { /* * Activates the serial driver 2 using the driver default configuration. */ - sdStart(&SD2, NULL); + //sdStart(&SD2, NULL); /* * Initialise the monitor */ - monitorInit(); + //monitorInit(); /* * Initialise the CAN monitor diff --git a/elec/boards/Controller_HolonomicDrive/Firmware/motor.c b/elec/boards/Controller_HolonomicDrive/Firmware/motor.c index 9618d84..748356f 100644 --- a/elec/boards/Controller_HolonomicDrive/Firmware/motor.c +++ b/elec/boards/Controller_HolonomicDrive/Firmware/motor.c @@ -19,7 +19,7 @@ void VectorB0(void) { TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); // End of motor1 pulse - GPIO_ResetBits(GPIOC, GPIO_Pin_13); + GPIO_ResetBits(GPIOA, GPIO_Pin_1); } else if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET) { @@ -27,7 +27,7 @@ void VectorB0(void) { TIM_ClearITPendingBit(TIM2, TIM_IT_CC2); // End of motor2 pulse - GPIO_ResetBits(GPIOC, GPIO_Pin_3); + GPIO_ResetBits(GPIOA, GPIO_Pin_2); } else if (TIM_GetITStatus(TIM2, TIM_IT_CC3) != RESET) { @@ -35,7 +35,7 @@ void VectorB0(void) { TIM_ClearITPendingBit(TIM2, TIM_IT_CC3); // End of motor3 pulse - GPIO_ResetBits(GPIOC, GPIO_Pin_9); + GPIO_ResetBits(GPIOA, GPIO_Pin_3); } else { // TIM_IT_Update @@ -43,7 +43,7 @@ void VectorB0(void) { // Clear TIM2 Update interrupt pending bit TIM_ClearITPendingBit(TIM2, TIM_IT_Update); - GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_9 | GPIO_Pin_13); + GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3); } } @@ -67,17 +67,17 @@ void motorsInit(void) { //Motor1 : STBY PC10 // IN1 PB0 // IN2 PB1 - // PWM PC13 + // PWM PA1 //Motor2 : STBY PC0 // IN1 PC1 // IN2 PC2 - // PWM PC3 + // PWM PA2 //Motor3 : STBY PC6 // IN1 PC7 // IN2 PC8 - // PWM PC9 - GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 - | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_13); + // PWM PA3 + GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_2 | GPIO_Pin_6 + | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_13); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); @@ -85,6 +85,9 @@ void motorsInit(void) { GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_Init(GPIOB, &GPIO_InitStructure); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; + GPIO_Init(GPIOA, &GPIO_InitStructure); + // Default value of H-Bridge configuration GPIO_ResetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_10 @@ -93,7 +96,7 @@ void motorsInit(void) { // TimeBase configuration TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; - TIM_TimeBaseStructure.TIM_Period = 36000; // 20 kHz + TIM_TimeBaseStructure.TIM_Period = 36000; // 2 kHz TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile b/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile index eb14e9b..0d7fbdc 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile @@ -57,7 +57,7 @@ LDSCRIPT= ch.ld # Imported source files CHIBIOS = chibios -include $(CHIBIOS)/boards/OLIMEX_STM32_P103/board.mk +include $(CHIBIOS)/boards/KROBOTJR_MOTHERBOARD2010/board.mk include $(CHIBIOS)/os/hal/platforms/STM32/platform.mk include $(CHIBIOS)/os/hal/hal.mk include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/port.mk @@ -79,6 +79,8 @@ CSRC += $(CHIBIOS)/os/various/syscalls.c CSRC += $(CHIBIOS)/os/various/shell.c CSRC += monitor.c CSRC += can_monitor.c +CSRC += lift.c +CSRC += ax12.c CSRC += main.c # C++ sources that can be compiled in ARM or THUMB mode depending on the global @@ -160,7 +162,7 @@ CPPWARN = -Wall -Wextra # # List all default C defines here, like -D_DEBUG=1 -DDEFS = -DSTDOUT_SD=SD2 -DSTDIN_SD=SD2 +DDEFS = -DSTDOUT_SD=SD1 -DSTDIN_SD=SD1 # List all default ASM defines here, like -D_DEBUG=1 DADEFS = diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c new file mode 100644 index 0000000..848c303 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.c @@ -0,0 +1,135 @@ +/* + * Serial communication with AX12 digital servomotors + * Xavier Lagorce + */ + +#include "ax12.h" + +BaseChannel *ax12_chp = (BaseChannel*)&SD2; + +typedef enum { + RD_READY = 0, + RD_BEGIN = 1, + RD_ID = 2, + RD_LEN = 3, + RD_ERROR = 4, + RD_PAYLOAD = 5, + RD_CHECKSUM = 6, +} rdstate_t; + + +static WORKING_AREA(waThreadAX12Rec, 256); +static msg_t ThreadAX12Rec(void *arg) { + + rdstate_t state = RD_READY; + uint8_t id=0, len=0, count=0, error=0, chksum=0, i; + uint8_t payload[10]; + Thread *waiter = NULL, *msg = NULL; + + (void)arg; + while (TRUE) { + uint8_t c = (uint8_t)chIOGet(ax12_chp); + + msg = (Thread*)chMsgGet(); + if (msg != NULL) { + waiter = msg; + chMsgRelease(RDY_OK); + } + + switch (state) { + case RD_READY: + if (c == 0xFF) + state = RD_BEGIN; + break; + case RD_BEGIN: + if (c == 0xFF) + state = RD_ID; + else + state = RD_READY; + break; + case RD_ID: + id = c; + state = RD_LEN; + break; + case RD_LEN: + len = c - 2; + count = 0; + state = RD_ERROR; + break; + case RD_ERROR: + error = c; + if (len == 0) + state = RD_CHECKSUM; + else + state = RD_PAYLOAD; + break; + case RD_PAYLOAD: + count++; + payload[count] = c; + if (count == len) + state = RD_CHECKSUM; + break; + case RD_CHECKSUM: + chksum = id+len+error; + for (i=0; i < len ; i++) + chksum += payload[i]; + chksum = ~chksum; + if (waiter != NULL) { + if (c != chksum) { + chEvtSignal(waiter, EVT_AX12_ERROR); + } + else { + chEvtSignal(waiter, EVT_AX12_PACKET); + chMsgSend(waiter, (msg_t)payload); + } + waiter = NULL; + } + state = RD_READY; + break; + default: + state = RD_READY; + break; + } + } + return 0; +} + +void ax12Init(void) { + const SerialConfig ax12_config = + { + AX12_BAUDRATE, + 0, + USART_CR2_STOP1_BITS | USART_CR2_LINEN, + 0 + }; + + palSetPadMode(IOPORT1, 1, PAL_MODE_OUTPUT_PUSHPULL); + palClearPad(IOPORT1, 1); // reading mode + + sdStart(&SD2, &ax12_config); + chThdCreateStatic(waThreadAX12Rec, sizeof(waThreadAX12Rec), NORMALPRIO+1, ThreadAX12Rec, NULL); +} + +void ax12SendPacket(uint8_t id, uint8_t instruction, uint8_t len, uint8_t *params) { + uint8_t chksum, i; + + chksum = id + len + 2; + for (i = 0; i < len; i++) + chksum += params[i]; + chksum = ~chksum; + + // Writing mode + //palClearPad(IOPORT1, 1); + + chIOPut(ax12_chp, 0xFF); + chIOPut(ax12_chp, 0xFF); + chIOPut(ax12_chp, id); + chIOPut(ax12_chp, len+2); + chIOPut(ax12_chp, instruction); + for (i=0; i<len; i++) + chIOPut(ax12_chp, params[i]); + chIOPut(ax12_chp, chksum); + + // Back to reading mode + //palSetPad(IOPORT1, 1); +} diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.h new file mode 100644 index 0000000..e46a9fb --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ax12.h @@ -0,0 +1,118 @@ +/* + * Serial communication with AX12 digital servomotors + * Xavier Lagorce + */ + +#ifndef HEADER__AX12 +#define HEADER__AX12 + +#define AX12_BAUDRATE 1000000 + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "ch.h" +#include "hal.h" + +// --- Control Table Address --- +// EEPROM area +#define P_MODEL_NUMBER 0 +#define P_MODEL_NUMBER_L 0 +#define P_MODEL_NUMBER_H 1 +#define P_VERSION 2 +#define P_ID 3 +#define P_BAUD_RATE 4 +#define P_RETURN_DELAY_TIME 5 +#define P_CW_ANGLE_LIMIT 6 +#define P_CW_ANGLE_LIMIT_L 6 +#define P_CW_ANGLE_LIMIT_H 7 +#define P_CCW_ANGLE_LIMIT 8 +#define P_CCW_ANGLE_LIMIT_L 8 +#define P_CCW_ANGLE_LIMIT_H 9 +#define P_SYSTEM_DATA2 10 +#define P_LIMIT_TEMPERATURE 11 +#define P_DOWN_LIMIT_VOLTAGE 12 +#define P_UP_LIMIT_VOLTAGE 13 +#define P_MAX_TORQUE 14 +#define P_MAX_TORQUE_L 14 +#define P_MAX_TORQUE_H 15 +#define P_RETURN_LEVEL 16 +#define P_ALARM_LED 17 +#define P_ALARM_SHUTDOWN 18 +#define P_OPERATING_MODE 19 +#define P_DOWN_CALIBRATION 20 +#define P_DOWN_CALIBRATION_L 20 +#define P_DOWN_CALIBRATION_H 21 +#define P_UP_CALIBRATION 22 +#define P_UP_CALIBRATION_L 22 +#define P_UP_CALIBRATION_H 23 + +// RAM area +#define P_TORQUE_ENABLE 24 +#define P_LED 25 +#define P_CW_COMPLIANCE_MARGIN 26 +#define P_CCW_COMPLIANCE_MARGIN 27 +#define P_CW_COMPLIANCE_SLOPE 28 +#define P_CCW_COMPLIANCE_SLOPE 29 +#define P_GOAL_POSITION 30 +#define P_GOAL_POSITION_L 30 +#define P_GOAL_POSITION_H 31 +#define P_GOAL_SPEED 32 +#define P_GOAL_SPEED_L 32 +#define P_GOAL_SPEED_H 33 +#define P_TORQUE_LIMIT 34 +#define P_TORQUE_LIMIT_L 34 +#define P_TORQUE_LIMIT_H 35 +#define P_PRESENT_POSITION 36 +#define P_PRESENT_POSITION_L 36 +#define P_PRESENT_POSITION_H 37 +#define P_PRESENT_SPEED 38 +#define P_PRESENT_SPEED_L 38 +#define P_PRESENT_SPEED_H 39 +#define P_PRESENT_LOAD 40 +#define P_PRESENT_LOAD_L 40 +#define P_PRESENT_LOAD_H 41 +#define P_PRESENT_VOLTAGE 42 +#define P_PRESENT_TEMPERATURE 43 +#define P_REGISTERED_INSTRUCTION 44 +#define P_PAUSE_TIME 45 +#define P_MOVING 46 +#define P_LOCK 47 +#define P_PUNCH 48 +#define P_PUNCH_L 48 +#define P_PUNCH_H 49 + +// --- Instruction --- +#define INST_PING 0x01 +#define INST_READ 0x02 +#define INST_WRITE 0x03 +#define INST_REG_WRITE 0x04 +#define INST_ACTION 0x05 +#define INST_RESET 0x06 +#define INST_DIGITAL_RESET 0x07 +#define INST_SYSTEM_READ 0x0C +#define INST_SYSTEM_WRITE 0x0D +#define INST_SYNC_WRITE 0x83 +#define INST_SYNC_REG_WRITE 0x84 + +// --- Error --- +#define ERR_INPUT_VOLTAGE 1 +#define ERR_ANGLE_LIMIT 2 +#define ERR_OVERHEATING 4 +#define ERR_RANGE 8 +#define ERR_CHECKSUM 16 +#define ERR_OVERLOAD 32 +#define ERR_INSTRUCTION 64 + +// --- Valeurs specifiques --- +#define ID_BROADCAST 0xFE + +// Événements +#define EVT_AX12_ERROR 1 +#define EVT_AX12_PACKET 2 + +void ax12Init(void); +void ax12SendPacket(uint8_t id, uint8_t instruction, uint8_t len, uint8_t *params); + +#endif diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/can_monitor.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/can_monitor.c index 928a08f..8c40190 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/can_monitor.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/can_monitor.c @@ -135,7 +135,7 @@ void canSetSpeeds(int32_t motor1, int32_t motor2, int32_t motor3) { speedMsg_t *speedMsg; txmsg.cf_IDE = CAN_IDE_EXT; - txmsg.cf_EID = 0x300; + txmsg.cf_EID = 0x400; txmsg.cf_RTR = CAN_RTR_DATA; txmsg.cf_DLC = 8; speedMsg = (speedMsg_t*)(&(txmsg.cf_data8[0])); diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/KROBOTJR_MOTHERBOARD2010/board.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/KROBOTJR_MOTHERBOARD2010/board.c new file mode 100644 index 0000000..77f9581 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/KROBOTJR_MOTHERBOARD2010/board.c @@ -0,0 +1,49 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "ch.h" +#include "hal.h" + +/* + * Early initialization code. + * This initialization is performed just after reset before BSS and DATA + * segments initialization. + */ +void hwinit0(void) { + + stm32_clock_init(); +} + +/* + * Late initialization code. + * This initialization is performed after BSS and DATA segments initialization + * and before invoking the main() function. + */ +void hwinit1(void) { + + /* + * HAL initialization. + */ + halInit(); + + /* + * ChibiOS/RT initialization. + */ + chSysInit(); +} diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/KROBOTJR_MOTHERBOARD2010/board.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/KROBOTJR_MOTHERBOARD2010/board.h new file mode 100644 index 0000000..b0d7b76 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/KROBOTJR_MOTHERBOARD2010/board.h @@ -0,0 +1,130 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +/* + * Setup for the Olimex STM33-P103 proto board. + */ + +/* + * Board identifier. + */ +#define BOARD_OLIMEX_STM32_P103 +#define BOARD_NAME "Olimex STM32-P103" + +/* + * Board frequencies. + */ +#define LSECLK 32768 +#define HSECLK 8000000 +#define HSICLK 8000000 + +/* + * IO pins assignments. + */ +#define GPIOA_BUTTON 0 +#define GPIOA_SPI1NSS 4 + +#define GPIOB_SPI2NSS 12 + +#define GPIOC_MMCWP 6 +#define GPIOC_MMCCP 7 +#define GPIOC_CANCNTL 10 +#define GPIOC_DISC 11 +#define GPIOC_LED 12 + +/* + * I/O ports initial setup, this configuration is established soon after reset + * in the initialization code. + * + * The digits have the following meaning: + * 0 - Analog input. + * 1 - Push Pull output 10MHz. + * 2 - Push Pull output 2MHz. + * 3 - Push Pull output 50MHz. + * 4 - Digital input. + * 5 - Open Drain output 10MHz. + * 6 - Open Drain output 2MHz. + * 7 - Open Drain output 50MHz. + * 8 - Digital input with PullUp or PullDown resistor depending on ODR. + * 9 - Alternate Push Pull output 10MHz. + * A - Alternate Push Pull output 2MHz. + * B - Alternate Push Pull output 50MHz. + * C - Reserved. + * D - Alternate Open Drain output 10MHz. + * E - Alternate Open Drain output 2MHz. + * F - Alternate Open Drain output 50MHz. + * Please refer to the STM32 Reference Manual for details. + */ + +/* + * Port A setup. + * Everything input with pull-up except: + * PA0 - Normal input (BUTTON). + * PA2 - Alternate output (USART2 TX). + * PA3 - Normal input (USART2 RX). + */ +#define VAL_GPIOACRL 0x88884B38 /* PA7...PA0 */ +#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */ +#define VAL_GPIOAODR 0xFFFFFFFF + +/* + * Port B setup. + * Everything input with pull-up except: + * PB13 - Alternate output (MMC SPI2 SCK). + * PB14 - Normal input (MMC SPI2 MISO). + * PB15 - Alternate output (MMC SPI2 MOSI). + */ +#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */ +#define VAL_GPIOBCRH 0xB4B88888 /* PB15...PB8 */ +#define VAL_GPIOBODR 0xFFFFFFFF + +/* + * Port C setup. + * Everything input with pull-up except: + * PC6 - Normal input because there is an external resistor. + * PC7 - Normal input because there is an external resistor. + * PC11 - Push Pull output (CAN CNTRL). + * PC12 - Push Pull output (LED). + */ +#define VAL_GPIOCCRL 0x44888888 /* PC7...PC0 */ +#define VAL_GPIOCCRH 0x88833888 /* PC15...PC8 */ +#define VAL_GPIOCODR 0xFFFFFFFF + +/* + * Port D setup. + * Everything input with pull-up except: + * PD0 - Normal input (XTAL). + * PD1 - Normal input (XTAL). + */ +#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */ +#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */ +#define VAL_GPIODODR 0xFFFFFFFF + +/* + * Port E setup. + * Everything input with pull-up except: + */ +#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */ +#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */ +#define VAL_GPIOEODR 0xFFFFFFFF + +#endif /* _BOARD_H_ */ diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/KROBOTJR_MOTHERBOARD2010/board.mk b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/KROBOTJR_MOTHERBOARD2010/board.mk new file mode 100644 index 0000000..e9ed947 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/KROBOTJR_MOTHERBOARD2010/board.mk @@ -0,0 +1,5 @@ +# List of all the board related files. +BOARDSRC = ${CHIBIOS}/boards/KROBOTJR_MOTHERBOARD2010/board.c + +# Required include directories +BOARDINC = ${CHIBIOS}/boards/KROBOTJR_MOTHERBOARD2010 diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/halconf.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/halconf.h index 40eceea..ba5f1cb 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/halconf.h +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/halconf.h @@ -66,7 +66,7 @@ * @brief Enables the ADC subsystem. */ #if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) -#define CH_HAL_USE_ADC FALSE +#define CH_HAL_USE_ADC TRUE #endif /*===========================================================================*/ diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.c new file mode 100644 index 0000000..6f7d7cd --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.c @@ -0,0 +1,72 @@ +/* + * Lift management on Krobot Jr + * Xavier Lagorce + */ + +#include "lift.h" + +void liftInit(void) { + GPIO_InitTypeDef GPIO_InitStructure; + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + TIM_OCInitTypeDef TIM_OCInitStructure; + uint16_t PrescalerValue = 0; + + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | + RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + // Compute the prescaler value + PrescalerValue = (uint16_t) (72000000 / 3276800) - 1; + // Time base configuration + TIM_TimeBaseStructure.TIM_Period = 65455; + TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + + TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); + + // PWM1 Mode configuration: Channel1 + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_Pulse = 3272;//3272;//4909;//6545; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + + TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); + + // PWM1 Mode configuration: Channel2 + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + + TIM_OC2Init(TIM3, &TIM_OCInitStructure); + + TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); + + // PWM1 Mode configuration: Channel3 + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + + TIM_OC3Init(TIM3, &TIM_OCInitStructure); + + TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); + + // PWM1 Mode configuration: Channel4 + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + + TIM_OC4Init(TIM3, &TIM_OCInitStructure); + + TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); + + TIM_ARRPreloadConfig(TIM3, ENABLE); + + // TIM3 enable counter + TIM_Cmd(TIM3, ENABLE); + +} diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.h new file mode 100644 index 0000000..d4f467f --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/lift.h @@ -0,0 +1,18 @@ +/* + * Lift management on Krobot Jr + * Xavier Lagorce + */ + +#ifndef HEADER__LIFT +#define HEADER__LIFT + +#include "ch.h" +#include "hal.h" +#include "stm32f10x.h" +#include "stm32f10x_tim.h" +#include "stm32f10x_gpio.h" +#include "stm32f10x_rcc.h" + +void liftInit(void); + +#endif diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c index 7b9de77..e15ff48 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c @@ -9,11 +9,15 @@ #include "ch.h" #include "hal.h" +#include "pal.h" #include "evtimer.h" #include "monitor.h" #include "can_monitor.h" +#include "lift.h" +#include "ax12.h" + /* * Global variables */ @@ -36,29 +40,192 @@ static msg_t Thread1(void *arg) { return 0; } +#define ADC_GRP1_NUM_CHANNELS 8 +#define ADC_GRP1_BUF_DEPTH 16 + +static adcsample_t samples[ADC_GRP1_NUM_CHANNELS * ADC_GRP1_BUF_DEPTH]; +static Thread *adctp; + +const ADCConfig adccfg = {}; +const ADCConversionGroup adcgrpcfg = { + TRUE, + ADC_GRP1_NUM_CHANNELS, + 0, + ADC_CR2_EXTSEL_SWSTART | ADC_CR2_TSVREFE | ADC_CR2_CONT, + 0, + 0, + ADC_SQR1_NUM_CH(ADC_GRP1_NUM_CHANNELS), + ADC_SQR2_SQ7_N(ADC_CHANNEL_SENSOR) | ADC_SQR2_SQ6_N(ADC_CHANNEL_VREFINT), + ADC_SQR3_SQ5_N(ADC_CHANNEL_IN11) | ADC_SQR3_SQ4_N(ADC_CHANNEL_IN10) | + ADC_SQR3_SQ3_N(ADC_CHANNEL_IN11) | ADC_SQR3_SQ2_N(ADC_CHANNEL_IN10) | + ADC_SQR3_SQ1_N(ADC_CHANNEL_IN11) | ADC_SQR3_SQ0_N(ADC_CHANNEL_IN10) +}; + +/* + * ADC continuous conversion thread. + */ +size_t nx = 0, ny = 0; +static void adccallback(adcsample_t *buffer, size_t n) { + + static uint16_t count = 0; + + if (buffer[11] >= 2400 ) { + palClearPad(IOPORT3, GPIOC_LED); + //canSetScrew(0,0,0,0,0); + //while(1); + count++; + } + else + palSetPad(IOPORT3, GPIOC_LED); + + if (count >= 10) { + canSetScrew(0,0,0,0,0); + while(1); + } +} + +static WORKING_AREA(adc_continuous_wa, 256); +static msg_t adc_continuous_thread(void *p){ + + (void)p; + palSetGroupMode(IOPORT3, + PAL_PORT_BIT(0) | PAL_PORT_BIT(1), + PAL_MODE_INPUT_ANALOG); + adcStart(&ADCD1, &adccfg); + while(1) { + adcStartConversion(&ADCD1, &adcgrpcfg, samples, + ADC_GRP1_BUF_DEPTH, adccallback); + adcWaitConversion(&ADCD1, TIME_INFINITE); + adcStop(&ADCD1);} + return 0; +} + + +static WORKING_AREA(waThread2, 1024); +static msg_t Thread2(void *arg) { + + /*TIM_OCInitTypeDef TIM_OCInitStructure; + + // PWM1 Mode configuration: Channel1 + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + + (void)arg; + while (TRUE) { + + TIM_OCInitStructure.TIM_Pulse = 3272; + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); + TIM_ARRPreloadConfig(TIM3, ENABLE); + chThdSleepMilliseconds(10000); + + TIM_OCInitStructure.TIM_Pulse = 6545; + TIM_OC1Init(TIM3, &TIM_OCInitStructure); + TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); + TIM_ARRPreloadConfig(TIM3, ENABLE); + chThdSleepMilliseconds(10000); + } + };*/ + + adctp = chThdCreateStatic(adc_continuous_wa, sizeof(adc_continuous_wa), + NORMALPRIO + 9, adc_continuous_thread, NULL); + + chThdSleep(MS2ST(85000)); + canSetScrew(0, 0, 0, 0, 0); + while(1); + + return 0; +} + + /* * Executed as event handler at 500mS intervals. */ static void TimerHandler(eventid_t id) { - CANTxFrame txmsg; - moveMsg_t *moveMsg; + uint8_t color; (void)id; - if (palReadPad(IOPORT1, GPIOA_BUTTON)) { - - txmsg.cf_IDE = CAN_IDE_EXT; - txmsg.cf_EID = 0x300; - txmsg.cf_RTR = CAN_RTR_DATA; - txmsg.cf_DLC = 8; - moveMsg = (moveMsg_t*)(&(txmsg.cf_data8[0])); - moveMsg->move.ptX = 0; - moveMsg->move.ptY = 200; - moveMsg->move.vX = 0; - moveMsg->move.vY = 0; - moveMsg->move.omega = 60; - - canTransmit(&CAND1, &txmsg, MS2ST(100)); + + if (!palReadPad(IOPORT3, 8)) { + if (palReadPad(IOPORT3, 6)) + color = 0; + else + color = 1; + + chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO+1, Thread2, NULL); + + + canSetScrew(0, 0, 0, -174, 0); + chThdSleep(MS2ST(2000)); + canSetScrew(0, 0, 0, 0, 0); + chThdSleep(MS2ST(100)); + if (color == 0) { + canSetScrew(0, 0, 0, 0, 40); + chThdSleep(MS2ST(1600)); + } else + { + canSetScrew(0, 0, 0, 0, -40); + chThdSleep(MS2ST(1600)); + } + canSetScrew(0, 0, 0, 0, 0); + chThdSleep(MS2ST(100)); + canSetScrew(0, 0, 0, -300, 0); + chThdSleep(MS2ST(15000)); + canSetScrew(0, 0, 0, 0, 0); } + /*if (!palReadPad(IOPORT1, GPIOA_BUTTON)) { + + palClearPad(IOPORT3, GPIOC_LED); + chThdSleepMilliseconds(100); + palSetPad(IOPORT3, GPIOC_LED); + chThdSleepMilliseconds(100); + palClearPad(IOPORT3, GPIOC_LED); + chThdSleepMilliseconds(100); + palSetPad(IOPORT3, GPIOC_LED); + chThdSleepMilliseconds(100); + palClearPad(IOPORT3, GPIOC_LED); + chThdSleepMilliseconds(100); + palSetPad(IOPORT3, GPIOC_LED); + + + chThdSleepMilliseconds(2000); + + canSetScrew(0, 0, 141, 141, 0); + chThdSleepMilliseconds(5000); + + canSetScrew(0, 0, 0, 0, 0); + chThdSleepMilliseconds(200); + + canSetScrew(450, 200, 0, 0, 40); + chThdSleepMilliseconds(3000); + + canSetScrew(0, 0, 0, 0, 0); + chThdSleepMilliseconds(200); + + canSetScrew(0, 0, 0, 0, 60); + chThdSleepMilliseconds(2000); + + canSetScrew(0, 0, 0, 0, 0); + chThdSleepMilliseconds(200); + + canSetScrew(0, 0, 200, 0, 0); + chThdSleepMilliseconds(1500); + + canSetScrew(0, 0, 0, 0, 0); + chThdSleepMilliseconds(200); + + canSetScrew(0, 0, 0, 200, 0); + chThdSleepMilliseconds(3500); + + canSetScrew(0, 0, 0, 0, 0); + chThdSleepMilliseconds(200); + + canSetScrew(0, 0, 282, 282, 0); + chThdSleepMilliseconds(1500); + + canSetScrew(0, 0, 0, 0, 0); + }*/ } /* @@ -77,9 +244,9 @@ int main(int argc, char **argv) { (void)argv; /* - * Activates the serial driver 2 using the driver default configuration. + * Activates the serial driver 1 using the driver default configuration. */ - sdStart(&SD2, NULL); + sdStart(&SD1, NULL); /* * Initialise the monitor @@ -93,14 +260,35 @@ int main(int argc, char **argv) { canMonitorStart(); /* + * Initialise the lift + */ + liftInit(); + ax12Init(); + + //chThdSleep(MS2ST(2000)); + + /* + * Init pins + */ + palSetGroupMode(IOPORT3, PAL_PORT_BIT(6) | PAL_PORT_BIT(8), PAL_MODE_INPUT_PULLDOWN); + palSetGroupMode(IOPORT3, PAL_PORT_BIT(0) | PAL_PORT_BIT(2), PAL_MODE_INPUT_ANALOG); + adcStart(&ADCD1, NULL); + //adctp = chThdCreateStatic(adc_continuous_wa, sizeof(adc_continuous_wa), + // NORMALPRIO + 9, adc_continuous_thread, NULL); + /* * Creates the blinker thread. */ - chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO+1, Thread1, NULL); + //chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO+1, Thread1, NULL); + //chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO+1, Thread2, NULL); /* * Normal main() thread activity, in this demo it does nothing except * sleeping in a loop and listen for events. */ + + uint8_t params[] = {P_GOAL_POSITION, 0x00, 0x02, 0x00, 0x02}; + ax12SendPacket(1, INST_WRITE, 5, params); + evtInit(&evt, MS2ST(500)); /* Initializes an event timer object. */ evtStart(&evt); /* Starts the event timer. */ chEvtRegister(&evt.et_es, &el0, 0); /* Registers on the timer event source. */ diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/mcuconf.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/mcuconf.h index 2a72a33..0a1c8b0 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/mcuconf.h +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/mcuconf.h @@ -49,7 +49,7 @@ /* * ADC driver system settings. */ -#define USE_STM32_ADC1 FALSE +#define USE_STM32_ADC1 TRUE #define STM32_ADC1_DMA_PRIORITY 3 #define STM32_ADC1_IRQ_PRIORITY 0x50 #define STM32_ADC1_DMA_ERROR_HOOK() chSysHalt() @@ -75,7 +75,7 @@ /* * SERIAL driver system settings. */ -#define USE_STM32_USART1 FALSE +#define USE_STM32_USART1 TRUE #define USE_STM32_USART2 TRUE #define USE_STM32_USART3 FALSE #define STM32_USART1_PRIORITY 0xC0 diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h index 2954fb1..4f3950f 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h @@ -6,9 +6,9 @@ #ifndef HEADER__MONITOR #define HEADER__MONITOR -// Default to USART2 +// Default to USART1 #ifndef MONITOR_USART -#define MONITOR_USART SD2 +#define MONITOR_USART SD1 #endif #include <stdio.h> hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-16 21:31:30
|
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 10395230bcd78851504981612ca1ed3b82bdc8e2 (commit) via 226c7f6a1f8e1459f91420c4cda486e6baa8ade0 (commit) via 511fc9aeeba49d046121d2e1ea4d3fbe0f3bb055 (commit) from 27883db5fcfe178511ac38c6f1fe9caaefe39b54 (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 10395230bcd78851504981612ca1ed3b82bdc8e2 Author: Jérémie Dimino <je...@di...> Date: Sun May 16 23:30:34 2010 +0200 change the limit for deciding that an ear is a fake commit 226c7f6a1f8e1459f91420c4cda486e6baa8ade0 Author: Jérémie Dimino <je...@di...> Date: Sun May 16 23:21:08 2010 +0200 change ax12 positions for the close command commit 511fc9aeeba49d046121d2e1ea4d3fbe0f3bb055 Author: Jérémie Dimino <je...@di...> Date: Sun May 16 23:11:43 2010 +0200 wait for ax12/rx64 movement completion ----------------------------------------------------------------------- Changes: diff --git a/info/control/clients/script.ml b/info/control/clients/script.ml index cc7b886..769542e 100644 --- a/info/control/clients/script.ml +++ b/info/control/clients/script.ml @@ -508,26 +508,29 @@ let () = lwt () = logger [fg lred; text "grip-up failure"] in lwt _ = Krobot.Motors.move krobot (-100) 400 800 in lwt () = Krobot.Grip.close krobot in - lwt () = Lwt_unix.sleep 1.0 in lwt _ = Krobot.Grip.empty_up krobot in - lwt () = Lwt_unix.sleep 1.0 in lwt _ = Krobot.Motors.move krobot 100 400 800 in return ()); register ~path:["grip"] "empty-up" f0 (fun logger krobot -> - Krobot.Grip.empty_up krobot); + lwt () = Krobot.Grip.empty_up krobot in + logger [text "grip.empty-up: done"]); register ~path:["grip"] "down" f0 (fun logger krobot -> - Krobot.Grip.down krobot); + lwt () = Krobot.Grip.down krobot in + logger [text "grip.down: done"]); register ~path:["grip"] "open" f0 (fun logger krobot -> - Krobot.Grip.open_ krobot); + lwt () = Krobot.Grip.open_ krobot in + logger [text "grip.open: done"]); register ~path:["grip"] "close" f0 (fun logger krobot -> - Krobot.Grip.close krobot); + lwt () = Krobot.Grip.close krobot in + logger [text "grip.open: close"]); register ~path:["grip"] "release" f0 (fun logger krobot -> - Krobot.Grip.release krobot); + lwt () = Krobot.Grip.release krobot in + logger [text "grip.release: close"]); (* +---------------------------------------------------------------+ | Claws | diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index 9a6f06f..078baa5 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -313,29 +313,47 @@ type ax12_action = { aa_velocity : int; } -let set_ax12 = function - | [] -> +let set_ax12 actions = + lwt () = + Lwt_list.iter_p + (fun action -> + USBCard.call Commands.AX12.goto + (get_card card_interface) + (action.aa_id, + action.aa_position, + action.aa_velocity, + `Action)) + actions + in + lwt () = USBCard.call Commands.AX12.action (get_card card_interface) 0xfe in + let rec loop () = + lwt delta = + Lwt_list.fold_left_s + (fun delta action -> + lwt pos = USBCard.call Commands.AX12.get_position (get_card card_interface) (action.aa_id, 32000) in + return (max delta (abs (pos - action.aa_position)))) + 0 actions + in + lwt () = Lwt_unix.sleep 0.1 in + if delta < 10 then return () - | [action] -> - USBCard.call Commands.AX12.goto - (get_card card_interface) - (action.aa_id, - action.aa_position, - action.aa_velocity, - `Now) - | actions -> - lwt () = - Lwt_list.iter_p - (fun action -> - USBCard.call Commands.AX12.goto - (get_card card_interface) - (action.aa_id, - action.aa_position, - action.aa_velocity, - `Action)) - actions - in - USBCard.call Commands.AX12.action (get_card card_interface) 0xfe + else + loop () + in + loop () + +let set_rx64 position velocity = + lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x20, velocity) in + lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x1E, position) in + let rec loop () = + lwt pos = RX64Card.call Commands.RX64.read16 (get_card card_rx64) (0x24, 2) in + lwt () = Lwt_unix.sleep 0.1 in + if abs (pos - position) < 10 then + return () + else + loop () + in + loop () (* +-----------------------------------------------------------------+ | Grip | @@ -360,42 +378,39 @@ struct aa_velocity = 0 }] let grip_release () = - USBCard.call Commands.AX12.goto (get_card card) (3, 200, 0, `Now) + set_ax12 [{ aa_id = 3; + aa_position = 200; + aa_velocity = 0 }] let grip_up () = - lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x20, 50) in - lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x1E, 222) - and () = set_ax12 [{ aa_id = 2; - aa_position = 180; - aa_velocity = 70 }] in + let thread = + lwt () = set_rx64 222 50 + and () = set_ax12 [{ aa_id = 2; + aa_position = 180; + aa_velocity = 70 }] + in + return () + in lwt () = Lwt_unix.sleep 0.5 in - lwt load = RX64Card.call Commands.RX64.read16 (get_card card_rx64) (0x28, 2) in - if load >= 790 then + lwt pos = RX64Card.call Commands.RX64.read16 (get_card card_rx64) (0x24, 2) in + if pos > 520 then begin + cancel thread; lwt () = RX64Card.call Commands.RX64.write8 (get_card card_rx64) (0x18, 0) in lwt () = grip_open () in return false - else - let rec loop () = - lwt pos = RX64Card.call Commands.RX64.read16 (get_card card_rx64) (0x24, 2) in - if pos <= 225 then - lwt () = grip_release () in - return true - else - Lwt_unix.sleep 0.1 >> loop () - in - loop () + end else + lwt () = thread in + return true let grip_empty_up () = - lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x20, 50) in - lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x1E, 222) + lwt () = set_rx64 222 50 and () = set_ax12 [{ aa_id = 2; aa_position = 180; aa_velocity = 90 }] in return () let grip_down () = - lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x20, 50) in - lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x1E, 536) + lwt () = set_rx64 536 50 and () = set_ax12 [{ aa_id = 2; aa_position = 510; aa_velocity = 50 }; @@ -406,10 +421,10 @@ struct let grip_close () = set_ax12 [{ aa_id = 2; - aa_position = 574; + aa_position = 572; aa_velocity = 200 }; { aa_id = 3; - aa_position = 383; + aa_position = 371; aa_velocity = 200 }] let () = hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-16 20:43:13
|
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 27883db5fcfe178511ac38c6f1fe9caaefe39b54 (commit) from 1bf87865c23ba2d57bca7c09327bd2b60723ed0a (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 27883db5fcfe178511ac38c6f1fe9caaefe39b54 Author: Jérémie Dimino <je...@di...> Date: Sun May 16 22:42:49 2010 +0200 Gay! ----------------------------------------------------------------------- Changes: diff --git a/info/control/tests/grip_gay.ml b/info/control/tests/grip_gay.ml new file mode 100644 index 0000000..32614f1 --- /dev/null +++ b/info/control/tests/grip_gay.ml @@ -0,0 +1,23 @@ +(* + * grip_gay.ml + * ----------- + * Copyright : (c) 2010, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +open Lwt + +lwt () = + lwt krobot = Krobot.create () in + let rec loop () = + lwt () = Lwt_io.printl "going up" in + lwt _ = Krobot.Grip.up krobot in + lwt () = Lwt_unix.sleep 3.0 in + lwt () = Lwt_io.printl "going down" in + lwt _ = Krobot.Grip.down krobot in + lwt () = Lwt_unix.sleep 4.0 in + loop () + in + loop () hooks/post-receive -- krobot |
From: Nicolas D. <Ba...@us...> - 2010-05-16 20:20:39
|
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 1bf87865c23ba2d57bca7c09327bd2b60723ed0a (commit) from 893537e61d4b782df747466bd71862c002821406 (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 1bf87865c23ba2d57bca7c09327bd2b60723ed0a Author: Nicolas Dandrimont <Nic...@cr...> Date: Sun May 16 22:10:36 2010 +0200 Slow AX12's are sloooow (answer delays are sometimes > 1ms) ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Interface_Robot/Firmware/ax12.c b/elec/boards/Interface_Robot/Firmware/ax12.c index d476995..d4ed2b3 100644 --- a/elec/boards/Interface_Robot/Firmware/ax12.c +++ b/elec/boards/Interface_Robot/Firmware/ax12.c @@ -248,8 +248,8 @@ BYTE lastErrorAX12(void) { * * @return #TRUE si un AX12 a repondu, #FALSE sinon */ -BOOL pingAX12(BYTE id, UINT timeOut) { - UINT count; +BOOL pingAX12(BYTE id, WORD timeOut) { + WORD count; // Envoi de la requete sendInstPacket(id, INST_PING, 0); @@ -322,15 +322,15 @@ void writeValue16(BYTE id, BYTE reg, WORD value) { * * @return #TRUE si la reponse a ete recue, #FALSE en cas de Time Out */ -BYTE readValue8(BYTE id, BYTE reg, UINT timeOut) { - UINT count; +BYTE readValue8(BYTE id, BYTE reg, WORD timeOut) { + WORD count; // Envoi de la requete setParam(0, reg); setParam(1, 1); // On lit 1 octet sendInstPacket(id, INST_READ, 2); - for (count = 0; count < 10*timeOut; count++) { + for (count = 0; count < timeOut; count++) { if (glbReceived) { glbTimedOut = FALSE; return glbBuffer[5]; @@ -355,8 +355,8 @@ BYTE readValue8(BYTE id, BYTE reg, UINT timeOut) { * * @return #TRUE si la reponse a ete recue, #FALSE en cas de Time Out */ -WORD readValue16(BYTE id, BYTE reg, UINT timeOut) { - UINT count; +WORD readValue16(BYTE id, BYTE reg, WORD timeOut) { + WORD count; WORD_VAL word; // Envoi de la requete @@ -364,7 +364,7 @@ WORD readValue16(BYTE id, BYTE reg, UINT timeOut) { setParam(1, 2); // On lit 2 octets sendInstPacket(id, INST_READ, 2); - for (count = 0; count < 10*timeOut; count++) { + for (count = 0; count < timeOut; count++) { if (glbReceived) { glbTimedOut = FALSE; word.byte.HB = glbBuffer[6]; @@ -467,7 +467,7 @@ void goTo(BYTE id, WORD position, WORD speed, BYTE mode) { * * @return #TRUE si la reponse a ete recue, #FALSE en cas de Time Out */ -int getPosition(BYTE id, UINT timeOut) { +int getPosition(BYTE id, WORD timeOut) { return readValue16(id, P_PRESENT_POSITION, timeOut); } @@ -482,7 +482,7 @@ int getPosition(BYTE id, UINT timeOut) { * * @return #TRUE si la reponse a ete recue, #FALSE en cas de Time Out */ -int getSpeed(BYTE id, UINT timeOut) { +int getSpeed(BYTE id, WORD timeOut) { return readValue16(id, P_PRESENT_SPEED, timeOut); } diff --git a/elec/boards/Interface_Robot/Firmware/ax12.h b/elec/boards/Interface_Robot/Firmware/ax12.h index 50dd474..24b1118 100644 --- a/elec/boards/Interface_Robot/Firmware/ax12.h +++ b/elec/boards/Interface_Robot/Firmware/ax12.h @@ -120,14 +120,14 @@ void configAX12(BYTE newId); // Fonctions haut niveau BYTE lastErrorAX12(void); -BOOL pingAX12(BYTE id, UINT timeOut); +BOOL pingAX12(BYTE id, WORD timeOut); void resetAX12(BYTE id); void writeValue8(BYTE id, BYTE reg, BYTE value); void writeValue16(BYTE id, BYTE reg, WORD value); -BYTE readValue8(BYTE id, BYTE reg, UINT timeOut); -WORD readValue16(BYTE id, BYTE reg, UINT timeOut); +BYTE readValue8(BYTE id, BYTE reg, WORD timeOut); +WORD readValue16(BYTE id, BYTE reg, WORD timeOut); void regWrite8(BYTE id, BYTE reg, BYTE value); void regWrite16(BYTE id, BYTE reg, WORD value); @@ -135,7 +135,7 @@ void actionAX12(BYTE id); // Helper void goTo(BYTE id, WORD position, WORD speed, BYTE mode); -int getPosition(BYTE id, UINT timeOut); -int getSpeed(BYTE id, UINT timeOut); +int getPosition(BYTE id, WORD timeOut); +int getSpeed(BYTE id, WORD timeOut); #endif diff --git a/elec/boards/Interface_Robot/Firmware/main.c b/elec/boards/Interface_Robot/Firmware/main.c index df84eae..351c9ac 100644 --- a/elec/boards/Interface_Robot/Firmware/main.c +++ b/elec/boards/Interface_Robot/Firmware/main.c @@ -906,26 +906,32 @@ void ProcessIO(void) { switch (ReceivedDataBuffer.DATA[0]) { case AX12_PING: - ToSendDataBuffer.DATA[0] = pingAX12(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2]); + word1.byte.HB = ReceivedDataBuffer.DATA[2]; + word1.byte.LB = ReceivedDataBuffer.DATA[3]; + ToSendDataBuffer.DATA[0] = pingAX12(ReceivedDataBuffer.DATA[1], word1.Val); break; case AX12_READ8: - ToSendDataBuffer.DATA[0] = readValue8(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2], ReceivedDataBuffer.DATA[4]); + word1.byte.HB = ReceivedDataBuffer.DATA[3]; + word1.byte.LB = ReceivedDataBuffer.DATA[4]; + ToSendDataBuffer.DATA[0] = readValue8(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2], word1.Val); break; case AX12_READ16: - word1.Val = readValue16(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2], ReceivedDataBuffer.DATA[4]); - ToSendDataBuffer.DATA[0] = word1.byte.HB; - ToSendDataBuffer.DATA[1] = word1.byte.LB; + word1.byte.HB = ReceivedDataBuffer.DATA[3]; + word1.byte.LB = ReceivedDataBuffer.DATA[4]; + word2.Val = readValue16(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2], word1.Val); + ToSendDataBuffer.DATA[0] = word2.byte.HB; + ToSendDataBuffer.DATA[1] = word2.byte.LB; break; case AX12_WRITE8: - writeValue8(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2], ReceivedDataBuffer.DATA[4]); + writeValue8(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2], ReceivedDataBuffer.DATA[3]); break; case AX12_WRITE16: - word1.byte.HB = ReceivedDataBuffer.DATA[4]; - word1.byte.LB = ReceivedDataBuffer.DATA[5]; + word1.byte.HB = ReceivedDataBuffer.DATA[3]; + word1.byte.LB = ReceivedDataBuffer.DATA[4]; writeValue16(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2], word1.Val); break; @@ -938,57 +944,65 @@ void ProcessIO(void) { break; case AX12_GET_POS: - word1.Val = getPosition(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2]); - ToSendDataBuffer.DATA[0] = word1.byte.HB; - ToSendDataBuffer.DATA[1] = word1.byte.LB; + word1.byte.HB = ReceivedDataBuffer.DATA[2]; + word1.byte.LB = ReceivedDataBuffer.DATA[3]; + word2.Val = getPosition(ReceivedDataBuffer.DATA[1], word1.Val); + ToSendDataBuffer.DATA[0] = word2.byte.HB; + ToSendDataBuffer.DATA[1] = word2.byte.LB; break; case AX12_GET_SPEED: - word1.Val = getSpeed(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2]); - ToSendDataBuffer.DATA[0] = word1.byte.HB; - ToSendDataBuffer.DATA[1] = word1.byte.LB; + word1.byte.HB = ReceivedDataBuffer.DATA[2]; + word1.byte.LB = ReceivedDataBuffer.DATA[3]; + word2.Val = getSpeed(ReceivedDataBuffer.DATA[1], word1.Val); + ToSendDataBuffer.DATA[0] = word2.byte.HB; + ToSendDataBuffer.DATA[1] = word2.byte.LB; break; case AX12_GET_LOAD: - word1.Val = readValue16(ReceivedDataBuffer.DATA[1], P_PRESENT_LOAD, ReceivedDataBuffer.DATA[2]); - ToSendDataBuffer.DATA[0] = word1.byte.HB; - ToSendDataBuffer.DATA[1] = word1.byte.LB; + word1.byte.HB = ReceivedDataBuffer.DATA[2]; + word1.byte.LB = ReceivedDataBuffer.DATA[3]; + word2.Val = readValue16(ReceivedDataBuffer.DATA[1], P_PRESENT_LOAD, word1.Val); + ToSendDataBuffer.DATA[0] = word2.byte.HB; + ToSendDataBuffer.DATA[1] = word2.byte.LB; break; case AX12_GET_STATS: + word1.byte.HB = ReceivedDataBuffer.DATA[2]; + word1.byte.LB = ReceivedDataBuffer.DATA[3]; // Position - word1.Val = getPosition(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2]); - ToSendDataBuffer.DATA[0] = word1.byte.HB; - ToSendDataBuffer.DATA[1] = word1.byte.LB; + word2.Val = getPosition(ReceivedDataBuffer.DATA[1], word1.Val); + ToSendDataBuffer.DATA[0] = word2.byte.HB; + ToSendDataBuffer.DATA[1] = word2.byte.LB; // Speed - word1.Val = getSpeed(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2]); - ToSendDataBuffer.DATA[2] = word1.byte.HB; - ToSendDataBuffer.DATA[3] = word1.byte.LB; + word2.Val = getSpeed(ReceivedDataBuffer.DATA[1], word1.Val); + ToSendDataBuffer.DATA[2] = word2.byte.HB; + ToSendDataBuffer.DATA[3] = word2.byte.LB; // Torque - word1.Val = readValue16(ReceivedDataBuffer.DATA[1], P_PRESENT_LOAD, ReceivedDataBuffer.DATA[2]); - ToSendDataBuffer.DATA[4] = word1.byte.HB; - ToSendDataBuffer.DATA[5] = word1.byte.LB; + word2.Val = readValue16(ReceivedDataBuffer.DATA[1], P_PRESENT_LOAD, word1.Val); + ToSendDataBuffer.DATA[4] = word2.byte.HB; + ToSendDataBuffer.DATA[5] = word2.byte.LB; // Voltage - ToSendDataBuffer.DATA[6] = readValue8(ReceivedDataBuffer.DATA[1], P_PRESENT_VOLTAGE, ReceivedDataBuffer.DATA[2]); + ToSendDataBuffer.DATA[6] = readValue8(ReceivedDataBuffer.DATA[1], P_PRESENT_VOLTAGE, word1.Val); // Temperature - ToSendDataBuffer.DATA[7] = readValue8(ReceivedDataBuffer.DATA[1], P_PRESENT_TEMPERATURE, ReceivedDataBuffer.DATA[2]); + ToSendDataBuffer.DATA[7] = readValue8(ReceivedDataBuffer.DATA[1], P_PRESENT_TEMPERATURE, word1.Val); // CW Angle Limit - word1.Val = readValue16(ReceivedDataBuffer.DATA[1], P_CW_ANGLE_LIMIT, ReceivedDataBuffer.DATA[2]); - ToSendDataBuffer.DATA[8] = word1.byte.HB; - ToSendDataBuffer.DATA[9] = word1.byte.LB; + word2.Val = readValue16(ReceivedDataBuffer.DATA[1], P_CW_ANGLE_LIMIT, word1.Val); + ToSendDataBuffer.DATA[8] = word2.byte.HB; + ToSendDataBuffer.DATA[9] = word2.byte.LB; // CCW Angle Limit - word1.Val = readValue16(ReceivedDataBuffer.DATA[1], P_CCW_ANGLE_LIMIT, ReceivedDataBuffer.DATA[2]); - ToSendDataBuffer.DATA[10] = word1.byte.HB; - ToSendDataBuffer.DATA[11] = word1.byte.LB; + word2.Val = readValue16(ReceivedDataBuffer.DATA[1], P_CCW_ANGLE_LIMIT, word1.Val); + ToSendDataBuffer.DATA[10] = word2.byte.HB; + ToSendDataBuffer.DATA[11] = word2.byte.LB; break; case AX12_WRITE_REG8: - regWrite8(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2], ReceivedDataBuffer.DATA[4]); + regWrite8(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2], ReceivedDataBuffer.DATA[3]); break; case AX12_WRITE_REG16: - word1.byte.HB = ReceivedDataBuffer.DATA[4]; - word1.byte.LB = ReceivedDataBuffer.DATA[5]; + word1.byte.HB = ReceivedDataBuffer.DATA[3]; + word1.byte.LB = ReceivedDataBuffer.DATA[4]; regWrite16(ReceivedDataBuffer.DATA[1], ReceivedDataBuffer.DATA[2], word1.Val); break; diff --git a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof index 7031dbf..284d606 100644 Binary files a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof and b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof differ diff --git a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex index 0bbe3f3..e96fbb5 100644 --- a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex +++ b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex @@ -1,51 +1,51 @@ :020000040000FA -:06000000CDEF22F012001A +:0600000000EF23F01200E6 :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:06080000CDEF22F0120012 +:0608000000EF23F01200DE :060808003AEF04F01200BB :060818009AEF04F012004B -:06082A000600504600002C -:1008300086000000240000002F460000CB000000CE -:10084000210000002C4600003C01000003000000D5 -:100850002346000033010000090000001346000099 -:10086000EC000000100000000A4600002A01000011 +:06082A000600B6460000C6 +:10083000860000002400000095460000CB00000068 +:1008400021000000924600003C010000030000006F +:1008500089460000330100000900000079460000CD +:10086000EC00000010000000704600002A010000AB :04087000090000007B :0C087400DACFE4FFE2CFDAFFE9CFE4FFC7 :10088000EACFE4FFF6CFE4FFF7CFE4FFF5CFE4FFD4 :10089000F3CFE4FFF4CFE4FFFACFE4FF00EE22F061 :1008A000140EE80403E3EECFE4FFFBD700EE00F004 -:1008B000220EE80403E3EECFE4FFFBD7A5EC0DF036 -:1008C000A1A203D098EC1BF0A1929EAA03D0C0EC89 -:1008D00013F09E9AF2A403D0D6EC1CF0F294B8EC7C -:1008E0000DF002E2E16AE552B6EC0DF0E55200EEE1 +:1008B000220EE80403E3EECFE4FFFBD7EAEC0DF0F1 +:1008C000A1A203D0CBEC1BF0A1929EAA03D005EC11 +:1008D00014F09E9AF2A403D009EC1DF0F294FDEC02 +:1008E0000DF002E2E16AE552FBEC0DF0E55200EE9C :1008F00021F0220EE80403E3E5CFEDFFFBD700EE85 :1009000035F0140EE80403E3E5CFEDFFFBD7E5CFA8 :10091000FAFFE5CFF4FFE5CFF3FFE5CFF5FFE5CF35 :10092000F7FFE5CFF6FFE5CFEAFFE5CFE9FFE5CF3B :10093000DAFF1100D8CFE4FFE0CFE4FFE46EDACFB6 -:10094000E4FFE2CFDAFFF3CFE4FFF4CFE4FFA5EC5E -:100950000DF0B8EC0DF002E2E16AE552B6EC0DF0F4 +:10094000E4FFE2CFDAFFF3CFE4FFF4CFE4FFEAEC19 +:100950000DF0FDEC0DF002E2E16AE552FBEC0DF06A :10096000E552E5CFF4FFE5CFF3FFE5CFDAFFE55041 -:10097000E5CFE0FFE5CFD8FF100004D84BEC0EF038 -:1009800048D8FCD70F0EC11202D815EF0EF0F0ECCC -:100990000DF0E6522CEC0DF00001FC6F070EFC5D33 -:1009A00011E1E66AE3EC20F0E552DF6E000EDF8035 -:1009B000C0EC0DF0E66A9FEC22F0E552000EDF90ED -:1009C000C0EC0DF093809382948C948ED08EF28E36 -:1009D000F28C770EC86E0E0EE66E5AEC1EF0E552E3 +:10097000E5CFE0FFE5CFD8FF100004D890EC0EF0F3 +:1009800048D8FCD70F0EC11202D85AEF0EF035EC42 +:100990000EF0E65271EC0DF00001FC6F070EFC5DED +:1009A00011E1E66A16EC21F0E552DF6E000EDF8001 +:1009B00005EC0EF0E66AD2EC22F0E552000EDF9074 +:1009C00005EC0EF093809382948C948ED08EF28EF0 +:1009D000F28C770EC86E0E0EE66E8DEC1EF0E552B0 :1009E0003F0E8A1693160101336B346B356B366BF1 -:1009F000010E376FBBEC13F083EC1BF0E66AB1EC31 -:100A00001CF0E552C6EC1DF060EC19F0E55201EF68 +:1009F000010E376F00EC14F0B6EC1BF0E66AE4EC85 +:100A00001CF0E552F9EC1DF093EC19F0E55246EFBD :100A10000EF0D9CFE6FFE1CFD9FF170EE126160E73 -:100A2000DB6A0101375102E020EC0CF0200E0001DE -:100A3000605D03E36D50020B02E016EF0CF070EC0A -:100A400019F0160EDB5036E09EEC1DF0000932E086 +:100A2000DB6A0101375102E065EC0CF0200E000199 +:100A3000605D03E36D50020B02E05BEF0CF0A3EC92 +:100A400019F0160EDB5036E0D1EC1DF0000932E053 :100A500001013551361102E1000E08D035C1E9FF20 :100A600036C1EAFFEF50800B01E0010E000922E1E0 :100A70000501406B01013851382B0501416F05011B :100A80000C0E426F0501436B400EE66E400EE66EA3 -:100A9000050EE66E010EE66E010EE66E66EC12F0D5 +:100A9000050EE66E010EE66E010EE66EABEC12F090 :100AA000006E050EE15E0050F3CF35F1F4CF36F164 :100AB000160EDB6A01013551361102E1000E08D035 :100AC00035C1E9FF36C1EAFFEF50800B01E0010EAE @@ -54,41 +54,41 @@ :100AF0000501416F0501040E426F01013951EA6A97 :100B0000CB0FE96E000EEA22EFCF43F5400EE66E02 :100B1000400EE66E050EE66E010EE66E010EE66E06 -:100B200066EC12F0006E050EE15E0050F3CF35F179 +:100B2000ABEC12F0006E050EE15E0050F3CF35F134 :100B3000F4CF36F101013951EA6ACB0FE96E000EAC :100B4000EA22EF6A010139291F0B0101396F010106 :100B50003351341102E1000E08D033C1E9FF34C132 -:100B6000EAFFEF50800B01E0010E000902E016EFF2 -:100B70000CF005010251070A02E17CEF0BF0020ABA -:100B800002E14EEF0BF00E0A02E1F5EF0AF0060A61 -:100B900002E17AEF0AF0040A01E1A0D20F0A01E1B2 -:100BA000F5D1040A1AE0030A07E0010A02E0D5EFD2 -:100BB0000BF0FF0016EF0CF0E66AE3EC20F0E552D4 -:100BC000DF6E000EDB80DFCFE6FFE66AC3EC20F0CD -:100BD000E552E552FF0016EF0CF0010135513611D8 +:100B6000EAFFEF50800B01E0010E000902E05BEFAD +:100B70000CF005010251070A02E1C1EF0BF0020A75 +:100B800002E193EF0BF00E0A02E13AEF0BF0060AD6 +:100B900002E1BFEF0AF0040A01E1A0D20F0A01E16D +:100BA000F5D1040A1AE0030A07E0010A02E01AEF8D +:100BB0000CF0FF005BEF0CF0E66A16EC21F0E5525A +:100BC000DF6E000EDB80DFCFE6FFE66AF6EC20F09A +:100BD000E552E552FF005BEF0CF001013551361193 :100BE00002E1000E08D035C1E9FF36C1EAFFEF503F :100BF000800B01E0010E000901E0C6D100C540F5FF :100C00000501416B0501030E426F0501436B0501B0 :100C10000851050A01E101D10F0A01E17ED00E0A57 :100C200071E0070A64E0010A20E0030A06E0010A15 -:100C300001E080D1FCC048F580D10501486B6F0E02 +:100C300001E080D1FCC048F580D10501486BD50E9C :100C4000006E430E016E026A00C0E6FF01C0E6FFBF -:100C500002C0E6FF480EE66E050EE66EA7EC20F039 -:100C6000036E050EE15E035068D10501486B630E0B +:100C500002C0E6FF480EE66E050EE66EDAEC20F006 +:100C6000036E050EE15E035068D10501486BC90EA5 :100C7000006E430E016E026A00C0E6FF01C0E6FF8F -:100C800002C0E6FF480EE66E050EE66EA7EC20F009 -:100C9000036E050EE15E0350610E006E430E016EA1 +:100C800002C0E6FF480EE66E050EE66EDAEC20F0D6 +:100C9000036E050EE15E0350C70E006E430E016E3B :100CA000026A00C0E6FF01C0E6FF02C0E6FF480E90 -:100CB000E66E050EE66EA7EC20F0036E050EE15E13 -:100CC0000350580E006E430E016E026A00C0E6FF2C +:100CB000E66E050EE66EDAEC20F0036E050EE15EE0 +:100CC0000350BE0E006E430E016E026A00C0E6FFC6 :100CD00001C0E6FF02C0E6FF480EE66E050EE66EB6 -:100CE000A7EC20F0036E050EE15E035026D192CFF3 +:100CE000DAEC20F0036E050EE15E035026D192CFC0 :100CF00048F593CF49F594CF4AF595CF4BF596CF6C :100D00004CF51BD180CF48F581CF49F582CF4AF50C :100D100083CF4BF584CF4CF510D1800EE66E080ED4 -:100D2000E66E39EC22F0E552E552C580EFEC22F098 -:100D3000C00EE66E8EEC21F0E552E66A8EEC21F0F4 -:100D4000E552C582EFEC22F0C10EE66E8EEC21F08A +:100D2000E66E6CEC22F0E552E552C58022EC23F031 +:100D3000C00EE66EC1EC21F0E552E66AC1EC21F08E +:100D4000E552C58222EC23F0C10EE66EC1EC21F023 :100D5000E552010EDB6A020EDB6A010EDBCF00F00A :100D6000020EDBCF01F0040E005C000E01584FE2D2 :100D7000010EF36E150EF3CFDBFFC586130EDB6A93 @@ -97,34 +97,34 @@ :100DA000DBCFE9FF020EDBCFEAFF480EE926050E96 :100DB000EA22C9CFEFFF150EDB6A06D0130EDB2A3D :100DC000140E01E3DB2ADED7150EDB5008E0050127 -:100DD000080E436FC58AC588EFEC22F018D0010ECB +:100DD000080E436FC58AC58822EC23F018D0010E97 :100DE000DBCF00F0020EDBCF01F0030E005C000E43 -:100DF000015803E2C59AC58802D0C58AC588EFECC0 -:100E000022F0010EDB2A020E01E3DB2AA6D7C584FD -:100E1000EFEC22F002EC23F090D0010EDB6A020E20 +:100DF000015803E2C59AC58802D0C58AC58822EC8D +:100E000023F0010EDB2A020E01E3DB2AA6D7C584FC +:100E100022EC23F035EC23F090D0010EDB6A020EB9 :100E2000DB6A010EDBCF00F0020EDBCF01F0040E17 :100E3000005C000E015801E37CD0010EDBCFE6FF21 -:100E400064EC1AF0E5520B0E28C0DBFF0C0E29C033 +:100E400097EC1AF0E5520B0E28C0DBFF0C0E29C000 :100E5000DBFF0D0E2AC0DBFF0E0E2BC0DBFF040EE6 :100E60002A6E2B6A010EDBCF2FF0020EDBCF30F0A3 -:100E700056EC18F028C0E9FF29C0EAFF480EE92621 +:100E700089EC18F028C0E9FF29C0EAFF480EE926EE :100E8000050EEA220E0EDBCFEFFF040E2A6E2B6A50 -:100E9000010EDBCF2FF0020EDBCF30F056EC18F056 +:100E9000010EDBCF2FF0020EDBCF30F089EC18F023 :100EA00028C0E9FF29C0EAFF010EE926000EEA2268 :100EB000480EE926050EEA220D0EDBCFEFFF040EE9 :100EC0002A6E2B6A010EDBCF2FF0020EDBCF30F043 -:100ED00056EC18F028C0E9FF29C0EAFF020EE92607 +:100ED00089EC18F028C0E9FF29C0EAFF020EE926D4 :100EE000000EEA22480EE926050EEA220C0EDBCFA0 :100EF000EFFF040E2A6E2B6A010EDBCF2FF0020EDD -:100F0000DBCF30F056EC18F028C0E9FF29C0EAFF2B +:100F0000DBCF30F089EC18F028C0E9FF29C0EAFFF8 :100F1000030EE926000EEA22480EE926050EEA2213 :100F20000B0EDBCFEFFF010EDB2A020E01E3DB2A03 :100F300078D703D00501020E436F400EE66E400ED7 -:100F4000E66E050EE66E010EE66E010EE66E66ECCE +:100F4000E66E050EE66E010EE66E010EE66EABEC89 :100F500012F0006E050EE15E0050F3CF35F1F4CFD4 :100F600036F1400EE66E000EE66E050EE66EE66A9F -:100F7000010EE66E66EC12F0006E050EE15E0050AA -:100F8000F3CF33F1F4CF34F116EF0CF00501085133 +:100F7000010EE66EABEC12F0006E050EE15E005065 +:100F8000F3CF33F1F4CF34F15BEF0CF005010851EE :100F9000050A54E0010A49E0070A37E0010A25E0A2 :100FA000030A13E0010A01E080D005010951921201 :100FB00005010A51931205010B51941205010C51C0 @@ -136,914 +136,919 @@ :1010100005010A518A1205010B518B1205010C5171 :101020008C1205010D518D1245D0050109510101A8 :101030002F1305010A1D01012F173CD0050109A13D -:1010400007D00AC5E6FFE66A2DEC1CF0E552E55232 -:10105000050109A308D00BC5E6FF010EE66E2DECD5 +:1010400007D00AC5E6FFE66A60EC1CF0E552E552FF +:10105000050109A308D00BC5E6FF010EE66E60ECA2 :101060001CF0E552E552050109A508D00CC5E6FFC4 -:10107000020EE66E2DEC1CF0E552E552050109A7C3 -:1010800008D00DC5E6FF030EE66E2DEC1CF0E55210 +:10107000020EE66E60EC1CF0E552E552050109A790 +:1010800008D00DC5E6FF030EE66E60EC1CF0E552DD :10109000E552050109A908D00EC5E6FF040EE66E6B -:1010A0002DEC1CF0E552E55205D0030EE66E54EC33 +:1010A00060EC1CF0E552E55205D0030EE66E87ECCD :1010B00022F0E552400EE66E000EE66E050EE66E7C -:1010C000E66A010EE66E66EC12F0006E050EE15E59 -:1010D0000050F3CF33F1F4CF34F1A8D301013551EF +:1010C000E66A010EE66EABEC12F0006E050EE15E14 +:1010D0000050F3CF33F1F4CF34F1EDD301013551AA :1010E000361102E1000E08D035C1E9FF36C1EAFF32 -:1010F000EF50800B01E0010E000901E0FAD100C5BC +:1010F000EF50800B01E0010E000901E03FD200C576 :1011000040F50501416B0501030E426F0501436B7C -:10111000050108510F0A01E1BCD1010A01E1B3D177 -:10112000030A01E1AAD1010A01E190D1070A01E114 -:1011300081D1010A01E1E1D0030A01E1C3D0010A32 -:1011400001E1A8D00F0A01E18DD0010A68E0030A8D -:101150004FE0010A41E0070A24E0010A11E0030A16 -:1011600001E09DD105010A51E66EE66A09C5E6FF78 -:10117000D3EC14F0E552E552E5520501486F92D1E7 -:1011800005010C51E66EE66A0AC5E6FF09C5E6FFF1 -:101190002DEC15F0E552E552E552E5520501486F98 -:1011A00081D105010C51E66EE66A0AC5E6FF09C564 -:1011B000E6FF90EC15F0E552E552E552E5520F0ED0 -:1011C000F3CFDBFF100EF4CFDBFF100EDBCF48F5C3 -:1011D0000F0EDBCF49F566D10CC5E6FF0AC5E6FF69 -:1011E00009C5E6FF22EC15F0E552E552E5525AD169 -:1011F000100E0CC5DBFF0F0E0DC5DBFF0F0EDBCF96 -:10120000E6FF100EDBCFE6FF0AC5E6FF09C5E6FFE5 -:1012100026EC15F0E552E552E552E55243D1100EA9 -:101220000AC5DBFF0F0E0BC5DBFF120E0CC5DBFF83 -:10123000110E0DC5DBFF0EC5E6FF110EDBCFE6FF7D -:10124000120EDBCFE6FF0F0EDBCFE6FF100EDBCF7B -:10125000E6FF09C5E6FF11EC16F0006E060EE15E32 -:10126000005020D105010A51E66EE66A09C5E6FF85 -:1012700034EC16F0E552E552E5520F0EF3CFDBFFEA -:10128000100EF4CFDBFF100EDBCF48F50F0EDBCFD7 -:1012900049F508D105010A51E66EE66A09C5E6FF7F -:1012A00037EC16F0E552E552E5520F0EF3CFDBFFB7 -:1012B000100EF4CFDBFF100EDBCF48F50F0EDBCFA7 -:1012C00049F5F0D005010A51E66EE66A280EE66E91 -:1012D00009C5E6FF90EC15F0E552E552E552E552FE -:1012E0000F0EF3CFDBFF100EF4CFDBFF100EDBCFC2 -:1012F00048F50F0EDBCF49F5D5D005010A51E66E52 -:10130000E66A09C5E6FF34EC16F0E552E552E5520F -:101310000F0EF3CFDBFF100EF4CFDBFF100EDBCF91 -:1013200048F50F0EDBCF49F505010A51E66EE66A76 -:1013300009C5E6FF37EC16F0E552E552E5520F0E0F -:10134000F3CFDBFF100EF4CFDBFF100EDBCF4AF53F -:101350000F0EDBCF4BF505010A51E66EE66A280E4B -:10136000E66E09C5E6FF90EC15F0E552E552E55250 -:10137000E5520F0EF3CFDBFF100EF4CFDBFF100EA4 -:10138000DBCF4CF50F0EDBCF4DF505010A51E66EB4 -:10139000E66A2A0EE66E09C5E6FF2DEC15F0E55269 -:1013A000E552E552E55205014E6F05010A51E66E20 -:1013B000E66A2B0EE66E09C5E6FF2DEC15F0E55248 -:1013C000E552E552E55205014F6F05010A51E66EFF -:1013D000E66A060EE66E09C5E6FF90EC15F0E552EA -:1013E000E552E552E5520F0EF3CFDBFF100EF4CFBE -:1013F000DBFF100EDBCF50F50F0EDBCF51F50501F3 -:101400000A51E66EE66A080EE66E09C5E6FF90EC44 -:1014100015F0E552E552E552E5520F0EF3CFDBFF32 -:10142000100EF4CFDBFF100EDBCF52F50F0EDBCF2B -:1014300053F538D00CC5E6FF0AC5E6FF09C5E6FF3F -:1014400000EC16F0E552E552E5522CD0100E0CC51A -:10145000DBFF0F0E0DC5DBFF0F0EDBCFE6FF100E1F -:10146000DBCFE6FF0AC5E6FF09C5E6FF04EC16F090 -:10147000E552E552E552E55215D009C5E6FF0CEC00 -:1014800016F0E5520FD009C5E6FF1DEC15F0E55248 -:1014900009D009C5E6FFC1EC14F0E55203D00501FF -:1014A000010E436F400EE66E400EE66E050EE66ED0 -:1014B000010EE66E010EE66E66EC12F0006E050E91 -:1014C000E15E0050F3CF35F1F4CF36F1400EE66E19 -:1014D000000EE66E050EE66EE66A010EE66E66EC3E -:1014E00012F0006E050EE15E0050F3CF33F1F4CF41 -:1014F00034F19CD105010851070A4FE0010A41E08F -:10150000030A33E0010A29E0070A1EE0010A14E099 -:10151000030A09E0010A01E04FD00E0EE66E61EC0D -:101520001EF0E5524ED0010EE66E0E0EE66E64EC35 -:101530001EF0E552E55245D0E66A0E0EE66E64EC0A -:101540001EF0E552E5523DD0010EE66E0E0EE66E3F -:101550006CEC1EF0E552E55234D0E66A0E0EE66EF3 -:101560006CEC1EF0E552E5522CD00AC5E6FF09C529 -:10157000E6FF0E0EE66E77EC1EF0E552E552E55200 -:1015800020D0090EE66E050EE66E0E0EE66E84ECB9 -:101590001EF0E552E552E55214D00A0EE66E050E35 -:1015A000E66E09C5E6FF0E0EE66E8AEC1EF0E55209 -:1015B000E552E552E55205D0010EE66E54EC22F0FC -:1015C000E552400EE66E000EE66E050EE66EE66A29 -:1015D000010EE66E66EC12F0006E050EE15E005044 -:1015E000F3CF33F1F4CF34F121D105010851030ACF -:1015F00011E0010A09E0030A01E037D009C5E6FF5E -:10160000F1EC1CF0E55236D009C5E6FFF5EC1CF014 -:10161000E55230D00E0E0CC5DBFF0D0E0DC5DBFF05 -:101620000C0E0EC5DBFF0B0E0FC5DBFFD9500B0FE9 -:10163000E96EDACFEAFFEECFE6FFEECFE6FFEECFC0 -:10164000E6FFEFCFE6FF0BC5E6FF0AC5E6FF09C5DB -:10165000E6FFF9EC1CF0006E070EE15E0050010E93 -:10166000F36E160EF3CFDBFF05D0010EE66E54ECE1 -:1016700022F0E552400EE66E000EE66E050EE66EB6 -:10168000E66A010EE66E66EC12F0006E050EE15E93 -:101690000050F3CF33F1F4CF34F1C8D0800EE66EB2 -:1016A000080EE66E39EC22F0E552E552C580EFEC0B -:1016B00022F0E66A8EEC21F0E552080EE66E050E89 -:1016C000E66E1BEC20F0E552E552C58402EC23F0F7 -:1016D000400EE66E000EE66E050EE66EE66A010E40 -:1016E000E66E66EC12F0006E050EE15E0050F3CF80 -:1016F00033F1F4CF34F19AD04F0EAB16AC9ACF0E33 -:101700009D16020EE66EE66A7C0EE66ED6EC1FF0C3 -:10171000E552E552E552040EE66EE66AB5EC14F0C9 -:10172000E552E552100EE66E010EE66EB5EC14F0D1 -:10173000E552E552020EE66E030EE66E010EE66E0F -:1017400030EC14F0E552E552E552040EE66EE66A1E -:10175000B5EC14F0E552E552100EE66E010EE66EA1 -:10176000B5EC14F0E552E552020EE66E030EE66E9D -:10177000010EE66E30EC14F0E552E552E552BBEC9A -:1017800013F0400EE66E000EE66E050EE66EE66A9B -:10179000010EE66E66EC12F0006E050EE15E005082 -:1017A000F3CF33F1F4CF34F141D00101355136118B -:1017B00002E1000E08D035C1E9FF36C1EAFFEF5063 -:1017C000800B01E0010E000931E100C540F5050183 -:1017D000416B0501030E426F0501010E436F400E80 -:1017E000E66E400EE66E050EE66E010EE66E010E2A -:1017F000E66E66EC12F0006E050EE15E0050F3CF6F -:1018000035F1F4CF36F1400EE66E000EE66E050EB1 -:10181000E66EE66A010EE66E66EC12F0006E050EEC -:10182000E15E0050F3CF33F1F4CF34F1170EE15CF9 -:1018300002E2E16AE552E16EE552E7CFD9FF12001C -:1018400001013A513B1104E1100E3A6F270E3B6F34 -:101850003A07000E3B5B6DA207D03A513B112EE1D7 -:101860008A7C8ABC13D027D00001605102E18A9C97 -:1018700022D0600502E18A8C09D0020E605D02E18F -:101880008A8C19D0040E605D03E18A9C8A8E120056 -:10189000100E605D06E101013A513B110FE18A7CB7 -:1018A0000AD0200E605D0AE101013A513B1106E1C8 -:1018B0008A7C8AAC02D08A9E12008A8E120010D9CD -:1018C000210E9BD9500E82D9A9D9630E48D9630E37 -:1018D000EE6E740EEE6E690EEE6E760EEE6E690EA4 -:1018E000EE6E740E64D981D924D926D951D9E66A0D -:1018F000D9D802E2E16AE552B6EF0DF0F1D82D0E2B -:101900007CD9430E2CD9780EEE6E690EEE6E6F0EFA -:10191000EE6E6E0EEE6E200E59D9740E7BD9620EED -:10192000EE6E6C0EEE6E690E42D9EE6E5ED9EE6E04 -:1019300071D9760E4BD9630EEE6E200EEE6E6C0EE4 -:1019400069D9200EEE6EF8D80E0EE66E61EC1EF030 -:10195000E5521ED9010EE66EA5D802E2E16AE55213 -:10196000B6EF0DF012001200C8EF1EF012001E0EAE -:10197000E66E010EE66E34EC12F0E552E552400ED2 -:10198000E66E000EE66E050EE66EE66A010EE66E87 -:1019900066EC12F0006E050EE15E0050F3CF33F1FD -:1019A000F4CF34F112006D840001080EFD6F070EB4 -:1019B000FE6FFD07000EFE5BFD51FE11FAE16D9416 -:1019C0001200D9CFE6FFE1CFD9FFFD0EDBCF2AF021 -:1019D000FE0EDBCF2BF0010E2A1801E12B5033E075 -:1019E000E8682A1802E1E8682B182BE0030E2A1891 -:1019F00001E12B5024E0040E2A1801E12B501DE0D8 -:101A0000020E2A1801E12B5016E0170E2A1801E1E8 -:101A10002B500FE0160E2A1801E12B5008E0150E8E -:101A20002A1801E12B5001E010D0A1DF0FD09EDF7A -:101A30000DD09ADF0BD096DF09D041DF07D05EDFF3 -:101A400005D091DF03D0000001D000D0010E00D0FE -:101A5000E552E7CFD9FF1200C3D8E652D0B202D088 -:101A6000010E15D0D0B802D0020E11D0D0B002D0E5 -:101A7000030E0DD0D0B602D0040E09D0FCAE02D0B9 -:101A8000050E05D0FCAC02D0060E01D0070EDF6EAD -:101A9000D088D086D084D082D080FC9EFC9CDF5041 -:101AA000E552AFD00E0EE66E6CEC1EF0E552E5523C -:101AB000D9CFE6FFDACFE6FF010E7ED8D950150F59 -:101AC000A4D8020E79D8D9502A0F9FD8030E74D803 -:101AD000D9503F0F9AD8040E6FD8540EE15C120013 -:101AE0007FD8540EE126D9CFE9FFDACFEAFF5B0EAB -:101AF000EE6E4B0EEE6E720EEE6E6F0EEE6E5D0EB5 -:101B0000EE6E620EEE6E6F0EEE6E740EEE6E200EC8 -:101B100061D8EE6EEE6E570E7DD86C0EEE6EEE6EE8 -:101B2000790EEE6EEE6AD950150FE96EDACFEAFF44 -:101B3000120050D8EAEF0DF0630E6CD86FD86D0E1E -:101B400045D8720E43D8EE6A1200E65249D8020E0A -:101B5000E126F350DF6E010EF4CFDBFF1200EE6ED4 -:101B60006F0EEE6E6E0EEE6EE6EF0DF0E16E49D08A -:101B7000DF50F36E010EDB50F46E020EE15C1200DA -:101B8000DFCFE6FFE66AC3EC20F0E552E552120033 -:101B9000E66A0E0EE66E64EC1EF0E552E5521200A7 -:101BA000EE6AD9502A0FE96EDACFEAFF12000ED89A -:101BB000200EEE6EEE6E1200E66E0E0EE66E8AECF3 -:101BC0001EF0E552E552E552E5521200EE6E650E4A -:101BD000EE6E1200EE6EEE6EEE6EEE6EEE6E1200B9 -:101BE000D9CFE6FFE1CFD9FF1200EE6AD9503F0FFF -:101BF000E96EDACFEAFF200E12009BDF9ADFD0EF0A -:101C00000DF0E552E7CFD9FF1200E66E000EDA20A4 -:101C1000E66E1200EE6E610EEE6E1200720EEE6E49 -:0A1C2000740ED4DF200EEE6E1200E9 -:061C2A000DEC13F06A6AE4 -:101C3000686A40EC13F06D8C6E6AF0EC12F06D9CEB -:101C4000DF6A21EC13F010E2DF50040DF3CFE9FF5F -:101C5000F4CFEAFF000EE926040EEA22EE6AEE6AED -:101C6000EE6AEE6ADF2AEDD7160E706E68A604D013 -:101C7000030EB6EC12F0FAD70001736B786B796B38 -:101C80007A6B6D98080E6B6F040E6C6F616B606BF6 -:101C9000E552CBEF12F00DEC13F0000160510BE1B7 -:101CA0006D6A696A40EC13F06DB602D06D86FCD7A0 -:101CB0000001010E606F600508E16DBA06D0686A28 -:101CC000696A69806988020E606F6850040B07E0DA -:101CD0006950040B04E0020EB6EC12F089D86DB224 -:101CE00047D06850010B14E06950010B11E09DDFF3 -:101CF0000001040E606F0401200E026F040E036FDA -:101D0000080E016F006B8C0E0013E66A7FEC13F077 -:101D10006850100B07E06950100B04E060D8040E07 -:101D2000B6EC12F06850400B0BE06950400B08E035 -:101D300047EC13F0020EBEEC12F0060EB6EC12F0F9 -:101D40006850200B04E06950200B01E035D8685042 -:101D5000020B0AE06950020B07E047EC13F0E6685B -:101D6000E6689FEC13F06A6A040E0001605D02E20F -:101D7000A19A1FD069A61CD0DF6A040EDF5C18E2AE -:101D800068A616D06CCF80F0030EB6EC12F0780E79 -:101D90000001801502E138D809D0000EE66EE66A2F -:101DA000800EE66E000EE66E010EE8DBDF2AE5D758 -:101DB000A19AE552CBEF12F070A00ED0D9EC12F040 -:101DC000EF50800808E1D5DBEF50840804E1D9EC3E -:101DD00012F08C0EEF6E7090050EB6EF12F0698463 -:101DE000040EC4DB6D82F9EC12F0040EBEEF12F0AB -:101DF000F9EC12F0030EC2DB6D92699468A403D073 -:101E0000020EB4DBFBD712000DEC13F0FD0E000147 -:101E100080153DE17E0E8015E8407F0B040DF3CF69 -:101E200063F0F4CF64F0000E6327040E642363C0F4 -:101E300065F064C066F06575BCDBEF503C0BE842B2 -:101E4000E8420D0822E1B5DB76EC13F0EECF00F0AE -:101E5000EFCF01F0280E001816E1040E011813E16F -:101E6000B0EC13F0DF6AEDDB0EE2DF5029EC13F08B -:101E7000DF50EA6A200FE96E040EEA22E552E750CD -:101E8000EF6EDF2AF0D70AD807D01AD805D0FD0E9A -:101E90008015040801E122D8E5527DD36ADBEF50BA -:101EA000800B02E066DBEF6A00016F6B706B746B96 -:101EB000756B736B64D89DDB170E60DBF4EF10F06D -:101EC000020E0001705D02E181EF11F034D80001D3 -:101ED000815102E17BEF13F0816B12009EDB49DB45 -:101EE000EF50400B01E0010EDF6E00016B75080E34 -:101EF000605D09E122C46EFF6E50000802E2100E20 -:101F000001D0040E606F700513E1B4EC13F0A6D994 -:101F1000020E00016F5D03E12CDB840E07D0DF5061 -:101F200003E127DBC80E02D024DB880EEF6E01D060 -:101F300002D8E55230D32BDB0001706B1ADBEF6A5D -:101F4000040E6B19006E6CC001F0DE6E6CC0DDFF1C -:101F500019DBEF6A78AF0CD07B517C1107E005D01C -:101F60007CC0FAFF00017B51F96EFADF0001789F17 -:101F7000020EE15C02E2E16AE552E16E0CD304017B -:101F80002051600BE842E842E842E842E84200099A -:101F900001E0120021510C0A45E00B0A3FE00C0A57 -:101FA00031E0010A22E00B0A1EE0020A1CE0030AEB -:101FB00018E0080A10E0010A0CE00F0A08E0030A22 -:101FC00001E012000001738F080E606F120074EFC1 -:101FD00010F0DDEF11F00001610E716F000E726FF5 -:101FE0000CD0B5EF10F013EF10F024510001716F19 -:101FF000726B620E7127000E72237381010E746F73 -:10200000738F12000001738F04012451EA6A620F7A -:10201000E96E000EEA2222C4EFFF1200EADA160E81 -:10202000BEEF12F012007EDB040EE1260401220551 -:1020300010E120511F0B00090CE10001738F030E0A -:102040000401215D04E10001010E7F6F02D0000157 -:102050007F6B0401225141E120511F0B02083DE139 -:1020600024510F0B000939E00001738F040124BFD4 -:1020700005D0A4DA670EE926000E04D09FDA6B0EB5 -:10208000E926000ED2DA030E215D03E17BDA840E2D -:1020900023D024510F0B016A700F006E0F0E012226 -:1020A000020E00C0DBFF030E01C0DBFF020EDBCF20 -:1020B000E9FF030EDBCFEAFFEE90ED5224AF06D02E -:1020C00061DAEF6ADF745EDA400E06D05BDA880E02 -:1020D000EF6EDF7457DAC80EEF6E040EE15C02E2B9 -:1020E000E16AE552E16E57D2800E0401205D3CE1C9 -:1020F0000001C00E736F04012351030A1EE0010AA0 -:1021000009E0030A2FE100015E0E716F3E0E726F4F -:10211000120E22D0C3DA060EF6263F0EA2DA020E07 -:102120000001F76A7125F66E7251F7220900F5CFAA -:1021300074F00A00F5CF75F01200030E225D0FE275 -:10214000ADDA080EF6263F0E8CDA71C0F6FF72C0CB -:10215000F7FF0800F5500001746F756B1200000165 -:10216000736B12000001736B120011DA0401286B0B -:10217000296B20511F0B020A11E0030A0CE0010A2F -:1021800022E10001738F0401288100017F051BE11A -:102190000401288318D00001738F15D00001738FBC -:1021A000040124BF05D00ADA670EE926000E04D028 -:1021B00005DA6B0EE926000E38DAE4D9EF50040B8D -:1021C00002E0010E286F000173AF07D0280E716F77 -:1021D000040E726F7381020E746F020EE15C02E2F4 -:1021E000E16AE552E16ED7D16D98000173BF08D066 -:1021F00078AF02D061DA2AD07EDABBD9840E27D03C -:1022000078BF2BD0040120AF24D000017451040109 -:10221000265D000175510401275904E226C474F0BB -:1022200027C475F01BD80001010E706FA1DA800E73 -:10223000EF6E816BBED9EE52080EEF6E91DAB9D90E -:10224000840EEF6E010E816F8FDA93D9C80EEF6E98 -:102250001200000131DAC80EEF6E120098D90001A9 -:10226000080E745D000E75590DE274C0DEFF75C076 -:10227000DDFF6F5102E1010E03D06F0506E1020E92 -:102280006F6F03D0080EDE6EDD6A73D9EF9271D9DD -:10229000EF906FD9010EDB50EF126BD9EE52DFCF0A -:1022A000EFFF000EDB50745F010EDB50755B280EF4 -:1022B0007D6F040E7E6F73B10FD0F7D91BE071C034 -:1022C000F6FF72C0F7FF712B000E72230800F55065 -:1022D00096D9F3E2DB06F1D7E8D90CE071C0E9FF4B -:1022E00072C0EAFF712B000E7223EF5088D9F4E21E -:1022F000DB06F2D7020EE15C02E2E16AE552E16E32 -:102300004AD145D956D9EE52EFCFDFFFDFCF00F0EB -:1023100000500001795D000E7A5903E279C0DFFFB9 -:1023200009D0DF50006E016AE850795D796F015085 -:102330007A597A6F010EDB6ADF50F36E010EDBCF44 -:10234000F4FFF350F45C10E2010EDB5082D976C04A -:10235000E9FF77C0EAFF762B000E7723E552E750BE -:10236000EF6E010EDB2AE8D7000ED8807955000EFB -:102370007A550DE2F4D854D91CD9EF50400B03E143 -:10238000EAD9C80E02D0E7D9880EEF6E0FD0F0D987 -:10239000840EEF6E7B517C1107E005D07CC0FAFF04 -:1023A00000017B51F96EFADF0001789F020EE15CBB -:1023B00002E2E16AE552E16EEED00001738F10D9BE -:1023C000010EE66EE66AE66A620EE66E000EAFD9B0 -:1023D00022C461F00401225104E10001100E606F7B -:1023E00012000001200E606F04D9150EBEEF12F02E -:1023F000CED8000EDE6E040EDD6EE8D8040DF3506C -:10240000006E016A020E0F0B05E0D8900132003217 -:10241000E806FBE1D89000360136D8900036013648 -:10242000D9CFE9FFDACFEAFF0050EE260150ED22C6 -:10243000A9D8EF9EFD0EDB5002E16AD901D06DD91B -:10244000EA22DECFEEFFDDCFEDFF9CD8EF9C9AD8DD -:10245000040EE926000EEA22EF8C020EE15C02E295 -:10246000E16AE552E16E97D092D8FE0EDB50016A28 -:10247000700F006E0F0EDFD885D8FD0EDBCFEFFF9B -:10248000DBA402D0E66AF5D8FD0EDBA203D0010E74 -:10249000E66EEFD8020EE15C02E2E16AE552E16E1F -:1024A0007AD075D8FE0EDB5005E125D962D8840EAE -:1024B000EF6E05D08BD80CD989D8010F09D9020E3F -:1024C000E15C02E2E16AE552E16E65D060D8FD0EA2 -:1024D000DB5002E022D901D01BD9A7D853D806D9A6 -:1024E000FB0EDBCFEEFFFC0EDBCFEDFF4BD8EE5249 -:1024F000FA0EDBCFEFFF400E45D8E850EF16880EFE -:1025000041D8E850EF12FD0EDB5002E006D901D0B1 -:10251000FFD8EA22EF74DECF00F0DDCF01F000C07B -:10252000F3FF01C0F4FF020EE15C02E2E16AE55252 -:10253000E16E31D0F7D8010EF36EFC0EDB5004E0F3 -:10254000D890F336E806FCE1F31C006EFD0EDBCFFD -:10255000E9FFFE0EDBCFEAFF0050EF161CD0FBD8E0 -:10256000EE52080EEF6EF7D876EF13F0E66E7FEFBF -:1025700013F06BC0E9FF6CC0EAFF1200E66EE66A7A -:102580009FEF13F0DECFE9FFDDCFEAFF1200CAD8DC -:10259000020EE1261200E552E7CFD9FF1200D6D88D -:1025A000ABEF13F0FE0EEA6ADB34FE0BEA36E96E9F -:1025B000120063C0E9FF64C0EAFF120024510F0B50 -:1025C000E96EEA6AD890E936EA361200FD0EDB5071 -:1025D000E824026EFE0EDB50040DF35002241200BC -:1025E000000EE66EE66AE66A710EE66E0F0E97EF73 -:1025F00013F0000EE66EE66AE66EE66A1200E66E1C -:102600007DC0E9FF7EC0EAFF7D2B000E7E23E552F0 -:10261000E750EF6EDF06010E120084D8E65212007A -:10262000280EEE6E040EED6E1200EA22EECFDEFFF3 -:10263000EDCFDDFF1200012200C0DEFF01C0DDFF93 -:102640001200DF50006E016A080E005C000E015897 -:102650001200EA6A280FE96E040EEA22EF50E66ED5 -:102660001200F7220900F5CF71F00A00F5CF72F0E1 -:102670001200FE0EDBCFE6FFBBDEE552E552120094 -:10268000160E6F6E9F0E6B6E7B0E696E1200010E42 -:10269000E66EE66A000EE66EE66A12002251F66EFB -:1026A000F76AD890F636F7361200D9CFE9FFDACFBD -:1026B000EAFFEE50ED101200020E706F5ADFEE527C -:1026C000EF6A57DFC80EEF6E4ADFAADFABEF13F0F9 -:1026D000040DF3CF00F0F4CF01F0000E0026040E3D -:1026E000AADF840E4FDFE850EF121200020EE92637 -:1026F000000EEA2212003CD88C0EEF6E1200680E1B -:10270000E66E0F0EE66E16DFE552E552E552120058 -:1027100049DF670EE926000E120044DF6B0EE92642 -:10272000000E1200D9CFE6FFE1CFD9FF1200E66E0E -:102730008DEC20F0006E050EE15E00501200E1EC21 -:102740000CF0006E060EE15E00501200200EEE6EE0 -:10275000040EED6E120065C0E9FF66C0EAFF1200CC -:1027600028DFC4DFA6EF13F004DFC0DF10EF13F0A3 -:06277000F6DECFEF12F0CF -:0A277600959A838A190E62EF16F09F -:10278000CFDA030EE126ACA2FED76FEC21F0DF6EAC -:102790000001A85104E1865102E1010EA96FA905CB -:1027A00058E1A851A8DADFCFEFFF020EA85D08E2DA -:1027B000FF0EDF5C05E0050EABDA0001A96BA86B2C -:1027C000030EA85D04E1030EDF240001CA6F030EAF -:1027D0000001A85D3DE30001CA510001A85D38E198 -:1027E000010EDB6A020EDB6E0001CA51F36E020EAF -:1027F000DBCFF4FFF350F45C0EE2020EDB507BDA29 -:10280000010EDBCFE7FFEF50E726010EE7CFDBFF3E -:10281000020EDB2AE9D7CA516EDAEFCF00F0010EC3 -:10282000DB1C005C05E0070E73DA0001866B0DD03F -:1028300000018B5102E0060E6BDA8BC0E6FF54EC10 -:1028400022F0E5520001010E866FA96BA86B01D042 -:10285000A82B030EE15C02E2E16AE552E16E24D2AC -:102860005FDA220EE126010EDB68020EDB68FE0E47 -:10287000DB50E76E030EE7CFDBFFFC0EDB50020FF1 -:10288000E76E040EE7CFDBFFFD0EDB50E76E050EB3 -:10289000E7CFDBFFDF6AFC0EDB50DF5C13E2DF50CB -:1028A000EA6AAA0FE96E000EEA22EF50E66ED950EE -:1028B000010F006E050EDF2410DAE552E750EF6ECF -:1028C000DF2AE9D7210EDB6A020EDF6EFC0EDB5039 -:1028D000050FDF5C0FE2D950010F006EDF50FDD90C -:1028E000210EDBCFE7FFEF50E726210EE7CFDBFF1E -:1028F000DF2AECD7210EDB1CE66ED950010F006EEB -:10290000FC0EDB50050FE9D9E552E750EF6E839AD4 -:10291000DF6AFC0EDB50060FDF5C11E2ACA2FED7D3 -:10292000D950010F006EDACF01F0DF500F01D5D979 -:10293000EF50E66EB6EC22F0E552DF2AEAD7ACA201 -:10294000FED7838A0001866B220EE15C02E2E16A17 -:10295000E552E16EA9D10001865112000001A75194 -:10296000120000018651FDE01200DAD9FE0EDB50A4 -:10297000EA6AAA0FE96E000EEA22FD0EDBCFEFFF36 -:1029800093D1CED9020E9ED9A4D9A3D988D987D9FB -:10299000190E98D984D983D987D10001865102E0D4 -:1029A0008B511200000CD9CFE6FFE1CFD9FF020E08 -:1029B000E126E66A010EE66EFE0EDBCFE6FF50DF93 -:1029C000E552E552E552DE6ADD6ADECF00F0DDCF8A -:1029D00001F0FC0EDBCF02F0FD0EDBCF03F0025066 -:1029E000005C0350015818E20001865104E0000128 -:1029F000A76B010E16D000000000000000000000D0 -:102A00000000000000000000000000000000DF2ABD -:102A1000010E01E3DB2AD9D70001010EA76F000EDA -:102A200000D0006E020EE15C02E2E16AE552E16E66 -:102A30000050E552E7CFD9FF120072D9E66A060EC0 -:102A400019D932D135D9030E15D92ED119D982D938 -:102A500002E2E16AE552E16E27D1D9CFE6FFE1CF8C -:102A6000D9FF020EE126FD0EDBCFE6FFE66A7DDF31 -:102A7000E552E552010EE66E010EE66E76DFE55296 -:102A8000E552020EE66E020EE66EFE0EDBCFE6FFAC -:102A9000E7DEE552E552E552DE6ADD6ADECF00F0A0 -:102AA000DDCF01F00A0E2A6E2B6AFB0EDBCF2FF072 -:102AB000FC0EDBCF30F056EC18F028C002F029C035 -:102AC00003F00250005C0350015819E200018651E6 -:102AD00005E00001A76B00018C5116D0000000003A -:102AE00000000000000000000000000000000000E6 -:102AF00000000000DF2A010E01E3DB2ACFD700012E -:102B0000010EA76F000E00D0006E020EE15C02E223 -:102B1000E16AE552E16E0050E552E7CFD9FF1200BD -:102B2000D9CFE6FFE1CFD9FF040EE126FD0EDBCFC2 -:102B3000E6FFE66A1ADFE552E552020EE66E010E86 -:102B4000E66E13DFE552E552020EE66E020EE66E09 -:102B5000FE0EDBCFE6FF84DEE552E552E552DE6A8B -:102B6000DD6ADECF00F0DDCF01F00A0E2A6E2B6A9F -:102B7000FB0EDBCF2FF0FC0EDBCF30F056EC18F065 -:102B800028C002F029C003F00250005C0350015835 -:102B900027E20001865113E00001A76B030E8DC0F0 -:102BA000DBFF020E8CC0DBFF020EDBCF00F0030E5A -:102BB000DBCF01F000C0F3FF01C0F4FF17D000002D -:102BC0000000000000000000000000000000000005 -:102BD000000000000000DF2A010E01E3DB2AC1D75C -:102BE0000001010EA76FF36AF46A00D0040EE15CE5 -:102BF00002E2E16AE552E16EE552E7CFD9FF120049 -:102C000057D8040E37D850D03BD8040EA3D802E2D0 -:102C1000E16AE552E16E48D083D8E66A050E2AD80B -:102C200043D07ED8020EE1261E0EE66EE66A9ED8DE -:102C3000FC0E67D893D8FA0E64D8030E6ED8010E36 -:102C4000DBCFE6FF040E69D8F90EDB5004E1050E78 -:102C5000E66E030E03D0050EE66E040E7BD802E28C -:102C6000E16AE552E16E20D03ED8240E5ED03BD81A -:102C7000260E5BD0E66EFE0EDBCFE6FFF1DD7AD0EE -:102C80004FD8020EE126FB0EDBCFDEFFDBCFDDFFF0 -:102C90005BD8DFCFE6FF62D8030EE66E1200FE0EB1 -:102CA000DBCFE6FF030E4BD0E552E7CFD9FF120092 -:102CB00037D84AD8FC0EDBCFE6FF010E2ED8020E25 -:102CC000E66E1200E66EE66A7C0EE66ED6EC1FF04B -:102CD00051D0100EE66E040E32D00024E96E000EC4 -:102CE000DA20EA6E12001CD8FC0EDBCFE6FFFD0EE8 -:102CF000DBCFE6FF1200EA6A870FE96E000EEA22D8 -:102D00001200DBCFDEFFDBCFDDFFDFCFE6FF1200FF -:102D1000E66E54EC22F0E5521200E66EB6EF16F0C5 -:102D2000D9CFE6FFE1CFD9FF1200E66EFE0EDBCF72 -:102D3000E6FFF6DEE552E552E552E552B5D7E66E1E -:102D4000FE0EE66E7FDE16D0FD0EDBCFE6FFE66AF6 -:102D5000B6EF16F08FDF020EE15C1200010EDDDF30 -:102D6000010EDBCFE6FF020E8DEF16F0FEDDE55221 -:0C2D7000E5521200E552E552E552120057 -:042D7C00239E05D0BD -:102D8000239E2BAE02D02B6C238E2BC025F0246A01 -:102D9000356A346A860E266E276AF6EF18F0239E8F -:102DA00008D0239E2BAE05D02A6C2B1EE86A2B225E -:102DB000238E2BC025F02AC024F0356A346A8E0E8B -:102DC000266E276AF6EF18F0239E0CD0239E2BAEBA -:102DD00009D0286C291E2A1E2B1EE86A29222A22C5 -:102DE0002B22238E2BC025F02AC024F029C035F0D9 -:102DF00028C034F09E0E266E276AF6EF18F0317E5A -:102E0000236A32EC19F04AEC19F023B6DAEF18F025 -:102E100023A20AD023AA03D023BEDAEF18F023A4FA -:102E2000E6EF18F0E3EF18F023AA05D023ACE6EFA5 -:102E300018F0E3EF18F023A00AD023A808D023BE8F -:102E400004D023A402D0EFEF18F0F3EF18F0346AA7 -:102E5000276A31502C5C336E10E329C035F02AC04C -:102E600024F02BC025F02CC032F02EC029F02FC04A -:102E70002AF030C02BF0233A09D02EC035F02FC0F5 -:102E800024F030C025F031C032F0336C239E23BCD7 -:102E9000238E32C026F023B022EF19F01A0E3360D1 -:102EA00022EF19F0266A2C6A23A408D0296C2A1E66 -:102EB0002B1E2C1EE86A2A222B222C2223AC08D09F -:102EC000356C241E251E261EE86A24222522262271 -:102ED000286A335207E02C342B322A322932283226 -:102EE000332EF9D7295035262A5024222B5025225B -:102EF0002C50262228C034F0239E26AE0BD0346CF2 -:102F0000351E241E251E261EE86A3522242225226F -:102F10002622238E26A006D0D880253224323532B0 -:102F20003432322A32C026F0F6EF18F0236A32EC3F -:102F300019F04AEC19F023B6DAEF18F023A205D005 -:102F400023BADAEF18F0E1EF18F023BAEDEF18F03A -:102F500023A005D023B8DAEF18F0EDEF18F023B86E -:102F6000E1EF18F0276A7F0E2C24266EE86A2722EC -:102F70003150265EE86A275A1A0E326E2C6A346A7D -:102F8000356A246A256A2E50295E2F502A5A3050FD -:102F90002B5A000E2C5A09E72E5029262F502A2290 -:102FA00030502B22000E2C2201D0348AD8902936A2 -:102FB0002A362B362C36D8903436353624362536FC -:102FC000322EE1D72B502A102910D8A4348AF6EFDC -:102FD00018F0236A32EC19F04AEC19F023B6DAEF54 -:102FE00018F023A205D023B8DAEF18F0E1EF18F0BB -:102FF00023AA05D023B0DAEF18F0E1EF18F023B0E0 -:1030000002D023A802D0EDEF18F0276A31502C240B -:10301000266EE86A27227E0E265EE86A275A346A00 -:10302000356A246A256A30502B02F4CF25F0F3CF9D -:1030300024F02F502B02F3503526F4502422000E9A -:10304000252230502A02F3503526F4502422000E57 -:1030500025222E502B02F3503426F4503522000E38 -:10306000242225222F502A02F3503426F4503522F0 -:10307000000E2422252230502902F3503426F45029 -:103080003522000E242225222E502A02F450342606 -:10309000000E3522242225222F502902F4503426F6 -:1030A000000E352224222522F6EF18F02AC034F033 -:1030B0002A502F02F4CF29F0F3CF28F02B50300202 -:1030C000F4CF2BF0F3CF2AF02F02F3502926F4503F -:1030D0002A22E86A2B2234503002F3502926F45079 -:1030E0002A22E86A2B22000C236A32EC19F023B65C -:1030F0007EEF18F023A20ED023B405D07F0E2B6EE6 -:10310000FF0E2A6E1FD0800E2B6E2A6A1BD02B6AF0 -:103110002A6A18D023B0FBD78F0E2C60EDD77E0E15 -:103120002C64F5D78E0E2C5C05E0D8902B322A3219 -:103130002C2AF8D723A406D02A6C2B1EE86A2B224F -:103140002BAEE5D71200236A32EC19F023B6ADEFAF -:1031500018F023A20FD023B407D07F0E2B6EFF0EE2 -:103160002A6E296E286E25D0800E2B6E01D02B6A18 -:10317000000EF6D723B0FBD7286A9F0E2C60EBD742 -:103180007E0E2C64F4D79E0E2C5C07E0D8902B3278 -:103190002A32293228322C2AF6D723A40AD0286CC6 -:1031A000291E2A1E2B1EE86A29222A222B222BAE38 -:1031B000DED712007F0E2C6EFF0E2B6E2A6E296E4C -:1031C00012007F0E23BEFF0E2C6E02D07F0E2C6EDF -:1031D000800E2B6E2A6A296AF3D723AE04D0800EA4 -:1031E0002C6E2B6AF7D72C6A2B6AF4D72550241043 -:1031F00035103410F8E027BEF0D725BE0CD026508D -:103200002710EBE0D890343635362436253626069E -:10321000D8A02706F2D72750D4E12628D2E034AE32 -:1032200011D07F0E341402E135A00CD0352AE86AA3 -:103230002422252207E3D880253224323532262A5B -:103240002628BFE02650C9E035C029F024C02AF066 -:1032500025342B6E26302C6E2B322C9E23BE2C8ECA -:10326000E0EF18F02B362C3602E32384237E06E1B0 -:1032700023802C6A2B6A2A6A296A12002C2803E010 -:10328000D8802B321200D8902B3202E12382120018 -:10329000238612003036313602E3238C237E06E18A -:1032A0002388316A306A2F6A2E6A1200312803E0BF -:1032B000D88030321200D8903032EAE1238A1200EE -:1032C000FC0E9516838083820B0EE66E7C0EE66EF6 -:1032D000E10EE66E56EC20F0E552E552E5521200A2 -:1032E000D9CFE6FFE1CFD9FFE65201013C51080AF0 -:1032F00001E17AD00F0A61E0010A5BE0030A43E0D2 -:10330000010A3DE0070A25E0010A1FE0030A07E081 -:10331000010A01E0D3D0870EC2D9010E63D0FDECC3 -:1033200022F0000901E0CBD0A2D901AE02D00268A0 -:1033300003683DC1E9FFEA6AE9BEEA6875D9100E83 -:10334000E926010E86D9020E4DD08F0EA8D9030EA4 -:1033500049D0FDEC22F0000901E0B1D088D901AEDE -:1033600002D0026803683DC1E9FFEA6AE9BEEA6883 -:103370005BD9140EE926010E6CD9040E33D0970EDA -:103380008ED9050E2FD0FDEC22F0000901E097D078 -:103390006ED901AE02D0026803683DC1E9FFEA6A56 -:1033A000E9BEEA6841D9180EE926010E52D9060E87 -:1033B00019D09F0E74D9070E15D0FDEC22F000092C -:1033C00001E07DD054D901AE02D0026803683DC14E -:1033D000E9FFEA6AE9BEEA6827D91C0EE926010E70 -:1033E00038D9080E3C6F6BD03D2B010EE76E3D19AE -:1033F000E8AE02D0E73402D0E7503D5D5DE33D6BBF -:103400003EC1E9FFEA6AE9BEEA6866D939D9E9BE90 -:10341000EA6867D935D9E9BEEA6868D931D9E9BE21 -:10342000EA6869D9EA22EE6AEE6AEE6AEE6ADF6A53 -:1034300030D9E8AE02D0E73402D0E750005C2FE28A -:1034400034D9E9BEEA68F0D8100EE926010EFCD89E -:10345000E9BEEA6841D954D9E9BEEA68E5D8140E54 -:10346000E926010EF1D8E9BEEA683BD949D9E9BE9F -:10347000EA68DAD8180EE926010EE6D8E9BEEA684D -:1034800035D93ED9E9BEEA68CFD81C0EE926010E2F -:10349000DBD8E9BEEA682FD9E7D8DF2AC9D701010E -:1034A0003E2B010EE76E3E19E8AE02D0E73402D0A3 -:1034B000E7503E5D01E33E6B3C6B01D03C6BE55257 -:1034C000E552E7CFD9FF1200D9CFE6FFE1CFD9FF10 -:1034D000050EE126010EDB6A020EDB6A030EDB6AD3 -:1034E000040EDB6AFE0EDB500FE1DF6AD2D8E8AED5 -:1034F00002D0E73402D0E750005C43E2D6D8E9BE00 -:10350000EA68EAD898D8F2D7FE0EDB040FE1DF6A4A -:10351000C0D8E8AE02D0E73402D0E750005C31E218 -:10352000C4D8E9BEEA68DDD886D8F2D7FE0EDB50F3 -:1035300002080FE1DF6AADD8E8AE02D0E73402D06E -:10354000E750005C1EE2B1D8E9BEEA68CFD873D874 -:10355000F2D7FE0EDB5003080FE1DF6A9AD8E8AE1F -:1035600002D0E73402D0E750005C0BE29ED8E9BEFF -:10357000EA68C1D860D8F2D7286A296A2A6A2B6A11 -:1035800049D0010EDBCF0CF0020EDBCF0DF0030EA5 -:10359000DBCF0EF0040EDBCF0FF00CC028F00DC017 -:1035A00029F00EC02AF00FC02BF0E6EC16F029C06F -:1035B00008F02AC009F02BC00AF02CC00BF02E6ACC -:1035C0002F6AA00E306E400E316EE9EC17F029C064 -:1035D00004F02AC005F02BC006F02CC007F02E6ABC -:1035E000C00E2F6E7F0E306E440E316E96EC17F0CB -:1035F00029C000F02AC001F02BC002F02CC003F05B -:103600002E6A2F6A7A0E306E440E316EE9EC17F096 -:10361000A3EC18F0050EE15C02E2E16AE552E16E0E -:10362000E552E7CFD9FF1200D890E936EA36D890B4 -:10363000E936EA3612003DD8D950010FE96EDACFEB -:10364000EAFF41D8DF2A120034D83EC1E9FFEA6A16 -:103650001200EA2200C0EEFF01C0EEFF02C0EEFF42 -:1036600003C0EEFF01011200EA2263EF1BF0E6EC5B -:1036700022F0F3CF00F0F4CF01F0026A036A1200E7 -:10368000EA22EE6AEE6AEE6AEE6A3EC1E9FFEA6A93 -:103690001200DFCF00F0010EE76E00181200E66E98 -:1036A00087EC22F0E55201011200DFCFE9FFEA6A60 -:1036B0001200EA22EECF00F0EECF01F0EECF02F0E2 -:1036C000EFCF03F012000050EE260150EE22025020 -:1036D000EE220350EE221200A7DF000EE926010EB3 -:1036E0001200A2DF040EE926010E12009DDF080E73 -:1036F000E926010E120098DF0C0EE926010E1200D9 -:06370000B3DF55EF1BF0E2 -:0A370600E30E95169492A082FD0ECA -:10371000E66E4CEC21F0E552000EE66EE66ACAEC6D -:1037200021F0E552E55283948396839882921200A9 -:103730008394839683988292050E0101305D0EE298 -:10374000010E30C1E7FFE75204E0E846FE0BE70652 -:10375000FCE101012F1502E1302BEED7050E305DA3 -:103760005EE23051040A0EE0070A0DE0010A08E0AB -:10377000030A04E0010A07E1838405D0838603D0AD -:10378000838801D082823051D9D8EFCF02F0036A0A -:1037900002BE03680A0E2A6E2B6A02C02FF003C015 -:1037A00030F056EC18F028C000F029C001F0DC0E13 -:1037B0000026050E0122005001013127015032235D -:1037C000A9D8800E126EBB0E136E440E146E196AC9 -:1037D0001A6A200E1B6E410E1C6E3051AFD8EFCF0F -:1037E00021F021C02BF0C0EC16F029C01DF02AC03A -:1037F0001EF02BC01FF02CC020F0AAD819C029F051 -:103800001AC02AF01BC02BF01CC02CF0E9EC17F0FA -:103810006FD800EC17F040D80101302B1200306B4C -:10382000200E315D4E0E325915E274D8400E126EE4 -:103830009C0E136E460E146E31C12AF032C12BF06D -:10384000CFEC16F055D8FFEC16F026D80101316BFD -:10385000326B1200316B326B6FD7D9CFE6FFE1CFFD -:10386000D9FFFE0EDB506AD8FD0EDBCFEFFF6CD028 -:103870005CD804E0D890F336E806FCE1F35001018F -:103880002F1362D052D804E0D890F336E806FCE15A -:10389000F31C01012F1758D029C00DF02AC00EF0DB -:1038A0002BC00FF02CC010F053D809C029F00AC06B -:1038B0002AF00BC02BF00CC02CF0E9EC17F074ECE4 -:1038C00018F02AC006F02BC007F0086A2A50035CE3 -:1038D000006E2B500458016E08500558026E00C04F -:1038E000E6FF01C0E6FFCAEC21F0E552E552120006 -:1038F00029C015F02AC016F02BC017F02CC018F004 -:1039000027D811C029F012C02AF013C02BF014C020 -:103910002CF0120003680468056A096A0A6AC00E7E -:103920000B6E3F0E0C6E116A1200D9CFE6FFE1CF8D -:10393000D9FF010EF36EFE0EDB501200EA6A2A0F69 -:10394000E96E010EEA221200E552E7CFD9FF12001C -:1039500029C02EF02AC02FF02BC030F02CC031F03F -:02396000120053 -:0E396200D9CFE6FFE1CFD9FFCB0E9316949498 -:10397000060EE66E1EEC22F0E552FE0EDBA00CD029 -:10398000AF0EE66E02EC22F0E552000EE66EE66A3D -:10399000E6EC21F0E55204D0820EE66E02EC22F055 -:1039A000E55281948294819A8198ECD0E2D8D880B3 -:1039B000000E0001F455000EF555000EF655000EF0 -:1039C000F7550EE2F407000EF55BF65BF75BF4517A -:1039D000F511F611F71104E1BD6A8294819A81987C -:1039E0001200D9CFE6FF8184CDD0D9CFE6FF8194F4 -:1039F000C9D0D9CFE6FFE1CFD9FFF80EDBCFF4F085 -:103A0000F90EDBCFF5F0FA0EDBCFF6F0FB0EDBCFD5 -:103A1000F7F0280E2D6E2E6A2F6A306AF4C028F057 -:103A2000F5C029F0F6C02AF0F7C02BF028EC21F001 -:103A300028C0F4F029C0F5F02AC0F6F02BC0F7F04A -:103A400098D8FD0EDB50E8B0818AE8A0819AFD0E7F -:103A5000DB1CE8B08188E8A081984A0EE66E6FEC26 -:103A600022F0E552FC0EDBCF16F016C02BF0BEECB8 -:103A700016F029C012F02AC013F02BC014F02CC08D -:103A800015F02E6A2F6A7F0E306E430E316E96EC63 -:103A900017F029C00EF02AC00FF02BC010F02CC078 -:103AA00011F02E6A2F6A200E306E3F0E316EE9EC57 -:103AB00017F029C00AF02AC00BF02BC00CF02CC064 -:103AC0000DF02E6A1B0E2F6E370E306E4C0E316EBF -:103AD000E9EC17F029C006F02AC007F02BC008F067 -:103AE0002CC009F02E6A400E2F6E1C0E306E460E52 -:103AF000316E96EC17F074EC18F0CFEC16F029C08C -:103B000002F02AC003F02BC004F02CC005F02E6A8E -:103B10002F6A800E306E410E316E96EC17F074EC09 -:103B200018F02AC000F02BC001F02AC0E6FF2BC01D -:103B3000E6FFF9EC20F0E552E55224D08150200B4D -:103B400006E08150100B03E18350400B09E08150E7 -:103B5000200B0EE18150100B0BE08350800B08E12D -:103B6000BD6A82940001F46BF56BF66BF76B010C88 -:103B7000000CA00EE66E150EE66EE6EC21F0E552A6 -:0C3B8000E5521200E552E7CFD9FF120019 -:043B8C00050EE66ECE -:103B9000060E8CD8070E8AD8080E88D8090E7ED853 -:103BA0000A0E80D80B0E7AD80C0E7CD80D0E76D863 -:103BB0000E0E78D80F0E72D8100E74D8110E32EF88 -:103BC0001EF0D9CFE6FFE1CFD9FF51D8FD0EDBCFF4 -:103BD000E6FF8EEC21F0E552C58402EC23F0E552BD -:103BE000E7CFD9FF1200D9CFE6FFE1CFD9FF030E0F -:103BF000E126020EDB6A3BD8C582EFEC22F0E90E2B -:103C0000E66E8EEC21F0E552C586DE6ADD6ADECF17 -:103C100000F0DDCF01F0E80E005C030E01580BE26E -:103C2000C7A004D0020EC9CFDBFF05D0DF2A010EEA -:103C3000EEE3DB2AECD7C58AC588EFEC22F0C58419 -:103C4000EFEC22F002EC23F0020EDB50006E030ECC -:103C5000E15C02E2E16AE552E16E0050E552E7CF35 -:103C6000D9FF1200E66EADDFE552E5521200800E7C -:103C7000E66E080EE66E39EC22F0E552E552C5809C -:103C8000EFEC22F0E80EE66E8EEC21F0E552FE0E2F -:103C9000DBCFE6FF8EEC21F0E5521200E3DFC40E2D -:103CA000E66E1200DFDF090EE66E1200DBDF050EA6 -:043CB000E66E1200AA -:0C3CB40036D859D858D857D84FD8430EEE -:103CC00056D059D8430E53D056D8FD0EDB5002E0E3 -:103CD000530E01D0730E4BD04ED8FD0EDB5002E0D8 -:103CE000420E01D0620E43D046D8480E40D043D891 -:103CF0004C0EE66E8EEC21F0E55233D8FC0EDBCF95 -:103D0000E6FF8EEC21F020D00CD8FC0EDBCFE6FFD6 -:103D1000FD0E38D006D825D8FB0EDBCFE6FFFC0E13 -:103D200031D0D9CFE6FFE1CFD9FF800EE66E080E85 -:103D3000E66E39EC22F0E552E552C580EFEC22F058 -:103D4000FE0EDBCFE6FF1AD0E552C584EFEC22F081 -:103D500002EC23F0E552E7CFD9FF12001B0EE66E0E -:103D60000DD0FD0EDBCFE6FF09D0E66A07D0E66E88 -:103D70008EEC21F0E9D7D5DFAEEF1EF08EEC21F00E -:103D8000E5521200DBCFE6FF1BEC20F0E552DCD75A -:103D9000040120511F0B010801E01200245101E031 -:103DA0001200060E215D21E12351230A1BE0010AC6 -:103DB0000CE0030A1AE10001610517E10001820E1F -:103DC000716F3E0E726F090E09D0000161050DE1A1 -:103DD0000001E90E716F3E0E726F1D0E746F756BF0 -:103DE000C00E02D00001800E736F04012051600BE1 -:103DF000E842E842E842E842E842010801E01200F5 -:103E000021510B0A26E0080A19E0090A11E0080A04 -:103E100005E00B0A23E0080A21E0120000013F0E32 -:103E2000716F010E726F010E746F756BC10E0FD042 -:103E30000001800E736F23C43FF112000001400E99 -:103E4000716F010E726F010E746F756B810E736F5F -:0E3E500012000001800E736F22C440F11200B8 -:023E5E0012014F -:103E6000000200000008D804040002000102000162 -:103E700009022900010100C0320904000002030008 -:103E80000000092111010001221D000705810340E6 -:103E9000000107050103400001040309042C034D40 -:103EA000006F00620069006C006500200052006F26 -:103EB0000062006F007400200050006C006100740C -:103EC0000066006F0072006D00200352006F0062F8 -:103ED000006F007400200049006E007400650072DD -:103EE0000066006100630065000600FF0901A10192 -:103EF00019012940150026FF007508954081001919 -:0E3F00000129409100C0703E993E9D3EC93E91 -:023F0E002A0E79 -:103F1000F66E080EF76E000EF86E01010900F550FE -:103F2000256F0900F550266F03E1256701D03DD0CC -:103F30000900F550206F0900F550216F0900F55078 -:103F4000226F09000900F550E96E0900F550EA6E8C -:103F5000090009000900F550236F0900F550246F8E -:103F600009000900F6CF27F1F7CF28F1F8CF29F1A2 -:103F700020C1F6FF21C1F7FF22C1F8FF0101235341 -:103F800002E1245307E00900F550EE6E2307F8E242 -:103F90002407F9D727C1F6FF28C1F7FF29C1F8FF89 -:0C3FA00001012507000E265BBFD71200B0 -:043FAC00D9CFE6FF84 -:103FB000DACFE6FFE1CFD9FFE2CFDAFFAC6AAB6A36 -:103FC000FD0EDBB0AC88DBA202D0AC8CAB8CDBB4DA -:103FD000AC8EDBA602D0AB8801D0AB8ADBB8AC8458 -:103FE0009E98DBBAAC86DBAC02D09D8A01D09D9A4C -:103FF0009E9ADBAE02D09D8801D09D98FB0EDB50CF -:10400000AF6EFB0EFC0EDBCF01F001C000F0016AC9 -:104010000050B06EAC8AAB8E949C948EAC50100B5A -:1040200004E0AC50800B01E1948CE552E5CFDAFF5F -:06403000E7CFD9FF1200EA -:0A403600D9CFE6FFDACFE6FFE1CFB5 -:10404000D9FFE2CFDAFFE65229D820E0C6A60AD08F -:1040500025D8E66E8EEC21F0E552DF6EDF5010E0E1 -:10406000DF5015D09E961AD8C96EC6889EA6FED778 -:10407000C750040B05E1C750010B02E1FE0E07D04B -:10408000FC0EDB2AFD0EE0E3DB2ADED7000EE55254 -:10409000E552E5CFDAFFE7CFD9FF1200FC0EDBCF08 -:0C40A000E9FFFD0EDBCFEAFFEF5012003D -:0440AC00D9CFE6FF83 -:1040B000DACFE6FFE1CFD9FFE2CFDAFFC26AC06A0A -:1040C000FC0EDB407F0B3C0BC26EFB0EDBCFE6FF32 -:1040D000FC0EDB38F00B300BE552E710C16EFD0E25 -:1040E000DB50040DF350380B016EFD0EDB380F0B67 -:1040F000070B006EFD0EDB50800B00100110C06E30 -:10410000FC0EDBAE03D09E9C9D8CF28CC280E552EF -:0A411000E5CFDAFFE7CFD9FF120078 -:06411A00FE0EE3CFE9FFF9 -:10412000FF0EE3CFEAFFE9CFF3FFEACFF4FFFB0E88 -:10413000E35003E1FC0EE35009E0FB0EE30602E26C -:10414000FC0EE306FD0EE350EE6EF1D71200FB0EFF -:10415000E3CFF6FFFC0EE3CFF7FFFD0EE3CFF8FF52 -:10416000FE0EE3CFE9FFFF0EE3CFEAFFE9CFF3FF57 -:10417000EACFF4FFEE66FED7ED520900F5CFEFFF70 -:06418000EE66FBD7120001 -:0A4186002DD8FD0EDB50A86EA69E9A -:10419000A69CA684F250800B01E0010E0101416F44 -:1041A000F29E550EA76EAA0EA76EA6824151E8B0E8 -:1041B000F28EE8A0F29EA6B2FED7A198A694E55290 -:1041C000E7CFD9FF12000DD8A69EA69CA680020EAE -:1041D000E66EDBEC22F0E552A850E552E7CFD9FFBE -:1041E0001200D9CFE6FFE1CFD9FFFE0EDB50A96E5A -:0241F0001200BB -:0E41F200D9CFE6FFDACFE6FFE1CFD9FFE2CF6B -:10420000DAFFE652E652FC0EDBCF00F0FD0EDBCF0C -:1042100001F0060ED89000360136E804FBE100C03C -:10422000DEFF01C0DDFF010EDB50BE6EDF50E84057 -:10423000E8403F0B300B006ECF0EBD140010BD6E7A -:10424000E552E552E552E5CFDAFFE7CFD9FF12009C -:10425000276A... [truncated message content] |
From: Jérémie D. <Ba...@us...> - 2010-05-16 19:48: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 893537e61d4b782df747466bd71862c002821406 (commit) via 19dc6b3e71c100fe80eb7032f2b2fbba014641aa (commit) from 3f6ec8ee678aa70853bf89400f07445b2aa0f23a (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 893537e61d4b782df747466bd71862c002821406 Author: Jérémie Dimino <je...@di...> Date: Sun May 16 21:47:29 2010 +0200 raise the default timeout for ax12 commands commit 19dc6b3e71c100fe80eb7032f2b2fbba014641aa Author: Jérémie Dimino <je...@di...> Date: Sun May 16 19:13:35 2010 +0200 change the timemout of ax12 commands ----------------------------------------------------------------------- Changes: diff --git a/info/control/clients/script.ml b/info/control/clients/script.ml index 6ada152..cc7b886 100644 --- a/info/control/clients/script.ml +++ b/info/control/clients/script.ml @@ -455,7 +455,7 @@ let () = let id = int "id" and position = int "position" and velocity = int ~default:50 "velocity" - and timeout = int ~default:100 "timeout" + and timeout = int ~default:32000 "timeout" and goto_mode = keyword ~default:`Now "mode" [("now", `Now); ("action", `Action)] in register ~path:["ax12"] "goto" (f4 id position velocity goto_mode) diff --git a/info/control/protocol/commands.ml b/info/control/protocol/commands.ml index 9fe91e2..f8d568c 100644 --- a/info/control/protocol/commands.ml +++ b/info/control/protocol/commands.ml @@ -205,7 +205,7 @@ struct request = Some PcInterface.ax12_ping; send = (arg2 ("id", uint8) - ("timeout", uint8)); + ("timeout", uint16)); recv = (arg1 ("result", uint8)); section = ""; @@ -220,7 +220,7 @@ struct send = (arg3 ("id", uint8) ("register", uint8) - ("timeout", uint8)); + ("timeout", uint16)); recv = (arg1 ("value", uint8)); section = ""; @@ -235,7 +235,7 @@ struct send = (arg3 ("id", uint8) ("register", uint8) - ("timeout", uint8)); + ("timeout", uint16)); recv = (arg1 ("value", uint16)); section = ""; @@ -305,7 +305,7 @@ struct request = Some PcInterface.ax12_get_pos; send = (arg2 ("id", uint8) - ("timeout", uint8)); + ("timeout", uint16)); recv = (arg1 ("position", uint16)); section = ""; @@ -319,7 +319,7 @@ struct request = Some PcInterface.ax12_get_speed; send = (arg2 ("id", uint8) - ("timeout", uint8)); + ("timeout", uint16)); recv = (arg1 ("velocity", uint16)); section = ""; @@ -333,7 +333,7 @@ struct request = Some PcInterface.ax12_get_load; send = (arg2 ("id", uint8) - ("timeout", uint8)); + ("timeout", uint16)); recv = (arg1 ("load", uint16)); section = ""; @@ -347,7 +347,7 @@ struct request = Some PcInterface.ax12_get_load; send = (arg2 ("id", uint8) - ("timeout", uint8)); + ("timeout", uint16)); recv = (arg7 ("position", uint16) ("velocity", uint16) hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-16 16:55: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 3f6ec8ee678aa70853bf89400f07445b2aa0f23a (commit) via 7bafca0e6ca199ab6fc0d31fd3fbe3c4ed8a37ca (commit) via 00e7f93e7ce2fd20402905ef16eeb2b46f7c6d92 (commit) via 443a5fc8e55a11330807b81e31f64392819a5e5c (commit) via 679a373ade4443fc31b002a565d85590cb4d53b9 (commit) from 79da1a47dce06f02a6643e8480200c0d3db13f11 (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 3f6ec8ee678aa70853bf89400f07445b2aa0f23a Author: Jérémie Dimino <je...@di...> Date: Sat May 15 03:44:51 2010 +0200 add empty-up command to the controller commit 7bafca0e6ca199ab6fc0d31fd3fbe3c4ed8a37ca Author: Jérémie Dimino <je...@di...> Date: Sat May 15 03:41:16 2010 +0200 preparation for the match commit 00e7f93e7ce2fd20402905ef16eeb2b46f7c6d92 Author: [Kro]bot <kr...@wa...> Date: Sat May 15 00:04:08 2010 +0200 move the grip faster when going up commit 443a5fc8e55a11330807b81e31f64392819a5e5c Author: Jérémie Dimino <je...@di...> Date: Fri May 14 23:58:33 2010 +0200 adjust grip closed position commit 679a373ade4443fc31b002a565d85590cb4d53b9 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 22:00:36 2010 +0200 integrate fake ear test ----------------------------------------------------------------------- Changes: diff --git a/info/control/clients/play.ml b/info/control/clients/play.ml index d2c6eef..ea0299b 100644 --- a/info/control/clients/play.ml +++ b/info/control/clients/play.ml @@ -19,7 +19,7 @@ lwt () = lwt krobot = Krobot.create () in lwt (a, b, c, d, e) = Krobot.Card.unsafe_call Commands.Card.get_ports_state krobot `Interface () in - Script.inverse := d land 64 = 0; + Script.inverse := d land 64 <> 0; let rec loop = function | [] -> diff --git a/info/control/clients/script.ml b/info/control/clients/script.ml index 4c716b0..6ada152 100644 --- a/info/control/clients/script.ml +++ b/info/control/clients/script.ml @@ -501,7 +501,21 @@ let () = register ~path:["grip"] "up" f0 (fun logger krobot -> - Krobot.Grip.up krobot); + Krobot.Grip.up krobot >>= function + | true -> + logger [text "grip-up success"] + | false -> + lwt () = logger [fg lred; text "grip-up failure"] in + lwt _ = Krobot.Motors.move krobot (-100) 400 800 in + lwt () = Krobot.Grip.close krobot in + lwt () = Lwt_unix.sleep 1.0 in + lwt _ = Krobot.Grip.empty_up krobot in + lwt () = Lwt_unix.sleep 1.0 in + lwt _ = Krobot.Motors.move krobot 100 400 800 in + return ()); + register ~path:["grip"] "empty-up" f0 + (fun logger krobot -> + Krobot.Grip.empty_up krobot); register ~path:["grip"] "down" f0 (fun logger krobot -> Krobot.Grip.down krobot); diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index c72dade..9a6f06f 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -351,12 +351,46 @@ struct | High-level commands | +---------------------------------------------------------------+ *) + let grip_open () = + set_ax12 [{ aa_id = 2; + aa_position = 650; + aa_velocity = 100 }; + { aa_id = 3; + aa_position = 0; + aa_velocity = 0 }] + + let grip_release () = + USBCard.call Commands.AX12.goto (get_card card) (3, 200, 0, `Now) + let grip_up () = lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x20, 50) in lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x1E, 222) and () = set_ax12 [{ aa_id = 2; aa_position = 180; - aa_velocity = 50 }] in + aa_velocity = 70 }] in + lwt () = Lwt_unix.sleep 0.5 in + lwt load = RX64Card.call Commands.RX64.read16 (get_card card_rx64) (0x28, 2) in + if load >= 790 then + lwt () = RX64Card.call Commands.RX64.write8 (get_card card_rx64) (0x18, 0) in + lwt () = grip_open () in + return false + else + let rec loop () = + lwt pos = RX64Card.call Commands.RX64.read16 (get_card card_rx64) (0x24, 2) in + if pos <= 225 then + lwt () = grip_release () in + return true + else + Lwt_unix.sleep 0.1 >> loop () + in + loop () + + let grip_empty_up () = + lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x20, 50) in + lwt () = RX64Card.call Commands.RX64.write16 (get_card card_rx64) (0x1E, 222) + and () = set_ax12 [{ aa_id = 2; + aa_position = 180; + aa_velocity = 90 }] in return () let grip_down () = @@ -370,24 +404,13 @@ struct aa_velocity = 0 }] in return () - let grip_open () = - set_ax12 [{ aa_id = 2; - aa_position = 650; - aa_velocity = 100 }; - { aa_id = 3; - aa_position = 0; - aa_velocity = 0 }] - let grip_close () = set_ax12 [{ aa_id = 2; - aa_position = 510; - aa_velocity = 100 }; + aa_position = 574; + aa_velocity = 200 }; { aa_id = 3; - aa_position = 390; - aa_velocity = 0 }] - - let grip_release () = - USBCard.call Commands.AX12.goto (get_card card) (3, 200, 0, `Now) + aa_position = 383; + aa_velocity = 200 }] let () = OBus_object.add_interfaces obus @@ -398,6 +421,11 @@ struct lwt result = grip_up obj in OBus_method.return ctx result ); + m_EmptyUp = ( + fun ctx obj () -> + lwt result = grip_empty_up obj in + OBus_method.return ctx result + ); m_Down = ( fun ctx obj () -> lwt result = grip_down obj in @@ -1400,7 +1428,9 @@ lwt () = ~path:"/dev/ttyS0" ~rate:57600 ~set:set_card_rx64 - (fun card -> return ()) + (fun card -> + (* set torque limit *) + RX64Card.call Commands.RX64.write16 card (0x22, 800)) (fun () -> return ()) in diff --git a/info/control/lib-krobot/krobot.ml b/info/control/lib-krobot/krobot.ml index 26e74b8..913a5af 100644 --- a/info/control/lib-krobot/krobot.ml +++ b/info/control/lib-krobot/krobot.ml @@ -210,6 +210,9 @@ struct let up krobot = OBus_method.call m_Up (service krobot "Grip") () + let empty_up krobot = + OBus_method.call m_EmptyUp (service krobot "Grip") () + let down krobot = OBus_method.call m_Down (service krobot "Grip") () diff --git a/info/control/lib-krobot/krobot.mli b/info/control/lib-krobot/krobot.mli index 7ee5046..aeba103 100644 --- a/info/control/lib-krobot/krobot.mli +++ b/info/control/lib-krobot/krobot.mli @@ -117,7 +117,8 @@ module Range_finders : sig end module Grip : sig - val up : t -> unit Lwt.t + val up : t -> bool Lwt.t + val empty_up : t -> unit Lwt.t val down : t -> unit Lwt.t val open_ : t -> unit Lwt.t val close : t -> unit Lwt.t diff --git a/info/control/myocamlbuild.ml b/info/control/myocamlbuild.ml index 8a9faba..cf13383 100644 --- a/info/control/myocamlbuild.ml +++ b/info/control/myocamlbuild.ml @@ -86,18 +86,6 @@ let targets = List.filter_opt (function (true, target) -> Some target | (false, (have_lwt_unix && have_obus, "services/hard_stop.best"); (have_lwt_unix && have_obus, "services/range_finders_stop.best"); (have_lwt_unix && have_obus, "services/infrared_stop.best"); - - (* Tests *) - (have_lwt_unix && have_obus, "tests/double_move.best"); - (have_lwt_unix && have_obus, "tests/stop_and_restart.best"); - (have_lwt_unix && have_obus, "tests/trajectories.best"); - (have_lwt_unix && have_obus, "tests/move.best"); - (have_lwt_unix && have_obus, "tests/scan_infrared.best"); - (have_lwt_unix && have_obus, "tests/infrared.best"); - (have_lwt_unix && have_obus, "tests/measure.best"); - (have_lwt_unix && have_obus, "tests/show_voltage.best"); - (have_lwt_unix && have_obus, "tests/take_ear.best"); - (have_lwt_unix && have_obus, "tests/scan_range_finders.best"); ] (* +-----------------------------------------------------------------+ diff --git a/info/control/protocol/krobot.obus b/info/control/protocol/krobot.obus index 122299f..dcc78b3 100644 --- a/info/control/protocol/krobot.obus +++ b/info/control/protocol/krobot.obus @@ -87,7 +87,8 @@ interface "fr.krobot.Service.Claws" { } interface "fr.krobot.Service.Grip" { - method Up : () -> () + method Up : () -> (result : boolean) + method EmptyUp : () -> () method Down : () -> () method Open : () -> () method Close : () -> () diff --git a/info/control/tests/move.ml b/info/control/tests/move.ml index 3bd0a09..2d764bf 100644 --- a/info/control/tests/move.ml +++ b/info/control/tests/move.ml @@ -14,16 +14,66 @@ open Krobot_move let velocity = 200 let acceleration = 400 -let init = { vx = 0; vy = 0 } -let dest = { vx = -100; vy = 100 } +let init = { vx = 240; vy = 140 } + +let a = init +let b = { vx = 600; vy = 722 } +let c = { vx = 600; vy = 1222 } +let d = { vx = 600; vy = 1722 } +let e = { vx = 1050; vy = 1472 } +let f = { vx = 1050; vy = 972 } +let g = { vx = 1050; vy = 722 } +let h = { vx = 1500; vy = 1722 } +let i = { vx = 1500; vy = 1222 } +let j = { vx = 1500; vy = 972 } +let k = { vx = 1500; vy = 722 } +let l = { vx = 1950; vy = 1472 } +let m = { vx = 1950; vy = 972 } +let n = { vx = 1950; vy = 722 } +let o = { vx = 2400; vy = 1722 } +let p = { vx = 2400; vy = 1222 } +let q = { vx = 2400; vy = 722 } +let r = { vx = 3000 - init.vx; vy = init.vy } -let a = { vx = 0; vy = 200 } let graph = List.fold_left (fun graph edge -> add_edge edge graph) empty [ - (init, a); - (a, dest); + (a, b); + (b, g); + (b, f); + (c, f); + (c, e); + (d, e); + (g, f); + (g, k); + (g, j); + (g, i); + (e, i); + (e, h); + (k, j); + (k, n); + (k, m); + (j, n); + (j, i); + (j, m); + (i, n); + (i, m); + (i, l); + (h, l); + (n, q); + (n, m); + (m, q); + (m, p); + (l, p); + (l, o); + (q, r); ] +let ears = [ + (1, [d]); + (2, [c]); + (3, [b]); + + let rec loop krobot state = if state.position = dest then return () hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-05-16 13:16: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 79da1a47dce06f02a6643e8480200c0d3db13f11 (commit) via 588b606d312ef1f224ec5a7a4f570282706218b0 (commit) via 78cd96a7fd2399277b2ff55bd9b19c57672a9cd4 (commit) via 4949f49fd550ad64570d5c43d82a87391ec2995d (commit) via ac2977f47ab88cfbf436cea8eaab748e89260ad9 (commit) via 65f2fae1c663a6204b907257bac118938ab944fd (commit) via d0df294f1d033413a9ffd96866034c1d5fd22d68 (commit) via ecd8b63d780fee83575919ea12d37c78a39b283d (commit) via 7c79b5b48518ed799702d33242281c12f3cd923a (commit) via 379dfd90fcf7e9c57e08a67d168cc8a3a394e55d (commit) via 783286764c8ab3bdd459e7359a70c0467b2490bd (commit) via d9ca3186261c20729f9221a33f941341dc9a8ad8 (commit) via a1dfacebd5b35cdd1d5beb3eb16914188cd8156d (commit) via 98ad3b09c50471930c0a4ee32ba2c3ffc6198171 (commit) via e77632c2acad1fffbb89603d228818fd3a36879e (commit) via 254f49782ce95c3c40e8709a27e5804659f1eeac (commit) via 3d592b28631892de5b67593b8f77f881212cda12 (commit) via ea01becfcb87e012cd7fc33482e1b5acb7765ade (commit) via c376f1086e01509c843f9166c50895f642329071 (commit) via fb89ca3e079a123537c8cb373e8335050016e95c (commit) via d4bbba7333434842d08aba11fc05d9215e22616c (commit) via 95dc07bc41957aa7f66f419120d56a48041e8b0c (commit) via 4056291ba2c8d2e152427b6889d906057d270b44 (commit) via b771e448123dc65c31168433570221ca4f41326f (commit) via 1febcf83099f9b3166d5e740ae789bf01b2c9988 (commit) via f1aa6df2bfe72390290e39c097e39882b81b9246 (commit) via 1770044b0dc7e7c99fcf5a43a2ac1846e2fde7a7 (commit) via 03a819923d1477ffc8af819ec2736eab58c60f18 (commit) via 0a4420feab936015fceeb0ed06c858763d312784 (commit) via 9eebfbf499eb6563d14ee6140316524065f338ee (commit) via 64767310be73a8d12d871196d4d37cbb795b5b4c (commit) via bfea1b5939b169b6daa316cc95c2c9c4912bcf90 (commit) via a8c05ca9d419694d4c2ab1c48dbb8aa30d7d885b (commit) via 8565fd1d8e3a76860837aa89efb2f812bfb07950 (commit) via 07dac9cf683ac1f5c0d67ea990b0cc2449668e49 (commit) via a7aaeae7572d6af6bcbbccd8169f915fe50323c1 (commit) via 48f822585c47d3acb22a94dc2d1e5861f0194873 (commit) via 9a5d1534f361ea52512f8da8f80b6a3cc23d82b8 (commit) via d9f695f8af4bd06c601c0385406a03e2d42a4e39 (commit) via a484dd298ce7cc647f93b77f93127036d870406e (commit) via 61331dc8d197c12ef54f4de448bdec9f3ab955a4 (commit) via eb682eff78b8fbbbced02e589eded57b8ff66b50 (commit) via 0d8984c32d287914f0617e8483581750f808f849 (commit) via c427b9373c29cc163d0ec3274c52ce075da5527f (commit) via c82f6352dc7f4d4870c852cd11137339969470fc (commit) via 80de2f764d41709cb6a8ee204a9893850521d24b (commit) via 71995c10e3099a3072936aeb6b1c50e0c4803cc1 (commit) via 5dbedba9fd4bafe248c90ed2989b5a863a4f6622 (commit) via 757e0c1d12bf3bf6f25a5b691c9efcacbdd8d1bf (commit) via d476458e31a9da43a6639f21e04e2e21bdfb44af (commit) via 4f510102fea69c28a06c49ec23b3843754f88a08 (commit) via ace1a954324a96d79b0c84192091e35fd71da806 (commit) via 112d1837c7a6f54c8999a70cd41436cb69470228 (commit) via e4fde4878b844551c1522d80780b5094b1316a91 (commit) via 0c3ea37803642ede488fa19b9ecb45509d36f85e (commit) via 42ebf1facac7abd3cb06d3f8d1cd52bd7da92c1e (commit) via 00ec0a2a44ccccc70e5da3198ddd8a04f41190b3 (commit) via aea767e5ec9acc25110098d88ca9ac26967505bc (commit) via ea6cb60f544207a6d318f4fe0e69dbaf798deb10 (commit) via a2b3ff84c306145937b792590e9561f4f467559d (commit) via 7418e68c76df95ecc87fa65bd9726578c8348b5a (commit) via 9e07b39d4b81a7b85b4ba79315f5406b427eff33 (commit) via 3f7010081b33689cd4a2fda3b32ef7504f6dbab0 (commit) via eec06b4e96af31ef8de77a3c401c3d201af8c1b1 (commit) via 6532c9243c255ce6e5957ed5ce1d263740e2fa6e (commit) via 931c4ab4b26b1bd0acbe7e74734193f18f53db54 (commit) via d2e29689af91de943f44c137e9f2843b2cf71343 (commit) via 2d9262979405f2f1c9837fd16d75a1b6578e571e (commit) via 22e8d96618018167a26bc37729ec4e7f4ea9f9fe (commit) via 8f8b769684b450d376907f6551ff9e1aecd60642 (commit) via 8f4d3cf4ea6ad06473cbd2f40ef9f9b8a940596f (commit) via 532263d63011568dc7a7c58f132e2bcb5d994cad (commit) via 5a8475a9e720dd7bdb81ba087a43f0976259486e (commit) via b4f5ed68bf97516ebf141a9138fb5a32e7bf8f09 (commit) via ebfcd280347392c8ad37466788df883dddb226b4 (commit) via 8675d7d3acce902f8a6781777066ac64abbb3fbe (commit) via 90b8d53ed9e13a130460e7d5f54d49c097aeae0a (commit) via 8ce1968b15ae8d716a5f584009322bbd93fb10ea (commit) via 0ae362e09ae71a276f6e3b4043e4c1513c514415 (commit) via b38c541c8fad916c94dd66213fceedd159c412d7 (commit) via 6a38a2fee348ca60f390b2be1944dacfd391abd2 (commit) via 784768b59daee01be6b73d514229114ada432832 (commit) via cb48be3360b00c4d0f557d6cb14b87224f8a5b72 (commit) via d35d7d9b4d7c32bba352e68dbef2881c2e494976 (commit) via ec016e2418dcf0fbfcc79cdceb87d8c812cf82ce (commit) via aabcb3e9762e16e69a3da7355cc4a4883375a749 (commit) via ac3cb49b854f91f1ce59394f402ae823d0a765ad (commit) via cb878a773340494ddb00d67342333c56b84b4ef5 (commit) via c62094472d184cb7e2e196b510d2d75358cd9882 (commit) via c8c99a7701d46b040c79e0e0c8baa250f54946fa (commit) via e3267e66a513ce18728b3449c182fba0c2cd0c91 (commit) from 7a5fd69156460474c83eb7e5e766ce9cce695c3f (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 79da1a47dce06f02a6643e8480200c0d3db13f11 Merge: 588b606d312ef1f224ec5a7a4f570282706218b0 78cd96a7fd2399277b2ff55bd9b19c57672a9cd4 Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 20:34:45 2010 +0200 Merge branch 'master' of ssh://192.168.43.122/~/krobot commit 588b606d312ef1f224ec5a7a4f570282706218b0 Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 20:34:16 2010 +0200 Reverted AX12 (no improvement) commit 78cd96a7fd2399277b2ff55bd9b19c57672a9cd4 Author: Stephane Glondu <st...@gl...> Date: Fri May 14 20:04:07 2010 +0200 Grip tests commit 4949f49fd550ad64570d5c43d82a87391ec2995d Author: Stephane Glondu <st...@gl...> Date: Fri May 14 19:30:48 2010 +0200 Register custom printer for RX64.Error commit ac2977f47ab88cfbf436cea8eaab748e89260ad9 Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 20:20:52 2010 +0200 Test AX12 (may very well fail) commit 65f2fae1c663a6204b907257bac118938ab944fd Author: Jérémie Dimino <je...@di...> Date: Fri May 14 19:53:48 2010 +0200 refix infrared ids commit d0df294f1d033413a9ffd96866034c1d5fd22d68 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 19:49:49 2010 +0200 fix infrared ids commit ecd8b63d780fee83575919ea12d37c78a39b283d Author: Jérémie Dimino <je...@di...> Date: Fri May 14 19:07:23 2010 +0200 integrate rx64 movement with grip movement commit 7c79b5b48518ed799702d33242281c12f3cd923a Author: Stephane Glondu <st...@gl...> Date: Fri May 14 19:00:59 2010 +0200 Grip tests commit 379dfd90fcf7e9c57e08a67d168cc8a3a394e55d Author: Stephane Glondu <st...@gl...> Date: Fri May 14 18:23:32 2010 +0200 Memory mapping of RX-64 commit 783286764c8ab3bdd459e7359a70c0467b2490bd Author: Jérémie Dimino <je...@di...> Date: Fri May 14 18:21:48 2010 +0200 add "_" in values in the controller commit d9ca3186261c20729f9221a33f941341dc9a8ad8 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 18:19:09 2010 +0200 change the infrared id in the scanner commit a1dfacebd5b35cdd1d5beb3eb16914188cd8156d Author: [Kro]bot <kr...@wa...> Date: Fri May 14 18:04:41 2010 +0200 Debugging RX64 commit 98ad3b09c50471930c0a4ee32ba2c3ffc6198171 Author: Stephane Glondu <st...@gl...> Date: Fri May 14 12:10:54 2010 +0200 Add .gitignore commit e77632c2acad1fffbb89603d228818fd3a36879e Author: Stephane Glondu <st...@gl...> Date: Fri May 14 12:08:10 2010 +0200 More RX-64 commands commit 254f49782ce95c3c40e8709a27e5804659f1eeac Author: Stephane Glondu <st...@gl...> Date: Fri May 14 11:34:05 2010 +0200 Move RX-64 constants to a separate module RX64Interface commit 3d592b28631892de5b67593b8f77f881212cda12 Author: Stephane Glondu <st...@gl...> Date: Fri May 14 10:34:23 2010 +0200 Open RX-64 card in driver commit ea01becfcb87e012cd7fc33482e1b5acb7765ade Author: Jérémie Dimino <je...@di...> Date: Fri May 14 15:24:58 2010 +0200 implement starting position switching commit c376f1086e01509c843f9166c50895f642329071 Author: [Kro]bot <kr...@wa...> Date: Fri May 14 15:18:02 2010 +0200 add get-ports-state commit fb89ca3e079a123537c8cb373e8335050016e95c Author: [Kro]bot <kr...@wa...> Date: Fri May 14 14:51:06 2010 +0200 various fixes commit d4bbba7333434842d08aba11fc05d9215e22616c Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 14:26:22 2010 +0200 Reverted stop commit 95dc07bc41957aa7f66f419120d56a48041e8b0c Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 12:49:43 2010 +0200 Test LM stop commit 4056291ba2c8d2e152427b6889d906057d270b44 Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 12:29:20 2010 +0200 Added USB functions commit b771e448123dc65c31168433570221ca4f41326f Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 12:01:11 2010 +0200 Corrected bug on get relative position and restored stop function commit 1febcf83099f9b3166d5e740ae789bf01b2c9988 Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 11:25:04 2010 +0200 Test LM commit f1aa6df2bfe72390290e39c097e39882b81b9246 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 11:19:17 2010 +0200 resume by hand commit 1770044b0dc7e7c99fcf5a43a2ac1846e2fde7a7 Merge: 03a819923d1477ffc8af819ec2736eab58c60f18 0a4420feab936015fceeb0ed06c858763d312784 Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 11:04:44 2010 +0200 Merge branch 'master' of ssh://192.168.43.122/~/krobot commit 03a819923d1477ffc8af819ec2736eab58c60f18 Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 11:03:59 2010 +0200 Test LM commit 0a4420feab936015fceeb0ed06c858763d312784 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 10:56:28 2010 +0200 fix the stop mode commit 9eebfbf499eb6563d14ee6140316524065f338ee Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 10:49:50 2010 +0200 Test with LM commit 64767310be73a8d12d871196d4d37cbb795b5b4c Author: [Kro]bot <kr...@wa...> Date: Fri May 14 08:34:02 2010 +0000 fix resuming with inhibition commit bfea1b5939b169b6daa316cc95c2c9c4912bcf90 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 10:28:10 2010 +0200 fix resuming commit a8c05ca9d419694d4c2ab1c48dbb8aa30d7d885b Author: [Kro]bot <kr...@wa...> Date: Fri May 14 08:19:06 2010 +0000 udpate limit for front infrared sensors commit 8565fd1d8e3a76860837aa89efb2f812bfb07950 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 10:17:34 2010 +0200 fix backward in script commit 07dac9cf683ac1f5c0d67ea990b0cc2449668e49 Author: [Kro]bot <kr...@wa...> Date: Fri May 14 08:16:38 2010 +0000 fix a small bug with resuming in the driver commit a7aaeae7572d6af6bcbbccd8169f915fe50323c1 Author: [Kro]bot <kr...@wa...> Date: Fri May 14 08:10:42 2010 +0000 stop smoothly the robot commit 48f822585c47d3acb22a94dc2d1e5861f0194873 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 09:57:20 2010 +0200 update infrared stopper commit 9a5d1534f361ea52512f8da8f80b6a3cc23d82b8 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 09:47:33 2010 +0200 returns the values of the infrareds 3 and 4 commit d9f695f8af4bd06c601c0385406a03e2d42a4e39 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 09:22:11 2010 +0200 update infrared stopper commit a484dd298ce7cc647f93b77f93127036d870406e Author: [Kro]bot <kr...@wa...> Date: Fri May 14 07:20:39 2010 +0000 add infrared_stop.ml commit 61331dc8d197c12ef54f4de448bdec9f3ab955a4 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 09:16:59 2010 +0200 add new infrareds commit eb682eff78b8fbbbced02e589eded57b8ff66b50 Author: Stephane Glondu <st...@gl...> Date: Fri May 14 07:30:12 2010 +0200 Add (preliminary) support for RX-64 card in driver commit 0d8984c32d287914f0617e8483581750f808f849 Author: Stephane Glondu <st...@gl...> Date: Fri May 14 07:25:18 2010 +0200 Parametrize cards handled by driver commit c427b9373c29cc163d0ec3274c52ce075da5527f Author: Stephane Glondu <st...@gl...> Date: Fri May 14 07:11:21 2010 +0200 Better implementation of RX64Card commit c82f6352dc7f4d4870c852cd11137339969470fc Author: Stephane Glondu <st...@gl...> Date: Fri May 14 04:31:28 2010 +0200 Fill some serial-related holes This commit add a dependency to the (home-made) "serial" findlib package, which provides bindings for ioctl() calls specific to serial ports. commit 80de2f764d41709cb6a8ee204a9893850521d24b Author: Stephane Glondu <st...@gl...> Date: Fri May 14 07:44:53 2010 +0200 Fix typo commit 71995c10e3099a3072936aeb6b1c50e0c4803cc1 Author: Olivier BICHLER <oli...@cr...> Date: Fri May 14 00:46:01 2010 +0200 Added 2 analog inputs for 2 more infrared rangefinders commit 5dbedba9fd4bafe248c90ed2989b5a863a4f6622 Author: Jérémie Dimino <je...@di...> Date: Fri May 14 00:07:06 2010 +0200 allow to resume a trajectory commit 757e0c1d12bf3bf6f25a5b691c9efcacbdd8d1bf Author: Stephane Glondu <st...@gl...> Date: Thu May 13 20:48:39 2010 +0200 Add RX64Card module Committed for reference, but never tested because of trouble in communicating with the card. Not integrated to the rest of the driver either. commit d476458e31a9da43a6639f21e04e2e21bdfb44af Author: Stephane Glondu <st...@gl...> Date: Thu May 13 20:37:18 2010 +0200 Fix some typos commit 4f510102fea69c28a06c49ec23b3843754f88a08 Author: Jérémie Dimino <je...@di...> Date: Thu May 13 23:33:46 2010 +0200 remove the goto command commit ace1a954324a96d79b0c84192091e35fd71da806 Author: Jérémie Dimino <je...@di...> Date: Thu May 13 23:24:37 2010 +0200 add a program which wait for the jack to be removed commit 112d1837c7a6f54c8999a70cd41436cb69470228 Author: Jérémie Dimino <je...@di...> Date: Thu May 13 20:04:14 2010 +0200 inverse order of logic sensors commit e4fde4878b844551c1522d80780b5094b1316a91 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 19:51:50 2010 +0200 I2C commit 0c3ea37803642ede488fa19b9ecb45509d36f85e Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 19:40:13 2010 +0200 I2C commit 42ebf1facac7abd3cb06d3f8d1cd52bd7da92c1e Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 19:24:08 2010 +0200 Changed method for I2C commit 00ec0a2a44ccccc70e5da3198ddd8a04f41190b3 Merge: aea767e5ec9acc25110098d88ca9ac26967505bc a2b3ff84c306145937b792590e9561f4f467559d Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 19:19:19 2010 +0200 Merge branch 'master' of ssh://192.168.43.122/~/krobot commit aea767e5ec9acc25110098d88ca9ac26967505bc Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 19:18:28 2010 +0200 IdleI2C() commit ea6cb60f544207a6d318f4fe0e69dbaf798deb10 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 19:15:25 2010 +0200 Restored some necessary IdleI2C() commit a2b3ff84c306145937b792590e9561f4f467559d Author: Kro[bot] <kr...@wa...> Date: Thu May 13 17:13:41 2010 +0000 modificiations of ids commit 7418e68c76df95ecc87fa65bd9726578c8348b5a Author: Kro[bot] <kr...@wa...> Date: Thu May 13 16:12:32 2010 +0000 change ids of range finders in the controller commit 9e07b39d4b81a7b85b4ba79315f5406b427eff33 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 19:11:17 2010 +0200 Commented out all IdleI2C() commit 3f7010081b33689cd4a2fda3b32ef7504f6dbab0 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 19:05:29 2010 +0200 Commented out problematic IdleI2C() commit eec06b4e96af31ef8de77a3c401c3d201af8c1b1 Author: Kro[bot] <kr...@wa...> Date: Thu May 13 16:05:07 2010 +0000 enhancement in range_finders_stop.ml commit 6532c9243c255ce6e5957ed5ce1d263740e2fa6e Author: Jérémie Dimino <je...@di...> Date: Thu May 13 17:42:23 2010 +0200 sets the id of the front range finder commit 931c4ab4b26b1bd0acbe7e74734193f18f53db54 Author: Jérémie Dimino <je...@di...> Date: Thu May 13 15:14:49 2010 +0200 wait between measures of the range finders commit d2e29689af91de943f44c137e9f2843b2cf71343 Author: Jérémie Dimino <je...@di...> Date: Thu May 13 15:02:20 2010 +0200 range finders id change: 8 --> 1 commit 2d9262979405f2f1c9837fd16d75a1b6578e571e Author: Jérémie Dimino <je...@di...> Date: Thu May 13 14:01:25 2010 +0200 reports values only for used range finders commit 22e8d96618018167a26bc37729ec4e7f4ea9f9fe Author: Jérémie Dimino <je...@di...> Date: Thu May 13 13:57:08 2010 +0200 new range-finders system commit 8f8b769684b450d376907f6551ff9e1aecd60642 Author: Jérémie Dimino <je...@di...> Date: Thu May 13 12:39:15 2010 +0200 add a command to shutdown the driver commit 8f4d3cf4ea6ad06473cbd2f40ef9f9b8a940596f Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 12:39:04 2010 +0200 Inverted read/write bit commit 532263d63011568dc7a7c58f132e2bcb5d994cad Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 12:31:43 2010 +0200 Inverted read/write bit commit 5a8475a9e720dd7bdb81ba087a43f0976259486e Merge: b4f5ed68bf97516ebf141a9138fb5a32e7bf8f09 ebfcd280347392c8ad37466788df883dddb226b4 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 12:26:42 2010 +0200 Merge branch 'master' of ssh://192.168.43.122/~/krobot commit b4f5ed68bf97516ebf141a9138fb5a32e7bf8f09 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 12:26:13 2010 +0200 New test with jumper commit ebfcd280347392c8ad37466788df883dddb226b4 Author: Jérémie Dimino <je...@di...> Date: Thu May 13 11:47:54 2010 +0200 add a test for reading the states of all range finders commit 8675d7d3acce902f8a6781777066ac64abbb3fbe Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 11:48:24 2010 +0200 Test: #5 commit 90b8d53ed9e13a130460e7d5f54d49c097aeae0a Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 11:44:06 2010 +0200 Test: #4 (inverted read/write) commit 8ce1968b15ae8d716a5f584009322bbd93fb10ea Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 11:41:01 2010 +0200 Test: #3 commit 0ae362e09ae71a276f6e3b4043e4c1513c514415 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 11:39:21 2010 +0200 Test: #1 commit b38c541c8fad916c94dd66213fceedd159c412d7 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 11:37:41 2010 +0200 Test: commented out IdleI2C() commit 6a38a2fee348ca60f390b2be1944dacfd391abd2 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 11:28:52 2010 +0200 Added default case and corrected wrong read address commit 784768b59daee01be6b73d514229114ada432832 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 11:18:38 2010 +0200 Changed I2C protocol commit cb48be3360b00c4d0f557d6cb14b87224f8a5b72 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 11:07:23 2010 +0200 Lowered delay before timeout commit d35d7d9b4d7c32bba352e68dbef2881c2e494976 Author: Kro[bot] <kr...@wa...> Date: Thu May 13 07:59:50 2010 +0000 recognize the new sensor card commit ec016e2418dcf0fbfcc79cdceb87d8c812cf82ce Author: Jérémie Dimino <je...@di...> Date: Thu May 13 09:09:25 2010 +0200 update range finders commands commit aabcb3e9762e16e69a3da7355cc4a4883375a749 Author: Jérémie Dimino <je...@di...> Date: Thu May 13 08:52:20 2010 +0200 do not reads logic sensors states for now commit ac3cb49b854f91f1ce59394f402ae823d0a765ad Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 04:11:50 2010 +0200 Added new constants in all PcInterface.h files commit cb878a773340494ddb00d67342333c56b84b4ef5 Author: Olivier BICHLER <oli...@cr...> Date: Thu May 13 04:07:39 2010 +0200 Added functions to get I2C US rangefinder measurements commit c62094472d184cb7e2e196b510d2d75358cd9882 Author: Jérémie Dimino <je...@di...> Date: Wed May 12 22:53:07 2010 +0200 really record messages... commit c8c99a7701d46b040c79e0e0c8baa250f54946fa Author: Jérémie Dimino <je...@di...> Date: Wed May 12 20:58:08 2010 +0200 add take_ear.ml commit e3267e66a513ce18728b3449c182fba0c2cd0c91 Author: Jérémie Dimino <je...@di...> Date: Wed May 12 19:55:29 2010 +0200 add a tools for recording all messages ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Controller_Motor/Firmware/PcInterface.h b/elec/boards/Controller_Motor/Firmware/PcInterface.h index 31eeb55..764c5a6 100644 --- a/elec/boards/Controller_Motor/Firmware/PcInterface.h +++ b/elec/boards/Controller_Motor/Firmware/PcInterface.h @@ -63,6 +63,7 @@ typedef struct _UP { #define CMD_MOTOR 11 ///< Gestion des moteurs #define CMD_MOTOR_TOR 12 #define CMD_LCD 13 ///< Commande de l'afficheur LCD +#define CMD_USRF 14 ///< Tmes US I2C // CMD_GET arguments #define GET_RESET_SOURCE 0 ///< Demande au PIC la source du Reset @@ -80,8 +81,10 @@ typedef struct _UP { #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] -#define GET_CURRENT_SPEED 15 ///< Demande au PIC la valeur actuelle d'un moteur [Carte d'asservissement] +#define GET_CURRENT_SPEED 15 ///< Demande au PIC la valeur actuelle de la vitesse d'un moteur [Carte d'asservissement] #define GET_INTEGRATION_SUM 16 ///< Demande au PIC la valeur actuelle du terme integration de l'asservissement [Carte d'asservissement] +#define GET_DESIRED_SPEED 17 ///< Demande au PIC la valeur drde la vitesse d'un moteur [Carte d'asservissement] +#define GET_DESIRED_POS 18 ///< Demande au PIC les positions dr des moteurs [Carte d'asservissement] // CMD_ERR arguments #define ERR_UNKNOWN_CMD 1 ///< Commande inconnue @@ -155,6 +158,10 @@ typedef struct _UP { #define LCD_WRITE 0x06 #define LCD_WRITE_LINE 0x07 +// CMD_USRF +#define USRF_MEASURE 0x00 +#define USRF_GET 0x01 + // CMD_TRAJ #define TRAJ_INIT 0x00 #define TRAJ_FORWARD 0x01 diff --git a/elec/boards/Controller_Motor/Firmware/main.c b/elec/boards/Controller_Motor/Firmware/main.c index edf7d0e..1b27500 100644 --- a/elec/boards/Controller_Motor/Firmware/main.c +++ b/elec/boards/Controller_Motor/Firmware/main.c @@ -759,6 +759,20 @@ void ProcessIO(void) { ToSendDataBuffer.DATA[7] = dword.byte.LB; break; + case GET_DESIRED_POS: + dword.Val = getDesiredPosition(MOTOR_RIGHT); + ToSendDataBuffer.DATA[0] = dword.byte.MB; + ToSendDataBuffer.DATA[1] = dword.byte.UB; + ToSendDataBuffer.DATA[2] = dword.byte.HB; + ToSendDataBuffer.DATA[3] = dword.byte.LB; + + dword.Val = getDesiredPosition(MOTOR_LEFT); + ToSendDataBuffer.DATA[4] = dword.byte.MB; + ToSendDataBuffer.DATA[5] = dword.byte.UB; + ToSendDataBuffer.DATA[6] = dword.byte.HB; + ToSendDataBuffer.DATA[7] = dword.byte.LB; + break; + case GET_CURRENT_POS: dword.Val = getRealPosition(MOTOR_RIGHT); ToSendDataBuffer.DATA[0] = dword.byte.MB; @@ -773,6 +787,20 @@ void ProcessIO(void) { ToSendDataBuffer.DATA[7] = dword.byte.LB; break; + case GET_DESIRED_SPEED: + dword.Val = getDesiredVelocity(MOTOR_RIGHT); + ToSendDataBuffer.DATA[0] = dword.byte.MB; + ToSendDataBuffer.DATA[1] = dword.byte.UB; + ToSendDataBuffer.DATA[2] = dword.byte.HB; + ToSendDataBuffer.DATA[3] = dword.byte.LB; + + dword.Val = getDesiredVelocity(MOTOR_LEFT); + ToSendDataBuffer.DATA[4] = dword.byte.MB; + ToSendDataBuffer.DATA[5] = dword.byte.UB; + ToSendDataBuffer.DATA[6] = dword.byte.HB; + ToSendDataBuffer.DATA[7] = dword.byte.LB; + break; + case GET_CURRENT_SPEED: dword.Val = getRealVelocity(MOTOR_RIGHT); ToSendDataBuffer.DATA[0] = dword.byte.MB; @@ -1102,8 +1130,8 @@ void ProcessIO(void) { ToSendDataBuffer.DATA[1] = word1.byte.LB; word1.Val = getRelPos(MOTOR_LEFT); - ToSendDataBuffer.DATA[2] = word2.byte.HB; - ToSendDataBuffer.DATA[3] = word2.byte.LB; + ToSendDataBuffer.DATA[2] = word1.byte.HB; + ToSendDataBuffer.DATA[3] = word1.byte.LB; USBInHandle = HIDTxPacket(HID_EP, (BYTE*) &ToSendDataBuffer, 64); break; diff --git a/elec/boards/Controller_Motor/Firmware/output/Motor_controller.cof b/elec/boards/Controller_Motor/Firmware/output/Motor_controller.cof index 59e3380..86ce295 100644 Binary files a/elec/boards/Controller_Motor/Firmware/output/Motor_controller.cof and b/elec/boards/Controller_Motor/Firmware/output/Motor_controller.cof differ diff --git a/elec/boards/Controller_Motor/Firmware/output/Motor_controller.hex b/elec/boards/Controller_Motor/Firmware/output/Motor_controller.hex index 97ae914..0b9441e 100644 --- a/elec/boards/Controller_Motor/Firmware/output/Motor_controller.hex +++ b/elec/boards/Controller_Motor/Firmware/output/Motor_controller.hex @@ -1,14 +1,14 @@ :020000040000FA -:0600000052EF34F0120083 +:06000000CFEF34F0120006 :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:0608000052EF34F012007B +:06080000CFEF34F01200FE :060808000FEF14F01200D6 :060818007EEF14F0120057 -:06082A0004003969000022 -:1008300026010000210000002E6900006401000074 -:100840000B00000021690000570100000D000000AE -:0C0850001E6900007C0100000300000095 +:06082A000400336A000027 +:100830002601000021000000286A00006401000079 +:100840000B0000001B6A0000570100000D000000B3 +:0C085000186A00007C010000030000009A :04085C0079EC0FF034 :10086000030EE126010EE66E04DBE552DF6E020E9A :10087000E66EFFDAE552E76E010EE7CFDBFF020E10 @@ -82,7 +82,7 @@ :100CB000F29E020EE15C02E2E16AE552E16EE5526B :100CC000E7CFD9FF1200D9CFE6FFE1CFD9FF020E5F :100CD000E126FE0EDB040DE0FE0EDB50020809E00B -:100CE0000C0EE66EF2EC33F0E552F36AF46AB7D01C +:100CE0000C0EE66E6FEC34F0E552F36AF46AB7D09E :100CF000B6D0F250800B01E0010E0101496FF29E67 :100D0000FE0EDBCFE6FF2ADEE552010EE66E11DEB7 :100D1000E552FE0EDB50020B02E1000E01D0010E87 @@ -109,7 +109,7 @@ :100E6000E15C02E2E16AE552E16EE552E7CFD9FFCB :100E70001200D9CFE6FFE1CFD9FFE652DF6AFE0EBE :100E8000DB040CE0FE0EDB50020808E00C0EE66E00 -:100E9000F2EC33F0E552000E6ED06DD0F250800BC4 +:100E90006FEC34F0E552000E6ED06DD0F250800B46 :100EA00001E0010E01014A6FF29EFE0EDBCFE6FF6C :100EB00055DDE552010EE66E3CDDE552FE0EDB50DF :100EC000020B02E1000E01D0010EE8B0838CE8A015 @@ -135,7 +135,7 @@ :10100000000E99EC12F001014C51E8B0F28EE8A00C :10101000F29E7EEF0FF095EC12F001E0010E01015F :101020004D6FF29E4BEC10F084080DE04BEC10F08D -:10103000C40809E0E66A9FEC13F04EEC11F025ECD1 +:10103000C40809E0E66A9FEC13F04EEC11F0A2EC54 :1010400034F0E552EFD71C0E3CEC0FF0660E99EC35 :1010500012F055EC11F04BEC10F0800804E04BEC72 :1010600010F0C008E7E14BEC10F0C00802E155ECCD @@ -230,9 +230,9 @@ :1015F00011F032E1020E27EC11F001016B512D5C6C :101600000A6E6C512E580B6E6D512F580C6E6E5128 :1016100030580D6E0AC02DF00BC02EF00CC02FF00C -:10162000306E7CEC25F014EC10F028EC13F02CEC70 +:10162000306EF9EC25F014EC10F028EC13F0A9EC76 :1016300026F02EC002F02FC003F030C004F031C0FD -:1016400005F064EC10F07FEC26F0ECEC26F02FC0F7 +:1016400005F064EC10F0FCEC26F069EC27F02FC0FC :10165000F3FF30C0F4FF02D042EC11F07EEF0FF048 :10166000C2EC12F024EC13F0030E40EC10F07EEF0D :101670000FF0C2EC12F0F8EC0FF0030E40EC10F09B @@ -243,13 +243,13 @@ :1016C0005FEF12F079EC0FF01C0EE126F60EDB5006 :1016D0001EE0006A800E016E010E026E430E036E64 :1016E000FAEC13F0336A346AC80E356E420E366E69 -:1016F0002CEC26F035EC13F0A9DB71EC13F0ECECDC -:1017000026F0F70E2FC0DBFFF80E30C0DBFF3DECFC +:1016F000A9EC26F035EC13F0A9DB71EC13F069ECE2 +:1017000027F0F70E2FC0DBFFF80E30C0DBFF3DECFB :1017100012F0DFDBC6EC12F00C6A800E0D6E010ECB :101720000E6E430E0F6EB1EC13F031EC13F0FDECC6 :1017300011F006EC11F08ADB71EC13F02EC0DEFF25 :101740002FC0DEFF30C0DEFF31C0DDFFDD52DD52D5 -:101750008DEC10F064EC10F07FEC26F035EC13F01B +:101750008DEC10F064EC10F0FCEC26F035EC13F09E :10176000C6EC12F0106A800E116E010E126E430E5E :10177000136EB1EC13F00BEC12F0EEEC13F071EC15 :1017800013F0040E2EC0DBFF050E2FC0DBFF060E8C @@ -260,9 +260,9 @@ :1017D000DBFF0A0E30C0DBFF0B0E31C0DBFF080E53 :1017E000DBCF04F0090EDBCF05F00A0EDBCF06F0ED :1017F0000B0EDBCF07F0336A346A356A366A4DDB8D -:1018000052EC27F0010A03E0B5EC10F013D0080EFB +:10180000CFEC27F0010A03E0B5EC10F013D0080E7E :10181000DBCF08F0090EDBCF09F00A0EDBCF0AF0B0 -:101820000B0EDBCF0BF064EC10F075EC13F07FECDB +:101820000B0EDBCF0BF064EC10F075EC13F0FCEC5E :1018300026F019DB080E00C0DBFF090E01C0DBFF3C :101840000A0E02C0DBFF0B0E03C0DBFF92DB90EC45 :1018500010F070EC11F0CCEC11F0DCEC10F0046A3C @@ -285,12 +285,12 @@ :101960008CDBDCEC13F0246E0D0EE15E2450ABEC4E :1019700013F01C0EE15C02E2E16AE552E16EBED2B8 :10198000B8DA3C0EE126C9DB05EC14F03EEC13F0AE -:1019900075EC13F07FEC26F0C3DB5AEC13F042EC4D +:1019900075EC13F0FCEC26F0C3DB5AEC13F042ECD0 :1019A00012F031EC13F018EC11F050DA13EC12F0E5 -:1019B0004DDA73DA96EC25F056DA336A346A800E23 +:1019B0004DDA73DA13EC26F056DA336A346A800EA5 :1019C000FDEC10F0380E2EC0DBFF390E2FC0DBFF10 :1019D0003A0E30C0DBFF3B0E31C0DBFF05EC14F0EC -:1019E00042DA5EDB42EC12F074DA5ADBD7EC2EF00E +:1019E00042DA5EDB42EC12F074DA5ADB54EC2FF090 :1019F000086E080EE15E0850080E2DC0DBFF090ED0 :101A00002EC0DBFF0A0E2FC0DBFF0B0E30C0DBFF4A :101A1000F60EDB5007E0D950F40F9DEC12F0EE50BB @@ -303,9 +303,9 @@ :101A80002EF0CBEC12F066EC12F0EADD0A6E060ED8 :101A9000E15E0A50A3D1380EDBCF04F0390EDBCF64 :101AA00005F03A0EDBCF06F03B0EDBCF07F0C9DBCB -:101AB00008EC14F07FEC26F070EC11F0E6EC13F07B +:101AB00008EC14F0FCEC26F070EC11F0E6EC13F0FE :101AC000BCDAB6DBE5EC12F05AEC13F0BFD9DCD986 -:101AD00096EC25F028DBE8EC12F03DEC12F00BEC74 +:101AD00013EC26F028DBE8EC12F03DEC12F00BECF6 :101AE00012F071EC13F05BDB046A056AE8EC12F0AB :101AF00042EC12F00BEC12F071EC13F01C0E2EC045 :101B0000DBFF1D0E2FC0DBFF1E0E30C0DBFF1F0EE4 @@ -323,31 +323,31 @@ :101BC000D4EC13F02C0E2EC0DBFF2D0E2FC0DBFF4C :101BD0002E0E30C0DBFF2F0E31C0DBFF2C0EDBCF13 :101BE00004F02D0EDBCF05F02E0EDBCF06F02F0E0E -:101BF000DBCF07F069DA51D97FEC26F01FEC12F049 +:101BF000DBCF07F069DA51D9FCEC26F01FEC12F0CC :101C0000300E2EC0DBFF310E2FC0DBFF320E30C096 :101C1000DBFF330E31C0DBFF280EDBCF2EF0290EA9 :101C2000DBCF2FF02A0EDBCF30F02B0EDBCF31F0E5 :101C30001FEC12F0340E2EC0DBFF350E2FC0DBFF81 :101C4000360E30C0DBFF370E31C0DBFFD950300F0E -:101C500082D9D950340F7FD9D7EC2EF0006E080E00 +:101C500082D9D950340F7FD954EC2FF0006E080E82 :101C6000E15E00500C0E2DC0DBFF0D0E2EC0DBFF21 :101C70000E0E2FC0DBFF0F0E30C0DBFF006A016AC3 :101C8000026A400E036E00C0E6FF01C0E6FF02C01C :101C9000E6FFE66E97D908EC14F0B8DA01DA71ECD9 :101CA00012F02DC014F02EC015F02FC016F030C069 -:101CB00017F024EC13F0D7EC2EF0186E080EE15E4E +:101CB00017F024EC13F054EC2FF0186E080EE15ED0 :101CC0001850E552E7CF03F0E552E7CF02F0E552B6 :101CD000E7CF01F0E552E7CF00F02DC004F02EC0B1 :101CE00005F02FC006F030C007F02CDA71EC13F0CD -:101CF00049DAF60EDB5002081FE163EC13F095ECB5 -:101D000025F0A3EC13F096EC25F0FCD862DA060E71 +:101CF00049DAF60EDB5002081FE163EC13F012EC38 +:101D000026F0A3EC13F013EC26F0FCD862DA060EF2 :101D10002FC0DBFF070E30C0DBFF000EDFCF2FF040 :101D2000010ED7D8020EB0EC12F0DADA6ADB040E3C :101D30002FC0DBFF050E35D01CD995D80C0EDBCF9C :101D400004F00D0EDBCF05F00E0EDBCF06F00F0E0C :101D5000DBCF07F004C033F005C034F006C035F027 -:101D600007C036F095EC25F027DA63EC13F096EC1B -:101D700025F0A3EC13F095EC25F0C4D82ADA040E74 +:101D600007C036F012EC26F027DA63EC13F013EC20 +:101D700026F0A3EC13F012EC26F0C4D82ADA040EF5 :101D80002FC0DBFF050E30C0DBFF020EDBCF2FF0D4 :101D9000030E9FD8C2DBA4DA34DB060E2FC0DBFFB4 :101DA000070E30C0DBFF2BD881D8040EDBCF2FF01D @@ -369,11 +369,11 @@ :101EA0002FF006C030F007C031F01200FAEC13F04A :101EB000CFDBB6EF11F0DBCF0BF0CADB75EC13F024 :101EC000B6EF11F0DBCF17F0C3DBADDAE1DB24EFC7 -:101ED00013F0C7DB35EF13F002C02EF05CDB95EC9E -:101EE00025F0F4DA42EC0BF0126E060EE15E1250B1 +:101ED00013F0C7DB35EF13F002C02EF05CDB12EC21 +:101EE00026F0F4DA42EC0BF0126E060EE15E1250B0 :101EF0001200D9CFE6FFE1CFD9FF1200E552E7CFBC :101F0000D9FF1200100EDBCF33F0110EDBCF34F00F -:101F1000120EDBCF35F0130EF3DAECEF26F0A8DA71 +:101F1000120EDBCF35F0130EF3DA69EF27F0A8DAF3 :101F20002ADBC8EF13F042DBE76E1200FA0EDBCFBC :101F300000F0FB0EDBCF01F0FC0EDBCF02F0FD0E5C :101F4000DBCF03F0000E006C011E0122021E0222F4 @@ -409,7 +409,7 @@ :10212000A4DAB0D900D2140E2EC0DBFF150E2FC0DA :10213000DBFF160E30C0DBFF170E31C0DBFF046A79 :10214000056A12002DC033F02EC034F02FC035F0D8 -:1021500030C036F01200F1EC2AF0E55229D3336A90 +:1021500030C036F012006EEC2BF0E55229D3336A12 :10216000346A356A400E366E1200080EDBCF00F07E :10217000090EDBCF01F00A0EDBCF02F00B0EDBCF36 :1021800003F01200100E2EC0DBFF110E2FC0DBFF7C @@ -420,9 +420,9 @@ :1021D0001200020E2FC0DBFF030E30C0DBFFF90E32 :1021E000DBCF2FF0FA0EDBCF30F01200356E430E4E :1021F000366E1200D9EC07F0DBD2356E400E366E2B -:102200002CEF26F0E66E5FD97BEF12F095EC25F00F +:10220000A9EF26F0E66E5FD97BEF12F012EC26F014 :1022100070EF11F00CC033F00DC034F00EC035F08B -:102220000FC036F095EF25F0336A800E346E120041 +:102220000FC036F012EF26F0336A800E346E1200C3 :102230002EC018F02FC019F030C01AF031C01BF0BA :1022400012000C6A0D6A0E6A400E0F6E1200E66EE6 :1022500045EC0AF0E5521200040EE126FE0EDB0406 @@ -433,42 +433,42 @@ :1022A000E552E552020EE66E120049DAF6EC07F04E :1022B000E5521200E66EC0EC07F0E552E552000967 :1022C0001200080EDBCFE6FF090EDBCFE6FF12009F -:1022D000C8D9F0D9BDD97FEC26F010DA48EF13F059 +:1022D000C8D9F0D9BDD9FCEC26F010DA48EF13F0DC :1022E0002EC008F02FC009F030C00AF031C00BF04A :1022F00012008CDD2EC024F02FC025F030C026F057 -:1023000031C027F06CDE7FEC26F02EC020F02FC00D +:1023000031C027F06CDEFCEC26F02EC020F02FC090 :1023100021F030C022F031C023F086DF810E66DF6D -:102320007FEC26F011EF0FF0DBCF11F0336A346A47 +:10232000FCEC26F011EF0FF0DBCF11F0336A346ACA :10233000340E5CDF0EC02EF00FC02FF010C030F056 -:1023400011C031F07FEC26F02EC00AF02FC00BF048 +:1023400011C031F0FCEC26F02EC00AF02FC00BF0CB :1023500030C00CF031C00DF0DB0E336E0F0E346E5A -:10236000490E4BDF61DE72DD6CEF0FF07FEC26F083 +:10236000490E4BDF61DE72DD6CEF0FF0FCEC26F006 :102370007CD9CC0E336EBC0E346E8C0E356E3B0E9B :10238000366E49DA2DC000F02EC001F02FC002F0E9 :1023900030C003F024EF13F0CCD965DD106A116A68 :1023A000800E126E3F0E136E080EDBCF14F0090E76 :1023B000DBCF15F00A0EDBCF16F00B0EDBCF17F0DC :1023C00014C033F015C034F016C035F017C036F025 -:1023D00005DA5ADD2CEF26F0140EDBCF00F0150ED7 +:1023D00005DA5ADDA9EF26F0140EDBCF00F0150E5A :1023E000DBCF01F0160EDBCF02F0170EDBCF03F0D0 :1023F0001BDF010EFBDE44EF0FF080D927DDB0EFCD :102400000FF0E4D9F90EDBCF2FF0FA0E2AD936D926 -:1024100068D9ECEF26F025D94DD926EF0FF0DBCFA8 +:1024100068D969EF27F025D94DD926EF0FF0DBCF2A :10242000E6FF2FEF0FF014C02EF015C02FF016C0EE -:1024300030F017C031F07FEC26F07EEF13F0140E71 +:1024300030F017C031F0FCEC26F07EEF13F0140EF4 :10244000DBCF33F0150EDBCF34F0160EDBCF35F0DB :10245000170ECEEF13F0C3DD20C02EF021C02FF0F9 -:1024600022C030F023C031F07FEC26F011EF0FF0E6 +:1024600022C030F023C031F0FCEC26F011EF0FF069 :1024700066D963EC06F0E5521200FD0EDBCF2FF0BB :10248000FE0E1200FB0EDBCF2FF0FC0E1200F70E3B :10249000DBCFE6FFF80EDBCFE6FFF90EDBCFE6FF82 :1024A000FA0EDBCFE6FF1200EA6EEE500026EE5089 :1024B0000122EE500222EE500322D2EF0FF07CD91F -:1024C000D0DE49D91BD56FEC05F072D1ECEC26F0CB +:1024C000D0DE49D91BD56FEC05F072D169EC27F04D :1024D0002FC000F030C001F02FC0E6FF30C0E6FF93 -:1024E0001200D950380F37DDABEF10F0E66EF2EC8A -:1024F00033F0E5521200DECFE6FFDDCFE6FF12003B -:10250000DBCF36F07FEF26F0EECFE6FFEECFE6FF33 +:1024E0001200D950380F37DDABEF10F0E66E6FEC0D +:1024F00034F0E5521200DECFE6FFDDCFE6FF12003A +:10250000DBCF36F0FCEF26F0EECFE6FFEECFE6FFB6 :10251000EECFE6FFEFCFE6FF1200000EDFCF2FF089 :10252000010E31EF13F031EF13F0E3DCF250800BCA :102530001200E66EE66A2FEF0FF0E96EFF0EDA206A @@ -476,21 +476,21 @@ :102550001200010E91DC0101010E656F666B120025 :10256000DBCF2FF0030E31EF13F0E66EE66A030EB9 :10257000E66EFAEF10F0020EF3CFDBFF030EF4CF9E -:10258000DBFF1200B6DC42DC11EF0FF0E8DD7FEC80 +:10258000DBFF1200B6DC42DC11EF0FF0E8DDFCEC03 :1025900026F033EF0FF003C02FF004C030F005C079 -:1025A00031F0120053DC70DC95EF25F0E66E44EC60 +:1025A00031F0120053DC70DC12EF26F0E66EC1EC65 :1025B00033F0E5521200F29E1F0E3CEF0FF05CDC90 -:1025C0008FEF0FF050DCE2EF0FF0C9DD2CEF26F0BB +:1025C0008FEF0FF050DCE2EF0FF0C9DDA9EF26F03E :1025D000800E066E3F0E076E34DE04C0E6FF05C0B7 :1025E000E6FF06C0E6FF07C0E6FF0CC0E6FF0DC031 :1025F000E6FF0EC0E6FFE66E74DFE552E7CF0FF0B0 :10260000E552E7CF0EF0E552E7CF0DF0E552E7CF08 :102610000CF0E552E7CF07F0E552E7CF06F0E552C0 :10262000E7CF05F0E552E7CF04F02DC010F02EC043 -:1026300011F02FC012F030C013F084DD91DC7FEC7C +:1026300011F02FC012F030C013F084DD91DCFCECFF :1026400026F04EDEE6EF13F02DC0E6FFFEEF13F0AE :10265000330E336EE20E346EC20E356E420E366E9F -:102660001200DBCF30F067EF25F02EC004F02FC052 +:102660001200DBCF30F0E4EF25F02EC004F02FC0D5 :1026700005F030C006F031C007F012002EC00CF09B :102680002FC00DF030C00EF031C00FF026EF0FF06C :10269000BD0E336E370E346E860E356E410E366EBD @@ -498,1100 +498,1118 @@ :1026B0000FF012002EC014F02FC015F030C016F02D :1026C00031C017F0120066DC0C0EDBCF0EF00D0EE1 :1026D000DBCF0FF00E0EDBCF10F00F0E25DEECEF90 -:1026E00011F044EC0FF07FEF26F008C02EF009C087 +:1026E00011F044EC0FF0FCEF26F008C02EF009C00A :1026F0002FF00AC030F00BC031F012002EC010F0E5 :102700002FC011F030C012F031C013F01200060ECD :10271000DBCFE6FF070E83DE040EDBCFE6FF050E00 -:102720000FEF12F069EC0FF050DF4CDF71D895EF2E -:1027300025F026EC0FF04DEC0FF07FEF26F0FE0EAB +:102720000FEF12F069EC0FF050DF4CDF71D812EFB1 +:1027300026F026EC0FF04DEC0FF0FCEF26F0FE0E2D :10274000DBCFE6FF120082EC0FF02FC0DEFF30C0BF :10275000DDFFECEF11F0030EE66E9AEC09F0E552A6 :102760001200F70EDBCF2FF0F80E1200C4DE2FECB4 :102770000FF00101010E646F1200E66EE66AE5DEFD :10278000FAEF10F0FC0EDBCFE6FFFD0E0FEF12F0BC :102790006FDEF3CFDEFFF4CFDDFF1200DBCF36F0CC -:1027A0002CEC26F033EF0FF0ABDE9ADDD2EF12F017 +:1027A000A9EC26F033EF0FF0ABDE9ADDD2EF12F09A :1027B000E552E552E5521200E66EEBEF08F0F90E35 :1027C000DBCF2FF0FA0E4DDF70EF11F026EC0FF09B -:1027D0004DEC0FF02CEC26F033EF0FF010C02EF084 -:1027E00011C02FF012C030F013C031F096EC25F07C +:1027D0004DEC0FF0A9EC26F033EF0FF010C02EF007 +:1027E00011C02FF012C030F013C031F013EC26F0FE :1027F0003EEF13F0B6DF35DF70EF11F02EC0E6FFCD :102800002FC0E6FF30C0E6FF120037DE31EF13F0D5 -:0E28100014DCFDEF11F07FEC26F01BEF27F03B +:0E28100014DCFDEF11F0FCEC26F098EF27F041 :02281E00DACF0F :10282000E4FFE2CFDAFFE9CFE4FFEACFE4FFF6CF3F :10283000E4FFF7CFE4FFF5CFE4FFF3CFE4FFF4CFFD :10284000E4FFFACFE4FF00EE29F0140EE80403E3FE :10285000EECFE4FFFBD700EE00F0290EE80403E31F -:10286000EECFE4FFFBD7E652A6EC1FF0030EB3EC6D -:102870001FF09EA013D09DEC1FF001015D2B000EF8 +:10286000EECFE4FFFBD7E65223EC20F0030E30EC72 +:1028700020F09EA013D01AEC20F001015D2B000E79 :102880005E23E80E5D5D030E5E5905E35D6B5E6BD6 -:102890005F2B000E602312EC2DF09E90DF50F36E44 +:102890005F2B000E60238FEC2DF09E90DF50F36EC7 :1028A000010EDB50F46E030EE15C02E2E16AE552D8 -:1028B000BAEC1FF0E55200EE28F0290EE80403E31D +:1028B00037EC20F0E55200EE28F0290EE80403E39F :1028C000E5CFEDFFFBD700EE3CF0140EE80403E388 :1028D000E5CFEDFFFBD7E5CFFAFFE5CFF4FFE5CF7E :1028E000F3FFE5CFF5FFE5CFF7FFE5CFF6FFE5CF47 :1028F000EAFFE5CFE9FFE5CFDAFF1100D8CFE4FF2B :10290000E0CFE4FFE46EDACFE4FFE2CFDAFFF3CF0B -:10291000E4FFF4CFE4FFE652A6EC1FF0020EB3ECA6 -:102920001FF0DF50F36E010EDB50F46E020EE15C1F -:1029300002E2E16AE552BAEC1FF0E552E5CFF4FF9E +:10291000E4FFF4CFE4FFE65223EC20F0020E30ECAB +:1029200020F0DF50F36E010EDB50F46E020EE15C1E +:1029300002E2E16AE55237EC20F0E552E5CFF4FF20 :10294000E5CFF3FFE5CFDAFFE550E5CFE0FFE5CFD8 -:10295000D8FF100004D8F5EC1FF064D8FCD70F0E98 -:10296000C11202D8BFEF1FF0A6EC1FF0020EE12645 -:1029700074EC1FF00101796F070E795D10E1E66AD2 -:1029800044EC33F0E552DF6E000EDF80ABEC1FF05D -:10299000E66A25EC34F0E552DF70ABEC1FF0F28E06 -:1029A000F28CF30E8C1695160101576B586B596B10 -:1029B0005A6B010E5B6F92948094939881980D0EE0 -:1029C000E66E7C0EE66EE10EE66EB7EC32F0E55296 -:1029D000E552E552C70E921694943F0E9516010EDD -:1029E000E66E99EC04F0E552838C808A82848088BC -:1029F000838E80868294010EE66E60EC34F0E552A0 -:102A000082849D80C50EE66EB5EC33F0E5529DECF8 -:102A10001FF06BEC08F0020EE15C02E2E16AE552A5 -:102A2000BAEF1FF0D9CFE6FFE1CFD9FF0F0EE126B5 -:102A300001015B5102E0B9EC1EF0200E0101005DC6 -:102A400003E36D50020B12E003EC0FF000090CE001 -:102A5000E66A010EE66E030EE66EBEEC09F0E55284 -:102A6000E552E552FFEC0EF0AFEF1EF08150040B83 -:102A700003E18150080B02E02EEC04F001015951F2 -:102A80005A1102E1000E08D059C1E9FF5AC1EAFF0C -:102A9000EF50800B01E0010E000947E101014651B2 -:102AA000EA6A260FE96E010EEA22EF5000083DE2C5 -:102AB0000501406B01015C515C2B0501416F050173 -:102AC000040E426F01014651EA6A260FE96E010EBB -:102AD000EA22EFCF43F5400EE66E400EE66E050E9D -:102AE000E66E010EE66E010EE66E10EC24F0006E4E -:102AF000050EE15E0050F3CF59F1F4CF5AF1010118 -:102B00004651EA6A260FE96E010EEA22EF6A0101D8 -:102B10004651000803E20101460707D00101455173 -:102B2000000803E201011F0E466F010159515A11BD -:102B300002E1000E08D059C1E9FF5AC1EAFFEF5087 -:102B4000800B01E0010E00092BE103EC0FF00009FE -:102B500027E0F5EC0EF0000923E00501406B0101D0 -:102B60005C515C2B0501416F05010A0E426F0501A6 -:102B7000436B0501010E486F400EE66E400EE66E97 -:102B8000050EE66E010EE66E010EE66E10EC24F008 -:102B9000006E050EE15E0050F3CF59F1F4CF5AF10B -:102BA00001016151020A10E0030A01E021D0030E85 -:102BB000E66E69EC2EF0E5526BEC08F0000903E0DC -:102BC0000101020E616F16D0200EE66E030EE66E56 -:102BD000C80EE66EE66AE80EE66E030EE66E30ECB0 -:102BE0000BF0006E060EE15E00500101616B02D039 -:102BF0000101616B01015751581102E1000E08D02B -:102C000057C1E9FF58C1EAFFEF50800B01E0010E08 -:102C1000000902E0AFEF1EF005010251070A02E1D0 -:102C200010EF1EF00D0A01E16AD2010A01E12AD279 -:102C30000D0A01E1C2D1040A1AE0030A07E0010A01 -:102C400002E06EEF1EF0FF00AFEF1EF0E66A44EC0C -:102C500033F0E552DF6E000EDB80DFCFE6FFE66A81 -:102C600024EC33F0E552E552FF00AFEF1EF0010116 -:102C700059515A1102E1000E08D059C1E9FF5AC159 -:102C8000EAFFEF50800B01E0010E000901E093D153 -:102C900000C540F50501416B0501030E426F0501BA -:102CA000436B05010851100A01E138D11F0A01E107 -:102CB000FAD0080A01E1BCD0010A01E17ED0020A83 -:102CC00071E0070A64E0010A20E0030A06E0010A55 -:102CD00001E047D179C148F547D10501486B450E60 -:102CE000006E670E016E026A00C0E6FF01C0E6FFDB -:102CF00002C0E6FF480EE66E050EE66E08EC33F005 -:102D0000036E050EE15E03502FD10501486B390EAD -:102D1000006E670E016E026A00C0E6FF01C0E6FFAA -:102D200002C0E6FF480EE66E050EE66E08EC33F0D4 -:102D3000036E050EE15E0350370E006E670E016EE6 -:102D4000026A00C0E6FF01C0E6FF02C0E6FF480ECF -:102D5000E66E050EE66E08EC33F0036E050EE15EDE -:102D600003502E0E006E670E016E026A00C0E6FF71 -:102D700001C0E6FF02C0E6FF480EE66E050EE66EF5 -:102D800008EC33F0036E050EE15E0350EDD092CFF8 -:102D900048F593CF49F594CF4AF595CF4BF596CFAB -:102DA0004CF5E2D080CF48F581CF49F582CF4AF586 -:102DB00083CF4BF584CF4CF5D7D0010EE66EB8EC3F -:102DC0002DF0E552010E2DC0DBFF020E2EC0DBFF01 -:102DD000030E2FC0DBFF040E30C0DBFF040EDBCF81 -:102DE00048F5030EDBCF49F5020EDBCF4AF5010EA5 -:102DF000DBCF4BF5020EE66EB8EC2DF0E552010E7E -:102E00002DC0DBFF020E2EC0DBFF030E2FC0DBFF49 -:102E1000040E30C0DBFF040EDBCF4CF5030EDBCF1E -:102E20004DF5020EDBCF4EF5010EDBCF4FF59CD0FA -:102E3000010EE66E45EC0AF0E552010E2DC0DBFFF7 -:102E4000020E2EC0DBFF030E2FC0DBFF040E30C0CE -:102E5000DBFF040EDBCF48F5030EDBCF49F5020E96 -:102E6000DBCF4AF5010EDBCF4BF5020EE66E45ECEB -:102E70000AF0E552010E2DC0DBFF020E2EC0DBFF73 -:102E8000030E2FC0DBFF040E30C0DBFF040EDBCFD0 -:102E90004CF5030EDBCF4DF5020EDBCF4EF5010EE8 -:102EA000DBCF4FF561D0010EE66E8BEC0AF0E552F8 -:102EB000010E2DC0DBFF020E2EC0DBFF030E2FC064 -:102EC000DBFF040E30C0DBFF040EDBCF48F5030E42 -:102ED000DBCF49F5020EDBCF4AF5010EDBCF4BF518 -:102EE000020EE66E8BEC0AF0E552010E2DC0DBFF00 -:102EF000020E2EC0DBFF030E2FC0DBFF040E30C01E -:102F0000DBFF040EDBCF4CF5030EDBCF4DF5020EDD -:102F1000DBCF4EF5010EDBCF4FF526D0010EE66E6E -:102F2000B4EC0AF0E552050EF3CFDBFF060EF4CF4A -:102F3000DBFF060EDBCF48F5050EDBCF49F5020EB1 -:102F4000E66EB4EC0AF0E552050EF3CFDBFF060E99 -:102F5000F4CFDBFF060EDBCF4AF5050EDBCF4BF5DA -:102F600003D00501020E436F400EE66E400EE66E82 -:102F7000050EE66E010EE66E010EE66E10EC24F014 -:102F8000006E050EE15E0050F3CF59F1F4CF5AF117 -:102F9000400EE66E000EE66E050EE66EE66A010E67 -:102FA000E66E10EC24F0006E050EE15E0050F3CFEB -:102FB00057F1F4CF58F1AFEF1EF005010851030AA5 -:102FC00037E0010A25E0030A13E0010A01E040D0DE -:102FD00005010951921205010A51931205010B5185 -:102FE000941205010C51951205010D51961235D020 -:102FF0000501091D921605010A1D931605010B1DF9 -:10300000941605010C1D951605010D1D961625D06B -:103010000501091D891605010A1D8A1605010B1DEA -:103020008B1605010C1D8C1605010D1D8D1615D076 -:1030300005010951891205010A518A1205010B5136 -:103040008B1205010C518C1205010D518D1205D00A -:10305000030EE66EF2EC33F0E552400EE66E000E23 -:10306000E66E050EE66EE66A010EE66E10EC24F0E2 -:10307000006E050EE15E0050F3CF57F1F4CF58F12A -:10308000AFEF1EF005010851020A09E0030A01E052 -:103090001CD009C5E6FF69EC2EF0E5521BD009C52E -:1030A000E6FF70EC2EF0E55203EC0FF000090CE0A7 -:1030B000E66A010EE66E030EE66EBEEC09F0E5521E -:1030C000E552E552FFEC0EF005D0010EE66EF2EC93 -:1030D00033F0E552400EE66E000EE66E050EE66E2B -:1030E000E66A010EE66E10EC24F0006E050EE15E5D -:1030F0000050F3CF57F1F4CF58F1AFEF1EF00501B8 -:103100000851060A02E1CFEF1DF0080A02E18FEF35 -:103110001DF0030A02E189EF1DF0070A02E12AEF20 -:103120001DF0030A01E1E3D3010A01E1F5D20F0A20 -:1031300001E1DED2020A01E196D2150A01E15AD27A -:10314000140A01E12CD2070A01E1FED1010A01E1D2 -:10315000D0D1030A01E1A2D1010A01E19CD10C0AFC -:1031600001E120D1030A01E18ED0040A02E0F7EF69 -:103170001DF0050109A140D00AC5E6FF010EE66E6B -:1031800024EC33F0E552E5520BC5E6FF020EE66E85 -:1031900024EC33F0E552E5520CC5E6FF030EE66E73 -:1031A00024EC33F0E552E5520DC5E6FF040EE66E61 -:1031B00024EC33F0E552E5520EC5E6FF050EE66E4F -:1031C00024EC33F0E552E5520FC5E6FF060EE66E3D -:1031D00024EC33F0E552E55210C5E6FF070EE66E2B -:1031E00024EC33F0E552E55211C5E6FF080EE66E19 -:1031F00024EC33F0E552E552050109A340D00AC59D -:10320000E6FF090EE66E24EC33F0E552E5520BC5FD -:10321000E6FF0A0EE66E24EC33F0E552E5520CC5EB -:10322000E6FF0B0EE66E24EC33F0E552E5520DC5D9 -:10323000E6FF0C0EE66E24EC33F0E552E5520EC5C7 -:10324000E6FF0D0EE66E24EC33F0E552E5520FC5B5 -:10325000E6FF0E0EE66E24EC33F0E552E55210C5A3 -:10326000E6FF0F0EE66E24EC33F0E552E55211C591 -:10327000E6FF100EE66E24EC33F0E552E5526BECFF -:1032800008F0FCEF1DF000C540F50501416B05019C -:10329000030E426F0501436B010EE66E44EC33F002 -:1032A000E5520501486F020EE66E44EC33F0E5523C -:1032B0000501496F030EE66E44EC33F0E55205015B -:1032C0004A6F040EE66E44EC33F0E55205014B6F95 -:1032D000050EE66E44EC33F0E55205014C6F060E28 -:1032E000E66E44EC33F0E55205014D6F070EE66ED5 -:1032F00044EC33F0E55205014E6F080EE66E44ECE7 -:1033000033F0E55205014F6F090EE66E44EC33F0E1 -:10331000E5520501506F0A0EE66E44EC33F0E552BB -:103320000501516F0B0EE66E44EC33F0E5520501DA -:10333000526F0C0EE66E44EC33F0E5520501536F0C -:103340000D0EE66E44EC33F0E5520501546F0E0E9F -:10335000E66E44EC33F0E5520501556F0F0EE66E54 -:1033600044EC33F0E5520501566F100EE66E44EC66 -:1033700033F0E5520501576F400EE66E400EE66EE3 -:10338000050EE66E010EE66E010EE66E10EC24F000 -:10339000006E050EE15E0050F3CF59F1F4CF5AF103 -:1033A000FCEF1DF0E66A010EE66E24EC33F0E55208 -:1033B000E552010EE66E020EE66E24EC33F0E552A5 -:1033C000E552E66A030EE66E24EC33F0E552E55270 -:1033D000E66A040EE66E24EC33F0E552E552E66A46 -:1033E000050EE66E24EC33F0E552E552E66A060E71 -:1033F000E66E24EC33F0E552E552030EE66E070E5E -:10340000E66E24EC33F0E552E552E80EE66E080E67 -:10341000E66E24EC33F0E552E552E66A090EE66EFC -:1034200024EC33F0E552E552010EE66E0A0EE66E2C -:1034300024EC33F0E552E552E66A0B0EE66E24EC1E -:1034400033F0E552E552E66A0C0EE66E24EC33F0FA -:10345000E552E552E66A0D0EE66E24EC33F0E552D5 -:10346000E552E66A0E0EE66E24EC33F0E552E552C4 -:10347000030EE66E0F0EE66E24EC33F0E552E552D5 -:10348000E80EE66E100EE66E24EC33F0E552E552DF -:103490006BEC08F0B1D36BEC08F0AED3060E09C5A7 -:1034A000DBFF050E0AC5DBFF080E0BC5DBFF070EB1 -:1034B0000CC5DBFF0A0E0DC5DBFF090E0EC5DBFFD9 -:1034C000090EDBCFE6FF0A0EDBCFE6FF070EDBCFF0 -:1034D000E6FF080EDBCFE6FF050EDBCFE6FF060EAC -:1034E000DBCFE6FF30EC0BF0006E060EE15E005025 -:1034F00083D3060E09C5DBFF050E0AC5DBFF080EE8 -:103500000BC5DBFF070E0CC5DBFF0A0E0DC5DBFF8D -:10351000090E0EC5DBFF090EDBCFE6FF0A0EDBCF7F -:10352000E6FF070EDBCFE6FF080EDBCFE6FF050E5A -:10353000DBCFE6FF060EDBCFE6FF39EC0BF0006ECB -:10354000060EE15E005058D3060E09C5DBFF050EDE -:103550000AC5DBFF080E0BC5DBFF070E0CC5DBFF42 -:103560000A0E0DC5DBFF090E0EC5DBFF090EDBCF12 -:10357000E6FF0A0EDBCFE6FF070EDBCFE6FF080E05 -:10358000DBCFE6FF050EDBCFE6FF060EDBCFE6FF67 -:1035900042EC0BF0006E060EE15E00502DD3060EDD -:1035A00009C5DBFF050E0AC5DBFF080E0BC5DBFFF7 -:1035B000070E0CC5DBFF0A0E0DC5DBFF090E0EC59D -:1035C000DBFF090EDBCFE6FF0A0EDBCFE6FF070EBF -:1035D000DBCFE6FF080EDBCFE6FF050EDBCFE6FF15 -:1035E000060EDBCFE6FF53EC0BF0006E060EE15E3D -:1035F000005002D3060E09C5DBFF050E0AC5DBFF2E -:10360000080E0BC5DBFF070E0CC5DBFF0A0E0DC550 -:10361000DBFF090E0EC5DBFF0C0E0FC5DBFF0B0E2B -:1036200010C5DBFF11C5E6FF0B0EDBCFE6FF0C0E6E -:10363000DBCFE6FF090EDBCFE6FF0A0EDBCFE6FFAE -:10364000070EDBCFE6FF080EDBCFE6FF050EDBCF74 -:10365000E6FF060EDBCFE6FF62EC0BF0006E090E14 -:10366000E15E0050C9D2060E09C5DBFF050E0AC592 -:10367000DBFF080E0BC5DBFF070E0CC5DBFF0A0ED8 -:103680000DC5DBFF090E0EC5DBFF0C0E0FC5DBFF02 -:103690000B0E10C5DBFF0E0E12C5DBFF0D0E13C5A2 -:1036A000DBFF0D0EDBCFE6FF0E0EDBCFE6FF11C515 -:1036B000E6FF0B0EDBCFE6FF0C0EDBCFE6FF090EBD -:1036C000DBCFE6FF0A0EDBCFE6FF070EDBCFE6FF20 -:1036D000080EDBCFE6FF050EDBCFE6FF060EDBCFE5 -:1036E000E6FFC0EC0CF0006E0B0EE15E005084D2E1 -:1036F000060E0AC5DBFF050E0BC5DBFF050EDBCF93 -:10370000E6FF060EDBCFE6FF09C5E6FFBEEC09F0DB -:10371000E552E552E55270D2060E0AC5DBFF050EF2 -:103720000BC5DBFF080E0CC5DBFF070E0DC5DBFF6D -:103730000A0E0EC5DBFF090E0FC5DBFF090EDBCF3E -:103740002FF00A0EDBCF30F065EC25F02EC008F02C -:103750002FC009F030C00AF031C00BF0330E336EC9 -:10376000E20E346EC20E356E420E366E08C02EF07A -:1037700009C02FF00AC030F00BC031F07FEC26F00A -:103780002EC004F02FC005F030C006F031C007F0A5 -:10379000CC0E336EBC0E346E8C0E356E3B0E366E18 -:1037A00004C02EF005C02FF006C030F007C031F085 -:1037B0007FEC26F01BEC27F02DC000F02EC001F0AE -:1037C0002FC002F030C003F000C0E6FF01C0E6FFEA -:1037D00002C0E6FF03C0E6FF070EDBCF2FF0080EA6 -:1037E000DBCF30F065EC25F02EC014F02FC015F0C3 -:1037F00030C016F031C017F0330E336EE20E346E67 -:10380000C20E356E420E366E14C02EF015C02FF06B -:1038100016C030F017C031F07FEC26F02EC010F04B -:103820002FC011F030C012F031C013F0BD0E336E56 -:10383000370E346E860E356E410E366E10C02EF089 -:1038400011C02FF012C030F013C031F07FEC26F021 -:103850001BEC27F02DC00CF02EC00DF02FC00EF089 -:1038600030C00FF00CC0E6FF0DC0E6FF0EC0E6FF53 -:103870000FC0E6FF050EDBCF2FF0060EDBCF30F0DA -:1038800065EC25F02EC01CF02FC01DF030C01EF0DE -:1038900031C01FF0330E336EE20E346EC20E356E41 -:1038A000420E366E1CC02EF01DC02FF01EC030F030 -:1038B0001FC031F07FEC26F01BEC27F02DC018F074 -:1038C0002EC019F02FC01AF030C01BF018C0E6FF50 -:1038D00019C0E6FF1AC0E6FF1BC0E6FF09C5E6FFF8 -:1038E000EBEC08F0206E0D0EE15E205085D1060E47 -:1038F0000AC5DBFF050E0BC5DBFF080E0CC5DBFFA1 -:10390000070E0DC5DBFF0EC5E6FF070EDBCF2FF060 -:10391000080EDBCF30F065EC25F02EC008F02FC08C -:1039200009F030C00AF031C00BF0330E336EE20EF6 -:10393000346EC20E356E420E366E08C02EF009C0CF -:103940002FF00AC030F00BC031F07FEC26F02EC013 -:1039500004F02FC005F030C006F031C007F0CC0EE7 -:10396000336EBC0E346E8C0E356E3B0E366E04C05C -:103970002EF005C02FF006C030F007C031F07FEC0C -:1039800026F01BEC27F02DC000F02EC001F02FC058 -:1039900002F030C003F000C0E6FF01C0E6FF02C045 -:1039A000E6FF03C0E6FF050EDBCF2FF0060EDBCFF0 -:1039B00030F065EC25F02EC014F02FC015F030C0AB -:1039C00016F031C017F0330E336EE20E346EC20EB5 -:1039D000356E420E366E14C02EF015C02FF016C094 -:1039E00030F017C031F07FEC26F02EC010F02FC061 -:1039F00011F030C012F031C013F0BD0E336E370E2F -:103A0000346E860E356E410E366E10C02EF011C02B -:103A10002FF012C030F013C031F07FEC26F01BEC19 -:103A200027F02DC00CF02EC00DF02FC00EF030C0CE -:103A30000FF00CC0E6FF0DC0E6FF0EC0E6FF0FC0A2 -:103A4000E6FF09C5E6FF39EC09F0186E0A0EE15EE3 -:103A50001850D2D0060E0AC5DBFF050E0BC5DBFFE2 -:103A60000CC5E6FF050EDBCF2FF0060EDBCF30F0E6 -:103A700065EC25F02EC008F02FC009F030C00AF028 -:103A800031C00BF0330E336EE20E346EC20E356E63 -:103A9000420E366E08C02EF009C02FF00AC030F07A -:103AA0000BC031F07FEC26F02EC004F02FC005F0E3 -:103AB00030C006F031C007F0BD0E336E370E346EE5 -:103AC000860E356E410E366E04C02EF005C02FF006 -:103AD00006C030F007C031F07FEC26F01BEC27F079 -:103AE0002DC000F02EC001F02FC002F030C003F056 -:103AF00000C0E6FF01C0E6FF02C0E6FF03C0E6FF2C -:103B000009C5E6FF82EC09F00C6E060EE15E0C5072 -:103B100073D009C5E6FF9AEC09F0E5526DD000C5F7 -:103B200040F50501416B0501030E426F0501436B32 -:103B3000010EE66EE3EC0AF0E552050EF3CFDBFF73 -:103B4000060EF4CFDBFF060EDBCF48F5050EDBCF0C -:103B500049F5020EE66EE3EC0AF0E552050EF3CFEE -:103B6000DBFF060EF4CFDBFF080EDBCF4AF5070EB6 -:103B7000DBCF4BF5400EE66E400EE66E050EE66EB0 -:103B8000010EE66E010EE66E10EC24F0006E050EDE -:103B9000E15E0050F3CF59F1F4CF5AF12DD000C5BA -:103BA00040F50501416B0501030E426F0501436BB2 -:103BB000F5EC0EF0000904E00501010E486F02D09B -:103BC0000501486B400EE66E400EE66E050EE66E91 -:103BD000010EE66E010EE66E10EC24F0006E050E8E -:103BE000E15E0050F3CF59F1F4CF5AF105D0010E48 -:103BF000E66EF2EC33F0E552400EE66E000EE66E35 -:103C0000050EE66EE66A010EE66E10EC24F0006E1C -:103C1000050EE15E0050F3CF57F1F4CF58F19FD07D -:103C2000010159515A1102E1000E08D059C1E9FFB2 -:103C30005AC1EAFFEF50800B01E0010E00094DE18F -:103C40000101010E616F0501406B01015C515C2BAC -:103C50000501416F0501050E426F0501436B05012A -:103C6000486B1A0E006E670E016E026A00C0E6FF16 -:103C700001C0E6FF02C0E6FF480EE66E050EE66EE6 -:103C800008EC33F0036E050EE15E0350400EE66E65 -:103C9000400EE66E050EE66E010EE66E010EE66E55 -:103CA00010EC24F0006E050EE15E0050F3CF59F1E8 -:103CB000F4CF5AF1400EE66E000EE66E050EE66E8B -:103CC000E66A010EE66E10EC24F0006E050EE15E71 -:103CD0000050F3CF57F1F4CF58F141D001015951C1 -:103CE0005A1102E1000E08D059C1E9FF5AC1EAFF9A -:103CF000EF50800B01E0010E000931E100C540F5F5 -:103D00000501416B0501030E426F0501010E436F72 -:103D1000400EE66E400EE66E050EE66E010EE66E95 -:103D2000010EE66E10EC24F0006E050EE15E005010 -:103D3000F3CF59F1F4CF5AF1400EE66E000EE66E65 -:103D4000050EE66EE66A010EE66E10EC24F0006EDB -:103D5000050EE15E0050F3CF57F1F4CF58F10F0E8E -:103D6000E15C02E2E16AE552E16EE552E7CFD9FF9C -:103D7000120001016251631104E1100E626F270EFF -:103D8000636F6207000E635B6DA207D0625163111F -:103D90002EE18C748CB413D027D00101005102E1C4 -:103DA0008C9422D0000502E18C8409D0020E005DC3 -:103DB00002E18C8419D0040E005D03E18C948C86A2 -:103DC0001200100E005D06E10101625163110FE166 -:103DD0008C740AD0200E005D0AE10101625163116A -:103DE00006E18C748CA402D08C9612008C86120092 -:103DF0001200120012001200A8EF31F012001E0E85 -:103E0000E66E010EE66EDEEC23F0E552E552400E62 -:103E1000E66E000EE66E050EE66EE66A010EE66ED2 -:103E200010EC24F0006E050EE15E0050F3CF57F168 -:103E3000F4CF58F112006D840101080E7A6F070E5D -:103E40007B6F7A07000E7B5B7A517B11FAE16D94F0 -:103E50001200D9CFE6FFE1CFD9FFFD0EDBCF2FF067 -:103E6000FE0EDBCF30F0010E2F1801E1305033E0B1 -:103E7000E8682F1802E1E86830182BE0030E2F18CD -:103E800001E1305024E0040E2F1801E130501DE014 -:103E9000020E2F1801E1305016E0170E2F1801E125 -:103EA00030500FE0160E2F1801E1305008E0150ECB -:103EB0002F1801E1305001E010D0A1DF0FD09EDFBC -:103EC0000DD09ADF0BD096DF09D092DF07D091DFBB -:103ED00005D091DF03D0000001D000D0010E00D04A -:103EE000E552E7CFD9FF120031D8E652D0B202D066 -:103EF000010E15D0D0B802D0020E11D0D0B002D031 -:103F0000030E0DD0D0B602D0040E09D0FCAE02D004 -:103F1000050E05D0FCAC02D0060E01D0070EDF6EF8 -:103F2000D088D086D084D082D080FC9EFC9CDF508C -:103F3000E552E552E7CFD9FF1200C00EE66EE00E63 -:103F4000E66ED6EC33F0E552E5521200D9CFE6FF2B -:103F5000E1CFD9FF1200DFCFE6FFE66A24EC33F0B1 -:103F6000E552E5521200E126F350DF6E010EF4CF68 -:0E3F7000DBFF1200E16EE552E7CFD9FF120031 -:023F7E00B7EC9E -:103F800024F06A6A686AEAEC24F06D8C6E6A9AEC36 -:103F900024F06D9CDF6ACBEC24F010E2DF50040DBE -:103FA000F3CFE9FFF4CFEAFF000EE926040EEA2280 -:103FB000EE6AEE6AEE6AEE6ADF2AEDD7160E706ED2 -:103FC00068A604D0030E60EC24F0FAD70101136B4D -:103FD000186B196B1A6B6D98080E0B6F040E0C6F33 -:103FE000016B006BE55275EF24F0B7EC24F0010192 -:103FF00000510BE16D6A696AEAEC24F06DB602D0FB -:104000006D86FCD70101010E006F000508E16DBA55 -:1040100006D0686A696A69806988020E006F685014 -:10402000040B07E06950040B04E0020E60EC24F07E -:1040300089D86DB247D06850010B14E06950010B6C -:1040400011E09DDF0101040E006F0401200E026FDC -:10405000040E036F080E016F006B8C0E0013E66AEE -:1040600029EC25F06850100B07E06950100B04E0B4 -:1040700060D8040E60EC24F06850400B0BE06950EF -:10408000400B08E0F1EC24F0020E68EC24F0060E80 -:1040900060EC24F06850200B04E06950200B01E034 -:1040A00035D86850020B0AE06950020B07E0F1ECCA -:1040B00024F0E668E66849EC25F06A6A040E01011E -:1040C000005D02E2A19A1FD069A61CD0DF6A040E2F -:1040D000DF5C18E268A616D06CCF20F1030E60EC0E -:1040E00024F0780E0101201502E138D809D0000E25 -:1040F000E66EE66A200EE66E010EE66E010EE8DB65 -:10410000DF2AE5D7A19AE55275EF24F070A00ED012 -:1041100083EC24F0EF50800808E1D5DBEF508408F1 -:1041200004E183EC24F08C0EEF6E7090050E60EFCE -:1041300024F06984040EC4DB6D82A3EC24F0040E29 -:1041400068EF24F0A3EC24F0030EC2DB6D926994B7 -:1041500068A403D0020EB4DBFBD71200B7EC24F046 -:10416000FD0E010120153DE17E0E2015E8407F0B7C -:10417000040DF3CF03F1F4CF04F1000E0327040E76 -:10418000042303C105F104C106F10575BCDBEF5042 -:104190003C0BE842E8420D0822E1B5DB20EC25F0BB -:1041A000EECF00F0EFCF01F0280E001816E1040E5C -:1041B0... [truncated message content] |
From: oiffrig <Ba...@us...> - 2010-05-11 21:39: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 7a5fd69156460474c83eb7e5e766ce9cce695c3f (commit) from 72fade3e2315ee9e4450a0f898767fd785ca423b (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 7a5fd69156460474c83eb7e5e766ce9cce695c3f Author: Olivier Iffrig <if...@cr...> Date: Tue May 11 23:38:53 2010 +0200 Pince tenant compte du support de l'AX12 ----------------------------------------------------------------------- Changes: diff --git a/meca/2010_Junior/pince.scad b/meca/2010_Junior/pince.scad index 70f99b0..43a10ef 100644 --- a/meca/2010_Junior/pince.scad +++ b/meca/2010_Junior/pince.scad @@ -3,28 +3,46 @@ $fs = 0.1; $fa = 5; lng_tige = 35; -lrg_tige = 10; +lrg_tige = 11; diam_ext = 65; diam_int = 51; e = 5; dd = diam_ext - diam_int; -rotate([0, 0, 60]) union() { - translate([-lng_tige - diam_ext/2 + dd/4, 0, -e/2]) - polyhedron([[0, 0, 0], [lng_tige, 0, 0], - [lng_tige + dd/2, 2*lrg_tige, 0], [0, lrg_tige, 0], - [0, 0, e], [lng_tige, 0, e], - [lng_tige + dd/2, 2*lrg_tige, e], [0, lrg_tige, e]], - [[0, 1, 2], [0, 2, 3], - [0, 4, 1], [4, 5, 1], - [1, 5, 2], [5, 6, 2], - [2, 6, 3], [6, 7, 3], - [3, 7, 0], [7, 4, 0], - [4, 6, 5], [4, 7, 6]]); - difference() { - cylinder(r=diam_ext/2, h=e, center=true); - #cylinder(r=diam_int/2, h=e+5, center=true); - translate([0, -diam_ext/4 - 5, 0]) cube([diam_ext + 5, diam_ext/2 + 10, e + 5], center=true); +long_enc = 7.5; +larg_enc = 21; +prof_enc = 3.5; + +x_enc = -(lng_tige/2 + dd/8 + diam_int/2 + dd/4); +y_enc = long_enc/2 - 1; +z_enc = e/2 - prof_enc/2 + 1; + +module pince() { + union() { + translate([-lng_tige - diam_ext/2 + dd/4, 0, -e/2]) + polyhedron([[0, 0, 0], [lng_tige, 0, 0], + [lng_tige + dd/2, 2.1*lrg_tige, 0], [0, lrg_tige, 0], + [0, 0, e], [lng_tige, 0, e], + [lng_tige + dd/2, 2.1*lrg_tige, e], [0, lrg_tige, e]], + [[0, 1, 2], [0, 2, 3], + [0, 4, 1], [4, 5, 1], + [1, 5, 2], [5, 6, 2], + [2, 6, 3], [6, 7, 3], + [3, 7, 0], [7, 4, 0], + [4, 6, 5], [4, 7, 6]]); + difference() { + color([75/255, 150/255, 0/255, 0.25]) cylinder(r=diam_ext/2, h=e, center=true); + #cylinder(r=diam_int/2, h=e+5, center=true); + translate([0, -diam_ext/4 - 5, 0]) cube([diam_ext + 5, diam_ext/2 + 10, e + 5], center=true); + } } +} + +rotate([0, 0, 60]) // DECOMMENTER AVANT EXPORT MAKERBOT +//mirror([0, 1, 0]) +difference() { + pince(); + translate([x_enc, y_enc, z_enc]) cube([larg_enc, long_enc + 2, prof_enc + 2], center=true); + #translate([x_enc - larg_enc/2 - 10, -5, e/2 - prof_enc]) cube([10, 20, prof_enc + 2]); } \ No newline at end of file hooks/post-receive -- krobot |