Package intera_io :: Module io_command
[hide private]
[frames] | no frames]

Source Code for Module intera_io.io_command

 1  # Copyright (c) 2016, Rethink Robotics 
 2  # All rights reserved. 
 3  # 
 4  # Redistribution and use in source and binary forms, with or without 
 5  # modification, are permitted provided that the following conditions are met: 
 6  # 
 7  # 1. Redistributions of source code must retain the above copyright notice, 
 8  #    this list of conditions and the following disclaimer. 
 9  # 2. Redistributions in binary form must reproduce the above copyright 
10  #    notice, this list of conditions and the following disclaimer in the 
11  #    documentation and/or other materials provided with the distribution. 
12  # 3. Neither the name of the Rethink Robotics nor the names of its 
13  #    contributors may be used to endorse or promote products derived from 
14  #    this software without specific prior written permission. 
15  # 
16  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
17  # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
18  # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
19  # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
20  # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
21  # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
22  # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
23  # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
24  # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
25  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
26  # POSSIBILITY OF SUCH DAMAGE. 
27   
28 -class IOCommand(object):
29 ''' 30 Container for a generic io command 31 '''
32 - def __init__(self, op, args=None):
33 self.op = op 34 self.args = args if args else {}
35
36 -class SetCommand(IOCommand):
37 ''' 38 Container for a port or signal set command 39 '''
40 - def __init__(self, args=None):
41 super(SetCommand, self).__init__('set', args)
42
43 - def _set(self, components, component_name, 44 data_type, dimensions, *component_value):
45 ''' 46 add a set component command 47 ''' 48 self.args.setdefault(components, {}) 49 self.args[components][component_name] = { 50 'format' : {'type' : data_type}, 51 'data' : [val for val in component_value] 52 } 53 if dimensions > 1: 54 self.args[components][component_name]['format']['dimensions'] = [dimensions]
55
56 - def set_signal(self, signal_name, data_type, *signal_value):
57 ''' 58 add a set signal command 59 ''' 60 dimensions = len(signal_value) 61 self._set('signals', signal_name, data_type, dimensions, *signal_value) 62 return self
63
64 - def set_port(self, port_name, data_type, *port_value):
65 ''' 66 add a set port command 67 ''' 68 dimensions = len(port_value) 69 self._set('ports', port_name, data_type, dimensions, *port_value) 70 return self
71