मैं एक एफटीडीआई 2232 एच चिप के आधार पर एक कस्टम डिवाइस से डेटा प्राप्त करने की कोशिश कर रहा हूं।एंड्रॉइड यूएसबी होस्ट - bulkTransfer() डेटा खो रहा है
मैं एक साधारण Async फीफो मोड का उपयोग कर रहा हूं, और आने वाली डेटा दर 3.2 एमबी/सेकंड है।
सब कुछ मेरे पीसी पर टेस्ट कोड के साथ पूरी तरह से काम करता है, लेकिन मुझे अपने तोशिबा उत्तेजना पर डेटा प्राप्त करने में समस्याएं आ रही हैं।
टीडीआई का एंड्रॉइड ड्राइवर विफल रहता है, इसलिए मैं जावा का उपयोग कर कोडिंग कर रहा हूं।
मैं डेटा का 95% + पूरी तरह से प्राप्त कर सकता हूं, लेकिन प्रत्येक बार एक बार डेटा 'स्पटर' और मुझे दो या तीन बार डेटा के समान 4-5K के भाग मिलते हैं, फिर अच्छे डेटा पर।
मैं थ्रिव या एंड्रॉइड के लिए बहुत तेज़ नहीं जा रहा हूं, क्योंकि मेरे पास पहले डेटा (डबल/6.4 एमबी/सेकंड) में आने वाला था और इसमें लगभग 9 5% भी था। (इसलिए इसे आधे दर पर कोई समस्या नहीं होनी चाहिए।)
ऐसा लगता है कि एंड्रॉइड के भीतर होने वाली बफरिंग (या डबल-बफरिंग) में कुछ प्रकार की बग है। (यह एफटीडीआई 2232 एच के भीतर बफर नहीं है क्योंकि दोहराया गया डेटा चिप के 4 के आंतरिक बफर से बड़ा होता है।)
सेटअप कोड सरल है, और फिर यह लगभग ~ पूरी तरह से काम कर रहा है।
पाश जहां डाटा हड़पने होता है बहुत सरल है:
while(!fStop)
if(totalLen < BIG_BUFF_LEN-IN_BUFF_LEN)
{
len=conn.bulkTransfer(epIN, inBuff, IN_BUFF_LEN, 0);
System.arraycopy(inBuff, 0, bigBuff, totalLen, len);
totalLen+=len;
}
मामले में आप लगता है कि यह arraycopy के लिए समय विलंब होता है - भले ही मैं उस लाइन बाहर टिप्पणी मैं अभी भी डेटा खो देते हैं।
IN_BUFF_LEN 16384 है (यदि मैं इनफफ के आकार को बढ़ाता हूं तो भी थोक ट्रांसफर उस से अधिक वापस नहीं लौटाएगा)।
बिगबफ कई मेगाबाइट्स है।
एक माध्यमिक सवाल के रूप में - किसी को भी कैसे पर bulkTransfer के लिए सूचक है कि bigBuff सीधे से स्थापित हो जाएगा --- पारित करने के लिए पता है एक ऑफसेट ('0' स्थिति पर शुरू नहीं
इस के लिए कोई समाधान? –
शायद एंड्रॉइड उन समय के दौरान कचरा इकट्ठा कर रहा है और कुछ खो रहा है। यह देखने के लिए कि आप डेटा खो देते समय ओएस में क्या हो रहा है, यह देखने के लिए अपने लॉगकट को जांचें। – RightHandedMonkey
अजीब समस्या, क्योंकि यदि आप एक फीफो का उपयोग करते हैं तो यह कभी नहीं होना चाहिए। क्योंकि जब आप फीफो पढ़ते हैं तो डेटा बाहर जाता है। क्या आपने फीफो पढ़ने से पहले हर बार बफर को साफ़ करने का प्रयास किया है? यानी यह सुनिश्चित करना कि आप दो बार एक ही डेटा नहीं पढ़ रहे हैं, फीफो से बाहर नहीं बल्कि आपका बफर। – fonZ