【android bluetooth 案例分析 03】【PTS 測試 】【PBAP/PCE/SSM/BV-02-C】

1. 測試介紹

PBAP/PCE/SSM/BV-02-C [PCE Closes a PBAP Session]

1. Test Purpose

Verify that the PCE can terminate a PBAP session.

2. Initial Condition

  • IUT: The IUT is engaged in a PBAP session with the Lower Tester.
  • Lower Tester: The Lower Tester is engaged in a PBAP session with the PCE.

3. Test Procedure

The IUT attempts to disconnect the PBAP session.

4. Expected Outcome

Pass verdict
The IUT issues an OBEX DISCONNECT to the Lower Tester.

2. 測試過程中遇到的問題:

1. 報錯日志

Test case : PBAP/PCE/SSM/BV-02-C started
- version=0x0102  rfcommPsm=0x02  l2capPsm=0x1005  supportRepositories=0x0f  supportedFeatures=0x000003ff 
- Final supported Feature 201
- Obex connection complete.
- Failed disconnection
- Received HCI disconnection event. Handle = 0x0063-Final Verdict: FAIL
PBAP/PCE/SSM/BV-02-C finished
  • 當 車機發起斷開 pbap 時, 收到了 acl 斷開。導致本次測試失敗。

2. 日志分析

1. PTS 側日志分析

PTS 側的日志:
在這里插入圖片描述

在這里插入圖片描述

  • [537] 車機發起了 pbap 斷開, [538]PTS 也做了回復。 這塊邏輯 是符合測試的。
  • 但從 log 中看到 車機主動發起了 acl 斷開[645]

2. 車機側日志分析

我們看一下車機側的日志:
在這里插入圖片描述

  • 車機側主動發起了斷開。

3. 結論

PTS 報錯是因為 Received HCI disconnection event。 那車機不要主動斷開 acl 即可。

方式一:

  • 保持 acl 的方式有很多種, 可以連多個協議, 例如 hfp和 pbap 同時連, 就可以保持車機 不主動斷開 acl.
    • 嘗試用這種方式, 雖然車機沒有主動發起 acl斷連, 但是 依然有問題。

方式二:

  • 找到車機主動斷開acl 的地方, 將其 臨時屏蔽掉即可。

3. 分析解決

加log 重新 抓了一份 日志, 分析如下。

// 當車機主動斷開 pbap 時, 在 l2cu_release_ccb 中觸發了 檢查acl 定時器。
04-25 01:41:15.609809  5944  6005 I bt_l2cap: packages/modules/Bluetooth/system/main/bte_logmsg.cc:201 LogMsg: l2cu_release_ccb: cid 0x0041  in_use: 1
04-25 01:41:15.609837  5944  6005 I bt_btm  : packages/modules/Bluetooth/system/main/bte_logmsg.cc:198 LogMsg: BTM_SecClrServiceByPsm psm:0x0 num_freed:0
04-25 01:41:15.610222  5944  6005 I bt_l2cap: packages/modules/Bluetooth/system/main/bte_logmsg.cc:201 LogMsg: l2cu_dequeue_ccb  CID: 0x0041
04-25 01:41:15.610270  5944  6005 I bt_l2cap: packages/modules/Bluetooth/system/main/bte_logmsg.cc:201 LogMsg: l2cu_no_dynamic_ccbs() with_active_local_clients=1
04-25 01:41:15.610290  5944  6005 I l2c_utils: packages/modules/Bluetooth/system/stack/l2cap/l2c_utils.cc:2685 l2cu_no_dynamic_ccbs: trace_l2c_lcb_timer_timeout [l2cu_no_dynamic_ccbs:2685]// 定時器時間為 4s
04-25 01:41:15.610428  5944  6005 I l2c_utils: packages/modules/Bluetooth/system/stack/l2cap/l2c_utils.cc:2688 l2cu_no_dynamic_ccbs: Started link IDLE timeout_ms:4000// 4s 時間到后,發送了 disconnect 命令
04-25 01:41:19.610110  5944  6005 I l2c_link: packages/modules/Bluetooth/system/stack/l2cap/l2c_link.cc:467 l2c_link_timeout: L2CAP - l2c_link_timeout() link state:LST_CONNECTED is_bonding:false
04-25 01:41:19.610157  5944  6005 W l2c_link: packages/modules/Bluetooth/system/stack/l2cap/l2c_link.cc:498 l2c_link_timeout: TODO: Remove this callback into bcm_sec_disconnect
04-25 01:41:19.610191  5944  6005 I bt_btm_sec: packages/modules/Bluetooth/system/stack/btm/btm_sec.cc:3871 btm_sec_disconnect: Disconnect ACL Link handle: 0x0002 reason: Remote Terminated Connection comment: stack::l2cap::l2c_link::l2c_link_timeout All channels closed

