Pular para o conteúdo

Escritas e Leituras

Essas funções são todas as formas disponíveis de comunicação com os dispositivos USB conectados nos seus plugins. Os comandos são divididos em dois tipos de leituras e escritas dependendo dos protocolos do dispositivo, e transferências de controle que permitem comandos de handshake e funcionalidades avançadas.

Esta função executa um comando Hid_Write no endpoint atualmente selecionado do dispositivo. Esta é a função de escrita que a maioria dos dispositivos usa e será o comando mais utilizado.

  • Nota: Outro tipo de escrita é o device.send_report. Este é o comando de escrita usado para enviar relatórios de feature HID ao dispositivo. A funcionalidade é idêntica à do device.write().
  • Nota: Definir um comprimento maior do que o array de dados fornecido irá preencher o final do array com 0x00.
  • Nota: A maioria dos dispositivos HID faz o zero padding no início dos seus comandos de escrita. Isso é feito colocando um 0x00 extra na frente do seu DataArray e aumentando o comprimento em um. Esses valores são removidos pelo dispositivo durante a transferência de dados. Isso ocorre principalmente quando o dispositivo não tem Report ID para o Endpoint selecionado.
ParâmetroTipoDescriçãoExemplo
DataArrayArray 1DUm Array contendo bytes Hex para enviar ao dispositivo[0x08,0xAB,0xFF,0x37]
LengthIntUm valor Int representando o comprimento total do pacote a enviar4

Abaixo está um exemplo de um pacote dos controladores de LED ASUS mostrando a criação e envio ao dispositivo.

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

Esta chamada de função recebe um array contendo um Report Id de endpoint e o número de bytes a ler, e executa um Hid_Read no dispositivo. A função retorna um array de bytes lidos do dispositivo. Alguns dispositivos requerem uma leitura para evitar estouro de buffer e ocasionalmente precisam ler dados de configuração ou definições dos dispositivos.

  • Nota: Outro tipo de leitura é:
  • device.read_report*. Este é o comando de leitura usado para obter relatórios de feature HID do dispositivo. A funcionalidade é idêntica à do device.read().
ParâmetroTipoDescriçãoExemplo
DataArrayArray 1DUm array contendo o Report Id necessário para o comando de leitura[0x08, 0x02]
LengthIntUm valor Int representando o número de bytes a ler65
RetornoTipoDescriçãoExemplo
DataArrayArray 1DUm array contendo todos os bytes HEX lidos do dispositivo[0x08, 0x02,0x00,0x64]
  • Nota: Esta função retorna um Data Array com o comprimento do Report do dispositivo. Se você precisar da contagem real de bytes lidos, use device.getLastReadSize()
var config = device.read(packet, 65);

Esta função retorna o número de bytes lidos pela última leitura/get_report feita no dispositivo.

RetornoTipoDescriçãoExemplo
BytesReadIntNúmero de bytes lidos do dispositivo64

Abaixo está um exemplo do 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
}

Esta função tenta limpar completamente o buffer de leitura do dispositivo. Isso pode ser útil para resetar antes de qualquer leitura crítica ser feita no dispositivo.

  • Nota: A utilidade desta função depende do dispositivo e do endpoint. Se o dispositivo não suportar flush, pode ser necessário limpá-lo manualmente com leituras em loop até que device.getLastReadSize() retorne 0 bytes.
export function Initialize(){
device.flush()
if(Corsair_Get(CORSAIR_MODE) == CORSAIR_HARDWARE_MODE){
EnableSoftwareControl();
}
}