tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

/etc/rc.d/bluetooth



Hi

People have said in the past that the Bluetooth support is too complicated
to start up, in that you need too much knowledge of how it works. (I do
agree, though note that many services are like that, its just that those
people are usually experts at network and RAID setup already :)

Anyway, I wrote a /etc/rc.d/bluetooth startup script that combines
functionality and sets up the controllers with sensible useful defaults,
so that setting just "bluetooth=YES" should be enough to get you going..

comments, before I start obsoleting the complex methods?

iain

#!/bin/sh
#
# $NetBSD: bluetooth$
#

# PROVIDE: bluetooth
# REQUIRE: DAEMON
# BEFORE:  LOGIN

$_rc_subr_loaded . /etc/rc.subr

name="bluetooth"
rcvar=${name}
start_cmd="bluetooth_start"
stop_cmd="bluetooth_stop"

# defaults (can be overridden by rc.conf)
btattach_cmd="/usr/sbin/btattach"
btattach_conf="/etc/bluetooth/btattach.conf"
btconfig_cmd="/usr/sbin/btconfig"
bthcid_cmd="/usr/sbin/bthcid"
bthcid=YES
btdevctl_cmd="/usr/sbin/btdevctl"
btdevctl_conf="/etc/bluetooth/btdevctl.conf"
sdpd_cmd="/usr/sbin/sdpd"
sdpd=YES

required_files="${btattach_conf} ${btdevctl_conf}"

bluetooth_start()
{
        #
        # attach Bluetooth serial controllers
        #
        while read type tty speed flags; do
                case ${type} in
                \#*|"")
                        continue
                        ;;
                esac

                echo -n " $(basename ${tty})"
                ${btattach_cmd} ${flags} ${type} ${tty} ${speed}
        done < ${btattach_conf}

        #
        # enable Bluetooth controllers.
        #
        # If ${btconfig_devices} is set, it is treated as a list of devices
        # to configure. Otherwise, all available devices will be configured
        #
        # For each device we are configuring, enable it with maximum security
        # settings (not discoverable, not connectable, auth and encryption
        # required for all connections), relaxed link policy settings and
        # the link master role, set a class of device for Computer, then apply
        # any options from the 'btconfig_<dev>' or 'btconfig_args' variables
        # on top of settings relaxing the security requirements, so that these
        # can be overridden (btconfig parses all command line options before
        # acting)
        #
        for dev in ${btconfig_devices:-$(${btconfig_cmd} -l)}; do
                echo -n " ${dev}"
                eval args=\${btconfig_${dev}:-\${btconfig_args}}
                ${btconfig_cmd} ${dev} enable -iscan -pscan auth encrypt
                ${btconfig_cmd} ${dev} switch hold sniff park master
                ${btconfig_cmd} ${dev} class 0x000100
                ${btconfig_cmd} ${dev} iscan pscan -auth -encrypt ${args}
        done

        #
        # start Bluetooth Link Key/PIN Code manager
        #
        if checkyesno bthcid; then
                echo -n " bthcid"
                ${bthcid_cmd} ${bthcid_flags}
        fi

        #
        # attach local Bluetooth drivers
        #
        while read -r service addr dev junk; do
                case ${service} in
                \#*|"")
                        continue
                        ;;
                esac

                if [ -z ${dev} -o ${junk} ]; then
                        echo "${name}: invalid entry"
                        return 1
                fi

                echo -n " ${addr}/${service}"
                ${btdevctl_cmd} -A -a ${addr} -d ${dev} -s ${service}
        done < ${btdevctl_conf}

        #
        # start Bluetooth Service Discovery server
        #
        if checkyesno sdpd; then
                echo -n " sdpd"
                ${sdpd_cmd} ${sdpd_flags}
        fi

        echo "."
}

bluetooth_stop()
{
        #
        # disable Bluetooth controllers, detaching local Bluetooth drivers
        #
        for dev in ${btconfig_devices:-$(${btconfig_cmd} -l)}; do
                echo -n " ${dev}"
                ${btconfig_cmd} ${dev} disable
        done

        #
        # halt Service Discovery server, Link Key/PIN Code manager,
        # and detach Bluetooth serial controllers
        #
        p1=$(check_pidfile /var/run/bthcid.pid ${bthcid_cmd})
        p2=$(check_process ${sdpd_cmd})
        p3=$(check_process ${btattach_cmd})
        if [ -n "${p1}${p2}${p3}" ]; then
                for pid in ${p1} ${p2} ${p3}; do
                        kill ${sig_stop} ${pid}
                done
                wait_for_pids ${p1} ${p2} ${p3}
        fi

        echo "."
}

load_rc_config ${name}
run_rc_command "$1"


Home | Main Index | Thread Index | Old Index