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 pidfile="${pidpath}/${config}.pid" 80 if [ ! -f "${pidfile}" ]; then 81 warn "not running: ${config}" 82 else 83 pid="$(cat "${pidfile}")" 84 startmsg -n "Stopping virtual_oss config: ${config}: " 85 kill "${pid}" 86 pwait "${pid}" 87 rm -f "${pidfile}" 88 startmsg "done" 89 fi 90 fi 91} 92 93virtual_oss_start() 94{ 95 configs="$1" 96 [ -z "${configs}" ] && configs="${virtual_oss_configs}" 97 for config in ${configs}; do 98 start_instance "${config}" 99 done 100} 101 102virtual_oss_stop() 103{ 104 configs="$1" 105 [ -z "${configs}" ] && configs="${virtual_oss_configs}" 106 for config in ${configs}; do 107 stop_instance "${config}" 108 done 109} 110 111virtual_oss_status() 112{ 113 pids=$(virtual_oss_pids) 114 115 if [ "${pids}" ]; then 116 echo "${name} is running as pid ${pids}." 117 else 118 echo "${name} is not running." 119 return 1 120 fi 121} 122 123run_rc_command "$@" 124