2011-09-27 22 views
18

मेरे पास मैक ओएस एक्स ऑपरेटिंग सिस्टम का सीमित एक्सपोजर है और अब मैंने एक्सकोड का उपयोग करना शुरू कर दिया है और मैं आई/ओ किट के बारे में पढ़ रहा हूं। मैक सिस्टम में जुड़े सभी यूएसबी डिवाइसों को सूचीबद्ध करने के लिए मुझे कमांड लाइन उपकरण के तहत एक्सकोड में एक प्रोग्राम बनाने की आवश्यकता है। जिनके पास पिछले अनुभव है, कृपया मेरी मदद करें। अगर कोई मुझे नमूना कोड प्रदान कर सकता है तो यह बहुत अच्छा उपयोग होगा, क्योंकि मैं शुरुआती बिंदु की तलाश में हूं।मैक में सभी यूएसबी डिवाइसों को सूचीबद्ध करने के लिए प्रोग्राम कैसे बनाएं?

उत्तर

19

आप अपनी आवश्यकताओं के USBPrivateDataSample अनुकूलित कर सकते हैं

ioreg उपकरण पर जानकारी: यदि नहीं तो आप कम से कम अपने कोड सत्यापित करने के लिए उपयोग कर सकते हैं , नमूना एक नोटिफ़ायर सेट करता है, वर्तमान में संलग्न डिवाइस सूचीबद्ध करता है, फिर डिवाइस अटैचमेंट/डिटेच के लिए प्रतीक्षा करता है। यदि आप करते हैं, तो आप usbVendor और usbProduct मिलान करने वाले शब्दकोशों को हटाना चाहते हैं, इसलिए सभी यूएसबी डिवाइस मेल खाते हैं।

वैकल्पिक रूप से, आप IOServiceGetMatchingServices का उपयोग IOServiceMatching(kIOUSBDeviceClassName) द्वारा बनाए गए शब्दकोश का उपयोग करके सभी मौजूदा मिलान सेवाओं के लिए पुनरावर्तक प्राप्त करने के लिए कर सकते हैं।

#include <IOKit/IOKitLib.h> 
#include <IOKit/usb/IOUSBLib.h> 

int main(int argc, const char *argv[]) 
{ 
    CFMutableDictionaryRef matchingDict; 
    io_iterator_t iter; 
    kern_return_t kr; 
    io_service_t device; 

    /* set up a matching dictionary for the class */ 
    matchingDict = IOServiceMatching(kIOUSBDeviceClassName); 
    if (matchingDict == NULL) 
    { 
     return -1; // fail 
    } 

    /* Now we have a dictionary, get an iterator.*/ 
    kr = IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, &iter); 
    if (kr != KERN_SUCCESS) 
    { 
     return -1; 
    } 

    /* iterate */ 
    while ((device = IOIteratorNext(iter))) 
    { 
     /* do something with device, eg. check properties */ 
     /* ... */ 
     /* And free the reference taken before continuing to the next item */ 
     IOObjectRelease(device); 
    } 

    /* Done, release the iterator */ 
    IOObjectRelease(iter); 
    return 0; 
} 
+0

आपकी मदद के लिए धन्यवाद। यह बहुत उपयोगी है और यह वही है जो मैं देख रहा हूं। जब मैं इसे बनाता हूं लेकिन यह कोड त्रुटियों की तरह त्रुटियों को दिखा रहा है: IOServiceGetmatching सेवा _main से main.o में संदर्भित है ... _IOObjectRelease, _IOServiceMatching, _IOIteratorNext, _kIOMasterPortDefault..I के लिए समान त्रुटियां मैंने xcode-> कमांड लाइन टूल-> मानक के तहत एक प्रोजेक्ट बनाया C++। यदि आप मदद कर सकते हैं, तो मैं आपके लिए बहुत आभारी हूं – Dili

+0

बिल्डिंग के दौरान मुझे मिली त्रुटियां ................. अपरिभाषित प्रतीकों: "_kIOMasterPortDefault", से संदर्भित: _kIOMasterPortDefault $ non_lazy_ptr main.o में "_IOServiceGetMatchingServices", से संदर्भित: main.o "_IOObjectRelease" में _main, से संदर्भित: main.o "_IOServiceMatching" में main.o _main में _main, से संदर्भित: _main main.o "_IOIteratorNext", से संदर्भित: मुख्य में _main।o ld: प्रतीक नहीं मिला संग्रह 2: ld 1 निकास स्थिति – Dili

+3

लौटा दी गई है आपको अपनी परियोजना में I/O किट फ्रेमवर्क (यानी 'IOKit.framework') और कोर फाउंडेशन फ्रेमवर्क का उपयोग करने की आवश्यकता है, या यह ' टी लिंक – Hasturkun

2

यदि आप system_profiler SPUSBDataType चलाते हैं तो यह सिस्टम से जुड़े सभी यूएसबी डिवाइसों को सूचीबद्ध करेगा, फिर आप उस डेटा के साथ टेक्स्ट फ़ाइल में डंप करके या इसे कमांड से एप्लिकेशन में पढ़कर और उसके साथ काम कर सकते हैं ।

+0

आपकी मदद के लिए धन्यवाद:

यहाँ एक छोटा नमूना (जो मैं कभी नहीं आई है) है। – Dili

7

आपको केवल आईओकेट रजिस्ट्री तक पहुंचने की आवश्यकता है। ऐसा करने के लिए आप ioreg टूल का उपयोग करने में सक्षम हो सकते हैं (उदा। इसे system() या popen() के माध्यम से चलाएं)। यूएसबी उपकरणों की

$ man ioreg 

प्राप्त सूची:

$ ioreg -Src IOUSBDevice 
+0

आपकी मदद के लिए धन्यवाद। सत्यापन के लिए यह बहुत उपयोगी होगा। लेकिन मुझे यूएसबी डिवाइसों को सूचीबद्ध करने के लिए एक्सकोड (सी ++ में) में एक प्रोग्राम की आवश्यकता है – Dili

+2

क्या आपने अपने कोड के भीतर से ioreg टूल निष्पादित करने के लिए 'system()' या 'popen() 'का उपयोग करने के बारे में हिस्सा पढ़ा था? –

+0

मैंने इसे पढ़ा। लेकिन मैं हुस्टुरकुन द्वारा दिए गए कोड की तरह कुछ के लिए looing था। यह भी उपयोगी है। लेकिन अगर आप कुछ नमूना कोड देते हैं जैसे मैंने कहा कि यह सबसे अच्छा होगा। – Dili

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^