("audio_flush", audio_flush_prototype),
("audio_destroy", audio_destroy_prototype)]
-def LoadShairplay(path):
- if sys.maxsize < 2**32:
- libname = "shairplay32"
- else:
- libname = "shairplay64"
-
- if platform.system() == "Windows":
- libname = libname + ".dll"
- elif platform.system() == "Darwin":
- libname = "lib" + libname + ".dylib"
- else:
- libname = "lib" + libname + ".so"
-
- try:
- fullpath = os.path.join(path, libname)
- libshairplay = cdll.LoadLibrary(fullpath)
- except:
- raise RuntimeError("Couldn't load shairplay library " + libname)
-
+def InitShairplay(libshairplay):
# Initialize dnssd related functions
libshairplay.dnssd_init.restype = c_void_p
libshairplay.dnssd_init.argtypes = [POINTER(c_int)]
libshairplay.dnssd_register_raop.restype = c_int
- libshairplay.dnssd_register_raop.argtypes = [c_void_p, c_char_p, c_ushort, POINTER(c_char), c_int]
+ libshairplay.dnssd_register_raop.argtypes = [c_void_p, c_char_p, c_ushort, POINTER(c_char), c_int, c_int]
libshairplay.dnssd_register_airplay.restype = c_int
libshairplay.dnssd_register_airplay.argtypes = [c_void_p, c_char_p, c_ushort, POINTER(c_char), c_int]
libshairplay.dnssd_unregister_raop.restype = None
# Initialize raop related functions
libshairplay.raop_init.restype = c_void_p
libshairplay.raop_init.argtypes = [POINTER(RaopNativeCallbacks), c_char_p]
+ libshairplay.raop_is_running.restype = c_int
+ libshairplay.raop_is_running.argtypes = [c_void_p]
libshairplay.raop_start.restype = c_int
- libshairplay.raop_start.argtypes = [c_void_p, POINTER(c_ushort), POINTER(c_char), c_int]
+ libshairplay.raop_start.argtypes = [c_void_p, POINTER(c_ushort), POINTER(c_char), c_int, c_char_p]
libshairplay.raop_stop.restype = None
libshairplay.raop_stop.argtypes = [c_void_p]
libshairplay.raop_destroy.restype = None
libshairplay.raop_destroy.argtypes = [c_void_p]
+def LoadShairplay(path):
+ if sys.maxsize < 2**32:
+ libname = "shairplay32"
+ else:
+ libname = "shairplay64"
+
+ if platform.system() == "Windows":
+ libname = libname + ".dll"
+ elif platform.system() == "Darwin":
+ libname = "lib" + libname + ".dylib"
+ else:
+ libname = "lib" + libname + ".so"
+
+ try:
+ fullpath = os.path.join(path, libname)
+ libshairplay = cdll.LoadLibrary(fullpath)
+ except:
+ raise RuntimeError("Couldn't load shairplay library " + libname)
+
+ InitShairplay(libshairplay)
return libshairplay
RSA_KEY = """
self.libshairplay.raop_destroy(self.instance)
self.instance = None
- def start(self, port, hwaddrstr):
+ def is_running(self):
+ if self.libshairplay.raop_is_running(self.instance):
+ return True
+ else:
+ return False
+
+ def start(self, port, hwaddrstr, password=None):
port = c_ushort(port)
hwaddr = create_string_buffer(hwaddrstr, len(hwaddrstr))
- ret = self.libshairplay.raop_start(self.instance, pointer(port), hwaddr, c_int(len(hwaddr)))
+ ret = self.libshairplay.raop_start(self.instance, pointer(port), hwaddr, c_int(len(hwaddr)), password)
if ret < 0:
raise RuntimeError("Starting RAOP instance failed")
return port.value
self.libshairplay.dnssd_destroy(self.instance)
self.instance = None
- def register_raop(self, name, port, hwaddrstr):
+ def register_raop(self, name, port, hwaddrstr, password=False):
hwaddr = create_string_buffer(hwaddrstr, len(hwaddrstr))
- self.libshairplay.dnssd_register_raop(self.instance, name, c_ushort(port), hwaddr, len(hwaddr))
+ use_pw = c_int(0)
+ if password:
+ use_pw = c_int(1)
+ self.libshairplay.dnssd_register_raop(self.instance, name, c_ushort(port), hwaddr, len(hwaddr), use_pw)
def unregister_raop(self):
self.libshairplay.dnssd_unregister_raop(self.instance)