Zephyr Project API 3.7.0
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
sdp.h File Reference

Service Discovery Protocol handling. More...

Go to the source code of this file.

Data Structures

struct  bt_sdp_data_elem
 SDP Generic Data Element Value. More...
 
struct  bt_sdp_attribute
 SDP Attribute Value. More...
 
struct  bt_sdp_record
 SDP Service Record Value. More...
 
struct  bt_sdp_client_result
 Generic SDP Client Query Result data holder. More...
 
struct  bt_sdp_discover_params
 Main user structure used in SDP discovery of remote. More...
 

Macros

#define BT_SDP_SERVER_RECORD_HANDLE   0x0000
 
#define BT_SDP_PRIMARY_LANG_BASE   0x0100
 
#define BT_SDP_ATTR_SVCNAME_PRIMARY   (0x0000 + BT_SDP_PRIMARY_LANG_BASE)
 
#define BT_SDP_ATTR_SVCDESC_PRIMARY   (0x0001 + BT_SDP_PRIMARY_LANG_BASE)
 
#define BT_SDP_ATTR_PROVNAME_PRIMARY   (0x0002 + BT_SDP_PRIMARY_LANG_BASE)
 
#define BT_SDP_TYPE_DESC_MASK   0xf8
 
#define BT_SDP_SIZE_DESC_MASK   0x07
 
#define BT_SDP_SIZE_INDEX_OFFSET   5
 
#define BT_SDP_ARRAY_8(...)   ((uint8_t[]) {__VA_ARGS__})
 Declare an array of 8-bit elements in an attribute.
 
#define BT_SDP_ARRAY_16(...)   ((uint16_t[]) {__VA_ARGS__})
 Declare an array of 16-bit elements in an attribute.
 
#define BT_SDP_ARRAY_32(...)   ((uint32_t[]) {__VA_ARGS__})
 Declare an array of 32-bit elements in an attribute.
 
#define BT_SDP_TYPE_SIZE(_type)
 Declare a fixed-size data element header.
 
#define BT_SDP_TYPE_SIZE_VAR(_type, _size)
 Declare a variable-size data element header.
 
#define BT_SDP_DATA_ELEM_LIST(...)   ((struct bt_sdp_data_elem[]) {__VA_ARGS__})
 Declare a list of data elements.
 
#define BT_SDP_NEW_SERVICE
 SDP New Service Record Declaration Macro.
 
#define BT_SDP_LIST(_att_id, _type_size, _data_elem_seq)
 Generic SDP List Attribute Declaration Macro.
 
#define BT_SDP_SERVICE_ID(_uuid)
 SDP Service ID Attribute Declaration Macro.
 
#define BT_SDP_SERVICE_NAME(_name)
 SDP Name Attribute Declaration Macro.
 
#define BT_SDP_SUPPORTED_FEATURES(_features)
 SDP Supported Features Attribute Declaration Macro.
 
#define BT_SDP_RECORD(_attrs)
 SDP Service Declaration Macro.
 
Service class identifiers of standard services and service groups
#define BT_SDP_SDP_SERVER_SVCLASS   0x1000
 Service Discovery Server.
 
#define BT_SDP_BROWSE_GRP_DESC_SVCLASS   0x1001
 Browse Group Descriptor.
 
#define BT_SDP_PUBLIC_BROWSE_GROUP   0x1002
 Public Browse Group.
 
#define BT_SDP_SERIAL_PORT_SVCLASS   0x1101
 Serial Port.
 
#define BT_SDP_LAN_ACCESS_SVCLASS   0x1102
 LAN Access Using PPP.
 
#define BT_SDP_DIALUP_NET_SVCLASS   0x1103
 Dialup Networking.
 
#define BT_SDP_IRMC_SYNC_SVCLASS   0x1104
 IrMC Sync.
 
#define BT_SDP_OBEX_OBJPUSH_SVCLASS   0x1105
 OBEX Object Push.
 
#define BT_SDP_OBEX_FILETRANS_SVCLASS   0x1106
 OBEX File Transfer.
 
#define BT_SDP_IRMC_SYNC_CMD_SVCLASS   0x1107
 IrMC Sync Command.
 
#define BT_SDP_HEADSET_SVCLASS   0x1108
 Headset.
 
#define BT_SDP_CORDLESS_TELEPHONY_SVCLASS   0x1109
 Cordless Telephony.
 
#define BT_SDP_AUDIO_SOURCE_SVCLASS   0x110a
 Audio Source.
 
#define BT_SDP_AUDIO_SINK_SVCLASS   0x110b
 Audio Sink.
 
#define BT_SDP_AV_REMOTE_TARGET_SVCLASS   0x110c
 A/V Remote Control Target.
 
#define BT_SDP_ADVANCED_AUDIO_SVCLASS   0x110d
 Advanced Audio Distribution.
 
#define BT_SDP_AV_REMOTE_SVCLASS   0x110e
 A/V Remote Control.
 
#define BT_SDP_AV_REMOTE_CONTROLLER_SVCLASS   0x110f
 A/V Remote Control Controller.
 
#define BT_SDP_INTERCOM_SVCLASS   0x1110
 Intercom.
 
#define BT_SDP_FAX_SVCLASS   0x1111
 Fax.
 
#define BT_SDP_HEADSET_AGW_SVCLASS   0x1112
 Headset AG.
 
#define BT_SDP_WAP_SVCLASS   0x1113
 WAP.
 
#define BT_SDP_WAP_CLIENT_SVCLASS   0x1114
 WAP Client.
 
#define BT_SDP_PANU_SVCLASS   0x1115
 Personal Area Networking User.
 
#define BT_SDP_NAP_SVCLASS   0x1116
 Network Access Point.
 
#define BT_SDP_GN_SVCLASS   0x1117
 Group Network.
 
#define BT_SDP_DIRECT_PRINTING_SVCLASS   0x1118
 Direct Printing.
 
#define BT_SDP_REFERENCE_PRINTING_SVCLASS   0x1119
 Reference Printing.
 
#define BT_SDP_IMAGING_SVCLASS   0x111a
 Basic Imaging Profile.
 
#define BT_SDP_IMAGING_RESPONDER_SVCLASS   0x111b
 Imaging Responder.
 
#define BT_SDP_IMAGING_ARCHIVE_SVCLASS   0x111c
 Imaging Automatic Archive.
 
#define BT_SDP_IMAGING_REFOBJS_SVCLASS   0x111d
 Imaging Referenced Objects.
 
#define BT_SDP_HANDSFREE_SVCLASS   0x111e
 Handsfree.
 
#define BT_SDP_HANDSFREE_AGW_SVCLASS   0x111f
 Handsfree Audio Gateway.
 
#define BT_SDP_DIRECT_PRT_REFOBJS_SVCLASS   0x1120
 Direct Printing Reference Objects Service.
 
#define BT_SDP_REFLECTED_UI_SVCLASS   0x1121
 Reflected UI.
 
#define BT_SDP_BASIC_PRINTING_SVCLASS   0x1122
 Basic Printing.
 
#define BT_SDP_PRINTING_STATUS_SVCLASS   0x1123
 Printing Status.
 
#define BT_SDP_HID_SVCLASS   0x1124
 Human Interface Device Service.
 
#define BT_SDP_HCR_SVCLASS   0x1125
 Hardcopy Cable Replacement.
 
#define BT_SDP_HCR_PRINT_SVCLASS   0x1126
 HCR Print.
 
#define BT_SDP_HCR_SCAN_SVCLASS   0x1127
 HCR Scan.
 
#define BT_SDP_CIP_SVCLASS   0x1128
 Common ISDN Access.
 
#define BT_SDP_VIDEO_CONF_GW_SVCLASS   0x1129
 Video Conferencing Gateway.
 
#define BT_SDP_UDI_MT_SVCLASS   0x112a
 UDI MT.
 
#define BT_SDP_UDI_TA_SVCLASS   0x112b
 UDI TA.
 
#define BT_SDP_AV_SVCLASS   0x112c
 Audio/Video.
 
#define BT_SDP_SAP_SVCLASS   0x112d
 SIM Access.
 
#define BT_SDP_PBAP_PCE_SVCLASS   0x112e
 Phonebook Access Client.
 
#define BT_SDP_PBAP_PSE_SVCLASS   0x112f
 Phonebook Access Server.
 
#define BT_SDP_PBAP_SVCLASS   0x1130
 Phonebook Access.
 
