用Dbus与android的bluz通信

DBus研究笔记(一) 一.建立连接 要使用DBus进行通信必须首先与系统建立连接, 并申请一个"域名"使得其他应用可以找到你。常用DBusConnection* dbus_bus_get(DBusBusType, DBusError*)系列函数来与bus daemon建立连接。DBusBusType为需要连接的总线类型有系统总线,会话总线,和DBUS_BUS_STARTER。系统总线顾名思义在整个系统级别都有效,而会 阅读详情

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;
}测试程序如下

 

 


#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头文件就能编过。

 

Android系统启动流程4---init进程的工作流程 概况: 启动init进程 运行init.rc 启动zygote服务 Zygote fork的第一个进程——SystemServer SystemServer启动系统服务 1. linux启动第一个应用程序init kernel\init\main.c static int __ref kernel_init(void *unused) { int ret; kernel_init_freeable(); /* need to finish all async __init code before 阅读详情

相关推荐

Linux驱动学习--dbus通讯分析(结合源码分析)

目录 一、引言 二、dbus介绍 ------> 1、DBUS应用场景 三、dbus的实现 ------> 1、实现原理 ------> 2、连接到总线 ------------>2.1、总线类型 ------> 3、进程注册到总线上的流程 ------> 4、信号发送 ------> 5、信号接收 ------> 6、发送函数调用的消息类型 ------> 7、接收函数调用的消息类型 一、引言 今天来整理下dbus,linux中经常用到的多进程通讯机制

文艺小少年的博客 1691

【蓝牙】BLE 数据收发实战指南(手机 App ↔ 嵌入式 Linux/BlueZ)

BLE 数据收发实践指南 本文详细介绍了在手机 App(Android/iOS)与嵌入式 Linux(BlueZ)之间实现 BLE 数据交互的完整流程。主要内容包括: 基础概念:解析 Central 与 Peripheral 角色差异,说明 GATT/ATT 数据通道机制,重点介绍 CCCD 配置方法。 BlueZ 接口:详细说明 D-Bus 信号格式,强调特征值的单层 variant 封装规范,避免常见的双层封装问题。 典型场景: 手机作为中心设备连接 Linux 外设 手机向 Linux 写入命令并接收

love131452098的博客 1930

android dbus应用

android dbus应用

android移植dbus

Android dbus开源代码移植

wangjicong_215的博客 775

bluez-dbus:使用DBus和bluez的linux操作系统的蓝牙库(http

蓝巴士 使用和linux操作系统的蓝牙库。 该项目的灵感来自 ,但是它不需要任何包装库,因为它基于使用jnr-unixsocket的dbus-java的较新版本。 该库已经过Ubuntu 16.04.4(AMD64)和bluez库5.54的测试。 从该库的0.1.0版本开始,需要Java 8(以前的版本使用Java 7)。 如果要使用通过任何bluez方法传递的filedescriptor,则必须将库添加到您的项目中: <dependency> <groupId>com.rm5248</groupId> <artifactId>dbus-java-nativefd</artifactId> <version>1.0</version> </dependency> 要为Ubuntu构建更新的bluez库(16.04的版本早于5.50): 从下载新的bl

Linux下扫描蓝牙获取RSSI

Linux下使用C语言,扫描附近蓝牙并获取蓝牙RSSI。。。。。。。。。。。。。。。。。。。。

Android 自己开发的消息事件小项目DBus

优快云地址:http://blog.youkuaiyun.com/fesdgasdgasdg/article/details/79121783 GitHub地址:https://github.com/mengzhinan/DBus DBus一个简易、高效的消息框架。没看过EventBus的源码,但是个人感觉此项目够简洁高效、易懂易用! DBus项目突出的特点: 1、注册消息事件的类可以是

阿杜 1万+

Python脚本自动化芯片设计?PyAether实战教程带你玩转EDA

本文通过PyAether实战教程,详细介绍了如何利用Python脚本实现芯片设计自动化。内容涵盖环境搭建、核心对象模型解析,并重点演示了原理图自动生成、参数化单元创建及设计验证流程集成,帮助EDA工程师从重复性手动操作中解放,显著提升设计效率与一致性。

e4f5g6h的博客 1316

dbus调试方法

近期研究了android bluetooth,发现bluez消息都是通过dbus进行传输,但是在java层和bluez通信的过程中,有些会被block住,这样就需要dbus进行调试,下面讲述dbus进行调试的方法。     dbus提供2个tool,一个是dbus-send, 一个是dbus-monitor。dbus-send可以像调用API那样进行消息传递,而dbus-moni

Luohsh1的专栏 2186

从原理到应用:深入解析双编码器在机器人关节力矩感知中的实现

本文深入解析了双编码器方案在机器人关节力矩感知中的实现原理与应用。该方案通过在电机侧和输出侧分别安装编码器,利用两者位置差异间接高精度计算外力,克服了传统电流环精度不足和扭矩传感器成本高昂的缺点。它为实现协作机器人的丝滑拖动示教、灵敏碰撞检测以及足式机器人的动态平衡与柔顺控制提供了关键技术支撑,是目前高性能机器人力控的主流选择。

t8u9v0w1x的博客 662

ROS环境下UR机械臂与Realsense相机手眼标定实战指南

本文提供了在ROS环境下,对UR机械臂与Realsense相机进行手眼标定的完整实战指南。详细介绍了从环境搭建、软件包安装、硬件配置到分步数据采集与计算的完整流程,并分享了常见的避坑技巧与精度优化方法,旨在帮助开发者高效、准确地完成标定,为后续的机器人视觉应用奠定坚实基础。

sunny的博客 647

android bluez 编译,Android Framework architecture -- bluez(1)

转载请附加本文链接。android一词的本义指“机器人”,和robot不同的是它是有AI的,那么同时google也接android这个单词,于2007年11月5日宣布推出基于Linux平台的开源手机操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。对于一个软件+,硬件-的我来说,android无疑是黑暗了很久的一束阳光。有兴趣的博友们可...

weixin_30832021的博客 312

劳特巴赫 Trace32 调试使用教程

详细介绍如何使用trace32进行调试

m0_56208280的博客 4万+

BT传统蓝牙和BLE低功耗蓝牙的区别

【代码】传统蓝牙和Bluz低功耗蓝牙的区别。

Android系统攻城狮 6084

2026华为OD机考双机位C卷++ 双机位B卷 + 双机位A卷 + 2025C/B/A卷+ 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

2025华为OD机考双机位C卷++ 双机位B卷 + 双机位A卷 + 2025C/B/A卷+ 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

算法大师! 5万+

【推荐100个unity插件】基于节点的程序化无限地图生成器 —— MapMagic 2

MapMagic 2是一款基于节点的程序化地形生成工具,可快速创建无限地图。主要功能包括:通过图形化节点编辑器构建地形逻辑;支持四个核心模块(对象、样条线、生物群落和笔刷);提供完整的操作指南,包括创建资产、使用编辑器窗口、节点操作等。工具具有直观的UI界面,支持节点连接、参数调整、图层管理等功能,并能实时生成地形。适合游戏开发者快速构建高质量的可玩地形环境。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3121

Android BlueDroid(一):BlueDroid概述

转自:http://blog.youkuaiyun.com/xubin341719/article/details/40378205 一、名词解释:(有用信息增加中……) BTI F: Bluetooth Interface BTU : Bluetooth Upper Layer BTM: Bluetooth Manager  BTE  :Bluetooth embedded system

Android系统攻城狮 1414

Unreal5从入门到精通 专栏目录

欢迎来到“UE5从入门到精通”专栏!在这里,我们将带您踏上一段精彩的旅程,深入探索虚幻引擎5(Unreal Engine 5)的无限可能。不论您是游戏开发的新手,还是希望提升技能的开发者,这里都有适合您的内容。基础知识:了解虚幻引擎5的界面、功能和基本操作,为您的学习打下坚实的基础。项目实战:通过实际项目案例,帮助您从理论走向实践,真实体验游戏开发的每个环节。高级技巧:分享各种高级功能和技巧,包括蓝图、C++编程、材质编辑、光照和渲染等,让您能够创作出更具专业水准的作品。

TxNet 2987

DBUS和Binder对比

http://blog.sina.com.cn/s/blog_5377f4930100pe01.html 最近看了android上的两种进程间通信的方式,做了个对比: DBUS实现了一种进程间以及进程与内核间的通信的模型。Bus Daemon从源进城接收消息并且转发到目标进城;目标进城可以通过匹配机制只监听感兴趣的消息。简单调研后,目前认为DBUS是一种有中心的结构,即所有的消息都要集

浩海天空 5519

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

从D-Bus(DBus)的使用看Android设计策略中安全的优先级

http://hi.baidu.com/xalanz/blog/item/689cc2b1ebba4d5f09230293.html 从D-Bus(DBus)的使用看Android设计策略中安全的优先级 2009-12-15 08:59 Android使用了一种特殊的进程间通讯系统D-bus .而我们知道进程间通讯机制已经存在好多种,Corba,DCOP,COM,SOAP, ...

271

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Dbus简介

Linux下基本的通信方式有如下8种: 1. 管道pipe: 进程需要共同祖先 2. 命名管道named pipe, 也就是fifo:  文件系统中有对应文件名 3. mapped memory:把一个共享的文件映射到自己的进程地址空间 4. 消息队列:信息量大,格式灵活 5. 共享内存:速度最快 6. 信号量:同步手段 7. socket:最灵活 8. signal:比较复杂,携

tinyle的专栏 2119

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android培训班(38)

<br /> <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> <br />在init.rc文件里,可以看到加载下面的服务:<br />service dbus /system/bin/dbus-daemon --system --nofork <br />socket dbus stream 660 bluetooth bluetooth <br />user bluetooth <br

大坡3D软件开发 3439
上一篇: Android怎样添加AT命令
下一篇: dbus 例程
huber
博客等级 码龄15年 79粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值