Penulisan dan Pembacaan
Fungsi-fungsi ini adalah semua cara yang tersedia untuk berkomunikasi dengan peranti USB yang disambungkan dalam plugin Anda. Arahan dibahagikan kepada dua variasi operasi baca dan tulis bergantung pada protokol peranti, serta pemindahan kawalan yang membolehkan arahan jabat tangan dan kefungsian lanjutan.
device.write()[send_report]
Section titled “device.write()[send_report]”Fungsi ini melaksanakan arahan Hid_Write pada endpoint yang dipilih semasa peranti. Ini adalah fungsi tulis yang digunakan oleh kebanyakan peranti dan akan menjadi arahan yang paling kerap digunakan.
- Nota: Satu lagi variasi penulisan ialah device.send_report. Ini ialah arahan tulis untuk menghantar laporan ciri HID ke peranti. Kefungsiannya selain itu adalah sama dengan device.write().
- Nota: Jika panjang yang diberikan lebih besar daripada array data yang disediakan, penghujung array akan diisi dengan 0x00.
- Nota: Kebanyakan peranti HID mengisi bahagian hadapan arahan tulis mereka dengan sifar. Ini dilakukan dengan memasukkan 0x00 tambahan sebelum DataArray dan meningkatkan panjang sebanyak satu. Nilai-nilai ini dibuang oleh peranti semasa penghantaran data. Ini terutamanya berlaku apabila peranti tidak mempunyai Report ID untuk endpoint yang dipilih.
| Parameter | Jenis | Keterangan | Contoh |
|---|---|---|---|
| DataArray | 1D Array | Array dengan bait hex yang hendak dihantar ke peranti | [0x08,0xAB,0xFF,0x37] |
| Length | Int | Nilai Int yang mewakili jumlah panjang paket yang hendak dihantar | 4 |
Berikut ialah contoh paket dari pengawal LED ASUS yang menunjukkan penciptaan dan penghantarannya ke peranti.
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]”Panggilan fungsi ini mengambil array dengan Report ID endpoint dan bilangan bait yang hendak dibaca, dan melaksanakan Hid_Read pada peranti. Fungsi ini mengembalikan array bait yang dibaca dari peranti. Sesetengah peranti memerlukan pembacaan untuk mencegah limpahan penimbal, dan kadang-kadang perlu membaca data konfigurasi atau tetapan dari peranti.
- Nota: Satu lagi variasi pembacaan ialah:
- device.read_report*. Ini ialah arahan baca untuk mendapatkan laporan ciri HID dari peranti. Kefungsiannya selain itu adalah sama dengan device.read().
| Parameter | Jenis | Keterangan | Contoh |
|---|---|---|---|
| DataArray | 1D Array | Array dengan Report ID yang diperlukan untuk arahan baca | [0x08, 0x02] |
| Length | Int | Nilai Int yang mewakili bilangan bait yang hendak dibaca | 65 |
| Pulangan | Jenis | Keterangan | Contoh |
|---|---|---|---|
| DataArray | 1D Array | Array yang mengandungi semua bait HEX yang dibaca dari peranti | [0x08, 0x02,0x00,0x64] |
- Nota: Fungsi ini mengembalikan array data yang bersamaan dengan panjang laporan peranti. Jika Anda memerlukan bilangan bait sebenar yang dibaca, gunakan device.getLastReadSize().
var config = device.read(packet, 65);device.getLastReadSize()
Section titled “device.getLastReadSize()”Fungsi ini mengembalikan bilangan bait yang dibaca semasa panggilan read/get_report terakhir pada peranti.
| Pulangan | Jenis | Keterangan | Contoh |
|---|---|---|---|
| BytesRead | Int | Bilangan bait yang dibaca dari peranti | 64 |
Berikut ialah contoh dari Glorious Model 0 Mouse.
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.control_transfer()
Section titled “device.control_transfer()”device.flush()
Section titled “device.flush()”Fungsi ini cuba mengosongkan penimbal baca peranti sepenuhnya. Ini boleh berguna untuk melakukan tetapan semula sebelum pembacaan kritikal pada peranti.
- Nota: Kegunaan fungsi ini bergantung pada peranti dan endpoint. Jika peranti tidak menyokong pembilasan, Anda mungkin perlu membilasnya secara manual dengan pembacaan gelung sehingga device.getLastReadSize() mengembalikan 0 bait.
export function Initialize(){ device.flush() if(Corsair_Get(CORSAIR_MODE) == CORSAIR_HARDWARE_MODE){ EnableSoftwareControl(); }}