蓝牙学习-SDP

SDP - Service Discovery Protocol

SDP协议提供服务声明和发现远端蓝牙服务。

SDP的服务能力

1,SDP提供的方法

SDP Client方法:
  sdp_client_init
  sdp_client_ready
  sdp_client_register_query_callback
  sdp_client_query
  sdp_client_query_uuid16
  sdp_client_query_uuid128
  sdp_client_service_attribute_search
  sdp_client_service_search
  sdp_client_parse_service_record_handle_list
  sdp_client_deinit

SDP Server方法:
  sdp_init
  sdp_register_service
  sdp_unregister_service
  sdp_get_service_record_handle
  sdp_create_service_record_handle
  sdp_get_record_for_handle
  sdp_deinit

创建和声明SDP记录

SDP记录是一个SDP属性{ID,Value}的列表,这些记录都存在DES(Data Element Sequence)里。属性ID是16bit,属性Value可以是整形,字符串型或者包括另外一个DES。比如若要创建一个SPP记录,调用spp_create_sdp_record,传入一个内存指针来存储这个记录,服务的channle号和记录的名字。创建完不同的SDP记录后,通过sdp_register_service将其们存储在蓝牙协议栈的动态内存中。

注意:SDP记录需要是全局变量,他被蓝牙协议栈一直保存在内存中,所以不能中途被释放。

查询远端的SDP服务内容

通过SDP客户端可以查询远端的蓝牙SDP服务。sdp_client_query创建一个L2CAP链路至远端蓝牙设备。建立连接后,一个Service Search Attribute的请求协同一个Service Search Pattern和Attribute ID List会从客户端发给服务端。服务端会根据请求的属性返回SDP的服务记录列表。这个服务记录列表会被客户端进行解析,解析方法会通过注册的回调发出SDP_PARSER_ATTRIBUTE_VALUE(这个消息会传出属性对应的值)和SDP_PARSER_COMPLETE消息。具体发现步骤如下:

1,蓝牙设备初始化
2,蓝牙协议栈初始化
3,HCI启动
4,等全部启动完毕,蓝牙协议栈查寻远端设备的RFCOMM服务名称和通道号,sdp_client_query_rfcomm_channel_and_name_for_uuid

你可能感兴趣的:(蓝牙学习-SDP)