예제 #1
0
 def Decode(self, data):
     buf = 0
     for i in range(16):
         mark = data[i * 2]
         if mark < 100:
             raise DecodeError("mark too short")
         if mark > 500:
             raise DecodeError("mark too long")
         space = data[i * 2 + 1]
         if space < 600:
             raise DecodeError("space too short")
         elif space < 1200:
             pass
         elif space < 2100:
             buf |= 1
         else:
             if i == 15:
                 break
             raise DecodeError("space too long")
         buf <<= 1
     else:
         raise DecodeError("sequence too long")
     buf >>= 1
     if (buf & 256):
         buf ^= 0x03ff
     return "Sharp.%0.4X" % (buf)
예제 #2
0
 def Decode(self, data):
     self.SetData(data)
     self.bufferLen = 1
     if not self.GetBit():
         raise DecodeError("missing start bit")
     extensionBit = self.GetBit()
     toggleBit = self.GetBit()
     addr = self.GetBitsLsbLast(5)
     cmd = self.GetBitsLsbLast(6)
     if not extensionBit:
         cmd |= 0x40
     # the Streamzap remote uses a RC-5-like code with an additional command
     # bit
     try:
         streamzapBit = self.GetBit()
     except DecodeError:
         # no additional bit, so this is no Streamzap code
         pass
     else:
         cmd = (cmd << 1) | streamzapBit
         try:
             code = STREAMZAP[cmd]
         except KeyError:
             # eventhough it looks like a Steamzap code, this code is
             # unknown
             raise DecodeError("too many bits")
         return "Streamzap." + code
     cmdStr = CMDS.get(cmd, "%02X" % cmd)
     code = "RC5.%s.%s" % (ADDRESSES[addr], cmdStr)
     if code == self.lastCode and toggleBit != self.lastToggleBit:
         self.lastCode = None
     self.lastToggleBit = toggleBit
     return code
예제 #3
0
    def Decode(self, data):
        # Check the leader pulse
        if not (2200 < data[0] < 3300):
            raise DecodeError("wrong header pulse")
        if not (600 < data[1] < 1100):
            raise DecodeError("wrong header pause")

        self.SetData(data, 2)

        # Get the start bit
        if self.GetBit() != 1:
            raise DecodeError("missing start bit")

        mode = self.GetBitsLsbLast(3)
        trailerBit = self.GetTrailerBit()
        value = self.GetBitsLsbLast(32)

        # Check for MCE remote
        if mode == 6 and trailerBit == 0:
            value2 = value & 0xFFFF7FFF
            if value2 in MCE_REMOTE:
                return "Mce." + MCE_REMOTE[value2]
#            else:
#                print "0x%0.8X" % value2

        return "RC6mode%X_%d_%08X" % (mode, trailerBit, value)
예제 #4
0
파일: Sony.py 프로젝트: Mutini/EventGhost
    def Decode(self, data):
        if not (1800 < data[0] < 3000):
            raise DecodeError("wrong header pulse")

        buf = 0
        mask = 1
        i = 1
        while True:
            # Check if the space time is valid.
            space = data[i]
            if space < 400:
                raise DecodeError("space too short %d" % space)
            if space > 900:
                if i in (25, 31, 41):
                    break
                raise DecodeError("space too long %d" % space)

            mark = data[i + 1]
            if mark < 250:
                raise DecodeError("mark too short %d" % mark)
            elif mark < 1000:
                pass
            elif mark < 1400:
                buf |= mask
            else:
                raise DecodeError("mark too long %d" % mark)
            mask <<= 1
            i += 2

        return "SIRC%d.%0.4X" % (i / 2, buf)
예제 #5
0
파일: Xsat.py 프로젝트: maffe/EventGhost
    def Decode(self, data):
        # Check the header pulse
        if not (7000 < data[0] < 9000):
            raise DecodeError("wrong header pulse")
        if not (3000 < data[1] < 5000):
            raise DecodeError("wrong header pause")
        if not (3000 < data[19] < 5000):
            raise DecodeError("wrong middle pause")

        addr = self.GetByte(data, 2)
        cmd = self.GetByte(data, 20)
        if data[37] < 10000:
            raise DecodeError("sequence too long")
        return "XSAT.%0.2X%0.2X" % (addr, cmd)
예제 #6
0
 def GetBits(self):
     if 66 > self.data[self.pos] > 266:
         raise DecodeError("wrong pulse")
     pause = self.data[self.pos + 1]
     self.pos += 2
     if pause < 366:
         return 0  # binary 00
     elif pause < 528:
         return 1  # binary 01
     elif pause < 694:
         return 2  # binary 10
     elif pause < 861:
         return 3  # binary 11
     else:
         raise DecodeError("pause too long")
