[*** Fonctions exclusives pour l'OS Windows***]:
altcodeWinEx[ln]( char )
altcodeWinEx[ln]( char tableau[] )
altcodeWinEx[ln]( String s )
altcodeWinEx[ln]( F("chaîne) ) // F() copie la chaîne de caractères en mémoire flash
Description:
Alt Code est indépendant de la langue du clavier, il donnera toujours le même résultat
Pour info, le code page CP1252 est utilisé sous Windows pour les caractères imprimables de la table ASCII étendu de 0 à 255
Arguments:
L'argument doit être une valeur (0 à 255), un char ou une chaîne de valeur au format ASCII étendu.
Utilisation de la macro F() possible.
Valeur de retour ( size_t ):
Retourne le nombre de caractères de la chaîne qui est égale au nombre d'octets puisque la chaîne est encodée au format ASCII étendu
ou 0 en cas d'erreur
Exemple:
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; // -------------------------------------------------------------------------- // Tableau de caractères de la Table ASCII étendue // ne comprend que des caractères sur 1 octet // A ^ À Ñ ? @ const byte texte[] = {0x41, 0x5E, 0xC0, 0xD1, 0x3F, 0x40, 0}; // 0 caractère null de fin de chaîne 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); } // keyEx_error = 0, // si erreur // keyEx_simpleKey = 1, // si touche simple ou dead key seul // keyEx_composeKey = 2, // si touche composée // keyEx_deadKey = 4, // si dead key // keyEx_isLayout = 8, // le clavier ne le gère pas void loop() { static int oneloop = 0; int a; // n'aime pas le while(1) if (!oneloop) { oneloop = 1; // ****************************************************************************************************** // Test de la fonction altcodeWinEx(ln)(...) // ****************************************************************************************************** KeyboardEx.altcodeWinExln(F("*** Test de la fonction altcodeWinEx(ln)(...) ***")); // fonctionne directement avec la chaine (char) KeyboardEx.altcodeWinExln(); // car caractère < 128 unsigned int totalCaractere = KeyboardEx.altcodeWinExln((char *)texte); KeyboardEx.print("Nombre de caractères :"); KeyboardEx.println(totalCaractere); KeyboardEx.altcodeWinExln(); KeyboardEx.altcodeWinExln(); // Création d'un tableau de caractères au format ASCII étendu // les valeurs suivantes ne correpondent pas à des caractères: // 127, 129, 141, 143 144, 157 a = 32; byte chaineAsciiEx[218 + 1]; // + 1 pour le caractère nul for (unsigned int i = 0; i < 218; ++i) { if (a == 127 || a == 129 || a == 141 || a == 143 || a == 157) { a += 1; if (a == 144) { a += 1; } } chaineAsciiEx[i] = a ; a += 1; } chaineAsciiEx[218] = '\0'; // important!!! totalCaractere = KeyboardEx.altcodeWinExln((char *)chaineAsciiEx); KeyboardEx.print("Nombre de caractères :"); KeyboardEx.println(totalCaractere); KeyboardEx.altcodeWinExln(); KeyboardEx.altcodeWinExln(); // Création d'un objet String au format ASCII étendu // les valeurs suivantes ne correpondent pas à des caractères: // 127, 129, 141, 143 144, 157 a = 32; String chaine; for (unsigned int i = 0; i < 218; ++i) { if (a == 127 || a == 129 || a == 141 || a == 143 || a == 157) { a += 1; if (a == 144) { a += 1; } } chaine = chaine + String((char)a) ; a += 1; } totalCaractere = KeyboardEx.altcodeWinExln(chaine); KeyboardEx.print("Nombre de caractères :"); KeyboardEx.println(totalCaractere); KeyboardEx.altcodeWinExln(); KeyboardEx.altcodeWinExln(); KeyboardEx.altcodeWinExln((char)164); // -> ¤ char c = 165; KeyboardEx.altcodeWinExln(c); // -> ¥ Alt Code nécessaire pour afficher ce caractère // car en dehors de la table (Le clavier Fr ne le gère pas) KeyboardEx.altcodeWinExln(); 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)); } |