Išsamus vadovas, kaip atrasti ir sąveikauti su žmogaus sąsajos įrenginiais (HID) naudojant WebHID API JavaScript kalboje. Sužinokite apie įrenginių išvardijimą ir filtravimą.
Frontend WebHID įrenginių išvardijimas: Prijungtų įrenginių aptikimas naudojant JavaScript
WebHID API atveria galimybes žiniatinklio programoms tiesiogiai bendrauti su įvairiais žmogaus sąsajos įrenginiais (HID), kurie paprastai pasiekiami tik vietinėms programoms. Tai atveria jaudinančias galimybes kurti novatoriškas žiniatinklio patirtis, kurios sąveikauja su specializuota aparatine įranga, pavyzdžiui, žaidimų valdikliais, nestandartiniais įvesties įrenginiais, moksliniais prietaisais ir dar daugiau. Šis išsamus vadovas gilinasi į pagrindinę įrenginių išvardijimo koncepciją, kuri yra lemiamas pirmas žingsnis užmezgant ryšį su norimu HID įrenginiu.
Kas yra WebHID API?
WebHID API leidžia žiniatinklio programoms pasiekti žmogaus sąsajos įrenginius. Šie įrenginiai apima plačią kategoriją, įskaitant:
- Žaidimų valdikliai: Vairasvirtės, žaidimų pultai, lenktynių vairai
- Įvesties įrenginiai: Klaviatūros, pelės, manipuliatoriai
- Pramoniniai valdikliai: Specializuoti valdymo pultai, jutiklių sąsajos
- Moksliniai prietaisai: Duomenų rinkimo įrenginiai, matavimo įrankiai
- Nestandartinė aparatinė įranga: Specialiems tikslams sukurti individualūs įvesties įrenginiai
Skirtingai nuo senesnių naršyklės API, kurios siūlė ribotą HID palaikymą, WebHID API suteikia tiesioginę prieigą prie HID įrenginių, leisdama kūrėjams kurti turtingesnes ir interaktyvesnes žiniatinklio programas. Įsivaizduokite, kaip valdote roboto ranką nuotolinėje laboratorijoje, manipuliuojate 3D modeliu su nestandartiniu įvesties įrenginiu arba gaunate jutiklių duomenis tiesiai į žiniatinklio informacinį skydelį – visa tai naršyklėje.
HID įrenginių išvardijimo supratimas
Prieš pradedant sąveikauti su HID įrenginiu, jūsų žiniatinklio programa turi atrasti, kurie įrenginiai yra prijungti prie vartotojo sistemos. Šis procesas vadinamas įrenginių išvardijimu. WebHID API suteikia mechanizmą, leidžiantį prašyti prieigos prie konkrečių HID įrenginių pagal tiekėjo ID (VID) ir produkto ID (PID) arba naudojant platesnį filtrą.
Šis procesas paprastai apima šiuos veiksmus:
- Prieigos prie įrenginio prašymas: Žiniatinklio programa paragins vartotoją pasirinkti HID įrenginį naudojant
navigator.hid.requestDevice(). - Įrenginių filtravimas: Galite nurodyti filtrus, kad susiaurintumėte vartotojui pateikiamų įrenginių sąrašą. Šie filtrai pagrįsti įrenginio VID ir PID.
- Įrenginio pasirinkimo tvarkymas: Vartotojas pasirenka įrenginį iš sąrašo.
- Įrenginio atidarymas: Programa atidaro ryšį su pasirinktu įrenginiu.
- Duomenų perdavimas: Užmezgus ryšį, programa gali siųsti ir gauti duomenis iš įrenginio.
Žingsnis po žingsnio vadovas įrenginių išvardijimui
1. Prieigos prie įrenginio prašymas su filtrais
Metodas navigator.hid.requestDevice() yra pradinis taškas norint prašyti prieigos prie HID įrenginių. Jis priima pasirenkamą `filters` argumentą, kuris yra objektų masyvas, nurodantis įrenginių, kuriuos norite rasti, VID ir PID.
Štai pavyzdys, kaip prašyti prieigos prie įrenginio su konkrečiu VID ir PID:
async function requestHIDDevice() {
try {
const devices = await navigator.hid.requestDevice({
filters: [
{
vendorId: 0x1234, // Pakeiskite savo įrenginio tiekėjo ID
productId: 0x5678 // Pakeiskite savo įrenginio produkto ID
},
// Jei reikia, pridėkite daugiau filtrų kitiems įrenginiams
]
});
if (devices.length > 0) {
const device = devices[0]; // Naudoti pirmąjį pasirinktą įrenginį
console.log("HID Device Found:", device);
// Atidaryti įrenginį ir pradėti komunikaciją
await openHIDDevice(device);
} else {
console.log("No HID device selected.");
}
} catch (error) {
console.error("Error requesting HID device:", error);
}
}
// Naudojimo pavyzdys (pvz., suaktyvinamas mygtuko paspaudimu):
document.getElementById('requestButton').addEventListener('click', requestHIDDevice);
Svarbūs aspektai:
- Tiekėjo ID (VID) ir Produkto ID (PID): Tai unikalūs identifikatoriai, priskirti USB ir Bluetooth įrenginiams. Jums reikės gauti tikslinio įrenginio VID ir PID iš gamintojo dokumentacijos arba naudojant sistemos įrankius (pvz., „Device Manager“ sistemoje „Windows“, „System Information“ sistemoje „macOS“ arba `lsusb` sistemoje „Linux“).
- Vartotojo sutikimas: Metodas
requestDevice()parodo naršyklės valdomą leidimo užklausą vartotojui, leidžiančią jam pasirinkti, kuriems HID įrenginiams suteikti prieigą. Tai yra esminė saugumo priemonė, siekiant išvengti, kad kenkėjiškos svetainės galėtų pasiekti jautrią aparatinę įrangą be vartotojo sutikimo. - Keli filtrai: Į `filters` masyvą galite įtraukti kelis filtrus, kad prašytumėte prieigos prie įrenginių su skirtingais VID ir PID. Tai naudinga, jei jūsų programa palaiko kelias aparatinės įrangos konfigūracijas.
2. Įrenginio informacijos gavimas
Kai vartotojas pasirenka įrenginį, metodas requestDevice() grąžina HIDDevice objektų masyvą. Kiekvienas HIDDevice objektas turi informacijos apie įrenginį, pvz., jo VID, PID, usagePage, usage ir collections. Galite naudoti šią informaciją tolesniam įrenginio identifikavimui ir konfigūravimui.
async function openHIDDevice(device) {
try {
await device.open();
console.log("HID Device Opened:", device.productName);
// Klausytis įvesties ataskaitų
device.addEventListener("inputreport", event => {
const { data, reportId } = event;
const uint8Array = new Uint8Array(data.buffer);
console.log(`Received input report ${reportId}:`, uint8Array);
// Apdoroti įvesties ataskaitos duomenis
});
device.addEventListener("disconnect", event => {
console.log("HID Device Disconnected:", device.productName);
// Tvarkyti įrenginio atjungimą
});
} catch (error) {
console.error("Error opening HID device:", error);
}
}
Įrenginio savybės:
vendorId: Įrenginio tiekėjo ID.productId: Įrenginio produkto ID.productName: Žmogui suprantamas produkto pavadinimas.collections:HIDCollectionInfoobjektų masyvas, aprašantis įrenginio HID rinkinius (ataskaitas, funkcijas ir kt.). Tai gali būti labai sudėtinga ir reikalinga tik sudėtingiems įrenginiams.
3. Įrenginio prijungimo ir atjungimo tvarkymas
WebHID API suteikia įvykius, kurie praneša jūsų programai, kai įrenginys yra prijungiamas ar atjungiamas. Galite klausytis connect ir disconnect įvykių navigator.hid objekte.
navigator.hid.addEventListener("connect", event => {
const device = event.device;
console.log("HID Device Connected:", device);
// Tvarkyti įrenginio prijungimą (pvz., iš naujo atidaryti įrenginį)
});
navigator.hid.addEventListener("disconnect", event => {
const device = event.device;
console.log("HID Device Disconnected:", device);
// Tvarkyti įrenginio atjungimą (pvz., išvalyti išteklius)
});
Geriausios prisijungimo valdymo praktikos:
- Pakartotinis išvardijimas prijungus: Kai įrenginys prijungiamas, dažnai yra gera praktika iš naujo išvardyti įrenginius, kad užtikrintumėte, jog jūsų programa turi naujausią sąrašą.
- Išteklių išvalymas atjungus: Kai įrenginys atjungiamas, atlaisvinkite visus su juo susijusius išteklius (pvz., uždarykite įrenginio ryšį, pašalinkite įvykių klausytojus).
- Klaidų tvarkymas: Įdiekite patikimą klaidų tvarkymą, kad sklandžiai valdytumėte situacijas, kai įrenginys nepavyksta prisijungti arba netikėtai atsijungia.
Pažangios įrenginių filtravimo technikos
Be pagrindinio VID ir PID filtravimo, WebHID API siūlo pažangesnes technikas, skirtas konkretiems įrenginiams. Tai ypač naudinga dirbant su įrenginiais, turinčiais kelias sąsajas ar funkcionalumus.
1. Filtravimas pagal naudojimo puslapį (Usage Page) ir naudojimą (Usage)
HID įrenginiai yra suskirstyti į *naudojimo puslapius* (usage pages) ir *naudojimus* (usages), kurie apibrėžia įrenginio teikiamą funkcionalumo tipą. Pavyzdžiui, klaviatūra priklauso „Generic Desktop“ naudojimo puslapiui ir turi „Keyboard“ naudojimą. Galite filtruoti įrenginius pagal jų naudojimo puslapį ir naudojimą, kad pasirinktumėte konkrečių tipų įrenginius.
async function requestSpecificKeyboard() {
try {
const devices = await navigator.hid.requestDevice({
filters: [
{
usagePage: 0x01, // Bendrasis darbalaukio puslapis
usage: 0x06 // Klaviatūros naudojimas
}
]
});
// ... (likusi kodo dalis įrenginiui tvarkyti)
} catch (error) {
console.error("Error requesting HID device:", error);
}
}
Naudojimo puslapio ir naudojimo verčių radimas:
- HID naudojimo lentelės: Oficialios HID naudojimo lentelės (paskelbtos USB Implementers Forum) apibrėžia standartizuotus naudojimo puslapius ir naudojimus įvairiems įrenginių tipams.
- Įrenginio dokumentacija: Įrenginio gamintojo dokumentacijoje gali būti nurodytos jų įrenginio naudojimo puslapio ir naudojimo vertės.
- HID ataskaitų aprašai: Sudėtingesniais atvejais galite analizuoti įrenginio HID ataskaitos aprašą, kad nustatytumėte jo palaikomus naudojimo puslapius ir naudojimus.
2. Kelių sąsajų tvarkymas
Kai kurie HID įrenginiai atveria kelias sąsajas, kurių kiekviena turi savo funkcionalumų rinkinį. WebHID API kiekvieną sąsają traktuoja kaip atskirą HID įrenginį. Norėdami pasiekti konkrečią sąsają, gali tekti derinti VID/PID filtravimą su naudojimo puslapio/naudojimo filtravimu, kad pasiektumėte norimą sąsają.
Praktiniai pavyzdžiai ir naudojimo atvejai
1. Individualios žaidimų valdiklio sąsajos kūrimas
Įsivaizduokite, kad kuriate žiniatinklio žaidimą ir norite palaikyti individualų žaidimų valdiklį. Galite naudoti WebHID API tiesiogiai nuskaityti įvestį iš valdiklio mygtukų, vairasvirtių ir kitų valdiklių. Tai leidžia jums sukurti labai reaguojančią ir įtraukiančią žaidimo patirtį.
2. Žiniatinklio MIDI valdiklio kūrimas
Muzikantai ir garso inžinieriai gali pasinaudoti žiniatinklio MIDI valdikliais, kurie sąveikauja su skaitmeninėmis garso darbo stotimis (DAW) ar sintezatoriais. WebHID API leidžia kurti individualius MIDI valdiklius, kurie siunčia ir gauna MIDI pranešimus tiesiogiai naršyklėje.
3. Sąveika su moksliniais prietaisais
Mokslininkai gali naudoti WebHID API sąveikai su moksliniais prietaisais, tokiais kaip duomenų rinkimo įrenginiai, jutikliai ir matavimo įrankiai. Tai leidžia jiems rinkti ir analizuoti duomenis tiesiogiai žiniatinklio informaciniame skydelyje ar analizės įrankyje.
4. Pritaikomumo programos
WebHID suteikia galimybių kurti pagalbines technologijas. Pavyzdžiui, specializuoti įvesties įrenginiai vartotojams su motorikos sutrikimais gali būti tiesiogiai integruoti į žiniatinklio programas, suteikiant labiau pritaikytas ir prieinamas patirtis. Pasauliniai pavyzdžiai galėtų apimti specializuotų akių sekimo įrenginių integravimą navigacijai be rankų arba pritaikomų mygtukų masyvų vieno jungiklio prieigai skirtingomis kalbomis ir įvesties metodais.
Tarpnaršyklinis suderinamumas ir saugumo aspektai
1. Naršyklių palaikymas
WebHID API šiuo metu palaikoma Chromium pagrindu veikiančiose naršyklėse („Chrome“, „Edge“, „Opera“) ir yra kuriama kitoms naršyklėms. Prieš įdiegiant WebHID API savo programoje, svarbu patikrinti naršyklių suderinamumą ir pateikti atsarginius mechanizmus naršyklėms, kurios nepalaiko API.
2. Saugumo aspektai
WebHID API sukurta atsižvelgiant į saugumą. Naršyklė prašo vartotojo leidimo prieš leisdama žiniatinklio programai pasiekti HID įrenginį. Tai apsaugo nuo kenkėjiškų svetainių prieigos prie jautrios aparatinės įrangos be vartotojo sutikimo. Be to, WebHID API veikia naršyklės saugumo smėlio dėžėje, ribodama programos prieigą prie sistemos išteklių.
- Tik HTTPS: WebHID, kaip ir kitos galingos žiniatinklio API, reikalauja saugaus konteksto (HTTPS) veikimui.
- Vartotojo veiksmai: Prieigos prie įrenginio prašymas paprastai reikalauja vartotojo veiksmo (pvz., mygtuko paspaudimo), kad būtų išvengta nepageidaujamų prieigos užklausų.
- Permissions API: Permissions API gali būti naudojama WebHID leidimams užklausti ir valdyti.
Dažniausių problemų sprendimas
1. Įrenginys nerastas
Jei jūsų programa negali rasti HID įrenginio, dukart patikrinkite VID ir PID. Įsitikinkite, kad jie atitinka tikruosius įrenginio identifikatorius. Taip pat patikrinkite, ar įrenginys tinkamai prijungtas ir atpažįstamas operacinės sistemos.
2. Leidimas atmestas
Jei vartotojas atsisako suteikti leidimą pasiekti HID įrenginį, jūsų programa negalės su juo bendrauti. Šią situaciją tvarkykite sklandžiai, parodydami vartotojui pranešimą ir paaiškindami, kodėl reikalinga prieiga. Apsvarstykite galimybę pateikti alternatyvių būdų vartotojui sąveikauti su jūsų programa.
3. Duomenų formato problemos
HID įrenginiai dažnai naudoja nestandartinius duomenų formatus duomenims siųsti ir gauti. Jums reikės suprasti įrenginio duomenų formatą ir įdiegti atitinkamą analizavimo bei serializavimo logiką savo programoje. Informacijos apie duomenų formatą ieškokite įrenginio gamintojo dokumentacijoje.
Išvada
WebHID API suteikia žiniatinklio kūrėjams galimybę kurti novatoriškas ir interaktyvias žiniatinklio programas, kurios tiesiogiai bendrauja su žmogaus sąsajos įrenginiais. Suprasdami įrenginių išvardijimo, filtravimo ir ryšio valdymo principus, galite atskleisti visą WebHID API potencialą ir sukurti įtikinamas vartotojo patirtis. Pasinaudokite WebHID galia sujungti internetą su fiziniu pasauliu, skatindami naujas kūrybiškumo, produktyvumo ir prieinamumo galimybes visame pasaulyje.