Wraps a generated relay.
The generated relay this facade delegates to.
The data rate the relay forwards at, which its acknowledgments report.
The address the relay's own device is on the network by, or null before joining.
When the forwarded uplink waiting to go out is due, or null with nothing waiting.
Whether the relay's own device is on a network.
Whether the relay is scanning.
Sends the uplink the relay is holding, in one of its own on port LA_FPORT_RELAY.
The time, in microseconds.
What to transmit, with the relay's own receive windows.
A DeviceError when the relay's own device cannot send it yet, or when nothing is waiting.
Reads a frame the relay's own device heard, acting on the relay commands in it.
The window the radio heard it in.
The bytes the radio received.
Its signal-to-noise ratio.
What it turned out to be: the relay's own downlink, one to pass on to an end device, or one that cannot be passed on.
A DeviceError, as EndDevice.heard.
Reads the uplink a WOR frame announced, and holds it to forward.
The bytes the radio received.
Its received signal strength.
Its signal-to-noise ratio.
When the frame ended, in microseconds.
When to Relay.forward it: fifty milliseconds after it ended.
Reads a WOR frame a scan heard.
The scan that heard it, as Relay.nextScan returned it.
The bytes the radio received.
Its received signal strength, which the forwarded uplink carries.
Its signal-to-noise ratio, which the forwarded uplink carries.
When the frame ended, in microseconds.
What the frame led to: an acknowledgment to send, an uplink to listen for, or a notification for the network.
Builds the relay's own join request.
A nonce this relay has never used with its join EUI.
The time, in microseconds.
What to transmit, with the join accept windows.
A DeviceError: NoCredentials, Busy or Wait.
Says when and where to scan next.
The time, in microseconds.
The scan, or null while the relay is stopped.
Says what comes next once the relay's own windows closed with nothing in them.
The time the second window closed, in microseconds.
Whether to repeat the frame, join again, or move on.
A DeviceError: NothingPending.
Sends one of the relay's own uplinks, which also carries what it owes its network.
The application port, 1 to 223.
The payload, as bytes or text encoded as UTF-8.
The time, in microseconds.
Whether to ask the network to acknowledge it.
What to transmit, with its receive windows.
A DeviceError, as EndDevice.send.
Sends an uplink with no payload, carrying whatever the relay owes its network.
The time, in microseconds.
What to transmit, with its receive windows.
A DeviceError, as EndDevice.send.
Starts scanning, or changes what a running relay scans from its next scan on.
How often to scan.
Which of the region's WOR channels is the default one.
OptionalsecondChannel: LoraRelayChannel
A second channel the network configured, from relay.secondChannel.
Stops scanning. A forwarded uplink already waiting still goes out.
Trusts an end device, as an UpdateUplinkListReq with the same fields does.
The entry, 0 to 15; there is room for TRUSTED_ED_NUMBER.
The device, its key, and what it may spend.
Clears the uplink a WOR frame announced, once listening heard nothing.
StaticoverMakes a relay whose own device joins over the air.
A published channel plan.
Its 8-byte device EUI.
Its 8-byte join EUI.
Its 16-byte root key.
What its radio can do.
How accurate its crystal is.
How long it takes to start receiving once it detects activity.
The relay, neither joined nor scanning.
StaticpersonalizedMakes a relay whose own device is activated by personalization.
A published channel plan, from planFor or cn470Plan.
The address the relay was provisioned with.
Its 16-byte network session key.
Its 16-byte application session key.
What its radio can do.
How accurate its crystal is, which its acknowledgments report.
How long it takes to start receiving once it detects activity.
The relay, stopped until Relay.start.
A LoRaWAN relay: an end device that also carries the uplinks of the devices around it.
A relay sleeps, waking every scan period to look for radio activity on its WOR channel. One turn runs like this: Relay.nextScan says when and where to listen, a frame heard there goes to Relay.heardWor, the uplink it announced to Relay.heardUplink, and Relay.forward wraps that in one of the relay's own uplinks on port LA_FPORT_RELAY. What the relay's own receive windows hear goes to Relay.heardIn, which turns a downlink meant for an end device into one to send in that device's relay window.
It owns no radio and no clock, so the same relay runs over any radio, or in a test with none. The codecs behind it are on the relay object.
Example