clean
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
/**
|
||||
* @file multiplatform_event_handler.cpp
|
||||
* @brief Gestionnaire d'événements ADB multiplateforme
|
||||
*
|
||||
* Cet exemple implémente un gestionnaire d'événements avancé pour les périphériques ADB.
|
||||
* Il est compatible avec toutes les plateformes prises en charge et montre comment traiter
|
||||
* les événements du clavier et de la souris de manière événementielle.
|
||||
*
|
||||
* @author Clément SAILLANT - L'électron rare
|
||||
* @copyright Copyright (C) 2025 Clément SAILLANT
|
||||
* @license GNU GPL v3
|
||||
*/
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "adb.h"
|
||||
|
||||
// Configuration spécifique à la plateforme
|
||||
#if defined(ARDUINO_ARCH_AVR)
|
||||
#define ADB_PIN 2
|
||||
#elif defined(ARDUINO_ARCH_STM32)
|
||||
#define ADB_PIN PB4
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
#define ADB_PIN 21
|
||||
#elif defined(TEENSYDUINO)
|
||||
#define ADB_PIN 3
|
||||
#else
|
||||
#define ADB_PIN 2
|
||||
#endif
|
||||
|
||||
// Paramètres communs
|
||||
constexpr uint32_t SERIAL_BAUD = 115200;
|
||||
constexpr uint16_t POLL_INTERVAL = 20; // Intervalle court pour la réactivité
|
||||
|
||||
// Initialisation des objets
|
||||
ADB adb(ADB_PIN);
|
||||
ADBDevices devices(adb);
|
||||
|
||||
// État du système
|
||||
uint8_t lastKeys[2] = {0, 0};
|
||||
bool lastReleased[2] = {true, true};
|
||||
int8_t lastX = 0, lastY = 0;
|
||||
bool lastButton = false;
|
||||
|
||||
// Fonctions de traitement des événements
|
||||
void onKeyPressed(uint8_t keyCode) {
|
||||
Serial.print(F("Touche pressée: 0x"));
|
||||
Serial.print(keyCode, HEX);
|
||||
|
||||
// Affichage du code HID équivalent si disponible
|
||||
uint8_t hidCode = ADBKeymap::toHID(keyCode);
|
||||
if (hidCode != KEY_NONE) {
|
||||
Serial.print(F(" (HID: 0x"));
|
||||
Serial.print(hidCode, HEX);
|
||||
Serial.print(F(")"));
|
||||
}
|
||||
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
void onKeyReleased(uint8_t keyCode) {
|
||||
Serial.print(F("Touche relâchée: 0x"));
|
||||
Serial.println(keyCode, HEX);
|
||||
}
|
||||
|
||||
void onMouseMove(int8_t deltaX, int8_t deltaY) {
|
||||
Serial.print(F("Souris - Mouvement: ("));
|
||||
Serial.print(deltaX);
|
||||
Serial.print(F(", "));
|
||||
Serial.print(deltaY);
|
||||
Serial.println(F(")"));
|
||||
}
|
||||
|
||||
void onMouseButtonChange(bool isPressed) {
|
||||
Serial.print(F("Souris - Bouton: "));
|
||||
Serial.println(isPressed ? F("Pressé") : F("Relâché"));
|
||||
}
|
||||
|
||||
void setup() {
|
||||
// Configuration de la communication série
|
||||
Serial.begin(SERIAL_BAUD);
|
||||
while (!Serial && millis() < 3000);
|
||||
|
||||
// Initialisation du bus ADB
|
||||
adb.init();
|
||||
Serial.println(F("Gestionnaire d'événements ADB multiplateforme initialisé"));
|
||||
Serial.println(F("En attente d'événements..."));
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// Traitement des événements clavier
|
||||
bool error = false;
|
||||
auto keyPress = devices.keyboardReadKeyPress(&error);
|
||||
|
||||
if (!error) {
|
||||
// Vérification de la première touche
|
||||
if (keyPress.data.key0 != lastKeys[0] || keyPress.data.released0 != lastReleased[0]) {
|
||||
if (keyPress.data.key0 != 0) {
|
||||
if (!keyPress.data.released0 && lastReleased[0]) {
|
||||
onKeyPressed(keyPress.data.key0);
|
||||
} else if (keyPress.data.released0 && !lastReleased[0]) {
|
||||
onKeyReleased(keyPress.data.key0);
|
||||
}
|
||||
}
|
||||
lastKeys[0] = keyPress.data.key0;
|
||||
lastReleased[0] = keyPress.data.released0;
|
||||
}
|
||||
|
||||
// Vérification de la seconde touche
|
||||
if (keyPress.data.key1 != lastKeys[1] || keyPress.data.released1 != lastReleased[1]) {
|
||||
if (keyPress.data.key1 != 0) {
|
||||
if (!keyPress.data.released1 && lastReleased[1]) {
|
||||
onKeyPressed(keyPress.data.key1);
|
||||
} else if (keyPress.data.released1 && !lastReleased[1]) {
|
||||
onKeyReleased(keyPress.data.key1);
|
||||
}
|
||||
}
|
||||
lastKeys[1] = keyPress.data.key1;
|
||||
lastReleased[1] = keyPress.data.released1;
|
||||
}
|
||||
}
|
||||
|
||||
// Traitement des événements souris
|
||||
error = false;
|
||||
auto mouseData = devices.mouseReadData(&error);
|
||||
|
||||
if (!error) {
|
||||
int8_t xMove = adbMouseConvertAxis(mouseData.data.x_offset);
|
||||
int8_t yMove = adbMouseConvertAxis(mouseData.data.y_offset);
|
||||
|
||||
// Détection du mouvement
|
||||
if (xMove != 0 || yMove != 0) {
|
||||
onMouseMove(xMove, yMove);
|
||||
}
|
||||
|
||||
// Détection du changement d'état du bouton
|
||||
if (mouseData.data.button != lastButton) {
|
||||
onMouseButtonChange(mouseData.data.button);
|
||||
lastButton = mouseData.data.button;
|
||||
}
|
||||
}
|
||||
|
||||
// Fréquence de polling élevée pour une bonne réactivité
|
||||
delay(POLL_INTERVAL);
|
||||
}
|
||||
Reference in New Issue
Block a user