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.
device.write()[send_report]
Section titled “device.write()[send_report]”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.
| Parametre | Tür | Açıklama | Örnek |
|---|---|---|---|
| DataArray | 1D Dizi | Cihaza gönderilecek Hex baytlarını içeren bir dizi | [0x08,0xAB,0xFF,0x37] |
| Length | Int | Gönderilecek toplam paket uzunluğunu temsil eden Int değeri | 4 |
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ğidirpacket[1] = 0x40; // Komutpacket[2] = apply ? 0x80 | channel : channel; // Kanal Numarasıpacket[3] = start; // Başlangıç LED'ipacket[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 yazmadevice.read()[get_report]
Section titled “device.read()[get_report]”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.
| Parametre | Tür | Açıklama | Örnek | Varsayılan |
|---|---|---|---|---|
| DataArray | 1D Dizi | Okuma komutu için gereken rapor kimliğini içeren dizi | [0x08, 0x02] | |
| Length | Int | Okunacak bayt sayısını temsil eden Int değeri | 65 | |
| Timeout | Int | Dönmeden önce veri beklenecek milisaniye. Engellemesiz kontrol için 0 geçirin. | 100 | 100 |
| Döndürülen | Tür | Açıklama | Örnek |
|---|---|---|---|
| DataArray | 1D Dizi | Cihazdan 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()0dö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ınvar data = device.read([], 64, 0);if(device.getLastReadSize() > 0) { processResponse(data);}device.getLastReadSize()
Section titled “device.getLastReadSize()”Bu fonksiyon, cihaza yapılan son okuma/get_report tarafından okunan bayt sayısını döndürür.
| Döndürülen | Tür | Açıklama | Örnek |
|---|---|---|---|
| BytesRead | Int | Cihazdan 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
}device.clearReadBuffer()
Section titled “device.clearReadBuffer()”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);device.flush()
Section titled “device.flush()”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(); }}device.control_transfer()
Section titled “device.control_transfer()”control_transfer, bulk_transfer ve input_report’un tam belgeleri için Gelişmiş İletişim sayfasına bakın.