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