低功耗藍牙智能硬件開發實戰( 簡體 字) | |
作者:譚康喜 | 類別:1. -> 通信技術 -> 無線通訊 -> 藍芽技術 |
出版社:人民郵電出版社 | 3dWoo書號: 50193 詢問書籍請說出此書號! 有庫存 NT售價: 495 元 |
出版日:12/1/2018 | |
頁數:398 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787115494443 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第 1章 低功耗藍牙簡介 1
1.1 概述 1 1.2 藍牙歷史版本介紹 1 1.2.1 藍牙1.1標準和1.2標準 1 1.2.2 藍牙2.0標準 2 1.2.3 藍牙2.1+EDR標準 2 1.2.4 藍牙3.0+HS標準 3 1.2.5 藍牙4.0標準 3 1.2.6 藍牙4.1標準 3 1.2.7 藍牙4.2標準 4 1.2.8 藍牙5.0標準 5 1.2.9 藍牙2016年技術藍圖 5 1.2.10 藍牙版本演進編年史 6 1.3 藍牙4.0概述 7 1.3.1 什么是藍牙4.0 7 1.3.2 藍牙4.0的架構 7 1.3.3 藍牙4.0協議增加的新特性 7 1.4 藍牙4.0核心架構分析 8 1.4.1 低功耗藍牙概述 8 1.4.2 核心系統架構 10 1.4.3 核心構架模塊介紹 13 1.5 基于Bluetooth 4.0的新應用 14 1.6 BLE、ZigBee和WiFi的介紹和選擇 16 1.6.1 ZigBee技術介紹 16 1.6.2 WiFi技術介紹 17 1.6.3 BLE、ZigBee和WiFi的選擇 17 第 2章 Android藍牙系統框架和代碼結構 19 2.1 概述 19 2.2 Application Framework 20 2.3 Bluetooth Process 21 2.4 Bluetooth JNI 21 2.5 Bluetooth HAL 21 2.6 Bluedroid Stack 21 2.7 Bluedroid的代碼結構分析 22 2.7.1 MAIN 22 2.7.2 BTA 23 2.7.3 BTIF 23 2.7.4 HCI 27 2.7.5 STACK 29 第3章 GKI模塊簡介 31 3.1 概述 31 3.2 GKI事件的原理 31 3.3 GKI主要數據結構 31 3.4 GKI管理的線程 35 3.5 線程相關主要函數 36 3.6 消息相關主要函數介紹 39 3.6.1 GKI_wait()函數 39 3.6.2 GKI_send_event()函數 41 3.6.3 GKI_send_msg()函數 42 3.6.4 GKI_read_mbox()函數 43 3.6.5 pthread_cond_wait()函數 43 3.7 動態內存池管理主要函數 44 第4章 Bluedroid的消息傳遞機制 45 4.1 概述 45 4.2 消息傳遞相關結構體的定義 46 4.3 消息的動態內存的獲取 46 4.4 消息的初始化及發送 49 4.5 消息的讀取和處理 51 4.6 消息的完整數據結構剖析 54 第5章 TASK簡介 57 5.1 概述 57 5.1.1 TASK之間的消息傳遞 57 5.1.2 事件的類型 58 5.2 TASK處理消息的流程 58 第6章 Bluedroid狀態機簡介 66 6.1 Profile狀態機介紹 66 6.2 Profile狀態機的結構設計 67 6.3 狀態機的注冊 69 6.4 狀態機的驅動力來源 70 6.5 Action函數列表 71 6.6 狀態機的狀態集合 72 6.7 Event處理函數介紹 74 第7章 HCI接口層簡介 76 7.1 概述 76 7.2 接口間的函數調用關系 76 7.3 bt_hc_if接口的定義和獲取 77 7.3.1 bt_hc_if接口定義 77 7.3.2 bt_hc_if接口的獲取 78 7.4 hc_callbacks函數集合的定義和注冊 78 7.4.1 hc_callbacks函數集合的定義 78 7.4.2 hc_callbacks函數集合的注冊 79 7.5 bluetoothHCLibInterface的init()函數介紹 80 7.6 libbt-vendor接口的獲取、初始化和使用 81 7.6.1 libbt-vendor的接口函數集合 81 7.6.2 libbt-vendor接口的獲取和使用 82 7.6.3 libbt-vendor的初始化 83 7.7 命令和數據的發送與接收 84 7.7.1 命令和數據的發送接口 84 7.7.2 命令處理結果和數據的接收接口 86 7.7.3 H4層接收解析函數的分析 89 7.8 HCI裸數據的分析 95 7.9 本章總結 96 第8章 L2CAP簡介 98 8.1 概述 98 8.2 L2CAP的組成部分和功能 99 8.2.1 L2CAP的兩個組成部分 99 8.2.2 L2CAP的功能 99 8.3 設備間的操作 100 8.3.1 操作模式 100 8.3.2 L2CAP連接類型 100 8.4 L2CAP數據包 100 8.4.1 L2CAP數據包格式 101 8.4.2 信號包格式 101 8.5 L2CAP的使用 102 8.6 LE數據包格式分析 102 8.7 L2CAP的CSM(Channel State Machine)介紹 104 8.7.1 子狀態機介紹 105 8.7.2 OPEN子狀態機處理函數 107 8.8 Profile在L2CAP的注冊和函數回調機制 111 8.8.1 Profile的注冊 111 8.8.2 Profile的注冊回調函數集合的回調機制 114 8.9 L2CAP的數據的發送和接收過程 115 8.9.1 數據的發送 115 8.9.2 數據的接收 116 第9章 Bluedroid的初始化流程 122 9.1 概述 122 9.2 協議棧的bluetoothInterface接口的獲取過程 122 9.3 打開藍牙的接口的調用 123 9.4 第 一階段:前期準備階段 124 9.5 第二階段:藍牙Firmware的加載階段 127 9.5.1 Firmware加載的總體思想 127 9.5.2 發起Firmware加載的入口 128 9.5.3 Firmware加載的過程 128 9.6 第三階段:后期初始化階段 131 9.6.1 底層協議棧的初始化 132 9.6.2 上層協議棧的初始化 136 第 10章 藍牙設備的掃描流程 145 10.1 概述 145 10.2 JNI層掃描入口和協議棧回調機制 145 10.2.1 掃描入口 145 10.2.2 回調機制 147 10.3 藍牙掃描流程的啟動過程 147 10.4 藍牙設備的Inquiry過程 152 10.5 藍牙設備的Discover過程 156 10.6 本章總結 158 第 11章 SMP簡介 160 11.1 什么是SMP 160 11.2 SM在Host側的位置 161 11.3 SMP的流程介紹 161 11.3.1 SM第 1階段—配對特征的交換 162 11.3.2 第 2階段—根據特征信息配對 165 11.3.3 第3階段—Key的分發過程 173 11.4 SMP協議包分析 173 11.5 問和答 175 第 12章 LE屬性協議簡介 177 12.1 概述 177 12.2 屬性的構成 177 12.3 屬性值的介紹 179 12.4 屬性數據庫的構建過程 180 12.4.1 Gatt Profile分層設計 180 12.4.2 Gatt Service的構建 181 12.4.3 特性的構建 182 12.5 獲取屬性數據庫的過程 183 12.5.1 GATT服務的獲取和設置過程 183 12.5.2 服務的查詢過程 188 12.5.3 包含服務、特性和特性描述的查詢過程 191 第 13章 LE屬性數據庫掃描過程的代碼分析 195 13.1 Discover過程的發起 195 13.2 主要服務的Discover過程 197 13.3 Discover過程回調函數的注冊過程 210 13.4 包含服務的Discover過程 211 13.5 特性的Discover過程 216 13.6 特性描述的Discover過程 218 13.7 Discover過程的結束 224 13.8 服務的上報過程 226 13.8.1 服務的查詢和發起上報過程 226 13.8.2 上報服務的回調函數的注冊過程 227 13.8.3 服務的上報過程 230 13.8.4 服務上報過程的日志分析 237 第 14章 低功耗藍牙HID設備的連接過程分析 242 14.1 概述 242 14.2 連接過程的發起 242 14.3 Hid服務的特性、特性描述的讀取和存儲 248 14.3.1 查詢和存儲過程 248 14.3.2 查詢結果列表和分析 252 14.4 連接過程的完成和輸入設備的創建 254 14.4.1 連接過程的完成和創建輸入設備 254 14.4.2 Hid按鍵的上報 257 第 15章 Find Me功能的實現 260 15.1 概述 260 15.2 Find Me功能的技術原理 260 15.3 Find Me功能的代碼實現 261 15.3.1 Find Me功能的觸發函數 261 15.3.2 BluetoothGatt接口的獲取 262 15.3.3 Hid設備列表的獲取 262 第 16章 低功耗藍牙電池服務和電量的讀取 264 16.1 概述 264 16.2 電量讀取和電量變化回調函數的注冊 264 16.3 電量讀取的發起和電量變化特性配置描述的設置 266 16.4 電池電量讀取的btsnoop數據解析 267 第 17章 LE設備接近配對的實現 269 17.1 概述 269 17.2 RSSI與LQI、接收距離之間的關系 270 17.3 接近配對的簡化實現 271 17.4 接近配對代碼示例 272 第 18章 基于LE廣播的無線電子設備的喚醒方法 275 18.1 概述 275 18.2 無線電子設備的喚醒的硬件原理 276 18.3 無線電子設備的喚醒的軟件實現 276 18.3.1 無線電子設備關機后喚醒的軟件邏輯實現 276 18.3.2 無線電子設備通電后喚醒的軟件邏輯實現 278 18.4 傳輸喚醒白名單列表和啟動喚醒功能的命令的定義 278 18.5 喚醒廣播包的數據格式 279 18.6 喚醒廣播包的處理邏輯 281 18.6.1 主機的處理邏輯 281 18.6.2 設備的廣播邏輯 282 18.7 喚醒廣播包的數據分析 283 第 19章 基于LE廣播的系統Recovery的操作實現 284 19.1 概述 284 19.2 小米電視和盒子的系統恢復模式的介紹 284 19.3 基于接收廣播按鍵信息的Recovery系統框架 285 19.4 廣播包按鍵信息的定義 286 19.5 進入Recovery的方法 286 19.6 按鍵廣播包的接收、解析和上報的代碼分析 287 第 20章 藍牙HID設備OTA升級的設計和實現 297 20.1 概述 297 20.2 Hid設備OTA升級總體流程設計 297 20.3 Hid設備OTA升級命令定義 298 20.4 Hid設備OTA升級的總體程序設計 305 20.4.1 總體設計 305 20.4.2 Kernel層Hidraw getReport()的實現過程 306 20.4.3 Kernel層Hidraw setReport()的實現過程 307 20.4.4 JNI層Hidraw getReport函數的實現 308 20.4.5 JNI層Hidraw setReport函數的實現 310 20.5 Java層OTA升級程序示例 312 20.6 Hidraw setReport、getReport命令的數據分析 320 第 21章 加速度傳感器在低功耗藍牙設備上的應用 325 21.1 概述 325 21.2 藍牙輸入相關子系統、G-Sensor子系統簡介 325 21.3 加速度傳感器設備的創建過程 326 21.3.1 Bluedroid發起的設備注冊過程 326 21.3.2 Kernel中Hid設備的創建過程 327 21.4 加速度傳感器的驅動注冊過程 330 21.5 Sensor數據從Bluedroid到傳感器驅動的傳輸過程 336 第 22章 LE系統快速更新連接參數的設計和實現 340 22.1 概述 340 22.2 更新連接參數的常規方法、快速更新連接參數碰到的困難及解決思路 343 22.2.1 更新連接參數的常規方法介紹 343 22.2.2 快速更新連接參數碰到的困難及解決思路 345 22.3 快速更新連接參數的實現及應用 345 22.3.1 快速更新連接參數的實現方法 345 22.3.2 快速更新連接參數在語音傳輸中的應用 348 第 23章 LE語音編解碼和傳輸 350 23.1 概述 350 23.2 音頻采集、處理和藍牙傳輸的軟硬件過程 351 23.3 ADPCM介紹 353 23.3.1 ADPCM的概念 353 23.3.2 ADPCM編碼框圖 354 23.4 遙控器語音傳輸的總體流程 354 23.5 主機端的語音數據的接收處理流程 356 23.5.1 傳統語音數據的接收處理流程 356 23.5.2 基于Hidraw接口的語音數據的接收處理流程 356 23.6 基于ADPCM的一種語音壓縮編碼數據的傳輸格式定義 357 23.6.1 語音壓縮編碼數據起始幀的定義 357 23.6.2 語音壓縮編碼數據楨的第 1部分定義 358 23.6.3 語音壓縮編碼數據楨其他部分定義 358 23.6.4 語音壓縮編碼數據結束幀的定義 358 23.6.5 完整語音壓縮編碼數據楨的格式定義 359 23.7 基于ADPCM的一種語音壓縮編碼數據的接收數據的格式解析 359 23.7.1 語音壓縮編碼數據起始幀的接收數據格式解析 359 23.7.2 語音壓縮編碼數據的數據幀的第 1幀的第 1部分的接收數據格式解析 360 23.7.3 語音壓縮編碼數據的數據幀第 2幀的第 1部分的接收數據格式解析 361 23.7.4 語音壓縮編碼數據結束幀的接收數據格式解析 362 23.8 基于Hidraw的語音壓縮編碼數據的接收和處理的代碼示例 362 23.8.1 /dev/hidrawX設備的尋找過程 362 23.8.2 ADPCM語音壓縮編碼數據的讀取和解碼的代碼示例 364 第 24章 開發工具 372 24.1 概述 372 24.2 Ellisys藍牙協議分析儀 372 24.3 Ellisys HCI分析 375 24.4 Ellisys頻譜分析 376 24.5 Ellisys時序和邏輯分析 377 24.6 Ellisys空中抓包 378 24.7 Ellisys組網分析 380 24.8 Ellisys集成化音頻分析 380 24.9 其他 381 第 25章 藍牙系統Bug分析 383 25.1 概述 383 25.2 內存操作越界引發藍牙重啟的一個Bug分析 384 25.2.1 內存操作越界Bug描述 384 25.2.2 內存操作越界引發藍牙重啟的Bug分析過程 385 25.3 系統IO繁忙時寫btsnoop日志效率低導致藍牙通信卡頓的Bug分析 389 25.3.1 寫btsnoop日志效率低的Bug描述 389 25.3.2 寫btsnoop日志效率低的Bug分析 389 25.3.3 Bug的解決方法 390 25.4 藍牙數據總線丟失數據導致藍牙重啟 391 25.4.1 導致藍牙重啟的Bug描述 391 25.4.2 導致藍牙重啟的日志分析 391 25.4.3 解決問題的方法 394 25.5 藍牙核心協議規范關于斷連接流程的設計缺陷 39 25.5.1 斷連接流程的設計缺陷引發的Bug描述 395 25.5.2 問題背景介紹 395 25.5.3 Bug分析過程 396 25.5.4 解決問題的方法 398 低功耗藍牙技術憑借著低功耗、低帶寬、低成本、低復雜性、低時延、強抗干擾能力、強大的安全性、良好的拓撲結構等特點,贏得了廣大開發人員和用戶的認可,已經成為主流的低功耗、近距離無線通信技術。
《低功耗藍牙智能硬件開發實戰》共分為25章,內容分別涵蓋了藍牙的發展歷史、低功耗藍牙的核心系統架構、幾種短距離無線通信技術的簡單介紹和選擇方法、Bluedroid協議棧的架構和功能模塊的分析、SMP的3個階段介紹、LE屬性協議、LE屬性數據庫的構建和查詢方法及查詢代碼分析、BLE Hid設備的連接過程、Find me功能的實現、電池服務和電量的讀取、LE設備接近配對的實現、基于LE廣播的無線電子設備的喚醒方法、基于LE廣播的系統Recovery的操作實現、藍牙HID設備OTA升級的設計和實現、加速度傳感器在低功耗藍牙設備上的應用、LE系統快速更新連接參數的設計和實現、LE語音編解碼和傳輸、開發工具介紹、藍牙系統Bug分析。 《低功耗藍牙智能硬件開發實戰》側重于實戰,低功耗藍牙體系結構及協議棧分析、開發實例講解和藍牙調試3個方面的內容詳細豐富,適合藍牙應用工程師、藍牙協議棧工程師、藍牙固件工程師閱讀,也適合對BLE、人工智能、物聯網和智能硬件感興趣的讀者閱讀。 |