From a663069b33a6ed5344187dcd1ab48022a681ae1b Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Wed, 30 Mar 2011 22:12:22 +0200 Subject: digital/asserv: use message type registry, refs #157 --- digital/asserv/src/asserv/simu.host.c | 18 ++++++++++++++---- digital/asserv/tools/asserv/mex.py | 24 ++++++++++-------------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/digital/asserv/src/asserv/simu.host.c b/digital/asserv/src/asserv/simu.host.c index 019f8864..10cef711 100644 --- a/digital/asserv/src/asserv/simu.host.c +++ b/digital/asserv/src/asserv/simu.host.c @@ -87,6 +87,11 @@ double simu_counter_left_th, simu_counter_right_th; /** Use mex. */ int simu_mex; +/** Mex message types. */ +uint8_t simu_mex_position; +uint8_t simu_mex_pwm; +uint8_t simu_mex_aux; + /** Counter to limit the interval between information is sent. */ int simu_send_cpt; @@ -96,14 +101,19 @@ simu_init (void) { int argc; char **argv; + const char *mex_instance; host_get_program_arguments (&argc, &argv); if (argc == 2 && strncmp (argv[0], "-m", 2) == 0) { simu_mex = atoi (argv[0] + 2); + argc--; argv++; if (!simu_mex) simu_mex = 1; simu_send_cpt = simu_mex; mex_node_connect (); - argc--; argv++; + mex_instance = host_get_instance ("asserv0", 0); + simu_mex_position = mex_node_reservef ("%s:position", mex_instance); + simu_mex_pwm = mex_node_reservef ("%s:pwm", mex_instance); + simu_mex_aux = mex_node_reservef ("%s:aux", mex_instance); } if (argc != 1) { @@ -383,7 +393,7 @@ simu_send (void) || simu_pos_y_to_send != simu_pos_y_sent || simu_pos_a_to_send != simu_pos_a_sent) { - m = mex_msg_new (0xa0); + m = mex_msg_new (simu_mex_position); mex_msg_push (m, "hhl", simu_pos_x_to_send, simu_pos_y_to_send, simu_pos_a_to_send); mex_node_send (m); @@ -397,7 +407,7 @@ simu_send (void) || pwm_left_sent == pwm_left.cur || pwm_right_sent == pwm_right.cur) { - m = mex_msg_new (0xa1); + m = mex_msg_new (simu_mex_pwm); mex_msg_push (m, "hh", pwm_left.cur, pwm_right.cur); for (i = 0; i < AC_ASSERV_AUX_NB; i++) mex_msg_push (m, "h", pwm_aux[i].cur); @@ -418,7 +428,7 @@ simu_send (void) } if (first || simu_aux_model_changed) { - m = mex_msg_new (0xa8); + m = mex_msg_new (simu_mex_aux); for (i = 0; i < AC_ASSERV_AUX_NB; i++) { if (simu_robot->aux_motor[i]) diff --git a/digital/asserv/tools/asserv/mex.py b/digital/asserv/tools/asserv/mex.py index 6257fb0d..059a29ce 100644 --- a/digital/asserv/tools/asserv/mex.py +++ b/digital/asserv/tools/asserv/mex.py @@ -25,10 +25,6 @@ from utils.observable import Observable -ID_POSITION = 0xa0 -ID_PWM = 0xa1 -ID_AUX = 0xa8 - class Mex: """Handle communications with simulated asserv.""" @@ -40,11 +36,11 @@ class Mex: """ - def __init__ (self, node): + def __init__ (self, node, instance): Observable.__init__ (self) self.pos = None self.angle = None - node.register (ID_POSITION, self.__handle) + node.register (instance + ':position', self.__handle) def __handle (self, msg): x, y, a = msg.pop ('hhl') @@ -59,10 +55,10 @@ class Mex: """ - def __init__ (self, node): + def __init__ (self, node, instance): Observable.__init__ (self) self.pwm = None - node.register (ID_PWM, self.__handle) + node.register (instance + ':pwm', self.__handle) def __handle (self, msg): self.pwm = msg.pop ('hhhh') @@ -82,9 +78,9 @@ class Mex: class Pack: """Handle reception of several Aux for one message.""" - def __init__ (self, node, list): + def __init__ (self, node, instance, list): self.__list = list - node.register (ID_AUX, self.__handle) + node.register (instance + ':aux', self.__handle) def __handle (self, msg): angles = msg.pop ('%dl' % len (self.__list)) @@ -92,9 +88,9 @@ class Mex: aux.angle = float (angle) / 1024 aux.notify () - def __init__ (self, node): - self.position = self.Position (node) - self.pwm = self.PWM (node) + def __init__ (self, node, instance = 'asserv0'): + self.position = self.Position (node, instance) + self.pwm = self.PWM (node, instance) self.aux = (self.Aux (), self.Aux ()) - self.__aux_pack = self.Aux.Pack (node, self.aux) + self.__aux_pack = self.Aux.Pack (node, instance, self.aux) -- cgit v1.2.3