我目前正在開發一個應用程序在10.6.7,它應該接收通知,當一個新的USB設備插入。我發現有一個IOKit函數處理這樣的'IOServiceAddMatchingNotification'的東西。因爲這個特定函數的返回值是0,所以我認爲這個問題可能出現在我的匹配字典中,這個函數被賦予了這個函數。我宣佈詞典那樣:從IOKit(CoreFoundation)接收通知插入設備的問題
CFMutableDictionaryRef matchingDict = IOServiceMatching(kIOUSBDeviceClassName);
因爲我wan't接收爲每個設備的通知,我不知道這是創建這個特定字典的正確途徑。
我完整的代碼如下所示:
ioKitNotificationPort = IONotificationPortCreate(kIOMasterPortDefault);
notificationRunLoopSource = IONotificationPortGetRunLoopSource(ioKitNotificationPort);
CFRunLoopAddSource(CFRunLoopGetCurrent(), notificationRunLoopSource, kCFRunLoopDefaultMode);
CFMutableDictionaryRef matchingDict = IOServiceMatching(kIOUSBDeviceClassName);
addMatchingNotificationResult = IOServiceAddMatchingNotification(ioKitNotificationPort,
kIOPublishNotification,
matchingDict,
deviceAdded,
NULL,
有沒有人有一個想法,爲什麼這是不行的? (注意:回調函數是一個靜態的void c函數,其餘的被包裝在一個Obj-C類中)。
感謝
的Xcode 4,10.6.7
我還沒有非常熟悉IOKit的用戶空間,但在內核方面,匹配首先發生在最特定的匹配字典上,並且只有在失敗時纔會嘗試更一般的匹配。你是否嘗試過使用已經與現有驅動程序匹配的設備?此外,也許這將有所幫助:http://developer.apple.com/library/mac/#qa/qa1076/_index.html – pmdj 2011-04-13 08:55:16
我試過這個與我現在使用一段時間的USB棒。 Finder發現這個棒,所以我認爲我不需要在OS X的驅動程序目錄中寫入一個條目。另外我喜歡獲取從未連接到我的mac的棒的通知,所以應該有一種方法來處理這...我仍然無法找到這種方式... – Andi 2011-04-13 21:14:01