#define BT_SDP_MAP_MSE_SVCLASS   0x1132
 Message Access Server.
 
#define BT_SDP_MAP_MCE_SVCLASS   0x1133
 Message Notification Server.
 
#define BT_SDP_MAP_SVCLASS   0x1134
 Message Access Profile.
 
#define BT_SDP_GNSS_SVCLASS   0x1135
 GNSS.
 
#define BT_SDP_GNSS_SERVER_SVCLASS   0x1136
 GNSS Server.
 
#define BT_SDP_MPS_SC_SVCLASS   0x113a
 MPS SC.
 
#define BT_SDP_MPS_SVCLASS   0x113b
 MPS.
 
#define BT_SDP_PNP_INFO_SVCLASS   0x1200
 PnP Information.
 
#define BT_SDP_GENERIC_NETWORKING_SVCLASS   0x1201
 Generic Networking.
 
#define BT_SDP_GENERIC_FILETRANS_SVCLASS   0x1202
 Generic File Transfer.
 
#define BT_SDP_GENERIC_AUDIO_SVCLASS   0x1203
 Generic Audio.
 
#define BT_SDP_GENERIC_TELEPHONY_SVCLASS   0x1204
 Generic Telephony.
 
#define BT_SDP_UPNP_SVCLASS   0x1205
 UPnP Service.
 
#define BT_SDP_UPNP_IP_SVCLASS   0x1206
 UPnP IP Service.
 
#define BT_SDP_UPNP_PAN_SVCLASS   0x1300
 UPnP IP PAN.
 
#define BT_SDP_UPNP_LAP_SVCLASS   0x1301
 UPnP IP LAP.
 
#define BT_SDP_UPNP_L2CAP_SVCLASS   0x1302
 UPnP IP L2CAP.
 
#define BT_SDP_VIDEO_SOURCE_SVCLASS   0x1303
 Video Source.
 
#define BT_SDP_VIDEO_SINK_SVCLASS   0x1304
 Video Sink.
 
#define BT_SDP_VIDEO_DISTRIBUTION_SVCLASS   0x1305
 Video Distribution.
 
#define BT_SDP_HDP_SVCLASS   0x1400
 HDP.
 
#define BT_SDP_HDP_SOURCE_SVCLASS   0x1401
 HDP Source.
 
#define BT_SDP_HDP_SINK_SVCLASS   0x1402
 HDP Sink.
 
#define BT_SDP_GENERIC_ACCESS_SVCLASS   0x1800
 Generic Access Profile.
 
#define BT_SDP_GENERIC_ATTRIB_SVCLASS   0x1801
 Generic Attribute Profile.
 
#define BT_SDP_APPLE_AGENT_SVCLASS   0x2112
 Apple Agent.
 
Attribute identifier codes

Possible values for attribute-id are listed below.

See SDP Spec, section "Service Attribute Definitions" for more details.

#define BT_SDP_ATTR_RECORD_HANDLE   0x0000
 Service Record Handle.
 
#define BT_SDP_ATTR_SVCLASS_ID_LIST   0x0001
 Service Class ID List.
 
#define BT_SDP_ATTR_RECORD_STATE   0x0002
 Service Record State.
 
#define BT_SDP_ATTR_SERVICE_ID   0x0003
 Service ID.
 
#define BT_SDP_ATTR_PROTO_DESC_LIST   0x0004
 Protocol Descriptor List.
 
#define BT_SDP_ATTR_BROWSE_GRP_LIST   0x0005
 Browse Group List.
 
#define BT_SDP_ATTR_LANG_BASE_ATTR_ID_LIST   0x0006
 Language Base Attribute ID List.
 
#define BT_SDP_ATTR_SVCINFO_TTL   0x0007
 Service Info Time to Live.
 
#define BT_SDP_ATTR_SERVICE_AVAILABILITY   0x0008
 Service Availability.
 
#define BT_SDP_ATTR_PROFILE_DESC_LIST   0x0009
 Bluetooth Profile Descriptor List.
 
#define BT_SDP_ATTR_DOC_URL   0x000a
 Documentation URL.
 
#define BT_SDP_ATTR_CLNT_EXEC_URL   0x000b
 Client Executable URL.
 
