没有合适的资源?快使用搜索试试~ 我知道了~
对android蓝牙系统及其编程方法的介绍,主要侧重bluez协议栈的分析。
资源推荐
资源详情
资源评论
Android 蓝牙系统分析与开发
安卓蓝牙使用的是 Bluez 协议栈,整个 android 蓝牙系统包括三大部分:
1. 驱动部分:在 kernel/driver/bluetooth 目录,主要包括电源管理和蓝牙休眠部分
在 kernel/driver/tty 目录还有蓝牙的 uart 或 usb 驱动
2. Bluez 协议栈部分:包含的内容很复杂,有基本协议栈,如 hci/l2cap/rfcomm/
等,还有 a2dp/obex 等 profile,代码分布在许多位置;
3. 蓝牙应用部分,主要是蓝牙设置界面等等。
以下是我从网上转过来的一些内容:
实战 Linux Bluetooth 编程(一) 协议栈概述
Sam 一年前在 Linux 下写了一个类似 Windows 下 BTW 的库--BTX。现在需要添加
新功能时发现很多知识点都忘记
了。所以决定在这次学习中,把一些 bluez API 记录下来。这几天又想,这样还
不够,不如把 Linux 下的
Bluetooth 编程基础给记录下来吧。
前言:随着嵌入式系统的飞速发展,很多嵌入式平台上需要 Bluetooth 设备和应
用。但在 Linux 下如何对
Bluetooth 编程,一直没有一份很好的中文文档。Sam 结合自己的工作,一步一
步将一些有用的东西记录下来
,希望对其它 Linux 下 Bluetooth 编程的朋友有点帮助。
一:Bluetooth 基本概念:
Bluetooth 是爱立信、诺基亚、东芝、IBM 和 Intel 5 家公司在 1998 年联合推出
的一项无线网络技术。其宗旨
是提供一种短距离、低成本的无线传输应用技术。在行业协会筹备阶段,需要一
个极具有表现力的名字来命
名这项高新技术。行业组织人员,在经过一夜关于欧洲历史和未来无限技术发展
的讨论后,有些人认为用
Blatand 国王的名字命名再合适不过了。Blatand 国王将现在的挪威,瑞典和丹
麦统一起来;就如同这项即将
面世的技术,将标准不一的短距离无线传输技术统一起来。
Intel 负责半导体芯片和传输软件的开发,爱立信负责无线射频和移动电话软件
的开发,IBM 和东芝负责笔记
本电脑接口规格的开发。
蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备、计算机及其终端
设备、各种数字数据系统、
甚至家用电器采用无线方式联接起来。它的传输距离为 10cm~10m,如果增加功
率或是加上某些外设便可达
到 100m 的传输距离。它采用 2.4GHz ISM 频段和调频、跳频技术,使用权向纠错
编码、ARQ、TDD 和基带协议。
TDMA 每时隙为 0.625μs,基带符合速率为 1Mb/s。蓝牙支持 64kb/s 实时语音传
输和数据传输,语音编码为
CVSD,发射功率分别为 1mW、2.5mW 和 100mW,并使用全球统一的 48 比特的设备
识别码。由于蓝牙采用无线接
口来代替有线电缆连接,具有很强的移植性,并且适用于多种场合,加上该技术
功耗低、对人体危害小,而
且应用简单、容易实现,所以易于推广。
蓝牙技术的系统结构分为三大部分:底层硬件模块、中间协议层和高层应用。底
层硬件部分包括无线跳频(
RF)、基带(BB)和链路管理(LM)。无线跳频层通过 2.4GHz 无需授权的 ISM
频段的微波,实现数据位流的
过滤和传输,本层协议主要定义了蓝牙收发器在此频带正常工作所需要满足的条
件。基带负责跳频以及蓝牙
数据和信息帧的传输。链路管理负责连接、建立和拆除链路并进行安全控制。
关于 bluetooth 协议栈,接下来再谈。
当前已经实现的 Bluetooth 栈有以下各种:
1. Widcomm: 第一个 windows 上的协议栈,由 Widcomm 公司开发,也就是现在的
Broadcom.
2. Microsoft Windows stack: Windows XP SP2 中包括了这个内建的协议栈,
开发者也可以调用其 API 开发
第三方软件。
3. Toshiba stack: 它也是基于 Windows 的,不支持第三方开发,但它把协议栈
授权给一些 laptop 商(sony,
asus 等,我的本本上就是 Toshiba 的)。它支持的 Profile 有: SPP, DUN, FAX,
LAP, OPP, FTP, HID,
HCRP, PAN, BIP, HSP, HFP , A2DP, AVRCP, GAVDP)
4. BlueSoleil: 著名的 IVT 公司的产品.该产品可以用于桌面和嵌入式,他也
支持第三方开发,DUN, FAX,
HFP, HSP, LAP, OBEX, OPP, PAN SPP, AV, BIP, FTP, GAP, HID, SDAP, and SYNC。
5. Bluez: Linux 官方协议栈,该协议栈的上层用 Socket 封装,便于开发者使
用,通过 DBUS 与其它应用程序
通信。
6. Affix: NOKIA 公司的协议栈,在 Symbian 系统上运行.
7. BlueDragon:东软公司产品,好像 2002 年 6 月就通过了蓝牙的认证,支持的
Profile:SDP、Serial-DevB
、AVCTP、AVRCP-Controller、AVRCP-Target、Headset-AG、Headset-HS、OPP-Client、
OPP-Server、CT-GW
、CT-Term、Intercom、FT-Server、FT-Client、GAP、SDAP、Serial-DevA、AVDTP、
GAVDP、A2DP-Source、
A2DP-Sink.
8. BlueMagic:美国 Open Interface 公司 for portable embedded divce 的协
议栈,iphone(apple),nav-
u(sony)等很多电子产品都用该商业的协议栈,BlueMagic 3.0 是第一个通过
bluetooth 协议栈 1.1 认证的协
议栈,那么我现在就在用它,那么该栈用起来简单,API 清晰明了。实现了的
profile
有:HCI,L2CAP,RFCOMM,A/V,Remote,Control,A/V,Streaming,BIP,BPP,DUN,FAX,
FTP,GAP,Hands-
Free,and,Headset,HCRP,HID,OBEX,OPP,PAN,BNEP,PBAP,SAP,SPP,Synchronizat
ion,SyncML,Telephony,XML.
9. BCHS-Bluecore Host Software: 蓝牙芯片 CSR 的协议栈,同时他也提供了一
些上层应用的 Profile 的库,
当然了它也是为嵌入式产品了,支持的 Profile 有:
A2DP,AVRCP,PBAP,BIP,BPP,CTP,DUN,FAX,FM API,FTP
GAP,GAVDP,GOEP,HCRP,Headset,HF1.5,HID,ICP,JSR82,LAP Message Access
Profile,OPP,PAN,SAP,SDAP,SPP,SYNC,SYNC ML。
10. Windows CE:微软给 Windows CE 开发的协议栈,但是 windows ce 本身也支
持其它的协议栈
11. BlueLet:IVT 公司 for embedded product 的清量级协议栈。
实战 Linux Bluetooth 编程(二) BlueZ 简介
Linux 下 Bluetooth 协议栈的实现. Linux 下开放的蓝牙协议栈主要包括 IBM 公
司的 BlueDrekar,Nokia 公司的
Affix, Axis 公司的 OpenBT 和官方协议栈 BlueZ。我们主要面对 Bluez 来探讨。
BlueZ 基础代码均是由 Maxim Krasnyansky 完成的。包括:HCI,L2CAP,RFCOMM
和基本 socket 的实现。他就职
于 Qualcomm(高通)。Marcel Holtmann 开发层的协议和应用,包括:BNEP, CMTP
等。当然,这些中也有 Maxim
Krasnyansky 的参预。有部分代码由 Nokia 提供的。
Bluez 是如何实现 Bluetooth 协议栈的呢? 它分 2 部分实现:
1.Kernel 层实现:
正如上一篇所谈到的,bluetooth 协议栈有多层结构,最底层的硬件协议在硬件
中就已经实现了。(例如
broadcom 的芯片中,底层硬件协议已经包含于芯片之中了)。软件级别的协议
实现,从 HCI 这一层起就可以
了。 BlueZ 对各层协议的实现是依托于 Socket 的。BlueZ 首先创建了一个新的
Socket 中的协议--
PF_BLUETOOTH (AF_BLUETOOTH=31). (也就是说,Socket()的第一个参数:
domain 必须是:
PF_BLUETOOTH )。这也意味着,地址类型需要使用 Bluetooth 所定义的。
其实很简单,就是在 net_families(网络协议列表)中添加了 PF_BLUETOOTH 这一
项。如果对 Linux Kernel 有了
解的话,就知道这个注册动作一定在 Bluetooth init 部分作的。
同样,各个协议层(如:HCI,L2CAP,HID 等)都将自己的行为规范添加到
PF_BLUETOOTH 协议中。
2.应用程序层实现:
虽然 Kernel 层已经将 Bluetooth 协议栈完全实现了,但如果要使用起来,还是
非常不方便的。毕竟应用程序
与 kernel 最方便的交流通道就是 ioctl().这非常不直观。于是,BlueZ 又提供
了一套 API,这个 API 帮助开发者
方便的与 Kernel 层协议打交道。当然,这些 API 底层的实现其就是是 ioctl.
BlueZ 的时间,基本就是这样了。下面咱们具体研究如何使用 BlueZ 所提供的这
套 API。
实战 Linux Bluetooth 编程(三) HCI 层编程
1. HCI 层协议概述:
HCI 提供一套统一的方法来访问 Bluetooth 底层。如图所示:
从图上可以看出,Host Controller Interface(HCI) 就是用来沟通 Host 和
Module。Host 通常就是 PC,
Module 则是以各种物理连接形式(USB,serial,pc-card 等)连接到 PC 上的
bluetooth Dongle。
在 Host 这一端:application,SDP,L2cap 等协议都是软件形式提出的(Bluez
中是以 kernel 层程序)。在
Module 这一端:Link Manager, BB, 等协议都是硬件中 firmware 提供的。
而 HCI 则比较特殊,它一部分在软件中实现,用来给上层协议和程序提供访问接
口(Bluez 中,hci.c
剩余34页未读,继续阅读
资源评论
Polynesia
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Golang_Puzzlers-新年主题资源
- vscode-vscode
- Algorithm Practice-冒泡排序
- gitmoji-vscode-vscode
- 常见查找算法-折半查找的实现
- StudentManageSystem-学生成绩链表处理
- Truora-Web-nodejs安装及环境配置
- DataStructure-建立学生信息链表
- discussion-vue3-master-通讯录排序
- PanUmlTools-类图
- datastructure-数据结构
- 计算机组成原理-计算机组成原理
- 24.7.8_sort-希尔排序
- renren-ui-nodejs安装及环境配置
- 大数据技术毕业设计源代码全套技术资料.zip
- 智慧农场小程序源代码全套技术资料.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功