#!python

from pycpsw import *
import numpy as np

# save files to 
#f_dir = '/afs/slac/g/lcls/package/cpsw/controlGUI/MAIN_TRUNK/config/cryo/data/dataTest001'

# setup CPSW heirarchy
#h = Hub.loadYamlFile( '/afs/slac/u/re/ulegat/ProjDocs/LLRF/firmware/targets/mr/AmcCarrierMrRtmEth/images/AmcCarrierMrRtmEth_project.yaml/000TopLevel.yaml', 'NetIODev' )

p = Path.loadYamlFile( '/afs/slac/u/re/ulegat/ProjDocs/LLRF/firmware/targets/mr/AmcCarrierMrRtmEth/images/AmcCarrierMrRtmEth_project.yaml/000TopLevel.yaml', 'NetIODev' )

# setup PATHs 
#p = Path.create( p )
p_mmio = p.findByName('mmio')
#p_mr = p_mmio.findByName( 'AmcCarrierMrRtmEth' )
#p_AmcCore = p_mr.findByName( 'AmcCarrierCore' )

# Load YAML config
#p_mmio.loadConfigFromYamlFile( '/afs/slac/g/lcls/package/cpsw/controlGUI/MAIN_TRUNK/config/cryo/defaults.yaml' )


# create stream interfaces
# strm0 = Stream.create( p.findByName('Stream0') )
# strm1 = Stream.create( p.findByName('Stream1') )
# strm2 = Stream.create( p.findByName('Stream2') )
# strm3 = Stream.create( p.findByName('Stream3') )
# strm4 = Stream.create( p.findByName('Stream4') )
# strm5 = Stream.create( p.findByName('Stream5') )
# strm6 = Stream.create( p.findByName('Stream6') )
# strm7 = Stream.create( p.findByName('Stream7') )

# Thresholds
KlyWiperRegA = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/KlyWiperRegA') )
KlyWiperRegB = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/KlyWiperRegB') )
KlyWiperRegAB = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/KlyWiperRegAB') )
KlyNVRegA = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/KlyNVRegA') )
KlyNVRegB = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/KlyNVRegB') )
KlyNVRegAB = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/KlyNVRegAB') )
ModWiperRegA = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/ModWiperRegA') )
ModWiperRegB = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/ModWiperRegB') )
ModWiperRegAB = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/ModWiperRegAB') )
ModNVRegA = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/ModNVRegA') )
ModNVRegB = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/ModNVRegB') )
ModNVRegAB = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/ModNVRegAB') )

KlyWiperRegAB.setVal( [0x55] )
print("AB=0x%x" % (KlyWiperRegAB.getVal()))

# Registers
Mode = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/Mode') )
Mode.setVal( [0x1] )
print("Mode=0x%x" % (Mode.getVal()))

# CPLD
Status = ScalVal_RO.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/Status') )
FirmwareVersion = ScalVal_RO.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/FirmwareVersion') )
SystemId0 = ScalVal_RO.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/SystemId[0]') )
SystemId1 = ScalVal_RO.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/SystemId[1]') )
SystemId2 = ScalVal_RO.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/SystemId[2]') )
SystemId3 = ScalVal_RO.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/SystemId[3]') )

print("SystemId0=0x%x" % (SystemId0.getVal()))
print("SystemId1=0x%x" % (SystemId1.getVal()))
print("SystemId2=0x%x" % (SystemId2.getVal()))
print("SystemId3=0x%x" % (SystemId3.getVal()))
print("Status=%d" % (Status.getVal()))
print("FirmwareVersion=%d" % (FirmwareVersion.getVal()))

# 
CfgRegister = ScalVal.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/CfgRegister') )

AdcIn0 = ScalVal_RO.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/AdcIn[0]') )
AdcIn1 = ScalVal_RO.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/AdcIn[1]') )
AdcIn2 = ScalVal_RO.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/AdcIn[2]') )
AdcIn3 = ScalVal_RO.create( p_mmio.findByName('AmcCarrierMrRtmEth/AmcCarrierMrLlrfApp/RtmLlrfCore/AdcIn[3]') )

CfgRegister.setVal( [0xfffc] )
print("CfgRegister=0x%x" % (CfgRegister.getVal()))

print("AdcIn0=0x%x" % (AdcIn0.getVal()))
print("AdcIn1=0x%x" % (AdcIn1.getVal()))
print("AdcIn2=0x%x" % (AdcIn2.getVal()))
print("AdcIn3=0x%x" % (AdcIn3.getVal()))