Package dynamic_reconfigure :: Module encoding

Source Code for Module dynamic_reconfigure.encoding

 1  # Software License Agreement (BSD License) 
 2  # 
 3  # Copyright (c) 2009, Willow Garage, Inc. 
 4  # All rights reserved. 
 5  # 
 6  # Redistribution and use in source and binary forms, with or without 
 7  # modification, are permitted provided that the following conditions 
 8  # are met: 
 9  # 
10  #  * Redistributions of source code must retain the above copyright 
11  #    notice, this list of conditions and the following disclaimer. 
12  #  * Redistributions in binary form must reproduce the above 
13  #    copyright notice, this list of conditions and the following 
14  #    disclaimer in the documentation and/or other materials provided 
15  #    with the distribution. 
16  #  * Neither the name of Willow Garage, Inc. nor the names of its 
17  #    contributors may be used to endorse or promote products derived 
18  #    from this software without specific prior written permission. 
19  # 
20  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
21  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
22  # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
23  # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
24  # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
25  # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
26  # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
27  # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
28  # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
29  # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
30  # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
31  # POSSIBILITY OF SUCH DAMAGE. 
32   
33  import roslib; roslib.load_manifest('dynamic_reconfigure') 
34  import rospy 
35   
36  from dynamic_reconfigure.msg import Config as ConfigMsg 
37  from dynamic_reconfigure.msg import ConfigDescription as ConfigDescrMsg 
38  from dynamic_reconfigure.msg import IntParameter, BoolParameter, StrParameter, DoubleParameter, ParamDescription 
39   
40 -def encode_description(descr):
41 msg = ConfigDescrMsg() 42 msg.max = encode_config(descr.max) 43 msg.min = encode_config(descr.min) 44 msg.dflt = encode_config(descr.defaults) 45 for param in descr.config_description: 46 msg.parameters.append(ParamDescription(param['name'], param['type'], param['level'], param['description'], param['edit_method'])) 47 return msg
48
49 -def encode_config(config):
50 msg = ConfigMsg() 51 for k, v in config.items(): 52 ## @todo add more checks here? 53 if type(v) == int: msg.ints.append(IntParameter(k, v)) 54 elif type(v) == bool: msg.bools.append(BoolParameter(k, v)) 55 elif type(v) == str: msg.strs.append(StrParameter(k, v)) 56 elif type(v) == float: msg.doubles.append(DoubleParameter(k, v)) 57 return msg
58
59 -def decode_description(msg):
60 descr = [] 61 mins = decode_config(msg.min) 62 maxes = decode_config(msg.max) 63 defaults = decode_config(msg.dflt) 64 for param in msg.parameters: 65 name = param.name 66 descr.append({ 67 'name': name, 68 'min': mins[name], 69 'max': maxes[name], 70 'default': defaults[name], 71 'type': param.type, 72 'description': param.description, 73 'edit_method': param.edit_method, 74 }) 75 return descr
76
77 -def decode_config(msg):
78 return dict([(kv.name, kv.value) for kv in msg.bools + msg.ints + msg.strs + msg.doubles])
79