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