Implemented send-lock for 'thread-safety'

Implemented incoming command handling
This commit is contained in:
Alex Alvarado
2022-05-17 12:21:13 +02:00
parent 04ecf53452
commit 0cdf271d01

View File

@ -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<ChronoAPICommand> 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é