xref: /freebsd/libexec/rc/rc.d/virtual_oss (revision 24e4dcf4ba5e9dedcf89efd358ea3e1fe5867020)
1#!/bin/sh
2
3# PROVIDE: virtual_oss
4# REQUIRE: kld ldconfig
5# BEFORE: LOGIN sndiod
6# KEYWORD: shutdown
7
8. /etc/rc.subr
9
10name="virtual_oss"
11desc="virtual_oss device manager"
12rcvar="${name}_enable"
13
14command="/usr/sbin/${name}"
15command_args="-B"
16
17load_rc_config "$name"
18start_precmd="${name}_precmd"
19start_cmd="${name}_start"
20stop_cmd="${name}_stop"
21status_cmd="${name}_status"
22
23configs=
24pidpath="/var/run/${name}"
25virtual_oss_default_args="\
26	-S \
27	-C 2 \
28	-c 2 \
29	-r 48000 \
30	-b 24 \
31	-s 8ms \
32	-i 8 \
33	-f /dev/dsp \
34	-d dsp \
35	-t vdsp.ctl"
36
37# Set to NO by default. Set it to "YES" to enable virtual_oss.
38: "${virtual_oss_enable:="NO"}"
39
40#  List of configurations to use. Default is "dsp".
41: "${virtual_oss_configs:="dsp"}"
42
43# Default (dsp) virtual_oss config.
44: "${virtual_oss_dsp:="${virtual_oss_default_args}"}"
45
46virtual_oss_pids()
47{
48	pids=$(pgrep -d ' ' ${name})
49	pids=${pids% }
50	printf '%s\n' "${pids}"
51}
52
53virtual_oss_precmd()
54{
55	/usr/bin/install -d -m 0755 -o root "${pidpath}"
56	load_kld cuse
57}
58
59start_instance()
60{
61	config="$1"
62	instance_args=$(eval "echo \$virtual_oss_${config}")
63	if [ -z "${instance_args}" ]; then
64		warn "no such config: ${config}"
65	else
66		startmsg -n "Starting virtual_oss config: ${config}: "
67		${command} \
68			${command_args} \
69			-D "${pidpath}/${config}.pid" \
70			${instance_args}
71		startmsg "done"
72	fi
73}
74
75stop_instance()
76{
77	config="$1"
78	instance_args=$(eval "echo \$virtual_oss_${config}")
79	if [ -z "${instance_args}" ]; then
80		warn "no such config: ${config}"
81	else
82		startmsg -n "Stopping virtual_oss config: ${config}: "
83		kill "$(cat "${pidpath}/${config}.pid")"
84		rm -f "${pidpath}/${config}.pid"
85		startmsg "done"
86	fi
87}
88
89virtual_oss_start()
90{
91	configs="$1"
92	[ -z "${configs}" ] && configs="${virtual_oss_configs}"
93	for config in ${configs}; do
94		start_instance "${config}"
95	done
96}
97
98virtual_oss_stop()
99{
100	configs="$1"
101	[ -z "${configs}" ] && configs="${virtual_oss_configs}"
102	for config in ${configs}; do
103		stop_instance "${config}"
104	done
105}
106
107virtual_oss_status()
108{
109	pids=$(virtual_oss_pids)
110
111	if [ "${pids}" ]; then
112		echo "${name} is running as pid ${pids}."
113	else
114		echo "${name} is not running."
115		return 1
116	fi
117}
118
119run_rc_command "$@"
120