具體 l2cu_release_ccb 為何調用l2cu_no_dynamic_ccbs 以及 l2c_link_timeout 是干什么的,可以參考我之前寫的 【android bluetooth 協議分析 06】【l2cap詳解 11】【l2cap連接超時處理邏輯介紹】

根據分析,我們最后采用 將 4s 延時 改為 40s 。 這40s 足夠pts 去處理了。

diff --git a/system/stack/l2cap/l2c_utils.cc b/system/stack/l2cap/l2c_utils.cc
index 39d2949b80..694544ff66 100755
--- a/system/stack/l2cap/l2c_utils.cc
+++ b/system/stack/l2cap/l2c_utils.cc
@@ -42,6 +42,7 @@#include "stack/include/l2cdefs.h"#include "stack/l2cap/l2c_int.h"#include "types/raw_address.h"
+#include "osi/include/properties.h"tL2C_CCB* l2cu_get_next_channel_in_rr(tL2C_LCB* p_lcb); // TODO Move@@ -2681,6 +2682,13 @@ void l2cu_no_dynamic_ccbs(tL2C_LCB* p_lcb) {}}+  if (osi_property_get_bool("xxxx.bluetooth.pts", false)) {
+    LOG_INFO("%s:PTS process.",__func__);
+    timeout_ms = 40000; // 40s
+ } else {
+    LOG_INFO("%s: normal process.",__func__);
+ }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903473.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903473.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903473.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ArcGIS:開啟洪水災害普查、評估與制圖新征程

技術點目錄 一、洪水普查技術規范解讀二、ArcGIS介紹及數據管理三、空間數據的轉換與處理四、洪水淹沒專題地圖制作五、矢量數據的采集與處理六、柵格數據的下載與處理七、ArcGIS水文分析八、ArcGIS洪水分析九、ArcGIS淹沒分析了解更多 ———————————————————…

【系統參數合法性校驗】spring-boot-starter-validation

JSR303校驗 統一校驗的需求 前端請求后端接口傳輸參數,是在controller中校驗還是在Service中校驗? 答案是都需要校驗,只是分工不同。 Contoller中校驗請求參數的合法性,包括:必填項校驗,數據格式校驗&…

[零基礎]內網ubuntu映射到云服務器上,http訪問(frp內網穿透)

阿里云服務器,高校教師可以半價, frp下載地址:https://github.com/fatedier/frp/releases,選amd64, 云服務器開放端口 選擇網絡與安全–>安全組->管理規則 配置開放端口,7000為支持frp開放的端口&…

第十六屆藍橋杯 2025 C/C++組 破解信息

目錄 題目: 題目描述: 題目鏈接: 思路: 思路詳解: 代碼: 代碼詳解: 題目: 題目描述: 題目鏈接: P12344 [藍橋杯 2025 省 B/Python B 第二場] 破解信息…

OpenAI Embedding 和密集檢索(如 BERT/DPR)進行語義相似度搜索有什么區別和聯系

OpenAI Embedding 和密集檢索(如 BERT/DPR)其實是“同一種思想的不同實現”,它們都屬于Dense Retrieval(密集向量檢索),只不過使用的模型、部署方式和調用方式不同。 🧠 首先搞清楚:…

Linux電源管理(3)_關機和重啟的過程

原文:Linux電源管理(3)_Generic PM之重新啟動過程 1.前言 在使用計算機的過程中,關機和重啟是最先學會的兩個操作。同樣,這兩個操作在Linux中也存在,可以關機和重啟。這就是這里要描述的對象。在Linux Ke…

C# 繼承詳解

繼承是面向對象程序設計(OOP)中的核心概念之一,它極大地增強了代碼的重用性、擴展性和維護性。本篇文章將詳細講解C#中的繼承機制,包括基礎概念、語法特法、多重繼承(通過接口實現)、繼承的規則和實際應用示…

SQLAlchemy 2.x 異步查詢方法比較

SQLAlchemy 2.x 異步查詢中常用的 結果處理方法速查表,包含方法說明、使用場景、返回類型及典型用途。 SQLAlchemy 查詢結果處理方法速查表(適用于 AsyncSession) 方法 說明 返回類型 示例 SQL 示例輸出 scalars().all() 獲取單列所有…

