Files
2026-08-24 10:03:24 +08:00

252 lines
4.2 KiB
Bash

#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2026 AMLOGIC
configure_file="/etc/bluetooth/main.conf"
Debug_script="/etc/aml-wifi-debug.d/bt_debug.sh"
env_file="/etc/aml-wifi-debug.d/bt.env"
if [ -f "$env_file" ]; then
source "$env_file"
fi
Debug=${Debug:-1}
if [ -f "$Debug_script" ]; then
echo "Source debug script: $Debug_script"
source "$Debug_script"
else
echo "Debug script not found, define empty debug functions"
fi
for func in bt_capture_hci bt_capture_kernel_log bt_capture_system; do
type "$func" &>/dev/null || eval "$func() { :; }"
done
function hci0_rfkill()
{
for f in $(ls /sys/class/rfkill/rfkill*/name 2> /dev/null); do
rfk_name=$(cat $f)
if [ $rfk_name = "hci0" ];then
rfkill unblock ${f//[^0-9]/}
fi
done
}
function get_device_from_conf()
{
if [ -f $configure_file ];then
str=`grep "Device=" $configure_file`
if [ ! $str = "" ];then
device=`echo $str | awk -F = '{print $2}'`
else
echo No device defined in confirue file
fi
else
echo "No configure file"
fi
}
function get_tty_from_conf()
{
if [ -f $configure_file ]; then
str=`grep "TTY=" $configure_file`
if [ ! $str = "" ]; then
tty=`echo $str | awk -F = '{print $2}'`
else
echo No TTY defined in configuration file
fi
else
echo "No configuration file"
fi
}
rtk_bdaddr=/opt/bdaddr
aml_bdaddr=/sys/module/kernel/parameters/btmac
realtek_bt_init()
{
if [[ x$(cat $aml_bdaddr) != x && x$(cat $aml_bdaddr) != x"(null)" ]];then
cat $aml_bdaddr > $rtk_bdaddr
else
rm -f $rtk_bdaddr
fi
local cnt=5
while [ $cnt -gt 0 ]; do
lsusb | grep "0bda:"
if [ $? -eq 1 ]; then
echo "checking lsusb... $cnt"
usleep 100000
cnt=$(($cnt-1))
else
modprobe rtk_btusb
break
fi
done
if [ $cnt -eq 0 ]; then
modprobe rtk_btuart
usleep 500000
rtk_hciattach -n -s 115200 "$tty" rtk_h5 &
fi
}
qca_bt_init()
{
modprobe hci_uart
usleep 300000
hciattach -s 115200 "$tty" qca
}
aml_bt_init()
{
if lsmod | grep -Eq '^(aml_sdio|w1u_comm|w2_comm|w2l_comm)\b'; then
echo "needed ko loaded"
else
echo "wait amlogic comm ko load"
exit 1
fi
if [ $Debug -eq 1 ]; then
aml_hciattach -d 1
else
aml_hciattach -d 0
fi
}
brcm_bt_init()
{
brcm_patchram_plus --enable_hci --baudrate 2000000 --use_baudrate_for_download --patchram /etc/bluetooth/BCM4359C0SR2.hcd /dev/ttyS1 --no2bytes &
}
service_down()
{
echo "|--stop bluez service--|"
#killall bluetoothd
### sh bluez-alsa.sh stop
}
service_up()
{
echo "|--start bluez service--|"
# grep "Debug=1" $configure_file > /dev/null
# if [ $? -eq 0 ]; then
# echo "|--bluetoothd debug log on--|"
# /usr/libexec/bluetooth/bluetoothd -n -d &
# else
# /usr/libexec/bluetooth/bluetoothd -n &
# fi
### sh bluez-alsa.sh start
}
Blue_start()
{
echo "|--bluez: device = $device mode = $mode--|"
# echo 0 > /sys/class/rfkill/rfkill0/state
# usleep 500000
# echo 1 > /sys/class/rfkill/rfkill0/state
echo
echo "|-----start bluez----|"
if [ $device = "rtk" ];then
realtek_bt_init
elif [ $device = "qca" ];then
qca_bt_init
elif [ $device = "aml" ];then
aml_bt_init
elif [ $device = "bcm" ];then
brcm_bt_init
else
modprobe hci_uart
usleep 300000
hciattach -s 115200 /dev/ttyS1 any
fi
local cnt=10
while [ $cnt -gt 0 ]; do
hciconfig hci0 2> /dev/null
if [ $? -eq 1 ];then
echo "checking hci0 ......."
sleep 1
cnt=$((cnt - 1))
else
break
fi
done
if [ $cnt -eq 0 ];then
echo "hci0 bring up failed!!!"
## exit 0
fi
#hci0_rfkill
echo "|-----bluez is ready----|"
if [ $Debug -eq 1 ]; then
bt_capture_hci $device
bt_enable_kernel_log
fi
service_up
}
Blue_stop()
{
echo -n "Stopping bluez"
service_down
killall rtk_hciattach
killall hciattach
killall aml_hciattach
killall brcm_patchram_plus
#rmmod sdio_bt
#rmmod hci_uart
#rmmod rtk_btusb
#sleep 2
#echo 0 > /sys/class/rfkill/rfkill0/state
#echo
echo "|-----bluez is shutdown-----|"
}
# bt init start
echo "bt debug mode:$Debug"
if [ $2 ];then
mode=$2
else
mode="sink"
fi
if [ $3 ];then
device=$3
else
get_device_from_conf
fi
if [ $4 ];then
tty=$4
else
get_tty_from_conf
fi
case "$1" in
start)
Blue_start
;;
restart)
Blue_stop
Blue_start
;;
stop)
Blue_stop
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit $?