इसलिए मैंने एंड्रॉइड यूएसबी एक्सेसरी एपीआई लागू की है जैसे कि मैं अपने फोन को अपने लैपटॉप में लिनक्स चलाने के लिए प्लग कर सकता हूं और यह फोन को यूएसबी एक्सेसरी मोड में डाल देता है। फिर मैं सहायक का उपयोग कर सकता हूं, इसे खोल सकता हूं, और इसे लिखना शुरू कर सकता हूं। मेरा कोड the documentation में उदाहरण के समान दिखता है। मुख्य अंतर यह है कि मैं अलग-अलग पढ़ने और लिखने के तरीकों का उपयोग कर रहा हूं और मूल कोड से जेएनआई के माध्यम से उन्हें एक्सेस कर रहा हूं।एंड्रॉइड यूएसबी एक्सेसरी से पढ़ना ENODEV IOException
यहां यह दिलचस्प है। दूसरे या दो के लिए सफलतापूर्वक पढ़ने/लिखने के बाद, मेरे लैपटॉप से थोक हस्तांतरण लिखने से टाइमआउट त्रुटियां मिलती हैं और फिर एंड्रॉइड में यूएसबी एक्सेसरी को रीड कॉल ईओईडीईवी त्रुटि कोड के साथ आईओएक्सप्शन फेंकता है। यह अभी भी केबल से जुड़ा हुआ है और UsbManager अभी भी सूची में सहायक को सूचीबद्ध करता है, और मुझे इसके लिए अभी भी अनुमति है।
इसकी अजीबता को जोड़ने के लिए, मैंने पाया कि अगर मैंने पठित लूप में 100 मीटर नींद डाली है, तो समस्या मूल रूप से दूर हो जाती है (हालांकि यह अभी भी अवसर पर होती है)। वहां सोने में सिर्फ एक भयानक झुकाव नहीं है, लेकिन यह मेरे ऐप में एक असहिष्णु विलंबता पेश करता है। नींद का समय जितना कम होगा, हैक कम प्रभावी होगा, जहां यह नींद के समय 10ms पर अप्रभावी है।
मैं थोक हस्तांतरण का उपयोग करके वास्तविक समय डेटा के लगभग 20-30 केबीपीएस प्रसारित कर रहा हूं (लेकिन इतना वास्तविक समय नहीं कि थोक हस्तांतरण पर्याप्त नहीं होगा), और हस्तांतरण का आकार लगभग 20 से 800 बाइट्स तक है -30Hz। क्या यह यूएसबी की सीमा हो सकती है? मेरे पास इसके साथ अनुभव का एक टन नहीं है, इसलिए मैं मूल रूप से नेटवर्क सॉकेट के समान ही इसका इलाज कर रहा हूं। क्या मुझे छोटे संदेशों को कतारबद्ध करना चाहिए और उन्हें कम बार-बार बड़े हस्तांतरण में एक साथ भेजना चाहिए? क्या छोटे, उच्च-आश आवृत्ति थोक हस्तांतरण में कोई समस्या है? मैं इसमें देख लूंगा, लेकिन मैं मूल रूप से यहां स्ट्रॉ पर पकड़ रहा हूं।
हार्डवेयर:
- लैपटॉप उबंटू 10.04 चल रहा है और libusb 1.0.0 का उपयोग कर रहा है।
- फ़ोन गैलेक्सी नेक्सस एस चल रहा स्टॉक एंड्रॉइड 4.1.2 है।