MCPcopy Create free account
hub / github.com/TheThingsNetwork/lorawan-stack / adrDataRateRange

Function adrDataRateRange

pkg/networkserver/mac/adr.go:479–518  ·  view source on GitHub ↗
(
	ctx context.Context, dev *ttnpb.EndDevice, phy *band.Band, defaults *ttnpb.MACSettings,
)

Source from the content-addressed store, hash-verified

477}
478
479func adrDataRateRange(
480 ctx context.Context, dev *ttnpb.EndDevice, phy *band.Band, defaults *ttnpb.MACSettings,
481) (min, max ttnpb.DataRateIndex, allowed map[ttnpb.DataRateIndex]struct{}, ok bool, err error) {
482 macState := dev.MacState
483 min, max, allowed, ok = channelDataRateRange(
484 macState.DesiredParameters.Channels...,
485 )
486 if !ok {
487 return 0, 0, nil, false, internal.ErrCorruptedMACState.
488 WithCause(internal.ErrChannelDataRateRange)
489 }
490 min, max = clampDataRateRange(dev, defaults, min, max)
491 if min > max {
492 log.FromContext(ctx).Debug("No common data rate index range available, avoid ADR")
493 return 0, 0, nil, false, nil
494 }
495 if max > phy.MaxADRDataRateIndex {
496 max = phy.MaxADRDataRateIndex
497 }
498 for _, idx := range macState.RejectedAdrDataRateIndexes {
499 delete(allowed, idx)
500 }
501 _, ok = allowed[min]
502 for !ok && min <= max {
503 min++
504 _, ok = allowed[min]
505 }
506 _, ok = allowed[max]
507 for !ok && max >= min {
508 max--
509 _, ok = allowed[max]
510 }
511 if min > max {
512 log.FromContext(ctx).Debug(
513 "Device has rejected all possible data rate values given the channels enabled, avoid ADR",
514 )
515 return 0, 0, nil, false, nil
516 }
517 return min, max, allowed, true, nil
518}
519
520func adrTxPowerRange(
521 ctx context.Context, dev *ttnpb.EndDevice, phy *band.Band, defaults *ttnpb.MACSettings,

Callers 1

adaptDataRateFunction · 0.85

Calls 5

FromContextFunction · 0.92
channelDataRateRangeFunction · 0.85
clampDataRateRangeFunction · 0.85
DebugMethod · 0.65
WithCauseMethod · 0.45

Tested by

no test coverage detected