İçeriğe geç

Yazma ve Okuma

Bu fonksiyonlar, eklentilerinizde bağlı USB cihazlarıyla iletişim kurmanın tüm mevcut yollarıdır. Komutlar, cihazın protokollerine bağlı olarak iki tür okuma ve yazmaya ve el sıkışma komutları ile gelişmiş işlevselliğe olanak tanıyan kontrol aktarımlarına ayrılır.

Gelişmiş yöntemler (bulk_transfer, control_transfer, input_report) ve ağ/seri iletişim için Gelişmiş İletişim sayfasına bakın.

Bu fonksiyon, cihazların seçili uç noktasında Hid_Write komutu gerçekleştirir. Bu, çoğu cihazın kullandığı yazma fonksiyonudur ve en sık kullanılan komut olacaktır.

  • Not: Yazmanın başka bir çeşidi device.send_report’tur. Bu, cihaza HID özellik raporları göndermek için kullanılan yazma komutudur. İşlevsellik açısından device.write() ile aynıdır.
  • Not: Sağlanan veri dizisinden daha uzun bir uzunluk ayarlamak, dizinin sonunu 0x00 ile dolduracaktır.
  • Not: Çoğu HID cihazı yazma komutlarının önünü sıfırla doldurur. Bu işlem, DataArray’in önüne fazladan bir 0x00 yerleştirilerek ve uzunluk bir artırılarak yapılır; bu değerler veri aktarımı sırasında cihaz tarafından kaldırılır. Bu, öncelikle cihazın seçili Uç Nokta için Rapor Kimliği olmadığında gerçekleşir.
ParametreTürAçıklamaÖrnek
DataArray1D DiziCihaza gönderilecek Hex baytlarını içeren bir dizi[0x08,0xAB,0xFF,0x37]
LengthIntGönderilecek toplam paket uzunluğunu temsil eden Int değeri4

Aşağıda, oluşturma ve cihaza teslim etme işlemini gösteren ASUS LED kontrolörlerinden bir paket örneği yer almaktadır.

var packet = [];
packet[0] = 0xEC; // Bu Rapor Kimliğidir
packet[1] = 0x40; // Komut
packet[2] = apply ? 0x80 | channel : channel; // Kanal Numarası
packet[3] = start; // Başlangıç LED'i
packet[4] = count; // LED Sayısı
packet = packet.concat(RGBData); // [R,G,B ...] biçiminde RGB değerleri dizisi
device.write(packet, 65); // Paketi 65 Bayt olarak cihaza yazma

Bu fonksiyon çağrısı, uç nokta Rapor Kimliğini ve okunacak bayt uzunluğunu içeren bir diziyi alır ve cihaz üzerinde Hid_Read gerçekleştirir. Fonksiyon, cihazdan okunan bayt dizisini döndürür. Bazı cihazlar tampon taşmalarını önlemek için okuma gerektirir ve zaman zaman cihazlardan yapılandırma veya ayar verisi okuma ihtiyacı doğar.

  • Not: Okumanın başka bir çeşidi device.get_report’tur. Bu, cihazdan HID özellik raporları almak için kullanılan okuma komutudur. İşlevsellik açısından device.read() ile aynıdır.
ParametreTürAçıklamaÖrnekVarsayılan
DataArray1D DiziOkuma komutu için gereken rapor kimliğini içeren dizi[0x08, 0x02]
LengthIntOkunacak bayt sayısını temsil eden Int değeri65
TimeoutIntDönmeden önce veri beklenecek milisaniye. Engellemesiz kontrol için 0 geçirin.100100
DöndürülenTürAçıklamaÖrnek
DataArray1D DiziCihazdan okunan tüm HEX Baytlarını içeren dizi veya zaman aşımı veri olmadan süresi dolmuşsa boş dizi[0x08, 0x02,0x00,0x64]
  • Not: Bu fonksiyon, cihazın rapor uzunluğuyla eşleşen bir Veri Dizisi döndürür. Gerçek okunan bayt sayısına ihtiyacınız varsa device.getLastReadSize() kullanın.
  • Not: Zaman aşımı veri olmadan sona erdiğinde, döndürülen değer boş bir dizidir ve device.getLastReadSize() 0 döndürür.
// Standart engelleyici okuma (varsayılan 100ms zaman aşımı)
var config = device.read(packet, 65);
// Engellemesiz kontrol — hemen döner, verinin gelip gelmediğini kontrol etmek için getLastReadSize() kullanın
var data = device.read([], 64, 0);
if(device.getLastReadSize() > 0) {
processResponse(data);
}

Bu fonksiyon, cihaza yapılan son okuma/get_report tarafından okunan bayt sayısını döndürür.

DöndürülenTürAçıklamaÖrnek
BytesReadIntCihazdan okunan bayt sayısı64

Aşağıda Glorious Model 0 Faresi’nden bir örnek yer almaktadır.

function CheckPacketLength(){
var packet = [0x52]
packet = device.get_report(packet,200) // 200 bayta kadar okumaya çalışır
return device.getLastReadSize(); // Yapılandırma paketinin başarılı okunmasında 186 döndürür
}

Cihazın okuma tamponunda bekleyen tüm verileri temizler. Eskimiş arabelleğe alınmış bir yanıt yerine taze veri aldığınızdan emin olmak için kritik bir okumadan önce bunu çağırın.

  • Not: Bu fonksiyonun kullanışlılığı cihaza ve uç noktaya bağlıdır. Cihaz temizlemeyi desteklemiyorsa, device.getLastReadSize() 0 döndürene kadar okumaları döngüye alarak manuel olarak boşaltın.
device.clearReadBuffer();
device.write(requestPacket, 64);
var response = device.read([], 64);

Bu fonksiyon, cihazın yerel temizleme mekanizmasını kullanarak cihazın okuma tamponunu tamamen temizlemeye çalışır. Çoğu kullanım durumu için device.clearReadBuffer() tercih edin.

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

control_transfer, bulk_transfer ve input_report’un tam belgeleri için Gelişmiş İletişim sayfasına bakın.