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}" 27default_unit=$(sysctl -n hw.snd.default_unit) 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 -t vdsp.ctl" 39 40# Set to NO by default. Set it to "YES" to enable virtual_oss. 41: "${virtual_oss_enable:="NO"}" 42 43# List of configurations to use. Default is "dsp". 44: "${virtual_oss_configs:="dsp"}" 45 46# Default (dsp) virtual_oss config. 47: "${virtual_oss_dsp:="${virtual_oss_default_args}"}" 48 49virtual_oss_pids() 50{ 51 pids=$(pgrep -d ' ' ${name}) 52 pids=${pids% } 53 printf '%s\n' "${pids}" 54} 55 56virtual_oss_precmd() 57{ 58 /usr/bin/install -d -m 0755 -o root "${pidpath}" 59} 60 61start_instance() 62{ 63 config="$1" 64 instance_args=$(eval "echo \$virtual_oss_${config}") 65 if [ -z "${instance_args}" ]; then 66 warn "no such config: ${config}" 67 else 68 startmsg -n "Starting virtual_oss config: ${config}: " 69 ${command} \ 70 ${command_args} \ 71 -D "${pidpath}/${config}.pid" \ 72 ${instance_args} 73 startmsg "done" 74 fi 75} 76 77stop_instance() 78{ 79 config="$1" 80 instance_args=$(eval "echo \$virtual_oss_${config}") 81 if [ -z "${instance_args}" ]; then 82 warn "no such config: ${config}" 83 else 84 startmsg -n "Stopping virtual_oss config: ${config}: " 85 kill "$(cat "${pidpath}/${config}.pid")" 86 rm -f "${pidpath}/${config}.pid" 87 startmsg "done" 88 fi 89} 90 91virtual_oss_start() 92{ 93 configs="$1" 94 [ -z "${configs}" ] && configs="${virtual_oss_configs}" 95 for config in ${configs}; do 96 start_instance "${config}" 97 done 98} 99 100virtual_oss_stop() 101{ 102 configs="$1" 103 [ -z "${configs}" ] && configs="${virtual_oss_configs}" 104 for config in ${configs}; do 105 stop_instance "${config}" 106 done 107} 108 109virtual_oss_status() 110{ 111 pids=$(virtual_oss_pids) 112 113 if [ "${pids}" ]; then 114 echo "${name} is running as pid ${pids}." 115 else 116 echo "${name} is not running." 117 return 1 118 fi 119} 120 121run_rc_command "$@" 122