#define BT_SDP_ATTR_ICON_URL   0x000c
 Icon URL.
 
#define BT_SDP_ATTR_ADD_PROTO_DESC_LIST   0x000d
 Additional Protocol Descriptor List.
 
#define BT_SDP_ATTR_GROUP_ID   0x0200
 Group ID.
 
#define BT_SDP_ATTR_IP_SUBNET   0x0200
 IP Subnet.
 
#define BT_SDP_ATTR_VERSION_NUM_LIST   0x0200
 Version Number List.
 
#define BT_SDP_ATTR_SUPPORTED_FEATURES_LIST   0x0200
 Supported Features List.
 
#define BT_SDP_ATTR_GOEP_L2CAP_PSM   0x0200
 GOEP L2CAP PSM.
 
#define BT_SDP_ATTR_SVCDB_STATE   0x0201
 Service Database State.
 
#define BT_SDP_ATTR_MPSD_SCENARIOS   0x0200
 MPSD Scenarios.
 
#define BT_SDP_ATTR_MPMD_SCENARIOS   0x0201
 MPMD Scenarios.
 
#define BT_SDP_ATTR_MPS_DEPENDENCIES   0x0202
 Supported Profiles & Protocols.
 
#define BT_SDP_ATTR_SERVICE_VERSION   0x0300
 Service Version.
 
#define BT_SDP_ATTR_EXTERNAL_NETWORK   0x0301
 External Network.
 
#define BT_SDP_ATTR_SUPPORTED_DATA_STORES_LIST   0x0301
 Supported Data Stores List.
 
#define BT_SDP_ATTR_DATA_EXCHANGE_SPEC   0x0301
 Data Exchange Specification.
 
#define BT_SDP_ATTR_NETWORK   0x0301
 Network.
 
#define BT_SDP_ATTR_FAX_CLASS1_SUPPORT   0x0302
 Fax Class 1 Support.
 
#define BT_SDP_ATTR_REMOTE_AUDIO_VOLUME_CONTROL   0x0302
 Remote Audio Volume Control.
 
#define BT_SDP_ATTR_MCAP_SUPPORTED_PROCEDURES   0x0302
 MCAP Supported Procedures.
 
#define BT_SDP_ATTR_FAX_CLASS20_SUPPORT   0x0303
 Fax Class 2.0 Support.
 
#define BT_SDP_ATTR_SUPPORTED_FORMATS_LIST   0x0303
 Supported Formats List.
 
#define BT_SDP_ATTR_FAX_CLASS2_SUPPORT   0x0304
 Fax Class 2 Support (vendor-specific)
 
#define BT_SDP_ATTR_AUDIO_FEEDBACK_SUPPORT   0x0305
 Audio Feedback Support.
 
#define BT_SDP_ATTR_NETWORK_ADDRESS   0x0306
 Network Address.
 
#define BT_SDP_ATTR_WAP_GATEWAY   0x0307
 WAP Gateway.
 
#define BT_SDP_ATTR_HOMEPAGE_URL   0x0308
 Homepage URL.
 
#define BT_SDP_ATTR_WAP_STACK_TYPE   0x0309
 WAP Stack Type.
 
#define BT_SDP_ATTR_SECURITY_DESC   0x030a
 Security Description.
 
#define BT_SDP_ATTR_NET_ACCESS_TYPE   0x030b
 Net Access Type.
 
#define BT_SDP_ATTR_MAX_NET_ACCESSRATE   0x030c
 Max Net Access Rate.
 
#define BT_SDP_ATTR_IP4_SUBNET   0x030d
 IPv4 Subnet.
 
#define BT_SDP_ATTR_IP6_SUBNET   0x030e
 IPv6 Subnet.
 
#define BT_SDP_ATTR_SUPPORTED_CAPABILITIES   0x0310
 BIP Supported Capabilities.
 
#define BT_SDP_ATTR_SUPPORTED_FEATURES   0x0311
 BIP Supported Features.
 
#define BT_SDP_ATTR_SUPPORTED_FUNCTIONS   0x0312
 BIP Supported Functions.
 
#define BT_SDP_ATTR_TOTAL_IMAGING_DATA_CAPACITY   0x0313
 BIP Total Imaging Data Capacity.
 
