您的位置:首页 > 其它

Kernel中Hid和Bnep的初始化

2013-12-31 16:26 211 查看
有了前面的L2CAP,RFCOMM的初始化分析,再来分析Hid和Bnep的代码就轻松很多了。基本来说,这两个protol没有太多的新意,直接看代码就可以看出来了。

[cpp] view
plaincopy

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[] = {

{ HID_BLUETOOTH_DEVICE(HID_ANY_ID, HID_ANY_ID) },

{ }

};

//主要就是一个name,是generiv-bluetooth

static struct hid_driver hidp_driver = {

.name = "generic-bluetooth",

.id_table = hidp_table,

};

对于bnep的初始化,其实看起来也比较简单哦:

[cpp] view
plaincopy

static int __init bnep_init(void)

{

char flt[50] = "";



//根据选项,初始化flt数组

#ifdef CONFIG_BT_BNEP_PROTO_FILTER

strcat(flt, "protocol ");

#endif



#ifdef CONFIG_BT_BNEP_MC_FILTER

strcat(flt, "multicast");

#endif



BT_INFO("BNEP (Ethernet Emulation) ver %s", VERSION);

if (flt[0])

BT_INFO("BNEP filters: %s", flt);

//和上面的hid是一样的,只是换了个名字而已

bnep_sock_init();

return 0;

}

总的来说,这两个proto基本没有什么新的内容,权当对《kernel中bluetooth的初始化》这篇文章的补充吧。至此,晓东对kernel中bluetooth
statck相关初始化的内容已经全部解释清楚了。大家也许对这些内容有何作用暂时还比较迷茫,不过没有关系,在后面的蓝牙各个操作中,我们会一一为大家揭晓。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: