本文主要是介绍[Android源码分析]bluez internal event的处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在上面2.1中是hci dev的注册和up,2.3中有bluez的初始化,这两者是有一个交集的,那就是说bluez初始化后会监听hci dev的一些event,主要有HCI_DEV_REG和HCI_DEV_UP两个比较重要,那本集就是主要分析这两个event带来的影响。
从上面的分析中,我们已经知道,这两个event的处理函数是io_stack_event:
static gboolean io_stack_event(GIOChannel *chan, GIOCondition cond,
gpointer data)
{
unsigned char buf[HCI_MAX_FRAME_SIZE], *ptr;
evt_stack_internal *si;
evt_si_device *sd;
hci_event_hdr *eh;
int type, fd;
ssize_t len;
ptr = buf;
fd = g_io_channel_unix_get_fd(chan);
//读取event的内容
len = read(fd, buf, sizeof(buf));
if (len < 0) {
if (errno == EAGAIN)
return TRUE;
error("Read from control socket failed: %s (%d)",
strerror(errno), errno);
return FALSE;
}
type = *ptr++;
if (type != HCI_EVENT_PKT)
return TRUE;
eh = (hci_event_hdr *) ptr;
//判断是否是internal的event
if (eh->evt != EVT_STACK_INTERNAL)
return TRUE;
ptr += HCI_EVENT_HDR_SIZE;
si = (evt_stack_internal *) ptr;
switch (si->type) {
case EVT_SI_DEVICE:
sd = (void *) &si->data;
//event的处理
device_event(sd->event, sd->dev_id);
break;
}
return TRUE;
}
static void device_event(int event, int index)
{
switch (event) {
//device register后的操作,详细见2.4.1
case HCI_DEV_REG:
info("HCI dev %d registered", index);
init_device(index, FALSE);
break;
//unreg,不做详细分析
case HCI_DEV_UNREG:
info("HCI dev %d unregistered", index);
stop_hci_dev(index);
if (devs[index].registered)
btd_manager_unregister_adapter(index);
break;
//device up的操作,详细分析见2.4.2
case HCI_DEV_UP:
info("HCI dev %d up", index);
devs[index].up = TRUE;
device_devup_setup(index);
break;
//Down的操作
case HCI_DEV_DOWN:
info("HCI dev %d down", index);
devs[index].up = FALSE;
devs[index].pending_cod = 0;
devs[index].cache_enable = TRUE;
if (!devs[index].pending) {
struct btd_adapter *adapter;
adapter = manager_find_adapter_by_id(index);
if (adapter)
btd_adapter_stop(adapter);
init_pending(index);
}
break;
}
}
2.4.1 device register后的bluez的操作分析
这个函数是bluez收到底层hci dev registe的消息之后的操作。事实上,因为init_known_adapters的存在,这里可能都没有走到。不过,在上面
这篇关于[Android源码分析]bluez internal event的处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!