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