module puppeteer.puppet_link.is_puppet_link; import puppeteer.var_monitor_utils; alias OnAIUpdateCallback = void delegate (ubyte /* pin */, float /* value */, long /* communicationTimeMillis */); alias OnIVUpdateCallback(IVType) = void delegate (ubyte /* varIndex */, IVType /* value */, long /* communicationTimeMillis */); enum isPuppetLink(T, IVTypes...) = is(typeof( { T puppetLink; puppetLink.startCommunication(); puppetLink.endCommunication(); puppetLink.readPuppet(long.init /* communicationTimeMillis */); bool a = puppetLink.isCommunicationOpen; puppetLink.setAIMonitor(ubyte.init /* pin */, bool.init /* monitor */); puppetLink.AIMonitorCallback = OnAIUpdateCallback.init /* callback */; puppetLink.setIVMonitor(VarMonitorTypeCode.init /* IV type */, ubyte.init /* var index */, bool.init /* monitor */); foreach(IVType; IVTypes) puppetLink.IVMonitorCallback!IVType = OnIVUpdateCallback!IVType.init /* listener */; puppetLink.setPWMOut(ubyte.init /* pin */, ubyte.init /* value */); } ()));