有了前面的L2CAP,RFCOMM的初始化分析,再来分析Hid和Bnep的代码就轻松很多了。基本来说,这两个protol没有太多的新意,直接看代码就可以看出来了。
static int __init hidp_init(void)
{
int ret;
BT_INFO("HIDP (Human Interface Emulation) ver %s", VERSION);
//注册了一个hid的driver,hidp_driver见下面
//其实就是把该driver加载到hid的bus总线上去,通过name进行区分。
//这里的name是generic-bluetooth,后期用到我们再来具体分析
ret = hid_register_driver(&hidp_driver);
if (ret)
goto err;
//也就是在proto_list中加入了hid
//初始化了bt_proto中的BTPROTO_HIDP的值。
//所以总的来说没有什么好讲的
ret = hidp_init_sockets();
if (ret)
goto err_drv;
return 0;
err_drv:
hid_unregister_driver(&hidp_driver);
err:
return ret;
}
static const struct hid_device_id hidp_table[]