mirror of
https://github.com/Laxilef/OTGateway.git
synced 2025-12-10 18:24:27 +05:00
refactor: code style
This commit is contained in:
@@ -2,35 +2,37 @@
|
||||
#include <OpenTherm.h>
|
||||
|
||||
class CustomOpenTherm : public OpenTherm {
|
||||
private:
|
||||
unsigned long prevRequestTime = 0;
|
||||
void(*handleSendRequestCallback)(unsigned long, unsigned long, OpenThermResponseStatus status, byte attempt) = nullptr;
|
||||
void(*yieldCallback)(void*) = nullptr;
|
||||
void* yieldArg = nullptr;
|
||||
|
||||
public:
|
||||
typedef std::function<void()> YieldCallback;
|
||||
typedef std::function<void(unsigned long, byte)> BeforeSendRequestCallback;
|
||||
typedef std::function<void(unsigned long, unsigned long, OpenThermResponseStatus, byte)> AfterSendRequestCallback;
|
||||
|
||||
CustomOpenTherm(int inPin = 4, int outPin = 5, bool isSlave = false) : OpenTherm(inPin, outPin, isSlave) {}
|
||||
void setHandleSendRequestCallback(void(*handleSendRequestCallback)(unsigned long, unsigned long, OpenThermResponseStatus status, byte attempt)) {
|
||||
this->handleSendRequestCallback = handleSendRequestCallback;
|
||||
|
||||
CustomOpenTherm* setYieldCallback(YieldCallback callback = nullptr) {
|
||||
this->yieldCallback = callback;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
void setYieldCallback(void(*yieldCallback)(void*)) {
|
||||
this->yieldCallback = yieldCallback;
|
||||
this->yieldArg = nullptr;
|
||||
CustomOpenTherm* setBeforeSendRequestCallback(BeforeSendRequestCallback callback = nullptr) {
|
||||
this->beforeSendRequestCallback = callback;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
void setYieldCallback(void(*yieldCallback)(void*), void* arg) {
|
||||
this->yieldCallback = yieldCallback;
|
||||
this->yieldArg = arg;
|
||||
CustomOpenTherm* setAfterSendRequestCallback(AfterSendRequestCallback callback = nullptr) {
|
||||
this->afterSendRequestCallback = callback;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
unsigned long sendRequest(unsigned long request, byte attempts = 5, byte _attempt = 0) {
|
||||
_attempt++;
|
||||
bool antiFreeze = true;
|
||||
while (antiFreeze || (this->prevRequestTime > 0 && millis() - this->prevRequestTime <= 200)) {
|
||||
if (this->yieldCallback != nullptr) {
|
||||
this->yieldCallback(yieldArg);
|
||||
|
||||
if (this->yieldCallback) {
|
||||
this->yieldCallback();
|
||||
} else {
|
||||
::yield();
|
||||
}
|
||||
@@ -40,6 +42,10 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
if (this->beforeSendRequestCallback) {
|
||||
this->beforeSendRequestCallback(request, _attempt);
|
||||
}
|
||||
|
||||
unsigned long _response;
|
||||
if (!sendRequestAync(request)) {
|
||||
_response = 0;
|
||||
@@ -52,9 +58,8 @@ public:
|
||||
break;
|
||||
}
|
||||
|
||||
if (this->yieldCallback != nullptr) {
|
||||
this->yieldCallback(yieldArg);
|
||||
|
||||
if (this->yieldCallback) {
|
||||
this->yieldCallback();
|
||||
} else {
|
||||
::yield();
|
||||
}
|
||||
@@ -65,8 +70,8 @@ public:
|
||||
this->prevRequestTime = millis();
|
||||
|
||||
OpenThermResponseStatus _responseStatus = getLastResponseStatus();
|
||||
if (this->handleSendRequestCallback != nullptr) {
|
||||
this->handleSendRequestCallback(request, _response, _responseStatus, _attempt);
|
||||
if (this->afterSendRequestCallback) {
|
||||
this->afterSendRequestCallback(request, _response, _responseStatus, _attempt);
|
||||
}
|
||||
|
||||
if (_responseStatus == OpenThermResponseStatus::SUCCESS || _responseStatus == OpenThermResponseStatus::INVALID || _attempt >= attempts) {
|
||||
@@ -146,4 +151,10 @@ public:
|
||||
int16_t value = valueHB;
|
||||
return ((value << 8) + valueLB);
|
||||
}
|
||||
|
||||
protected:
|
||||
YieldCallback yieldCallback;
|
||||
BeforeSendRequestCallback beforeSendRequestCallback;
|
||||
AfterSendRequestCallback afterSendRequestCallback;
|
||||
unsigned long prevRequestTime = 0;
|
||||
};
|
||||
|
||||
@@ -42,10 +42,10 @@ protected:
|
||||
void setup() {
|
||||
Log.sinfoln(FPSTR(L_OT), F("Started. GPIO IN: %hhu, GPIO OUT: %hhu"), settings.opentherm.inPin, settings.opentherm.outPin);
|
||||
|
||||
ot->setHandleSendRequestCallback(OpenThermTask::sendRequestCallback);
|
||||
ot->setYieldCallback([](void* self) {
|
||||
static_cast<OpenThermTask*>(self)->delay(25);
|
||||
}, this);
|
||||
ot->setAfterSendRequestCallback(OpenThermTask::sendRequestCallback);
|
||||
ot->setYieldCallback([this]() {
|
||||
this->delay(25);
|
||||
});
|
||||
ot->begin(OpenThermTask::handleInterrupt, OpenThermTask::responseCallback);
|
||||
|
||||
#ifdef LED_OT_RX_PIN
|
||||
@@ -589,7 +589,12 @@ protected:
|
||||
return false;
|
||||
}
|
||||
|
||||
vars.temperatures.heating = ot->getFloat(response);
|
||||
float value = ot->getFloat(response);
|
||||
if (value <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
vars.temperatures.heating = value;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -600,7 +605,12 @@ protected:
|
||||
return false;
|
||||
}
|
||||
|
||||
vars.temperatures.dhw = ot->getFloat(response);
|
||||
float value = ot->getFloat(response);
|
||||
if (value <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
vars.temperatures.dhw = value;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user