浅谈android蓝牙睡眠机制

         虽然对于linux的一些机制还不是特别了解,但还是想总结下近阶段做的一些工作。

        在我们启动蓝牙的过程中,系统启动中会调用echo 1 > /proc/bluetooth/sleep/proto,并且会把host_wake的pin值拉高。蓝牙此时系统会调用bluesleep_start()这个函数,在这个函数中我们启动了mod_timer这个定时器。并且申请了类型为IRQF_TRIGGER_HIGH的中断函数。此时会相应中断处理函数bluesleep_hostwake_isr,在这个函数中我们会把中断类型反转。其实host_wake这个管脚,不是cpu控制,这个管脚完全是由bt芯片发出去的。它的基本原则是当我们蓝牙芯片不工作的时候,host_wake为1,当我们蓝牙芯片工作的时候这个芯片的管脚置0.

       当蓝牙芯片工作时,会把启动串口。当然在此期间通过h4_recv,会调用定时器。当停止传输文件后,这个bluesleep_start_sleep_timer()会被调用,从而实现蓝牙bt_wake这个管脚能被拉高,从而蓝牙能够真正睡下来。

       大概是以上所谈的工作原理,讲得不清楚的,我们可以再讨论。

你可能感兴趣的:(linux,android,工作,timer,bt,linux)