極客天成參與”AI助力智慧城市構建”主題演講暨招商引智專題推介活動

4月7日下午,北京極客天成科技有限公司參加了天津市河東區數據局舉辦的“AI賦能智慧城市構建”主題演講暨招商引智專題推介活動。 活動中,華為(天津)有限公司數字政府解決方案總監姜華庚圍繞“政務大模型賦能智慧城市建設”&#x…

理解 EKS CloudWatch Pod CPU Utilization 指標:與 `kubectl top` 及節點 CPU 的關系

在使用 AWS EKS 時,CloudWatch Container Insights 提供了豐富的容器級別監控指標,幫助我們深入了解應用的運行狀態。如下截圖中的 ContainerInsights pod_cpu_utilization 指標就是一個非常重要的維度。本文將詳細解釋這個指標的含義,并將其…

使用pip3安裝軟件包報錯`externally-managed-environment`的幾種解決方式

1、pip3安裝軟件包報錯 報錯externally-managed-environment的原因: 從 Python 3.11 開始引入了 PEP 668 規范,該規范限制了在系統級 Python 環境中使用 pip 安裝第三方包,以避免與系統包管理器(如 apt)產生沖突。 如…

spring security用戶退出

Spring security默認實現了用戶退出的功能,用戶退出主要考慮退出后會話如何管理以及跳轉到哪個頁面。HttpSecurity類提供了logout()方法開啟退出登錄的支持,默認觸發用戶退出操作的URL為“/logout”,用戶退出時同時也會清除Session等默認用戶…

愛普生SG2520HHN晶振數據中心服務器的理想解決方案

在當今數字化時代,數據中心作為海量數據存儲、處理與傳輸的核心樞紐,其服務器的高效穩定運行至關重要。服務器作為其核心設備,對時鐘信號的精度和穩定性提出了嚴苛要求——微小的時序誤差可能導致數據傳輸失敗或系統宕機。愛普生 SG2520HHN 差…

LeetCode 155題解 | 最小棧

最小棧 一、題目鏈接二、題目三、算法原理思路1:用一個變量存儲最小元素思路2:雙棧普通棧和最小棧 四、編寫代碼五、時間復雜度 一、題目鏈接 最小棧 二、題目 三、算法原理 棧用數組、鏈表實現都行,最主要的就是在能在常數時間內檢索到最…

es+kibana---集群部署

其實一般es要跑3個節點的,這樣才能做高可用,處理并發大,但是我這里只是一個pod mkdir -p /stroe/data/es es搭建: #【拉取鏡像】 #docker pull elasticsearch:6.8.7 #docker pull busybox:1.28 【導入鏡像】 docker load -i es.…

WPF常用技巧匯總 - Part 2

WPF常用技巧匯總-CSDN博客 主要用于記錄工作中發現的一些問題和常見的解決方法。 目錄 WPF常用技巧匯總-CSDN博客 1. DataGrid Tooltip - Multiple 2. DataGrid Tooltip - Cell值和ToolTip值一樣 3. DataGrid Tooltip - Cell值和ToolTip值不一樣 4. DataGrid - Ctrl A /…

uniapp打包apk如何實現版本更新

我們做的比較簡單,在后端設置版本號,并在uniapp的config.js中定義版本號,每次跟后端的進行對比,不一致的話就更新。 一、下載apk 主要代碼(下載安裝包,并進行安裝,一般得手動同意安裝&#xf…

局部和整體的關系

Prompt:為什么要研究局部和整體的關系呢?是因為很多情況下,局部就能表達出整體? 這是一個非常本質的問題,其實你已經接近數學和物理中“幾何本質”的核心了。我們研究局部和整體的關系,是因為:…

企業辦公協同平臺安全一體化生態入住技術架構與接口標準分析報告

全球組織數字化與智能化背景下 企業辦公協同平臺安全一體化生態入住技術架構與接口標準分析報告 一、背景與市場需求 市場規模與增量 根據Statista數據,全球協同辦公平臺市場規模預計從2023年的$480億增長至2027年的$900億,年復合增長率(CAG…

【2025最新面試八股常問知識點】HTTP1.0,HTTP1.1,HTTP2.0,HTTP3.0,HTTP的進化之路。

HTTP 超文本傳輸協議(英文:HyperText Transfer Protocol,縮寫:HTTP)是一種用于分布式、協作式和超媒體信息系統的應用層協議。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。通過HTTP或者HTTPS協議請求的…