Chinaunix首页 | 论坛 | 博客
  • 博客访问: 183935
  • 博文数量: 13
  • 博客积分: 265
  • 博客等级: 二等列兵
  • 技术积分: 402
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-16 17:19
文章分类

全部博文(13)

文章存档

2014年(2)

2013年(2)

2012年(9)

我的朋友

分类: LINUX

2012-10-18 18:26:01

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代码
阅读(3788) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~