打开蓝牙就是把按钮拔过去,最简单的理解就是上电
linux蓝牙上电直接
echo 0 > /sys/class/rfkill/rfkill0/state sleep 2 echo 1 > /sys/class/rfkill/rfkill0/state sleep 2
还是在start_up上面
红框意思差不多就是
echo 0 > /sys/class/rfkill/rfkill0/state
echo 1 > /sys/class/rfkill/rfkill0/state
经常需要延时才比较稳定一些,模组的硬件要求
echo 0 > /sys/class/rfkill/rfkill0/state
sleep 2
echo 1 > /sys/class/rfkill/rfkill0/state
看看vendor->send_command
hci_layer.c->vendor.c->bt_vendor_rtk.c
这里就是调用了vendor的普通接口,vendor有两个接口,一个是普通接口,一个是回调接口主要在hardware.c
rfkill主要就是在vendor的普通接口
bt_vendor_rtk.c中的普通接口的op命令
通过调用upio.c的upio_set_bluetooth_power来控制引脚电平,所以你不用外加延时了
看看upio_set_bluetooth_power
进去upio.c
思路就是
拿到rfkill 的patch,拿到&buffer, buffer就是0或者1
通过write (fd ,&buffer,1) 写一个长度把0或者1写进去
和这个echo 0 > /sys/class/rfkill/rfkill0/state
是一样的,同样是下这个命令
所以在hci_module start_up的时候,通过vendor下命令的方式,下发命令,和linux的方式是一样的
echo 0 > /sys/class/rfkill/rfkill0/state
delay xxx
echo 1 > /sys/class/rfkill/rfkill0/state
最后说一下那个延时是蓝牙经常需要调的地方,特别是压力测试,经常需要把时间调大,或者硬件不稳,也需要把时间调大,一般出现问题后直接丢个sleep 5秒看看再说
第五篇再说说bt rfkill驱动,里面还有唤醒引脚各种