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_deinitSDP 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
网友评论