Moved measuring into separate thread (thus decreasing response to registers change)

This commit is contained in:
ftc
2020-12-09 09:00:20 +03:00
parent 68bb96a301
commit 07afde2125
4 changed files with 62 additions and 27 deletions
+37
View File
@@ -0,0 +1,37 @@
#include "TemperatureThread.h"
#include "libdiff.h"
#include <unistd.h>
TemperatureThread::TemperatureThread(const string &cmd) : cmd(cmd)
{
}
string Read(FILE *f)
{
char buffer[256];
string result = "";
while (fgets(buffer, sizeof(buffer), f) != nullptr)
{
result += buffer;
}
return result;
}
void TemperatureThread::Run()
{
while (true)
{
float temperature = 1.5;
auto output = popen(cmd.c_str(), "r");
if (output == nullptr) return;
string value = Read(output);
pclose(output);
temperature = atof(value.c_str());
LockMutex(register_mutex);
registers[REGISTER_CUR_TEMP] = (int)(temperature * 100);
registers[REGISTER_SECONDARY_TEMP] = (int)(temperature * 100);
ReleaseMutex(register_mutex);
sleep(2);
}
}