X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fbindings%2Fpython%2FShairplay.py;h=7393853a0264f597d6cfd192a43262d4ab79805a;hb=ebc7ed4de5ccbf808d2d02baab29f6a4f6cfe18b;hp=1396524c0852074ae01e244dc84366187855eb6d;hpb=23ab90afeb29b103194a86d963be6f26af880d9c;p=deb_shairplay.git diff --git a/src/bindings/python/Shairplay.py b/src/bindings/python/Shairplay.py index 1396524..7393853 100644 --- a/src/bindings/python/Shairplay.py +++ b/src/bindings/python/Shairplay.py @@ -28,6 +28,18 @@ import platform from ctypes import * +class RaopLogLevel: + EMERG = 0 + ALERT = 1 + CRIT = 2 + ERR = 3 + WARNING = 4 + NOTICE = 5 + INFO = 6 + DEBUG = 7 + +raop_log_callback_prototype = CFUNCTYPE(None, c_void_p, c_int, c_char_p) + audio_init_prototype = CFUNCTYPE(py_object, c_void_p, c_int, c_int, c_int) audio_process_prototype = CFUNCTYPE(None, c_void_p, c_void_p, c_void_p, c_int) audio_destroy_prototype = CFUNCTYPE(None, c_void_p, c_void_p) @@ -64,7 +76,11 @@ def InitShairplay(libshairplay): # Initialize raop related functions libshairplay.raop_init.restype = c_void_p - libshairplay.raop_init.argtypes = [c_int, POINTER(RaopNativeCallbacks), c_char_p] + libshairplay.raop_init.argtypes = [c_int, POINTER(RaopNativeCallbacks), c_char_p, POINTER(c_int)] + libshairplay.raop_set_log_level.restype = None + libshairplay.raop_set_log_level.argtypes = [c_void_p, c_int] + libshairplay.raop_set_log_callback.restype = None + libshairplay.raop_set_log_callback.argtypes = [c_void_p, raop_log_callback_prototype, c_void_p] libshairplay.raop_is_running.restype = c_int libshairplay.raop_is_running.argtypes = [c_void_p] libshairplay.raop_start.restype = c_int @@ -197,7 +213,7 @@ class RaopService: self.native_callbacks.audio_set_coverart = audio_set_coverart_prototype(self.audio_set_coverart_cb) # Initialize the raop instance with our callbacks - self.instance = self.libshairplay.raop_init(max_clients, pointer(self.native_callbacks), RSA_KEY) + self.instance = self.libshairplay.raop_init(max_clients, pointer(self.native_callbacks), RSA_KEY, None) if self.instance == None: raise RuntimeError("Initializing library failed") @@ -212,6 +228,19 @@ class RaopService: else: return False + def set_log_level(self, level): + self.libshairplay.raop_set_log_level(self.instance, level) + + def set_log_callback(self, log_callback): + # Create a new callback function for thread safety + def log_callback_cb(cls, level, message): + log_callback(level, message) + + # We need to hold a reference to the log callback instance + log_callback_ptr = raop_log_callback_prototype(log_callback_cb) + self.libshairplay.raop_set_log_callback(self.instance, log_callback_ptr, None) + self.log_callback = log_callback_ptr + def start(self, port, hwaddrstr, password=None): port = c_ushort(port) hwaddr = create_string_buffer(hwaddrstr, len(hwaddrstr))