aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pipewire/core.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-11-24 23:29:06 +0900
committerOphestra <cat@gensokyo.uk>2025-11-25 01:20:30 +0900
commit5bcafcf73421cfdd8c80a0a0daec9ac09d8784e2 (patch)
tree25b72f78f9e2d0a4aa42ca691f08dcdc5bed078b /internal/pipewire/core.go
parent9f7b0c2f46305f8a321791d6fcedc3df7f966783 (diff)
internal/pipewire: implement Core::Hello
This implements enough types to correctly marshal and unmarshal Core::Hello. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pipewire/core.go')
-rw-r--r--internal/pipewire/core.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/internal/pipewire/core.go b/internal/pipewire/core.go
new file mode 100644
index 00000000..a833009f
--- /dev/null
+++ b/internal/pipewire/core.go
@@ -0,0 +1,79 @@
+package pipewire
+
+/* pipewire/core.h */
+
+const (
+ PW_TYPE_INTERFACE_Core = PW_TYPE_INFO_INTERFACE_BASE + "Core"
+ PW_TYPE_INTERFACE_Registry = PW_TYPE_INFO_INTERFACE_BASE + "Registry"
+ PW_CORE_PERM_MASK = PW_PERM_R | PW_PERM_X | PW_PERM_M
+ PW_VERSION_CORE = 4
+ PW_VERSION_REGISTRY = 3
+
+ PW_DEFAULT_REMOTE = "pipewire-0"
+ PW_ID_CORE = 0
+ PW_ID_ANY = Word(0xffffffff)
+)
+
+const (
+ PW_CORE_CHANGE_MASK_PROPS = 1 << iota
+
+ PW_CORE_CHANGE_MASK_ALL = 1<<iota - 1
+)
+
+const (
+ PW_CORE_EVENT_INFO = iota
+ PW_CORE_EVENT_DONE
+ PW_CORE_EVENT_PING
+ PW_CORE_EVENT_ERROR
+ PW_CORE_EVENT_REMOVE_ID
+ PW_CORE_EVENT_BOUND_ID
+ PW_CORE_EVENT_ADD_MEM
+ PW_CORE_EVENT_REMOVE_MEM
+ PW_CORE_EVENT_BOUND_PROPS
+ PW_CORE_EVENT_NUM
+
+ PW_VERSION_CORE_EVENTS = 1
+)
+
+const (
+ PW_CORE_METHOD_ADD_LISTENER = iota
+ PW_CORE_METHOD_HELLO
+ PW_CORE_METHOD_SYNC
+ PW_CORE_METHOD_PONG
+ PW_CORE_METHOD_ERROR
+ PW_CORE_METHOD_GET_REGISTRY
+ PW_CORE_METHOD_CREATE_OBJECT
+ PW_CORE_METHOD_DESTROY
+ PW_CORE_METHOD_NUM
+
+ PW_VERSION_CORE_METHODS = 0
+)
+
+const (
+ PW_REGISTRY_EVENT_GLOBAL = iota
+ PW_REGISTRY_EVENT_GLOBAL_REMOVE
+ PW_REGISTRY_EVENT_NUM
+
+ PW_VERSION_REGISTRY_EVENTS = 0
+)
+
+const (
+ PW_REGISTRY_METHOD_ADD_LISTENER = iota
+ PW_REGISTRY_METHOD_BIND
+ PW_REGISTRY_METHOD_DESTROY
+ PW_REGISTRY_METHOD_NUM
+
+ PW_VERSION_REGISTRY_METHODS = 0
+)
+
+// CoreHello is the first message sent by a client.
+type CoreHello struct {
+ // version number of the client; PW_VERSION_CORE
+ Version Int
+}
+
+// MarshalBinary satisfies [encoding.BinaryMarshaler] via [MarshalAppend].
+func (c *CoreHello) MarshalBinary() ([]byte, error) { return MarshalAppend(make([]byte, 0, 24), c) }
+
+// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal].
+func (c *CoreHello) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) }