예제 #7
0
파일: Jvc.py 프로젝트: WoLpH/EventGhost
 def Decode(self, data):
     # Check the header pulse
     pos = 0
     if clock() - self.lastTime > 0.1:
         if not (7400 < data[0] < 9400):
             raise DecodeError("wrong header pulse")
         if not (3200 < data[1] < 5200):
             raise DecodeError("wrong header pause")
         pos = 2
     addr = self.GetByte(data, pos)
     cmd = self.GetByte(data, pos + 16)
     if not (250 < data[pos + 32] < 750):
         raise DecodeError("wrong byte end-pulse")
     if data[pos + 33] < 10000:
         raise DecodeError("missing end-pause")
     self.lastTime = clock()
     return "JVC.%0.2X%0.2X" % (addr, cmd)
예제 #8
0
 def Decode(self, data):
     pulse = data[0]
     space = data[1]
     if not (8000 < pulse < 10000):
         raise DecodeError("wrong start pulse")
     if space > 5000:
         raise DecodeError("start pause too long")
     if space < 4000:
         if space > 2000 and self.lastTime + 0.150 > clock():
             #print "repeat", clock() - self.lastTime, self.lastCode
             self.lastTime = clock()
             return self.lastCode
         raise DecodeError("wrong start pause")
     buf = 0
     for i in range(2, 62, 2):
         pulse = data[i]
         if pulse > 750:
             raise DecodeError("mark too long %d %d" % (pulse, i))
         if pulse < 450:
             raise DecodeError("mark too short")
         space = data[i + 1]
         if space < 350:
             raise DecodeError("space too short %d %d" % (space, i + 1))
         elif space < 850:
             pass
         elif space < 2000:
             buf |= 1
         else:
             raise DecodeError("space too long %d" % space)
         buf <<= 1
     self.lastTime = clock()
     return "NEC.%08X" % buf
예제 #9
0
 def GetTrailerBit(self):
     sample = (self.GetSample() * 8 + self.GetSample() * 4 +
               self.GetSample() * 2 + self.GetSample())
     if sample == 3:  # binary 0011
         return 0
     elif sample == 12:  # binary 1100
         return 1
     else:
         raise DecodeError("wrong trailer bit transition")
예제 #10
0
    def Decode(self, data):
        self.SetData(data)
        # Consume the pre-pulse bit
        self.GetSample()

        # Check the header pause
        for dummyCounter in range(5):
            if self.GetSample():
                raise DecodeError("pre-space too short %d" % dummyCounter)

        # Check the start bit
        if not self.GetBit():
            raise DecodeError("missing start bit")

        # Get the actual code bits
        code = self.GetBitsLsbFirst(16)
        if code == 0xFFFE:
            return ""
        return "NRC17_%0.4X" % code
예제 #11
0
파일: Jvc.py 프로젝트: WoLpH/EventGhost
 def GetByte(self, data, pos):
     buf = 0
     mask = 1
     for i in range(8):
         pulse = data[pos]
         pos += 1
         if not (250 < pulse < 750):
             raise DecodeError("wrong pulse %d %d" % (pulse, i))
         space = data[pos]
         pos += 1
         if space < 250:
             raise DecodeError("space to short %d %d" % (space, i))
         elif space < 850:
             pass
         elif space < 1800:
             buf |= mask
         else:
             raise DecodeError("space too long")
         mask <<= 1
     return buf
예제 #12
0
 def Decode(self, data):
     raise DecodeError("not implemented")
     if not (200 < data[0] < 600):
         DecodeError("wrong header pulse")
     if not (100 < data[1] < 500):
         DecodeError("wrong header pause")
     self.pos = 2
     self.data = data
     mode = self.GetBits()
     if mode != 0:
         addr = self.GetBits()
         data = self.ShiftInBits(4)
         return "RC-MM.%s.%X.%04X" % (MODES[mode], addr, data)
     mode = self.GetBits()
     if mode != 0:
         data = self.ShiftInBits(10)
         return "RC-MM.Ex%s.%06X" % (MODES[mode], data)
     mode = self.GetBits()
     if mode != 3:
         raise DecodeError("wrong OEM mode")
     customerId = self.ShiftInBits(3)
     data = self.ShiftInBits(6)
     return "RC-MM.Oem%02X.%04X" % (customerId, data)
    def Decode(self, data):
        # Check the header pulse
        if not (300 < data[0] < 700):
            raise DecodeError("wrong header pulse")
        if not (2000 < data[1] < 3000):
            raise DecodeError("wrong header pause")
        #print data
        self.SetData(data, 2)
        mask = 1
        buf = 0
        for i in range(20):
            try:
                buf |= mask * self.GetBit()
            except DecodeError:
                if i < 7:
                    raise
                break
            mask <<= 1

        #if data[self.pos] < 10000:
        #    raise DecodeError("missing end pause")
#        if buf == 0x7D:
#            return ""
        return "Motorola%d.%04X" % (i, buf >> 1)
예제 #14
0
파일: Recs80.py 프로젝트: maffe/EventGhost
 def Decode(self, data):
     raise DecodeError("not implemented")