summaryrefslogtreecommitdiff
path: root/decoders
diff options
context:
space:
mode:
authorGerhard Sittig <gerhard.sittig@gmx.net>2020-02-22 10:01:19 +0100
committerGerhard Sittig <gerhard.sittig@gmx.net>2020-07-18 15:33:14 +0200
commitdfbd1652942100c7bf966de1e869a941d4484116 (patch)
tree2d838eddadd42d653b9b2bb1a2699262421d8939 /decoders
parent650f19467d6e0f864df9960d8696148e90d85b79 (diff)
downloadlibsigrokdecode-dfbd1652942100c7bf966de1e869a941d4484116.tar.gz
libsigrokdecode-dfbd1652942100c7bf966de1e869a941d4484116.zip
irmp: introduce Python language binding for shared library
Commit the IrmpPythonWrap.py file as it was provided by Rene Staffen.
Diffstat (limited to 'decoders')
-rw-r--r--decoders/ir_irmp/IrmpPythonWrap.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/decoders/ir_irmp/IrmpPythonWrap.py b/decoders/ir_irmp/IrmpPythonWrap.py
new file mode 100644
index 0000000..ee250c4
--- /dev/null
+++ b/decoders/ir_irmp/IrmpPythonWrap.py
@@ -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
+ }
+