mirror of
https://github.com/lumapu/ahoy.git
synced 2025-04-28 17:56:21 +02:00
parent
fe265d78a7
commit
08bc773cc2
3 changed files with 33 additions and 26 deletions
|
@ -2,6 +2,7 @@
|
|||
|
||||
## 0.8.147 - 2024-09-29
|
||||
* improved queue, added mutex
|
||||
* fixed send power limit #1757
|
||||
|
||||
## 0.8.146 - 2024-09-23
|
||||
* fix reset ticker #1754
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// 2023 Ahoy, https://github.com/lumpapu/ahoy
|
||||
// 2024 Ahoy, https://github.com/lumpapu/ahoy
|
||||
// Creative Commons - http://creativecommons.org/licenses/by-nc-sa/4.0/deed
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
@ -140,24 +140,21 @@ class CommQueue {
|
|||
if(this->rdPtr == this->wrPtr)
|
||||
cb(false, nullptr); // empty
|
||||
else {
|
||||
//xSemaphoreTake(this->mutex, portMAX_DELAY);
|
||||
//uint8_t tmp = this->rdPtr;
|
||||
//xSemaphoreGive(this->mutex);
|
||||
cb(true, &mQueue[this->rdPtr]);
|
||||
xSemaphoreTake(this->mutex, portMAX_DELAY);
|
||||
QueueElement el = mQueue[this->rdPtr];
|
||||
inc(&this->rdPtr);
|
||||
xSemaphoreGive(this->mutex);
|
||||
cb(true, &el);
|
||||
}
|
||||
}
|
||||
|
||||
void cmdDone(QueueElement *q, bool keep = false) {
|
||||
xSemaphoreTake(this->mutex, portMAX_DELAY);
|
||||
if(keep) {
|
||||
q->attempts = DefaultAttempts;
|
||||
q->attemptsMax = DefaultAttempts;
|
||||
xSemaphoreGive(this->mutex);
|
||||
add(q); // add to the end again
|
||||
xSemaphoreTake(this->mutex, portMAX_DELAY);
|
||||
}
|
||||
inc(&this->rdPtr);
|
||||
xSemaphoreGive(this->mutex);
|
||||
//inc(&this->rdPtr);
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
|
@ -21,7 +21,9 @@ typedef std::function<void(Inverter<> *)> alarmListenerType;
|
|||
|
||||
class Communication : public CommQueue<> {
|
||||
public:
|
||||
Communication() : CommQueue() {}
|
||||
Communication()
|
||||
: CommQueue()
|
||||
{}
|
||||
|
||||
~Communication() {}
|
||||
|
||||
|
@ -52,23 +54,29 @@ class Communication : public CommQueue<> {
|
|||
}
|
||||
|
||||
void loop() {
|
||||
get([this](bool valid, QueueElement *q) {
|
||||
if(!valid) {
|
||||
if(mPrintSequenceDuration) {
|
||||
mPrintSequenceDuration = false;
|
||||
DPRINT(DBG_INFO, F("com loop duration: "));
|
||||
DBGPRINT(String(millis() - mLastEmptyQueueMillis));
|
||||
DBGPRINTLN(F("ms"));
|
||||
DBGPRINTLN(F("-----"));
|
||||
if(States::RESET == mState) {
|
||||
get([this](bool valid, QueueElement *q) {
|
||||
if(!valid) {
|
||||
if(mPrintSequenceDuration) {
|
||||
mPrintSequenceDuration = false;
|
||||
DPRINT(DBG_INFO, F("com loop duration: "));
|
||||
DBGPRINT(String(millis() - mLastEmptyQueueMillis));
|
||||
DBGPRINTLN(F("ms"));
|
||||
DBGPRINTLN(F("-----"));
|
||||
el.iv = nullptr;
|
||||
}
|
||||
return; // empty
|
||||
}
|
||||
return; // empty
|
||||
}
|
||||
if(!mPrintSequenceDuration) // entry was added to the queue
|
||||
mLastEmptyQueueMillis = millis();
|
||||
mPrintSequenceDuration = true;
|
||||
|
||||
innerLoop(q);
|
||||
});
|
||||
el = *q;
|
||||
if(!mPrintSequenceDuration) // entry was added to the queue
|
||||
mLastEmptyQueueMillis = millis();
|
||||
mPrintSequenceDuration = true;
|
||||
});
|
||||
}
|
||||
|
||||
if(nullptr != el.iv)
|
||||
innerLoop(&el);
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -1035,6 +1043,7 @@ class Communication : public CommQueue<> {
|
|||
private:
|
||||
States mState = States::RESET;
|
||||
uint32_t *mTimestamp = nullptr;
|
||||
QueueElement el;
|
||||
bool *mPrivacyMode = nullptr, *mSerialDebug = nullptr, *mPrintWholeTrace = nullptr;
|
||||
TimeMonitor mWaitTime = TimeMonitor(0, true); // start as expired (due to code in RESET state)
|
||||
std::array<frame_t, MAX_PAYLOAD_ENTRIES> mLocalBuf;
|
||||
|
|
Loading…
Add table
Reference in a new issue