SDP server是蓝牙启动过程中的一个非常重要部分。本文简单介绍一下这个函数的实现。
int start_sdp_server(uint16_t mtu, const char *did, uint32_t flags)
{
//这里传入的flags是SDP_SERVER_COMPAT
//所以compat值是有效的,master应该是0
int compat = flags & SDP_SERVER_COMPAT;
int master = flags & SDP_SERVER_MASTER;
GIOChannel *io;
info("Starting SDP server");
//初始化server,详细见2.3.4.1
if (init_server(mtu, master, compat) < 0) {
error("Server initialization failed");
return -1;
}
//did就是传入的device id,也就是main_opts.deviceid,他是根据DeviceID这个值来设置的,根据我们的main.conf,他的值就是android:generic:1.5
if (did && strlen(did) > 0) {
const char *ptr = did;
uint16_t vid = 0x0000, pid = 0x0000, ver = 0x0000;
//vid=android
//pid=generic
//version=1.5
vid = (uint16_t) strtol(ptr, NULL, 16);
ptr = strchr(ptr, ':');
if (ptr) {
pid = (uint16_t) strtol(pt