É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.
device.write()[send_report]
Section intitulée « device.write()[send_report] »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ètre | Type | Description | Exemple |
|---|---|---|---|
| DataArray | Tableau 1D | Un tableau contenant des octets hexadécimaux à envoyer à l’appareil | [0x08,0xAB,0xFF,0x37] |
| Length | Int | Une valeur entière représentant la longueur totale du paquet à envoyer | 4 |
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 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 intitulée « device.read()[get_report] »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ètre | Type | Description | Exemple |
|---|---|---|---|
| DataArray | Tableau 1D | Un tableau contenant l’identifiant de rapport nécessaire pour la commande de lecture | [0x08, 0x02] |
| Length | Int | Une valeur entière représentant le nombre d’octets à lire | 65 |
| Retour | Type | Description | Exemple |
|---|---|---|---|
| DataArray | Tableau 1D | Un 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);device.getLastReadSize()
Section intitulée « device.getLastReadSize() »Cette fonction retourne le nombre d’octets lus par la dernière opération read/get_report effectuée sur l’appareil.
| Retour | Type | Description | Exemple |
|---|---|---|---|
| BytesRead | Int | Nombre d’octets lus depuis l’appareil | 64 |
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
}device.control_transfer()
Section intitulée « device.control_transfer() »device.flush()
Section intitulée « device.flush() »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(); }}