]> vault307.fbx.one Git - micorpython_ir.git/blob - ir_tx/philips.py
90b9de941f4d7bc17729fab3e195e9ba1f2a53ef
[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 ir_tx import IR
9
10 # Philips RC5 protocol
11 _T_RC5 = const(889) # Time for pulse of carrier
12
13
14 class RC5(IR):
15 valid = (0x1f, 0x3f, 1) # Max addr, data, toggle
16
17 def __init__(self, pin, freq=36000, verbose=False):
18 super().__init__(pin, freq, 28, 30, verbose)
19
20 def tx(self, addr, data, toggle): # Fix RC5X S2 bit polarity
21 d = (data & 0x3f) | ((addr & 0x1f) << 6) | (((data & 0x40) ^ 0x40) << 6) | ((toggle & 1) << 11)
22 self.verbose and print(bin(d))
23 mask = 0x2000
24 while mask:
25 if mask == 0x2000:
26 self.append(_T_RC5)
27 else:
28 bit = bool(d & mask)
29 if bit ^ self.carrier:
30 self.add(_T_RC5)
31 self.append(_T_RC5)
32 else:
33 self.append(_T_RC5, _T_RC5)
34 mask >>= 1
35
36 # Philips RC6 mode 0 protocol
37 _T_RC6 = const(444)
38 _T2_RC6 = const(889)
39
40 class RC6_M0(IR):
41 valid = (0xff, 0xff, 1) # Max addr, data, toggle
42
43 def __init__(self, pin, freq=36000, verbose=False):
44 super().__init__(pin, freq, 44, 30, verbose)
45
46 def tx(self, addr, data, toggle):
47 # leader, 1, 0, 0, 0
48 self.append(2666, _T2_RC6, _T_RC6, _T2_RC6, _T_RC6, _T_RC6, _T_RC6, _T_RC6, _T_RC6)
49 # Append a single bit of twice duration
50 if toggle:
51 self.add(_T2_RC6)
52 self.append(_T2_RC6)
53 else:
54 self.append(_T2_RC6, _T2_RC6)
55 d = (data & 0xff) | ((addr & 0xff) << 8)
56 mask = 0x8000
57 self.verbose and print('toggle', toggle, self.carrier, bool(d & mask))
58 while mask:
59 bit = bool(d & mask)
60 if bit ^ self.carrier:
61 self.append(_T_RC6, _T_RC6)
62 else:
63 self.add(_T_RC6)
64 self.append(_T_RC6)
65 mask >>= 1