//向dbus总线的”/”路径的对象注册⼀个包含该对象的所有数据存放地址的指针,便于程序在其它地⽅使⽤
dbus_connection_get_object_path_data函数通过”/”路径获取指针。该函数很重要,后⾯详细分析
data = object_path_ref(connection, "/");
//该对象添加名为DBUS_INTERFACE_OBJECT_MANAGER宏定义的接⼝,接⼝注册了⼀个⽅法和⼀个信号,当其它进程使⽤
dbus_message_new_method_call函数发消息给该对象的该接⼝⽅法时,generic_table⾥的generic_message会被调⽤,然后
manager_methods会被调⽤,具体的调⽤流程后⾯会详细介绍
add_interface(data, DBUS_INTERFACE_OBJECT_MANAGER,
manager_methods, manager_signals,
(5)bluez5.50/gdbus/object.c/object_path_ref函数分析
static struct generic_data *object_path_ref(DBusConnection *connection,
//判断”/”路径的对象有没有已经申请存放该对象的存储空间,如果已经申请了,返回的data指针不为空
if (dbus_connection_get_object_path_data(connection, path,
(void *) &data) == TRUE) {
//向dbus总线注册该对象,当其它进程使⽤dbus_message_new_method_call函数发消息给该对象时,generic_table⾥的
generic_message会被调⽤
if (!dbus_connection_register_object_path(connection, path,
//把对象添加到对象链表data->objects⾥,便于程序在其它地⽅查找所有对象
invalidate_parent_data(connection, path);
(6)bluez5.50/gdbus/object.c/generic_message函数分析
static DBusHandlerResult generic_message(DBusConnection *connection,
DBusMessage *message, void *user_data)
评论0