Implemented send-lock for 'thread-safety'
Implemented incoming command handling
This commit is contained in:
46
src/main.cpp
46
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<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é
|
||||
|
||||
Reference in New Issue
Block a user