2011-04-05 12 views
5

में HIDAPI लाइब्रेरी तक पहुंचने के लिए मैं एक सामान्य छिपा डिवाइस के साथ संवाद करने के लिए अजगर का उपयोग करने की कोशिश कर रहा हूं।पाइथन

मैंने पढ़ा है कि सी में लिखित हिदापा लाइब्रेरी सरल और स्थिर क्रॉस-प्लेटफार्म छिपाई संचार के लिए libusb1.0 को धड़कता है। हालांकि, किसी ने कभी भी यह दिखाने के लिए परेशान नहीं किया है कि कैसे एक पाइथन लिपि के भीतर से हिदापी कार्यों को कॉल करना है, और यही वह जगह है जहां मुझे परेशानी हो रही है।

मैं काफी ctypes को समझने की तरह बहुत आसान सी कार्यों कॉल करने के लिए:

int add(int n1, int n2) { 
    return n1 + n2; 
    } 

मुसीबत है कि HIDAPI कार्यों, जैसे अधिक जटिल हैं (HIDAPI header file में):

struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned short vendor_id, unsigned short product_id); 

जो इस संरचना को इंगित करता है (mac branch C file में):

struct hid_device_info HID_API_EXPORT *hid_enumerate(unsigned short vendor_id, unsigned short product_id) 
{ 
... 
} 

जहां '...' ओएस-स्तरीय कोड का एक बहुत सारे हिस्सा है जो "स्ट्रिंग # hid_device की एक लिंक्ड सूची में एक सूचक है, जिसमें छिपा हुआ डिवाइस"

का उपयोग करने के बारे में आप कैसे जायेंगे ctypes, या किसी अन्य उपकरण, एक पायथन लिपि में इस तरह के एक समारोह को कॉल करने के लिए? मुझे उम्मीद है कि यह स्टैक ओवरफ्लो पृष्ठ उन सभी अन्य लोगों के लिए एक गाइड के रूप में कार्य करेगा जो एक ही समस्या को हल करना चाहते हैं, इसलिए कृपया बहुत सारी जानकारी दें, धन्यवाद।

उत्तर

3

यह आपके प्रश्न का सही उत्तर नहीं है, लेकिन कुछ नए पॉइंटर्स दे सकते हैं।

जटिल देशी पुस्तकालयों के साथ बातचीत करते समय, आपको शायद "अंतर को पुल" करने के लिए कुछ सी कोड लिखने की आवश्यकता है और अकेले साइट्स इसे काट नहीं सकते हैं। पुल कोड उन्हें पाइथन तक पास करने से पहले सी संरचनाओं को सरल बनाता है और इसके विपरीत, क्योंकि आप ctypes के साथ मूल कोड के सभी nifties का वर्णन करने में सक्षम नहीं हो सकता है।

आप देशी पायथन सी एक्सटेंशन हाथ से लिख सकते हैं, लेकिन इसकी अनुशंसा नहीं की जाती है।

कई "पुल टूलकिट" या कोड जेनरेटर हैं जो आप इस तरह की स्थितियों में उपयोग कर सकते हैं। सबसे लोकप्रिय लोगों में से एक साइथन है जिसे आप लिखने की अनुमति देते हैं .pyx मॉड्यूल जहां आप सी और पायथन कोड को स्वतंत्र रूप से मिश्रित कर सकते हैं।

http://cython.org/

.pyx तो देशी सी मॉड्यूल और रैपिंग .py मॉड्यूल जिसके परिणामस्वरूप संकलित किया गया है। आप आसानी से बाद में अपने आवेदन तर्क में आयात कर सकते हैं।