Start · Sprachen · JavaScript · Referenz · USBDevice.deviceClass

USBDevice.deviceClass

Eigenschaft

Liefert den USB-Geräteklassen-Code (bDeviceClass) eines verbundenen Geräts als Zahl von 0 bis 255 und ist nur lesbar.

seit JavaScript WebUSB: Chrome/Edge 61+, Opera 48+ (nicht in Firef Kategorie: webapi

Signatur

USBDevice.deviceClass

Beschreibung

Die schreibgeschützte Eigenschaft deviceClass des Interfaces USBDevice gibt den Klassen-Code des Geräts zurück, wie er im USB-Gerätedeskriptor im Feld bDeviceClass steht. Zusammen mit deviceSubclass und deviceProtocol beschreibt sie, zu welcher Geräteart ein Gerät gehört. Das Betriebssystem nutzt diese drei Werte, um einen passenden Treiber zu laden.

Die Klassen-Codes vergibt das USB Implementers Forum (USB-IF). Häufige Werte sind:

  • 0x00: Die Klasse ist pro Interface festgelegt (siehe USBInterface.alternate.interfaceClass).
  • 0x02: Kommunikation (CDC), 0x09: Hub, 0x0E: Video
  • 0xEF: Verschiedenes (Miscellaneous), oft bei Geräten mit mehreren Funktionen (Interface Association Descriptor)
  • 0xFF: herstellerspezifisch (Vendor Specific). Solche Geräte sind die typischen Ziele von WebUSB.

In der Praxis brauchen Sie deviceClass vor allem, um Geräte zu filtern, zu erkennen oder ihre Diagnosedaten anzuzeigen. Der Wert steht direkt nach navigator.usb.requestDevice() oder navigator.usb.getDevices() bereit. Sie müssen das Gerät dafür nicht öffnen (open()).

Rückgabewert

Typ
number
Beschreibung
Eine ganze Zahl von 0 bis 255 (Oktett): der Klassen-Code aus dem Gerätedeskriptor (bDeviceClass).

Beispiele

Geräteklasse nach Benutzerauswahl anzeigen

const button = document.querySelector('#connect');

button.addEventListener('click', async () => {
  try {
    // requestDevice muss durch eine Benutzeraktion ausgelöst werden
    const device = await navigator.usb.requestDevice({ filters: [] });
    const hex = device.deviceClass.toString(16).padStart(2, '0').toUpperCase();
    console.log(`${device.productName}: Klasse 0x${hex}`);
  } catch (err) {
    console.warn('Keine Auswahl getroffen:', err.message);
  }
});
Arduino Leonardo: Klasse 0xEF

Klassen-Code in lesbaren Namen übersetzen

const USB_CLASSES = {
  0x00: 'Pro Interface definiert',
  0x02: 'Kommunikation (CDC)',
  0x09: 'Hub',
  0x0E: 'Video',
  0xDC: 'Diagnosegerät',
  0xE0: 'Drahtlos-Controller',
  0xEF: 'Verschiedenes',
  0xFF: 'Herstellerspezifisch'
};

const describeClass = (device) =>
  USB_CLASSES[device.deviceClass] ?? `Unbekannt (${device.deviceClass})`;

const devices = await navigator.usb.getDevices();
for (const d of devices) {
  console.log(`${d.productName ?? 'Unbenannt'} → ${describeClass(d)}`);
}
Mein Messgerät → Herstellerspezifisch Arduino Leonardo → Verschiedenes

Nur herstellerspezifische Geräte zur Auswahl anbieten und die Interface-Klasse prüfen

const device = await navigator.usb.requestDevice({
  filters: [{ classCode: 0xFF }] // filtert auf Geräte- oder Interface-Klasse
});

if (device.deviceClass === 0x00) {
  // Klasse steht erst in den Interfaces
  const classes = device.configuration?.interfaces.map(
    (i) => i.alternate.interfaceClass
  ) ?? [];
  console.log('Interface-Klassen:', classes);
} else {
  console.log('Geräteklasse:', device.deviceClass);
}
Interface-Klassen: [255]

// Wichtig · Fallstricke

Wert 0 heißt nicht „unbekannt“: Viele Geräte setzen deviceClass auf 0x00 und legen die Klasse pro Interface fest. Werten Sie in diesem Fall device.configuration.interfaces[n].alternate.interfaceClass aus.

Geschützte Klassen: Chrome blockiert den Zugriff auf Interfaces bestimmter Klassen, etwa HID (0x03), Massenspeicher (0x08), Audio, Video und Smartcard. Dafür gibt es eigene APIs wie WebHID. Solche Geräte tauchen zwar mit ihrer deviceClass auf, lassen sich aber per claimInterface() nicht übernehmen.

Kompatibilität und Sicherheit: WebUSB gibt es nur in Chromium-basierten Browsern, dort nur in einem sicheren Kontext (HTTPS) und zusätzlich in Dedicated Workers. Firefox und Safari unterstützen WebUSB nicht. Prüfen Sie die Unterstützung vorher mit 'usb' in navigator. Per Permissions-Policy (usb) lässt sich die API in iframes sperren.

Den Wert können Sie nicht ändern: Ein Schreibzugriff wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus einen TypeError aus.