summaryrefslogtreecommitdiffstats
path: root/source/n/bluez/config/rc.bluetooth
blob: b56fcd101106d060c4e3055259820c9336a562ed (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/sh

# /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
}

stop() {
  stop_uarts
  killall /usr/sbin/bluetoothd > /dev/null 2>&1
}

case "${1}" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    sleep 1
    start
    ;;
  *)
    echo "Usage: ${0} {start|stop|restart}"
    exit 1
    ;;
esac