]> vault307.fbx.one Git - micorpython_ir.git/blob - ir_tx/philips.py
a37dd5b282217c0ed5bce634af432905ba95544f
[micorpython_ir.git] / ir_tx / philips.py
1 # philips.py Encoder for IR remote control using synchronous code
2 # RC-5 and RC-6 mode 0 protocols.
3
4 # Author: Peter Hinch
5 # Copyright Peter Hinch 2020 Released under the MIT license
6
7 from micropython import const
8 from sys import platform
9 from ir_tx import IR
10
11 # Philips RC5 protocol
12 _T_RC5 = const(889) # Time for pulse of carrier
13 ermsg = 'ESP32 does not support Philips protocols'
14 class RC5(IR):
15
16 def __init__(self, pin, freq=36000, verbose=False):
17 super().__init__(pin, freq, 28, 30, verbose)
18
19 def tx(self, addr, data, toggle):
20 d = (data & 0x3f) | ((addr & 0x1f) << 6) | ((data & 0x40) << 6) | ((toggle & 1) << 11)
21 self.verbose and print(bin(d))
22 mask = 0x2000
23 while mask:
24 if mask == 0x2000:
25 self.append(_T_RC5)
26 else:
27 bit = bool(d & mask)
28 if bit ^ self.carrier:
29 self.add(_T_RC5)
30 self.append(_T_RC5)
31 else:
32 self.append(_T_RC5, _T_RC5)
33 mask >>= 1
34
35 # Philips RC6 mode 0 protocol
36 _T_RC6 = const(444)
37 _T2_RC6 = const(889)
38
39 class RC6_M0(IR):
40
41 def __init__(self, pin, freq=36000, verbose=False):
42 super().__init__(pin, freq, 44, 30, verbose)
43
44 def tx(self, addr, data, toggle):
45 # leader, 1, 0, 0, 0
46 self.append(2666, _T2_RC6, _T_RC6, _T2_RC6, _T_RC6, _T_RC6, _T_RC6, _T_RC6, _T_RC6)
47 # Append a single bit of twice duration
48 if toggle:
49 self.add(_T2_RC6)
50 self.append(_T2_RC6)
51 else:
52 self.append(_T2_RC6, _T2_RC6)
53 d = (data & 0xff) | ((addr & 0xff) << 8)
54 mask = 0x8000
55 self.verbose and print('toggle', toggle, self.carrier, bool(d & mask))
56 while mask:
57 bit = bool(d & mask)
58 if bit ^ self.carrier:
59 self.append(_T_RC6, _T_RC6)
60 else:
61 self.add(_T_RC6)
62 self.append(_T_RC6)
63 mask >>= 1