Start · Sprachen · JavaScript · Referenz · USBDevice.usbVersionSubminor

USBDevice.usbVersionSubminor

Eigenschaft

Schreibgeschützte Zahl mit der Subminor-Stelle der USB-Protokollversion, die das Gerät unterstützt (z. B. <code>0</code> bei USB 2.1.0).

seit JavaScript Chrome/Edge 61+, Opera 48+ (nicht in Firefox und S Kategorie: webapi

Signatur

USBDevice.usbVersionSubminor

Beschreibung

Die Eigenschaft usbVersionSubminor gehört zur WebUSB-API und liefert die dritte Stelle der USB-Spezifikationsversion, die das Gerät in seinem Geräte-Deskriptor angibt. Zusammen mit usbVersionMajor und usbVersionMinor ergibt sie die vollständige Version, etwa 2.1.0 oder 3.2.0.

Technisch stammt der Wert aus dem Feld bcdUSB des Geräte-Deskriptors. Das Feld ist BCD-kodiert im Format 0xJJMN: JJ ist die Hauptversion, M die Nebenversion und N die Subminor-Stelle. Aus bcdUSB = 0x0210 wird so usbVersionMajor = 2, usbVersionMinor = 1 und usbVersionSubminor = 0.

In der Praxis ist die Subminor-Stelle fast immer 0. Nützlich ist sie vor allem für Diagnose- und Inventarwerkzeuge, die Gerätedaten vollständig anzeigen oder protokollieren sollen, und für exakte Versionsvergleiche. Die Eigenschaft lässt sich lesen, ohne das Gerät zu öffnen (open() ist nicht nötig). Das Gerät muss aber vorher über navigator.usb.requestDevice() freigegeben worden sein.

Rückgabewert

Typ
number
Beschreibung
Eine ganze Zahl von 0 bis 15 (eine BCD-Stelle): die Subminor-Stelle der unterstützten USB-Protokollversion. Der Wert ist schreibgeschützt.

Beispiele

Vollständige USB-Version eines ausgewählten Geräts anzeigen

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

button.addEventListener('click', async () => {
  try {
    // Muss durch eine Nutzeraktion ausgelöst werden
    const device = await navigator.usb.requestDevice({ filters: [] });
    const version = `${device.usbVersionMajor}.${device.usbVersionMinor}.${device.usbVersionSubminor}`;
    console.log(`${device.productName ?? 'Unbekanntes Gerät'}: USB ${version}`);
  } catch (err) {
    console.warn('Kein Gerät ausgewählt:', err.message);
  }
});
Arduino Leonardo: USB 2.1.0

Alle freigegebenen Geräte samt bcdUSB-Wert protokollieren

const toBcdUSB = (d) =>
  (d.usbVersionMajor << 8) | (d.usbVersionMinor << 4) | d.usbVersionSubminor;

const listDevices = async () => {
  const devices = await navigator.usb.getDevices();
  const rows = devices.map((d) => ({
    name: d.productName,
    version: `${d.usbVersionMajor}.${d.usbVersionMinor}.${d.usbVersionSubminor}`,
    bcdUSB: '0x' + toBcdUSB(d).toString(16).padStart(4, '0')
  }));
  console.table(rows);
};

listDevices();
┌─────────┬──────────────┬─────────┬──────────┐ │ (index) │ name │ version │ bcdUSB │ ├─────────┼──────────────┼─────────┼──────────┤ │ 0 │ 'Mein Gerät' │ '2.1.0' │ '0x0210' │ └─────────┴──────────────┴─────────┴──────────┘

Mindestversion prüfen (z. B. USB 2.1 für BOS-Deskriptoren)

// Vergleicht die Geräteversion mit einer Mindestversion [Major, Minor, Subminor]
const supportsAtLeast = (device, [maj, min, sub]) => {
  const dev = [device.usbVersionMajor, device.usbVersionMinor, device.usbVersionSubminor];
  const req = [maj, min, sub];
  for (let i = 0; i < 3; i++) {
    if (dev[i] !== req[i]) return dev[i] > req[i];
  }
  return true; // exakt gleich
};

const [device] = await navigator.usb.getDevices();
if (device) {
  console.log(supportsAtLeast(device, [2, 1, 0])
    ? 'BOS-Deskriptoren (z. B. WebUSB-Landing-Page) möglich'
    : 'Gerät meldet eine USB-Version unter 2.1');
}
BOS-Deskriptoren (z. B. WebUSB-Landing-Page) möglich

// Wichtig · Fallstricke

  • Browser-Unterstützung: WebUSB gibt es nur in Chromium-basierten Browsern (Chrome, Edge, Opera), und nur im sicheren Kontext (HTTPS oder localhost). Firefox und Safari unterstützen die API nicht. Vorher prüfen mit 'usb' in navigator.
  • Selbst gemeldeter Wert: Die Zahl kommt direkt aus dem Geräte-Deskriptor. Sie sagt nichts über die tatsächliche Verbindungsgeschwindigkeit. Ein Gerät, das „USB 3.2“ meldet, kann an einem USB-2.0-Anschluss hängen. Manche Firmware trägt auch falsche Werte ein.
  • Meist 0: Die Subminor-Stelle ist bei nahezu allen Geräten 0. Nutzen Sie sie nicht allein zur Unterscheidung von Geräten, sondern immer zusammen mit Major und Minor.
  • Nicht mit der Geräteversion verwechseln: usbVersionSubminor betrifft die USB-Spezifikation (bcdUSB). Die Firmware- oder Hardware-Version des Geräts selbst steht in deviceVersionSubminor (bcdDevice).
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird im nicht-strikten Modus stillschweigend ignoriert. Eine Berechtigung ist trotzdem nötig: Nur Geräte, die über requestDevice() freigegeben wurden, sind überhaupt zugänglich.