Post Go back to editing

C code Sequence for enabling the CFR , CLGC and DPD

Category: Software
Product Number: ADRV9029

Hi , We want to implement the CLGC for one of the project , is there C code for that along with CFR and DPD , if there is code base could you please share it. 

Regards,

R D Nadaf 

Thread Notes

Top Replies

  • Hi,  We don't have C-code available. Please refer the attached scripts which could be of help for implementing CLGC, CFR and DPD.

    #################################################################################
    #GUI Version: 0.0.0.939
    #DLL Version: 0.0.0.857
    #Cmd Server Version: 0.0.0.857
    #FPGA Version: 0xD9000007
    #ARM Version: 0.0.0.503
    #StreamVersion: 0.0.0.73
    #Author: Anand Kumar
    #Precondition: Ensure that Tx-ORx mapping is completed and a valid external loopback path exists between Tx to ORx.
    #Description: This script is meant for standalone CLGC setup(without internal DPD). 
    # This script runs the external path delay cal, external DPD init cal(to establish DPD actuator ownership) and initializes CLGC tracking cal
    #Note: To disable active Tx atten control and only monitor Tx and ORx power levels, a value of '0' needs to be passed to the clgcConfigSet() function (line 107)
    #################################################################################
    
    #Import Reference to the DLL
    import System
    import clr
    import time
    from System import Array
    clr.AddReferenceToFileAndPath("C:\\Program Files\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x64_FULL\\adrvtrx_dll.dll")
    from adrv9010_dll import AdiEvaluationSystem
    from adrv9010_dll import Types
    from adrv9010_dll import Ad9528Types
    from math import log10, sqrt
    
    def extPathDelayAndExtDpdInit():
        errorFlag = 0
        txCals = Types.adi_adrv9010_InitCals_t()
        txCals.calMask = int(Types.adi_adrv9010_InitCalibrations_e.ADI_ADRV9010_EXTERNAL_PATH_DELAY) | int(Types.adi_adrv9010_InitCalibrations_e.ADI_ADRV9010_DPD)
        txCals.channelMask = 0x1
        txCals.warmBoot = 0
        adrv9010.Cals.InitCalsRun(txCals)
        adrv9010.Cals.InitCalsWait(6000, errorFlag)
    
    def clgcStatusGet(txCh):
        print"*****************************CLGC Status, Tx = ",txCh
        clgcStatusRead = Types.adi_adrv9010_ClgcStatus_t()
        retVal = link.platform.board.Adrv9010Device.Dfe.ClgcStatusGet(txCh, clgcStatusRead)
        clgcStatusRead = retVal[1]
        MAX_CODE = 2**16
        updateCount = clgcStatusRead.clgcTrackingCalStatus.updateCount
        loopGain = clgcStatusRead.clgcLoopGain
        print "CLGC Loop Gain Est:",loopGain
        #print "CLGC Tx RMS Power:",clgcStatusRead.clgcTxRmsPower
        #print "CLGC Orx RMS Power:",clgcStatusRead.clgcOrxRmsPower
        if int(loopGain*100) != 0:
            print "CLGC Loop Gain Est_dB:",20*log10(float(loopGain))
            print "CLGC Tx RMS Power_dBFS:",20*log10(clgcStatusRead.clgcTxRmsPower/MAX_CODE)
            print "CLGC Orx RMS Power_dBFS:",20*log10(clgcStatusRead.clgcOrxRmsPower/MAX_CODE)
        
        print "CLGC errorCode:",clgcStatusRead.clgcTrackingCalStatus.errorCode
        print "CLGC activeTxAttenIndex_dB:",clgcStatusRead.activeTxAttenIndex*0.05
        print "CLGC activeOrxGainIndex:",clgcStatusRead.activeOrxGainIndex
        print "CLGC percentComplete:",clgcStatusRead.clgcTrackingCalStatus.percentComplete
        print "CLGC varianceMetric:",clgcStatusRead.clgcTrackingCalStatus.varianceMetric
        print "CLGC iterCount:",clgcStatusRead.clgcTrackingCalStatus.iterCount
        print "CLGC updateCount:",updateCount
        print "CLGC runState:",clgcStatusRead.clgcState
        print "CLGC captureStatus:",clgcStatusRead.clgcCaptureStatus
        print "CLGC Sync status =",clgcStatusRead.clgcSyncStatus
        return clgcStatusRead
    
    
    def clgcConfigSet(controlEnable = 0):         
        print"***************************************"
        clgcConfigSetObj = Array.CreateInstance(Types.adi_adrv9010_ClgcConfig_t, 1)
        clgcConfigSetObj[0] = Types.adi_adrv9010_ClgcConfig_t()
        clgcConfigSetObj[0].txChannelMask = 0x0F;
        clgcConfigSetObj[0].clgcEnableGainControl = controlEnable
        clgcConfigSetObj[0].clgcExpectedLoopGain_dB = -0.5
        clgcConfigSetObj[0].clgcTxQualifyingThreshold_dBFS = -70;
        clgcConfigSetObj[0].clgcOrxQualifyingThreshold_dBFS = -70;
        clgcConfigSetObj[0].clgcMaxGainAdjustmentStepSize_dB = 3;
        clgcConfigSetObj[0].clgcDampingParam = 0.1;
        clgcConfigSetObj[0].clgcMinTxAttenAdjust_dB = 0; 
        clgcConfigSetObj[0].clgcMaxTxAttenAdjust_dB = 30;
        clgcConfigSetObj[0].clgcExpectedLoopGainRipple_dB = 0.05;
        clgcConfigSetObj[0].clgcMaxSampleBatchesPerClgcRun = 512
        clgcConfigSetObj[0].clgcMeasurementBatchTime_us = 10
        clgcConfigSetObj[0].clgcOrxMinimumSnr_dB = 20
        link.platform.board.Adrv9010Device.Dfe.ClgcConfigSet(clgcConfigSetObj,1)
        print "CLGC Loop Gain(dB)",clgcConfigSetObj[0].clgcExpectedLoopGain_dB 
        print "CLGC Tx qualifying threshold(dBFS)",clgcConfigSetObj[0].clgcTxQualifyingThreshold_dBFS
        print "CLGC ORx qualifying threshold(dBFS)",clgcConfigSetObj[0].clgcOrxQualifyingThreshold_dBFS 
        print "CLGC Max gain adjustment step size",clgcConfigSetObj[0].clgcMaxGainAdjustmentStepSize_dB 
        print "CLGC Damping Param", clgcConfigSetObj[0].clgcDampingParam 
        print "Min Tx Atten(dB)",clgcConfigSetObj[0].clgcMinTxAttenAdjust_dB 
        print "Max Tx Atten(dB)",clgcConfigSetObj[0].clgcMaxGainAdjustmentStepSize_dB 
        print "Expected loop gain ripple(dB)",clgcConfigSetObj[0].clgcExpectedLoopGainRipple_dB    
        print"***************************************"
    
    def clgcTrackingCalEnable(enable = 0):
        if enable:
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX1_CLGC), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_ENABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX2_CLGC), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_ENABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX3_CLGC), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_ENABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX4_CLGC), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_ENABLE)
        else:
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX1_CLGC), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_DISABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX2_CLGC), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_DISABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX3_CLGC), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_DISABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX4_CLGC), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_DISABLE)
        
    def clgcSetup():    
        #link.platform.board.Adrv9010Device.RadioCtrl.RxTxEnableSet(0x00,0x01) #Enable Tx1, Disable other ORx channels
        #extPathDelayAndExtDpdInit() #Required if using CLGC with External DPD
        #clgcConfigSet(1) #1 - Enable loop gain control, 0- Disable loop gain control
        #clgcTrackingCalEnable(1) #1 - Enable CLGC tracking cal, 0 - Disable CLGC tracking cal 
        #time.sleep(10)
    
        print "*********CLGC Status******************"
        clgcStatusGet(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX1)  
    
    #Create an Instance of the Class
    link = AdiEvaluationSystem.Instance
    connect = False
    
    if (link.IsConnected() == False):
        connect = True
        link.platform.board.Client.Connect("192.168.1.10", 55556) 
        print "Connecting"
    
    if (link.IsConnected()):
        adrv9010 = link.Adrv9010Get(1)
        print "Connected"
        adrv9010 = link.Adrv9010Get(1)
        ##### YOUR CODE GOES HERE #####
        clgcSetup()
    else:
        print "Not Connected"
    
    if (connect):
        link.platform.board.Client.Disconnect()
        print "Disconnected"
    #################################################################################
    #GUI Version: 5.1.0.30
    #DLL Version: 5.1.0.21
    #Cmd Server Version: 5.1.0.21
    #FPGA Version: 0xD9000007
    #ARM Version: 5.1.0.9(ADI_ADRV9025_ARMBUILD_TESTOBJ)
    #StreamVersion: 8.1.0.1
    #################################################################################
    
    #Import Reference to the DLL
    import System
    import clr
    import time
    from math import log10, sqrt
    from System import Array
    clr.AddReferenceToFileAndPath("C:\\Program Files\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x64_FULL\\adrvtrx_dll.dll")
    from adrv9010_dll import AdiEvaluationSystem
    from adrv9010_dll import Types
    from adrv9010_dll import Ad9528Types
    
    ########################## HELPER FUNCTIONS #######################################
    
    def dpdStatusGet(txChannel):
        print"***************************************"
        print "Retrieving DPD status"
        #dpdStatus = Types.adi_adrv9010_DpdStatus_t()
        dpdStatus = Types.adi_adrv9025_DpdStatusX_t()
        retVal = link.platform.board.Adrv9010Device.Dfe.DpdStatusGet(txChannel, dpdStatus)
        dpdStatus = retVal[1]
        print "dpdErrorCode:",dpdStatus.dpdErrorCode
        print "dpdPercentComplete",dpdStatus.dpdPercentComplete
        print "dpdPerformanceMetric",dpdStatus.dpdPerformanceMetric
        print "dpdIterCount",dpdStatus.dpdIterCount
        print "dpdUpdateCount",dpdStatus.dpdUpdateCount
        print "dpdSyncStatus",dpdStatus.dpdSyncStatus
        meanTu = dpdStatus.dpdStatistics.dpdMeanTuPower
        
        peakTu = dpdStatus.dpdStatistics.dpdPeakTuPower
        meanTx = dpdStatus.dpdStatistics.dpdMeanTxPower
        peakTx = dpdStatus.dpdStatistics.dpdPeakTxPower
        meanOrx = dpdStatus.dpdStatistics.dpdMeanOrxPower
        peakOrx = dpdStatus.dpdStatistics.dpdPeakOrxPower    
        
        print "dpdModelTable",dpdStatus.dpdModelTable
        if int(meanTu*10 + peakTu*10 + meanTx*10 + peakTx*10 + meanOrx*10 + peakOrx*10) != 0: 
            print "dpdMeanTuPower",20*log10(sqrt(meanTu) / 32768) 
            print "dpdPeakTuPower",20*log10(sqrt(peakTu) / 32768) 
            print "dpdMeanTxPower",20*log10(sqrt(meanTx) / 32768) 
            print "dpdPeakTxPower",20*log10(sqrt(peakTx) / 32768) 
            print "dpdMeanOrxPower",20*log10(sqrt(meanOrx) / 32768) 
            print "dpdPeakOrxPower",20*log10(sqrt(peakOrx) / 32768) 
        print "dpdDirectEvm",dpdStatus.dpdStatistics.dpdDirectEvm 
        print "dpdIndirectEvm",dpdStatus.dpdStatistics.dpdIndirectEvm 
        print "dpdSelectError",dpdStatus.dpdStatistics.dpdSelectError 
        print "dpdIndirectError",dpdStatus.dpdStatistics.dpdIndirectError 
        print "dpdErrorStatus0 (metrics:actions): X:X", dpdStatus.dpdErrorStatus0.dpdMetricsMask, dpdStatus.dpdErrorStatus0.dpdActionMask 
        print "dpdErrorStatus1 (metrics:actions): X:X", dpdStatus.dpdErrorStatus1.dpdMetricsMask, dpdStatus.dpdErrorStatus1.dpdActionMask 
        print "dpdPersistentErrorStatus0 (metrics:actions): X:X", dpdStatus.dpdPersistentErrorStatus0.dpdMetricsMask, dpdStatus.dpdPersistentErrorStatus0.dpdActionMask 
        print "dpdPersistentErrorStatus1 (metrics:actions): X:X", dpdStatus.dpdPersistentErrorStatus1.dpdMetricsMask, dpdStatus.dpdPersistentErrorStatus1.dpdActionMask 
        print "reservedPM",dpdStatus.reservedPM 
        print "reservedTP",dpdStatus.reservedTP 
        print "reservedPR",dpdStatus.reservedPR 
        print"***************************************"
    
    
    def dpdTrackingConfigSet( txChMask = 0x1):
        print"***************************************"
        print"Setting up DPD Tracking Config"
        FULL_SCALE_CODE = 32768
    
        #Create a new instance of DPD tracking Config and read back values in the device
        dpdTrackCfg = Types.adi_adrv9025_DpdTrackingConfig_t()
        dpdTrackCfgGet = Types.adi_adrv9025_DpdTrackingConfig_t()
        retVal = link.platform.board.Adrv9010Device.Dfe.DpdTrackingConfigGet(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX1,dpdTrackCfgGet)
        dpdTrackCfg = retVal[1]
    
        #Update DPD mode
        dpdTrackCfg.dpdUpdateMode =  Types.adi_adrv9010_DpdTrackingUpdateMode_e.ADI_ADRV9025_DPD_TRACKING_UPDATE_MODE_2
    
        #Update Peak search window and other params
        dpdTrackCfg.dpdPeakSearchWindowSize = 65535
        dpdTrackCfg.dpdIndirectRegularizationValue = 20
        dpdTrackCfg.dpdSamples = 16384
        dpdTrackCfg.dpdIndirectRegularizationLowPowerValue = 20
        dpdTrackCfg.dpdFilterSel = 1
        dpdTrackCfg.enableDirectLearning = 0
        dpdTrackCfg.dpdMu = 0
    
        #Update low power threshold
        DpdLowPowerThreshold_dBFS = -46
        dpdTrackCfg.minAvgSignalLevel = System.UInt16(pow(10,(DpdLowPowerThreshold_dBFS/20.0))*FULL_SCALE_CODE)
    
        #Update ORx low power threshold
        DpdLowPowerThresholdORx_dBFS = -36
        dpdTrackCfg.minAvgSignalLevelOrx = System.UInt16(pow(10,(DpdLowPowerThresholdORx_dBFS/20.0))*FULL_SCALE_CODE)
    
        #Convert M-Threshold in dBFS to linear scale
        MThreshold_dBFS = -40 
        temp = pow(10,(MThreshold_dBFS/20.0))*FULL_SCALE_CODE
        dpdTrackCfg.dpdMThreshold = pow(temp,2)
        
        #Program the values
        dpdTrackCfg.txChannelMask = txChMask
        link.platform.board.Adrv9010Device.Dfe.DpdTrackingConfigSet(dpdTrackCfg)
    
        #Read back the programmed values
        retVal = link.platform.board.Adrv9010Device.Dfe.DpdTrackingConfigGet(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX1,dpdTrackCfgGet)
        dpdTrackCfg = retVal[1]
        print"DPD Tx Low Power Threshold(dBFS) = ",20*log10(dpdTrackCfg.minAvgSignalLevel/32768.0)
        print"DPD ORx Low Power Threshold(dBFS) = ",20*log10(dpdTrackCfg.minAvgSignalLevelOrx/32768.0)
        print"DPD M Threshold(dBFS) = ",20*log10(pow(dpdTrackCfg.dpdMThreshold,0.5)/32768.0)
        print"DPD Peak Search Window Size = ",dpdTrackCfg.dpdPeakSearchWindowSize
        print"DPD Regularization Value = ",dpdTrackCfg.dpdIndirectRegularizationValue
        print"DPD Samples = ",dpdTrackCfg.dpdSamples
        print"DPD Update Mode = ",dpdTrackCfg.dpdUpdateMode
        print " DPD Indirect Regularization Value LowPower", dpdTrackCfg.dpdIndirectRegularizationLowPowerValue
        print " dpdFilterSel", dpdTrackCfg.dpdFilterSel 
        print "enableDirectLearning", dpdTrackCfg.enableDirectLearning
        print "dpdMu", dpdTrackCfg.dpdMu
        print"***************************************"
    
    
    DPD_MODEL_FILE = "C:\\Ram\\model92.txt"
    #DPD_MODEL_FILE = "C:\\Users\\MVinod\\OneDrive - Analog Devices, Inc\\Documents\\customers\\IISC\\Gen3_95coefficients.txt"
    
    lut = Array.CreateInstance(Types.adi_adrv9010_DpdLut_e, 31)
    lut[0] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT0
    lut[1] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT1
    lut[2] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT2
    lut[3] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT3
    lut[4] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT4
    lut[5] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT5
    lut[6] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT6
    lut[7] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT7
    lut[8] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT8
    lut[9] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT9
    lut[10] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT10
    lut[11] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT11
    lut[12] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT12
    lut[13] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT13
    lut[14] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT14
    lut[15] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT15
    lut[16] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT16
    lut[17] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT17
    lut[18] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT18
    lut[19] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT19
    lut[20] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT20
    lut[21] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT21
    lut[22] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT22
    lut[23] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT23
    lut[24] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT24
    lut[25] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT25
    lut[26] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT26
    lut[27] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT27
    lut[28] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT28
    lut[29] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT29
    lut[30] = Types.adi_adrv9010_DpdLut_e.ADI_ADRV9010_DPD_LUT30
    
    def dpdModelRestoreFromFile(fileName = DPD_MODEL_FILE):    
        dpdModelRestore = Types.adi_adrv9025_DpdModelConfig_t();
        cnt = 0
        modelFile = open(fileName,'r')
        
        for line in modelFile:
            var = line.split()
            dpdModelRestore.dpdFeatures[cnt].i = System.Byte(var[0])
            dpdModelRestore.dpdFeatures[cnt].j = System.Byte(var[1])
            dpdModelRestore.dpdFeatures[cnt].k = System.Byte(var[2])
            dpdModelRestore.dpdFeatures[cnt].lut = lut[int(var[3])]
            dpdModelRestore.dpdFeatures[cnt].coeffReal = float(var[4])
            dpdModelRestore.dpdFeatures[cnt].coeffImaginary = float(var[5])
            cnt = cnt + 1
        modelFile.close
    
        print "Num coeffs read from file = ",cnt    
    
        dpdModelRestore.dpdNumFeatures = cnt
        dpdModelRestore.txChannelMask = 0x0F    
        
        link.platform.board.Adrv9010Device.Dfe.DpdModelConfigSet(dpdModelRestore)
        link.platform.board.Adrv9010Device.Dfe.DpdReset(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX1, Types.adi_adrv9010_DpdResetMode_e.ADI_ADRV9025_DPD_LUT_RESTORE)
        link.platform.board.Adrv9010Device.Dfe.DpdReset(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX2, Types.adi_adrv9010_DpdResetMode_e.ADI_ADRV9025_DPD_LUT_RESTORE)
        link.platform.board.Adrv9010Device.Dfe.DpdReset(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX3, Types.adi_adrv9010_DpdResetMode_e.ADI_ADRV9025_DPD_LUT_RESTORE)
        link.platform.board.Adrv9010Device.Dfe.DpdReset(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX4, Types.adi_adrv9010_DpdResetMode_e.ADI_ADRV9025_DPD_LUT_RESTORE)
    
    def resetDpdFull(TxChannel = 1):
        if TxChannel == 1:
            link.platform.board.Adrv9010Device.Dfe.DpdReset(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX1,Types.adi_adrv9010_DpdResetMode_e.ADI_ADRV9010_DPD_RESET_FULL)
        if TxChannel == 2:
            link.platform.board.Adrv9010Device.Dfe.DpdReset(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX2,Types.adi_adrv9010_DpdResetMode_e.ADI_ADRV9010_DPD_RESET_FULL)
        if TxChannel == 3:
            link.platform.board.Adrv9010Device.Dfe.DpdReset(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX3,Types.adi_adrv9010_DpdResetMode_e.ADI_ADRV9010_DPD_RESET_FULL)
        if TxChannel == 4:
            link.platform.board.Adrv9010Device.Dfe.DpdReset(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX4,Types.adi_adrv9010_DpdResetMode_e.ADI_ADRV9010_DPD_RESET_FULL)
        
    
    def runExtPathDelayInitCal(chMask):
        initCal = Types.adi_adrv9010_InitCals_t()
        initCal.calMask = int(Types.adi_adrv9010_InitCalibrations_e.ADI_ADRV9010_EXTERNAL_PATH_DELAY)
        initCal.channelMask = chMask
        initCal.warmBoot = 0
    
        print "calMask:", hex(initCal.calMask)
        link.platform.board.Adrv9010Device.Cals.InitCalsRun(initCal)
        print "Path delay cal blocking wait status:", link.platform.board.Adrv9010Device.Cals.InitCalsWait(3000, 0)[1]
    
    
    def getExtPathDelay(txCh):
    
        extPathDelay = Types.adi_adrv9010_ExternalPathDelay_t()
        retVal = link.platform.board.Adrv9010Device.Cals.ExternalPathDelayGet(txCh, extPathDelay)
        extPathDelay = retVal[1]
        print "fifoDelay:",extPathDelay.fifoDelay
        print "interpolationIndex:", extPathDelay.interpolationIndex
    
    def dpdTrackingCalEnable(enable = 1):
        print"***********************************"
        if(enable == 1):        
            print"Enabling DPD Tracking Cal"
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX1_DPD), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_ENABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX2_DPD), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_ENABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX3_DPD), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_ENABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX4_DPD), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_ENABLE)
        else:
            print"Disabling DPD Tracking Cal"
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX1_DPD), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_DISABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX2_DPD), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_DISABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX3_DPD), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_DISABLE)
            link.platform.board.Adrv9010Device.Cals.TrackingCalsEnableSet(int(Types.adi_adrv9010_TrackingCalibrations_e.ADI_ADRV9010_TRACK_TX4_DPD), Types.adi_adrv9010_TrackingCalEnableDisable_e.ADI_ADRV9010_TRACKING_CAL_DISABLE)
        print"***********************************"
    def spiRead(address):
        data = adrv9010.Hal.SpiByteRead(address, 0)
        print "SPI Read Address " + hex(address) + ": " + hex(data[1])
    
    def spiWrite(address, data):
        adrv9010.Hal.SpiByteWrite(address, data)
        print "SPI Write Address " + hex(address) + ": " + hex(data)
    
    #Create an Instance of the Class
    link = AdiEvaluationSystem.Instance	
    connect = False
    
    if (link.IsConnected() == False):
        connect = True
        link.platform.board.Client.Connect("192.168.1.90", 55556) 
        print "Connecting"
    
    if (link.IsConnected()):
        adrv9010 = link.Adrv9010Get(1)
        print "Connected"
        ##### YOUR CODE GOES HERE #####
        
        dpdModelRestoreFromFile()
        resetDpdFull(1)
        time.sleep(1)
        resetDpdFull(2)
        time.sleep(1)
        resetDpdFull(3)
        time.sleep(1)
        resetDpdFull(4)
        time.sleep(1)
        dpdTrackingConfigSet()
        runExtPathDelayInitCal(0xF)# Should be 0XF for enabling path delay all four Tx channel #Run 1st after loading signal-> PA on -> Settign Tx atten and ORx gain index
        time.sleep(1)
        getExtPathDelay(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX1) #Run 2nd to confirm extPathDelay ran fine
        time.sleep(1)
        getExtPathDelay(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX2) #Run 2nd to confirm extPathDelay ran fine
        time.sleep(1)
        getExtPathDelay(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX3) #Run 2nd to confirm extPathDelay ran fine
        time.sleep(1)
        getExtPathDelay(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX4) #Run 2nd to confirm extPathDelay ran fine
        
        dpdTrackingCalEnable(1) #Enable DPD tracking cal
        
        for i in range(1):
            time.sleep(2)
            print "TX1"
            dpdStatusGet(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX1) #Read back DPD Status
            time.sleep(6)
            print "TX2"
            dpdStatusGet(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX2) #Read back DPD Status
            time.sleep(6)
            print "TX3"
            dpdStatusGet(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX3) #Read back DPD Status
            time.sleep(6)
            print "TX4"
            dpdStatusGet(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX4) #Read back DPD Status
            
    else:
        print "Not Connected"
    
    if (connect):
        link.platform.board.Client.Disconnect()
        print "Disconnected"
    #################################################################################
    #GUI Version: 0.0.0.718
    #DLL Version: 0.0.0.670
    #Cmd Server Version: 0.0.0.670
    #FPGA Version: 0xD9000007
    #ARM Version: 0.0.0.412(ADI_ADRV9025_ARMBUILD_TESTOBJ)
    #StreamVersion: 0.0.0.64
    #################################################################################
    
    #Import Reference to the DLL
    import System
    import clr
    import time
    from System import Array
    #clr.AddReferenceToFileAndPath("C:\\Program Files\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x64_FULL_eDPD_6P0\\adrvtrx_dll.dll")
    clr.AddReferenceToFileAndPath("C:\\Program Files\\Analog Devices\\ADRV9025 Transceiver Evaluation Software_x64_FULL\\adrvtrx_dll.dll")
    from adrv9010_dll import AdiEvaluationSystem
    from adrv9010_dll import Types
    from adrv9010_dll import Ad9528Types
    
    #CFR_CORRECTION_PULSE_FILENAME = "C:\\Users\\pvalavan\\Desktop\\CFR TEST COMMSCOPE\\Tok_Mad_CFR_Pulse_Generation\\correction pulse\\122P88_MSPS\\CFR PULSE\\LTE_5MHZ_122P88MSPS.txt"
    CFR_CORRECTION_PULSE_FILENAME = "C:\\Users\\RBitra\\Desktop\\CFR_Pulse_NR_5MHz_15kHz_122.88MSPS_1x.txt"
    def spiRead(address):
        data = adrv9010.Hal.SpiByteRead(address, 0)
        print "SPI Read Address " + hex(address) + ": " + hex(data[1])
    
    def spiWrite(address, data):
        adrv9010.Hal.SpiByteWrite(address, data)
        print "SPI Write Address " + hex(address) + ": " + hex(data)
    
    def cfrCorrectionPulseLoadFromFile(fileName = ""):    
        listRealCoeff = []
        listImgCoeff = []
        cnt = 0
        halfpulse = open(fileName,'r')
        
        for line in halfpulse:
            var = line.split()
            cnt = cnt + 1
            listRealCoeff.append(int(var[0]))
            listImgCoeff.append(int(var[1]))
        halfpulse.close
    
        cfrCorrectionPulse = Array.CreateInstance(Types.adi_adrv9010_CfrCorrectionPulse_t, 1)
        cfrCorrectionPulse[0] = Types.adi_adrv9010_CfrCorrectionPulse_t() 
    
        numCoeff = 128
        cfrCorrectionPulse[0].coeffRealHalfPulse = System.Array[System.Int16](listRealCoeff)
        cfrCorrectionPulse[0].coeffImaginaryHalfPulse = System.Array[System.Int16](listImgCoeff)
        cfrCorrectionPulse[0].numCoeffs = numCoeff;
        link.platform.board.Adrv9010Device.Dfe.CfrCorrectionPulseWrite_v2(0xF,cfrCorrectionPulse,1)
        
    
    def cfrStatusGet(txCh):
        cfrStatusRead = Types.adi_adrv9010_CfrStatus_t()
        retVal = link.platform.board.Adrv9010Device.Dfe.CfrStatusGet(txCh, cfrStatusRead)
        if (retVal[0] != 0):
            print "CfrStatusGet failed, result =", retVal[0]
            return -1
        cfrStatusRead = retVal[1]
        print "cfrStatus:", cfrStatusRead.cfrErrorCode    
        print "cfrEngine1PeaksDetected:",cfrStatusRead.cfrStatistics.cfrEngine1PeaksDetected
        print "cfrEngine1PeaksSkipped:",cfrStatusRead.cfrStatistics.cfrEngine1PeaksSkipped
        print "cfrEngine2PeaksDetected:",cfrStatusRead.cfrStatistics.cfrEngine2PeaksDetected
        print "cfrEngine2PeaksSkipped:",cfrStatusRead.cfrStatistics.cfrEngine2PeaksSkipped
        print "cfrEngine3PeaksDetected:",cfrStatusRead.cfrStatistics.cfrEngine3PeaksDetected
        print "cfrEngine3PeaksSkipped:",cfrStatusRead.cfrStatistics.cfrEngine3PeaksSkipped
        print "cfrNumSamplesClipped:",cfrStatusRead.cfrStatistics.cfrNumSamplesClipped
        
        retList = [cfrStatusRead.cfrErrorCode,cfrStatusRead.cfrStatistics.cfrNumSamplesClipped,
                   cfrStatusRead.cfrStatistics.cfrEngine1PeaksDetected,cfrStatusRead.cfrStatistics.cfrEngine1PeaksSkipped,
                   cfrStatusRead.cfrStatistics.cfrEngine2PeaksDetected,cfrStatusRead.cfrStatistics.cfrEngine2PeaksSkipped,
                   cfrStatusRead.cfrStatistics.cfrEngine3PeaksDetected,cfrStatusRead.cfrStatistics.cfrEngine3PeaksSkipped,
                   cfrStatusRead.cfrStatistics.cfrNumSamplesClipped]
        return cfrStatusRead, retList
    
    #Create an Instance of the Class
    link = AdiEvaluationSystem.Instance	
    connect = False
    
    if (link.IsConnected() == False):
        connect = True
        print "connect = True"
        link.platform.board.Client.Connect("192.168.1.10", 55556) 
        print "Connecting"
    
    if (link.IsConnected()):
        adrv9010 = link.Adrv9010Get(1)
        print "Connected"
        #adrv9010 = Link.Adrv9010Get(1)
        ##### YOUR CODE GOES HERE #####
         # cfrctrlConfigSet
        cfrCtrlCfg = Types.adi_adrv9010_CfrCtrlConfig_t()
        cfrCtrlCfg.txChannelMask = 0xF      
        cfrCtrlCfg.cfrMode = Types.adi_adrv9010_CfrModeSel_e.ADI_ADRV9010_CFR_MODE1
        cfrCtrlCfg.cfrInterpolationFactor = Types.adi_adrv9010_CfrInterpolationSel_e.ADI_ADRV9010_CFR_INTERPOLATION_4X
        cfrCtrlCfg.cfrPeakThreshold =  0.55	#   Values based on -12dBFS RMS 0.5623 7.0dB, 0.5957 7.5dB; .6467 8.2dB
        cfrCtrlCfg.cfrTxDelay = 511  #same for all CFR engines
        cfrCtrlCfg.cfrEngine1MaxNumOfPeaks = 5 #Max Peaks per group
        cfrCtrlCfg.cfrEngine2MaxNumOfPeaks = 5
        cfrCtrlCfg.cfrEngine3MaxNumOfPeaks = 5    
        cfrCtrlCfg.cfrCorrectionThresholdScaler = 0.98 #Default
        cfrCtrlCfg.cfrEngine1PeakThresholdScaler = 0.98 #default
        cfrCtrlCfg.cfrEngine2PeakThresholdScaler = 0.985 # default
        cfrCtrlCfg.cfrEngine3PeakThresholdScaler = 0.99 #default
            
        #CFR enable
        cfrEn = Types.adi_adrv9010_CfrEnable_t()
        cfrEn.txChannelMask = 0xF
        cfrEn.cfrEngine1Enable = 01
        cfrEn.cfrEngine1BypassEnable = 0
        cfrEn.cfrEngine2Enable = 01
        cfrEn.cfrEngine2BypassEnable = 0
        cfrEn.cfrEngine3Enable = 01
        cfrEn.cfrEngine3BypassEnable = 0        
    
    
        cfrCtrlArray = Array.CreateInstance(Types.adi_adrv9010_CfrCtrlConfig_t, 1)
        cfrEnArray = Array.CreateInstance(Types.adi_adrv9010_CfrEnable_t, 1)
        cfrCtrlArray[0] = cfrCtrlCfg
        cfrEnArray[0] = cfrEn
        link.platform.board.Adrv9010Device.Dfe.CfrCtrlConfigSet(cfrCtrlArray, 1)
        link.platform.board.Adrv9010Device.Dfe.CfrEnableSet(cfrEnArray, 1)
    
        #Enable CFR hard clipper
        cfrHardClipperCfg = Types.adi_adrv9010_CfrHardClipperConfig_t()
    
        cfrHardClipperCfg.cfrHardClipperEnable = 1
        cfrHardClipperCfg.cfrHardClipperThreshold = 0.55
        cfrHardClipperCfg.txChannelMask = 0xF
        hcArray = Array.CreateInstance(Types.adi_adrv9010_CfrHardClipperConfig_t, 1)
        hcArray[0] = cfrHardClipperCfg
            
        link.platform.board.Adrv9010Device.Dfe.CfrHardClipperConfigSet(hcArray, 1)
    
        #CFR Correction Pulse Write
        cfrCorrectionPulseLoadFromFile(CFR_CORRECTION_PULSE_FILENAME)
    
        #Run CFR init cal
        initCal = Types.adi_adrv9010_InitCals_t()
        initCal.calMask = int(Types.adi_adrv9010_InitCalibrations_e.ADI_ADRV9010_CFR_INIT)
        initCal.channelMask = 0x0F
        initCal.warmBoot = 0
    
        print "calMask:", hex(initCal.calMask)
        link.platform.board.Adrv9010Device.Cals.InitCalsRun(initCal)
        x = 0
        link.platform.board.Adrv9010Device.Cals.InitCalsWait(10000,x)
        time.sleep(10)
        cfrStatusGet(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX1)
    
        link.platform.board.Adrv9010Device.Dfe.CfrCtrlConfigGet(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX1, cfrCtrlCfg)
    
        print cfrCtrlCfg.txChannelMask      
        print cfrCtrlCfg.cfrMode 
        print cfrCtrlCfg.cfrInterpolationFactor
        print cfrCtrlCfg.cfrPeakThreshold
        print cfrCtrlCfg.cfrTxDelay
        print  cfrCtrlCfg.cfrEngine1MaxNumOfPeaks
        print cfrCtrlCfg.cfrEngine2MaxNumOfPeaks
        print cfrCtrlCfg.cfrEngine3MaxNumOfPeaks    
        print cfrCtrlCfg.cfrCorrectionThresholdScaler
        print cfrCtrlCfg.cfrEngine1PeakThresholdScaler
        print cfrCtrlCfg.cfrEngine2PeakThresholdScaler
        print cfrCtrlCfg.cfrEngine3PeakThresholdScaler
    
        link.platform.board.Adrv9010Device.Dfe.CfrEnableGet(Types.adi_adrv9010_TxChannels_e.ADI_ADRV9010_TX1, cfrEn)
    
        print cfrEn.txChannelMask
        print cfrEn.cfrEngine1Enable
        print cfrEn.cfrEngine1BypassEnable
        print cfrEn.cfrEngine2Enable
        print cfrEn.cfrEngine2BypassEnable
        print cfrEn.cfrEngine3Enable
        print cfrEn.cfrEngine3BypassEnable     
    
    
    
    else:
        print "Not Connected"
    
    if (connect):
        link.platform.board.Client.Disconnect()
        print "Disconnected"
    

  • Hi Ramarao , 

    We did the changes for CLGC in the radio script , we followed the CLGC sequence mentioned in the document for ADRD9025  and all APIs are running properly with out any error but when u read the CLGC status , i am getting always zeros in CLGC status structure , as follows 

    cd vyapiv3p1_AD9545+ADRV9025_Init_v0r0p1/
    root@Vyapi:~/vyapiv3p1_AD9545+ADRV9025_Init_v0r0p1# clear
    root@Vyapi:~/vyapiv3p1_AD9545+ADRV9025_Init_v0r0p1#
    root@Vyapi:~/vyapiv3p1_AD9545+ADRV9025_Init_v0r0p1# cp radiolib_Clgc.so /lib/
    root@Vyapi:~/vyapiv3p1_AD9545+ADRV9025_Init_v0r0p1# chmod 777 EnableClgcMay3nd
    root@Vyapi:~/vyapiv3p1_AD9545+ADRV9025_Init_v0r0p1# ./EnableClgcMay3nd
    Rx lo Frequency in Hz : 880000000
    Tx lo Frequency in Hz : 925000000
    Orx lo Frequency in Hz : 925000000
    Tx attenuation : 10 dB
    Rx gain : 10 dB
    ORx gain : 25 dB
    Radio Pin control Mode :0(FDD)
    Powering Off the on board PAs and LNAs
    Devices reset is done
    Executing the adi_daughterboard_Discover
    Executing the adi_daughterboard_Create
    Executing the BoardDispatch Executing the adi_adrv9025Board_Dispatch
    if (actionFlags == TRX_BOARD_ACTION_DEVICE_ALLOC)
    Executing the adi_adrv9025Board_Dispatch
    Transceiver Vendor Id_0: 56
    Transceiver Vendor Id_1: 4
    Executing motherboard->daughterboards[0]->BoardProgram(motherboard->daughterboards[0])
    Executing the adi_adrv9025Board_Dispatch
    Resetting JESD
    JESD reset is done
    EXEC adrv9025_ClocksSet
    EXEC adrv9025_ClocksSet
    EXEC adrv9025_ClocksSet
    EXEC adrv9025_ClocksSet
    EXEC adrv9025_ClocksSet
    Loading stream image ...
    Stream Image firmware loaded successfully
    Loading ARM image ...
    ARM Image firmware loaded successfully
    Executing the adi_adrv9025Board_Dispatch
    Setting up the attenuation before doing calibration
    Setting up the gain before doing calibration
    ADI_NULL_DEVICE_PTR_RETURN
    ADI_FUNCTION_ENTRY_LOG
    ADI_NULL_PTR_RETURN
    adrv9025_InitCalStructureCheck = 0

    adi_adrv9025_CpuMemWrite = 0

    adi_adrv9025_CpuCmdWrite = 0

    ADI_NULL_DEVICE_PTR_RETURN
    ADI_FUNCTION_ENTRY_LOG
    ADI_NULL_PTR_RETURN
    adrv9025_InitCalStructureCheck = 0

    adi_adrv9025_CpuMemWrite = 0

    adi_adrv9025_CpuCmdWrite = 0

    adi_board_adrv9025_JesdBringup completed
    The Tx channel status :f
    The Rx channel status :f
    Setting up the attenuation
    TX 1 Minimum Attenuation : 10000mdB
    TX 2 Minimum Attenuation : 10000mdB
    TX 3 Minimum Attenuation : 10000mdB
    TX 4 Minimum Attenuation : 10000mdB
    Orx 1 Minimum Gain : 25dB
    Orx 2 Minimum Gain : 25dB
    Orx 3 Minimum Gain : 25dB
    Orx 4 Minimum Gain : 25dB
    JESD reset is done
    Deframer 0 status : 87
    Framer 0 status : a
    Tx Lo Frequency :925000000
    Rx Lo Frequency :880000000
    TX2ORX mapping is successfulg=0
    adi_adrv9025_RxGainSet is successfulg=0
    Powering on the on board PAs and LNAs
    ADI_NULL_DEVICE_PTR_RETURN
    ADI_FUNCTION_ENTRY_LOG
    ADI_NULL_PTR_RETURN
    adrv9025_InitCalStructureCheck = 0

    adi_adrv9025_CpuMemWrite = 0

    adi_adrv9025_CpuCmdWrite = 0

    ADI_ADRV9025_EXTERNAL_PATH_DELAY is successfulg=0
    External path delay calibiration in CLGC Done = 0
    External path delay init cals Wait in CLGC Done = 0
    RUNNING LEAKAGE CALIB CLGC ADI_NULL_DEVICE_PTR_RETURN
    ADI_FUNCTION_ENTRY_LOG
    ADI_NULL_PTR_RETURN
    adrv9025_InitCalStructureCheck = 0

    adi_adrv9025_CpuMemWrite = 0

    adi_adrv9025_CpuCmdWrite = 0

    External path delay calibiration in CLGC Done = 0
    CLGC initial Calibirations are done
    ADI_NULL_DEVICE_PTR_RETURN
    ADI_FUNCTION_ENTRY_LOG
    ADI_NULL_PTR_RETURN
    adrv9025_InitCalStructureCheck = 0

    adi_adrv9025_CpuMemWrite = 0

    adi_adrv9025_CpuCmdWrite = 0

    CFR Parameters Readback:
    Tx Channel Mask:1
    cfrMode:0
    cfrTxDelay: 511
    cfrPeakThreshold:0.400000
    cfrEngine1PeakThresholdScaler:0.980000
    cfrEngine2PeakThresholdScaler:0.985000
    cfrEngine3PeakThresholdScaler:0.990000
    cfrCorrectionThresholdScaler:0.980000
    cfrInterpolationFactor:2
    cfrEngine1MaxNumOfPeaks:1
    cfrEngine2MaxNumOfPeaks:1
    cfrEngine3MaxNumOfPeaks:1

    CFR Enable Read:
    tx Channel Mask:1
    cfr Engine1 Enable:1
    cfr Engine1 Bypass Enable:0
    cfr Engine2 Enable:1
    cfr Engine2 Bypass Enable:0
    cfr Engine3 Enable:1
    cfr Engine3 Bypass Enable :0
    CFR HardClipper Readback:
    Tx Channel Mask:1
    CFR Hard Clipper Enable:1
    CFR Hard Clipper Threshold:0.399994
    CFR Status Readback:
    CFR_Error_Code:0
    cfr Engine1 Peaks Detected:15280
    cfr Engine1 Peaks Skipped: 4348
    cfr Engine2 Peaks Detected: 7741
    cfr Engine2 Peaks Skipped: 1613
    cfr Engine3 Peaks Detected: 4203
    cfr Engine3 Peaks Skipped: 721
    cfr NumSamples Clipped: 6693
    DPD programming is started
    adi_adrv9025_DpdModelConfigSet Done = 0
    resteDPDLutRestore Done = 0
    resteDPDFull Done = 0
    adi_adrv9025_DpdTrackingConfigSet Done = 0
    ADI_NULL_DEVICE_PTR_RETURN
    ADI_FUNCTION_ENTRY_LOG
    ADI_NULL_PTR_RETURN
    adrv9025_InitCalStructureCheck = 0

    adi_adrv9025_CpuMemWrite = 0

    adi_adrv9025_CpuCmdWrite = 0

    DPD adi_adrv9025_InitCalsRun Done = 0
    DPD adi_adrv9025_InitCalsWait Done = 0
    Setup DPD fault conditions and recovery actions(optional)
    Get the CLG STATUS
    CLGC status Read Successful
    adi_adrv9025_ClgcConfigSet Successful
    CLGC adi_adrv9025_TrackingCalsEnableSet successful
    DPD adi_adrv9025_InitCalsWait Done = 0
    CLGC DPP Tracking Calibiration is Successful = 0
    CLGC Enable CLGC tracking suuccessful
    dpdErrorCode :0x0
    dpdPercentComplete :0
    dpdPerformanceMetric :0
    dpdIterCount :8
    dpdUpdateCount :7
    dpdSyncStatus :4
    dpdModelTable :0
    dpdMeanTuPower :-13.531085
    dpdPeakTuPower :-7.596758
    dpdMeanTxPower :-13.536119
    dpdPeakTxPower :-7.602159
    dpdMeanOrxPower :-13.730960
    dpdPeakOrxPower :-7.766534
    dpdDirectEvm :0.008892
    dpdIndirectEvm :0.009472
    dpdSelectError :0.004946
    dpdIndirectError :0.004832
    dpdErrorStatus0 (metrics:actions): X:X :0:1
    dpdErrorStatus1 (metrics:actions) :0:0
    dpdPersistentErrorStatus0 (metrics:actions) :0:0
    dpdPersistentErrorStatus1 (metrics:actions) :0:0
    reservedPM :40240960
    reservedTP :42137458
    reservedPR :42137458
    ***************************************
    Monitor DPD tracking calibration status Successful

    adi_adrv9025_ClgcConfigGet SUCCESS
    clgc_configFg_st.txChannelMask = 1
    clgc_configFg_st.clgcEnableGainControl = 1
    clgc_configFg_st.clgcMeasurementBatchTime_us = 10
    clgc_configFg_st.clgcMaxSampleBatchesPerClgcRun = 0
    clgc_configFg_st.clgcExpectedLoopGain_dB = -9.000000
    clgc_configFg_st.clgcExpectedLoopGainRipple_dB = 0.050000
    clgc_configFg_st.clgcTxQualifyingThreshold_dBFS = -70.000000
    clgc_configFg_st.clgcOrxQualifyingThreshold_dBFS = -70.000000
    clgc_configFg_st.clgcOrxMinimumSnr_dB = 0.000000
    clgc_configFg_st.clgcMaxGainAdjustmentStepSize_dB = 3.000000
    clgc_configFg_st.clgcDampingParam = 0.100000
    clgc_configFg_st.clgcMinTxAttenAdjust_dB = 5.000000
    clgc_configFg_st.clgcMaxTxAttenAdjust_dB = 30.000000
    Getting the CLGC status for the ADI_ADRV9025_TX1 = 0
    CLGC Status = 0
    clgc_coinfig_status[0].clgcLoopGain = 0.000000
    clgc_coinfig_status[0].clgcTxRmsPower = 0.000000
    clgc_coinfig_status[0].clgcOrxRmsPower = 0.000000
    clgc_coinfig_status[0].activeTxAttenIndex = 0
    clgc_coinfig_status[0].activeOrxGainIndex = 0
    clgc_coinfig_status[0].clgcCaptureStatus = 0
    clgc_coinfig_status[0].clgcSyncStatus = 0
    clgc_coinfig_status[0].clgcState = 0
    Executing the adi_adrv9025Board_Dispatch
    Radio initialized successfully.

    Can you please check and let me know if anything we need to take care further. 

    Regards,

    R D Nadaf