Signatur
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
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);
}
});
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();
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');
}
// 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äten0. Nutzen Sie sie nicht allein zur Unterscheidung von Geräten, sondern immer zusammen mit Major und Minor. - Nicht mit der Geräteversion verwechseln:
usbVersionSubminorbetrifft die USB-Spezifikation (bcdUSB). Die Firmware- oder Hardware-Version des Geräts selbst steht indeviceVersionSubminor(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.