展开全部

主编推荐语

低功耗蓝牙开发实践: Android 5.1、BLE属性协议、小米电视案例及典型Bug分析。

内容简介

本书以作者在低功耗蓝牙开发实践过程中的一些开发经验为背景,介绍了Android 5.1 Bluedroid的架构和功能模块,讲述了BLE属性协议、属性数据库的构建、查询以及服务和特性的使用,然后介绍了一些运用在小米电视/OTT盒子/生态链投影仪的基于低功耗蓝牙的开发实战案例,最后讲述了蓝牙系统的调试,从几个方面列举并分析了几个典型Bug。

目录

  • 版权信息
  • 版权
  • 内容提要
  • 推荐序1
  • 推荐序2
  • 推荐序3
  • 推荐序4
  • 作者简介
  • 致谢
  • 前言
  • 资源与支持
  • 第1章 低功耗蓝牙简介
  • 1.1 概述
  • 1.2 蓝牙历史版本介绍
  • 1.2.1 蓝牙1.1标准和1.2标准
  • 1.2.2 蓝牙2.0标准
  • 1.2.3 蓝牙2.1+EDR标准
  • 1.2.4 蓝牙3.0+HS标准
  • 1.2.5 蓝牙4.0标准
  • 1.2.6 蓝牙4.1标准
  • 1.2.7 蓝牙4.2标准
  • 1.2.8 蓝牙5.0标准
  • 1.2.9 蓝牙2016年技术蓝图
  • 1.2.10 蓝牙版本演进编年史
  • 1.3 蓝牙4.0概述
  • 1.3.1 什么是蓝牙4.0
  • 1.3.2 蓝牙4.0的架构
  • 1.3.3 蓝牙4.0协议增加的新特性
  • 1.4 蓝牙4.0核心架构分析
  • 1.4.1 低功耗蓝牙概述
  • 1.4.2 核心系统架构
  • 1.4.3 核心构架模块介绍
  • 1.5 基于Bluetooth 4.0的新应用
  • 1.6 BLE、ZigBee和WiFi的介绍和选择
  • 1.6.1 ZigBee技术介绍
  • 1.6.2 WiFi技术介绍
  • 1.6.3 BLE、ZigBee和WiFi的选择
  • 第2章 Android蓝牙系统框架和代码结构
  • 2.1 概述
  • 2.2 Application Framework
  • 2.3 Bluetooth Process
  • 2.4 Bluetooth JNI
  • 2.5 Bluetooth HAL
  • 2.6 Bluedroid Stack
  • 2.7 Bluedroid的代码结构分析
  • 2.7.1 MAIN
  • 2.7.2 BTA
  • 2.7.3 BTIF
  • 2.7.4 HCI
  • 2.7.5 STACK
  • 第3章 GKI模块简介
  • 3.1 概述
  • 3.2 GKI事件的原理
  • 3.3 GKI主要数据结构
  • 3.4 GKI管理的线程
  • 3.5 线程相关主要函数
  • GKI_create_task()函数
  • 3.6 消息相关主要函数介绍
  • 3.6.1 GKI_wait()函数
  • 3.6.2 GKI_send_event()函数
  • 3.6.3 GKI_send_msg()函数
  • 3.6.4 GKI_read_mbox()函数
  • 3.6.5 pthread_cond_wait()函数
  • 3.7 动态内存池管理主要函数
  • 第4章 Bluedroid的消息传递机制
  • 4.1 概述
  • 4.2 消息传递相关结构体的定义
  • 4.3 消息的动态内存的获取
  • 4.4 消息的初始化及发送
  • 4.5 消息的读取和处理
  • 4.6 消息的完整数据结构剖析
  • 第5章 TASK简介
  • 5.1 概述
  • 5.1.1 TASK之间的消息传递
  • 5.1.2 事件的类型
  • 5.2 TASK处理消息的流程
  • 第6章 Bluedroid状态机简介
  • 6.1 Profile状态机介绍
  • 6.2 Profile状态机的结构设计
  • 6.3 状态机的注册
  • 6.4 状态机的驱动力来源
  • 6.5 Action函数列表
  • 6.6 状态机的状态集合
  • 6.7 Event处理函数介绍
  • 第7章 HCI接口层简介
  • 7.1 概述
  • 7.2 接口间的函数调用关系
  • 7.3 bt_hc_if接口的定义和获取
  • 7.3.1 bt_hc_if接口定义
  • 7.3.2 bt_hc_if接口的获取
  • 7.4 hc_callbacks函数集合的定义和注册
  • 7.4.1 hc_callbacks函数集合的定义
  • 7.4.2 hc_callbacks函数集合的注册
  • 7.5 bluetoothHCLibInterface的init()函数介绍
  • 7.6 libbt-vendor接口的获取、初始化和使用
  • 7.6.1 libbt-vendor的接口函数集合
  • 7.6.2 libbt-vendor接口的获取和使用
  • 7.6.3 libbt-vendor的初始化
  • 7.7 命令和数据的发送与接收
  • 7.7.1 命令和数据的发送接口
  • 7.7.2 命令处理结果和数据的接收接口
  • 7.7.3 H4层接收解析函数的分析
  • 7.8 HCI裸数据的分析
  • 7.9 本章总结
  • 第8章 L2CAP简介
  • 8.1 概述
  • 8.2 L2CAP的组成部分和功能
  • 8.2.1 L2CAP的两个组成部分
  • 8.2.2 L2CAP的功能
  • 8.3 设备间的操作
  • 8.3.1 操作模式
  • 8.3.2 L2CAP连接类型
  • 8.4 L2CAP数据包
  • 8.4.1 L2CAP数据包格式
  • 8.4.2 信号包格式
  • 8.5 L2CAP的使用
  • 8.6 LE数据包格式分析
  • 8.7 L2CAP的CSM(Channel State Machine)介绍
  • 8.7.1 子状态机介绍
  • 8.7.2 OPEN子状态机处理函数
  • 8.8 Profile在L2CAP的注册和函数回调机制
  • 8.8.1 Profile的注册
  • 8.8.2 Profile的注册回调函数集合的回调机制
  • 8.9 L2CAP的数据的发送和接收过程
  • 8.9.1 数据的发送
  • 8.9.2 数据的接收
  • 第9章 Bluedroid的初始化流程
  • 9.1 概述
  • 9.2 协议栈的bluetoothInterface接口的获取过程
  • 9.3 打开蓝牙接口的调用
  • 9.4 第一阶段:前期准备阶段
  • 9.5 第二阶段:蓝牙Firmware的加载阶段
  • 9.5.1 Firmware加载的总体思想
  • 9.5.2 发起Firmware加载的入口
  • 9.5.3 Firmware加载的过程
  • 9.6 第三阶段:后期初始化阶段
  • 9.6.1 底层协议栈的初始化
  • 9.6.2 上层协议栈的初始化
  • 第10章 蓝牙设备的扫描流程
  • 10.1 概述
  • 10.2 JNI层扫描入口和协议栈回调机制
  • 10.2.1 扫描入口
  • 10.2.2 回调机制
  • 10.3 蓝牙扫描流程的启动过程
  • 10.4 蓝牙设备的Inquiry过程
  • 10.5 蓝牙设备的Discover过程
  • 10.6 本章总结
  • 第11章 SMP简介
  • 11.1 什么是SMP
  • 11.2 SM在Host侧的位置
  • 11.3 SMP的流程介绍
  • 11.3.1 SM第1阶段——配对特征的交换
  • 11.3.2 第2阶段——根据特征信息配对
  • 11.3.3 第3阶段——Key的分发过程
  • 11.4 SMP协议包分析
  • 11.5 问和答
  • 第12章 LE属性协议简介
  • 12.1 概述
  • 12.2 属性的构成
  • 12.3 属性值的介绍
  • 12.4 属性数据库的构建过程
  • 12.4.1 Gatt Profile分层设计
  • 12.4.2 Gatt Service的构建
  • 12.4.3 特性的构建
  • 12.5 获取属性数据库的过程
  • 12.5.1 GATT服务的获取和设置过程
  • 12.5.2 服务的查询过程
  • 12.5.3 包含服务、特性和特性描述的查询过程
  • 第13章 LE属性数据库扫描过程的代码分析
  • 13.1 Discover过程的发起
  • 13.2 主要服务的Discover过程
  • 13.3 Discover过程回调函数的注册过程
  • 13.4 包含服务的Discover过程
  • 13.5 特性的Discover过程
  • 13.6 特性描述的Discover过程
  • 13.7 Discover过程的结束
  • 13.8 服务的上报过程
  • 13.8.1 服务的查询和发起上报过程
  • 13.8.2 上报服务的回调函数的注册过程
  • 13.8.3 服务的上报过程
  • 13.8.4 服务上报过程的日志分析
  • 第14章 低功耗蓝牙 HID 设备的连接过程分析
  • 14.1 概述
  • 14.2 连接过程的发起
  • 14.3 Hid服务的特性、特性描述的读取和存储
  • 14.3.1 查询和存储过程
  • 14.3.2 查询结果列表和分析
  • 14.4 连接过程的完成和输入设备的创建
  • 14.4.1 连接过程的完成和创建输入设备
  • 14.4.2 Hid按键的上报
  • 第15章 Find Me功能的实现
  • 15.1 概述
  • 15.2 Find Me功能的技术原理
  • 15.3 Find Me功能的代码实现
  • 15.3.1 Find Me功能的触发函数
  • 15.3.2 BluetoothGatt接口的获取
  • 15.3.3 Hid设备列表的获取
  • 第16章 低功耗蓝牙电池服务和电量的读取
  • 16.1 概述
  • 16.2 电量读取和电量变化回调函数的注册
  • 16.3 电量读取的发起和电量变化特性配置描述的设置
  • 16.4 电池电量读取的btsnoop数据解析
  • 第17章 LE设备接近配对的实现
  • 17.1 概述
  • 17.2 RSSI与LQI、接收距离之间的关系
  • 17.3 接近配对的简化实现
  • 17.4 接近配对代码示例
  • 第18章 基于LE广播的无线电子设备的唤醒方法
  • 18.1 概述
  • 18.2 无线电子设备的唤醒的硬件原理
  • 18.3 无线电子设备的唤醒的软件实现
  • 18.3.1 无线电子设备关机后唤醒的软件逻辑实现
  • 18.3.2 无线电子设备通电后唤醒的软件逻辑实现
  • 18.4 传输唤醒白名单列表和启动唤醒功能的命令的定义
  • 18.5 唤醒广播包的数据格式
  • 18.6 唤醒广播包的处理逻辑
  • 18.6.1 主机的处理逻辑
  • 18.6.2 设备的广播逻辑
  • 18.7 唤醒广播包的数据分析
  • 第19章 基于LE广播的系统Recovery的操作实现
  • 19.1 概述
  • 19.2 小米电视和盒子的系统恢复模式的介绍
  • 19.3 基于接收广播按键信息的Recovery系统框架
  • 19.4 广播包按键信息的定义
  • 19.5 进入Recovery的方法
  • 19.6 按键广播包的接收、解析和上报的代码分析
  • 第20章 蓝牙HID设备OTA升级的设计和实现
  • 20.1 概述
  • 20.2 Hid设备OTA升级总体流程设计
  • 20.3 Hid设备OTA升级命令定义
  • 20.4 Hid设备OTA升级的总体程序设计
  • 20.4.1 总体设计
  • 20.4.2 Kernel层Hidraw getReport()的实现过程
  • 20.4.3 Kernel层Hidraw setReport()的实现过程
  • 20.4.4 JNI层Hidraw getReport函数的实现
  • 20.4.5 JNI层Hidraw setReport函数的实现
  • 20.5 Java层OTA升级程序示例
  • 20.6 Hidraw setReport、getReport命令的数据分析
  • 第21章 加速度传感器在低功耗蓝牙设备上的应用
  • 21.1 概述
  • 21.2 蓝牙输入相关子系统、G-Sensor子系统简介
  • 21.3 加速度传感器设备的创建过程
  • 21.3.1 Bluedroid发起的设备注册过程
  • 21.3.2 Kernel中Hid设备的创建过程
  • 21.4 加速度传感器的驱动注册过程
  • 21.5 Sensor数据从Bluedroid到传感器驱动的传输过程
  • 第22章 LE系统快速更新连接参数的设计和实现
  • 22.1 概述
  • 22.2 更新连接参数的常规方法,快速更新连接参数碰到的困难及解决思路
  • 22.2.1 更新连接参数的常规方法介绍
  • 22.2.2 快速更新连接参数碰到的困难及解决思路
  • 22.3 快速更新连接参数的实现及应用
  • 22.3.1 快速更新连接参数的实现方法
  • 22.3.2 快速更新连接参数在语音传输中的应用
  • 第23章 LE语音编解码和传输
  • 23.1 概述
  • 23.2 音频采集、处理和蓝牙传输的软硬件过程
  • 23.3 ADPCM介绍
  • 23.3.1 ADPCM的概念
  • 23.3.2 ADPCM编码框图
  • 23.4 遥控器语音传输的总体流程
  • 23.5 主机端的语音数据的接收处理流程
  • 23.5.1 传统语音数据的接收处理流程
  • 23.5.2 基于Hidraw接口的语音数据的接收处理流程
  • 23.6 基于ADPCM的一种语音压缩编码数据的传输格式定义
  • 23.6.1 语音压缩编码数据起始帧的定义
  • 23.6.2 语音压缩编码数据桢的第1部分定义
  • 23.6.3 语音压缩编码数据桢其他部分定义
  • 23.6.4 语音压缩编码数据结束帧的定义
  • 23.6.5 完整语音压缩编码数据桢的格式定义
  • 23.7 基于ADPCM的一种语音压缩编码数据的接收数据的格式解析
  • 23.7.1 语音压缩编码数据起始帧的接收数据格式解析
  • 23.7.2 语音压缩编码数据的数据帧的第1帧的第1部分的接收数据格式解析
  • 23.7.3 语音压缩编码数据的数据帧第2帧的第1部分的接收数据格式解析
  • 23.7.4 语音压缩编码数据结束帧的接收数据格式解析
  • 23.8 基于Hidraw的语音压缩编码数据的接收和处理的代码示例
  • 23.8.1 /dev/hidrawX设备的寻找过程
  • 23.8.2 ADPCM语音压缩编码数据的读取和解码的代码示例
  • 第24章 开发工具
  • 24.1 概述
  • 24.2 Ellisys蓝牙协议分析仪
  • 24.3 Ellisys HCI分析
  • 24.4 Ellisys频谱分析
  • 24.5 Ellisys时序和逻辑分析
  • 24.6 Ellisys空中抓包
  • 24.7 Ellisys组网分析
  • 24.8 Ellisys集成化音频分析
  • 24.9 其他
  • 第25章 蓝牙系统Bug分析
  • 25.1 概述
  • 25.2 内存操作越界引发蓝牙重启的一个Bug分析
  • 25.2.1 内存操作越界Bug描述
  • 25.2.2 内存操作越界引发蓝牙重启的Bug分析过程
  • 25.3 系统IO繁忙时写btsnoop日志效率低导致蓝牙通信卡顿的Bug分析
  • 25.3.1 写btsnoop日志效率低的Bug描述
  • 25.3.2 写btsnoop日志效率低的Bug分析
  • 25.3.3 Bug的解决方法
  • 25.4 蓝牙数据总线丢失数据导致蓝牙重启
  • 25.4.1 导致蓝牙重启的Bug描述
  • 25.4.2 导致蓝牙重启的日志分析
  • 25.4.3 解决问题的方法
  • 25.5 蓝牙核心协议规范关于断连接流程的设计缺陷
  • 25.5.1 断连接流程的设计缺陷引发的Bug描述
  • 25.5.2 问题背景介绍
  • 25.5.3 Bug分析过程
  • 25.5.4 解决问题的方法
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

人民邮电出版社

人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。