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