altcodeWin[ln](...)

Parent Previous Next


[*** Fonctions exclusives pour l'OS Windows***]:

altcodeWin[ln]( char )

altcodeWin[ln]( char tableau[] )

altcodeWin[ln]( String S )

altcodeWin[ln]( F( char tableau[] ) )                        // F() copie la chaîne de caractères en mémoire flash


altcodeWin[ln]( Valeur numérique non signée )                // valeur max 0x10FFFF


Description:

       Permet d'envoyer un caractère Unicode avec Alt Code (ALT + Valeur numérique)

       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

       sinon la table Unicode est utilisée.


Arguments:

       Un char, un tableau de char, une chaîne de caractère String ou une valeur numérique.

       Un caractère codée en UTF8 peut occupé de 1 à 4 octets, il est compatible avec la table ASCII

       (La valeur max d'un caractère UTF8 occupera 21 bits utiles, soit 0x10 FF FF valeur max Unicode)

       Utilisation de la macro F() possible


Valeur de retour ( size_t ):

Retourne le nombre de caractère de la chaîne et en cas d'erreur renvoie 0.



Exemple:

       KeyboardEx.altcodeWinln("Arduino")



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;

// --------------------------------------------------------------------------


// permet de passer un tableau en mémoire Flash en argument

// voir ici https://forum.arduino.cc/index.php?topic=110307.0

#define FS(x) (const __FlashStringHelper*)(x)


const char chaine_ASCII_ETENDU[] PROGMEM = {" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"};


char clavier[] = {"Clavier"};


String francais = {"Français"};



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;

 byte ret = 0;

 size_t totalCaractere;


 // n'aime pas le while(1)

 if (!oneloop) {

   oneloop = 1;


   // **************************************************************************************

   //  Test 1 de la fonction -> KeyboardEx.altcodeWin(ln)(...)

   // **************************************************************************************

   totalCaractere = KeyboardEx.altcodeWinln(F("*** Test 1 de la fonction -> KeyboardEx.altcodeWin(ln)(...) ***"));

   KeyboardEx.print("Nombre de caractères de la chaine: ");

   KeyboardEx.println(totalCaractere);


   totalCaractere = KeyboardEx.altcodeWinln(FS(chaine_ASCII_ETENDU));

   KeyboardEx.print("Nombre de caractères de la chaine: ");

   KeyboardEx.println(totalCaractere);

   KeyboardEx.altcodeWinln();


   totalCaractere = KeyboardEx.altcodeWinln(clavier);

   KeyboardEx.print("Nombre de caractères de la chaine: ");

   KeyboardEx.println(totalCaractere);

   KeyboardEx.altcodeWinln();


   totalCaractere = KeyboardEx.altcodeWinln(francais);

   KeyboardEx.print("Nombre de caractères de la chaine: ");

   KeyboardEx.println(totalCaractere);

   KeyboardEx.altcodeWinln();


   KeyboardEx.altcodeWinln("Changer la langue du clavier, vous avez 10 secondes!");

   delay(10000);


   KeyboardEx.altcodeWinln();

   totalCaractere = KeyboardEx.altcodeWinln(FS(chaine_ASCII_ETENDU));

   KeyboardEx.print("Nombre de caractères de la chaine: ");

   KeyboardEx.println(totalCaractere);


   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;

// --------------------------------------------------------------------------


// permet de passer un tableau en mémoire Flash en argument

// voir ici https://forum.arduino.cc/index.php?topic=110307.0

#define FS(x) (const __FlashStringHelper*)(x)


const char* unicode PROGMEM = {"Roi blanc  ♔\rDame blanche ♕\rTour blanche ♖\rFou blanc  ♗\rCavalier blanc ♘\rPion blanc ♙\rRoi noir   ♚\rDame noire ♛\rTour noire ♜\rFou noir ♝\rCavalier noir  ♞\rPion noir  ♟"};


// Fonctionnera sur Wordpad mais pas sur Notepad pour les caractères unicodes

String emoji = {"� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �"};



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;

 byte ret = 0;

 size_t totalCaractere;


 // n'aime pas le while(1)

 if (!oneloop) {

   oneloop = 1;


   // **************************************************************************************

   //  Test 2 de la fonction -> KeyboardEx.altcodeWin(ln)(...)

   // **************************************************************************************

   KeyboardEx.altcodeWinln(F("*** Test 2 de la fonction -> KeyboardEx.altcodeWin(ln)(...) ***"));


   totalCaractere = KeyboardEx.altcodeWinln(FS(unicode));

   KeyboardEx.print("Nombre de caractères de la chaine: ");

   KeyboardEx.println(totalCaractere);

   KeyboardEx.altcodeWinln();

   KeyboardEx.altcodeWinln();


   totalCaractere = KeyboardEx.altcodeWinln(emoji);

   KeyboardEx.print("Nombre de caractères de la chaine: ");

   KeyboardEx.println(totalCaractere);

   KeyboardEx.altcodeWinln();

   KeyboardEx.altcodeWinln();


   // print utilise la fonction altcodeWin en interne

   // seulement pour les caractères que le clavier ne peut gérer

   totalCaractere = KeyboardEx.println(unicode);

   KeyboardEx.print("Nombre de caractères de la chaine: ");

   KeyboardEx.println(totalCaractere);

   KeyboardEx.println();

   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));

}