Gå til indhold

Skrivninger og læsninger

Disse funktioner er alle tilgængelige måder at kommunikere med de tilsluttede USB-enheder i dine plugins. Kommandoerne er opdelt i to varianter af læse- og skriveoperationer afhængigt af enhedens protokoller, samt control-transfers der muliggør handshake-kommandoer og udvidet funktionalitet.

Denne funktion udfører en Hid_Write-kommando på det aktuelt valgte endepunkt for enheden. Dette er den skrivefunction som de fleste enheder bruger, og vil være den hyppigst brugte kommando.

  • Bemærk: En anden variant af skrivning er device.send_report. Dette er skrivekommandoen til at sende HID-feature-reports til enheden. Funktionaliteten er ellers identisk med device.write().
  • Bemærk: Hvis der angives en længde der er større end det leverede data-array, vil slutningen af arrayet blive fyldt med 0x00.
  • Bemærk: De fleste HID-enheder udfylder forsiden af deres skrivekommandoer med nul. Dette gøres ved at indsætte et ekstra 0x00 foran DataArray og øge længden med én. Disse værdier fjernes af enheden under dataoverførslen. Dette sker primært, når enheden ikke har en rapport-ID for det valgte endepunkt.
ParameterTypeBeskrivelseEksempel
DataArray1D-ArrayEt array med hex-bytes der skal sendes til enheden[0x08,0xAB,0xFF,0x37]
LengthIntEn Int-værdi der repræsenterer den samlede pakktelængde der skal sendes4

Nedenfor et eksempel på en pakke fra ASUS LED-controllerne, der viser oprettelse og overføring til enheden.

var packet = [];
packet[0] = 0xEC; //This is the Report Id
packet[1] = 0x40; //Command
packet[2] = apply ? 0x80 | channel : channel; //Channel Number
packet[3] = start; //Led to Start on
packet[4] = count; //Led Count
packet = 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 Bytes

Dette funktionskald tager et array med en endepunkt-rapport-ID og antallet af bytes der skal læses og udfører en Hid_Read på enheden. Funktionen returnerer et array med de bytes der er læst fra enheden. Nogle enheder kræver en læsning for at forhindre buffer-overflows og skal lejlighedsvis læse konfigurations- eller indstillingsdata fra enheden.

  • Bemærk: En anden variant af læsning er:
  • device.read_report*. Dette er læsekommandoen til at hente HID-feature-reports fra enheden. Funktionaliteten er ellers identisk med device.read().
ParameterTypeBeskrivelseEksempel
DataArray1D-ArrayEt array med den rapport-ID der kræves til læsekommandoen[0x08, 0x02]
LengthIntEn Int-værdi der repræsenterer antallet af bytes der skal læses65
ReturneringTypeBeskrivelseEksempel
DataArray1D-ArrayEt array med alle læste HEX-bytes fra enheden[0x08, 0x02,0x00,0x64]
  • Bemærk: Denne funktion returnerer et data-array der svarer til enhedens rapport-længde. Hvis du har brug for det faktiske antal læste bytes, brug device.getLastReadSize().
var config = device.read(packet, 65);

Denne funktion returnerer antallet af bytes der blev læst ved det seneste read/get_report-kald på enheden.

ReturneringTypeBeskrivelseEksempel
BytesReadIntAntal bytes læst fra enheden64

Nedenfor et eksempel fra Glorious Model 0 Mouse.

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
}

Denne funktion forsøger at tømme enhedens læsebuffer fuldstændigt. Dette kan være nyttigt til at nulstille inden kritiske læsninger på enheden.

  • Bemærk: Nyttelværdien af denne funktion afhænger af enheden og endepunktet. Hvis enheden ikke understøtter tømning, skal du muligvis tømme manuelt med løkke-læsninger, indtil device.getLastReadSize() returnerer 0 bytes.
export function Initialize(){
device.flush()
if(Corsair_Get(CORSAIR_MODE) == CORSAIR_HARDWARE_MODE){
EnableSoftwareControl();
}
}