#define BT_SDP_ATTR_SUPPORTED_REPOSITORIES   0x0314
 Supported Repositories.
 
#define BT_SDP_ATTR_MAS_INSTANCE_ID   0x0315
 MAS Instance ID.
 
#define BT_SDP_ATTR_SUPPORTED_MESSAGE_TYPES   0x0316
 Supported Message Types.
 
#define BT_SDP_ATTR_PBAP_SUPPORTED_FEATURES   0x0317
 PBAP Supported Features.
 
#define BT_SDP_ATTR_MAP_SUPPORTED_FEATURES   0x0317
 MAP Supported Features.
 
#define BT_SDP_ATTR_SPECIFICATION_ID   0x0200
 Specification ID.
 
#define BT_SDP_ATTR_VENDOR_ID   0x0201
 Vendor ID.
 
#define BT_SDP_ATTR_PRODUCT_ID   0x0202
 Product ID.
 
#define BT_SDP_ATTR_VERSION   0x0203
 Version.
 
#define BT_SDP_ATTR_PRIMARY_RECORD   0x0204
 Primary Record.
 
#define BT_SDP_ATTR_VENDOR_ID_SOURCE   0x0205
 Vendor ID Source.
 
#define BT_SDP_ATTR_HID_DEVICE_RELEASE_NUMBER   0x0200
 HID Device Release Number.
 
#define BT_SDP_ATTR_HID_PARSER_VERSION   0x0201
 HID Parser Version.
 
#define BT_SDP_ATTR_HID_DEVICE_SUBCLASS   0x0202
 HID Device Subclass.
 
#define BT_SDP_ATTR_HID_COUNTRY_CODE   0x0203
 HID Country Code.
 
#define BT_SDP_ATTR_HID_VIRTUAL_CABLE   0x0204
 HID Virtual Cable.
 
#define BT_SDP_ATTR_HID_RECONNECT_INITIATE   0x0205
 HID Reconnect Initiate.
 
#define BT_SDP_ATTR_HID_DESCRIPTOR_LIST   0x0206
 HID Descriptor List.
 
#define BT_SDP_ATTR_HID_LANG_ID_BASE_LIST   0x0207
 HID Language ID Base List.
 
#define BT_SDP_ATTR_HID_SDP_DISABLE   0x0208
 HID SDP Disable.
 
#define BT_SDP_ATTR_HID_BATTERY_POWER   0x0209
 HID Battery Power.
 
#define BT_SDP_ATTR_HID_REMOTE_WAKEUP   0x020a
 HID Remote Wakeup.
 
#define BT_SDP_ATTR_HID_PROFILE_VERSION   0x020b
 HID Profile Version.
 
#define BT_SDP_ATTR_HID_SUPERVISION_TIMEOUT   0x020c
 HID Supervision Timeout.
 
#define BT_SDP_ATTR_HID_NORMALLY_CONNECTABLE   0x020d
 HID Normally Connectable.
 
#define BT_SDP_ATTR_HID_BOOT_DEVICE   0x020e
 HID Boot Device.
 
The Data representation in SDP PDUs (pps 339, 340 of BT SDP Spec)

These are the exact data type+size descriptor values that go into the PDU buffer.

The datatype (leading 5bits) + size descriptor (last 3 bits) is 8 bits. The size descriptor is critical to extract the right number of bytes for the data value from the PDU.

For most basic types, the datatype+size descriptor is straightforward. However for constructed types and strings, the size of the data is in the next "n" bytes following the 8 bits (datatype+size) descriptor. Exactly what the "n" is specified in the 3 bits of the data size descriptor.

TextString and URLString can be of size 2^{8, 16, 32} bytes DataSequence and DataSequenceAlternates can be of size 2^{8, 16, 32} The size are computed post-facto in the API and are not known apriori.

#define BT_SDP_DATA_NIL   0x00
 Nil, the null type.
 
#define BT_SDP_UINT8   0x08
 Unsigned 8-bit integer.
 
#define BT_SDP_UINT16   0x09
 Unsigned 16-bit integer.
 
#define BT_SDP_UINT32   0x0a
 Unsigned 32-bit integer.
 
#define BT_SDP_UINT64   0x0b
 Unsigned 64-bit integer.
 
#define BT_SDP_UINT128   0x0c
 Unsigned 128-bit integer.
 
