This file just didn't want to commit in the last batch of bluetooth files.
Approved by: re@
This commit is contained in:
parent
1a63eb31c7
commit
49fbb7180a
267
share/examples/netgraph/bluetooth/rc.bluetooth
Normal file
267
share/examples/netgraph/bluetooth/rc.bluetooth
Normal file
@ -0,0 +1,267 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# rc.bluetooth
|
||||
#
|
||||
# Copyright (c) 2001-2002 Maksim Yevmenkin <m_evmenkin@yahoo.com>
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# $Id: rc.bluetooth,v 1.5 2003/03/30 04:03:16 max Exp $
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
logger="/usr/bin/logger -i -s -p user.err"
|
||||
kldstat="/sbin/kldstat"
|
||||
kldload="/sbin/kldload"
|
||||
sysctl="/sbin/sysctl"
|
||||
ngctl="/usr/sbin/ngctl"
|
||||
hcseriald="/usr/sbin/hcseriald"
|
||||
hccontrol="/usr/sbin/hccontrol"
|
||||
hci_debug_level=3
|
||||
l2cap_debug_level=3
|
||||
|
||||
##############################################################################
|
||||
# Display usage info
|
||||
##############################################################################
|
||||
|
||||
usage()
|
||||
{
|
||||
script=$1
|
||||
shift
|
||||
|
||||
echo "Usage:"
|
||||
echo " ${script} start device"
|
||||
echo "or"
|
||||
echo " ${script} stop device"
|
||||
} # usage
|
||||
|
||||
##############################################################################
|
||||
# Verify and load if required kernel module
|
||||
##############################################################################
|
||||
|
||||
load_module()
|
||||
{
|
||||
module=$1
|
||||
shift
|
||||
|
||||
${kldstat} -n ${module} > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
${kldload} ${module} > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
${logger} "Failed to load ${module}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
} # load_module
|
||||
|
||||
##############################################################################
|
||||
# Setup Bluetooth stack. Create and connect nodes
|
||||
##############################################################################
|
||||
|
||||
setup_stack()
|
||||
{
|
||||
dev=$1
|
||||
shift
|
||||
hook=$1
|
||||
shift
|
||||
|
||||
# Setup HCI
|
||||
${ngctl} mkpeer ${dev}: hci ${hook} drv || exit 1
|
||||
${ngctl} name ${dev}:${hook} ${dev}hci || exit 1
|
||||
${ngctl} msg ${dev}hci: set_debug ${hci_debug_level} || exit 1
|
||||
|
||||
# Setup L2CAP
|
||||
${ngctl} mkpeer ${dev}hci: l2cap acl hci || exit 1
|
||||
${ngctl} name ${dev}hci:acl ${dev}l2cap || exit 1
|
||||
${ngctl} msg ${dev}l2cap: set_debug ${l2cap_debug_level} || exit 1
|
||||
|
||||
# Connect HCI node to the Bluetooth sockets layer
|
||||
${ngctl} connect ${dev}hci: btsock_hci_raw: raw ${dev}raw || exit 1
|
||||
|
||||
# Connect L2CAP node to Bluetooth sockets layer
|
||||
${ngctl} connect ${dev}l2cap: btsock_l2c_raw: ctl ${dev}ctl || exit 1
|
||||
${ngctl} connect ${dev}l2cap: btsock_l2c: l2c ${dev}l2c || exit 1
|
||||
|
||||
# Initilalize HCI node
|
||||
${hccontrol} -n ${dev}hci reset || exit 1
|
||||
# ${hccontrol} -n ${dev}hci read_local_name || exit 1
|
||||
${hccontrol} -n ${dev}hci read_bd_addr || exit 1
|
||||
${hccontrol} -n ${dev}hci read_local_supported_features || exit 1
|
||||
${hccontrol} -n ${dev}hci read_buffer_size || exit 1
|
||||
${hccontrol} -n ${dev}hci write_scan_enable 3 || exit 1
|
||||
# ${hccontrol} -n ${dev}hci read_scan_enable || exit 1
|
||||
|
||||
# We need to write class of device here because of Service Class
|
||||
# Filtering. For more info on Class_Of_Device field see
|
||||
# http://www.bluetooth.org/assigned-numbers/baseband.htm
|
||||
|
||||
${hccontrol} -n ${dev}hci write_class_of_device ff:01:0c || exit 1
|
||||
|
||||
# Enable this if you have trouble with accepting incomming connections.
|
||||
# By default we will try to perform role switch and become Master on
|
||||
# incomming connection (if local device supports it). Some devices
|
||||
# do not support role switch and thus incomming connection from such
|
||||
# devices will fail.
|
||||
|
||||
# ${hccontrol} -n ${dev}hci write_node_role_switch 0 || exit 1
|
||||
|
||||
${hccontrol} -n ${dev}hci change_local_name "`uname -n` (${dev})" || exit 1
|
||||
${hccontrol} -n ${dev}hci initialize || exit 1
|
||||
} # setup_stack
|
||||
|
||||
##############################################################################
|
||||
# Shutdown Bluetooth stack. Destroy all nodes
|
||||
##############################################################################
|
||||
|
||||
shutdown_stack()
|
||||
{
|
||||
dev=$1
|
||||
shift
|
||||
|
||||
${ngctl} shutdown ${dev}hci: > /dev/null 2>&1
|
||||
${ngctl} shutdown ${dev}l2cap: > /dev/null 2>&1
|
||||
echo -n ""
|
||||
} # shutdown_stack
|
||||
|
||||
##############################################################################
|
||||
# Start here
|
||||
##############################################################################
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
usage $0
|
||||
exit 1
|
||||
fi
|
||||
|
||||
startstop=$1
|
||||
shift
|
||||
dev=$1
|
||||
shift
|
||||
|
||||
case ${startstop} in
|
||||
[Ss][Tt][Aa][Rr][Tt])
|
||||
# Load required kernel modules
|
||||
load_module ng_bluetooth
|
||||
load_module ng_hci
|
||||
load_module ng_l2cap
|
||||
load_module ng_btsocket
|
||||
|
||||
$0 stop ${dev} || exit 1
|
||||
|
||||
# Try to figure out device type by looking at device name
|
||||
case ${dev} in
|
||||
# sioX - serial/UART Bluetooth device
|
||||
sio*)
|
||||
hook="hook"
|
||||
|
||||
load_module ng_h4
|
||||
|
||||
# Obtain unit number from device.
|
||||
unit=`expr ${dev} : 'sio\([0-9]\{1,\}\)'`
|
||||
if [ -z ${unit} ]; then
|
||||
${logger} "Unable to get sio unit number: ${dev}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
${hcseriald} -f /dev/cuaa${unit} -n ${dev}
|
||||
sleep 1 # wait a little bit
|
||||
|
||||
if [ ! -f "/var/run/hcseriald.${dev}.pid" ]; then
|
||||
${logger} "Failed to setup ${dev}"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
# 3Com Bluetooth Adapter 3CRWB60-A
|
||||
btccc*)
|
||||
hook="hook"
|
||||
|
||||
# Obtain unit number from device.
|
||||
unit=`expr ${dev} : 'btccc\([0-9]\{1,\}\)'`
|
||||
if [ -z ${unit} ]; then
|
||||
${logger} "Unable to get bt3c unit number: ${dev}"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
# USB Bluetooth adapters
|
||||
ubt*)
|
||||
hook="hook"
|
||||
|
||||
# Obtain unit number from device.
|
||||
unit=`expr ${dev} : 'ubt\([0-9]\{1,\}\)'`
|
||||
if [ -z ${unit} ]; then
|
||||
${logger} "Unable to get ubt unit number: ${dev}"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
# Unknown
|
||||
*)
|
||||
${logger} "Unsupported device: ${dev}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# ${sysctl} net.bluetooth.hci.sockets.raw.debug_level=9
|
||||
# ${sysctl} net.bluetooth.l2cap.sockets.raw.debug_level=9
|
||||
# ${sysctl} net.bluetooth.l2cap.sockets.seq.debug_level=9
|
||||
# ${sysctl} net.bluetooth.rfcomm.sockets.stream.debug_level=9
|
||||
|
||||
setup_stack ${dev} ${hook}
|
||||
;;
|
||||
|
||||
[Ss][Tt][Oo][Pp])
|
||||
# Try to figure out device type by looking at device name
|
||||
case ${dev} in
|
||||
# sioX - serial/UART Bluetooth device
|
||||
sio*)
|
||||
if [ -f "/var/run/hcseriald.${dev}.pid" ]; then
|
||||
kill `cat /var/run/hcseriald.${dev}.pid`
|
||||
sleep 1 # wait a little bit
|
||||
fi
|
||||
;;
|
||||
|
||||
# 3Com Bluetooth Adapter 3CRWB60-A
|
||||
btccc*)
|
||||
;;
|
||||
|
||||
# USB Bluetooth adapters
|
||||
ubt*)
|
||||
;;
|
||||
|
||||
# Unknown
|
||||
*)
|
||||
${logger} "Unsupported device: ${dev}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
shutdown_stack ${dev}
|
||||
;;
|
||||
|
||||
*)
|
||||
usage $0
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
Loading…
Reference in New Issue
Block a user