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