RAFT can control device power (hs100 / apc / apcAos / olimex / kasa / tapo / SLP / none), but it has no way to wake a device that is asleep or in a Wake-on-LAN soft-off state.
Some targets (e.g. STB panels that aggressively deep-sleep) drop their console when idle and can only be brought back by a Wake-on-LAN magic packet. Today RAFT cannot do this, so test runs against such targets need an out-of-band wake step before the session can be opened.
Proposal
Wake-on-LAN is a network (layer-2) action, not a power action — it sends a UDP magic packet, cannot power a device off, and supports none of the power-metering contract. So add it as a dedicated network/wake controller rather than a power module:
framework/core/networkModules/wol.py (networkWol) — a wake() verb that sends the WoL magic packet (6×0xFF + target MAC ×16) to broadcast:port.
framework/core/networkControl.py (networkControlClass) — dispatches type: "wol", mirroring powerControl (retry via retryCount / retryDelay).
- Wired into
deviceManager via a device network: block → exposed as dut.networkController (alongside powerControl, hdmiCECController, avSyncController).
- Standard-library only (
socket) — no new dependencies.
network:
type: "wol"
mac: "aa:bb:cc:dd:ee:ff"
broadcast: "255.255.255.255" # optional
port: 9 # optional (7 or 9)
dut.networkController.wake()
Verification
Sends a valid magic packet and wakes a real armv7 target on the same broadcast domain; invalid / missing MAC is rejected with a clear error.
Delivered in #217.
Note: an earlier draft placed this under powerModules (type: "wol" on powerSwitch:); it was re-homed to the network seam for the reasons above.
RAFT can control device power (hs100 / apc / apcAos / olimex / kasa / tapo / SLP / none), but it has no way to wake a device that is asleep or in a Wake-on-LAN soft-off state.
Some targets (e.g. STB panels that aggressively deep-sleep) drop their console when idle and can only be brought back by a Wake-on-LAN magic packet. Today RAFT cannot do this, so test runs against such targets need an out-of-band wake step before the session can be opened.
Proposal
Wake-on-LAN is a network (layer-2) action, not a power action — it sends a UDP magic packet, cannot power a device off, and supports none of the power-metering contract. So add it as a dedicated network/wake controller rather than a power module:
framework/core/networkModules/wol.py(networkWol) — awake()verb that sends the WoL magic packet (6×0xFF+ target MAC ×16) tobroadcast:port.framework/core/networkControl.py(networkControlClass) — dispatchestype: "wol", mirroringpowerControl(retry viaretryCount/retryDelay).deviceManagervia a devicenetwork:block → exposed asdut.networkController(alongsidepowerControl,hdmiCECController,avSyncController).socket) — no new dependencies.Verification
Sends a valid magic packet and wakes a real armv7 target on the same broadcast domain; invalid / missing MAC is rejected with a clear error.
Delivered in #217.
Note: an earlier draft placed this under
powerModules(type: "wol"onpowerSwitch:); it was re-homed to the network seam for the reasons above.