安卓蓝牙启动(第四篇)

打开蓝牙就是把按钮拔过去,最简单的理解就是上电

linux蓝牙上电直接

echo 0 > /sys/class/rfkill/rfkill0/state

sleep 2

echo 1 > /sys/class/rfkill/rfkill0/state

sleep 2
 

这样就可以

 

android的咋个说

还是在start_up上面

 

安卓蓝牙启动(第四篇)_第1张图片

安卓蓝牙启动(第四篇)_第2张图片

 

红框意思差不多就是

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

安卓蓝牙启动(第四篇)_第3张图片

hci_layer.c->vendor.c->bt_vendor_rtk.c

这里就是调用了vendor的普通接口,vendor有两个接口,一个是普通接口,一个是回调接口主要在hardware.c

rfkill主要就是在vendor的普通接口

 

安卓蓝牙启动(第四篇)_第4张图片

 

 

bt_vendor_rtk.c中的普通接口的op命令

通过调用upio.c的upio_set_bluetooth_power来控制引脚电平,看到没有,是有延时的喔,所以你不用外加延时了

 

看看upio_set_bluetooth_power

进去upio.c

安卓蓝牙启动(第四篇)_第5张图片

安卓蓝牙启动(第四篇)_第6张图片

思路就是

拿到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驱动,里面还有唤醒引脚各种

 

 

 

你可能感兴趣的:(蓝牙)