diff --git a/src/modules/module-protocol-pulse/module.c b/src/modules/module-protocol-pulse/module.c index 308c69659..a0e980fb8 100644 --- a/src/modules/module-protocol-pulse/module.c +++ b/src/modules/module-protocol-pulse/module.c @@ -180,15 +180,14 @@ static bool find_key(const struct module_args args[], const char *key) static int module_args_check(struct pw_properties *props, const struct module_args valid_args[]) { - if (valid_args != NULL) { - const struct spa_dict_item *it; - spa_dict_for_each(it, &props->dict) { - if (!find_key(valid_args, it->key)) { - pw_log_warn("'%s' is not a valid module argument key", it->key); - return -EINVAL; - } + const struct spa_dict_item *it; + spa_dict_for_each(it, &props->dict) { + if (valid_args == NULL || !find_key(valid_args, it->key)) { + pw_log_warn("'%s' is not a valid module argument key", it->key); + return -EINVAL; } - + } + if (valid_args != NULL) { for (int i = 0; valid_args[i].key != NULL; i++) if (SPA_FLAG_IS_SET(valid_args[i].flags, MODULE_ARG_MANDATORY) && pw_properties_get(props, valid_args[i].key) == NULL) { diff --git a/src/modules/module-protocol-pulse/modules/module-alsa-sink.c b/src/modules/module-protocol-pulse/modules/module-alsa-sink.c index 49ca9404b..058324012 100644 --- a/src/modules/module-protocol-pulse/modules/module-alsa-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-alsa-sink.c @@ -44,6 +44,34 @@ static const char *const pulse_module_options = "deferred_volume_extra_delay= " "fixed_latency_range= "; +static const struct module_args valid_args[] = { + { "name", "name of the sink, to be prefixed", }, + { "sink_name", "name for the sink", }, + { "sink_properties", "properties for the sink", }, + { "namereg_fail", "when false attempt to synthesise new sink_name if it is already taken", }, + { "device", "ALSA device", }, + { "device_id", "ALSA card index", }, + { "format", "sample format", }, + { "rate", "sample rate", }, + { "alternate_rate", "alternate sample rate", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { "fragments", "number of fragments", }, + { "fragment_size", "fragment size", }, + { "mmap", "enable memory mapping?", }, + { "tsched", "enable system timer based scheduling mode?", }, + { "tsched_buffer_size", "buffer size when using timer based scheduling", }, + { "tsched_buffer_watermark", "lower fill watermark", }, + { "ignore_dB", "ignore dB information from the device?", }, + { "control", "name of mixer control, or name and index separated by a comma", }, + { "rewind_safeguard", "number of bytes that cannot be rewound", }, + { "deferred_volume", "Synchronize software and hardware volume changes to avoid momentary jumps?", }, + { "deferred_volume_safety_margin", "usec adjustment depending on volume direction", }, + { "deferred_volume_extra_delay", "usec adjustment to HW volume changes", }, + { "fixed_latency_range", "disable latency range changes on underrun?", }, + { NULL, } +}; + #define NAME "alsa-sink" #define DEFAULT_DEVICE "default" @@ -244,6 +272,7 @@ static int module_alsa_sink_prepare(struct module * const module) DEFINE_MODULE_INFO(module_alsa_sink) = { .name = "module-alsa-sink", + .valid_args = valid_args, .prepare = module_alsa_sink_prepare, .load = module_alsa_sink_load, .unload = module_alsa_sink_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-alsa-source.c b/src/modules/module-protocol-pulse/modules/module-alsa-source.c index 1ffce1750..ef0af6439 100644 --- a/src/modules/module-protocol-pulse/modules/module-alsa-source.c +++ b/src/modules/module-protocol-pulse/modules/module-alsa-source.c @@ -44,6 +44,34 @@ static const char *const pulse_module_options = "deferred_volume_extra_delay= " "fixed_latency_range="; +static const struct module_args valid_args[] = { + { "name", "name of the source, to be prefixed", }, + { "source_name", "name for the source", }, + { "source_properties", "properties for the source", }, + { "namereg_fail", "when false attempt to synthesise new source_name if it is already taken", }, + { "device", "ALSA device", }, + { "device_id", "ALSA card index", }, + { "format", "sample format", }, + { "rate", "sample rate", }, + { "alternate_rate", "alternate sample rate", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { "fragments", "number of fragments", }, + { "fragment_size", "fragment size", }, + { "mmap", "enable memory mapping?", }, + { "tsched", "enable system timer based scheduling mode?", }, + { "tsched_buffer_size", "buffer size when using timer based scheduling", }, + { "tsched_buffer_watermark", "lower fill watermark", }, + { "ignore_dB", "ignore dB information from the device?", }, + { "control", "name of mixer control, or name and index separated by a comma", }, + { "rewind_safeguard", "number of bytes that cannot be rewound", }, + { "deferred_volume", "Synchronize software and hardware volume changes to avoid momentary jumps?", }, + { "deferred_volume_safety_margin", "usec adjustment depending on volume direction", }, + { "deferred_volume_extra_delay", "usec adjustment to HW volume changes", }, + { "fixed_latency_range", "disable latency range changes on underrun?", }, + { NULL, } +}; + #define NAME "alsa-source" #define DEFAULT_DEVICE "default" @@ -244,6 +272,7 @@ static int module_alsa_source_prepare(struct module * const module) DEFINE_MODULE_INFO(module_alsa_source) = { .name = "module-alsa-source", + .valid_args = valid_args, .prepare = module_alsa_source_prepare, .load = module_alsa_source_load, .unload = module_alsa_source_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-always-sink.c b/src/modules/module-protocol-pulse/modules/module-always-sink.c index a57c263af..2641068be 100644 --- a/src/modules/module-protocol-pulse/modules/module-always-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-always-sink.c @@ -20,6 +20,11 @@ static const char *const pulse_module_options = "sink_name="; +static const struct module_args valid_args[] = { + { "sink_name", "name of sink", }, + { NULL, } +}; + #define NAME "always-sink" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -109,6 +114,7 @@ static int module_always_sink_prepare(struct module * const module) DEFINE_MODULE_INFO(module_always_sink) = { .name = "module-always-sink", .load_once = true, + .valid_args = valid_args, .prepare = module_always_sink_prepare, .load = module_always_sink_load, .unload = module_always_sink_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-combine-sink.c b/src/modules/module-protocol-pulse/modules/module-combine-sink.c index 809dd7bd0..2ad776fc4 100644 --- a/src/modules/module-protocol-pulse/modules/module-combine-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-combine-sink.c @@ -38,6 +38,18 @@ static const char *const pulse_module_options = "remix= " "latency_compensate= "; +static const struct module_args valid_args[] = { + { "sink_name", "name of the sink", }, + { "sink_properties", "properties for the sink", }, + { "sinks", "sinks to combine", }, + { "rate", "sample rate", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { "remix", "remix channels", }, + { "latency_compensate", "bool", }, + { NULL, } +}; + #define NAME "combine-sink" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -347,6 +359,7 @@ out: DEFINE_MODULE_INFO(module_combine_sink) = { .name = "module-combine-sink", + .valid_args = valid_args, .prepare = module_combine_sink_prepare, .load = module_combine_sink_load, .unload = module_combine_sink_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-device-manager.c b/src/modules/module-protocol-pulse/modules/module-device-manager.c index d07fbd21e..90dc2ea2c 100644 --- a/src/modules/module-protocol-pulse/modules/module-device-manager.c +++ b/src/modules/module-protocol-pulse/modules/module-device-manager.c @@ -22,6 +22,13 @@ static const char *const pulse_module_options = "on_hotplug= " "on_rescue="; +static const struct module_args valid_args[] = { + { "do_routing", "Automatically route streams based on a priority list (unique per-role)?", }, + { "on_hotplug", "When new device becomes available, recheck streams?", }, + { "on_rescue", "When device becomes unavailable, recheck streams?", }, + { NULL, } +}; + #define NAME "device-manager" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -56,6 +63,7 @@ static int module_device_manager_load(struct module *module) DEFINE_MODULE_INFO(module_device_manager) = { .name = "module-device-manager", .load_once = true, + .valid_args = valid_args, .prepare = module_device_manager_prepare, .load = module_device_manager_load, .properties = &SPA_DICT_INIT_ARRAY(module_device_manager_info), diff --git a/src/modules/module-protocol-pulse/modules/module-device-restore.c b/src/modules/module-protocol-pulse/modules/module-device-restore.c index a025ee13b..0af76daf2 100644 --- a/src/modules/module-protocol-pulse/modules/module-device-restore.c +++ b/src/modules/module-protocol-pulse/modules/module-device-restore.c @@ -63,6 +63,14 @@ static const char *const pulse_module_options = "restore_muted= " "restore_formats="; +static const struct module_args valid_args[] = { + { "restore_port", "Save/restore port?", }, + { "restore_volume", "Save/restore volumes?", }, + { "restore_muted", "Save/restore muted states?", }, + { "restore_formats", "Save/restore saved formats?", }, + { NULL, } +}; + #define NAME "device-restore" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -486,6 +494,7 @@ static int module_device_restore_unload(struct module *module) DEFINE_MODULE_INFO(module_device_restore) = { .name = "module-device-restore", .load_once = true, + .valid_args = valid_args, .prepare = module_device_restore_prepare, .load = module_device_restore_load, .unload = module_device_restore_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-echo-cancel.c b/src/modules/module-protocol-pulse/modules/module-echo-cancel.c index 8db12b8c4..0bff4627d 100644 --- a/src/modules/module-protocol-pulse/modules/module-echo-cancel.c +++ b/src/modules/module-protocol-pulse/modules/module-echo-cancel.c @@ -38,6 +38,22 @@ static const char *const pulse_module_options = "channel_map= " "aec_method= " "aec_args= "; + +static const struct module_args valid_args[] = { + { "source_name", "name for the source", }, + { "source_properties", "properties for the source", }, + { "source_master", "name of source to filter", }, + { "sink_name", "name for the sink", }, + { "sink_properties", "properties for the sink", }, + { "sink_master", "name of sink to filter", }, + { "rate", "sample rate", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { "aec_method", "implementation to use", }, + { "aec_args", "parameters for the AEC engine", }, + { NULL, } +}; + #if 0 /* These are not implemented because they don't * really make sense in the PipeWire context */ @@ -377,6 +393,7 @@ out: DEFINE_MODULE_INFO(module_echo_cancel) = { .name = "module-echo-cancel", + .valid_args = valid_args, .prepare = module_echo_cancel_prepare, .load = module_echo_cancel_load, .unload = module_echo_cancel_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-jackdbus-detect.c b/src/modules/module-protocol-pulse/modules/module-jackdbus-detect.c index c0f87a894..9a7db0c8c 100644 --- a/src/modules/module-protocol-pulse/modules/module-jackdbus-detect.c +++ b/src/modules/module-protocol-pulse/modules/module-jackdbus-detect.c @@ -38,6 +38,22 @@ static const char *const pulse_module_options = "source_channel_map= " "connect="; +static const struct module_args valid_args[] = { + { "channels", "number of channels", }, + { "sink_name", "name for the sink", }, + { "sink_properties", "properties for the sink", }, + { "sink_client_name", "jack client name", }, + { "sink_channels", "number of channels", }, + { "sink_channel_map", "channel map", }, + { "source_name", "name for the source", }, + { "source_properties", "properties for the source", }, + { "source_client_name", "jack client name", }, + { "source_channels", "number of channels", }, + { "source_channel_map", "channel map", }, + { "connect", "connect ports?", }, + { NULL, } +}; + #define NAME "jackdbus-detect" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -223,6 +239,7 @@ out: DEFINE_MODULE_INFO(module_jackdbus_detect) = { .name = "module-jackdbus-detect", .load_once = false, + .valid_args = valid_args, .prepare = module_jackdbus_detect_prepare, .load = module_jackdbus_detect_load, .unload = module_jackdbus_detect_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-loopback.c b/src/modules/module-protocol-pulse/modules/module-loopback.c index 5808e196e..0a732251a 100644 --- a/src/modules/module-protocol-pulse/modules/module-loopback.c +++ b/src/modules/module-protocol-pulse/modules/module-loopback.c @@ -39,6 +39,21 @@ static const char *const pulse_module_options = "sink_dont_move= " "remix= "; +static const struct module_args valid_args[] = { + { "source", "source to connect to", }, + { "sink", "sink to connect to", }, + { "latency_msec", "latency in ms", }, + { "rate", "sample rate", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { "sink_input_properties", "proplist", }, + { "source_output_properties", "proplist", }, + { "source_dont_move", "boolean", }, + { "sink_dont_move", "boolean", }, + { "remix", "remix channels?", }, + { NULL, } +}; + #define NAME "loopback" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -232,6 +247,7 @@ out: DEFINE_MODULE_INFO(module_loopback) = { .name = "module-loopback", + .valid_args = valid_args, .prepare = module_loopback_prepare, .load = module_loopback_load, .unload = module_loopback_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c b/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c index 071322658..c3c8f6a0a 100644 --- a/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c +++ b/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c @@ -25,6 +25,13 @@ static const char *const pulse_module_options = "listen=
" "auth-anonymous="; +static const struct module_args valid_args[] = { + { "port", "TCP port number", }, + { "listen", "address to listen on", }, + { "auth-anonymous", "don't check for cookies?", }, + { NULL, } +}; + #define NAME "protocol-tcp" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -116,6 +123,7 @@ static int module_native_protocol_tcp_prepare(struct module * const module) DEFINE_MODULE_INFO(module_native_protocol_tcp) = { .name = "module-native-protocol-tcp", + .valid_args = valid_args, .prepare = module_native_protocol_tcp_prepare, .load = module_native_protocol_tcp_load, .unload = module_native_protocol_tcp_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-null-sink.c b/src/modules/module-protocol-pulse/modules/module-null-sink.c index e7a9ae6fd..fb407e469 100644 --- a/src/modules/module-protocol-pulse/modules/module-null-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-null-sink.c @@ -26,6 +26,16 @@ static const char *const pulse_module_options = "channels= " "channel_map="; +static const struct module_args valid_args[] = { + { "sink_name", "name of sink", }, + { "sink_properties", "properties for the sink", }, + { "format", "sample format", }, + { "rate", "sample rate", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { NULL, } +}; + #define NAME "null-sink" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -204,6 +214,7 @@ static int module_null_sink_prepare(struct module * const module) DEFINE_MODULE_INFO(module_null_sink) = { .name = "module-null-sink", + .valid_args = valid_args, .prepare = module_null_sink_prepare, .load = module_null_sink_load, .unload = module_null_sink_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-pipe-sink.c b/src/modules/module-protocol-pulse/modules/module-pipe-sink.c index c80caecc0..2e50cbe87 100644 --- a/src/modules/module-protocol-pulse/modules/module-pipe-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-pipe-sink.c @@ -40,6 +40,18 @@ static const char *const pulse_module_options = "channel_map= " "use_system_clock_for_timing= "; +static const struct module_args valid_args[] = { + { "file", "name of the FIFO special file to use", }, + { "sink_name", "name for the sink", }, + { "sink_properties", "sink properties", }, + { "format", "sample format", }, + { "rate", "sample rate", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { "use_system_clock_for_timing", "yes or no", }, + { NULL, } +}; + #define NAME "pipe-sink" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -194,6 +206,7 @@ out: DEFINE_MODULE_INFO(module_pipe_sink) = { .name = "module-pipe-sink", + .valid_args = valid_args, .prepare = module_pipe_sink_prepare, .load = module_pipe_sink_load, .unload = module_pipe_sink_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-pipe-source.c b/src/modules/module-protocol-pulse/modules/module-pipe-source.c index 4e69d1d6b..e1ccc9bb6 100644 --- a/src/modules/module-protocol-pulse/modules/module-pipe-source.c +++ b/src/modules/module-protocol-pulse/modules/module-pipe-source.c @@ -39,6 +39,17 @@ static const char *const pulse_module_options = "channels= " "channel_map= "; +static const struct module_args valid_args[] = { + { "file", "name of the FIFO special file to use", }, + { "source_name", "name for the source", }, + { "source_properties", "source properties", }, + { "format", "sample format", }, + { "rate", "sample rate", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { NULL, } +}; + #define NAME "pipe-source" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -191,6 +202,7 @@ out: DEFINE_MODULE_INFO(module_pipe_source) = { .name = "module-pipe-source", + .valid_args = valid_args, .prepare = module_pipe_source_prepare, .load = module_pipe_source_load, .unload = module_pipe_source_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-raop-discover.c b/src/modules/module-protocol-pulse/modules/module-raop-discover.c index d1c06e183..49cde85a8 100644 --- a/src/modules/module-protocol-pulse/modules/module-raop-discover.c +++ b/src/modules/module-protocol-pulse/modules/module-raop-discover.c @@ -24,6 +24,11 @@ * \ref page_module_raop_discover "libpipewire-module-raop-discover" */ +static const struct module_args valid_args[] = { + { "latency_msec", "latency in ms", }, + { NULL, } +}; + #define NAME "raop-discover" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -121,6 +126,7 @@ static int module_raop_discover_prepare(struct module * const module) DEFINE_MODULE_INFO(module_raop_discover) = { .name = "module-raop-discover", .load_once = true, + .valid_args = valid_args, .prepare = module_raop_discover_prepare, .load = module_raop_discover_load, .unload = module_raop_discover_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-remap-sink.c b/src/modules/module-protocol-pulse/modules/module-remap-sink.c index 92feb5543..7ade38b37 100644 --- a/src/modules/module-protocol-pulse/modules/module-remap-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-remap-sink.c @@ -37,6 +37,20 @@ static const char *const pulse_module_options = "resample_method= " "remix="; +static const struct module_args valid_args[] = { + { "sink_name", "name for the sink", }, + { "sink_properties", "properties for the sink", }, + { "master", "name of sink to remap", }, + { "master_channel_map", "channel map", }, + { "format", "sample format", }, + { "rate", "sample rate", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { "resample_method", "resampler", }, + { "remix", "remix channels?", }, + { NULL, } +}; + #define NAME "remap-sink" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -225,6 +239,7 @@ out: DEFINE_MODULE_INFO(module_remap_sink) = { .name = "module-remap-sink", + .valid_args = valid_args, .prepare = module_remap_sink_prepare, .load = module_remap_sink_load, .unload = module_remap_sink_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-remap-source.c b/src/modules/module-protocol-pulse/modules/module-remap-source.c index d67f150df..173b58b5b 100644 --- a/src/modules/module-protocol-pulse/modules/module-remap-source.c +++ b/src/modules/module-protocol-pulse/modules/module-remap-source.c @@ -37,6 +37,20 @@ static const char *const pulse_module_options = "resample_method= " "remix="; +static const struct module_args valid_args[] = { + { "source_name", "name for the source", }, + { "source_properties", "properties for the source", }, + { "master", "name of source to filter", }, + { "master_channel_map", "channel map", }, + { "format", "sample format", }, + { "rate", "sample rate", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { "resample_method", "resampler", }, + { "remix", "remix channels?", }, + { NULL, } +}; + #define NAME "remap-sink" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -232,6 +246,7 @@ out: DEFINE_MODULE_INFO(module_remap_source) = { .name = "module-remap-source", + .valid_args = valid_args, .prepare = module_remap_source_prepare, .load = module_remap_source_load, .unload = module_remap_source_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c b/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c index edc52af07..d56be34bb 100644 --- a/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c +++ b/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c @@ -36,6 +36,20 @@ static const char *const pulse_module_options = "port= " "listen=
"; +static const struct module_args valid_args[] = { + { "rate", "sample rate", }, + { "format", "sample format", }, + { "channels", "number of channels", }, + { "channel_map", "number of channels", }, + { "sink", "sink to connect to", }, + { "source", "source to connect to", }, + { "playback", "enable playback?", }, + { "record", "enable record?", }, + { "port", "TCP port number", }, + { "listen", "address to listen on", }, + { NULL, } +}; + #define NAME "simple-protocol-tcp" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -202,6 +216,7 @@ out: DEFINE_MODULE_INFO(module_simple_protocol_tcp) = { .name = "module-simple-protocol-tcp", + .valid_args = valid_args, .prepare = module_simple_protocol_tcp_prepare, .load = module_simple_protocol_tcp_load, .unload = module_simple_protocol_tcp_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-stream-restore.c b/src/modules/module-protocol-pulse/modules/module-stream-restore.c index a56a8e5f3..ff29c2dbf 100644 --- a/src/modules/module-protocol-pulse/modules/module-stream-restore.c +++ b/src/modules/module-protocol-pulse/modules/module-stream-restore.c @@ -26,6 +26,16 @@ static const char *const pulse_module_options = "on_rescue= " "fallback_table="; +static const struct module_args valid_args[] = { + { "restore_device", "Save/restore sinks/sources?", }, + { "restore_volume", "Save/restore volumes?", }, + { "restore_muted", "Save/restore muted states?", }, + { "on_hotplug", "This argument is obsolete, please remove it from configuration", }, + { "on_rescue", "This argument is obsolete, please remove it from configuration", }, + { "fallback_table", "filename", }, + { NULL, } +}; + #define NAME "stream-restore" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -462,6 +472,7 @@ static int module_stream_restore_unload(struct module *module) DEFINE_MODULE_INFO(module_stream_restore) = { .name = "module-stream-restore", + .valid_args = valid_args, .load_once = true, .prepare = module_stream_restore_prepare, .load = module_stream_restore_load, diff --git a/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c b/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c index 0af92c53a..27fef289b 100644 --- a/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c +++ b/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c @@ -31,6 +31,13 @@ static const char *const pulse_module_options = "ignore_virtual= " "blocklist= "; +static const struct module_args valid_args[] = { + { "only_from_unavailable", "boolean, only switch from unavailable ports (not implemented yet)", }, + { "ignore_virtual", "boolean, ignore new virtual sinks and sources, defaults to true", }, + { "blocklist", "regex, ignore matching devices, default=hdmi", }, + { NULL, } +}; + #define NAME "switch-on-connect" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -293,6 +300,7 @@ static int module_switch_on_connect_prepare(struct module * const module) DEFINE_MODULE_INFO(module_switch_on_connect) = { .name = "module-switch-on-connect", + .valid_args = valid_args, .load_once = true, .prepare = module_switch_on_connect_prepare, .load = module_switch_on_connect_load, diff --git a/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c b/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c index 7c34b5f6b..1340cbd9a 100644 --- a/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c @@ -40,6 +40,21 @@ static const char *const pulse_module_options = "latency_msec= " "cookie="; +static const struct module_args valid_args[] = { + { "server", "address", MODULE_ARG_MANDATORY }, + { "sink", "name of the remote sink", }, + { "sink_name", "name for the local sink", }, + { "sink_properties", "properties for the local sink", }, + { "reconnect_interval_ms", "interval to try reconnects, 0 or omitted if disabled", }, + { "format", "sample format", }, + { "channels", "number of channels", }, + { "rate", "sample rate", }, + { "channel_map", "channel map", }, + { "latency_msec", "fixed latency in ms", }, + { "cookie", "cookie file path", }, + { NULL, } +}; + #define NAME "tunnel-sink" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -204,6 +219,7 @@ out: DEFINE_MODULE_INFO(module_tunnel_sink) = { .name = "module-tunnel-sink", + .valid_args = valid_args, .prepare = module_tunnel_sink_prepare, .load = module_tunnel_sink_load, .unload = module_tunnel_sink_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-tunnel-source.c b/src/modules/module-protocol-pulse/modules/module-tunnel-source.c index af6a29d87..e494e9263 100644 --- a/src/modules/module-protocol-pulse/modules/module-tunnel-source.c +++ b/src/modules/module-protocol-pulse/modules/module-tunnel-source.c @@ -40,6 +40,21 @@ static const char *const pulse_module_options = "latency_msec= " "cookie="; +static const struct module_args valid_args[] = { + { "server", "address", MODULE_ARG_MANDATORY }, + { "source", "name of the remote source", }, + { "source_name", "name for the local source", }, + { "source_properties", "properties for the local source", }, + { "reconnect_interval_ms", "interval to try reconnects, 0 or omitted if disabled", }, + { "format", "sample format", }, + { "channels", "number of channels", }, + { "rate", "sample rate", }, + { "channel_map", "channel map", }, + { "latency_msec", "fixed latency in ms", }, + { "cookie", "cookie file path", }, + { NULL, } +}; + #define NAME "tunnel-source" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -201,6 +216,7 @@ out: DEFINE_MODULE_INFO(module_tunnel_source) = { .name = "module-tunnel-source", + .valid_args = valid_args, .prepare = module_tunnel_source_prepare, .load = module_tunnel_source_load, .unload = module_tunnel_source_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-virtual-sink.c b/src/modules/module-protocol-pulse/modules/module-virtual-sink.c index 66e196169..c69026d2f 100644 --- a/src/modules/module-protocol-pulse/modules/module-virtual-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-virtual-sink.c @@ -34,6 +34,17 @@ static const char *const pulse_module_options = "use_volume_sharing= " "force_flat_volume= "; +static const struct module_args valid_args[] = { + { "sink_name", "name for the sink", }, + { "sink_properties", "properties for the sink", }, + { "master", "name of sink to filter", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { "use_volume_sharing", "yes or no", }, + { "force_flat_volume", "yes or no", }, + { NULL, } +}; + #define NAME "virtual-sink" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -192,6 +203,7 @@ out: DEFINE_MODULE_INFO(module_virtual_sink) = { .name = "module-virtual-sink", + .valid_args = valid_args, .prepare = module_virtual_sink_prepare, .load = module_virtual_sink_load, .unload = module_virtual_sink_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-virtual-source.c b/src/modules/module-protocol-pulse/modules/module-virtual-source.c index da6947e45..eda8b59fe 100644 --- a/src/modules/module-protocol-pulse/modules/module-virtual-source.c +++ b/src/modules/module-protocol-pulse/modules/module-virtual-source.c @@ -36,6 +36,18 @@ static const char *const pulse_module_options = "use_volume_sharing= " "force_flat_volume= "; +static const struct module_args valid_args[] = { + { "source_name", "name for the source", }, + { "source_properties", "properties for the source", }, + { "master", "name of source to filter", }, + { "uplink_sink", "name", }, + { "channels", "number of channels", }, + { "channel_map", "channel map", }, + { "use_volume_sharing", "yes or no", }, + { "force_flat_volume", "yes or no", }, + { NULL, } +}; + #define NAME "virtual-source" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -201,6 +213,7 @@ out: DEFINE_MODULE_INFO(module_virtual_source) = { .name = "module-virtual-source", + .valid_args = valid_args, .prepare = module_virtual_source_prepare, .load = module_virtual_source_load, .unload = module_virtual_source_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-x11-bell.c b/src/modules/module-protocol-pulse/modules/module-x11-bell.c index 9ae13d915..e1150d6c0 100644 --- a/src/modules/module-protocol-pulse/modules/module-x11-bell.c +++ b/src/modules/module-protocol-pulse/modules/module-x11-bell.c @@ -28,6 +28,14 @@ static const char *const pulse_module_options = "display= " "xauthority="; +static const struct module_args valid_args[] = { + { "sink", "sink to connect to", }, + { "sample", "the sample to play", }, + { "display", "X11 display", }, + { "xauthority", "X11 Authority", }, + { NULL, } +}; + #define NAME "x11-bell" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -122,6 +130,7 @@ static const struct spa_dict_item module_x11_bell_info[] = { DEFINE_MODULE_INFO(module_x11_bell) = { .name = "module-x11-bell", + .valid_args = valid_args, .prepare = module_x11_bell_prepare, .load = module_x11_bell_load, .unload = module_x11_bell_unload, diff --git a/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c b/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c index b2b3acec9..1b3479a40 100644 --- a/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c +++ b/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c @@ -27,6 +27,11 @@ static const char *const pulse_module_options = "latency_msec= "; +static const struct module_args valid_args[] = { + { "latency_msec", "fixed latency in ms", }, + { NULL, } +}; + #define NAME "zeroconf-discover" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -123,6 +128,7 @@ static int module_zeroconf_discover_prepare(struct module * const module) DEFINE_MODULE_INFO(module_zeroconf_discover) = { .name = "module-zeroconf-discover", + .valid_args = valid_args, .load_once = true, .prepare = module_zeroconf_discover_prepare, .load = module_zeroconf_discover_load,