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.
device.write()[send_report]
Section titled “device.write()[send_report]”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.
| Parameter | Tipe | Deskripsi | Contoh |
|---|---|---|---|
| DataArray | 1D Array | Array yang berisi byte Hex untuk dikirim ke perangkat | [0x08,0xAB,0xFF,0x37] |
| Length | Int | Nilai Int yang mewakili total panjang paket yang akan dikirim | 4 |
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 Idpacket[1] = 0x40; //Commandpacket[2] = apply ? 0x80 | channel : channel; //Channel Numberpacket[3] = start; //Led to Start onpacket[4] = count; //Led Countpacket = 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 Bytesdevice.read()[get_report]
Section titled “device.read()[get_report]”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().
| Parameter | Tipe | Deskripsi | Contoh | Default |
|---|---|---|---|---|
| DataArray | 1D Array | Array yang berisi Report Id yang diperlukan untuk perintah baca | [0x08, 0x02] | |
| Length | Int | Nilai Int yang mewakili jumlah byte yang akan dibaca | 65 | |
| Timeout | Int | Milidetik untuk menunggu data sebelum kembali. Masukkan 0 untuk pemeriksaan non-blocking. | 100 | 100 |
| Return | Tipe | Deskripsi | Contoh |
|---|---|---|---|
| DataArray | 1D Array | Array 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()mengembalikan0.
// Standard blocking read (100ms default timeout)var config = device.read(packet, 65);
// Non-blocking peek — returns immediately, use getLastReadSize() to check if data arrivedvar data = device.read([], 64, 0);if(device.getLastReadSize() > 0) { processResponse(data);}device.getLastReadSize()
Section titled “device.getLastReadSize()”Fungsi ini mengembalikan jumlah byte yang dibaca oleh read/get_report terakhir yang dilakukan ke perangkat.
| Return | Tipe | Deskripsi | Contoh |
|---|---|---|---|
| BytesRead | Int | Jumlah byte yang dibaca dari Perangkat | 64 |
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
}device.clearReadBuffer()
Section titled “device.clearReadBuffer()”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);device.flush()
Section titled “device.flush()”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(); }}device.control_transfer()
Section titled “device.control_transfer()”Lihat Advanced Communication untuk dokumentasi lengkap control_transfer, bulk_transfer, dan input_report.