为了检测连接的 USB,我必须检查啥接口?

Posted

技术标签:

【中文标题】为了检测连接的 USB,我必须检查啥接口?【英文标题】:What is the interface I have to inspect for detecting connected USB?为了检测连接的 USB,我必须检查什么接口? 【发布时间】:2015-11-22 18:31:31 【问题描述】:

我正在尝试通过以下方法检测 USB 设备是否从 qt 程序中插入或移除:http://doc.qt.io/qt-4.8/qdbusconnection.html#connect

我当前对应类的代码是这样的:

#include "usbhandler.h"
#include <QDebug>

USBHandler::USBHandler()

    QDBusConnection *bus;
    bool success;

    bus = new QDBusConnection("DeviceAdded");

    if (bus == NULL)
    
        qDebug() << "Allocation Error";
        return;
    

    if (!QDBusConnection::systemBus().isConnected())
    
        qDebug() << "Cannot connect to system bus";
    

    success = QDBusConnection::systemBus().connect(
                "org.freedesktop.UDisks",
                "/org/freedesktop/UDisks",
                "org.freedesktop.UDisks",
                "DeviceAdded",
            this, SLOT(deviceAdded(QDBusObjectPath)));

    if (success != true)
    
        qDebug() << "Unsuccesfully connected!";
        delete bus;
        return;
    


void USBHandler::deviceAdded(QDBusObjectPath dev)

  qDebug() << "device added!"<<dev.path();

当我运行solid-hardware listen 时,我在插入/拔出时收到以下通知:

Device Added:
udi = '/org/freedesktop/UDisks2/block_devices/sdb'
"/org/freedesktop/UDisks2/block_devices/sdb1" has new interfaces:     ("org.freedesktop.UDisks2.Block", "org.freedesktop.UDisks2.Filesystem", "org.freedesktop.UDisks2.Partition") 

Device Added:
udi = '/org/freedesktop/UDisks2/block_devices/sdb1'
"/org/freedesktop/UDisks2/block_devices/sdb1" lost interfaces: ("org.freedesktop.UDisks2.Partition", "org.freedesktop.UDisks2.Filesystem", "org.freedesktop.UDisks2.Block") 

Device Removed:
udi = '/org/freedesktop/UDisks2/block_devices/sdb1'
"/org/freedesktop/UDisks2/block_devices/sdb" lost interfaces: ("org.freedesktop.UDisks2.PartitionTable", "org.freedesktop.UDisks2.Block") 

Device Removed:
udi = '/org/freedesktop/UDisks2/block_devices/sdb'

所以我确信系统会通知 USB 记忆棒而且我现在已经使用 USB 命名接口玩了几个小时,但我的应用程序对插入/拔出记忆棒做出反应无法获得任何成功。

那么我做错了什么? connect() 的接口和名称参数应该是什么样的? 你能解释一下他们到底是做什么的吗?

【问题讨论】:

我对@9​​87654327@这个接口不熟悉,但是你可以看看at this question @Bowdzone:目标系统是嵌入式系统,不确定该项目是否可以在该平台上实现。 【参考方案1】:
Device Added:
udi = '/org/freedesktop/UDisks2/block_devices/sdb'
"/org/freedesktop/UDisks2/block_devices/sdb1" has new interfaces:

我不确定这是您的问题,但 udi 包含 UDisks2,而不是 UDisks。我建议您将呼叫调整为connect()。像这样的:

success = QDBusConnection::systemBus().connect(
            "org.freedesktop.UDisks",
            "/org/freedesktop/UDisks2",
            "org.freedesktop.UDisks2",
            [...]);

【讨论】:

我都试过了,有UDisks2,没有号码。我刚刚添加了我丢弃的代码,然后再次尝试。可悲的是,我的问题是“像这样”,因为我不知道它应该是怎样的,但无论如何。我现在要给你的sn-p一个机会。我会在几分钟内报告。 不,它仍然无法识别插件。 您是否将服务保留为“org.freedesktop.UDisks”(不是 Udisks2)? @Christophe Vu-Brugier:是的 应该实现ObjectManager接口。

以上是关于为了检测连接的 USB,我必须检查啥接口?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测硬盘是不是通过 USB 连接?

USB是啥意思

USB是啥意思

Android - 用于检查哪个设备(有线耳机或 USB 耳机)正在播放音频的 API(如果两者都已连接)

网口转成USB,电脑还可以上网

我的USB 接口打印机驱动到底出现了啥问题?