From df28c32cfb8a818c2185c324a8ebf25c186f1dbf Mon Sep 17 00:00:00 2001 From: Alex Alvarado <931857-alexb737@users.noreply.gitlab.com> Date: Tue, 17 May 2022 12:07:34 +0200 Subject: [PATCH] Created mid-level I2C comunication API --- include/I2C_COM_API.hpp | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 include/I2C_COM_API.hpp diff --git a/include/I2C_COM_API.hpp b/include/I2C_COM_API.hpp new file mode 100644 index 0000000..331ced6 --- /dev/null +++ b/include/I2C_COM_API.hpp @@ -0,0 +1,43 @@ +#define DATAGRAM_HDR 0xAA + +// Comandos del cronómetro +enum ChronoCommands : uint8_t +{ + Null = 0x00, // Comando nulo + ForceStart = 0x01, // Forzar inicio + ForceStop = 0x02, // Forzar detención + ForceReset = 0x04 // Forcer reinicio del cronómetro +}; + +// Modos de operación del dispositivo +enum DeviceModes : uint8_t +{ + CHRONO = 0x00 // Modo Cronómetro +}; + +// Estructura para un comando de la API sin datos +struct ChronoAPICommand +{ + uint8_t type; // Cabecera de Comando + ChronoCommands command; // Comando solicitado +}; +// Unión genérica para serializar y des-serializar tipos +template +union buffer +{ + T data; + uint8_t buffer[sizeof(T)]; +}; +bool sendLock = false; +// Función para enviar un buffer por I2C +template +void SendBuffer(buffer buffer) +{ + while (sendLock) + delay(1); + sendLock = true; + + Wire.flush(); + Wire.write(buffer.buffer, sizeof(T)); + sendLock = false; +} \ No newline at end of file