00001 #!/usr/bin/env python 00002 # Copyright (c) 2013, Oregon State University 00003 # All rights reserved. 00004 00005 # Redistribution and use in source and binary forms, with or without 00006 # modification, are permitted provided that the following conditions are met: 00007 # * Redistributions of source code must retain the above copyright 00008 # notice, this list of conditions and the following disclaimer. 00009 # * Redistributions in binary form must reproduce the above copyright 00010 # notice, this list of conditions and the following disclaimer in the 00011 # documentation and/or other materials provided with the distribution. 00012 # * Neither the name of the Oregon State University nor the 00013 # names of its contributors may be used to endorse or promote products 00014 # derived from this software without specific prior written permission. 00015 00016 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 00017 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00018 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00019 # DISCLAIMED. IN NO EVENT SHALL OREGON STATE UNIVERSITY BE LIABLE FOR ANY 00020 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00021 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00022 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00023 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00024 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00025 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00026 00027 # Author Dan Lazewatsky/lazewatd@engr.orst.edu 00028 00029 import roslib; roslib.load_manifest('ir_comm') 00030 import sys, rospy 00031 from ir_comm.device import ROSIr 00032 from ir_comm.utils import loadIRCode 00033 import glob, os 00034 from std_msgs.msg import String 00035 00036 class IRTransmitter(object): 00037 codes = {} 00038 def __init__(self, code_dir): 00039 self.code_dir = code_dir 00040 self.ir = ROSIr() 00041 self.load_codes() 00042 00043 def load_codes(self): 00044 print 'Loading...' 00045 for path in glob.glob(self.code_dir + '/*.pkl'): 00046 name = '_'.join(os.path.split(path)[-1].split('.')[:-1]) 00047 self.codes[name] = loadIRCode(path) 00048 print ' ', name 00049 00050 def code_cb(self, msg): 00051 if msg.data in self.codes: 00052 self.ir.ir.transmit(*self.codes[msg.data]) 00053 rospy.loginfo('Transmitted %s' % msg.data) 00054 00055 if __name__ == '__main__': 00056 rospy.init_node('ir_node') 00057 try: 00058 transmitter = IRTransmitter(rospy.get_param('~code_dir')) 00059 rospy.Subscriber('ir_code_name', String, transmitter.code_cb) 00060 rospy.spin() 00061 except KeyError: 00062 rospy.logerr('code_dir parameter is not set')