安卓4.1: bluetooth之power on流程

3890阅读 0评论2012-10-18 vouloir_pouvoir
分类:LINUX

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代码
上一篇:安卓4.1: input系统从frameworks到kernel
下一篇:安卓4.1: bluetooth之enable流程(hal和kernel)