2012-10-05 4 views
5

के लिए यूएसबी ड्राइवर लिखना मैं एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं जिसमें मुझे एक यूएसबी डिवाइस से कनेक्ट करने की आवश्यकता है।एंड्रॉइड

मैंने विंडोज़ पर एक समान एप्लीकेशन विकसित किया है और मेरे पास ड्राइवर में सी लिखा है।

मैं अपने एंड्रॉइड एप्लिकेशन के लिए एक यूएसबी ड्राइवर विकसित करना चाहता हूं। मैं जानना चाहता हूं कि एंड्रॉइड के लिए यूएसबी ड्राइवर विकसित करने के लिए क्या चीजें हैं।

या

मैं NDK का उपयोग करके सी में लिखे कोड का पुन: उपयोग कर सकते हैं।

धन्यवाद,

उत्तर

6

पहले, एंड्रॉयड वास्तव में सिर्फ लिनक्स है, इसलिए यदि आप "मेरी Android एप्लिकेशन के लिए एक यूएसबी चालक लेखन" के बारे में बात कर रहे हैं आप बल्कि कहना चाहिए "विशिष्ट उपकरण के लिए एक linux USB ड्राइवर लिख"।

अगला, आपको किसी भी तरह से अपने डिवाइस तक पहुंचना होगा। लिनक्स के लिए यूएसबी ड्राइवर लिखने पर आपको क्या मिलेगा शायद कुछ फ़ाइल नोड/dev/में है। मुझे लगता है कि आप गैर-मानक यूएसबी डिवाइस (जैसे माउस/जॉयस्टिक/मास स्टोरेज) के लिए ड्राइवर बनाना चाहते हैं जिसके लिए एंड्रॉइड एक अच्छा जावा एपी प्रदान नहीं करता है? उस स्थिति में आपको मूल पुस्तकालय लिखना होगा (शायद आपके पास पहले से मौजूद कोड पर आधारित है) और इसे एनडीके के साथ संकलित करें। .so फ़ाइल जिसे आप इससे बाहर निकाल देंगे, आपके एंड्रॉइड एप्लिकेशन में पैक किया जा सकता है, जिसका उपयोग तब आपके यूएसबी डिवाइस से बात करने के लिए किया जा सकता है।

तो यह योग करने के लिए ऊपर:

यूएसबी डिवाइस ड्राइवर -> एक कर्नेल मॉड्यूल बना सकते हैं या अपने लिनक्स कर्नेल में एक चालक को एम्बेड: इस linux USB ड्राइवर प्रोग्रामिंग सामान है, जिसके लिए आप पर्याप्त गाइड को खोजने के लिए सक्षम होना चाहिए वेब पर। यदि आपने वास्तव में एक विंडोज़ यूएसबी ड्राइवर बनाया है तो आपको अपने सी कोड के कुछ हिस्सों का पुन: उपयोग करने में सक्षम होना चाहिए।

देशी रैपर लाइब्रेरी आपके डिवाइस (.so फ़ाइल, या .dll यदि आप विंडोज टर्मिनोलॉजी के लिए उपयोग की जाती हैं) तक पहुंचने के लिए -> एक एनडीके प्रोजेक्ट बनाएं जो सही डिवाइस नोड खोलता है और सही ढंग से आपके डिवाइस से लिखता/लिखता है।

एंड्रॉइड ऐप -> .so फ़ाइल शामिल करें और जेनी के माध्यम से अपने मूल (सी) विधियों तक पहुंचें। आप अपनी लाइब्रेरी की हेडर फ़ाइलों से जेनी कोड जेनरेट करने के लिए जावा या स्विग जैसे टूल का उपयोग करने में सक्षम हो सकते हैं।

3

पिछला उत्तर मानता है कि आपके पास अपने डिवाइस तक रूट पहुंच है और यह बड़े पैमाने पर तैनाती के लिए उपयुक्त नहीं है। चूंकि एपीआई संस्करण 12 एंड्रॉइड ने एक यूएसबी इंटरफेस प्रदान किया है जो आपको निम्न स्तर नियंत्रण चैनलों और यूएसबी अनुरोध बफर का उपयोग करके कुछ उपकरणों के साथ बातचीत करने की अनुमति देता है।

डिवाइस के दो प्रकार यूएसबी (Android) गौण उपकरणों

समर्थित USB होस्ट उपकरण हैं

होस्ट मोड आम तौर पर केवल टेबलेट पर अच्छी तरह से समर्थन है, हैंडसेट और समर्थन करते हैं कर सकते हैं यह लेकिन उनके ablity बनाए रखने के लिए मेजबान विधा है कम और सवालों में deviec की वोल्टेज की मांग के रूप में यह एक अतिरिक्त इंटरचेंज है कि एक "Android" सहायक के रूप में एक सहायक की पहचान करता है

जोड़ने के लिए यूएसबी मानकों फैली

गौण मोड अजीब है पर बहुत निर्भर करता है, तो ऊपर मोड एक आपके लिए उपयोग करने योग्य फिर से कम स्तर के सी ड्राइवर का उपयोग करने के लिए वे अब तक बेहतर विकल्प हैं जब तक कि आप उन सभी उपकरणों पर पूर्ण नियंत्रण नहीं डालते हैं जिन्हें इसे इंस्टॉल किया जाएगा।

ये जावा एपिस दोनों हैं और यूएसबी के तहत Google एंड्रॉइड दस्तावेज़ साइट पर दस्तावेज पाए जा सकते हैं।

+0

क्या एनडीके अनुप्रयोगों को रूट पहुंच की आवश्यकता है? –

+1

नहीं आप नहीं करते हैं। मूल कोड रूट के बिना विकसित और तैनात किया जा सकता है लेकिन सिस्टम के स्वामित्व वाले संसाधनों जैसे कि उपकरणों को रूट की आवश्यकता होगी। एक गैर-यूएसबी उदाहरण मानक लिनक्स एसएसडीडी जैसे ड्रॉपबियर का उपयोग करेगा, यह संभव है कि आप उन्हें प्ले स्टोर पर पा सकें, हालांकि स्टैंडरार्ड बंदरगाहों पर चलाने के लिए उन्हें रूट के रूप में चलाने की आवश्यकता होगी। – Neil