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