mirror of
https://github.com/meshtastic/firmware.git
synced 2025-09-01 01:15:10 +00:00
Merge pull request #2121 from GUVWAF/NAKtoAPI
Send NAK to API only upon duty cycle limit
This commit is contained in:
commit
1f6a8eae86
@ -138,7 +138,7 @@ void Router::sendAckNak(Routing_Error err, NodeNum to, PacketId idFrom, ChannelI
|
|||||||
void Router::abortSendAndNak(Routing_Error err, MeshPacket *p)
|
void Router::abortSendAndNak(Routing_Error err, MeshPacket *p)
|
||||||
{
|
{
|
||||||
LOG_ERROR("Error=%d, returning NAK and dropping packet.\n", err);
|
LOG_ERROR("Error=%d, returning NAK and dropping packet.\n", err);
|
||||||
sendAckNak(Routing_Error_NO_INTERFACE, getFrom(p), p->id, p->channel);
|
sendAckNak(err, getFrom(p), p->id, p->channel);
|
||||||
packetPool.release(p);
|
packetPool.release(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,15 +199,19 @@ ErrorCode Router::send(MeshPacket *p)
|
|||||||
} // should have already been handled by sendLocal
|
} // should have already been handled by sendLocal
|
||||||
|
|
||||||
// Abort sending if we are violating the duty cycle
|
// Abort sending if we are violating the duty cycle
|
||||||
if (!config.lora.override_duty_cycle && myRegion->dutyCycle != 100) {
|
if (!config.lora.override_duty_cycle && myRegion->dutyCycle < 100) {
|
||||||
float hourlyTxPercent = airTime->utilizationTXPercent();
|
float hourlyTxPercent = airTime->utilizationTXPercent();
|
||||||
if (hourlyTxPercent > myRegion->dutyCycle) {
|
if (hourlyTxPercent > myRegion->dutyCycle) {
|
||||||
uint8_t silentMinutes = airTime->getSilentMinutes(hourlyTxPercent, myRegion->dutyCycle);
|
uint8_t silentMinutes = airTime->getSilentMinutes(hourlyTxPercent, myRegion->dutyCycle);
|
||||||
LOG_WARN("Duty cycle limit exceeded. Aborting send for now, you can send again in %d minutes.\n", silentMinutes);
|
LOG_WARN("Duty cycle limit exceeded. Aborting send for now, you can send again in %d minutes.\n", silentMinutes);
|
||||||
Routing_Error err = Routing_Error_DUTY_CYCLE_LIMIT;
|
Routing_Error err = Routing_Error_DUTY_CYCLE_LIMIT;
|
||||||
abortSendAndNak(err, p);
|
if (getFrom(p) == nodeDB.getNodeNum()) { // only send NAK to API, not to the mesh
|
||||||
return err;
|
abortSendAndNak(err, p);
|
||||||
}
|
} else {
|
||||||
|
packetPool.release(p);
|
||||||
|
}
|
||||||
|
return err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// PacketId nakId = p->decoded.which_ackVariant == SubPacket_fail_id_tag ? p->decoded.ackVariant.fail_id : 0;
|
// PacketId nakId = p->decoded.which_ackVariant == SubPacket_fail_id_tag ? p->decoded.ackVariant.fail_id : 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user