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)
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
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)
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)
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)
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")
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)
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
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")
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
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
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)
def Decode(self, data): raise DecodeError("not implemented")