分享

安卓4.1: bluetooth之power on流程

 写意人生 2014-09-26

Bluetooth服务(以及蓝牙的A2DP服务)都是通过SystemServer启动(frameworks/base/services/java/com/android/server/SystemServer.java)

  1. Frameworks层(frameworks/base/core/java/android/server/BluetoothService.java, function: enable())
  2.              |
  3.              | 给蓝牙状态机一个USER_TURN_ON的命令
  4.              |
  5. jni层(frameworks/base/core/jni/android_server_BluetoothService.cpp, function: enableNative())
  6.              |
  7. HAL层(system/bluetooth/bluedroid/bluetooth.c, function: set_bluetooth_power())
  8.              |
  9.              | write to rfkill
  10.              |
  11. kernel层(net/rfkill/rfkill-gpio.c,或者vendor定制的rfkill driver, function: rfkill_gpio_set_power())
rfkill_id在init.rc和bluetooth.c中已经把bluetooth写定为0,即:/sys/class/rfkill/rfkill0/state。匹配的机制是:
  1.   /sys/class/rfkill/rfkill%d/type
  2.   读取内容,与bluetooth比较,如果相同,则返回id,并且给
  3.   /sys/class/rfkill/rfkill%d/state写值(1或者0)以便开关电
这部分具体实现可以参看rfkill的driver代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多