代码改变世界

随笔分类 -  Android Bluetooth

android4.3 Bluetooth(le)分析之startLeScan分析

2013-09-22 23:47 by ...平..淡..., 10613 阅读, 收藏, 编辑
摘要: BluetoothAdapter.java中有lowenery(le)的一些方法,android提供了这些方法,但源码中并未找到这些方法的调用之处。本文档主要分析这类方法的执行流程,来了解下le到底做了些什么。本文主要就是分析下startLeScan方法(两个重载方法)。 public boolean startLeScan(LeScanCallback callback) { return startLeScan(null, callback); } public boolean startLeScan(UUID[] serviceUuids, LeScanC... 阅读全文

android4.3 Bluetooth分析之扫描分析

2013-09-22 23:04 by ...平..淡..., 3760 阅读, 收藏, 编辑
摘要: android4.3中引入了蓝牙低能耗le(low energy),相应的也有一些方法/类。不过代码里,并没有找到初始调用的地方。所以这里还是先只分析下bt普通的扫描流程(类似android 4.2),先贴出流程图主要通过“扫描”的流程来分析下BluetoothSettings.java::startScanning ----packageLocalBluetoothAdapter.java::startScanning ----packageBluetoothAdapter.java::startDiscovery ----framew... 阅读全文

(转)DBus API的使用(讲的很清晰)

2013-03-05 18:50 by ...平..淡..., 3313 阅读, 收藏, 编辑
摘要: 转自DBus 入门与应用--基本概念 上(C API 级别的使用观点)、DBus 入门与应用--基本概念 下(C API 级别的使用观点)转载请注明出处 作者:唐风DBus是用来进行进程间通信的。下面这张图展示了一些DBus的大部分东西,但是它太复杂了:​DBus 本身是构建在 Socket 机制之上。真正的通信还是由 Socket 来完成的。DBus 则是在这之上,制定了一些通信的协议,并提供了更高一层的接口,以更方便应用程序之间进行数据的交互。在DBus的体系中,有一个常驻的进程 Daemon,所有进程间的交互都通过它来进行分发和管理。所有希望使用 DBus 进行通信的进程,都必须事先连上 阅读全文

(转)linux下bluetooth编程(八)SDP层编程

2012-10-16 18:53 by ...平..淡..., 583 阅读, 收藏, 编辑
摘要: BlueZ提供的SDP API,常见的如下:1.sdp_session_t *sdp_create(int sk, uint32_t flags)参数1:sk: socket参数2:SDP flags. 取值如下:#define SDP_RETRY_IF_BUSY0x01#define SDP_WAIT_ON_CLOSE0x02#define SDP_NON_BLOCKING0x04创建一个新的Session为了异步查找。Session结构如下:typedef struct {int sock;int state;int local;int flags;uint16_t tid;// Curr 阅读全文

(转)linux下bluetooth编程(七)SDP协议

2012-10-16 18:50 by ...平..淡..., 589 阅读, 收藏, 编辑
摘要: Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。这个协议定义了客户如何能够寻找基于特定属性的服务而不让客户知道可用服务的任何知识。SDP提供发现新服务的方法,在当客户登录到正在操作的蓝牙服务器的一个区域时是可用的。Service discovery机制提供client应 阅读全文

(转)linux下bluetooth编程(六)L2CAP层编程实例

2012-10-16 18:49 by ...平..淡..., 756 阅读, 收藏, 编辑
摘要: 例一:发送Signaling Packet:Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.多个Command可以在一个C-frame(control frame)中发送。如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identifier等。以下是一个发送signaling Command以及接收Response的简单例子:int main(int argc, char** arg 阅读全文

(转)linux下bluetooth编程(五)bluetooth与socket

2012-10-16 18:47 by ...平..淡..., 443 阅读, 收藏, 编辑
摘要: 一:理解Socket:在使用手机与女朋友联系时,必须用手机拨她的号码,然后心情坎坷的等待她的应答。当双方通话时,就建立了一个具有两个端点的通信线路。Linux中的Socket与电话非常相似。具体问题,稍后再分析。二:Socket域(domain),类型(type),协议(protoclo)以及Bluetooth中的具体使用:Berkeley小组在构思BSD Socket时,TCP/IP协议也还处在发展之中,其他一些很有竞争力的协议如X.25等也在发展,其它很多协议还在构思与研究阶段(Bluetooth还没出生)。为了使Socket可以应用于各种不同协议,domain的作用就在于此。domain 阅读全文

(转)linux下bluetooth编程(四)L2CAP层编程

2012-10-16 18:46 by ...平..淡..., 642 阅读, 收藏, 编辑
摘要: 一:L2CAP协议简介:Logical Link Control and Adaptation Protocol(L2CAP)逻辑连接控制和适配协议(L2CAP)为上层协议提供面向连接和无连接的数据服务,并提供多协议功能和分割重组操作。L2CAP充许上层协议和应用软件传输和接收最大长度为64K的L2CAP数据包。 L2CAP基于通道(channel)的概念。通道(Channel)是位于基带(baseband)连接之上的逻辑连接。每个通道以多对一的方式绑定一个单一协议(single protocol)。多个通道可以绑定同一个协议,但一个通道不可以绑定多个协议。每个在通道里接收到的L2CAP数据. 阅读全文

(转)linux下bluetooth编程(三)HCI层编程

2012-10-16 18:45 by ...平..淡..., 967 阅读, 收藏, 编辑
摘要: 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则比较特殊,它一部分在 阅读全文

(转)linux下bluetooth编程(二)blueZ协议栈

2012-10-16 18:44 by ...平..淡..., 1004 阅读, 收藏, 编辑
摘要: 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 阅读全文

(转)linux下bluetooth编程(一)基础概念

2012-10-16 18:42 by ...平..淡..., 1605 阅读, 收藏, 编辑
摘要: 一:Bluetooth基本概念: Bluetooth是爱立信、诺基亚、东芝、IBM和Intel 5家公司在1998年联合推出的一项无线网络技术。其宗旨是提供一种短距离、低成本的无线传输应用技术。在行业协会筹备阶段,需要一个极具有表现力的名字来命名这项高新技术。行业组织人员,在经过一夜关于欧洲历史和未来无限技术发展的讨论后,有些人认为用Blatand国王的名字命名再合适不过了。Blatand国王将现在的挪威,瑞典和丹麦统一起来;就如同这项即将面世的技术,将标准不一的短距离无线传输技术统一起来。Intel负责半导体芯片和传输软件的开发,爱立信负责无线射频和移动电话软件的开发,IBM和东芝负责笔记本 阅读全文

(转)Linux下Bluez的编程实现

2012-10-16 18:40 by ...平..淡..., 3189 阅读, 收藏, 编辑
摘要: 蓝牙的各个协议栈的简介21.1、蓝牙技术21.1、蓝牙协议栈21.2、蓝牙技术的特点41.2.1、蓝牙协议栈体系结构41.2.2、蓝牙协议栈低层模块51.2.3、软件模块51.3、蓝牙的一些Profile 62、Bluez和D-Bus 82.1、Bluez和D-Bus体系结构82.2、D-Bus介绍102.3、Bluez的安全接口142.4、Bluez适配器接口192.5、Bluez配对192.6、Bluez绑定203、Bluez编程实现213.1、蓝牙开发关键技术剖析213.1.1、连接机制分析213.1.2、自动连接213.1.3、时钟设计223.1.4、配对列表管理233.1.5、蓝牙文 阅读全文

(转)蓝牙无线技术配置文件

2012-09-19 09:29 by ...平..淡..., 1089 阅读, 收藏, 编辑
摘要: 为了使用蓝牙无线技术,设备必须能够翻译特定蓝牙配置文件。配置文件定义了可能的应用。蓝牙配置文件表达了一般行为,蓝牙设备可以通过这些行为与其它设备进行通信。蓝牙技术定义了广泛的配置文件,描述了许多不同类型的使用案例。按照蓝牙规格中提供的指导,开发商可以创建应用程序以与其它符合蓝牙规格的设备协同工作。在最低限度下,各个配置文件规格应包含下列主题的相关信息:与其它配置文件的相关性建议的用户界面格式配置文件使用的蓝牙协议堆栈的特定部分。为了执行其任务,每个配置文件都使用堆栈各层上的特定选项和参数。如果需要,这可以包括必需的服务记录概要高级音频分发配置文件 (A2DP)A2DP 描述了立体声质量音频如何 阅读全文

(转)android 4.0 蓝牙服务开启流程分析

2012-09-05 18:31 by ...平..淡..., 4795 阅读, 收藏, 编辑
摘要: 第1章 Android蓝牙系统1.1 蓝牙技术简介蓝牙(Bleuetooth)原是十世纪统一了丹麦的一个国王的名字,现取其“统一”的含义,用来意在统一无线局域网通讯的标准的蓝牙技术。蓝牙技术是爱立信,IBM,Intel等世界5家著名大公司在1998年联合推出的一项无线通讯规范。随后成立的蓝牙技术特殊兴趣组织(SIG)来负责该技术的开发和技术协议的制定,如今全世界已有1800多家公司加盟该组织,最近微软公司也正式加盟并成为SIG组织的领导成员之一。它以低成本的近距离无线连接为基础,为移动通信设备建立一个短程无线连接。其实质内容是建立通用的无线电空中接口,使计算机和通信设备进一步结合,让不同的厂家 阅读全文

(转)android4.0蓝牙使能的详细解析

2012-09-05 14:30 by ...平..淡..., 1587 阅读, 收藏, 编辑
摘要: 内容简介:本文详细分析了android4.0 中蓝牙使能的过程,相比较android2.3,4.0中的蓝牙最大的差别在于UI上on/off的伪开关。在android4.0中加入了 adapter的状态机。所谓的状态机就类似于状态转换图,在一个状态收到某个特定的命令会变成另外一个状态,不同的命令可以跳转到不同的状态(当然也有 可能到同一状态)。adapter的初始状态为poweroff,在android系统启动的时候会进入warmup状态,同时会进行UUID的add, 该操作会引起propertychanged的UUID signal,该signal会使得状态从warmup变换到hotoff状态 阅读全文

(转)Android Bluetooth opp package 学习笔记

2012-08-21 15:08 by ...平..淡..., 1764 阅读, 收藏, 编辑
摘要: 一、背景及相关知识学习1、Android Bluetooth SDK首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /><uses-permission android:name="android.permission.BLUETOOTH" />我们可以通过intent调用android.bluetooth.opp包下的activity也可以直接调用android.bluet 阅读全文

(转)Android蓝牙开发浅析

2012-08-02 10:57 by ...平..淡..., 833 阅读, 收藏, 编辑
摘要: 1. 使用蓝牙的响应权限<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 2.打开蓝牙在这里首先要了解蓝牙操作的一个核心类BluetoothAdapter,对蓝牙操作首先就需要有一个BluetoothAdapter实例。常用的几个方法如下: getDefaultAdapter()——获取本地的蓝牙设备 enable( 阅读全文

android 蓝牙源码分析

2012-07-26 15:24 by ...平..淡..., 4456 阅读, 收藏, 编辑
摘要: BluetoothService类中定义的Native方法都在android_server_BluetoothServer.cpp里建立jni调用一、开启(BT Turn on Turn off) (蓝牙的打开关闭由类BluetoothEnabler控制。)1.由BluetoothEnabler控制界面操作,在其构造函数里会先调用 LocalBluetoothManager.getInstance(context)。2.然后在LocalBluetoothManager类的getInstance函数里会调用当前类下的init()函数,该init()函数中通过BluetoothAdapter.ge 阅读全文