HSP Profile注册过程(未完成)
来源:互联网 发布:淘宝怎样卖虚拟物品 编辑:程序博客网 时间:2024/06/10 00:27
当蓝牙初始化完成后,接下来该做的就是注册各种服务了。首先我们来看下hs profile,该服务是用于连接蓝牙耳机。
在HeadsetService.java中,start()函数中,注册了一个HeadsetStateMachine(在诸如a2dp服务中都分别注册了一个状态机)。
private HeadsetStateMachine(HeadsetService context) { mPhonebook = new AtPhonebook(mService, this);//控制电话拨号挂断等 mPhoneState = new HeadsetPhoneState(context, this); ****省略**** initializeNative();//下面看这个 addState(mDisconnected); addState(mPending); addState(mConnected); addState(mAudioOn); setInitialState(mDisconnected); }
跟之前一样,initializeNative函数中应该是干正事的地方,com_android_bluetooth_hfp.cpp是他实现的地方,
tatic void initializeNative(JNIEnv *env, jobject object) { if ( (sBluetoothHfpInterface = (bthf_interface_t *) btInf->get_profile_interface(BT_PROFILE_HANDSFREE_ID)) == NULL) { ALOGE("Failed to get Bluetooth Handsfree Interface"); return; } if ( (status = sBluetoothHfpInterface->init(&sBluetoothHfpCallbacks)) != BT_STATUS_SUCCESS) { ALOGE("Failed to initialize Bluetooth HFP, status: %d", status); sBluetoothHfpInterface = NULL; return; } mCallbacksObj = env->NewGlobalRef(object);}
根据调用的profile id BT_PROFILE_HANDSFREE_ID,具体使用的是btif_hf.c中的bthfInterface,sBluetoothHfpInterface则是回调的函数。
接下来来看bthfInterface中的init函数,
#if (defined(BTIF_HF_SERVICES) && (BTIF_HF_SERVICES & BTA_HFP_SERVICE_MASK)) btif_enable_service(BTA_HFP_SERVICE_ID);#else btif_enable_service(BTA_HSP_SERVICE_ID);#endif
由于4.4默认只支持hsp,所以只是enable了hsp的service。
void btif_dm_execute_service_request(UINT16 event, char *p_param){ BOOLEAN b_enable = FALSE; bt_status_t status; if (event == BTIF_DM_ENABLE_SERVICE) { b_enable = TRUE; } status = btif_in_execute_service_request(*((tBTA_SERVICE_ID*)p_param), b_enable); if (status == BT_STATUS_SUCCESS) { bt_property_t property; bt_uuid_t local_uuids[BT_MAX_NUM_UUIDS]; /* Now send the UUID_PROPERTY_CHANGED event to the upper layer */ BTIF_STORAGE_FILL_PROPERTY(&property, BT_PROPERTY_UUIDS, sizeof(local_uuids), local_uuids); btif_storage_get_adapter_property(&property); HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, BT_STATUS_SUCCESS, 1, &property); } return;}
注册过程btif_in_execute_service_request:
bt_status_t btif_in_execute_service_request(tBTA_SERVICE_ID service_id, BOOLEAN b_enable){ /* Check the service_ID and invoke the profile's BT state changed API */ switch (service_id) { case BTA_HFP_SERVICE_ID: case BTA_HSP_SERVICE_ID: { btif_hf_execute_service(b_enable); }break; case BTA_A2DP_SERVICE_ID: { btif_av_execute_service(b_enable); }break; case BTA_HID_SERVICE_ID: { btif_hh_execute_service(b_enable); }break; default: BTIF_TRACE_ERROR1("%s: Unknown service being enabled", __FUNCTION__); return BT_STATUS_FAIL; } return BT_STATUS_SUCCESS;}
0 0
- HSP Profile注册过程(未完成)
- Headset Profile (HSP)
- 账户注册(未完成)
- 记录hibernate 3学习过程中的报错(未完成)
- 记录hibernate 3学习过程中的报错(未完成)
- android APK编译过程(未完成)
- Spring 原理 架构 详解 总结! (看HSP笔记)
- [hsp学习笔记]留言本的创建(第十三讲)
- 一些想法(未完成)
- ADO简介(未完成)
- 初始化(未完成)
- 递归操作(未完成)
- VC学习(未完成)
- 内部类(未完成)
- 括号匹配(未完成)
- (未完成) Bus Pass
- stardict 编译 (未完成)
- 银行系统(未完成)
- BASH中的内置变量
- 配置Jenkins邮件
- Java中Timer的用法
- 文章标题
- 链表的反转问题(Reverse Linked List)
- HSP Profile注册过程(未完成)
- KAFKA学习总结
- 深入理解kafka设计原理
- ACM计算几何推荐
- 关于正则表达式
- PayPal - (REST 框架 PHP) Express Checkout(EC)快捷支付使用说明
- [C++设计模式] composite 组合模式
- jeecms修改后台路径
- android 使用NDK