Pisanje i čitanje
Ove funkcije su svi dostupni načini komunikacije sa priključenim USB uređajima u vašim pluginovima. Komande su podeljene u dve varijante operacija čitanja i pisanja, u zavisnosti od protokola uređaja, kao i kontrolnih transfera koji omogućavaju handshake komande i naprednu funkcionalnost.
device.write()[send_report]
Section titled “device.write()[send_report]”Ova funkcija izvršava Hid_Write komandu na trenutno izabranom endpointu uređaja. Ovo je funkcija pisanja koju koristi većina uređaja i biće najčešće korišćena komanda.
- Napomena: Još jedna varijanta pisanja je device.send_report. Ovo je komanda pisanja za slanje HID Feature Reports uređaju. Funkcionalnost je inače identična sa device.write().
- Napomena: Ako je navedena dužina veća od dostavljenog niza podataka, kraj niza će biti dopunjen sa 0x00.
- Napomena: Većina HID uređaja dopunjava prednji deo svojih komandi pisanja sa nulom. To se postiže umetanjem dodatnog 0x00 ispred DataArray-a i povećanjem dužine za jedan. Ove vrednosti uređaj uklanja tokom prenosa podataka. Ovo se uglavnom dešava kada uređaj nema Report ID za izabrani endpoint.
| Parametar | Tip | Opis | Primer |
|---|---|---|---|
| DataArray | 1D Array | Niz sa hex bajtovima koji treba poslati uređaju | [0x08,0xAB,0xFF,0x37] |
| Length | Int | Int vrednost koja predstavlja ukupnu dužinu paketa koji treba poslati | 4 |
Ispod je primer paketa sa ASUS LED kontrolera koji pokazuje kreiranje i prenos ka uređaju.
var packet = [];packet[0] = 0xEC; //This is the Report Idpacket[1] = 0x40; //Commandpacket[2] = apply ? 0x80 | channel : channel; //Channel Numberpacket[3] = start; //Led to Start onpacket[4] = count; //Led Countpacket = packet.concat(RGBData); //Array of RGB values in a [R,G,B ...] format
device.write(packet, 65); //Writing the packet to the device in 65 Bytesdevice.read()[get_report]
Section titled “device.read()[get_report]”Ovaj poziv funkcije prima niz sa Report ID endpointa i brojem bajtova za čitanje i izvršava Hid_Read na uređaju. Funkcija vraća niz bajtova pročitanih sa uređaja. Neki uređaji zahtevaju čitanje za sprečavanje prekoračenja bafera i povremeno moraju čitati konfiguraciju ili podatke podešavanja sa uređaja.
- Napomena: Još jedna varijanta čitanja je:
- device.read_report*. Ovo je komanda čitanja za dohvatanje HID Feature Reports sa uređaja. Funkcionalnost je inače identična sa device.read().
| Parametar | Tip | Opis | Primer |
|---|---|---|---|
| DataArray | 1D Array | Niz sa Report ID potrebnom za komandu čitanja | [0x08, 0x02] |
| Length | Int | Int vrednost koja predstavlja broj bajtova za čitanje | 65 |
| Povratak | Tip | Opis | Primer |
|---|---|---|---|
| DataArray | 1D Array | Niz sa svim pročitanim HEX bajtovima sa uređaja | [0x08, 0x02,0x00,0x64] |
- Napomena: Ova funkcija vraća niz podataka koji odgovara dužini izveštaja uređaja. Ako vam je potreban stvarni broj pročitanih bajtova, koristite device.getLastReadSize().
var config = device.read(packet, 65);device.getLastReadSize()
Section titled “device.getLastReadSize()”Ova funkcija vraća broj bajtova pročitanih tokom poslednjeg poziva read/get_report na uređaju.
| Povratak | Tip | Opis | Primer |
|---|---|---|---|
| BytesRead | Int | Broj bajtova pročitanih sa uređaja | 64 |
Ispod je primer sa Glorious Model 0 mišem.
function CheckPacketLength(){
var packet = [0x52]
packet = device.get_report(packet,200) //attempts to read up to 200 bytes
return device.getLastReadSize(); //Returns 186 on a successful read of the config packet
}device.control_transfer()
Section titled “device.control_transfer()”device.flush()
Section titled “device.flush()”Ova funkcija pokušava da potpuno isprazni bafer za čitanje uređaja. Ovo može biti korisno za resetovanje pre kritičnih čitanja na uređaju.
- Napomena: Korisnost ove funkcije zavisi od uređaja i endpointa. Ako uređaj ne podržava pražnjenje, možda ćete morati ručno da ga ispraznite petljama čitanja dok device.getLastReadSize() ne vrati 0 bajtova.
export function Initialize(){ device.flush() if(Corsair_Get(CORSAIR_MODE) == CORSAIR_HARDWARE_MODE){ EnableSoftwareControl(); }}