From: Olavi A. <ola...@gm...> - 2008-05-10 10:02:40
|
# # A tool for converting Pronto format hex codes to lircd.conf format # # Copyright by Olavi Akerman <ola...@gm...> # # pronto2lirc 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., 675 Mass Ave, Cambridge, MA 02139, USA. # class CodeSequence: # Handles codesequences parsing and conversion def ProcessPreamble(self,sPreamble): if sPreamble[0]<>"0000": raise "Formats other than starting with 0000 are not supported!" self.dIRFrequency=1000000/(long(sPreamble[1],16) * 0.241246) # Frequency of the IR carrier in Khz self.lOnceSequenceLength=long(sPreamble[2],16) # No of pulses that is sent once when button is pressed self.lRepeatableSequenceLength=long(sPreamble[3],16) # No of pulses that are repeatable while button pressed def CreatePulses(self,sItems): self.dPulseWidths=[] # Table of Pulse widths. Length is repsented in microseconds for i in sItems: self.dPulseWidths.append(1000000*long(i,16)/self.dIRFrequency) # Convert pulse widths to uS if len(self.dPulseWidths)<>2*(self.lOnceSequenceLength+self.lRepeatableSequenceLength): raise "Number of actual codes does not match the header information!" def AnalyzeCode(self,sCodeName,sHexCodes): sHexTable=sHexCodes.split() self.sCodeName=sCodeName.rstrip() # Name of the Code associated with code sequence self.ProcessPreamble(sHexTable[:4]) # First four sequences make up Preamble self.CreatePulses(sHexTable[4:]) # The rest are OnceSequence + RepeatableSequence return self.dPulseWidths[-1] # Final gap=last off signal length def WriteCodeSection(self,fOut): fOut.write('\n\t\t\tname '+self.sCodeName+'\n') for i in range(len(self.dPulseWidths)-1): # Do not write the last signal as lircd.conf # does not contain last off signal length if (i%6) ==0: fOut.write('\t\t\t\t') fOut.write('%d ' % round(self.dPulseWidths[i])) if (i+1)%6 ==0: # Group codes as six per line fOut.write('\n') fOut.write('\n') # Final EOL class HexParser: def __init__(self,sFileName): f=open(sFileName,'r') self.sRemoteName=sFileName.split('.')[:1][0] # Name of the remote self.sCodes=[] # Codes contained in file self.lGap=0 # Final Gap while True: sLine=f.readline() if sLine=='' or sLine.strip()=='': # EOF? break [sCodeName,sHexCodes]=sLine.split(':') seq=CodeSequence() finalgap=seq.AnalyzeCode(sCodeName,sHexCodes) if finalgap>self.lGap: self.lGap=finalgap self.sCodes.append(seq) f.close() def WriteLIRCConf(self,sOutFileName): f=open(sOutFileName,'w') f.write('begin remote\n') f.write('\tname\t'+self.sRemoteName+'\n') f.write('\tflags\tRAW_CODES\n') f.write('\teps\t30\n') f.write('\taeps\t100\n') f.write('\tgap\t%d\n' % self.lGap ) f.write('\t\tbegin raw_codes\n') for i in self.sCodes: i.WriteCodeSection(f) f.write('\t\tend raw_codes\n') f.write('end remote\n') f.close() # Main import sys if len(sys.argv)<>2: print "Pronto codes converter to lircd.conf format (version 1.00)" print print "Usage: pronto2lirc.py inputfile.hex " print print "Input file must be in format where each line contains all codes" print " associated with a button like:" print " Button1:0000 00ac 000b 00de ..." print print "Result: lircd.conf file is written to the current directory" print " containing all the Pronto codes extracted from" print " the input file" print else: p=HexParser(sys.argv[1]) p.WriteLIRCConf('lircd.conf') |
From: cassioli <cas...@li...> - 2008-06-09 11:11:33
|
Very interesting program. If you can comment it a bit more, I could try to port it to BASIC: RapidQ basic compiler can produce standalone executables for both windows and linux (and maybe Mac), even with GUI. How can I use this program to convert Pronto raw codes rather than a CCF file (which I do not have)? These are the codes: DVD ON 0000 006d 0022 0003 00ab 00aa 0016 003f 0016 0014 0016 003e 0016 003f 0016 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003e 0016 003f 0016 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003f 0016 0014 0016 003e 0016 003e 0016 003f 0016 0014 0016 0014 0016 003f 0016 0014 0016 003e 0016 0014 0016 0014 0016 0014 0016 003e 0016 06c3 00ab 00aa 0016 0014 0016 0e7d DVD OFF 0000 006d 0022 0003 00ab 00aa 0016 003e 0016 0014 0016 003f 0016 003e 0016 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003f 0016 003e 0016 0014 0016 003f 0016 0014 0016 0014 0016 0014 0016 003e 0016 003f 0016 0014 0016 003e 0016 003f 0016 003e 0016 0014 0016 003f 0016 0014 0016 0014 0016 003e 0016 0014 0016 0014 0016 0014 0016 003e 0016 06c3 00ab 00aa 0016 0014 0016 0e7d A simple lirc raw sequence would be enough (no need to analyse the file looking for known patterns/protocols). -- View this message in context: http://www.nabble.com/New-tool-for-converting-pronto-hex-codes-to-lircd.conf-tp17161702p17730666.html Sent from the LIRC mailing list archive at Nabble.com. |
From: cassioli <cas...@li...> - 2008-06-09 16:57:46
|
I started porting to RapidQ. It was quite strightforward, but I need some help as I don't know Python very well. What do these functions do? sub CreatePulses(sItems as string) ' dPulseWidths=[] # Table of Pulse widths. Length is repsented in microseconds ' for i in sItems: ' self.dPulseWidths.append(1000000*long(i,16)/self.dIRFrequency) # Convert pulse widths to uS ' if len(self.dPulseWidths)<>2*(self.lOnceSequenceLength+self.lRepeatableSequenceLength): ' raise "Number of actual codes does not match the header information!" end sub function AnalyzeCode(sCodeName as string , sHexCodes as string) as string ' sHexTable=sHexCodes.split() ' sCodeName=sCodeName.rstrip() # Name of the Code associated with code sequence ' self.ProcessPreamble(sHexTable[:4]) # First four sequences make up Preamble ' self.CreatePulses(sHexTable[4:]) # The rest are OnceSequence + RepeatableSequence ' return self.dPulseWidths[-1] # Final gap=last off signal length end function I don't know how lists, tables and arrays work in python... :-( -- View this message in context: http://www.nabble.com/New-tool-for-converting-pronto-hex-codes-to-lircd.conf-tp17161702p17737188.html Sent from the LIRC mailing list archive at Nabble.com. |
From: Olavi A. <ola...@gm...> - 2008-06-09 17:58:46
|
Hello AnalyzeCodes separates the header (first 4 ) and the main pulsesequences from pronto codes for futher processing. CreatePulses converts the pronto type pulse lenghts (which have relative lengths depending on the IR carrier defined in pronto header) to values which contains the pulse lengths in microseconds. To fully understand the logic of calculation I recommend reading up on the pronto format. For example: http://majority.110mb.com/files/pronto.pdf or from www.remotecentral.com. Python tutorial is at http://docs.python.org/tut/tut.html. Olavi -----Original Message----- From: lir...@li... [mailto:lir...@li...] On Behalf Of cassioli Sent: Monday, June 09, 2008 7:58 PM To: lir...@li... Subject: Re: New tool for converting pronto hex codes to lircd.conf I started porting to RapidQ. It was quite strightforward, but I need some help as I don't know Python very well. What do these functions do? sub CreatePulses(sItems as string) ' dPulseWidths=[] # Table of Pulse widths. Length is repsented in microseconds ' for i in sItems: ' self.dPulseWidths.append(1000000*long(i,16)/self.dIRFrequency) # Convert pulse widths to uS ' if len(self.dPulseWidths)<>2*(self.lOnceSequenceLength+self.lRepeatableSequence Length): ' raise "Number of actual codes does not match the header information!" end sub function AnalyzeCode(sCodeName as string , sHexCodes as string) as string ' sHexTable=sHexCodes.split() ' sCodeName=sCodeName.rstrip() # Name of the Code associated with code sequence ' self.ProcessPreamble(sHexTable[:4]) # First four sequences make up Preamble ' self.CreatePulses(sHexTable[4:]) # The rest are OnceSequence + RepeatableSequence ' return self.dPulseWidths[-1] # Final gap=last off signal length end function I don't know how lists, tables and arrays work in python... :-( -- View this message in context: http://www.nabble.com/New-tool-for-converting-pronto-hex-codes-to-lircd.conf -tp17161702p17737188.html Sent from the LIRC mailing list archive at Nabble.com. ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php |
From: Olavi A. <ola...@gm...> - 2008-06-09 15:04:29
|
cassioli wrote: > Very interesting program. > If you can comment it a bit more, I could try to port it to BASIC: RapidQ > basic compiler can produce standalone executables for both windows and linux > (and maybe Mac), even with GUI. > > How can I use this program to convert Pronto raw codes rather than a CCF > file (which I do not have)? > > These are the codes: > DVD ON > > 0000 006d 0022 0003 00ab 00aa 0016 003f 0016 0014 0016 003e 0016 003f 0016 > 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003e 0016 003f > 0016 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003f 0016 > 0014 0016 003e 0016 003e 0016 003f 0016 0014 0016 0014 0016 003f 0016 0014 > 0016 003e 0016 0014 0016 0014 0016 0014 0016 003e 0016 06c3 00ab 00aa 0016 > 0014 0016 0e7d > > DVD OFF > > 0000 006d 0022 0003 00ab 00aa 0016 003e 0016 0014 0016 003f 0016 003e 0016 > 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003f 0016 003e > 0016 0014 0016 003f 0016 0014 0016 0014 0016 0014 0016 003e 0016 003f 0016 > 0014 0016 003e 0016 003f 0016 003e 0016 0014 0016 003f 0016 0014 0016 0014 > 0016 003e 0016 0014 0016 0014 0016 0014 0016 003e 0016 06c3 00ab 00aa 0016 > 0014 0016 0e7d > > A simple lirc raw sequence would be enough (no need to analyse the file > looking for known patterns/protocols). > > > > Hello Just create a file with 2 rows each containing the whole sequence of commands: DVDON:0000 006d 0022 0003 00ab 00aa 0016 003f 0016 0014 0016 003e 0016 003f 0016 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003e 0016 003f 0016 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003f 0016 0014 0016 003e 0016 003e 0016 003f 0016 0014 0016 0014 0016 003f 0016 0014 0016 003e 0016 0014 0016 0014 0016 0014 0016 003e 0016 06c3 00ab 00aa 0016 0014 0016 0e7d DVDOFF:0000 006d 0022 0003 00ab 00aa 0016 003e 0016 0014 0016 003f 0016 003e 0016 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003f 0016 003e 0016 0014 0016 003f 0016 0014 0016 0014 0016 0014 0016 003e 0016 003f 0016 0014 0016 003e 0016 003f 0016 003e 0016 0014 0016 003f 0016 0014 0016 0014 0016 003e 0016 0014 0016 0014 0016 0014 0016 003e 0016 06c3 00ab 00aa 0016 0014 0016 0e7d Use this file as an input parameter. Please note that the whole sequence for a each command should be on the same line. Olavi |
From: cassioli <cas...@li...> - 2008-06-09 15:46:32
|
>Just create a file with 2 rows each containing the whole sequence of >commands: Thank you very much, it works like a charm! ;-) I attach the result and I add a couple of keywords, for people wandering around looking for UNIVERSAL LG DVD PLAYER/RECORDER DISCRETE ON/OFF COMMANDS (at least I guess it is universal: the remote of my LG DVD player works with my LG DVD recorder too!) RAW Pronto version: DVD ON 0000 006d 0022 0003 00ab 00aa 0016 003f 0016 0014 0016 003e 0016 003f 0016 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003e 0016 003f 0016 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003f 0016 0014 0016 003e 0016 003e 0016 003f 0016 0014 0016 0014 0016 003f 0016 0014 0016 003e 0016 0014 0016 0014 0016 0014 0016 003e 0016 06c3 00ab 00aa 0016 0014 0016 0e7d DVD OFF 0000 006d 0022 0003 00ab 00aa 0016 003e 0016 0014 0016 003f 0016 003e 0016 0014 0016 003e 0016 0014 0016 0014 0016 003e 0016 0014 0016 003f 0016 003e 0016 0014 0016 003f 0016 0014 0016 0014 0016 0014 0016 003e 0016 003f 0016 0014 0016 003e 0016 003f 0016 003e 0016 0014 0016 003f 0016 0014 0016 0014 0016 003e 0016 0014 0016 0014 0016 0014 0016 003e 0016 06c3 00ab 00aa 0016 0014 0016 0e7d RAW LIRC version is attached DVD ON: http://www.nabble.com/file/p17735662/dvd-on.wav dvd-on.wav DVD OFF: http://www.nabble.com/file/p17735662/dvd-off.wav dvd-off.wav Tested on LG DVD Recorder RH 255. Thanks again, now I'll try porting your program to Rapidq. -- View this message in context: http://www.nabble.com/New-tool-for-converting-pronto-hex-codes-to-lircd.conf-tp17161702p17735662.html Sent from the LIRC mailing list archive at Nabble.com. |