]> vault307.fbx.one Git - micorpython_ir.git/blobdiff - ir_tx.py
Sony complete.
[micorpython_ir.git] / ir_tx.py
index a1cc9e9859d03a4d2d64b1b7da711f8eb7f79ceb..4a91336680394e324f9a9815a3156ce4dfd07448 100644 (file)
--- a/ir_tx.py
+++ b/ir_tx.py
@@ -100,6 +100,30 @@ class NEC(IR):
         self.aptr = 0  # Reset pointer
         self.cb(self._tim)  # Initiate physical transmission.
 
+# NEC protocol
+class SONY(IR):
+
+    def __init__(self, pin, bits=12, freq=40000, verbose=False):  # Sony specifies 40KHz
+        super().__init__(pin, freq, 3 + bits * 2, 30, verbose)
+        if bits not in (12, 15, 20):
+            raise ValueError('bits must be 12, 15 or 20.')
+        self.bits = bits
+
+    def tx(self, addr, data, ext):
+        self.append(2400, 600)
+        bits = self.bits
+        v = data & 0x7f
+        if bits == 12:
+            v |= (addr & 0x1f) << 7
+        elif bits == 15:
+            v |= (addr & 0xff) << 7
+        else:
+            v |= (addr & 0x1f) << 7
+            v |= (ext & 0xff) << 12
+        for _ in range(bits):
+            self.append(1200 if v & 1 else 600, 600)
+            v >>= 1
+
 
 # Philips RC5 protocol
 class RC5(IR):