"""
This example shows basic FNet mDIO controller initialization and usage.
(c) iSYSTEM Labs, 2023
"""
import isystem.connect as ic
winidea_id = ''
connMgr = ic.ConnectionMgr()
connMgr.connect(ic.CConnectionConfig().instanceId(winidea_id))
sessionCtrl = ic.CSessionCtrl(connMgr)
FNetCtrl = ic.CFNetCtrl(connMgr)
mDIOCtrl = FNetCtrl.mDIO('ADIO.DIO1')
Cfg = mDIOCtrl.cfg()
Cfg.set_voltage(dVoltage=3.3)
Cfg.set_channel_out(nChannel=0, strName='mych0', bShow=True, bInitialHi=True)
Cfg.set_channel_in (nChannel=1, strName='mych1', bShow=True)
print(f"channel 0 name is: {Cfg.get_channel_name(nChannel=0)}")
sessionCtrl.begin_prepare()
mDIOCtrl.op_set_qualifier(bEnableFromStart = False, nFTrigEnable=2, nFTrigDisable=3)
Op = mDIOCtrl.op()
Op.set_record(ic.ERecord_ALL)
OpCh = Op.opt_comparator(nChannel = 0)
OpCh.set_FTrig(nFTrig=5)
OpCh.set_channel_state(nChannel = 0, bHi = False)
OpCh.set_channel_ignore(nChannel = 1)
Op.set_action(nAction = 0, nFTrig = 5, nChannel = 0, bHi = False)
OpPat = Op.opt_pattern(nPattern = 0)
OpPat.set_channels(vChannels = {0,2,1})
OpPat.set_action(nFTrigStart = 1, bStartActive = False, nFTrigStop = 2, bStopImmediately = True)
OpPat.set_continuous(bContinuous = False)
OpPat.set_pattern('001,140; xx0,10; 1xx,50ms; 111,100us')
FNetCtrl.applyOperation()
mDIOCtrl.ctrl_set_channel(nChannel = 0, bHi = True)
bHi = mDIOCtrl.ctrl_get_channel(nChannel = 0)
mDIOCtrl.ctrl_start_pattern(nPattern = 0)
mDIOCtrl.ctrl_stop_pattern(nPattern = 0)