Fix issue where kernel 6.6 based BT address was set to AA:AA:AA:AA:AA:AA
[platform/adaptation/bluetooth-firmware-bcm.git] / scripts / bt-dev-start-rpi3.sh
1 #!/bin/sh
2 PATH=/bin:/usr/bin:/sbin:/usr/sbin
3
4 # Script for registering Broadcom UART BT device
5 BT_UART_DEVICE=/dev/ttyAMA0
6 BT_CHIP_TYPE=bcm43xx
7 BT_MAC_FILE=/opt/etc/.bd_addr
8
9 HCI_CONFIG=/usr/bin/hciconfig
10 HCI_ATTACH=/usr/bin/hciattach
11
12 if [ ! -e "$BT_UART_DEVICE" ]
13 then
14         mknod $BT_UART_DEVICE c 204 64
15 fi
16
17 GEN_BDADDR(){
18         #echo "BT Mac addr generates randomly."
19         #MAC_PRE=$(echo "00:02:")
20         #MAC_POST=$(/usr/bin/openssl rand -hex 4 | sed 's/\(..\)/\1:/g; s/.$//')
21         #BT_MAC=$MAC_PRE$MAC_POST
22         echo "Generates BT MAC address based on serial number."
23         SERIAL=`cat /proc/device-tree/serial-number | cut -c9-`
24         B1=`echo $SERIAL | cut -c3-4`
25         B2=`echo $SERIAL | cut -c5-6`
26         B3=`echo $SERIAL | cut -c7-8`
27         BT_MAC=`printf b8:27:eb:%02x:%02x:%02x $((0x$B1 ^ 0xaa)) $((0x$B2 ^ 0xaa)) $((0x$B3 ^ 0xaa))`
28 }
29
30 PIVERSION=`cat /proc/device-tree/model | awk '{print $3}'`
31 PIMODEL=`cat /proc/device-tree/model | awk '{print $5}'`
32 echo "$PIVERSION $PIMODEL"
33
34 if [ "$PIVERSIOM" = "3" ] && [ "$PIMODEL" = "B" ]
35 then
36         echo "RPI3 B model"
37         FLOW_CONTROL=noflow
38         UART_SPEED=460800
39 else
40         echo "RPI3 B+ or RPI4 model"
41         FLOW_CONTROL=flow
42         UART_SPEED=2000000
43 fi
44
45 if [ ! -e "$BT_MAC_FILE" ]
46 then
47         # Set BT address
48         GEN_BDADDR
49         echo $BT_MAC > ${BT_MAC_FILE}
50 else
51         BT_MAC=$(cat ${BT_MAC_FILE})
52 fi
53
54 echo $BT_MAC
55
56 echo "Check for Bluetooth device status"
57 if (${HCI_CONFIG} | grep hci); then
58         echo "Bluetooth device already exist"
59         ${HCI_CONFIG} hci0 up
60 else
61         echo "Attaching Broadcom device"
62         for ((i=0; i<2; i++))
63         do
64                 if ($HCI_ATTACH $BT_UART_DEVICE $BT_CHIP_TYPE $UART_SPEED $FLOW_CONTROL nosleep $BT_MAC -t 5); then
65                         sleep 0.1
66                         ${HCI_CONFIG} hci0 up
67                         break
68                 fi
69         done
70 fi
71
72 if !(${HCI_CONFIG} | grep hci); then
73         echo "Did not attach HCI"
74         exit 1
75 fi
76
77 TIMEOUT=20
78 for ((i=1; i<=$TIMEOUT; i++))
79 do
80         /bin/sleep 0.1
81         if [ $i -eq $TIMEOUT ]
82         then
83                 echo "time expired happen $i"
84                 exit 2
85         fi
86         if (${HCI_CONFIG} | grep UP); then
87                 echo "Bluetooth device is made"
88                 break
89         fi
90         echo "Continue...$i"
91 done
92
93 exit 0