- 博客(220)
- 资源 (76)
- 收藏
- 关注
原创 Android-嵌入式蓝牙 多年蓝牙产品开发学习心路历程分享-A2DP音频流的建立、A2DP播放暂停音乐命令交互、HFP、AVRCP、RFCOMM、OPP、AVDTP
序言当你点进来看到这段话的时候,是不是感觉自己被骗了,哈哈哈,本来想搜索蓝牙某个协议,却成了一大段废话文,但此时,别退出去,如果你是一个牛逼的蓝牙开发者,只是想了解蓝牙某个协议或者知识点,那么直接点击进入我的主页,查看蓝牙相关文章,绝对能满足你的需要。但是,如果你是一个蓝牙新人、才开始学习蓝牙开发,那么请用几分钟看完这篇文章,一定会激励你的蓝牙学习和给你提供一个正确的学习途径,废话少说,直入正题。 PS:本文章将持续更新,内容很长,请及时收藏。一、自我介绍1、工作............
2022-05-08 22:23:12 6933 55
原创 Android 蓝牙 A2dp 听歌卡音?audio数据到a2dp通道流程解析----A2dp流控原理(Acl Flow Control),一文搞懂蓝牙卡音问题处理
一、A2dp卡音问题-环境因素先确认问题概率。(低概率则可能为干扰引起,着重关注高概率/必现卡顿问题) 确认是否是共存场景问题。(WiFi/BT共存,a2dp/hid共存等) 确认BT RF是否正常。(NV错误导致卡顿问题) WIFI OTA (WIFI天线和芯片是一起的)指标满足要求。二、传统蓝牙HCI流控(flowcontrol)流控制用于在主机和主机控制器之间,避免传送到主机控制器的未应答远程设备的 ACL 数据溢出主机控制器数据缓冲区。主机(蓝牙协议栈)负责管理主机控制器(蓝牙芯片.
2022-04-26 22:48:19 5642 12
原创 android蓝牙a2dp协议流程分析(十)--bte_av_media_callback回调赋值
在这个函数中,组装了消息,向btu_task发送BTA_AV_API_REGISTER_EVT事件,同时将我们的回调函数赋值给p_buf->p_app_data_cback,btu_task进程调用对应的处理函数来处理接收到的事件。最后,btu_task进程经过处理,找到bta_av_api_register来处理register事件,在里面我们看到,创建了scb通道句柄,之前也说过,这个句柄是单例的, 也就是生命周期内只有一个,然后进行赋值操作。
2024-02-04 09:03:24 489
原创 android蓝牙a2dp协议流程分析(十)--Audio和蓝牙的交互
Audio将要播放的音频数据交给蓝牙协议栈,也就是我们a2dp来进行播放,那么是通过什么将Audio和a2dp连接起来的呢,就是我们的media进程,专门用于发送和接收media数据,在media线程创建了socket,管理socket的文件为UIPC,所以在我们a2dp初始化过程中,使用btif_a2dp_start_media_task函数创建了media线程。在这里,我们创建media线程,在media线程了创建了控制socket,用于Audio和蓝牙之间进行命令的交互,至于数据的通道在后面会说到。
2024-02-02 16:11:02 321
原创 android蓝牙a2dp协议流程分析(九.2)--avdtp协议流程详解之start
btif层状态机的新状态为start,所以调用btif层事件处理函数,也就是btif_av_state_started_handler函数来处理BTIF_SM_ENTER_EVT事件,最终调用到btif_report_audio_state函数。bta_av_proc_stream_evt函数中进行事件转换,将avdt事件转换为bta层事件,发送给到btu_task进程,根据事件类型,我们知道处理该事件的是bta_av_ssm_execute函数。
2024-02-02 16:04:08 219
原创 android蓝牙a2dp协议流程分析(九.1)--avdtp协议流程详解之start
在这个函数中将我们btif层状态机的状态正式切换为open状态,然后向新状态的btif状态机发送BTIF_SM_ENTER_EVT事件,open状态下的btif层事件处理函数是btif_av_state_opened_handler函数,由于这个函数对事件BTIF_SM_ENTER_EVT没有做什么处理,所以我们这里省略。在转换数组中,看到将我们发送的AVDT_OPEN_CFM_EVT事件转换成BTA_AV_STR_OPEN_OK_EVT事件。根据动作选择对应的事件处理函数执行。
2024-02-02 15:54:56 146
原创 android蓝牙a2dp协议流程分析(八.3)--avdtp协议流程详解
当我们调用L2CA_ConnectReq函数向对端蓝牙设备发送连接请求命令建立连接后,对端蓝牙设备返回连接请求的响应消息,这时我们调用之前已经注册的avdt_l2c_connect_cfm_cback回调函数来进行处理,之前也提到过,l2cap通道是先建立,后配置,所以在完成通道的建立以后,调用L2CA_ConfigReq函数来完成l2cap通道的配置。在这个函数中,由于我们现在已经是媒体通道了,所以调用avdt_scb_event函数向scb状态机发送AVDT_SCB_TC_OPEN_EVT事件。
2024-02-02 15:27:01 71
原创 android蓝牙a2dp协议流程分析(八.2)--avdtp协议流程详解
avdt_ccb_event已经介绍过多次,当前ccb状态机的状态为open,所以我们直接来到avdt_ccb_st_open数组中,我们传递过来的event事件为UL_OPEN_EVT,对应要执行的处理函数对应的动作为AVDT_CCB_CHK_TIMER,查阅了一下,这个函数没有什么作用,而ccb状态的下一个状态还是open,没有改变,所有整个这个向ccb状态机发送UL_OPEN_EVT事件没有做什么有用的事件。来到scb的状态转换表中,avdt scb状态机的初始状态为idle。
2024-02-02 15:16:43 92
原创 android蓝牙a2dp协议流程分析(八.1)--avdtp协议流程详解
在这个响应处理函数中,我们调用了之前传递的回调处理函数,也就是bta_av_dt_cback函数集合,也就是里面的bta_av_stream0_cback回调函数,传递的事件为AVDT_GETCAP_CFM_EVTc。当btu_task进程收到bta层的事件后,调用bta_av_hdl_event函数来进行处理,根据事件类型不同,调用不同处理函数,在这里,我们调用的是bta_av_ssm_execute函数来处理。
2024-02-02 15:11:38 117
原创 android蓝牙a2dp协议流程分析(八)--stream control block回调
来到AVDT_CreateStream函数中,在这个函数中为stream control block申请内存空间,传递了我们从bta_av_api_register函数中传递过来的参数cs,这样就把这个参数继续向下进行传输。再avdt_scb_alloc函数中,我们看到了最想看到的,把我们从bta_av_api_register函数中传递的cs参数赋值给到了p_scb的cs成员。在我们后面使用到p_scb->cs.p_ctrl_cback的回调函数以后就知道调用的是哪个回调函数。
2024-02-02 15:03:57 75
原创 android蓝牙a2dp协议流程分析(八)--a2dp协议连接成功后状态回调
在我们a2dp协议的流媒体通道建立后打开后,a2dp连接的最后,调用了btif_av_state_opening_handler函数,在这里调用了btif_report_connection_state函数来进行状态的回调,此时我们的第一个参数state被赋值为BTAV_CONNECTION_STATE_CONNECTED,我们继续往下看。在函数中,由于bt_av_src_callbacks在a2dp初始化的时候被赋值,所以这里调用bt_av_src_callbacks里面对应的回调函数。
2024-02-02 15:00:18 88
原创 android蓝牙a2dp协议流程分析(七)--bte_av_cb回调函数赋值
在bta_av_api_enable函数中,参数p_data就是前面函数一直传递下来的参数,里面的p_cback变量就保存着回调函数bte_av_callback,所以这里bta_av_cb.p_cback=p_data->api_enable.p_cback=bte_av_callback,所以bta_av_cb.p_cback就是在这里完成了赋值。来到bta_av_hdl_event消息处理函数中,根据消息类型,我们选择bta_av_nsm_act函数调用,同时将消息体向下传递。
2024-02-02 14:57:21 82
原创 android蓝牙a2dp协议流程分析(六.3)--avdtp协议交互流程
我们bta_av_stream0_cback函数,经过调用后来到bta_av_proc_stream_evt,这个函数也很熟悉,将底层传递过来的AVDT_OPEN_CFM_EVT事件转换成BTA层的BTA_AV_STR_OPEN_EVT事件,然后使用bta_sys_sendmsg函数将事件发送给btu_task进程,根据事件类型,处理这个事件的状态机是BTA ssm,也就是由bta_av_ssm_execute函数来处理这个事件。选择bta_av_str_opened函数执行。
2024-02-02 14:53:52 88
原创 android蓝牙a2dp协议流程分析(六.2)--avdtp协议交互流程
由于之前scb状态机已经切换为conf状态,所以avdt_scb_event函数中这次使用的是avdt_scb_st_conf数组,同时传递的请求命令是API_OPEN_REQ_EVT,所以调用AVDT_SCB_SND_OPEN_REQ对应的函数,同时我们scb状态机的状态没有改变,还是conf状态。我们的avdt_scb_st_tbl表和avdt_ccb_st_tbl表一样,初始状态都是idle,所以使用的是avdt_scb_st_idle函数集合。
2024-02-02 14:47:38 389
原创 android蓝牙a2dp协议流程分析(六.1)--avdtp协议交互流程
这个函数里面,进行了事件转换,将底层发送过来的AVDT_DISCOVER_CFM_EVT事件转换为BTA层的BTA_AV_STR_DISC_OK_EVT事件,然后使用我们非常熟悉的bta_sys_sendmsg函数发送给btu_task进程,通过判断这个event事件类型,调用的是bta_av_ssm_execute函数来处理这个函数。来到bta_av_stream0_cback回调函数中,我们一路往下,调用bta_av_proc_stream_evt。
2024-02-02 14:25:47 92
原创 android蓝牙a2dp协议流程分析(五.2)--avdtp协议连接
第二个执行函数avdt_ccb_ll_opened,首先判断p_ccb->p_conn_cback是否存在,而在之前的avdt_ccb_set_conn函数中p_ccb->p_conn_cback被我们设置为bta_av_dt_cback函数指针集合,之前注册的回调函数终于在这里被调用共了,所以这里调用的是bta_av_stream0_cback回调函数,event事件为AVDT_CONNECT_IND_EVT。函数,当向btu_task进程发送完消息后,还调用了bta_av_conn_cback函数。
2024-02-02 14:19:02 138
原创 android蓝牙a2dp协议流程分析(五.1)--avdtp协议连接
在AVDT_ConnectReq函数将bta_av_dt_cback回调函数赋值给了evt.connect.p_cback,而在avdt_ccb_event函数中将evt传递给了p_data,所以这里的p_ccb->p_conn_cback = p_data->connect.p_cback = bta_av_dt_cback。在avdt_ccb_action列表中找到我们要执行的两个函数,avdt_ccb_set_conn,avdt_ccb_chan_open。
2024-02-02 14:12:45 279
原创 android蓝牙a2dp协议流程分析(四)--avdtp简介
上面整个的avdtp协议就是我们avdtp代码流程的全部过程,也是为我们后面阅读代码大侠基础,下期我们来说说avdtp交互流程。AVDTP:音视频分发协议,定义了基础的音视频分发,音视频的参数协商,但是没有音视频的编解码,是A2DP的基础协议。A2DP:高级音视频分发协议,协商使用哪种编解码器,使用哪种比特率传输音视频。AVDTP在协议栈上的结构:向上层提供了三个接口,向下层提供了2个接口。值得注意的是,我们avdtp整个代码,都是按照下面的交互流程来执行的。AVRCP:音视频控制协议,定义了播放暂停等。
2024-02-02 14:07:15 274
原创 android蓝牙hfp协议分析(二.1)--HF发起hfp协议连接
在queue_int_handle_evt函数中,我们的事件类型为BTIF_QUEUE_CONNECT_EVT,所以在里面调用queue_int_add函数,将进行连接的hfp设备加入队列,然后接着调用queue_int_connect_next进行进一步处理。这里是hfp client接口的对象,这个hfp client接口是在hfp协议初始化的时候得到的,由于之前介绍了很多协议的初始化,套路都是一样的,所以这里就不过多的介绍的,里面有很多成员函数,在这里我们调用的是connect函数。
2024-01-29 10:36:29 515 2
原创 android蓝牙hfp协议分析(二.2)--HF发起hfp协议连接
我们先看bta_hf_client_cback_open函数,在里面调用了bta_hf_client_cb.p_cback回调函数,这个回调函数在hf client初始化的时候被赋值为bte_hf_client_evt函数,关于hf client初始化,我们这里没有介绍,不过和其它协议的初始化一样,很容易理解,大家可以自行分析。来到处理函数bta_hf_client_disc_int_res函数中,我们看到这里还是进行hf状态机的轮转,不过这次事件为BTA_HF_CLIENT_DISC_OK_EVT。
2024-01-29 10:36:14 183
原创 android蓝牙hfp协议分析(一)--hfp协议交互流程
右图就是hfp的连接流程,可以看到和我上面介绍的流程一样,先进行sdp服务发现协议,发送hfp协议,然后进行RFCOMM协议连接,这样双方蓝牙设备就可以发送AT指令进行交互了,第三部分就是通过AT指令进行交互来进行Service Level Connection这个procedure了,最后创建SCO连接,就完成了hfp协议的连接,在这其中,AT指令交互建立SLC连接是重点。当HF取得AG的indicator后,HF会使用AT+CMER使能AG的indicator状态跟新功能,AG会返回OK作为应答。
2024-01-28 17:58:23 437
原创 android蓝牙ble扫描(一.2)--ble observe
根据传入的参数BTIF_GATTC_SCAN_START,最终调用到BTA_DmBleObserve函数,在这里函数里面传入了bta_scan_results_cb回调函数,后面我们会看到它会一路进行传递,最终在我们ble扫描完成后,由它来处理扫描后的结果。在函数中,将之前传入的bta_scan_results_cb回调函数赋值给bta_dm_search_cb.p_scan_cback回调函数,当扫描完成,调用回调函数进行后续处理,赋值完以后,接着调用BTM_BleObserve函数。
2024-01-28 17:54:00 131
原创 android蓝牙ble扫描(一.1)--ble observe
在gatt协议初始化的时候,会调用到initializeNative函数进行初始化,我们看到调用了bt_interface_t接口的get_profile_interface函数,同时传入了ID,根据这个id来获取gatt协议的接口,也就是gatt_interface_t接口,sGattIf就在这里被赋值,然后使用gatt_interface_t接口来初始化。在get_profile_interface函数中,根据id,获取到gatt_interface_t接口。
2024-01-28 17:46:23 163
原创 android蓝牙连接过程分析(四.2)--配对流程
这个函数首先创建一个tBTM_SEC_DEV_REC结构体p_dev_rec,也就是安全管理设备记录表,将对端蓝牙设备加入到这个record记录中,并且保存获取到的远端设备的名字到p_dev_rec的sec_bd_name这个成员中,同时将p_dev_rec的标志位设置为BTM_SEC_NAME_KNOWN。btm_sec_execute_procedure这个函数表示我们连接流程的第八,九步,表示以后需要做的事情,因为我们现在还在第六步授权阶段,即将要做的是授权。
2024-01-28 17:39:18 453
原创 android蓝牙连接过程分析(四.1)--配对流程
在bta_dm_bond函数中,因为我们还不能确定绑定连接的设备是classic设备还是ble设备,这里的transport还是unknown,调用BTM_SecBond函数执行,也就是安全绑定,在这个函数最下面,最后调用了bta_dm_cb.p_sec_cback这个回调函数,这个回调我们前面也已经说股,就是bte_dm_evt函数,并且传入了BTA_DM_AUTH_CMPL_EVT事件,也就是认证完成后,调用bte_dm_evt函数处理。
2024-01-28 17:30:17 370
原创 android蓝牙连接过程分析(三)--btm_cb.api回调函数的赋值
bta_security结构体的p_sp_callback变量赋值为bta_dm_sp_cback,所以btm_cb.api.p_sp_callback = bta_dm_sp_cback,至此,完成了回调函数的赋值。还是来到我们的bta_dm_sys_hw_cback函数中,在这里调调用BTM_SecRegister函数来注册secure service服务,在这里面传入的是&bta_security结构体。
2024-01-28 17:08:28 99
原创 android蓝牙a2dp协议流程分析(三.2)--a2dp连接
当我们搜索服务成功后,发送BTA_AV_SDP_DISC_OK_EVT事件给到btu_task,根据这个事件类型,还是由bta_av_ssm_execute函数来处理,这里又回到我们之前所讲的根据当前状态查阅状态转换表调用不同函数来处理,我们之前已经由init状态变为opening状态,所以根据状态转换表,这次调用的是bta_av_sst_opening状态转换表。音频流状态机根据对应的事件调用对应的函数执行,处理函数和事件是一一对应的关系,这里我们调用的是bta_av_do_disc_a2d函数。
2024-01-28 17:05:11 126
原创 android蓝牙a2dp协议流程分析(三.1)--a2dp连接
在初始化a2dp协议中,btif_av_cb.sm_handle被赋值为btif_av_state_idle_handle函数,在我们的connect_int函数我们调用这个回调函数,并且传入BTIF_AV_CONNECT_REQ_EVT参数。在queue_int_handle_evt中,根据前面的event,这里执行的是queue_int_add,也就是在这里将组装好的连接请求节点加入队列,然后调用queue_int_connect_next,处理队列中的连接请求。
2024-01-28 16:58:06 171
原创 android蓝牙a2dp协议流程分析(二.2)--使能a2dp协议
还是在bta_av_nsm_act列表中,这次传入的BTA_AV_API_REGISTER_EVT,所以这次调用bta_av_api_register。bta_av_nsm_act是一个函数指针数组,根据我们传入的索引选择调用不同的函数来处理,所以这里选择bta_av_api_enable来执行。我们看到bta_av_a2d_cos也是一个函数指针数组,它的init函数是bta_av_co_audio_init。进入到函数里面,我们看到做了一些赋值操作,存储参数,完成后,调用了之前注册的回调函数。
2024-01-28 16:50:50 83
原创 android蓝牙a2dp协议流程分析(二.1)--使能a2dp协议
我们看看将传入的handle处理函数给到了p_cb,然后根据传入的event来调用,我们又知道传入的handle为btif_av_cb.sm_handle,这个是我们之前定义赋值过的btif_av_state_idle_handler函数,所以btif_av_state_idle_handler函数根据传入的event事件来调用来完成事件的回调。我们之前再btif_av_init函数中调用btif_enable_service的时候传入的参数BTA_A2DP_SERVICE_ID,所以这里这个分支继续。
2024-01-28 16:43:25 129
原创 Android 蓝牙5.3协议中文版解析(4)数据传输架构(209-216页)
在L2CAP无连接通道上发送的单播数据提供了一种替代机制,以与在基本模式下运行的面向L2CAP连接的通道相同的可靠性级别发送数据,但不会因打开L2CAP面向连接的通道而产生额外的延迟。蓝牙是一种无线通信系统。总之,如果链路或信道的特征是可靠的,这意味着接收器能够检测接收到的数 据包中的错误并请求重新传输,直到错误被消除。这些QoS设置可用于指示(例如)数据是同步的,因此具有有限的生命周期 ,在此之后数据将变为无效,或者数据应该在给定的时间段内传送,或者数据 是可靠的并且应该无误地交付,无论这需要多长时间。
2024-01-28 16:29:47 172
原创 Android 蓝牙5.3协议中文版解析(3)核心系统架构(202-209页)
蓝牙核心系统协议是无线电(PHY)协 议、链路控制(LC)和链路管理器(LM)协议或链路层(LL)协议,以及逻 辑链路控制和适配协议(L2CAP),所有这些协议都有完整的定义在蓝牙规范 的后续部分。有修改蓝牙设备行为和模式的设备控制服务,创建、修改和释放流量承载 (信道和链路)的传输控制服务,以及用于提交数据以通过流量承载传输的数 据服务。蓝牙规 范通过定义等效层之间交换的协议消息来实现独立蓝牙系统之间的互操作性, 并通过定义蓝牙控制器和蓝牙主机之间的通用接口来实现独立蓝牙子系统之间 的互操作性。
2024-01-28 13:52:29 377
原创 Android 蓝牙5.3协议中文版解析(2)蓝牙术语(195-201页)
当下列术语出现在规范中时,它们具有表1.1中给出的含义。1.3【本节不再使用】
2024-01-28 13:27:11 84
原创 Android 蓝牙5.3协议中文版解析(1)蓝牙概述(187-194页)
LE使用与BR/EDR不同的 术语来描述支持的PHY,涉及调制、可能应用的编码和产生的数据速率方面的 差异。这可以使用两种编码方案之一:S=2,其中2个符号代 表1个比特,因此支持500kb/s的比特率,以及S=8,其中8个符号代表1个比特, 因此支持125kb/s的比特率s。传输BIS事件的设备也会传输包含BIS同步信息的周期性广告事件。它们还可以使用广告事件在使用数据物理信道的两个或多个 设备之间建立成对的双向通信,使用辅助广告物理信道建立周期性广播,或使 用同步物理信道建立无连接的同步流。
2024-01-28 13:17:46 715
原创 android蓝牙连接过程分析(二)--连接流程详解
一般情况下,当远端蓝牙设备接受连接请求后,这时候双方就需要交换特性了,我们知道蓝牙的频段是2402~2480MHZ,以1M为间隔,分为79个频道,蓝牙和wifi的频段是重合的,所以蓝牙采用自适应跳频技术,当有一个频段阻塞时,它会经过计算,自动跳到下一个频段,所以这里双方设备交换特性,始终保持频率等一致,为后面数据交换做准备。在蓝牙核心文档中,蓝牙的连接流程分为9个步骤,如右图所示,在这9个步骤中,实线的步骤是必选的,虚线是可选的,接下俩我们就来分析下。
2024-01-28 12:38:00 723
原创 Android 蓝牙高通6225平台项目特性(一)
dump文件路径:data/vendor/log/ramdump/ramdump_bt_fw_crashdump_***.bin,size打开几百KB.adb push 固件 /vendor/bt_firmware/image //将固件push 到对应目录下即可。adb shell "umount /vendor/bt_firmware" //将原有放置固件的目录卸载掉。setporp persist.service.bdroid.soclog true //开启固件日志开关。
2024-01-26 10:21:29 176
原创 Android GPS 随笔
1. 确定是否连接网络,没连接网络是冷启动定位慢是正常的,因为星厉,年历,需要从卫星解析,过程相对较慢,开启网络后会从网络上下载辅助数据来加速定位。4. 如果是测试人员在测试压测冷启动,可能是受高通gps xtra数据每天只能下载3次的影响,需要再测试是不清除年历,UTC时间和卫星健康数据测试。国内的机器,插入国内的sim卡,即可验证,但是要注入国外的网(取一个外国的卡),才能验证是否可以随网匹配,因为国外服务器是谷歌的。无sim卡,使用WIFI时候,访问ip所在区域服务器。
2024-01-26 10:18:52 85
原创 Android 蓝牙高通6225平台项目特性(二)
APM_AudioPolicyManager:setDeviceConnectionStateInt()device:0x10,state 1,name ...//SCO out处于连接状态。加载wifi驱动:insmod /vendor/lib/modules/qca_cld3_wlan.ko //找到对应项目的驱动文件,进行加载。卸载驱动:rmmod /system/lib/modules/wlan.ko //因为wlan驱动加载上之后默认modules为wlan,
2024-01-26 10:18:33 102
原创 Android wifi iwconfig 介绍
iwconfig wlan0 power timeout 300u all all/unicast/multicast指定允许唤醒的数据包类型。iwconfig wlan0 power 500m unicast all/unicast/multicast指定允许唤醒的数据包类型。iwconfig wlan0 rts off auto/off/fixed禁止RTS/CTS握手方式。iwconfig wlan0 frag off auto/fixed/off允许Burst模式。
2024-01-26 10:17:36 78
原创 Android wifi iwlist 介绍
iwlist wlan0 freq[uency]/channel 列出当前地区可用频率。iwlist wlan0 keys/enc[ryption] 列出所支持的加密密钥大小。iwlist wlan0 modu[lation] 列出设备支持的调制和当前启用的调制。iwlist wlan0 wpa[keys] 列出设备中设置的所有WPA加密密钥。iwlist wlan0 rate/bit[rate] 列出支持的连接速度。iwlist wlan0 auth 列出当前设置的WPA认证参数。
2024-01-26 10:17:26 60
Android 蓝牙协议栈消息(bta_sys_sendmsg)发送机制 ---- 全网唯一解析.pdf
2022-05-18
Android 蓝牙BLE全面解析以及智能车锁开发实例
2022-05-09
Android 蓝牙基本概念,每个协议介绍,ble介绍,整理了全网所有的蓝牙基本概念,便于新人学习。
2022-05-08
Android 蓝牙 A2dp 听歌卡音?audio数据到a2dp通道流程解析----A2dp流控原理(Acl Flow Con
2022-05-08
Android 蓝牙 Audio音频输出通道切换详解_卡音,多年安卓开发经验,从实际项目中获取到的经验,对安卓开发者非常有帮助。
2022-05-08
Android 蓝牙 音频焦点(Audio Focus)——卡音,多年安卓开发经验,从实际项目中获取到的经验,对安卓开发者非常有
2022-05-08
Anroid 蓝牙如何在Framework层实现BT的自动配对,多年安卓开发经验,从实际项目中获取到的经验,对安卓开发者非常有帮
2022-05-08
Android 蓝牙OPP 如何正确测量使用蓝牙OPP文件传输时候的电流分析文档,多年安卓开发经验,从实际项目中获取到的经验,对
2022-05-08
Android 蓝牙L2cap协议初始化、连接流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程走向,以及
2022-04-30
Android 蓝牙map协议连接流程图(上层),将Android 源码使用流程图的形式画了出来,使Android 蓝牙开发者更
2022-04-30
Android pan协议连接流程图,非常详细的从btif-bta-btm-hci 数据流程走向,以及从controller收到
2022-04-30
Android 蓝牙 HFP中的rfcomm数据流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程走向,以
2022-04-30
Android 蓝牙 HFP中的rfcomm连接流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程走向,以
2022-04-30
Android 蓝牙 HFP中的rfcomm连接流程图(协议栈),将Android 源码使用流程图的形式画了出来,使Androi
2022-04-30
Android 蓝牙 BLE gatt协议扫描(scan)数据流程图(java-framework),将Android 源码使用
2022-04-30
Android 蓝牙 BLE gatt协议连接(connect)数据流程图(java-framework),将Android 源
2022-04-30
Android 蓝牙 BLE 扫描(scan)数据流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程走向,
2022-04-30
Android 蓝牙 BLE 连接(connect)数据流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程
2022-04-30
Android 蓝牙 BLE 广播(advertising)数据流程图(协议栈),非常详细的从btif-bta-btm-hci
2022-04-30
Android 蓝牙 BLE 数据从host发数据到controller,数据流程图(协议栈),非常详细的从btif-bta-b
2022-04-30
Android SDP服务发现初始化、连接流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程走向,以及从c
2022-04-30
Android 蓝牙PBAP协议连接流程图(java-framework层),将Android 源码使用流程图的形式画了出来,使
2022-04-30
Android 蓝牙hfp连接(java-framework层),非常详细的从btif-bta-btm-hci 数据流程走
2022-04-30
Android 蓝牙HFP 连接、SCO连接流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程走
2022-04-30
Android 蓝牙HFP 初始化init,协议连接,andio连接,非常详细的从btif-bta-btm-hci 数据流程走
2022-04-30
Android 蓝牙AVRCP(java-framework)层连接流程图,非常详细的从btif-bta-btm-hci 数据流
2022-04-30
Android 蓝牙A2DP java层framework 层连接流程图,非常详细的从btif-bta-btm-hci 数据流程
2022-04-30
Android 蓝牙AVRCP连接流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程走向,以及从contr
2022-04-30
Android 蓝牙 A2DP协议连接流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程走向,以及从con
2022-04-30
Android 蓝牙A2DP初始化init流程(协议栈)图,非常详细的从btif-bta-btm-hci 数据流程走向,以及从c
2022-04-30
Android 蓝牙 A2DP播放AVDTP连接,音乐从audio到A2dp蓝牙侧,流程图。
2022-04-30
Android 蓝牙A2DP 初始化init,协议连接,andio连接,非常详细的从btif-bta-btm-hci 数据流程走
2022-04-30
Android 蓝牙搜索配对鉴权与周围设备HCI命令交互流程图,将Android 源码使用流程图的形式画了出来,使Android
2022-04-30
Android蓝牙 上层(java-framework)层搜索扫描流程图,将Android 源码使用流程图的形式画了出来,使An
2022-04-30
Android蓝牙 上层(java-framework)层bond绑定配对流程图,将Android 源码使用流程图的形式画了出来
2022-04-30
Android蓝牙 上层(java-framework)层打开使能流程图,将Android 源码使用流程图的形式画了出来,使An
2022-04-30
Android 蓝牙设备配对pair流程(协议栈)图,非常详细的从btif-bta-btm-hci 数据流程走向,以及从cont
2022-04-30
wifi 回连问题,求解答
2024-03-21
字符设备驱动,指导开发
2024-01-26
wifi断上电回连失败
2023-12-18
(标签-EDGE|关键词-设备树)
2023-08-31
(标签-EDGE|关键词-设备树)
2023-08-31
(标签-EDGE|关键词-设备树)
2023-08-31
(标签-EDGE|关键词-设备树)
2023-08-31
设备树中如何配置电平
2023-08-31
(标签-EDGE|关键词-设备树)
2023-08-31
(标签-EDGE|关键词-设备树)
2023-08-31
(标签-EDGE|关键词-设备树)
2023-08-31
window 平台opengrok搭建
2023-07-20
vs code不能跳转
2023-07-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人