fix: let a priority stop overtake a delayed radio job

The radio task took a delayed job (the My after a shade reaches its
target) off the queue and slept until it was due, so a stop queued at the
front waited for the sleep plus the whole delayed job.  Wait on a task
notification instead and send front jobs while the delayed one is held.

A held job still counts as queued for isQueued(), so a stop for the same
remote goes behind it and the rolling codes stay in order.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
cjkas 2026-10-12 17:59:10 +02:00
parent 1cc55e07f0
commit 03eb3b3d99
2 changed files with 60 additions and 25 deletions

View file

@ -494,6 +494,11 @@ class Transceiver {
somfy_frame_t frame;
void startTxTask();
bool transmitJob(somfy_tx_job_t &job);
// Sends a job taken off the queue and leaves a frame beat after it.
void runJob(somfy_tx_job_t &job);
// Holds a delayed job until it is due, sending stops queued at the front
// in the meantime.
void waitUntilDue(const somfy_tx_job_t &job);
public:
transceiver_config_t config;
bool printBuffer = false;