From: Gerhard Sittig Date: Sat, 22 Feb 2020 09:01:19 +0000 (+0100) Subject: irmp: introduce Python language binding for shared library X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=dfbd1652942100c7bf966de1e869a941d4484116;p=libsigrokdecode.git irmp: introduce Python language binding for shared library Commit the IrmpPythonWrap.py file as it was provided by Rene Staffen. --- 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 + } +