OpenDTU-old/lib/Hoymiles/src/parser/SystemConfigParaParser.cpp
helgeerbe 2eeb5f1d19 Revert "Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development"
This reverts commit eb1c2dbd8c, reversing
changes made to 0cb42a6424.

merge of v23.9.11 broke the system
2023-09-12 20:18:10 +02:00

104 lines
2.5 KiB
C++

// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2022 Thomas Basler and others
*/
#include "SystemConfigParaParser.h"
#include "../Hoymiles.h"
#include <cstring>
#define HOY_SEMAPHORE_TAKE() \
do { \
} while (xSemaphoreTake(_xSemaphore, portMAX_DELAY) != pdPASS)
#define HOY_SEMAPHORE_GIVE() xSemaphoreGive(_xSemaphore)
SystemConfigParaParser::SystemConfigParaParser()
: Parser()
{
_xSemaphore = xSemaphoreCreateMutex();
HOY_SEMAPHORE_GIVE(); // release before first use
clearBuffer();
}
void SystemConfigParaParser::clearBuffer()
{
memset(_payload, 0, SYSTEM_CONFIG_PARA_SIZE);
_payloadLength = 0;
}
void SystemConfigParaParser::appendFragment(uint8_t offset, uint8_t* payload, uint8_t len)
{
if (offset + len > (SYSTEM_CONFIG_PARA_SIZE)) {
Hoymiles.getMessageOutput()->printf("FATAL: (%s, %d) stats packet too large for buffer\r\n", __FILE__, __LINE__);
return;
}
memcpy(&_payload[offset], payload, len);
_payloadLength += len;
}
void SystemConfigParaParser::beginAppendFragment()
{
HOY_SEMAPHORE_TAKE();
}
void SystemConfigParaParser::endAppendFragment()
{
HOY_SEMAPHORE_GIVE();
}
float SystemConfigParaParser::getLimitPercent()
{
HOY_SEMAPHORE_TAKE();
float ret = ((((uint16_t)_payload[2]) << 8) | _payload[3]) / 10.0;
HOY_SEMAPHORE_GIVE();
return ret;
}
void SystemConfigParaParser::setLimitPercent(float value)
{
HOY_SEMAPHORE_TAKE();
_payload[2] = ((uint16_t)(value * 10)) >> 8;
_payload[3] = ((uint16_t)(value * 10));
HOY_SEMAPHORE_GIVE();
}
void SystemConfigParaParser::setLastLimitCommandSuccess(LastCommandSuccess status)
{
_lastLimitCommandSuccess = status;
}
LastCommandSuccess SystemConfigParaParser::getLastLimitCommandSuccess()
{
return _lastLimitCommandSuccess;
}
uint32_t SystemConfigParaParser::getLastUpdateCommand()
{
return _lastUpdateCommand;
}
void SystemConfigParaParser::setLastUpdateCommand(uint32_t lastUpdate)
{
_lastUpdateCommand = lastUpdate;
setLastUpdate(lastUpdate);
}
void SystemConfigParaParser::setLastLimitRequestSuccess(LastCommandSuccess status)
{
_lastLimitRequestSuccess = status;
}
LastCommandSuccess SystemConfigParaParser::getLastLimitRequestSuccess()
{
return _lastLimitRequestSuccess;
}
uint32_t SystemConfigParaParser::getLastUpdateRequest()
{
return _lastUpdateRequest;
}
void SystemConfigParaParser::setLastUpdateRequest(uint32_t lastUpdate)
{
_lastUpdateRequest = lastUpdate;
setLastUpdate(lastUpdate);
}