From 77b5cf5a300974bf84353fc7d8badbb5cc253a68 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Thu, 29 Apr 2010 23:04:09 +0200 Subject: digital/mimot/tools: add mimot tools --- digital/mimot/tools/mimot/mex.py | 60 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 digital/mimot/tools/mimot/mex.py (limited to 'digital/mimot/tools/mimot/mex.py') diff --git a/digital/mimot/tools/mimot/mex.py b/digital/mimot/tools/mimot/mex.py new file mode 100644 index 00000000..b32f2925 --- /dev/null +++ b/digital/mimot/tools/mimot/mex.py @@ -0,0 +1,60 @@ +# mimot - Mini motor control, with motor driver. {{{ +# +# Copyright (C) 2010 Nicolas Schodet +# +# APBTeam: +# Web: http://apbteam.org/ +# Email: team AT apbteam DOT org +# +# This program 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 2 of the License, or +# (at your option) any later version. +# +# 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 General Public License for more details. +# +# You should have received a copy of the GNU 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. +# +# }}} +"""Mex interface to mimot.""" + +from utils.observable import Observable + +ID_AUX = 0xc8 + +class Mex: + """Handle communications with simulated mimot.""" + + class Aux (Observable): + """Auxiliary motor angle. + + - angle: radian. + + """ + + def __init__ (self): + Observable.__init__ (self) + self.angle = None + + class Pack: + """Handle reception of several Aux for one message.""" + + def __init__ (self, node, list): + self.__list = list + node.register (ID_AUX, self.__handle) + + def __handle (self, msg): + angles = msg.pop ('%dl' % len (self.__list)) + for aux, angle in zip (self.__list, angles): + aux.angle = float (angle) / 1024 + aux.notify () + + def __init__ (self, node): + self.aux = (self.Aux (), self.Aux ()) + self.__aux_pack = self.Aux.Pack (node, self.aux) + -- cgit v1.2.3