إنشاء جهاز لـ WebUSB

يمكنك تصميم جهاز لتحقيق الاستفادة الكاملة من 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
إشعار WebUSB.

مخزن الكائنات الثنائية (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 في المشاريع التالية: