يمكنك تصميم جهاز لتحقيق الاستفادة الكاملة من WebUSB API.
توضّح هذه المقالة كيفية تصميم جهاز للاستفادة إلى أقصى حد من واجهة برمجة تطبيقات WebUSB. للحصول على مقدمة موجزة عن واجهة برمجة التطبيقات نفسها، راجع الدخول إلى أجهزة USB. على الويب.
الخلفية
لقد أصبح الناقل التسلسلي العالمي (USB) هو الواجهة المادية الأكثر شيوعًا توصيل الأجهزة الطرفية بأجهزة الكمبيوتر المكتبي وأجهزة الحوسبة المحمولة. بالإضافة إلى تحديد الخصائص الكهربائية للحافلة ونموذج عام للتواصل مع أحد الأجهزة، تتضمن مواصفات USB مجموعة من فئات الأجهزة والمواصفات. هذه هي النماذج العامة لفئات معينة من الأجهزة، مثل كسعة التخزين والصوت والفيديو والاتصال بالشبكات وما إلى ذلك، والتي يمكن للشركات المصنّعة للأجهزة وتنفيذها. تكمن ميزة مواصفات فئة الأجهزة هذه في بإمكان بائع نظام التشغيل تنفيذ برنامج تشغيل واحد بناءً على الفئة المواصفات ("سائق الفئة") وأي جهاز تنفذ هذه الفئة سيتم كان هذا تحسّنًا كبيرًا على كل شركة مصنّعة تحتاج إلى كتابة برامج تشغيل أجهزتهم.
ومع ذلك، لا تتناسب بعض الأجهزة مع إحدى فئات الأجهزة الموحَّدة هذه. حاسمة يمكن للشركة المصنعة بدلاً من ذلك اختيار تصنيف أجهزتها على أنها تنفيذ فئة خاصة بالبائع. في هذه الحالة، يختار نظام التشغيل الجهاز الذي برنامج التشغيل لتحميله بناءً على المعلومات المقدمة في حزمة برنامج التشغيل الخاصة بالبائع، عادةً مجموعة من معرفات البائعين والمنتجات المعروفة بتنفيذ والبروتوكول الخاص بالمورد.
وهناك ميزة أخرى في USB وهي أن الأجهزة قد توفر واجهات متعددة المضيف الذي يتصلون به. يمكن لكل واجهة تنفيذ أي وفئة موحدة أو أن تكون خاصة بالبائعين. عندما يختار أحد أنظمة التشغيل السائقين المناسبين لمعالجة الجهاز يمكن المطالبة بكل واجهة من قِبل مستخدم السائق. على سبيل المثال، عادةً ما توفر كاميرا الويب USB واجهتين، إحداهما تنفيذ فئة فيديو USB (للكاميرا) وفئة واحدة تنفذ USB فئة الصوت (للميكروفون). لا يقوم نظام التشغيل بتحميل ملف "برنامج تشغيل كاميرا الويب" ولكن بدلاً من ذلك تحمّل برامج تشغيل مستقلة لفئة الفيديو والصوت التي تتحمّل مسؤولية الوظائف المنفصلة للجهاز. هذا النمط أن تكوين فئات الواجهات يوفر مرونة أكبر.
أساسيات واجهة برمجة التطبيقات
وتتضمن العديد من فئات USB العادية واجهات برمجة تطبيقات Web API. على سبيل المثال،
بإمكان الصفحة التقاط فيديو من جهاز لفصل الفيديو باستخدام getUserMedia()
أو تلقّي أحداث الإدخال من جهاز فئة واجهة بشرية (HID) من خلال الاستماع
أحداث KeyboardEvents أو PointerEvents أو باستخدام لوحة التحكّم أو
WebHID API.
وكما هو الحال في بعض الأجهزة، لا يتم تنفيذ تعريف موحّد للفئة،
على أجهزة تنفيذ ميزات تتوافق مع واجهات برمجة تطبيقات النظام الأساسي للويب الحالية. فعندما
يمكن لواجهة WebUSB API سد هذه الفجوة من خلال توفير وسيلة للمواقع
للمطالبة بواجهة خاصة بالمورّد وتنفيذ الدعم لها من
داخل صفحتهم.
تختلف المتطلبات المحددة لإتاحة إمكانية الوصول إلى أي جهاز عبر WebUSB قليلاً من نظام أساسي إلى آخر بسبب الاختلافات في طريقة إدارة أنظمة التشغيل لـ USB ولكن المطلب الأساسي هو ألا يتضمن الجهاز يطالب برنامج التشغيل بالواجهة التي تريد الصفحة التحكم فيها. يمكن أن يكون هذا برنامج تشغيل عام يوفره مورّد نظام التشغيل أو برنامج تشغيل الجهاز الذي يوفره البائع. بما أنّ أجهزة USB يمكن أن توفّر واجهات متعددة، قد برنامج تشغيل خاص به، من الممكن إنشاء جهاز تتعرض له بعض الواجهات تتم المطالبة بها من قِبل السائق، ويظل البعض الآخر قابلاً للوصول من خلال المتصفح.
على سبيل المثال، قد توفر لوحة مفاتيح USB متطورة واجهة فئة HID من خلال النظام الفرعي لإدخالات نظام التشغيل ومصدر تظل متاحة لـ WebUSB لاستخدامها بواسطة أداة إعداد. هذا النمط على الموقع الإلكتروني للشركة المصنّعة، ما يتيح للمستخدم تغيير في سلوك الجهاز مثل مفاتيح الماكرو وتأثيرات الإضاءة بدون تثبيت أي برنامج خاص بنظام التشغيل. فإن واصف تهيئة الجهاز هذا يشبه ما يلي:
القيمة | الحقل | الوصف |
---|---|---|
واصف الإعدادات | ||
0x09 |
bLength | حجم هذا الواصف |
0x02 |
bDescriptorType | واصف الإعدادات |
0x0039 |
wTotalLength | إجمالي طول سلسلة الأوصاف هذه |
0x02 |
bNumInterfaces | عدد الواجهات |
0x01 |
bConfigurationValue | الإعداد 1 |
0x00 |
iConfiguration | اسم الإعداد (بدون) |
0b1010000 |
bmAttributes | جهاز ذاتي التشغيل مع تفعيل عن بُعد |
0x32 |
bMaxPower | يتم التعبير عن الطاقة القصوى بزيادات قدرها 2 ملّي أمبير. |
واصف الواجهة | ||
0x09 |
bLength | حجم هذا الواصف |
0x04 |
bDescriptorType | واصف الواجهة |
0x00 |
bInterfaceNumber | الواجهة 0 |
0x00 |
bAlternateSetting | الإعداد البديل 0 (تلقائي) |
0x01 |
bNumEndpoints | نقطة نهاية واحدة |
0x03 |
bInterfaceClass | فئة واجهة HID |
0x01 |
bInterfaceSubClass | الفئة الفرعية لواجهة التشغيل |
0x01 |
bInterfaceProtocol | لوحة المفاتيح |
0x00 |
iInterface | اسم الواجهة (بدون) |
واصف HID | ||
0x09 |
bLength | حجم هذا الواصف |
0x21 |
bDescriptorType | واصف HID |
0x0101 |
bcdHID | الإصدار 1.1 من HID |
0x00 |
bCountryCode | البلد المستهدف للأجهزة |
0x01 |
bNumDescriptors | عدد أدوات وصف فئة HID المطلوب اتّباعها |
0x22 |
bDescriptorType | نوع واصف التقرير |
0x003F |
wDescriptorLength | إجمالي طول واصف التقرير |
واصف نقطة النهاية | ||
0x07 |
bLength | حجم هذا الواصف |
0x05 |
bDescriptorType | واصف نقطة النهاية |
0b10000001 |
bEndpointAddress | نقطة النهاية 1 (الهند) |
0b00000011 |
bmAttributes | قاطع |
0x0008 |
wMaxPacketSize | حزم 8 بايت |
0x0A |
bInterval | فاصل 10 ملي ثانية |
واصف الواجهة | ||
0x09 |
bLength | حجم هذا الواصف |
0x04 |
bDescriptorType | واصف الواجهة |
0x01 |
bInterfaceNumber | الواجهة 1 |
0x00 |
bAlternateSetting | الإعداد البديل 0 (تلقائي) |
0x02 |
bNumEndpoints | نقطتا نهاية |
0xFF |
bInterfaceClass | فئة الواجهة الخاصة بالمورّد |
0x00 |
bInterfaceSubClass | |
0x00 |
bInterfaceProtocol | |
0x00 |
iInterface | اسم الواجهة (بدون) |
واصف نقطة النهاية | ||
0x07 |
bLength | حجم هذا الواصف |
0x05 |
bDescriptorType | واصف نقطة النهاية |
0b10000010 |
bEndpointAddress | نقطة النهاية 1 (الهند) |
0b00000010 |
bmAttributes | دفعة واحدة |
0x0040 |
wMaxPacketSize | حزم 64 بايت |
0x00 |
bInterval | لا ينطبق لنقاط النهاية المجمّعة |
واصف نقطة النهاية | ||
0x07 |
bLength | حجم هذا الواصف |
0x05 |
bDescriptorType | واصف نقطة النهاية |
0b00000011 |
bEndpointAddress | نقطة النهاية 3 (OUT) |
0b00000010 |
bmAttributes | دفعة واحدة |
0x0040 |
wMaxPacketSize | حزم 64 بايت |
0x00 |
bInterval | لا ينطبق لنقاط النهاية المجمّعة |
يتكوّن واصف الإعدادات من عدة وسائل وصف متسلسلة.
يبدأ كل منها بالحقلين bLength
وbDescriptorType
بحيث
يمكن تحديدها. الواجهة الأولى هي واجهة HID لها واجهة
واصف HID ونقطة نهاية واحدة تُستخدم لتسليم أحداث الإدخال إلى
نظام التشغيل. أما الواجهة الثانية فهي واجهة مخصصة للبائع
نقاط النهاية التي يمكن استخدامها لإرسال الأوامر إلى الجهاز وتلقي الردود
في المقابل.
أدوات وصف WebUSB
يمكن استخدام WebUSB مع العديد من الأجهزة بدون إجراء تعديلات على البرامج الثابتة، تم تفعيل وظائف إضافية من خلال وضع علامة على الجهاز باستخدام واصفات تشير إلى دعم WebUSB. على سبيل المثال، يمكنك تحديد عنوان URL للصفحة المقصودة الذي يمكن للمتصفّح أن يوجِّه المستخدم إليه عندما يكون جهازك توصيله.
![لقطة شاشة لإشعار WebUSB في Chrome](https://developer.chrome.com/static/docs/capabilities/build-for-webusb/image/screenshot-the-webusb-no-531009ef49311.png?authuser=9&hl=ar)
مخزن الكائنات الثنائية (BOS) هو مفهوم تم تقديمه في USB 3.0 ولكنه له أيضًا إلى أجهزة USB 2.0 كجزء من الإصدار 2.1. التعريف ليبدأ دعم WebUSB متضمنًا إمكانات النظام الأساسي التالية الواصف في واصف BOS:
القيمة | الحقل | الوصف |
---|---|---|
واصف Object Store لجهاز ثنائي | ||
0x05 |
bLength | حجم هذا الواصف |
0x0F |
bDescriptorType | واصف Object Store لجهاز ثنائي |
0x001D |
wTotalLength | إجمالي طول سلسلة الأوصاف هذه |
0x01 |
bNumDeviceCaps | عدد أدوات وصف إمكانات الجهاز في BOS |
واصف إمكانية النظام الأساسي WebUSB | ||
0x18 |
bLength | حجم هذا الواصف |
0x10 |
bDescriptorType | واصف إمكانات الجهاز |
0x05 |
bDevCapabilityType | واصف إمكانات النظام الأساسي |
0x00 |
bReserved | |
{0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47, 0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65} |
PlatformCapablityUUID | المعرّف الفريد العام لوصف قدرات النظام الأساسي WebUSB بتنسيق صغير |
0x0100 |
bcdVersion | الإصدار 1.0 من واصف WebUSB |
0x01 |
bVendorCode | قيمة bRequest في WebUSB |
0x01 |
iLandingPage | عنوان URL للصفحة المقصودة |
معرّف المستخدم الفريد (UUID) لإمكانات النظام الأساسي يعتبر قدرة على النظام الأساسي WebUSB
الذي يوفّر معلومات أساسية حول الجهاز. بالنسبة إلى المتصفّح
لاسترجاع مزيد من المعلومات عن الجهاز الذي يستخدم قيمة bVendorCode
وإصدار طلبات إضافية للجهاز. الطلب الوحيد المحدد حاليًا هو
GET_URL
التي تعرض واصف عنوان URL. هذه تشبه السلسلة
واصفات البيانات لكنها مصممة لترميز عناوين URL بأقل عدد من وحدات البايت. عنوان URL
واصف الدالة "https://google.com"
على النحو التالي:
القيمة | الحقل | الوصف |
---|---|---|
أداة وصف عنوان URL | ||
0x0D |
bLength | حجم هذا الواصف |
0x03 |
bDescriptorType | أداة وصف عنوان URL |
0x01 |
bScheme | https:// |
"google.com" |
عنوان URL | محتوى عنوان URL بترميز UTF-8 |
عندما يتم توصيل جهازك لأول مرة، يقرأ المتصفح واصف BOS من خلال
إصدار عملية نقل التحكم العادية في GET_DESCRIPTOR
:
bmRequestType | bRequest | wValue | wIndex | wLength | البيانات (الردّ) |
---|---|---|---|---|---|
0b10000000 |
0x06 |
0x0F00 |
0x0000 |
* | واصف BOS |
يتم عادةً تقديم هذا الطلب مرّتين، أول مرة باستخدام wLength
كبير بما يكفي
بحيث يعرف المضيف قيمة الحقل wTotalLength
بدون
الالتزام بعملية نقل كبيرة ثم مرة أخرى عندما يكون البعد الكامل للواصف
المعروفة.
إذا تم ضبط الحقل iLandingPage
في واصف إمكانية النظام الأساسي WebUSB على
قيمة غير صفرية، ثم ينفِّذ المتصفِّح طلب GET_URL
الخاص بـ WebUSB
من خلال إصدار نقل تحكّم مع ضبط bRequest
على القيمة bVendorCode
من واصف إمكانية النظام الأساسي وتم ضبط wValue
على iLandingPage
يدخل رمز الطلب الخاص بـ GET_URL
(0x02
) في wIndex
:
bmRequestType | bRequest | wValue | wIndex | wLength | البيانات (الردّ) |
---|---|---|---|---|---|
0b11000000 |
0x01 |
0x0001 |
0x0002 |
* | واصف عنوان URL |
ومرة أخرى، قد يتم إصدار هذا الطلب مرتين للتحقيق في الأمر للمرة الأولى. للواصف قيد القراءة.
الاعتبارات الخاصة بنظام التشغيل
تحاول واجهة برمجة تطبيقات WebUSB API توفير واجهة متسقة للوصول إلى. يجب أن يظل مطورو أجهزة USB على دراية بالمتطلبات المفروضة على تطبيقات مثل متطلبات متصفحات الويب للوصول إلى الأجهزة.
نظام التشغيل Mac
ما مِن إجراءات خاصة ضرورية لنظام التشغيل macOS. يمكن لموقع إلكتروني يستخدم WebUSB الاتصال بـ الجهاز والمطالبة بأي واجهات لم تتم المطالبة بها بواسطة برنامج تشغيل kernel أو لتطبيق آخر.
Linux
يشبه Linux نظام التشغيل macOS ولكن معظم التوزيعات لا تُعد إعدادًا للمستخدم بشكل تلقائي
حسابات لديها إذن بفتح أجهزة USB. برنامج خفي للنظام يسمى udev عبارة عن
المسئول عن تحديد المستخدم والمجموعة المسموح لهم بالوصول إلى الجهاز. قاعدة
على هذا النحو إلى نقل ملكية جهاز يتوافق مع المورد المعني
معرّفات المنتجات إلى مجموعة plugdev
، وهي مجموعة مشترَكة للمستخدمين الذين لديهم إذن الوصول
للأجهزة الملحقة:
SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", ATTR{idProduct}=="XXXX", GROUP="plugdev"
استبدل XXXX
بمعرِّفات المنتجات والمورّدين السداسية العشرية لجهازك.
مثلاً: سيكون ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e11"
مطابقًا لجهاز Nexus One
هاتفك. يجب كتابتها بدون استخدام "0x" المعتاد البادئة وجميع الأحرف الصغيرة
من أجل التعرف عليه بشكل صحيح. للعثور على معرفات جهازك، شغّل سطر الأوامر
الأداة lsusb
.
يجب وضع هذه القاعدة في ملف في دليل /etc/udev/rules.d
و
سيتم تفعيل هذه الميزة فور توصيل الجهاز بمصدر طاقة. لا داعي لإعادة التشغيل
udev.
Android
يعتمد نظام Android الأساسي على Linux ولكنه لا يتطلب أي تعديل
تهيئة النظام. بشكل تلقائي، أي جهاز لا يحتوي على برنامج تشغيل مدمج
إلى نظام التشغيل متاحة للمتصفح. يجب أن يكون المطورين
غير أن المستخدمين سيواجهون خطوة إضافية عند الاتصال
الجهاز. بعد أن يختار أحد المستخدمين جهازًا استجابةً لمكالمة
requestDevice()
، سيعرض Android طلبًا يسألك ما إذا كنت تريد السماح بذلك
Chrome للوصول إليها. يظهر هذا الطلب مرة أخرى أيضًا في حال عودة مستخدم إلى موقع إلكتروني.
لديه إذن للاتصال بأحد الأجهزة ويجري مكالمات موقع الويب
open()
بالإضافة إلى ذلك، سيُتاح الوصول إلى المزيد من الأجهزة على نظام التشغيل Android مقارنة بأجهزة الكمبيوتر التي تعمل بنظام Linux نظرًا لتضمين عدد أقل من برامج التشغيل بشكل افتراضي. يعد الحذف البارز، على سبيل المثال، هل فئة USB CDC-ACM التي يتم تنفيذها عادةً بواسطة محوّلات USB إلى تسلسلية؟ لا توجد واجهة برمجة تطبيقات في حزمة تطوير البرامج (SDK) لنظام التشغيل Android للاتصال بجهاز تسلسلي.
ChromeOS
يعتمد نظام التشغيل ChromeOS على نظام التشغيل Linux أيضًا ولا يتطلّب أي تعديل إلى تهيئة النظام. تتحكم خدمة إذن_بروكر في الوصول إلى جهاز USB Google وسيسمح للمتصفّح بالوصول إليها ما دام هناك واجهة واحدة لم تتم المطالبة بها.
Windows
يقدم طراز برنامج تشغيل Windows متطلبات إضافية. وعلى عكس الأنظمة الأساسية التي تفوق قدرتها على فتح جهاز USB من تطبيق مستخدم لا الافتراضي، حتى إذا لم يتم تحميل برنامج التشغيل. بدلاً من ذلك، هناك مخطط برنامج التشغيل، WinUSB، الذي يجب تحميله لتوفير الواجهة التطبيقات التي تستخدمها للوصول إلى الجهاز. يمكن القيام بذلك باستخدام إما نمط ملف معلومات برنامج التشغيل (INF) المثبّت على النظام أو عن طريق تعديل الجهاز البرامج الثابتة لتقديم أدوات وصف التوافق مع نظام التشغيل Microsoft أثناء التعداد.
ملف معلومات برنامج التشغيل (INF)
ملف معلومات برنامج التشغيل يخبر نظام Windows بما يجب فعله عند مواجهة جهاز
لأول مرة. نظرًا لأن نظام المستخدم يتضمن برنامج تشغيل WinUSB بالفعل
كل ما يلزم هو أن يربط ملف INF بمعرِّف المنتج
باستخدام قاعدة التثبيت الجديدة هذه. الملف أدناه هو مثال أساسي. حفظه في
بالامتداد .inf
، غيِّر الأقسام التي تم وضع علامة "X" عليها، ثم على اليسار
وانقر عليه واختر "تثبيت" من قائمة السياقات.
[Version]
Signature = "$Windows NT$"
Class = USBDevice
ClassGUID = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer = 09/04/2012,13.54.20.543
; ========== Manufacturer/Models sections ===========
[Manufacturer]
%ManufacturerName% = Standard,NTx86,NTia64,NTamd64
[Standard.NTx86]
%USB\MyCustomDevice.DeviceDesc% = USB_Install,USB\VID_XXXX&PID_XXXX
[Standard.NTia64]
%USB\MyCustomDevice.DeviceDesc% = USB_Install,USB\VID_XXXX&PID_XXXX
[Standard.NTamd64]
%USB\MyCustomDevice.DeviceDesc% = USB_Install,USB\VID_XXXX&PID_XXXX
; ========== Class definition ===========
[ClassInstall32]
AddReg = ClassInstall_AddReg
[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2
; =================== Installation ===================
[USB_Install]
Include = winusb.inf
Needs = WINUSB.NT
[USB_Install.Services]
Include = winusb.inf
Needs = WINUSB.NT.Services
[USB_Install.HW]
AddReg = Dev_AddReg
[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
; =================== Strings ===================
[Strings]
ManufacturerName = "Your Company Name Here"
ClassName = "Your Company Devices"
USB\MyCustomDevice.DeviceDesc = "Your Device Name Here"
يضبط القسم [Dev_AddReg]
مجموعة DeviceInterfaceGUIDs
الخاص بك. يجب أن تتضمن كل واجهة جهاز معرف GUID حتى يمكن للتطبيق
العثور عليها والاتصال بها من خلال واجهة برمجة تطبيقات Windows. استخدام New-Guid
PowerShell
cmdlet أو أداة على الإنترنت لإنشاء معرّف فريد عالمي (GUID) عشوائي.
لأغراض التطوير، توفر أداة Zadig واجهة سهلة استبدال برنامج التشغيل المحمّل لواجهة USB ببرنامج تشغيل WinUSB.
أدوات وصف التوافق مع نظام التشغيل Microsoft
إن أسلوب ملف INF المذكور أعلاه مرهق لأنه يتطلب تهيئة كل جهاز المستخدم مسبقًا. يقدم Windows 8.1 والإصدارات الأحدث بديلاً من خلال استخدام أدوات وصف USB مخصصة. توفّر أدوات الوصف هذه معلومات بنظام التشغيل Windows عند توصيل الجهاز لأول مرة، وهذا من شأنه أن عادةً ما يتم تضمينها في ملف INF.
بعد إعداد أدوات وصف WebUSB، يمكنك بسهولة إضافة نظام تشغيل Microsoft
واصفات التوافق أيضًا. عليك أولاً توسيع واصف BOS باستخدام هذا
واصف إمكانية النظام الأساسي الإضافي. يجب تحديث "wTotalLength
"
وbNumDeviceCaps
لحساب ذلك.
القيمة | الحقل | الوصف |
---|---|---|
واصف إمكانات النظام الأساسي Microsoft OS 2.0 | ||
0x1C |
bLength | حجم هذا الواصف |
0x10 |
bDescriptorType | واصف إمكانات الجهاز |
0x05 |
bDevCapabilityType | واصف إمكانات النظام الأساسي |
0x00 |
bReserved | |
{0xDF, 0x60, 0xDD, 0xD8, 0x89, 0x45, 0xC7, 0x4C, 0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F} |
PlatformCapablityUUID | واصف التوافق مع النظام الأساسي Microsoft OS 2.0 المعرّف الفريد العام بتنسيق محدود |
0x06030000 |
dwWindowsVersion | الحد الأدنى لإصدار نظام التشغيل Windows المتوافق (Windows 8.1) |
0x00B2 |
wMSOSDescriptorSetTotalLength | إجمالي طول مجموعة الواصف |
0x02 |
bMS_VendorCode | قيمة bRequest لاسترداد المزيد من واصفات Microsoft |
0x00 |
bAltEnumCode | الجهاز غير متوافق مع التعداد البديل |
وكما هي الحال مع أدوات وصف WebUSB، عليك اختيار قيمة bRequest
لتستخدمها.
التحكم في عمليات النقل المتعلقة بهذه الأوصاف. في هذا المثال، اخترت
0x02
0x07
، الذي تم وضعه في wIndex
، هو الأمر لاسترداد نظام التشغيل Microsoft
2.0 الواصف تم ضبطه من الجهاز.
bmRequestType | bRequest | wValue | wIndex | wLength | البيانات (الردّ) |
---|---|---|---|---|---|
0b11000000 |
0x02 |
0x0000 |
0x0007 |
* | مجموعة واصف نظام التشغيل MS OS 2.0 |
يمكن أن يكون لجهاز USB عدة وظائف، وبالتالي فإن الجزء الأول من الواصف
مجموعة تصف الوظيفة المرتبطة بالخصائص التالية. تشير رسالة الأشكال البيانية
في المثال أدناه تهيئ الواجهة 1 للجهاز المركب. يعطي الواصف
نظام التشغيل اثنين من المعلومات المهمة حول هذه الواجهة. النموذج المتوافق
يخبر واصف المعرّف نظام التشغيل Windows بأنّ هذا الجهاز متوافق مع WinUSB
السائق. يعمل واصف ملكية السجل بشكل مشابه
القسم [Dev_AddReg]
من مثال INF أعلاه، ضبط موقع إلكتروني في قاعدة بيانات المسجّلين على
عيِّن لهذه الدالة معرف GUID لواجهة الجهاز.
القيمة | الحقل | الوصف |
---|---|---|
عنوان ضبط واصف نظام التشغيل Microsoft OS 2.0 | ||
0x000A |
wLength | حجم هذا الواصف |
0x0000 |
wDescriptorType | واصف العنوان في مجموعة الواصف |
0x06030000 |
dwWindowsVersion | الحد الأدنى لإصدار نظام التشغيل Windows المتوافق (Windows 8.1) |
0x00B2 |
wTotalLength | إجمالي طول مجموعة الواصف |
عنوان المجموعة الفرعية لإعداد Microsoft OS 2.0 | ||
0x0008 |
wLength | حجم هذا الواصف |
0x0001 |
wDescriptorType | وصف عنوان المجموعة الفرعية للإعدادات |
0x00 |
bConfigurationValue | ينطبق على الإعداد 1 (تمت الفهرسة من 0 على الرغم من الإعدادات). مفهرسة عادةً من 1) |
0x00 |
bReserved | يجب الضبط على 0 |
0x00A8 |
wTotalLength | إجمالي طول المجموعة الفرعية بما في ذلك هذا العنوان |
عنوان مجموعة فرعية للدالة في Microsoft OS 2.0 | ||
0x0008 |
wLength | حجم هذا الواصف |
0x0002 |
wDescriptorType | واصف عنوان المجموعة الفرعية للدالة |
0x01 |
bFirstInterface | الواجهة الأولى للدالة |
0x00 |
bReserved | يجب الضبط على 0 |
0x00A0 |
wSubsetLength | إجمالي طول المجموعة الفرعية بما في ذلك هذا العنوان |
واصف المعرّف المتوافق مع نظام التشغيل Microsoft OS 2.0 | ||
0x0014 |
wLength | حجم هذا الواصف |
0x0003 |
wDescriptorType | أداة وصف رقم التعريف المتوافق |
"WINUSB\0\0" |
CompatibileID | تخصيص سلسلة ASCII بحجم 8 بايت |
"\0\0\0\0\0\0\0\0" |
SubCompatibleID | تخصيص سلسلة ASCII بحجم 8 بايت |
واصف موقع تسجيل Microsoft OS 2.0 | ||
0x0084 |
wLength | حجم هذا الواصف |
0x0004 |
wDescriptorType | واصف الموقع في قاعدة بيانات المسجّلين |
0x0007 |
wPropertyDataType | REG_MULTI_SZ |
0x002A |
wPropertyNameLength | طول اسم الفندق |
"DeviceInterfaceGUIDs\0" |
PropertyName | اسم الموقع مع حرف ختامي فارغ بترميز UTF-16LE |
0x0050 |
wPropertyDataLength | طول قيمة السمة |
"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\0\0" |
PropertyData | معرّف فريد عالمي (GUID) بالإضافة إلى عبارتَي انتهاء فارغتين تم ترميزهما بترميز UTF-16LE |
سيبحث نظام التشغيل Windows عن هذه المعلومات في الجهاز مرة واحدة فقط. إذا كان الجهاز يعمل عدم الرد باستخدام كلمات وصفية صالحة، فلن يتم السؤال مرة أخرى في المرة القادمة جهازك متصل. قدمت Microsoft قائمة بسجلّ أجهزة USB الإدخالات التي تصف إدخالات قاعدة بيانات المسجّلين التي تم إنشاؤها عند تعداد جهاز. فعندما اختبار حذف الإدخالات التي تم إنشاؤها لجهاز لإجبار Windows على محاولة قراءتها الأوصاف مرة أخرى.
للحصول على مزيد من المعلومات، يمكنك الاطّلاع على مشاركة مدونة Microsoft حول كيفية استخدام هذه واصفات البيانات.
أمثلة
مثال على رمز برمجي ينفِّذ أجهزة متوافقة مع WebUSB والتي تتضمّن كلاً من WebUSB يمكن العثور على واصفات البيانات واصفات Microsoft OS في المشاريع التالية: