Skip to content

Conversation

@ViezeVingertjes
Copy link
Contributor

@ViezeVingertjes ViezeVingertjes commented Dec 31, 2025

Replaces per-transmission delay with a rolling window token bucket for better regulatory compliance.
Sets default to 10% duty cycle (airtime factor 9.0), the highest common legal limit worldwide(?)

Resolves #817.

@ViezeVingertjes
Copy link
Contributor Author

We had a discussion in the Dutch community today. Some people didn't care much, others wanted a proper implementation. I'm neutral either way (not even sure if I enabled it myself). Perhaps this could start a broader discussion to decide it once and for all.

@ViezeVingertjes ViezeVingertjes marked this pull request as ready for review December 31, 2025 17:46
@LitBomb
Copy link
Contributor

LitBomb commented Dec 31, 2025

how does this work for USA where there is no duty cycle limit?

@ViezeVingertjes
Copy link
Contributor Author

ViezeVingertjes commented Dec 31, 2025

how does this work for USA where there is no duty cycle limit?

The same as it is currently, airtime factor already limits it to the same amount, just less reliable. So both now and with this method, they would need to disable it. (set af 0)

@LitBomb
Copy link
Contributor

LitBomb commented Dec 31, 2025

whatever the change is, it should not limit duty cycle at any percentage for regions that don't have duty cycle limit.

@ViezeVingertjes
Copy link
Contributor Author

ViezeVingertjes commented Dec 31, 2025

whatever the change is, it should not limit duty cycle at any percentage for regions that don't have duty cycle limit.

Its probably higher than the current cap you guys have. But a valid point for another issue on if and what the default should be. Perhaps it should be set with the region or something.

return 2.0;
}

void Dispatcher::updateTxBudget() {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is race potential here. Are we sure this is always called from an Arduino single loop context? Or can this also be called by timers, callbacks or interrupts?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants