簡體   English   中英

關於檢測usb設備的問題

[英]the problem about detecting usb device

我需要在插入和拔出 usb 設備時檢測它,並使用 dbus 編寫 python 程序。

但是很奇怪,設備在插入或拔出時至少會安裝三次

監控代碼如下:

            device = dbus.Interface(self.bus.get_object("org.freedesktop.Hal", udi),
                                    "org.freedesktop.Hal.Device")

            self.notify_message(device.GetProperty("info.udi"))

然后當我嘗試插入 usb 設備(例如鍵盤)時,我們會發現 output

Mon Jul  4 03:47:31 2011    /org/freedesktop/Hal/devices/usb_device_413c_2003_noserial

Mon Jul  4 03:47:31 2011    /org/freedesktop/Hal/devices/usb_device_413c_2003_noserial_if0

Mon Jul  4 03:47:31 2011    /org/freedesktop/Hal/devices/usb_device_413c_2003_noserial_if0_logicaldev_input

那么,每次插入或拔出通知時都會顯示三次通知如何只顯示一次通知?

我不熟悉 dbus,但看看你得到的設備名稱:

usb_device_413c_2003_noserial
usb_device_413c_2003_noserial_if0
usb_device_413c_2003_noserial_if0_logicaldev_input

第一個設備可能代表了整個 USB 設備。 第二個設備最有可能代表該設備的接口 0。 第三個設備可能代表一個端點或接口 0 的某些其他功能,這些功能可能會或可能不會在設備的描述符中指定。

即使只插入一個物理設備,您也會得到三個不同的邏輯設備。 這種事情對於實現復合 USB 設備的人來說很重要。

但是,要回答這個問題:如果您只想收到一次通知,那么在您的通知處理程序 function 中,您應該通過查看設備名稱字符串並決定您是否關心事件或關心事件來過濾掉您不關心的通知。不是。 例如,您可能決定不關心名稱中帶有if0的設備,因此您的偽代碼將是:

def notificationHandler(notification)
  if notification.name does not contain `if0`
    pass notification to higher level code
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM