android的bluetooth架构是建立在bluez之上的,bluz通过dbus暴露了底层蓝牙设备的服务。先用android内置的命令bttest enable,开启bluedroid进程。这样bluz就可以接收dbus请求了。先来看段简单dbus代码:
char*
send_method_call_with_string_reply(char* objectPath,
char* type, char* name)
{
DBusMessage* msg;
DBusMessage* reply;
DBusConnection* conn;
DBusError err;
const char *reply_path;
char *path;
// initialise the error value
dbus_error_init(&err);
printf("get dbus connection:\n");
conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err);
if (dbus_error_is_set(&err))
{
fprintf(stderr, "Connection Error (%s)\n", err.message);
dbus_error_free(&err);
}
if (NULL == conn)
{
printf("conn is null\n");
goto done;
}
msg = dbus_message_new_method_call(“org.bluez”, // target for the method call
objectPath, // object to call on
type, // interface to call on
name); // method name
if (NULL == msg)
{
fprintf(stderr, "Message Null\n");
goto done;
}
reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &err);
if (!reply)
{
fprintf(stderr, "Can't get reply\n");
if (dbus_error_is_set(&err))
{
fprintf(stderr, "%s\n", err.message);
dbus_error_free(&err);
}
goto done;
}
if (!dbus_message_get_args(reply, &err, DBUS_TYPE_OBJECT_PATH, &reply_path,
DBUS_TYPE_INVALID))
{
fprintf(stderr, "Can't get reply arguments\n");
if (dbus_error_is_set(&err))
{
fprintf(stderr, "%s\n", err.message);
dbus_error_free(&err);
}
goto done;
}
path = strdup(reply_path);
dbus_connection_flush(conn);
printf("method call Sent\n");
done:
// free the message
if(msg)
dbus_message_unref(msg);
if(reply)
dbus_message_unref(reply);
return path;
}
main函数:
#include <dbus/dbus.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv) {
printf("----------------------test dbus start----------------------\n");
char* ss = send_method_call_with_string_reply("/","org.bluez.Manager","DefaultAdapter");
printf("reteun value:%s\n",ss);
free(ss);
printf("-----------------------test dbus end-----------------------\n");
return 1;
}
在android.mk中添加LOCAL_SHARED_LIBRARIES := libbluedroid libdbus,再加上dbus头文件就能编过。
分享到:
相关推荐
主要是对dbus进行c++封装成了一个dbus类,对外保留发送和接收的接口,方便使用;另外实现多进程dbus的双向通信测试,详细说明见博客<<Dbus 的编译(移植)以及双向通信使用例程>>
android dbus应用
使用dbus与wpa_supplicant交互的Node.js模块
QT 的应用程序间的DBUS通信
. ├── dbus-1.12.20.tar.gz ├── dbus-glib-0.106.tar.gz ├── expat-2.3.0.tar.bz2 ├── glib-2.34.1.tar.xz ├── libffi-3.3.tar.gz ├── README └── zlib-1.2.11.tar.gz
centos7 可使用的 dbus rpm包 包含 dbus 与 dbus-libs 两个包,一个是长期支持版 1.12 一个是 最新版 1.15 安装可以先卸载自带的rpm包 rpm -e dbus --nodeps;rpm -e dbus-libs --nodeps 卸载完成后安装新版本即可...
dbus通信example, 可以参考http://blog.csdn.net/a624731186/article/details/22691623
QtDbus详细的中文使用文档; QtDbus的signal通讯例程; QtDbus的method通讯例程; QtDbus的xml编程例程; 以上打包集合!!!
dbus编译后的package塞法阿斯顿发生的发生的发生的发生
D-Bus是一种高效低耗的进程间通讯(IPC)方式,可以进行不同层次进程(系统级进程与用户级进程)见的通讯,使用D-Bus可以给我们提供很方便的进程间交流。 Qt中QDBus的Interface-Connection通讯方式方式相比于Adaptor...
DBus通讯方式中,设置适配器Adaptor和Interface的通讯方式比较麻烦,重点在于适配器类(Adaptor类)和接口类(Interface类)的生成,Qt有工具可以自动生成相应的类...※建议Qt中DBus通讯使用Interface-Connection方式※
本示例用QT实现,分别演示了通过QDBusMessage、QDBusInterface及代理的方式进行dbus调用的方法。 其中: numoperator类中实现了几个方法,此类即是提供给dbus调用的对象 usedbusbyqdbusinterface演示了通过...
对dbus-glib的使用框架进行了说明,分为服务端和客户端,分别对方法和信号进行了说明
这是在linux中的QT的DBUS的使用方法实例
里面包含1个c文件以及编译应该注意的问题,经测编译后能正常工作。 linux系统需要先安装dbus。
linux下的总线通讯DBus的一个实例,还不错。
详细说明了DBUS CORE的工作原理,是理解DBUS的好东西!
Qdebus
DBUS在Linux内核及用户空间的使用,与HAL及UDEV的关系。