蓝牙套接字

 蓝牙套接字
在symbian os中,蓝牙套接字被用来搜索其他的蓝牙设备,并通过蓝牙读写数据。
   
当通过蓝牙建立通讯连接时,蓝牙设备扮演两种角色:启动器和接收器。接收器设置完毕后等待启动器发起连接。一旦建立了连接,接收与发送端就是等价的,任何一端都可以发送并接收数据,任何一端也可以中断该连接。这个Api支持任何一种角色编程。
蓝牙套接字Api支持蓝牙协议集内的L2CAP层和RFCOMM层通讯。这个Api以Sockets客户端api为基础。提供了一个标准的Api,它允许某个客户端建立与远程设备的连接,或者让该远程设备建立与其本身的连接。然后,在中断连接前发送并接收数据。蓝牙套接字Api针对蓝牙环境也添加了一些适当的类型和常量。
    这个Api有5个关键概念:套接字地址、远程设备查询、RFCOMM命令和选项、L2CAP命令,以及HCI命令。
1. 套接字地址
每个蓝牙设备都有一个唯一的48位的地址。它被封装在TBTDevAddr中。
Sockets Api 提供了一个普通套接字地址TSockAddr。蓝牙套接字地址TBTSockAddr继承自普通套接字地址TSockAddr。蓝牙套接字地址TBTSockAddr可以添加一个蓝牙设备地址字段TBTDevAddr 。
Note:
蓝牙套接字地址(TBTSockAddr)可以添加一个蓝牙设备地址(TBTDevAddr)。
蓝牙套接字地址(TBTSockAddr)继承自普通套接字地址(TSockAddr)
蓝牙设备地址(TBTDevAddr)
蓝牙套接字地址(TBTSockAddr)
普通套接字地址(TSockAddr)
2. 远程设备查询
A client can query for available remote devices through the sockets class RHostResolver. A parameter of type TInquirySockAddr is supplied for such queries: principally, this allows you to limit discovery to a particular classes of device.
一个客户端可以通过套接字类的RHostResolver搜寻可用的远程设备。
远程设备搜寻套接字地址TInquirySockAddr
3. 命令和选项
你可以传送命令到 RFCOMM 套接字通过调用 RSocket::Ioctl() 。套接字上的选项可以通过RSocket::GetOpt() 和 RSocket::SetOpt() 来实现 。
你可以传送命令到 L2CAP 套接字和主控制器接口(HCI)层通过调用 RSocket::Ioctl()。
蓝牙服务搜寻数据库RSdpDatabase
    蓝牙服务搜寻数据库模块允许某个本地服务将其属性加入到一个本地的蓝牙服务数据库中。这样就能让各种远程蓝牙设备的相关服务搜寻到这个服务。
   
    共有两个个Api让你能使用蓝牙服务搜寻协议,服务搜寻数据库Api就是其中的一个,而另一个则是蓝牙服务搜寻代理,它让你发现某个远程设备提供的各种蓝牙服务,以及那些服务的属性。
1. 服务搜寻数据
为了访问数据库,一个客户端必须创建和连接一个 RSdp 会话,和RSdpDatabase子会话。RSdpDatabase子会话允许服务记录和服务属性的添加、删除、和更新。
2. 服务属性Service attributes
一个服务通过许多属性来描叙,每种都可以控制一个特别的值,如integer, boolean, string, etc.
所有的属性继承自基类CSdpAttrValue.
CSdpAttrValueBoolean, CSdpAttrValueDEA, CSdpAttrValueDES, CSdpAttrValueInt, CSdpAttrValueNil, CSdpAttrValueString, CSdpAttrValueUint, CSdpAttrValueURL, and CSdpAttrValueUUID.
两个类,CSdpAttrValueDEA 和 CSdpAttrValueDES ,能够列出被创建属性的列表。所有的实现都通过MSdpElementBuilder接口来提供。
3. 服务记录句柄 Service record handle
一个服务的属性被存放在服务记录中。一个记录通过一个ID关联,服务记录句柄存放在 TSdpServRecordHandle 中。
4. 服务记录和属性
一个服务的所有信息,用一个SDP服务器的单个记录来维持。一个服务记录包含整个服务属性的列表。为了理解服务和服务属性,你需要看[BS1 Service Discovery Protocol],这里只介绍关键点:
服务属性(Attributes)
每个属性都有一个ID、类型、值。类型有很多属性ID被预定义,例如:URL作为图标显示,作为一个服务,必须总是属性ID值为12。复合属性可以通过列表属性来形成。这些列表包含列表属性自己。
服务类型属性(The service class attribute)
一个关键属性是服务类别(蓝牙ID ServiceClassIDList):每个服务是服务类别的一个实例,为服务提供初始指示器的性能。和定义其他属性,包括他们的类型和语义,必须出现在服务记录中。
一个单独的应用,可能提供多个服务。这些不同的服务,必须有不同的服务记录。另外,每个服务记录可以有很多服务类别列表。这些服务类别必须是其他服务类别的子类/超类,必须
蓝牙服务搜寻代理
蓝牙服务搜寻代理模块使你能够找到存在于某个远程设备上的各种蓝牙服务,以及那些服务的属性。
   
这个服务搜寻代理Api是使用蓝牙服务搜寻协议(Service Discovery Protocol)的两个Api的一个,另一个是蓝牙服务搜寻数据库,他允许某个本地服务向本地服务数据库添加属性参数
使用蓝牙服务搜寻协议请求远程设备的主要类是 CSdpAgent 。这里有2个基本的搜寻可以使用:
得到远程设备上的服务,为你想搜寻 设置服务类别,可以使用 CSdpSearchPattern 对象。
得到指定服务的记录属性,设置重新找到属性列表,使用 CSdpAttrIdMatchList 对象。
CSdpAgent 用户必须实现 MSdpAgentNotifier 接口,来获得搜寻响应。
用蓝牙远程设备地址创建一个CSdpAgent 对象,用来搜寻。
设置你想搜寻的服务类别。类别预定义在UUIDs,你可以用SetRecordFilterL(). 得到详细
蓝牙安全管理器
蓝牙安全管理器为公众蓝牙服务建立了连接到该服务器所必须满足的适当的安全要求。这些安全配置只涉及是否需要认证、授权,和/或加密。
这个Api仅处理即将建立的连接:至于已经建立的连接,蓝牙栈将不会缺省的要求执行任何特定的蓝牙安全操作,如果该远程设备要求对连接实施授权/加密,蓝牙栈的处理对蓝牙应用本身是透明的。
有时本地应用可能需要对连接进行授权或加密。在这种情况下,控制操作(ioctls)会对已连接的套接字上的连接进行授权和加密。
此Api使用客户端/服务器框架模式。
选择蓝牙设备的用户界面
    当选择某个远程蓝牙设备时要用到蓝牙用户界面。如果存在几个适合的远程设备,你可能希望提示用户选择其中的一个建立连接。一个对话框会帮你进中这项工作。这个对话框并不由某个标准的对话框类提供,因为这个样就需要蓝牙客户端拥有自己的用户界面,并控制其在前台的出现。相反,事实上客户端向提示服务器请求一个后台进程,并创建一个对话框:提示服务器能把对话框加到前台应用用户界面上。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值