From 0cdf271d01acd455435f4d7d0c5b8969a52dc499 Mon Sep 17 00:00:00 2001 From: Alex Alvarado <931857-alexb737@users.noreply.gitlab.com> Date: Tue, 17 May 2022 12:21:13 +0200 Subject: [PATCH] Implemented send-lock for 'thread-safety' Implemented incoming command handling --- src/main.cpp | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 8572170..f2c6e11 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -41,25 +41,38 @@ void requestHandler() void receiveHandler(int length) { - for (uint8_t i = 0; i < length; i++) + sendLock = true; + int i = 0; + while (Wire.available() > 0) + { master_data[i] = Wire.read(); + i++; + } + sendLock = false; // El mensaje es un comando de cronómetro - //if (master_data[0] == ChronoAPICommand::type) - //{ - // switch ((ChronoCommands)master_data) - // { - // case (ChronoCommands::ForceStart): - // started = true; - // break; - // case (ChronoCommands::ForceStop): - // started = false; - // break; - // case (ChronoCommands::ForceReset): - // reference = millis(); - // break; - // } - //} + if (master_data[0] == DATAGRAM_HDR) + { + buffer comBuffer; + for (size_t i = 0; i < sizeof(comBuffer.data); i++) + comBuffer.buffer[i] = master_data[i]; + + switch (comBuffer.data.command) + { + case (ChronoCommands::ForceStart): + reference = millis(); + ms.data = 0; + started = true; + break; + case (ChronoCommands::ForceStop): + started = false; + break; + case (ChronoCommands::ForceReset): + reference = millis(); + ms.data = 0; + break; + } + } } // Vector INT0 para detectar interrupciones @@ -110,7 +123,6 @@ void setup() void loop() { - if (started) // Si el cronómetro está funcionando: ms.data = millis() - reference; // Actualizar marca de tiempo delay(1); // Darle tiempo al attiny para que se haga un café