上文我们从总体上把握了bluetoothd启动的流程,下面我们就具体的细节来详细分析一下,首先要看到的就是init_defaults,在它里面最重要也是最有意义的就是main.conf的解析了。我们通常需要修改某个配置就去修改main.conf中的内容,那么这些内容又是如何真正被配置呢?本文就来和你一一说来。
2.2.1 默认的初始化简介
这个函数会初始化一些默认的配置,在main.conf中没有修改的参数,将会使用这里定义的,当然,若是修改过了,那就只能使用这里的参数了
static void init_defaults(void)
{
/* Default HCId settings */
//默认的配置
//这里的main_opts是一个全局变量
memset(&main_opts, 0, sizeof(main_opts));
main_opts.mode = MODE_CONNECTABLE; //可连接的
main_opts.name = g_strdup("BlueZ");//名字是bluez
main_opts.discovto = DEFAULT_DISCOVERABLE_TIMEOUT;//默认的可发现timeout是3分钟
main_opts.remember_powered = TRUE;
main_opts.reverse_sdp = TRUE;
main_opts.name_resolv = TRUE; //需要remote name request
main_opts.link_mode = HCI_LM_ACCEPT;
//支持role swtich以sniff,hold和park状态了
main_opts.link_policy = HCI_LP_RSWITCH | HCI_LP_SNIFF |
HCI_LP_HOLD | HCI_LP_PARK;
//这里就是获取主机的名字来作为host_name
if (gethostname(main_opts.host_name, sizeof(main_opts.host_name) - 1) < 0)
strcpy(main_opts.host_name, "noname");
}
2.2.2glib命令行解析库的简单