2012-12-21 15 views
7

मैं काफी Android विकास के लिए नया हूँ और मैं हाल ही में USB होस्ट की खोज की है।Android विकास यूएसबी स्थानांतरण

किसी को भी मुझे बता करने के लिए कैसे थोक स्थानांतरण का उपयोग करने के लिए इतना है कि मैं देख सकता हूँ क्या एक बाहरी कैमरा देखता है, लेकिन इसके बजाय मेरी टेबलेट पर यह दिखाने में सक्षम हो सकते हैं?

कैमरा: Canon Powershot A1300 गोली: Iconia A200

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

मैं अंतिम बिंदु देख सकते हैं और बाहरी कैमरा के साथ एक संबंध स्थापित करने के लिए कर रहा हूँ, लेकिन मैं जहां यहां से जाने के लिए पता नहीं है।

किसी भी मदद की गहराई से सराहना की है।

उत्तर

14

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

दुर्भाग्य से, भंडारण और मीडिया उपकरणों की व्याख्या करने का सबसे सरल डिवाइस कक्षाएं नहीं हैं, इसलिए यह मुश्किल अगर आप सिर्फ अपने पैरों सामान्य रूप में USB पर गीला हो रही है हो सकता है। सबसे अच्छी सलाह जो मैं दे सकता हूं वह है कि आपके कैमरे की रिपोर्ट इंटरफ़ेस क्लास (अधिकांश या तो मास स्टोरेज या एमटीपी) हैं, जो यहां पाए जा सकते हैं: http://www.usb.org/developers/devclass_docs

स्पेक दस्तावेज़ गणना करेगा आदेश जो आपको डिवाइस के साथ संवाद करने के लिए उपयोग करने की आवश्यकता है। मैं भी यूएसबी संक्षेप में, जो उनका कहना है कैसे यूएसबी अनुरोध, सामान्य रूप में निर्माण कर रहे हैं जो आप मैप क्या आप मानकों UsbDeviceConnection के तरीकों में पाया करने के लिए एक कल्पना डॉक्स में देखने में मदद कर सकते का एक बड़ा काम करता है में बाहर की जाँच की सिफारिश करेंगे: http://www.beyondlogic.org/usbnutshell/usb1.shtml

कुछ हद तक नियंत्रण आदेश होंगे जो आपको कैमरे को स्थापित करने के लिए "एंडपॉइंट 0" को भेजने की आवश्यकता होगी, और फिर शेष स्थानान्तरण बड़े अंतराल पर होने की संभावना है।

एंड्रॉइड शर्तों में, नियंत्रण अनुरोध केवल UsbDeviceConnection.controlTransfer() का उपयोग करके सिंक्रनाइज़ रूप से भेजा जा सकता है, जिसका अर्थ यह है कि हस्तांतरण पूरा होने तक यह विधि ब्लॉक हो जाती है। इस विधि में भरने वाले पैरामीटर आपके डिवाइस वर्ग के लिए spec दस्तावेज़ों में पाए जाते हैं।

थोक अंतराल पर अनुरोध UsbDeviceConnection.bulkTransfer() के माध्यम से समकालिक रूप से भेजा जा सकता है या UsbRequest उदाहरण का उपयोग कर अतुल्यकालिक रूप से भेजा जा सकता है। UsbRequest के साथ आप एक स्थानांतरण कतार कर सकते हैं और बाद में परिणामों के लिए वापस (UsbDeviceConnection.requestWait() के माध्यम से) जांच सकते हैं।

मेरे पास गेस्ट्यूब पेज पर कुछ उदाहरण हैं जो मेजबान एपीआई का उपयोग कुछ बुनियादी बाधाओं और नियंत्रण डिस्क्रिप्टर जैसे सूचना डिस्क्रिप्टर करने के लिए करते हैं। शायद इस बात का कुछ के साथ-साथ आपके लिए उपयोगी हो जाएगा: https://github.com/devunwired/accessory-samples


के साथ यूएसबी उदाहरण कोड के बारे में अपने प्रश्न का संबंध है

:

अनुरोध इस कोड में किए गए सिर्फ एक सामान्य "जाओ विन्यास डिस्क्रिप्टर" है अनुरोध करें कि सभी यूएसबी उपकरणों को जवाब देना चाहिए (यह कोर कमांड है, क्लास-विशिष्ट नहीं)।असल में, यह अनुरोध है जहां एंड्रॉइड एपीआई को जानकारी मिलती है जो आप इंटरफेस और एंडपॉइंट्स के लिए पूछ सकते हैं। फ़ील्ड मान कोर यूएसबी स्पेसिफिकेशन से आते हैं (यह कमांड विशेष रूप से 3.0 spec में सेक्शन 9.4.3 और 9.6.3 पर परिभाषित किया गया है): http://www.usb.org/developers/docs/ या यूएसबी से संक्षेप में एक और उपयोगी वर्णन जो आप पा सकते हैं, जिसमें थोड़ा और अधिक है चर्चा: http://www.beyondlogic.org/usbnutshell/usb5.shtml#ConfigurationDescriptors

लंबाई कुछ मनमाने ढंग से है, यह चालक को बताती है कि कितने बाइट पढ़ने या लिखने के लिए कहते हैं। अधिकांश यूएसबी होस्ट ड्राइवर पहले डिवाइस डिस्क्रिप्टर से पूछेंगे, जिसमें मेजबान को मैक्स पैकेट आकार का समर्थन करने वाला एक फ़ील्ड शामिल होगा, और फिर उस आकार का भविष्य के अनुरोधों की लंबाई के रूप में उपयोग करेगा। एक पूर्ण-विशेषीकृत ड्राइवर शायद यह आदेश देगा और फिर बफर को काफी बड़ा था, और अगर संशोधित/संशोधित नहीं किया गया तो यह देखने के लिए पहले लंबाई बाइट्स (वर्णनकर्ता का wTotalLength फ़ील्ड) जांचें। उदाहरण में, मैंने बस सादगी के लिए 64 चुना क्योंकि यह "अधिकतम" अधिकतम पैकेट आकार प्रोटोकॉल को सहायक के रूप में परिभाषित करता है।

फिर, फिर आपके डिवाइस को पेश किए जाने वाले विशिष्ट डेटा के अनुरोध करने के लिए, उन आदेशों को विशिष्ट क्लास दस्तावेज़ में पाया जाएगा, न कि मूल विनिर्देश।

+0

मैंने पहले से परे साइट पर चारों ओर देखा है और इसमें बहुत कुछ समझने में थोड़ा परेशानी थी और इसके एंड्रॉइड हिस्से से संबंध नहीं मिला। मुझे पता चला कि डिवाइस सार्वजनिक स्थैतिक अंतिम int USB_CLASS_STILL_IMAGE मैं अब spec पीडीएफ में पहुंचा दूंगा और देख सकता हूं कि मैं क्या पा सकता हूं! फिर से धन्यवाद, (उम्मीद है कि मैं अटक नहीं जाऊंगा!) –

+0

मुझे मानक डिवाइस अनुरोधों की उपयोगिता में थोड़ी परेशानी हो रही है क्योंकि वे सभी डिवाइस के लिए मेटाडेटा देने लगते हैं। क्या मैं इसे गलत तरीके से पढ़ रहा हूं? मैंने क्लास, सबक्लास, और प्रोटोकॉल कोड और संबंधित एंडपॉइंट डेटा को झटका दिया लेकिन कैमरे को डिवाइस पर क्या देखता है उसे भेजने के लिए अभी तक कोई प्रासंगिक कमांड खोजना नहीं है। –

+0

यह जानकारी आपको डिवाइस क्लास विनिर्देश दस्तावेज़ों में शामिल किया जाएगा। अभी भी छवि मेरे द्वारा लिंक की गई साइट पर सूचीबद्ध है, या यहां उस वर्ग दस्तावेज़ का सीधा लिंक है। विशेष रूप से, छवि कैप्चर के साथ काम करने के लिए वर्कफ़्लो के बारे में धारा 7 वार्ता: http://www.usb.org/developers/devclass_docs/usb_still_img10.pdf – Devunwired

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