#!/usr/bin/python # -*- coding: UTF8 -*- # # tux_lirc_proxy.py # # auteur: tux@serviceinformatique06.com # version: 0.4 # Licence: GPL # # simule l'envoi de signaux provenant d'une # telecommande ATI REMOTE WONDER II # # note: lircd a la configuration "ATI/NVidia X10 RF (userspace)" # et doit avoir "--allow-simulate" en parametre # # mettre en parametre les fichiers lircrc a gerer # la touche ESC de la telecommande permet de changer de fichier # from tuxisalive.api.TuxAPI import * global tux import os, sys, random, threading codes = dict( K_0 = [ "0000000000000200 0", "0" ], K_1 = [ "0000000000000201 0", "1" ], K_2 = [ "0000000000000202 0", "2" ], K_3 = [ "0000000000000203 0", "3" ], K_4 = [ "0000000000000204 0", "4" ], K_5 = [ "0000000000000205 0", "5" ], K_6 = [ "0000000000000206 0", "6" ], K_7 = [ "0000000000000207 0", "7" ], K_8 = [ "0000000000000208 0", "8" ], K_9 = [ "0000000000000209 0", "9" ], K_ALT = [ "00000000000002f9 0", "alt" ], K_BACKSPACE = [ "0000000000000296 0", "back" ], K_BLUE = [ "000000000000027a 0", "bleu" ], K_CHANNELMINUS =[ "0000000000000221 0", "chan-down" ], K_CHANNELPLUS = [ "0000000000000220 0", "chan-up" ], K_DOWN = [ "0000000000000259 0", "down" ], K_ESCAPE = [ "0000000000000282 0", "esc" ], K_FASTFORWARD = [ "0000000000000228 0", "forward" ], K_FASTREWIND = [ "0000000000000229 0", "rewind" ], K_GREEN = [ "0000000000000279 0", "vert" ], K_HANGUP = [ "0000000000000239 0", "hangup" ], K_LEFT = [ "000000000000025a 0", "left" ], K_MENU = [ "0000000000000254 0", "menu" ], K_MOUSE = [ "0000000000000238 0", "mouse" ], K_MUTE = [ "000000000000020d 0", "mute" ], K_NEXT = [ "00000000000002be 0", "next" ], K_NO = [ "00000000000002d5 0", "no" ], K_OK = [ "000000000000025c 0", "ok" ], K_PLAYPAUSE = [ "00000000000002d0 0", "playpause" ], K_PREVIOUS = [ "00000000000002a9 0", "prev" ], K_RECEIVECALL = [ "00000000000002aa 0", "receivecall" ], K_RECORDING = [ "0000000000000237 0", "rec" ], K_RED = [ "0000000000000278 0", "rouge" ], K_RELEASED = [ "00000000000002aa 0", "released" ], K_RIGHT = [ "000000000000025b 0", "right" ], K_SHARP = [ "00000000000022ff 0", "sharp" ], K_STANDBY = [ "00000000000021ff 0", "standby" ], K_STAR = [ "00000000000012ff 0", "star" ], K_STARTVOIP = [ "00000000000011ff 0", "startvoip" ], K_STOP = [ "0000000000000231 0", "stop" ], K_UP = [ "0000000000000258 0", "up" ], K_VOLUMEMINUS = [ "0000000000000211 0", "vol-down" ], K_VOLUMEPLUS = [ "0000000000000210 0", "vol-up" ], K_YELLOW = [ "000000000000027b 0", "jaune" ], K_YES = [ "00000000000010ff 0", "yes" ] ) argv = os.sys.argv argc = len(argv) if argc < 2: print "usage: tux_lirc_proxy.py lircrc_file [lircrc_file ...]\n" print "Codes lirc utilisés:" for k in codes.keys(): print " " + codes[k][1] sys.exit(0) class say(threading.Thread): def __init__(self,tts,locutor='Julie',pitch=100): threading.Thread.__init__(self) self.tts=tts self.locutor=locutor self.pitch=pitch self.start() def run(self): if tux.access.waitAcquire(10.0, ACCESS_PRIORITY_NORMAL): tux.mouth.open() tux.tts.setEncoding( "utf-8" ) tux.tts.speak(self.tts,self.locutor,self.pitch) tux.mouth.close() tux.access.release() tux = TuxAPI('127.0.0.1', 54321) tux.server.autoConnect(CLIENT_LEVEL_RESTRICTED, 'Tux proxy lirc ' , 'NONE') tux.server.waitConnected(10.0) tux.dongle.waitConnected(10.0) tux.radio.waitConnected(10.0) try: def generic_keypressed(*args): print 'keypressed: ' + args[0] + ' / ' + codes[args[0]][1] os.system('irsend SIMULATE "' + codes[args[0]][0] + ' ' + codes[args[0]][1] + ' RemoteWonder2"') lircrc_current = -1 lircrc = dict() def switch_lircrc(*args): global lircrc, lircrc_current lircrc_current = (lircrc_current + 1) % len(lircrc) print 'swithing to ' + lircrc[lircrc_current][0] + ' - ' + lircrc[lircrc_current][1] say(lircrc[lircrc_current][1]) #os.system('for PID in $(ps -C irexec -o pid=); do kill -9 $PID; done; irexec "'+lircrc[lircrc_current][0]+'" &'); os.system('killall irexec; irexec "'+lircrc[lircrc_current][0]+'" &'); tux.button.remote.registerEventOnPressed(switch_lircrc, K_ESCAPE) for k in codes.keys(): tux.button.remote.registerEventOnPressed(generic_keypressed, k) for i in range(1,argc): try: l=len(lircrc) lircrc[l]=[argv[i],"Pas de nom"] for line in open(argv[i]): if "TUXNAME:" in line: lircrc[l]=[argv[i],line[line.index("TUXNAME:")+8:-1]] print "Found lircrc file: " + lircrc[l][1] + " - " + lircrc[l][0] except IOError: del lircrc[l] print('File Not Found: %s' % argv[i]) say("Proxy L I R C OK") switch_lircrc() # forever loop (use ctrl C to exit) while((not tux.button.remote.waitPressed(1000.0, K_STANDBY)) or True): pass except: pass tux.server.disconnect() tux.destroy() sys.exit(0)