#define BT_SDP_INT8   0x10
 Signed 8-bit integer.
 
#define BT_SDP_INT16   0x11
 Signed 16-bit integer.
 
#define BT_SDP_INT32   0x12
 Signed 32-bit integer.
 
#define BT_SDP_INT64   0x13
 Signed 64-bit integer.
 
#define BT_SDP_INT128   0x14
 Signed 128-bit integer.
 
#define BT_SDP_UUID_UNSPEC   0x18
 UUID, unspecified size.
 
#define BT_SDP_UUID16   0x19
 UUID, 16-bit.
 
#define BT_SDP_UUID32   0x1a
 UUID, 32-bit.
 
#define BT_SDP_UUID128   0x1c
 UUID, 128-bit.
 
#define BT_SDP_TEXT_STR_UNSPEC   0x20
 Text string, unspecified size.
 
#define BT_SDP_TEXT_STR8   0x25
 Text string, 8-bit length.
 
#define BT_SDP_TEXT_STR16   0x26
 Text string, 16-bit length.
 
#define BT_SDP_TEXT_STR32   0x27
 Text string, 32-bit length.
 
#define BT_SDP_BOOL   0x28
 Boolean.
 
#define BT_SDP_SEQ_UNSPEC   0x30
 Data element sequence, unspecified size.
 
#define BT_SDP_SEQ8   0x35
 Data element sequence, 8-bit length.
 
#define BT_SDP_SEQ16   0x36
 Data element sequence, 16-bit length.
 
#define BT_SDP_SEQ32   0x37
 Data element sequence, 32-bit length.
 
#define BT_SDP_ALT_UNSPEC   0x38
 Data element alternative, unspecified size.
 
#define BT_SDP_ALT8   0x3d
 Data element alternative, 8-bit length.
 
#define BT_SDP_ALT16   0x3e
 Data element alternative, 16-bit length.
 
#define BT_SDP_ALT32   0x3f
 Data element alternative, 32-bit length.
 
#define BT_SDP_URL_STR_UNSPEC   0x40
 URL string, unspecified size.
 
#define BT_SDP_URL_STR8   0x45
 URL string, 8-bit length.
 
#define BT_SDP_URL_STR16   0x46
 URL string, 16-bit length.
 
#define BT_SDP_URL_STR32   0x47
 URL string, 32-bit length.
 

Typedefs

typedef uint8_t(* bt_sdp_discover_func_t) (struct bt_conn *conn, struct bt_sdp_client_result *result)
 Callback type reporting to user that there is a resolved result on remote for given UUID and the result record buffer can be used by user for further inspection.
 

Enumerations

enum  { BT_SDP_DISCOVER_UUID_STOP = 0 , BT_SDP_DISCOVER_UUID_CONTINUE }
 Helper enum to be used as return value of bt_sdp_discover_func_t. More...
 
enum  bt_sdp_proto { BT_SDP_PROTO_RFCOMM = 0x0003 , BT_SDP_PROTO_L2CAP = 0x0100 }
 Protocols to be asked about specific parameters. More...
 

Functions

int bt_sdp_register_service (struct bt_sdp_record *service)
 Register a Service Record.
 
int bt_sdp_discover (struct bt_conn *conn, const struct bt_sdp_discover_params *params)
 Allows user to start SDP discovery session.
 
int bt_sdp_discover_cancel (struct bt_conn *conn, const struct bt_sdp_discover_params *params)
 Release waiting SDP discovery request.
 
int bt_sdp_get_proto_param (const struct net_buf *buf, enum bt_sdp_proto proto, uint16_t *param)
 Give to user parameter value related to given stacked protocol UUID.
 
int bt_sdp_get_addl_proto_param (const struct net_buf *buf, enum bt_sdp_proto proto, uint8_t param_index, uint16_t *param)
 Get additional parameter value related to given stacked protocol UUID.
 
int bt_sdp_get_profile_version (const struct net_buf *buf, uint16_t profile, uint16_t *version)
 Get profile version.
 
int bt_sdp_get_features (const struct net_buf *buf, uint16_t *features)
 Get SupportedFeatures attribute value.
 

Detailed Description

Service Discovery Protocol handling.

Service Discovery Protocol (SDP)