Signatur
Beschreibung
Die Eigenschaft deviceVersionSubminor eines USBDevice-Objekts gibt den dritten Teil der vom Hersteller festgelegten Geräteversion zurück, also die Patch- bzw. Subminor-Nummer. Zusammen mit deviceVersionMajor und deviceVersionMinor ergibt sich eine Versionsangabe in der Form Major.Minor.Subminor, z. B. 2.1.3.
Der Wert kommt aus dem 16-Bit-Feld bcdDevice des USB-Gerätedeskriptors. Dieses Feld ist BCD-codiert (0xJJMN): Das obere Byte ist die Hauptversion, das nächste Halbbyte die Nebenversion und das unterste Halbbyte die Subminor-Version. Deshalb liegt deviceVersionSubminor immer im Bereich 0 bis 15.
Brauchbar ist die Eigenschaft vor allem, um den Firmware-Stand eines angeschlossenen Geräts zu prüfen, z. B. um vor einem Update Kompatibilitätsprüfungen zu machen, bekannte Fehler bestimmter Firmware-Versionen zu umgehen oder die Version in einer Diagnoseoberfläche anzuzeigen. Die Eigenschaft lässt sich lesen, ohne das Gerät vorher mit open() zu öffnen.
Rückgabewert
0 bis 15: das unterste Halbbyte von bcdDevice, also die Patch-Version des Geräts.Beispiele
Vollständige Geräteversion nach Nutzeraktion anzeigen
const button = document.querySelector('#connect');
button.addEventListener('click', async () => {
try {
// requestDevice braucht eine Nutzeraktion (Klick)
const device = await navigator.usb.requestDevice({ filters: [] });
const version = `${device.deviceVersionMajor}.${device.deviceVersionMinor}.${device.deviceVersionSubminor}`;
console.log(`${device.productName}: Firmware ${version}`);
} catch (err) {
console.warn('Kein Gerät ausgewählt:', err.message);
}
});
Bereits freigegebene Geräte auflisten
const devices = await navigator.usb.getDevices();
for (const d of devices) {
console.log(
d.vendorId.toString(16).padStart(4, '0'),
d.productId.toString(16).padStart(4, '0'),
`v${d.deviceVersionMajor}.${d.deviceVersionMinor}.${d.deviceVersionSubminor}`
);
}
Mindest-Firmware prüfen
const toTuple = (d) => [d.deviceVersionMajor, d.deviceVersionMinor, d.deviceVersionSubminor];
const isAtLeast = (device, [maj, min, sub]) => {
const [a, b, c] = toTuple(device);
if (a !== maj) return a > maj;
if (b !== min) return b > min;
return c >= sub;
};
const [device] = await navigator.usb.getDevices();
if (device && !isAtLeast(device, [1, 4, 2])) {
console.log('Bitte Firmware auf mindestens 1.4.2 aktualisieren.');
}
// Wichtig · Fallstricke
- Browser-Kompatibilität: WebUSB gibt es nur in Chromium-Browsern (Chrome, Edge, Opera). Firefox und Safari unterstützen die API nicht. Prüfe das vorher mit
'usb' in navigator. - Die API ist nur in einem sicheren Kontext (HTTPS oder
localhost) verfügbar und lässt sich per Permissions-Policy (usb) sperren, z. B. in iframes. - Wegen der BCD-Codierung ist der Wert höchstens
15. Versionen wie „1.0.23“ lassen sich überbcdDevicenicht darstellen. - Die Bedeutung der Versionsnummer legt allein der Hersteller fest. Viele Geräte setzen
bcdDevicenicht sinnvoll (oft einfach0x0100), deshalb liefert die Eigenschaft häufig0. - Die Eigenschaft ist schreibgeschützt. Zuweisungen werden stillschweigend ignoriert (im Strict Mode gibt es einen
TypeError).