有关Android Bluetooth--Bluetooth基础

晨曦之光 发布于 2012/05/21 12:17
阅读 334
收藏 1

蓝牙协议

针对Bluetooth, Java Community Process(JCP)定义了JSR 82Java APIs for Bluetooth Wireless Technology (JABWT)规范bluetooth API。

下面是Bluetooth栈结构,作为开发,主要关注的是红框中的几个协议及JSR-082定义的相关API。


L2CAP协议

该协议用于数据传输前后的处理,比如数据分段和组装。这是个底层的协议,作用类似于TCP或者UDP,但它用UUID,而不是Port用于server和client的结对

RFCOMM

该协议是串口模拟,把蓝牙接口模拟成串口

OBEX协议

这是一个应用层的协议,建立在RFCOMM之上,但它也可以建立在红外协议IrDA和TCP/IP等其他传输协议之上

SDP协议

SDP协议用于客户端在远端设备中寻找所需的服务。它与SDDB(Service Discovery Database)有密切联系。SDDB保存该蓝牙设备提供的所有服务(Service Record),SDP会在SDDB中寻找客户所需的服务并连接之

UUID

UUID在蓝牙接口中的作用类似于TCP/IP的端口号。UUID列表 列出了一些常用的UUID值

蓝牙服务例子

使用安卓开发工具adp shell可以查找远端设备可用的蓝牙service.

步骤如下:连接安卓手机和PC,进入安卓SDK的platform-tools 目录,运行 adb -s TA01404HLN shell

然后在shell中运行

   sdptool browse 60:D8:19:F1:FD:42:

60:D8:19:F1:FD:42:是我的PC的MAC地址

下面是在我的安卓手机上search到的我的Win7 laptop上的部分蓝牙服务例子:

SDP服务

Service Provider: Microsoft
Service RecHandle: 0x0
Service Class ID List:
  "SDP Server" (0x1000)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 1
  "SDP" (0x0001)
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100

这是由微软提供的SDP服务,这个服务是最基本的服务,通常客户端首先需要使用该服务才能寻找该设备提供的其他服务。可以看到SDP协议建立在L2CAP协议之上,UUID是0x0001

文件传输服务

Service Name: File Transfer
Service RecHandle: 0x100a2
Service Class ID List:
  "OBEX File Transfer" (0x1106)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 2
  "OBEX" (0x0008)
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "OBEX File Transfer" (0x1106)
    Version: 0x0102

这是Win7提供的文件传输服务,它使用OBEX协议,UUID是0x1106

蓝牙立体声服务

Service Name: Stereo Audio
Service RecHandle: 0x100a4
Service Class ID List:
  "Audio Sink" (0x110b)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 25
  "AVDTP" (0x0019)
    uint16: 0x100
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Advanced Audio" (0x110d)
    Version: 0x0102
这是个提供蓝牙立体声输出的服务,它直接建立在数据协议L2CAP之上,采用的是AVDTP协议,UUID 0x110b

我的串口服务

Service Name: MyCommServer
Service RecHandle: 0x100af
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 10

这是我自己写的一个运行在PC上的简单的蓝牙服务,直接建立在串口模拟之上。



原文链接:http://blog.csdn.net/swingseagull/article/details/7585909
加载中
返回顶部
顶部