Aller au contenu

Écritures et lectures

Ces fonctions sont toutes les façons disponibles pour communiquer avec les appareils USB connectés dans vos plugins. Les commandes sont divisées en deux types de lectures et d’écritures selon les protocoles de l’appareil, et des transferts de contrôle qui permettent des commandes de poignée de main et des fonctionnalités avancées.

Cette fonction effectue une commande Hid_Write sur le point de terminaison actuellement sélectionné de l’appareil. C’est la fonction d’écriture que la plupart des appareils utilisent et sera la commande la plus couramment utilisée.

  • Remarque : Une autre variante d’écriture est device.send_report. C’est la commande d’écriture utilisée pour envoyer des rapports de fonctionnalités HID à l’appareil. La fonctionnalité est par ailleurs la même que device.write().
  • Remarque : Définir une longueur plus grande que le tableau de données fourni remplira la fin du tableau avec 0x00.
  • Remarque : La plupart des appareils HID effectuent un rembourrage zéro en début de leurs commandes d’écriture. Cela se fait en plaçant un 0x00 supplémentaire devant votre DataArray et en augmentant la longueur d’une unité. Ces valeurs sont supprimées par l’appareil lors du transfert de données. Cela se produit principalement lorsque l’appareil n’a pas d’identifiant de rapport pour le point de terminaison sélectionné.
ParamètreTypeDescriptionExemple
DataArrayTableau 1DUn tableau contenant des octets hexadécimaux à envoyer à l’appareil[0x08,0xAB,0xFF,0x37]
LengthIntUne valeur entière représentant la longueur totale du paquet à envoyer4

Voici un exemple d’un paquet des contrôleurs LED ASUS montrant la création et la livraison à l’appareil.

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

Cet appel de fonction prend un tableau contenant un identifiant de rapport de point de terminaison et la longueur d’octets à lire et effectue un Hid_Read sur l’appareil. La fonction retourne un tableau d’octets lus depuis l’appareil. Certains appareils nécessitent une lecture pour empêcher les débordements de tampon et ont parfois besoin de lire des données de configuration ou de paramètres depuis les appareils.

  • Remarque : Une autre variante de lecture est :
  • device.read_report*. C’est la commande de lecture utilisée pour obtenir des rapports de fonctionnalités HID depuis l’appareil. La fonctionnalité est par ailleurs la même que device.read().
ParamètreTypeDescriptionExemple
DataArrayTableau 1DUn tableau contenant l’identifiant de rapport nécessaire pour la commande de lecture[0x08, 0x02]
LengthIntUne valeur entière représentant le nombre d’octets à lire65
RetourTypeDescriptionExemple
DataArrayTableau 1DUn tableau contenant tous les octets HEX lus depuis l’appareil[0x08, 0x02,0x00,0x64]
  • Remarque : Cette fonction retourne un tableau de données correspondant à la longueur du rapport de l’appareil. Si vous avez besoin du nombre réel d’octets lus, utilisez device.getLastReadSize()
var config = device.read(packet, 65);

Cette fonction retourne le nombre d’octets lus par la dernière opération read/get_report effectuée sur l’appareil.

RetourTypeDescriptionExemple
BytesReadIntNombre d’octets lus depuis l’appareil64

Voici un exemple de la souris 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
}

Cette fonction tente de vider entièrement le tampon de lecture de l’appareil. Cela peut être utile pour réinitialiser avant que des lectures critiques soient effectuées sur l’appareil.

  • Remarque : L’utilité de cette fonction dépend de l’appareil et du point de terminaison. Si l’appareil ne gère pas le vidage, vous devrez peut-être le vider manuellement avec des lectures en boucle jusqu’à ce que device.getLastReadSize() retourne 0 octets.
export function Initialize(){
device.flush()
if(Corsair_Get(CORSAIR_MODE) == CORSAIR_HARDWARE_MODE){
EnableSoftwareControl();
}
}