蓝牙代码基本结构分析
http://blog.csdn.net/fuyajun01/article/details/46273331
Android BlueDroid(二):BlueDroid蓝牙开启过程init
http://blog.csdn.net/xubin341719/article/details/40393285
Settings
BluetoothSettings.java
onResume(updateContent())
updateContent(
mMyDevicePreference.setSummary(res.getString(
R.string.bluetooth_is_visible_message,
bidiFormatter.unicodeWrap(mLocalAdapter.getName())));
)
frameworks/base/packages/settingslib/src/com/android/settingslib/bluetooth
LocalBluetoothAdapter.java
getName()
BluetoothAdapter.java
getName()
frameworks/base/services/core/java/com/android/server
BluetoothManagerService.java
getName( IBluetooth.getName(); )
packages/apps/bluetooth/src/com/android/bluetooth/btservice
AdapterService.java
AdapterServiceBinder.java extends IBluetooth.stub
getName()
AdapterService.java
getName()
packages/apps/bluetooth/src/com/android/bluetooth/btservice
AdapterProperties.java
getName(return mName)
adapterPropertyChangedCallback(
case AbstractionLayer.BT_PROPERTY_BDNAME:
mName = new String(val);
)
packages/apps/bluetooth/jni
com_android_bluetooth_btservice_AdapterService.cpp
classInitNative(
method_adapterPropertyChangedCallback = env->GetMethodID(jniCallbackClass,
"adapterPropertyChangedCallback",
"([I[[B)V");
const char *id = (strcmp(value, "1")? BT_STACK_MODULE_ID : BT_STACK_TEST_MODULE_ID);
err = hw_get_module(id, (hw_module_t const**)&module);
if (err == 0) {
hw_device_t* abstraction;
err = module->methods->open(module, id, &abstraction);
if (err == 0) {
bluetooth_module_t* btStack = (bluetooth_module_t *)abstraction;
sBluetoothInterface = btStack->get_bluetooth_interface();
)
adapter_properties_callback(
if (sJniCallbacksObj) {
callbackEnv->CallVoidMethod(sJniCallbacksObj, method_adapterPropertyChangedCallback, types,
props);
}
)
static bt_callbacks_t sBluetoothCallbacks = {
sizeof(sBluetoothCallbacks),
adapter_state_change_callback,
adapter_properties_callback,
remote_device_properties_callback,
device_found_callback,
discovery_state_changed_callback,
pin_request_callback,
ssp_request_callback,
bond_state_changed_callback,
acl_state_changed_callback,
callback_thread_event,
dut_mode_recv_callback,
le_test_mode_recv_callback,
energy_info_recv_callback,
NULL
};
initNative(
int ret = sBluetoothInterface->init(&sBluetoothCallbacks);
)
system/bt/btif/src
Bluetooth.c
bt_interface_t bluetoothInterface
init(bt_hal_cbacks = callbacks;)
stack_manager_get_interface()->init_stack();
android/system/bt/btif/src/
stack_manager.c
stack_manager_get_interface( return interface;)
static const stack_manager_t interface = {
init_stack,
start_up_stack_async,
shut_down_stack_async,
clean_up_stack,
get_stack_is_running
};
init_stack()
event_init_stack()
btif_init_bluetooth()
start_up_stack_async( thread_post(management_thread, event_start_up_stack, NULL); )
event_start_up_stack( bte_main_enable )
android/system/bt/main/
bte_main.c
bte_main_enable()
android/system/bt/stack/btu/
btu_init.c
BTU_StartUp()
android/system/bt/stack/btu/
btu_task.c
btu_task_start_up()
android/system/bt/btif/src/
btif_core.c
btif_init_bluetooth( btif_transfer_context(btif_jni_associate, 0, NULL, 0, NULL); )
static void btif_jni_associate(UNUSED_ATTR uint16_t event, UNUSED_ATTR char *p_param) {
BTIF_TRACE_DEBUG("%s Associating thread to JVM", __func__);
HAL_CBACK(bt_hal_cbacks, thread_evt_cb, ASSOCIATE_JVM); //Bluetooth.c中的callbacks
}
btif_transfer_context( btif_sendmsg )
btif_init_ok ( BTA_EnableBluetooth(bte_dm_evt); )
Btif_dm.c
bte_dm_evt()
btif_dm_upstreams_evt()
android/system/bt/btif/src/
btif_storage.c
btif_storage_load_bonded_devices()
btif_storage_get_adapter_property()
android/system/bt/btif/src/
Btif_dm.c
btif_dm_get_adapter_property()
android/system/bt/btif/src/btif_dm.c:90:#define PROPERTY_PRODUCT_MODEL "ro.product.model"
btif_get_default_local_name( osi_property_get(PROPERTY_PRODUCT_MODEL, prop_model, ""); )
android/hardware/libhardware/include/hardware/bluetooth.h:34:#define BT_STACK_MODULE_ID "bluetooth"
android/hardware/libhardware/include/hardware/bt_sdp.h:19:#include "bluetooth.h"
android/hardware/libhardware/include/hardware/bt_common_types.h:25:#include "bluetooth.h"
android/hardware/xxx/bt/libbt-vendor/src/hardware.c:60: if (property_set("bluetooth.hciattach", szReqSt) < 0)
android/hardware/xxx/bt/libbt-vendor/src/hardware.c:71: if (property_set("bluetooth.hciattach", szReqSt) < 0)
android/hardware/xxx/bt/libbt-vendor/src/bt_vendor_xxx.c:94:static const char SERVICE_PROP_NAME[] = "bluetooth.hsic_ctrl";
ubuntu-server:~$ grep -rsn "bluetooth_module_t" android/hardware/
android/hardware/libhardware/include/hardware/bluetooth.h:615:typedef bluetooth_device_t bluetooth_module_t;
ubuntu-server:~$ grep -rsn "bluetooth_device_t" android/hardware/
android/hardware/libhardware/include/hardware/bluetooth.h:613:} bluetooth_device_t;
android/hardware/libhardware/include/hardware/bluetooth.h:615:typedef bluetooth_device_t bluetooth_module_t;
android/system/bt/btif/src/bluetooth.c:596:const bt_interface_t* bluetooth__get_bluetooth_interface ()
-------------------------------------------------------
Bluedroid中btif_default_local_name是没初始化的,就会检测BTM_DEF_LOCAL_NAME是否定义了,若定义了,就会使用BTM_DEF_LOCAL_NAME定义的名称。如果BTM_DEF_LOCAL_NAME没定义,就会使用PROPERTY_PRODUCT_MODEL(ro.product.model)属性的定义。
BTM_DEF_LOCAL_NAME在bluedroid中定义如下:
android\external\bluetooth\bluedroid\include\bt_target.h
#ifndef BTM_DEF_LOCAL_NAME
#define BTM_DEF_LOCAL_NAME ""
#endif
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
但在这之前,就有一个地方定义了BTM_DEF_LOCAL_NAME,所以该处定义不起作用,BTM_DEF_LOCAL_NAME定义在:
Android\device\generic\common\bluetooth\bdroid_buildcfg.h
#define BTM_DEF_LOCAL_NAME "Android Bluedroid"
- 1
- 2
- 1
- 2
这也就是为什么android默认的蓝牙名称为”Android Bluedroid”。