- 浏览: 263457 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (303)
- c (31)
- c++ (16)
- java (18)
- c# (1)
- python (3)
- java web (6)
- oracle (7)
- sqlserver (2)
- mysql (2)
- android (24)
- android系统 (15)
- android多媒体部分 (15)
- android游戏 (12)
- linux (26)
- javaScript (1)
- ajax (1)
- node JS (2)
- html (5)
- apache (3)
- jboss (1)
- weblogic (0)
- 通信协议 (10)
- 云计算 (1)
- 分布式 (5)
- ejb (1)
- webservice (5)
- 设计模式 (16)
- JNI (6)
- swing (13)
- 版本控制 (1)
- UML (1)
- xml (4)
- spring (5)
- hibernate (5)
- struts1 (3)
- struts2 (4)
- ibatis (0)
- tomcat (2)
- 心得体会 (1)
- css (1)
- 嵌入式 (41)
- arm体系结构 (10)
蓝牙部分
蓝牙协议栈1.11.22.02.13.0
异步数据和语音传输采用的协议:
逻辑链路控制和适配协议(L2CAP)、服务发现协议(SDP)、串口模拟协议(RFCOMM)
主要控制接口由主机控制接口层体现,他是蓝牙协议里软硬件之间的接口
在HCI之上的是蓝牙的上层应用框架,每个应用模式为一个profile,如无线立体声耳机A2DP
(AdvancedAudioDistributionProfile)等
蓝牙的基本架构
自上而下包括以下内容:
Linux内核的蓝牙驱动程序
Linux内核的蓝牙协议层
Bluez蓝牙在用户空间的库
Bluez适配层
Android.bluetooth包中的各个类(蓝牙在框架层的内容)
蓝牙相关的应用程序
蓝牙部分的结构图:
蓝牙的用户空间库bluez
空间库bluez是linux平台上的一套完整的蓝牙协议栈,通过D-BUSIPC机制来提供应用层接口
它的底层协议实现在kernel代码中
D-BUS是一套应用广泛的进程间通信(IPC)机制,是相对比较底层的(类似socket)它更加复杂
代码位于kernl目录下的net/bluetooth下
底层协议方面;
HCI:主机控制协议,完成与蓝牙硬件的交互
SDP:服务发现协议,访问其他服务的基础协议
RFCOMM:类似于串口的通信协议为上层服务的实现提供传输接口
L2CAP:逻辑链路和控制协议,是RFCOMM.SDP等协议的基础
SCO:同步数据交换协议
上图中左侧部分为HCI具体功能实现;
Adapter一个adapter对应一个蓝牙设备,管理设备相关信息
Manager管理主机上的蓝牙设备
Service服务
Security安全相关功能模块
Database管理组织服务列表
右侧是各种服务
Audio语音A2DP普通语音同步
Input输入服务
Transfer文件交换服务
Network网络服务
各种协议之间的关系
在android系统中,bluez的源码在以下的目录中:\external\bluetooth\bluez
会生成若干个动态库和可执行程序
动态库
Libbluetooth:公共库被各部分应用使用,
Libhcid:主机接口的实现
Audio:音频服务
Input:输入服务
Liba2dp:蓝牙立体声服务
可执行程序
Hcid:直接封装libhcid主机接口的实现守护进程,提供对外的D-BUS接口
Hciconfighcitoolhciattach主机接口辅助工具
Dund提供dun服务
Pand提供pan服务
Sdptool提供sdp服务相关接口
Rfcommrfcomm配置工具
Bluez的适配层
代码路径为:\system\bluetoot
封装了蓝牙的开关功能和射频开关
蓝牙的JNI部分和java部分
JNI部分的代码路径为:\frameworks\base\core\jni
最终生成libandroid_runtime.so
Jvav部分代码路径
蓝牙的服务部分代码路径\frameworks\base\core\java\android\server
支持耳机(headset)免提(handsfree)立体声(a2dp)
核心组成android.bluetooth包中以IBluetoothDevice.aidl为接口的IBinder服务端BluetoothDeviceService
客户端 BluetoothDevice以及android.service包中的BluetothEventLoop
bluetoothdeviceService主要是用于蓝牙的开启和关闭,设备的发现和配对,服务的发现和邦定
开关功能是直接调用底层的bluezr接口来实现
Java部分和底层的关系
客户端bluetoothDevice.getRemoteServiceChannel调用服务端的bluetoothDeviceService.getRemoteServiceChannel然后调用JNI的getRemoteServiceChannelNative
Android_bluetooth_common.h的部分代码如下;
dbus_bool_tdbus_func_args_async(JNIEnv*env,
DBusConnection*conn,
inttimeout_ms,
void(*reply)(DBusMessage*,void*,void*),
void*user,
void*nat,
constchar*path,
constchar*ifc,
constchar*func,
intfirst_arg_type,
...);
最后调用;dbus_func_args_async_valist
staticdbus_bool_tdbus_func_args_async_valist(JNIEnv*env,
DBusConnection*conn,
inttimeout_ms,
void(*user_cb)(DBusMessage*,
void*,
void*),
void*user,
void*nat,
constchar*path,
constchar*ifc,
constchar*func,
intfirst_arg_type,
va_listargs){
DBusMessage*msg=NULL;
constchar*name;
dbus_async_call_t*pending;
dbus_bool_treply=FALSE;
/*Composethecommand*/
//组成命令(创建一个消息结构)
msg=dbus_message_new_method_call(BLUEZ_DBUS_BASE_IFC,path,ifc,func);
if(msg==NULL){
LOGE("CouldnotallocateD-Busmessageobject!");
gotodone;
}
/*appendarguments*/
//附加参数
if(!dbus_message_append_args_valist(msg,first_arg_type,args)){
LOGE("Couldnotappendargumenttomethodcall!");
gotodone;
}
/*Makethecall.*/
//通过D-BUS调用接口
pending=(dbus_async_call_t*)malloc(sizeof(dbus_async_call_t));
if(pending){
DBusPendingCall*call;
pending->env=env;//设置参数中的内容
pending->user_cb=user_cb;
pending->user=user;
pending->nat=nat;
//pending->method=msg;
//发送命令返回信息
reply=dbus_connection_send_with_reply(conn,msg,
&call,
timeout_ms);
if(reply==TRUE){
dbus_pending_call_set_notify(call,
dbus_func_args_async_callback,
pending,
NULL);
}
}
done:
if(msg)dbus_message_unref(msg);
returnreply;
}
//本机的首个蓝牙设备
#defineBLUEZ_ADAPTER_OBJECT_NAMEBLUEZ_DBUS_BASE_PATH"/hci0"
Ifc为DBUS_CLASS_NAME指向org.bluez.adapter直接访问HCI部分的adapter
在android2.3之后有采用level11,支持了测试蓝牙链接状态的函数
//链接spp类的设备
BluetoothAdapteradapter=BluetoothAdapter.getDefaultAdapter();
BluetoothDevicebd=adapter.getRemoteDevice(addr);
Methodm=bd.getClass().getMethod("createRfcommSocket",newClass[]{int.class});
BluetoothSocketbs=(BluetoothSocket)m.invoke(bd,Integer.valueOf(1));
发表评论
-
android系统学习笔记一
2012-09-03 15:01 9161.android的系统架构(linux2.6内核) Lin ... -
android系统学习笔记二
2012-09-03 15:03 920android的linux内核和驱动程序 Androidr专 ... -
android系统学习笔记三
2012-09-03 15:05 843第四章android的底层库和程序 知识点: And ... -
android系统学习笔记四
2012-09-03 15:07 1141Android的GUI系统 AndroidGUI系统综 ... -
android系统学习笔记五
2012-09-03 15:12 2205android中的audio系统 Audo系统主要分如下几 ... -
android系统学习笔记六
2012-09-03 15:16 2229android的多媒体系统 ... -
android系统学习笔记七
2012-09-03 15:18 747Android电话部分综述 主 ... -
android系统学习八
2012-09-03 15:19 761Android的联接部分 Wifi部分 Wif ... -
android系统学习笔记十一
2012-09-03 15:22 1513Gps(globalPositionSystem全球定位系统) ... -
android系统学习笔记十二
2012-09-03 15:23 1023Android的传感器系统 ... -
Android编译系统详解(一)
2012-09-10 13:45 840+++++++++++++++++++++++++++++ ... -
android----ServiceManager
2012-09-18 00:33 4324serviceManager 在c++层如何使用servi ... -
android 自定义核心服务
2012-09-18 23:27 803native service zygote 服务 kern ... -
android系统移植学习笔记一
2012-09-21 16:08 635系统框架 applicationjava应用程序 ...
相关推荐
Android学习笔记是Android开发者的必读书籍,书中涵盖了Android系统架构、Activity、Intent、资源管理等多方面的知识。本笔记对应的学习资源《第一行代码》是Android开发者的入门必读书籍,书中系统地介绍了Android...
Android基础学习笔记主要涵盖了一系列关于Android开发的基本概念和关键组件,以下是这些知识点的详细解析: 1. **Activity**: 是Android应用程序的基本单元,它代表用户在屏幕上看到的一个界面。每个Activity都必须...
这篇学习笔记将引导新手入门,通过创建第一个简单的案例来了解Android Studio的基本操作。 首先,让我们了解一下Android Studio的核心功能。它基于IntelliJ IDEA,具备代码自动补全、重构、调试等强大的开发特性。...
Android Activity学习笔记 Android Activity是Android系统中最基本的组件之一,它负责处理用户交互和显示用户界面。本文将深入讲解Activity的生命周期、Activity之间的数据交互、Activity启动模式、Task和BackStack...
### Android学习笔记 #### 1. Android概述 **1.1 Android的特性** - **应用框架**:Android提供了一个强大的应用框架,使得开发者能够轻松地重用基础组件和服务,简化了应用程序的开发流程。 - **Dalvik虚拟机**...
- Android系统基于Linux系统开发,拥有开放源码。 - Android系统框架由多个组件构成,其中包括Activity、Intent、Service、ContentProvider、View和BroadcastReceiver。 - Activity作为组件容器,主要负责用户...
根据给定的信息,我们可以从Java和Android学习笔记中提取出一系列重要的知识点,下面将逐一进行详细解释。 ### Java基础知识 #### 1. 命令行基础操作 - **`javacmd`**: 这个命令是Java命令行工具的一部分,用于...
### Android学习笔记知识点详解 #### 一、简介与背景 Android作为全球最受欢迎的移动操作系统之一,自2007年谷歌发布以来,迅速占领市场并持续引领移动技术的发展。随着移动互联网的兴起和发展,Android应用开发...
【Android学习笔记】 Android平台是谷歌推出的一个开放源代码的移动设备操作系统,它为开发者提供了一个全面的软件包,包括操作系统、中间件和关键应用程序。这个平台的主要目标是促进移动应用的创新和多样性,允许...
### Android学习笔记——从HelloWorld开始 #### 一、Google的Android SDK介绍 自从Google发布了Android SDK以来,这款开源移动操作系统迅速吸引了众多开发者的关注。Android SDK为开发者提供了丰富的工具和API,...
Android全程学习笔记旨在提供一个详尽且全面的指南,涵盖了Android开发中的关键技术点和实践案例。以下是关于Android开发的一些核心知识点: 1. **第一个Android应用**:开发Android应用的起点通常是从创建并运行你...
这篇学习笔记主要涵盖了关于布局的一些基本概念,特别是`fill_parent`和`wrap_content`这两种尺寸指定方式,以及如何通过XML布局文件来精确控制组件的位置。 首先,`fill_parent`和`wrap_content`是Android布局中的...
这个"Android_学习笔记.zip"文件很可能包含了一个详细的Android开发学习路径和关键知识点的总结。下面将基于这个主题,详细讲解Android开发的一些核心概念和技术。 首先,Android是Google开发的一款开源操作系统,...
在Android系统相关学习笔记中,我们可以深入探讨这个广泛而复杂的移动操作系统的核心概念和技术。Android以其开源性和灵活性,吸引了大量的开发者和爱好者。以下是一些关键的知识点: 1. **Android架构**:Android...
【Android学习笔记详解】 在移动应用开发领域,Android操作系统占据着重要的地位,为开发者提供了...通过系统学习并实践其中的内容,你将能够逐步掌握Android开发的核心技能,为你的Android开发者之路打下坚实的基础。
这篇学习笔记将深入探讨PreferenceActivity的使用方法、功能以及与源码相关的知识。 首先,PreferenceActivity是Android SDK提供的一种特殊类型的Activity,它允许开发者快速构建具有可配置选项的界面,类似于系统...
### Android开发学习笔记知识点梳理 #### 一、Android概述与架构 - **定义与发布**:Android是由Google在2007年11月5日宣布的基于Linux平台的开源手机操作系统。它不仅用于智能手机,还广泛应用于平板电脑、可穿戴...