Downlink support for multiple antennas - #8018
Conversation
Uplinks received on antennas other than the first now carry an uplink token and inherit the gateway's downlink path constraint, so that the Network Server can use any antenna as a downlink path. References #48
Each SX1301_conf object in the router configuration now carries the gain of its own board's antenna instead of the first antenna's gain applied to all boards. Antenna gains are aligned index-for-index with the gateway's frequency plans, falling back to the first antenna's gain when fewer antennas are registered than frequency plans. Fractional gains are no longer truncated to integers. References #48
|
@johanstokking I started doing some work on this. I covered what was in your last comment, but I see there are some changes that have to be done in the GS scheduler regarding the emissions too:
From my understanding, there has to be a per-gateway duty cycle budget that takes into consideration the air time of all the messages regardless of the antennas. That should stay as is. However, multiple antennas allow for concurrent downlinks to be sent and two downlinks sent on different antennas will not conflict. Currently, the code does see it as a conflict and has to be updated to allow for it. This is tracked in the emisisons of the gateway scheduler - this scheduler is per frequency plan (not the sub-band scheduler emissions). This has to be changed to an array that tracks emissions per antenna. So something like: type Scheduler struct {
clock *RolloverClock
fps []*frequencyplans.FrequencyPlan
timeOffAir frequencyplans.TimeOffAir
timeSource TimeSource
subBands []*SubBand
mu sync.RWMutex
emissionsPerAntenna []Emissions // this becomes an array indexed by antenna index
scheduleAnytimeDelay time.Duration
}Did I get this right? |
|
I have a bit of progressive insight on #48 (comment). If we would support concurrent downlink, we would indeed have to account for gateway-level duty-cycle and we would have to avoid conflicts where two downlinks use the same frequency. For now, I would keep it simple and not design for concurrent downlinks. So if we have a multiple antennas, downlink should be sent from the right antenna but not concurrently with downlink on other antennas. This is still beneficial over using one antenna only for downlink, because antennas can be directional (like two antennas covering 180 degrees). |
References: #48.
Summary
Changes
DOWNLINK_PATH_CONSTRAINT_NEVERconstraint to allow using other antennas for the downlink path, not only antenna 0.router_config. Fallback on the gain of the first antenna if fewer antennas are registered than frequency plans.inttofloat32to match the antenna gain in the proto definition (TODO: check correctness)Testing
TODO
Steps
...
Results
Regressions
...
Notes for Reviewers
...
Checklist
README.mdfor the chosen target branch.CHANGELOG.md.CONTRIBUTING.md, there are no fixup commits left.