Hoppa till innehåll

Skrivningar och läsningar

Dessa funktioner är alla tillgängliga sätt att kommunicera med anslutna USB-enheter i dina plugins. Kommandona delas upp i två typer av läsningar och skrivningar och kontrolltransfererings-kommandon som möjliggör handskakning och avancerad funktionalitet, beroende på enhetens protokoll.

För avancerade metoder (bulk_transfer, control_transfer, input_report) och nätverks-/seriekommunikation, se sidan Avancerad kommunikation.

Den här funktionen utför ett Hid_Write-kommando på enhetens valda slutpunkt. Det här är skrivfunktionen som de flesta enheter använder och det kommer att vara det vanligast använda kommandot.

  • Obs: En annan variant av write är device.send_report. Det här är det skrivkommando som används för att skicka HID-funktionsrapporter till enheten. Det är funktionellt identiskt med device.write().
  • Obs: Om du anger en längd som är längre än den angivna dataarrayen fylls slutet av arrayen med 0x00.
  • Obs: De flesta HID-enheter nollutfyller skrivkommandon. Det görs genom att placera en extra 0x00 framför DataArray och öka längden med ett; dessa värden tas bort av enheten under dataöverföring. Det här sker primärt när den valda slutpunkten för enheten inte har ett rapport-ID.
ParameterTypBeskrivningExempel
DataArray1D ArrayEn array som innehåller hex-bytes som ska skickas till enheten[0x08,0xAB,0xFF,0x37]
LengthIntEtt int-värde som representerar den totala paketlängden som ska skickas4

Nedan finns ett paketexempel från ASUS LED-styrenheter som visar konstruktion och leverans till enheten.

var packet = [];
packet[0] = 0xEC; // Det här är rapport-ID:t
packet[1] = 0x40; // Kommando
packet[2] = apply ? 0x80 | channel : channel; // Kanalnummer
packet[3] = start; // Start-LED
packet[4] = count; // Antal lysdioder
packet = packet.concat(RGBData); // Array med RGB-värden i formatet [R,G,B ...]
device.write(packet, 65); // Skriv paketet till enheten som 65 byte

Det här funktionsanropet tar en array som innehåller slutpunktens rapport-ID och byte-längden som ska läsas och utför ett Hid_Read på enheten. Funktionen returnerar byte-arrayen som lästs från enheten. Vissa enheter kräver läsningar för att förhindra buffertöversvämningar och ibland finns det behov av att läsa konfigurationsdata eller inställningsdata från enheter.

  • Obs: En annan variant av read är device.get_report. Det här är det läskommando som används för att hämta HID-funktionsrapporter från enheten. Det är funktionellt identiskt med device.read().
ParameterTypBeskrivningExempelStandard
DataArray1D ArrayArray som innehåller det rapport-ID som krävs för läskommandot[0x08, 0x02]
LengthIntEtt int-värde som representerar antalet bytes att läsa65
TimeoutIntMillisekunder att vänta på data innan det returneras. Skicka 0 för icke-blockerande kontroll.100100
ReturnerarTypBeskrivningExempel
DataArray1D ArrayArray som innehåller alla HEX-bytes som lästs från enheten, eller tom array om timeout löpte ut utan data[0x08, 0x02,0x00,0x64]
  • Obs: Den här funktionen returnerar en DataArray som matchar enhetens rapportlängd. Om du behöver det faktiska antalet lästa bytes, använd device.getLastReadSize().
  • Obs: När timeout löper ut utan data är det returnerade värdet en tom array och device.getLastReadSize() returnerar 0.
// Standard blockerande läsning (standard 100ms timeout)
var config = device.read(packet, 65);
// Icke-blockerande kontroll — returnerar omedelbart, använd getLastReadSize() för att kontrollera om data kom
var data = device.read([], 64, 0);
if(device.getLastReadSize() > 0) {
processResponse(data);
}

Den här funktionen returnerar antalet bytes som lästs av den senaste read/get_report till enheten.

ReturnerarTypBeskrivningExempel
BytesReadIntAntalet bytes lästa från enheten64

Nedan finns ett exempel från Glorious Model 0-musen.

function CheckPacketLength(){
var packet = [0x52]
packet = device.get_report(packet,200) // Försöker läsa upp till 200 bytes
return device.getLastReadSize(); // Returnerar 186 vid lyckad läsning av konfigurationspaketet
}

Rensar all väntande data i enhetens läsbuffert. Anropa detta före en kritisk läsning för att säkerställa att du får färsk data istället för ett föråldrat buffrat svar.

  • Obs: Användbarheten hos den här funktionen beror på enheten och slutpunkten. Om enheten inte stödjer rensning, töm manuellt genom att loopa läsningar tills device.getLastReadSize() returnerar 0.
device.clearReadBuffer();
device.write(requestPacket, 64);
var response = device.read([], 64);

Den här funktionen försöker fullständigt rensa enhetens läsbuffert med enhetens inbyggda rensningsmekanik. Föredra device.clearReadBuffer() för de flesta användningsfall.

export function Initialize(){
device.flush()
if(Corsair_Get(CORSAIR_MODE) == CORSAIR_HARDWARE_MODE){
EnableSoftwareControl();
}
}

För fullständig dokumentation av control_transfer, bulk_transfer och input_report, se sidan Avancerad kommunikation.