Lewati ke konten

Writes and Reads

Fungsi-fungsi ini adalah semua cara yang tersedia untuk berkomunikasi dengan perangkat USB yang terhubung dalam plugin Anda. Perintah dibagi menjadi dua jenis pembacaan dan penulisan tergantung pada protokol perangkat, dan transfer kontrol yang memungkinkan perintah handshake dan fungsionalitas tingkat lanjut.

Untuk metode lanjutan (bulk_transfer, control_transfer, input_report) dan komunikasi jaringan/serial, lihat Advanced Communication.

Fungsi ini melakukan perintah Hid_Write pada endpoint yang saat ini dipilih dari perangkat. Ini adalah fungsi tulis yang digunakan sebagian besar perangkat dan akan menjadi perintah yang paling sering digunakan.

  • Catatan: Variasi lain dari write adalah device.send_report. Ini adalah perintah tulis yang digunakan untuk mengirim laporan fitur HID ke perangkat. Fungsionalitasnya sama dengan device.write().
  • Catatan: Mengatur panjang yang lebih panjang dari array data yang disediakan akan mengisi akhir array dengan 0x00.
  • Catatan: Sebagian besar perangkat HID akan mengisi nol di depan perintah tulis mereka. Ini dilakukan dengan menempatkan 0x00 ekstra di depan DataArray Anda dan menambah panjang sebesar satu. Nilai-nilai ini dihapus oleh perangkat selama transfer data. Ini terutama terjadi ketika perangkat tidak memiliki Report ID untuk Endpoint yang dipilih.
ParameterTipeDeskripsiContoh
DataArray1D ArrayArray yang berisi byte Hex untuk dikirim ke perangkat[0x08,0xAB,0xFF,0x37]
LengthIntNilai Int yang mewakili total panjang paket yang akan dikirim4

Di bawah ini adalah contoh paket dari kontroler LED ASUS yang menunjukkan pembuatan dan pengiriman ke perangkat.

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

Pemanggilan fungsi ini mengambil array yang berisi Report Id endpoint dan panjang byte yang akan dibaca, dan melakukan Hid_Read pada perangkat. Fungsi ini mengembalikan array byte yang dibaca dari perangkat. Beberapa perangkat memerlukan pembacaan untuk mencegah buffer overflow dan terkadang perlu membaca konfigurasi atau data pengaturan dari perangkat.

  • Catatan: Variasi lain dari read adalah device.get_report. Ini adalah perintah baca yang digunakan untuk mendapatkan laporan fitur HID dari perangkat. Fungsionalitasnya sama dengan device.read().
ParameterTipeDeskripsiContohDefault
DataArray1D ArrayArray yang berisi Report Id yang diperlukan untuk perintah baca[0x08, 0x02]
LengthIntNilai Int yang mewakili jumlah byte yang akan dibaca65
TimeoutIntMilidetik untuk menunggu data sebelum kembali. Masukkan 0 untuk pemeriksaan non-blocking.100100
ReturnTipeDeskripsiContoh
DataArray1D ArrayArray yang berisi semua Byte HEX yang dibaca dari perangkat, atau array kosong jika timeout berakhir tanpa data[0x08, 0x02,0x00,0x64]
  • Catatan: Fungsi ini mengembalikan Data Array yang cocok dengan panjang laporan perangkat. Jika Anda memerlukan jumlah byte yang sebenarnya dibaca, gunakan device.getLastReadSize().
  • Catatan: Ketika timeout berakhir tanpa data, nilai return adalah array kosong dan device.getLastReadSize() mengembalikan 0.
// Standard blocking read (100ms default timeout)
var config = device.read(packet, 65);
// Non-blocking peek — returns immediately, use getLastReadSize() to check if data arrived
var data = device.read([], 64, 0);
if(device.getLastReadSize() > 0) {
processResponse(data);
}

Fungsi ini mengembalikan jumlah byte yang dibaca oleh read/get_report terakhir yang dilakukan ke perangkat.

ReturnTipeDeskripsiContoh
BytesReadIntJumlah byte yang dibaca dari Perangkat64

Di bawah ini adalah contoh dari Mouse Glorious Model 0.

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
}

Membersihkan data tertunda yang mengantri dalam buffer baca perangkat. Panggil ini sebelum pembacaan kritis untuk memastikan Anda menerima data segar daripada respons buffer yang sudah usang.

  • Catatan: Kegunaan fungsi ini bergantung pada perangkat dan endpoint. Jika perangkat tidak mendukung flushing, drain secara manual dengan melakukan loop read hingga device.getLastReadSize() mengembalikan 0.
device.clearReadBuffer();
device.write(requestPacket, 64);
var response = device.read([], 64);

Fungsi ini mencoba membersihkan buffer baca perangkat sepenuhnya menggunakan mekanisme flush native perangkat. Lebih disarankan menggunakan device.clearReadBuffer() untuk sebagian besar kasus penggunaan.

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

Lihat Advanced Communication untuk dokumentasi lengkap control_transfer, bulk_transfer, dan input_report.