Fonction:
setAlign( char tableau[], variable a incrémenter )
setAlign( String S, variable a incrémenter )
Description:
Permet de traiter les caractères un à un d'une chaîne de caractère encodée au format UTF8
en alignant une variable d'incrémentation
Arguments:
Le premier paramètre est un tableau de char ou une chaîne de caractères String
Le deuxième paramètre est une variable qui sera modifiée par la fonction afin d'ajuster l'incrémentation
car la fonction est prévue pour fonctionner dans une boucle
Valeur de retour:
Retourne 1 si la fonction réussie sinon renvoie 0.
Exemple:
for (unsigned int i = 0; i < strlen(texte); i++) {
if (KeyboardEx.setAlign(texte, i)) {
...
}
}
Code:
#include "Adafruit_TinyUSB.h" #include "KeyboardEx.h" // Report ID enum { RID_KEYBOARD = 1, // RID_MOUSE, RID_CONSUMER_CONTROL, // Media, volume etc .. }; // HID report descriptor using TinyUSB's template uint8_t const desc_hid_report[] = { //TUD_HID_REPORT_DESC_KEYBOARD(), TUD_HID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(RID_KEYBOARD) ), //TUD_HID_REPORT_DESC_MOUSE ( HID_REPORT_ID(RID_MOUSE) ), TUD_HID_REPORT_DESC_CONSUMER( HID_REPORT_ID(RID_CONSUMER_CONTROL) ) }; Adafruit_USBD_HID usb_hid; // -------------------------------------------------------------------------- const char texte[] = {"Article à 12€ en ce moment!"}; String chaine = {"La monnaie de la France est: € l'euro"}; void setup() { usb_hid.setPollInterval(2); usb_hid.setReportDescriptor(desc_hid_report, sizeof(desc_hid_report)); usb_hid.setReportCallback(get_report_callback , hid_report_callback); usb_hid.begin(); KeyboardEx.begin(usb_hid, RID_KEYBOARD); // KeyboardEx.setOS(Windows); // Si vous êtes sur Windows, permet l'utilisation des Alt Codes. // KeyboardEx.setDelay(5); // valeur par défaut, si problème augmenter la valeur à 10. // Commenter ces lignes si vous n'utilisez oas le port série Serial.begin(115200); while (!Serial) { ; // wait for serial port to connect. Needed for native USB } delay(6000); } void loop() { static int oneloop = 0; // n'aime pas le while(1) if (!oneloop) { oneloop = 1; // ************************************************************************************** // Test 1 de la fonction avancée -> setAlign(...) // ************************************************************************************** KeyboardEx.println(F("*** Test 1 de la fonction avancée -> setAlign(...) ***")); KeyboardEx.println(); KeyboardEx.println(texte); KeyboardEx.println(); for (unsigned int i = 0; i < strlen(texte); i++) { if (KeyboardEx.setAlign(texte, i)) { const char* character = KeyboardEx.getCharacter(); if (KeyboardEx.isLayout()) { // Correspond à une touche du clavier if (strcmp(character, "€") == 0) { KeyboardEx.println(); KeyboardEx.print("Monnaie de la France: "); KeyboardEx.println(character); } else { KeyboardEx.print(character); } } else { // Ne correspond pas à une touche du clavier KeyboardEx.altcodeWinln(character); // utilisation des Alt codes pour afficher le caractère sous Windows } } else { // Erreur, sortir immédiatement break; } } KeyboardEx.println(); KeyboardEx.println(); KeyboardEx.println(); KeyboardEx.println(chaine); KeyboardEx.println(); for (unsigned int i = 0; i < chaine.length(); i++) { if (KeyboardEx.setAlign(chaine, i)) { const char* character = KeyboardEx.getCharacter(); if (KeyboardEx.isLayout()) { // Correspond à une touche du clavier if (strcmp(character, "€") == 0) { KeyboardEx.println(); KeyboardEx.print("Monnaie de la France: "); KeyboardEx.println(character); } else { KeyboardEx.print(character); } } else { // Ne correspond pas à une touche du clavier KeyboardEx.altcodeWinln(character); // utilisation des Alt codes pour afficher le caractère sous Windows } } else { // Erreur, sortir immédiatement break; } } KeyboardEx.end(); } } uint16_t get_report_callback (uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) { // Mettre Null à la place de get_report_callback dans cette fonction ci- dessous déclarée plus haut // si vous souhaitez supprmer cette procédure // usb_hid.setReportCallback(get_report_callback , hid_report_callback) -> usb_hid.setReportCallback(Null , hid_report_callback); // not used in this example return 0; } // Output report callback for LED indicator such as Caplocks void hid_report_callback(uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) { uint8_t ledIndicator; // LED indicator is output report with only 1 byte length if ( report_type != HID_REPORT_TYPE_OUTPUT ) return; // KEYBOARD_LED_KANA (8) | KEYBOARD_LED_COMPOSE (3) | KEYBOARD_LED_SCROLLLOCK (4) | KEYBOARD_LED_CAPSLOCK (2) | KEYBOARD_LED_NUMLOCK (1) // buffer[0] si clavier seul // ou buffer[1] si plusieurs reports if (bufsize == 2) { ledIndicator = buffer[1]; } else { ledIndicator = buffer[0]; } // Allumer la led de la carte si CAPSLOCK (verrouillage des majuscule) est activé // La led ne s'allumera pas sur Adafruit QT py car c'est une Neopixel // mais sur un Seeeduino XIAO ok digitalWrite(LED_BUILTIN, !(ledIndicator & KEYBOARD_LED_CAPSLOCK)); } |
#include "Adafruit_TinyUSB.h" #include "KeyboardEx.h" // Report ID enum { RID_KEYBOARD = 1, // RID_MOUSE, RID_CONSUMER_CONTROL, // Media, volume etc .. }; // HID report descriptor using TinyUSB's template uint8_t const desc_hid_report[] = { //TUD_HID_REPORT_DESC_KEYBOARD(), TUD_HID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(RID_KEYBOARD) ), //TUD_HID_REPORT_DESC_MOUSE ( HID_REPORT_ID(RID_MOUSE) ), TUD_HID_REPORT_DESC_CONSUMER( HID_REPORT_ID(RID_CONSUMER_CONTROL) ) }; Adafruit_USBD_HID usb_hid; // -------------------------------------------------------------------------- void setup() { usb_hid.setPollInterval(2); usb_hid.setReportDescriptor(desc_hid_report, sizeof(desc_hid_report)); usb_hid.setReportCallback(get_report_callback , hid_report_callback); usb_hid.begin(); KeyboardEx.begin(usb_hid, RID_KEYBOARD); KeyboardEx.setOS(Windows); // Si vous êtes sur Windows, permet l'utilisation des Alt Codes. // KeyboardEx.setDelay(5); // valeur par défaut, si problème augmenter la valeur à 10. // Commenter ces lignes si vous n'utilisez oas le port série Serial.begin(115200); while (!Serial) { ; // wait for serial port to connect. Needed for native USB } delay(6000); } void loop() { static int oneloop = 0; // n'aime pas le while(1) if (!oneloop) { oneloop = 1; // ************************************************************************************** // Test 2 de la fonction avancée -> setAlign(...) // ************************************************************************************** KeyboardEx.println(F("*** Test 2 de la fonction avancée -> setAlign(...) ***")); const char chaine2[] = "Azerty~|^*¨+â«♕Ø"; for (unsigned int i = 0; i < strlen(chaine2); i++) { if (KeyboardEx.setAlign(chaine2, i)) { byte asciiEx = KeyboardEx.asciiEx(); byte isAsciiEx = KeyboardEx.isAsciiEx(); byte isLayout = KeyboardEx.isLayout(); byte isDeadKey = KeyboardEx.isDeadKey(); const char* character = KeyboardEx.getCharacter(); if (isAsciiEx) { // pour savoir si le caractère figure dans la table Ascii étendu KeyboardEx.print("Le caractère figure dans la table Ascii étendu -> "); if (isLayout) {// pour savoir si le clavier peut l'afficher KeyboardEx.printAsciiEx((char)asciiEx); KeyboardEx.print(" "); KeyboardEx.print("Le clavier Français gère ce caractère -> "); if (isDeadKey) { if (isDeadKey == 1) { KeyboardEx.print(" -> cette touche est un dead key -> "); } else { KeyboardEx.print(" -> cette touche est composé avec un dead key -> "); } } KeyboardEx.printAsciiExln(asciiEx); } else { KeyboardEx.altcodeWinEx(asciiEx); KeyboardEx.print(" -> mais le clavier Français ne peut pas l'afficher -> "); KeyboardEx.printAsciiExln(asciiEx); } } else { KeyboardEx.print("Ne figure pas dans la table ASCII étendu, incompatible avec le clavier Français -> "); KeyboardEx.altcodeWinln(character); } } else { // il y a eu un problème, on sort de la boucle KeyboardEx.println("Problème, on sort de la boucle!"); break; } } KeyboardEx.println(); KeyboardEx.end(); } } uint16_t get_report_callback (uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen) { // Mettre Null à la place de get_report_callback dans cette fonction ci- dessous déclarée plus haut // si vous souhaitez supprmer cette procédure // usb_hid.setReportCallback(get_report_callback , hid_report_callback) -> usb_hid.setReportCallback(Null , hid_report_callback); // not used in this example return 0; } // Output report callback for LED indicator such as Caplocks void hid_report_callback(uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) { uint8_t ledIndicator; // LED indicator is output report with only 1 byte length if ( report_type != HID_REPORT_TYPE_OUTPUT ) return; // KEYBOARD_LED_KANA (8) | KEYBOARD_LED_COMPOSE (3) | KEYBOARD_LED_SCROLLLOCK (4) | KEYBOARD_LED_CAPSLOCK (2) | KEYBOARD_LED_NUMLOCK (1) // buffer[0] si clavier seul // ou buffer[1] si plusieurs reports if (bufsize == 2) { ledIndicator = buffer[1]; } else { ledIndicator = buffer[0]; } // Allumer la led de la carte si CAPSLOCK (verrouillage des majuscule) est activé // La led ne s'allumera pas sur Adafruit QT py car c'est une Neopixel // mais sur un Seeeduino XIAO ok digitalWrite(LED_BUILTIN, !(ledIndicator & KEYBOARD_LED_CAPSLOCK)); } |