`
天天向上1989
  • 浏览: 418177 次
  • 性别: Icon_minigender_2
  • 来自: 南京
社区版块
存档分类
最新评论

解析dbus参数

    博客分类:
  • C++
 
阅读更多

截取自 http://www.netmite.com/android/mydroid/external/dbus/tools/dbus-print-message.c

 

static void
print_iter (DBusMessageIter *iter, dbus_bool_t literal, int depth)
{
  do
    {
      int type = dbus_message_iter_get_arg_type (iter);

      if (type == DBUS_TYPE_INVALID)
	break;
      
      indent(depth);

      switch (type)
	{
	case DBUS_TYPE_STRING:
	  {
	    char *val;
	    dbus_message_iter_get_basic (iter, &val);
	    if (!literal)
	      printf ("string \"");
	    printf ("%s", val);
	    if (!literal)
	      printf ("\"\n");
	    break;
	  }

	case DBUS_TYPE_SIGNATURE:
	  {
	    char *val;
	    dbus_message_iter_get_basic (iter, &val);
	    if (!literal)
	      printf ("signature \"");
	    printf ("%s", val);
	    if (!literal)
	      printf ("\"\n");
	    break;
	  }

	case DBUS_TYPE_OBJECT_PATH:
	  {
	    char *val;
	    dbus_message_iter_get_basic (iter, &val);
	    if (!literal)
	      printf ("object path \"");
	    printf ("%s", val);
	    if (!literal)
	      printf ("\"\n");
	    break;
	  }

	case DBUS_TYPE_INT16:
	  {
	    dbus_int16_t val;
	    dbus_message_iter_get_basic (iter, &val);
	    printf ("int16 %d\n", val);
	    break;
	  }

	case DBUS_TYPE_UINT16:
	  {
	    dbus_uint16_t val;
	    dbus_message_iter_get_basic (iter, &val);
	    printf ("uint16 %u\n", val);
	    break;
	  }

	case DBUS_TYPE_INT32:
	  {
	    dbus_int32_t val;
	    dbus_message_iter_get_basic (iter, &val);
	    printf ("int32 %d\n", val);
	    break;
	  }

	case DBUS_TYPE_UINT32:
	  {
	    dbus_uint32_t val;
	    dbus_message_iter_get_basic (iter, &val);
	    printf ("uint32 %u\n", val);
	    break;
	  }

	case DBUS_TYPE_INT64:
	  {
	    dbus_int64_t val;
	    dbus_message_iter_get_basic (iter, &val);
	    printf ("int64 %lld\n", val);
	    break;
	  }

	case DBUS_TYPE_UINT64:
	  {
	    dbus_uint64_t val;
	    dbus_message_iter_get_basic (iter, &val);
	    printf ("uint64 %llu\n", val);
	    break;
	  }

	case DBUS_TYPE_DOUBLE:
	  {
	    double val;
	    dbus_message_iter_get_basic (iter, &val);
	    printf ("double %g\n", val);
	    break;
	  }

	case DBUS_TYPE_BYTE:
	  {
	    unsigned char val;
	    dbus_message_iter_get_basic (iter, &val);
	    printf ("byte %d\n", val);
	    break;
	  }

	case DBUS_TYPE_BOOLEAN:
	  {
	    dbus_bool_t val;
	    dbus_message_iter_get_basic (iter, &val);
	    printf ("boolean %s\n", val ? "true" : "false");
	    break;
	  }

	case DBUS_TYPE_VARIANT:
	  {
	    DBusMessageIter subiter;

	    dbus_message_iter_recurse (iter, &subiter);

	    printf ("variant ");
	    print_iter (&subiter, literal, depth+1);
	    break;
	  }
	case DBUS_TYPE_ARRAY:
	  {
	    int current_type;
	    DBusMessageIter subiter;

	    dbus_message_iter_recurse (iter, &subiter);

	    printf("array [\n");
	    while ((current_type = dbus_message_iter_get_arg_type (&subiter)) != DBUS_TYPE_INVALID)
	      {
		print_iter (&subiter, literal, depth+1);
		dbus_message_iter_next (&subiter);
		if (dbus_message_iter_get_arg_type (&subiter) != DBUS_TYPE_INVALID)
		  printf (",");
	      }
	    indent(depth);
	    printf("]\n");
	    break;
	  }
	case DBUS_TYPE_DICT_ENTRY:
	  {
	    DBusMessageIter subiter;

	    dbus_message_iter_recurse (iter, &subiter);

	    printf("dict entry(\n");
	    print_iter (&subiter, literal, depth+1);
	    dbus_message_iter_next (&subiter);
	    print_iter (&subiter, literal, depth+1);
	    indent(depth);
	    printf(")\n");
	    break;
	  }
	    
	case DBUS_TYPE_STRUCT:
	  {
	    int current_type;
	    DBusMessageIter subiter;

	    dbus_message_iter_recurse (iter, &subiter);

	    printf("struct {\n");
	    while ((current_type = dbus_message_iter_get_arg_type (&subiter)) != DBUS_TYPE_INVALID)
	      {
		print_iter (&subiter, literal, depth+1);
		dbus_message_iter_next (&subiter);
		if (dbus_message_iter_get_arg_type (&subiter) != DBUS_TYPE_INVALID)
		  printf (",");
	      }
	    indent(depth);
	    printf("}\n");
	    break;
	  }
	    
	default:
	  printf (" (dbus-monitor too dumb to decipher arg type '%c')\n", type);
	  break;
	}
    } while (dbus_message_iter_next (iter));
}

 

分享到:
评论

相关推荐

    DBUS API说明文档

    - `_dbus_auth_set_context`:设置认证上下文,如认证策略和参数。 - `_dbus_auth_set_credentials`:设置认证凭证,如用户名和密码。 - `_dbus_auth_set_mechanisms`:指定支持的认证机制,用于与远程方协商选择...

    QT 的应用程序间的DBUS通信

    `QDBusMessage`类用于创建和解析DBus消息,`QDBusReply`则用于处理异步调用的返回结果。 为了实现数据传输,DBus支持多种数据类型,包括基本类型、结构体、数组和字典等。Qt的`QDBusVariant`类可以方便地封装任意Qt...

    linux DBUS 实例讲解

    3. **理解D-Bus服务的调用流程**:在调用“Add”方法时,需要指定参数并通过Execute按钮发起调用。消息会被发送到消息总线,消息总线将消息转发给相应的服务端处理。处理完成后,返回的结果会被显示出来。 #### 五...

    Go-dbus-原生Go绑定D-Bus消息总线系统

    在实际应用中,Go-dbus可以用来实现各种功能,例如控制桌面环境中的组件(如启动/停止服务、设置系统参数),与其他应用程序共享数据,或者作为微服务间的通信桥梁。通过深入学习和实践Go-dbus,你可以掌握D-Bus通信...

    dbus-signature.rar_reading

    本篇将深入探讨"dbus-signature.rar_reading"这一主题,重点关注如何读取和解析DBus的递归类型签名。 DBus签名使用一种简单的类型系统,其中包括基本类型如`b`(布尔值)、`i`(整数)、`s`(字符串)等,以及复合...

    dbus-print-message.rar_out

    在这个场景下,这个文件可能定义了一个或多个函数,用于解析DBus消息并将其内容打印出来。DBus消息由一系列的字节组成,包括方法调用、方法返回、信号等不同类型的通信单元。因此,这个源代码文件可能会涉及对DBus...

    dbus-introspect:Bourne Shell脚本反省DBus

    DBus-introspect利用这个脚本来解析DBus接口的信息,通常通过运行`dbus-introspect --xml <object path>`命令来获取。 当我们运行`dbus-introspect`时,它会返回一个XML格式的输出,这个输出包含了指定对象路径上的...

    Openwrt UBUS介绍

    OpenWRT UBUS是一种通讯框架,类似于Linux桌面系统上dbus,提供进程间通信支持,并支持消息回调,非常强大好用。UBUS架构简介UBUS架构主要由三部分组成:对象(Objects)、对象路径(Object Paths)和方法(Methods...

    STM32解析futabaS-bus协议说明

    STM32单片机在遥控器接收器模块中应用广泛,尤其是其在解析遥控器协议方面。futabaS-bus是一种广泛应用于futaba遥控器的串行通信协议。该协议用于传输遥控器的状态信息给接收器,然后接收器可以处理这些数据并将其...

    dbus-marshal-recursive-util.rar_Linux/Unix编程_Unix_Linux_

    - 定义和解析DBus消息结构的函数。 - 递归处理复杂数据类型,如嵌套数组、字典和自定义结构。 - 将C语言的数据结构转换为DBus消息格式,反之亦然。 - 错误处理和边界检查,确保正确性和安全性。 - 可能包含性能优化...

    大疆 NazaM v2 gps数据协议

    这涉及命令ID、参数和应答格式。 4. **报文格式**:GPS数据可能会按照特定的格式打包,比如JSON、二进制或其他自定义格式。这影响了数据的解析和处理方式。 5. **校验机制**:为了保证数据的准确性,协议可能包含...

    linux 蓝牙 bluetooth 协议栈详细分析

    HCIattach.c的主要流程包括解析命令行参数、初始化uart结构体、调用init_uart设置uart、打开并设置tty参数、设置波特率、执行芯片特定的初始化操作、切换到N_HCI线路规则、初始化完成后的操作、设置信号量、后台运行...

    蓝牙驱动及Bluez使用流程分析

    #### 蓝牙驱动分析与Bluez应用解析 在探讨蓝牙驱动及Bluez使用流程之前,我们首先需了解蓝牙技术的基础概念及其在现代通信中的角色。蓝牙是一种无线技术标准,用于短距离设备间的通信,常见于手机、笔记本电脑、...

    蓝牙协议栈移植(arm)

    这些库和工具是构建蓝牙协议栈的基础,例如bluez是Linux下的开源蓝牙软件,expat用于XML解析,dbus是消息总线系统,glib提供了基础的数据结构和函数,libusb处理USB设备交互,而bluez-utils则包含了一些蓝牙相关的...

    嵌入式Bluetooth协议栈移植

    3. **dbus**:DBus是Linux系统的进程间通信机制,BlueZ利用DBus进行事件通知和服务发现,使得不同的应用程序可以方便地交互和共享蓝牙资源。 4. **expat**:这是一款轻量级XML解析库,BlueZ可能用它来处理某些配置...

    ofonoofono拨号程序源代码

    首先,ofono框架的核心是其控制接口,它定义了一系列的D-Bus(DBus)消息协议,使得其他应用程序可以通过这个接口与ofono进行交互。D-Bus是一种轻量级的消息总线系统,用于进程间通信。在ofono中,D-Bus接口提供了...

    详解嵌入式linux启动信息

    本文将深入探讨嵌入式Linux的启动流程,解析其中的关键步骤和技术细节。 1. **BIOS/Bootloader阶段** - **BIOS**:启动时,硬件首先执行的是基本输入输出系统(BIOS),它主要负责硬件自检(POST)和加载引导程序...

    CentOS5.3安装postfix+extmail邮件系统

    本文将详细解析如何在CentOS 5.3操作系统上安装配置Postfix与Extmail邮件系统,以实现高效、安全的企业邮件服务。 ### 一、理解Postfix与Extmail **Postfix**是一款由IBM开发的邮件传输代理(MTA),它设计用于...

    华为BTS3012告警处理建议

    华为BTS3012告警处理建议详细解析 华为BTS3012基站作为华为公司的经典产品,在全球范围内广泛部署,其稳定性和可靠性得到了业界的高度认可。然而,在实际运行过程中,各种复杂的网络环境和技术因素可能会导致基站...

Global site tag (gtag.js) - Google Analytics