diff --git a/include/I2C_COM_API.hpp b/include/I2C_COM_API.hpp index ae7295e..331ced6 100644 --- a/include/I2C_COM_API.hpp +++ b/include/I2C_COM_API.hpp @@ -1,13 +1,16 @@ +#define DATAGRAM_HDR 0xAA + // Comandos del cronómetro -enum ChronoCommands +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 +enum DeviceModes : uint8_t { CHRONO = 0x00 // Modo Cronómetro }; @@ -15,10 +18,9 @@ enum DeviceModes // Estructura para un comando de la API sin datos struct ChronoAPICommand { - const static char type = 0xAA; // Cabecera de Comando - ChronoCommands command; // Comando solicitado + uint8_t type; // Cabecera de Comando + ChronoCommands command; // Comando solicitado }; - // Unión genérica para serializar y des-serializar tipos template union buffer @@ -26,13 +28,16 @@ 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.beginTransmission(0x26); Wire.write(buffer.buffer, sizeof(T)); - Wire.endTransmission(); + sendLock = false; } \ No newline at end of file