Chrome.serial API - قراءة العدد الصحيح من البايتات عبر المسلسل
-
20-12-2019 - |
سؤال
أنا أعمل على ملحق Google Chrome الذي يتواصل مع Arduino UNO عبر المسلسل.لقد كتبت الوظيفة التالية sendSerialCmd
يأخذ منفذًا (سلسلة)، وserial_cmd (ArrayBuffer)، ووظيفة رد اتصال يتم تمريرها readInfo.data (ArrayBuffer) التي تتم قراءتها من الاتصال التسلسلي.
var CONNECTION_ID = -1;
var sendSerialCmd = function(port, serial_cmd, callback) {
chrome.serial.open(port, null, function(openInfo){
CONNECTION_ID = openInfo.connectionId;
if (CONNECTION_ID == -1) {
console.log('Could not connect to serial');
return;
}
chrome.serial.write(CONNECTION_ID, serial_cmd, function(writeInfo){
chrome.serial.read(CONNECTION_ID, 8, function(readInfo){
callback(readInfo.data);
});
})
});
chrome.serial.close(CONNECTION_ID, function(result){ console.log(result) });
};
إحدى المشكلات التي واجهتها هي المعلمة الثالثة التي تم تمريرها إلى ملف chrome.serial.read()
وظيفة.في ال chrome.serial API، المعلمة الثالثة هي بايت للقراءة (عدد صحيح):عدد البايتات المراد قراءتها, ومع ذلك، فإن عدد البايتات الواردة من Arduino الخاص بي عرضة للتغيير.في بعض الأحيان قد أحصل على 8 بايت، وفي أحيان أخرى أكثر.ما هي أفضل طريقة لاستعادة كل البايتات المرسلة من Arduino الخاص بي؟
لدى Arduino حل جديد من خلال وظيفة تسمى المسلسل متاح () الذي يُرجع عدد البايتات المتاحة للقراءة.هل هناك شيء مماثل يمكنني فعله باستخدام Chrome.serial API؟
المحلول
لا توجد وظيفة مماثلة ل Serial.available()
في واجهة برمجة تطبيقات Chrome التسلسلية، ولكن يجب عليك فقط إجراء استطلاع لعدد معقول من البايتات ومعالجة البيانات بالسرعة التي تناسبك.
اذا كان read
مطلوب (على سبيل المثال) 1024 بايت ويتوفر 8 بايت فقط، read
يجب أن ينجح بسرعة مع 8 بايت فقط.إذا كانت هناك رسالة بحجم 8 بايت ورسالة بحجم 12 بايت متاحة، فسيتم read
سينجح بـ 20 بايت ويمكنك تطبيق أي منطق ضروري لتحليل البيانات الناتجة.
لمعلوماتك، ستتغير واجهة برمجة التطبيقات التسلسلية قريبًا في Canary ولن تعد مسؤولاً عن الاستقصاء يدويًا read
.وبدلاً من ذلك، سيقوم Chrome باستطلاع رأيك وإطلاق النار chrome.serial.onReceive
الأحداث حيث تتوفر البيانات من جهاز مفتوح.