]> sigrok.org Git - libsigrokdecode.git/commitdiff
irmp: introduce Python language binding for shared library
authorGerhard Sittig <redacted>
Sat, 22 Feb 2020 09:01:19 +0000 (10:01 +0100)
committerGerhard Sittig <redacted>
Sat, 18 Jul 2020 13:33:14 +0000 (15:33 +0200)
Commit the IrmpPythonWrap.py file as it was provided by Rene Staffen.

decoders/ir_irmp/IrmpPythonWrap.py [new file with mode: 0644]

diff --git a/decoders/ir_irmp/IrmpPythonWrap.py b/decoders/ir_irmp/IrmpPythonWrap.py
new file mode 100644 (file)
index 0000000..ee250c4
--- /dev/null
@@ -0,0 +1,81 @@
+
+
+
+from ctypes import *
+import platform
+
+      
+
+class IrmpWrap:
+    class IrmpData(Structure):
+         _fields_ = [  ("protocol"      , c_uint32 ),
+                       ("protocolName"  , c_char_p ),
+                       ("address"       , c_uint32 ),
+                       ("command"       , c_uint32 ),
+                       ("flags"         , c_uint32 ),
+                       ("startSample"   , c_uint32 ),
+                       ("endSample"     , c_uint32 ),
+         ]
+    
+    def __init__(self):
+        libname = "irmp.dll"
+        # get the right filename
+
+        if platform.uname()[0] == "Linux":
+            name = "irmp.so"    
+    
+        self.__irmpDll = cdll.LoadLibrary("irmp.dll")
+        self.__irmpDll.IRMP_GetSampleRate.restype = c_int32
+        self.__irmpDll.IRMP_GetSampleRate.argtypes = []
+        
+        
+        self.__irmpDll.IRMP_GetProtocolName.restype = c_char_p
+        self.__irmpDll.IRMP_GetProtocolName.argtypes = [c_uint32]
+        
+        self.__irmpDll.IRMP_Reset.restype = None
+        self.__irmpDll.IRMP_Reset.argtypes = []
+        
+        self.__irmpDll.IRMP_AddSample.restype = c_uint32
+        self.__irmpDll.IRMP_AddSample.argtypes = [c_uint8]
+        
+        self.__irmpDll.IRMP_GetData.restype = c_uint32
+        self.__irmpDll.IRMP_GetData.argtypes = [POINTER(IrmpWrap.IrmpData)]
+        
+        self.__irmpDll.IRMP_Detect.restype = IrmpWrap.IrmpData
+        self.__irmpDll.IRMP_Detect.argtypes = [ c_char_p, c_uint32]
+        
+        self.__data = IrmpWrap.IrmpData()
+        self.__startSample = c_uint32(0)
+        self.__endSample   = c_uint32(0)
+
+        return
+
+    def GetProtocollName(self, pn):
+        return self.__irmpDll.IRMP_GetProtocollName(pn)
+    
+    def GetSampleRate(self):
+        return self.__irmpDll.IRMP_GetSampleRate()
+    
+    def Reset(self):
+        self.__irmpDll.IRMP_Reset()
+        
+    def AddSample(self, level):
+        
+        if self.__irmpDll.IRMP_AddSample(c_uint8( 1 if (level!=0) else 0)):
+            self.__irmpDll.IRMP_GetData( byref(self.__data))
+            return True
+        else:
+            return False
+        
+    def GetData(self):
+        return { 'data'  : { 
+                             'protocol'     : self.__data.protocol,
+                             'protocolName' : self.__data.protocolName.decode('UTF-8'),
+                             'address'       : self.__data.address,
+                             'command'       : self.__data.command,
+                             'repeat'        : (self.__data.flags != 0)
+                           }, 
+                 'start' : self.__data.startSample,
+                 'end'   : self.__data.endSample
+               }
+