diff options
Diffstat (limited to 'source/n/bluez/config/rc.bluetooth')
-rw-r--r-- | source/n/bluez/config/rc.bluetooth | 67 |
1 files changed, 56 insertions, 11 deletions
diff --git a/source/n/bluez/config/rc.bluetooth b/source/n/bluez/config/rc.bluetooth index 296c4542..b56fcd10 100644 --- a/source/n/bluez/config/rc.bluetooth +++ b/source/n/bluez/config/rc.bluetooth @@ -1,28 +1,73 @@ #!/bin/sh -bluez_start() { - /usr/sbin/bluetoothd +# /etc/rc.d/rc.bluetooth (based on BLFS script) + +# Populated from /etc/default/bluetooth: +# ACTIVE_HCI_DEVICES_ON_BOOT and SDPTOOL_OPTIONS + +[ -r /etc/default/bluetooth ] && . /etc/default/bluetooth + +start_hci_dev() { + for dev in ${ACTIVE_HCI_DEVICES_ON_BOOT} ; do + hciconfig $dev up > /dev/null 2>&1 + done +} + +run_sdptool() { + # Declaring IFS local in this function, removes the need to save/restore it + local IFS option + test -x /usr/bin/sdptool || return 1 + IFS=";" + for option in ${SDPTOOL_OPTIONS}; do + IFS=" " + /usr/bin/sdptool $option > /dev/null 2>&1 + done +} + +start_uarts() { + [ -r /etc/bluetooth/uart.conf ] || return + grep -v '^[[:space:]]*(#|$)' /etc/bluetooth/uart.conf | while read i; do + /usr/bin/hciattach $i > /dev/null 2>&1 + done +} + +stop_uarts() { + killall /usr/bin/hciattach > /dev/null 2>&1 +} + +start() { + if [ -d /sys/class/bluetooth ]; then + # Start as background process and assume OK + echo -n "Starting Bluetooth services: bluetoothd " + /usr/sbin/bluetoothd & + echo -n "hciconfig " + start_hci_dev + echo -n "sdptool " + run_sdptool + echo "hciattach" + start_uarts + fi } -bluez_stop() { - udevadm trigger --subsystem-match=bluetooth --action=remove - pkill -TERM bluetoothd 1>/dev/null 2>/dev/null +stop() { + stop_uarts + killall /usr/sbin/bluetoothd > /dev/null 2>&1 } -case "$1" in +case "${1}" in start) - bluez_start + start ;; stop) - bluez_stop + stop ;; restart) - bluez_stop + stop sleep 1 - bluez_start + start ;; *) - printf "Usage: $N {start|stop|restart}\n" + echo "Usage: ${0} {start|stop|restart}" exit 1 ;; esac |