Describe the bug
The Kiiroo Onyx+ silently tears down its BLE link when no command has been written for roughly 3 seconds. The device flashes red and only a power-cycle brings it back. Any .funscript-style scripted driver that has a gap of more than ~3 s between actions disconnects the toy mid-scene.
The protocol is missing a keepalive_strategy() override on their ProtocolHandler, so they fall back to the default HardwareRequiredRepeatLastPacketStrategy, which only takes effect on iOS during backgrounding. On every other platform (Android, desktop, headless intiface-engine) the BLE link is therefore left to time out.
Expected behavior
ProtocolHandler::keepalive_strategy() for KiirooV21Initialized should return ProtocolKeepaliveStrategy::RepeatLastPacketStrategyWithTiming(Duration) with an interval comfortably under the device's ~3 s idle timeout, so that scripted playback with arbitrary gaps keeps the link alive without altering the toy's behaviour.
Additional context
Describe the bug
The Kiiroo Onyx+ silently tears down its BLE link when no command has been written for roughly 3 seconds. The device flashes red and only a power-cycle brings it back. Any .funscript-style scripted driver that has a gap of more than ~3 s between actions disconnects the toy mid-scene.
The protocol is missing a keepalive_strategy() override on their ProtocolHandler, so they fall back to the default HardwareRequiredRepeatLastPacketStrategy, which only takes effect on iOS during backgrounding. On every other platform (Android, desktop, headless intiface-engine) the BLE link is therefore left to time out.
Expected behavior
ProtocolHandler::keepalive_strategy() for KiirooV21Initialized should return ProtocolKeepaliveStrategy::RepeatLastPacketStrategyWithTiming(Duration) with an interval comfortably under the device's ~3 s idle timeout, so that scripted playback with arbitrary gaps keeps the link alive without altering the toy's behaviour.
Additional context