Bỏ qua để đến nội dung

Ghi và đọc

Các hàm này là tất cả các cách có sẵn để giao tiếp với các thiết bị USB được kết nối trong plugin của bạn. Các lệnh được chia thành hai biến thể của các hoạt động đọc và ghi, tùy thuộc vào giao thức thiết bị, cũng như các chuyển giao điều khiển cho phép các lệnh handshake và chức năng nâng cao.

Hàm này thực thi lệnh Hid_Write trên endpoint hiện đang được chọn của thiết bị. Đây là hàm ghi mà hầu hết các thiết bị sử dụng và sẽ là lệnh được sử dụng thường xuyên nhất.

  • Lưu ý: Một biến thể ghi khác là device.send_report. Đây là lệnh ghi để gửi HID Feature Reports đến thiết bị. Chức năng về mặt khác giống hệt với device.write().
  • Lưu ý: Nếu độ dài được chỉ định lớn hơn mảng dữ liệu được cung cấp, phần cuối của mảng sẽ được đệm bằng 0x00.
  • Lưu ý: Hầu hết các thiết bị HID đệm phần đầu của các lệnh ghi của chúng bằng không. Điều này đạt được bằng cách chèn thêm 0x00 ở đầu DataArray và tăng độ dài lên một. Các giá trị này bị thiết bị loại bỏ trong quá trình truyền dữ liệu. Điều này thường xảy ra khi thiết bị không có Report ID cho endpoint đã chọn.
Tham sốKiểuMô tảVí dụ
DataArray1D ArrayMảng với các byte hex cần gửi đến thiết bị[0x08,0xAB,0xFF,0x37]
LengthIntGiá trị Int đại diện cho tổng độ dài packet cần gửi4

Dưới đây là ví dụ về packet từ bộ điều khiển LED ASUS cho thấy việc tạo và truyền đến thiết bị.

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

Lời gọi hàm này nhận một mảng với Report ID của endpoint và số byte cần đọc và thực thi Hid_Read trên thiết bị. Hàm trả về một mảng các byte được đọc từ thiết bị. Một số thiết bị yêu cầu đọc để ngăn tràn bộ đệm và đôi khi phải đọc cấu hình hoặc dữ liệu cài đặt từ thiết bị.

  • Lưu ý: Một biến thể đọc khác là:
  • device.read_report*. Đây là lệnh đọc để lấy HID Feature Reports từ thiết bị. Chức năng về mặt khác giống hệt với device.read().
Tham sốKiểuMô tảVí dụ
DataArray1D ArrayMảng với Report ID cần thiết cho lệnh đọc[0x08, 0x02]
LengthIntGiá trị Int đại diện cho số byte cần đọc65
Trả vềKiểuMô tảVí dụ
DataArray1D ArrayMảng với tất cả các byte HEX được đọc từ thiết bị[0x08, 0x02,0x00,0x64]
  • Lưu ý: Hàm này trả về một mảng dữ liệu tương ứng với độ dài báo cáo của thiết bị. Nếu bạn cần số byte thực tế được đọc, hãy sử dụng device.getLastReadSize().
var config = device.read(packet, 65);

Hàm này trả về số byte được đọc trong lần gọi read/get_report cuối cùng trên thiết bị.

Trả vềKiểuMô tảVí dụ
BytesReadIntSố byte được đọc từ thiết bị64

Dưới đây là ví dụ với chuột 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
}

Hàm này cố gắng xóa hoàn toàn bộ đệm đọc của thiết bị. Điều này có thể hữu ích để reset trước các lần đọc quan trọng trên thiết bị.

  • Lưu ý: Tính hữu ích của hàm này phụ thuộc vào thiết bị và endpoint. Nếu thiết bị không hỗ trợ flush, bạn có thể phải flush thủ công bằng các vòng lặp đọc cho đến khi device.getLastReadSize() trả về 0 byte.
export function Initialize(){
device.flush()
if(Corsair_Get(CORSAIR_MODE) == CORSAIR_HARDWARE_MODE){
EnableSoftwareControl();
}
}