modDP5Configuration Source Code

Option Explicit 

Public s As New CSCommon 

Public Function GetCmdDesc(ByVal strCmd As StringAs String 
    Dim strCmdName As String 
    Select Case strCmd 
        Case "RESC" 
            strCmdName = "Reset Configuration" 
        Case "CLCK" 
            strCmdName = "20MHz/80MHz" 
        Case "TPEA" 
            strCmdName = "Peaking Time" 
        Case "GAIF" 
            strCmdName = "Fine Gain" 
        Case "GAIN" 
            strCmdName = "Total Gain (Analog * Fine)" 
        Case "RESL" 
            strCmdName = "Detector Reset Lockout" 
        Case "TFLA" 
            strCmdName = "Flat Top" 
        Case "TPFA" 
            strCmdName = "Fast Channel Peaking Time" 
        Case "RTDE" 
            strCmdName = "RTD On/Off" 
        Case "MCAS" 
            strCmdName = "MCA Source" 
        Case "RTDD" 
            strCmdName = "Custom RTD Oneshot Delay" 
        Case "RTDW" 
            strCmdName = "Custom RTD Oneshot Width" 
        Case "PURE" 
            strCmdName = "PUR Interval On/Off" 
        Case "SOFF" 
            strCmdName = "Set Spectrum Offset" 
        Case "INOF" 
            strCmdName = "Input Offset" 
        Case "ACKE" 
            strCmdName = "ACK / Don't ACK Packets With Errors" 
        Case "AINP" 
            strCmdName = "Analog Input Pos/Neg" 
        Case "AUO1" 
            strCmdName = "AUX_OUT Selection" 
        Case "AUO2" 
            strCmdName = "AUX_OUT2 Selection" 
        Case "BLRD" 
            strCmdName = "BLR Down Correction" 
        Case "BLRM" 
            strCmdName = "BLR Mode" 
        Case "BLRU" 
            strCmdName = "BLR Up Correction" 
        Case "BOOT" 
            strCmdName = "Turn Supplies On/Off At Power Up" 
        Case "CUSP" 
            strCmdName = "Non-Trapezoidal Shaping" 
        Case "DACF" 
            strCmdName = "DAC Offset" 
        Case "DACO" 
            strCmdName = "DAC Output" 
        Case "GAIA" 
            strCmdName = "Analog Gain Index" 
        Case "GATE" 
            strCmdName = "Gate Control" 
        Case "GPED" 
            strCmdName = "G.P. Counter Edge" 
        Case "GPGA" 
            strCmdName = "G.P. Counter Uses GATE?" 
        Case "GPIN" 
            strCmdName = "G.P. Counter Input" 
        Case "GPMC" 
            strCmdName = "G.P. Counter Cleared With MCA Counters?" 
        Case "GPME" 
            strCmdName = "G.P. Counter Uses MCA_EN?" 
        Case "HVSE" 
            strCmdName = "HV Set" 
        Case "MCAC" 
            strCmdName = "MCA/MCS Channels" 
        Case "MCAE" 
            strCmdName = "MCA/MCS Enable" 
        Case "MCSL" 
            strCmdName = "MCS Low Threshold" 
        Case "MCSH" 
            strCmdName = "MCS High Threshold" 
        Case "MCST" 
            strCmdName = "MCS Timebase" 
        Case "PAPS" 
            strCmdName = "Preamp 8.5/5 (N/A)" 
        Case "PAPZ" 
            strCmdName = "Pole-Zero" 
        Case "PDMD" 
            strCmdName = "Peak Detect Mode (Min/Max)" 
        Case "PRCL" 
            strCmdName = "Preset Counts Low Threshold" 
        Case "PRCH" 
            strCmdName = "Preset Counts High Threshold" 
        Case "PREC" 
            strCmdName = "Preset Counts" 
        Case "PRER" 
            strCmdName = "Preset Real Time" 
        Case "PREL" 
            strCmdName = "Preset Live Time" 
        Case "PRET" 
            strCmdName = "Preset Time" 
        Case "RTDS" 
            strCmdName = "RTD Sensitivity" 
        Case "RTDT" 
            strCmdName = "RTD Threshold" 
        Case "SCAH" 
            strCmdName = "SCAx High Threshold" 
        Case "SCAI" 
            strCmdName = "SCA Index" 
        Case "SCAL" 
            strCmdName = "SCAx Low Theshold" 
        Case "SCAO" 
            strCmdName = "SCAx Output (SCA1-8 Only)" 
        Case "SCAW" 
            strCmdName = "SCA Pulse Width (Not Indexed - SCA1-8)" 
        Case "SCOE" 
            strCmdName = "Scope Trigger Edge" 
        Case "SCOG" 
            strCmdName = "Digital Scope Gain" 
        Case "SCOT" 
            strCmdName = "Scope Trigger Position" 
        Case "TECS" 
            strCmdName = "TEC Set" 
        Case "THFA" 
            strCmdName = "Fast Threshold" 
        Case "THSL" 
            strCmdName = "Slow Threshold" 
        Case "TLLD" 
            strCmdName = "LLD Threshold" 
        Case "TPMO" 
            strCmdName = "Test Pulser On/Off" 
        Case "VOLU" 
            strCmdName = "Speaker On/Off" 
        Case "CON1" 
            strCmdName = "Connector 1" 
        Case "CON2" 
            strCmdName = "Connector 2" 
    End Select 
    GetCmdDesc = strCmdName 
End Function 

Public Function CreateFullReadBackCmd() As String 
    Dim strCfg As String 
    Dim isHVSE As Boolean 
    Dim isPAPS As Boolean 
    Dim isTECS As Boolean 
    Dim isVOLU As Boolean 
    Dim isCON1 As Boolean 
    Dim isCON2 As Boolean 
    Dim isINOF As Boolean 
    Dim isBOOT As Boolean 
    Dim isGATE As Boolean 
    Dim isPAPZ As Boolean 
    Dim isSCTC As Boolean 
    Dim isDP5_DxK As Boolean 
    Dim isDP5_DxL As Boolean 
    
    If (STATUS.DEVICE_ID = dppMCA8000D) Then 
        strCfg = CreateFullReadBackCmdMCA8000D()
        CreateFullReadBackCmd = strCfg 
        Exit Function 
    End If 
    
    ' DP5 Rev Dx K,L needs PAPZ
    If ((STATUS.DEVICE_ID = dppDP5) And STATUS.isDP5_RevDxGains) Then 
        If ((STATUS.DPP_ECO And &HF) = &HA) Then 
            isDP5_DxK = True 
        End If 
        If ((STATUS.DPP_ECO And &HF) = &HB) Then 
            isDP5_DxL = True 
        End If 
    End If 

    isHVSE = CBool(((STATUS.DEVICE_ID <> dppPX5) And STATUS.PC5_PRESENT) Or (STATUS.DEVICE_ID = dppPX5))
    isPAPS = CBool((STATUS.DEVICE_ID <> dppDP5G) And (STATUS.DEVICE_ID <> dppTB5))
    isTECS = CBool(((STATUS.DEVICE_ID = dppDP5) And STATUS.PC5_PRESENT) Or (STATUS.DEVICE_ID = dppPX5) Or (STATUS.DEVICE_ID = dppDP5X))
    isVOLU = CBool(STATUS.DEVICE_ID = dppPX5)
    
    isCON1 = CBool((STATUS.DEVICE_ID <> dppDP5) And (STATUS.DEVICE_ID <> dppDP5X))
    isCON2 = CBool((STATUS.DEVICE_ID <> dppDP5) And (STATUS.DEVICE_ID <> dppDP5X))
    
    isINOF = CBool((STATUS.DEVICE_ID <> dppDP5G) And (STATUS.DEVICE_ID <> dppTB5))
    isSCTC = CBool((STATUS.DEVICE_ID = dppDP5G) Or (STATUS.DEVICE_ID = dppTB5))
    isBOOT = CBool((STATUS.DEVICE_ID = dppDP5) Or (STATUS.DEVICE_ID = dppDP5X))
    
    isGATE = CBool((STATUS.DEVICE_ID = dppDP5) Or (STATUS.DEVICE_ID = dppDP5X))
    isPAPZ = CBool((STATUS.DEVICE_ID = dppPX5) Or isDP5_DxK Or isDP5_DxL)
    
    strCfg = "" 
    strCfg = strCfg & "RESC=?;" 
    strCfg = strCfg & "CLCK=?;" 
    strCfg = strCfg & "TPEA=?;" 
    strCfg = strCfg & "GAIF=?;" 
    strCfg = strCfg & "GAIN=?;" 
    strCfg = strCfg & "RESL=?;" 
    strCfg = strCfg & "TFLA=?;" 
    strCfg = strCfg & "TPFA=?;" 
    strCfg = strCfg & "PURE=?;" 
    If (isSCTC) Then strCfg = strCfg & "SCTC=?;" 
    strCfg = strCfg & "RTDE=?;" 
    strCfg = strCfg & "MCAS=?;" 
    strCfg = strCfg & "MCAC=?;" 
    strCfg = strCfg & "SOFF=?;" 
    strCfg = strCfg & "AINP=?;" 
    If (isINOF) Then strCfg = strCfg & "INOF=?;" 
    strCfg = strCfg & "GAIA=?;" 
    strCfg = strCfg & "CUSP=?;" 
    strCfg = strCfg & "PDMD=?;" 
    strCfg = strCfg & "THSL=?;" 
    strCfg = strCfg & "TLLD=?;" 
    strCfg = strCfg & "THFA=?;" 
    strCfg = strCfg & "DACO=?;" 
    strCfg = strCfg & "DACF=?;" 
    strCfg = strCfg & "RTDS=?;" 
    strCfg = strCfg & "RTDT=?;" 
    strCfg = strCfg & "BLRM=?;" 
    strCfg = strCfg & "BLRD=?;" 
    strCfg = strCfg & "BLRU=?;" 
    If (isGATE) Then strCfg = strCfg & "GATE=?;" 
    strCfg = strCfg & "AUO1=?;" 
    strCfg = strCfg & "PRET=?;" 
    strCfg = strCfg & "PRER=?;" 
    strCfg = strCfg & "PREC=?;" 
    strCfg = strCfg & "PRCL=?;" 
    strCfg = strCfg & "PRCH=?;" 
    If (isHVSE) Then strCfg = strCfg & "HVSE=?;" 
    If (isTECS) Then strCfg = strCfg & "TECS=?;" 
    If (isPAPZ) Then strCfg = strCfg & "PAPZ=?;" 
    If (isPAPS) Then strCfg = strCfg & "PAPS=?;" 
    strCfg = strCfg & "SCOE=?;" 
    strCfg = strCfg & "SCOT=?;" 
    strCfg = strCfg & "SCOG=?;" 
    strCfg = strCfg & "MCSL=?;" 
    strCfg = strCfg & "MCSH=?;" 
    strCfg = strCfg & "MCST=?;" 
    strCfg = strCfg & "AUO2=?;" 
    strCfg = strCfg & "TPMO=?;" 
    strCfg = strCfg & "GPED=?;" 
    strCfg = strCfg & "GPIN=?;" 
    strCfg = strCfg & "GPME=?;" 
    strCfg = strCfg & "GPGA=?;" 
    strCfg = strCfg & "GPMC=?;" 
    strCfg = strCfg & "MCAE=?;" 
    If (isVOLU) Then strCfg = strCfg & "VOLU=?;" 
    If (isCON1) Then strCfg = strCfg & "CON1=?;" 
    If (isCON2) Then strCfg = strCfg & "CON2=?;" 
    If (isBOOT) Then strCfg = strCfg & "BOOT=?;" 
    CreateFullReadBackCmd = strCfg 
End Function 

Public Function CreateFullReadBackCmdMCA8000D() As String 
    Dim strCfg As String 
    strCfg = "" 
    If (STATUS.DEVICE_ID = dppMCA8000D) Then 
        strCfg = strCfg & "RESC=?;" 
        strCfg = strCfg & "PURE=?;" 
        strCfg = strCfg & "MCAS=?;" 
        strCfg = strCfg & "MCAC=?;" 
        strCfg = strCfg & "SOFF=?;" 
        strCfg = strCfg & "GAIA=?;" 
        strCfg = strCfg & "PDMD=?;" 
        strCfg = strCfg & "THSL=?;" 
        strCfg = strCfg & "TLLD=?;" 
        strCfg = strCfg & "GATE=?;" 
        strCfg = strCfg & "AUO1=?;" 
        strCfg = strCfg & "PRER=?;" 
        strCfg = strCfg & "PREL=?;" 
        strCfg = strCfg & "PREC=?;" 
        strCfg = strCfg & "PRCL=?;" 
        strCfg = strCfg & "PRCH=?;" 
        strCfg = strCfg & "SCOE=?;" 
        strCfg = strCfg & "SCOT=?;" 
        strCfg = strCfg & "SCOG=?;" 
        strCfg = strCfg & "MCSL=?;" 
        strCfg = strCfg & "MCSH=?;" 
        strCfg = strCfg & "MCST=?;" 
        strCfg = strCfg & "AUO2=?;" 
        strCfg = strCfg & "GPED=?;" 
        strCfg = strCfg & "GPIN=?;" 
        strCfg = strCfg & "GPME=?;" 
        strCfg = strCfg & "GPGA=?;" 
        strCfg = strCfg & "GPMC=?;" 
        strCfg = strCfg & "MCAE=?;" 
        strCfg = strCfg & "PDMD=?;" 
    End If 
    CreateFullReadBackCmdMCA8000D = strCfg 
End Function 

Public Sub MakeDp5CmdList(ByRef strCfgArr As Collection)
    Dim isHVSE As Boolean 
    Dim isPAPS As Boolean 
    Dim isTECS As Boolean 
    Dim isVOLU As Boolean 
    Dim isCON1 As Boolean 
    Dim isCON2 As Boolean 
    Dim isINOF As Boolean 
    Dim isBOOT As Boolean 
    Dim isGATE As Boolean 
    Dim isPAPZ As Boolean 
    Dim isSCTC As Boolean 
    Dim isDP5_DxK As Boolean 
    Dim isDP5_DxL As Boolean 
    
    If (STATUS.DEVICE_ID = dppMCA8000D) Then 
        Call MakeDp5CmdListMCA8000D(strCfgArr)
        Exit Sub 
    End If 
    
    ' DP5 Rev Dx K,L needs PAPZ
    If ((STATUS.DEVICE_ID = dppDP5) And STATUS.isDP5_RevDxGains) Then 
        If ((STATUS.DPP_ECO And &HF) = &HA) Then 
            isDP5_DxK = True 
        End If 
        If ((STATUS.DPP_ECO And &HF) = &HB) Then 
            isDP5_DxL = True 
        End If 
    End If 

    isHVSE = CBool(((STATUS.DEVICE_ID <> dppPX5) And STATUS.PC5_PRESENT) Or (STATUS.DEVICE_ID = dppPX5))
    isPAPS = CBool((STATUS.DEVICE_ID <> dppDP5G) And (STATUS.DEVICE_ID <> dppTB5))
    isTECS = CBool(((STATUS.DEVICE_ID = dppDP5) And STATUS.PC5_PRESENT) Or (STATUS.DEVICE_ID = dppPX5) Or (STATUS.DEVICE_ID = dppDP5X))
    isVOLU = CBool(STATUS.DEVICE_ID = dppPX5)
    
    isCON1 = CBool((STATUS.DEVICE_ID <> dppDP5) And (STATUS.DEVICE_ID <> dppDP5X))
    isCON2 = CBool((STATUS.DEVICE_ID <> dppDP5) And (STATUS.DEVICE_ID <> dppDP5X))
    
    isINOF = CBool((STATUS.DEVICE_ID <> dppDP5G) And (STATUS.DEVICE_ID <> dppTB5))
    isSCTC = CBool((STATUS.DEVICE_ID = dppDP5G) Or (STATUS.DEVICE_ID = dppTB5))
    isBOOT = CBool((STATUS.DEVICE_ID = dppDP5) Or (STATUS.DEVICE_ID = dppDP5X))
    
    isGATE = CBool((STATUS.DEVICE_ID = dppDP5) Or (STATUS.DEVICE_ID = dppDP5X))
    isPAPZ = CBool((STATUS.DEVICE_ID = dppPX5) Or isDP5_DxK Or isDP5_DxL)
    
    strCfgArr.Add ("RESC")
    strCfgArr.Add ("CLCK")
    strCfgArr.Add ("TPEA")
    strCfgArr.Add ("GAIF")
    strCfgArr.Add ("GAIN")
    strCfgArr.Add ("RESL")
    strCfgArr.Add ("TFLA")
    strCfgArr.Add ("TPFA")
    strCfgArr.Add ("PURE")
    If (isSCTC) Then strCfgArr.Add ("SCTC")
    strCfgArr.Add ("RTDE")
    strCfgArr.Add ("MCAS")
    strCfgArr.Add ("MCAC")
    strCfgArr.Add ("SOFF")
    strCfgArr.Add ("AINP")
    If (isINOF) Then strCfgArr.Add ("INOF")
    strCfgArr.Add ("GAIA")
    strCfgArr.Add ("CUSP")
    strCfgArr.Add ("PDMD")
    strCfgArr.Add ("THSL")
    strCfgArr.Add ("TLLD")
    strCfgArr.Add ("THFA")
    strCfgArr.Add ("DACO")
    strCfgArr.Add ("DACF")
    strCfgArr.Add ("RTDS")
    strCfgArr.Add ("RTDT")
    strCfgArr.Add ("BLRM")
    strCfgArr.Add ("BLRD")
    strCfgArr.Add ("BLRU")
    If (isGATE) Then strCfgArr.Add ("GATE")
    strCfgArr.Add ("AUO1")
    strCfgArr.Add ("PRET")
    strCfgArr.Add ("PRER")
    strCfgArr.Add ("PREC")
    strCfgArr.Add ("PRCL")
    strCfgArr.Add ("PRCH")
    If (isHVSE) Then strCfgArr.Add ("HVSE")
    If (isTECS) Then strCfgArr.Add ("TECS")
    If (isPAPZ) Then strCfgArr.Add ("PAPZ")
    If (isPAPS) Then strCfgArr.Add ("PAPS")
    strCfgArr.Add ("SCOE")
    strCfgArr.Add ("SCOT")
    strCfgArr.Add ("SCOG")
    strCfgArr.Add ("MCSL")
    strCfgArr.Add ("MCSH")
    strCfgArr.Add ("MCST")
    strCfgArr.Add ("AUO2")
    strCfgArr.Add ("TPMO")
    strCfgArr.Add ("GPED")
    strCfgArr.Add ("GPIN")
    strCfgArr.Add ("GPME")
    strCfgArr.Add ("GPGA")
    strCfgArr.Add ("GPMC")
    strCfgArr.Add ("MCAE")
    If (isVOLU) Then strCfgArr.Add ("VOLU")
    If (isCON1) Then strCfgArr.Add ("CON1")
    If (isCON2) Then strCfgArr.Add ("CON2")
    If (isBOOT) Then strCfgArr.Add ("BOOT")
End Sub 

Public Sub MakeDp5CmdListMCA8000D(ByRef strCfgArr As Collection)
    If (STATUS.DEVICE_ID = dppMCA8000D) Then 
        strCfgArr.Add ("RESC")
        strCfgArr.Add ("PURE")
        strCfgArr.Add ("MCAS")
        strCfgArr.Add ("MCAC")
        strCfgArr.Add ("SOFF")
        strCfgArr.Add ("GAIA")
        strCfgArr.Add ("PDMD")
        strCfgArr.Add ("THSL")
        strCfgArr.Add ("TLLD")
        strCfgArr.Add ("GATE")
        strCfgArr.Add ("AUO1")
        strCfgArr.Add ("PRER")
        strCfgArr.Add ("PREL")
        strCfgArr.Add ("PREC")
        strCfgArr.Add ("PRCL")
        strCfgArr.Add ("PRCH")
        strCfgArr.Add ("SCOE")
        strCfgArr.Add ("SCOT")
        strCfgArr.Add ("SCOG")
        strCfgArr.Add ("MCSL")
        strCfgArr.Add ("MCSH")
        strCfgArr.Add ("MCST")
        strCfgArr.Add ("AUO2")
        strCfgArr.Add ("GPED")
        strCfgArr.Add ("GPIN")
        strCfgArr.Add ("GPME")
        strCfgArr.Add ("GPGA")
        strCfgArr.Add ("GPMC")
        strCfgArr.Add ("MCAE")
        strCfgArr.Add ("PDMD")
    End If 
End Sub 

Public Function GetCmdData(ByVal cstrCmd As StringByVal cstrCfgData As StringAs String 
    Dim iStart As Integer 
    Dim iEnd As Integer 
    Dim iCmd As Integer 
    Dim cstrCmdData As String 

    GetCmdData = "" 
    cstrCmdData = "" 
    If (Len(cstrCfgData) < 7) Then Exit Function ' no data
    If (Len(cstrCmd) <> 4) Then Exit Function ' bad command
    iCmd = InStr(1, cstrCfgData, cstrCmd + "=", CompareMethod.Text)
    If (iCmd = 0) Then Exit Function ' cmd not found
    iStart = InStr(iCmd, cstrCfgData, "=")
    If (iStart = 0) Then Exit Function ' data start not found
    iEnd = InStr(iCmd, cstrCfgData, ";")
    If (iEnd = 0) Then GetCmdData = cstrCmdData ' data end found
    If (iStart >= iEnd) Then Exit Function ' data error
    cstrCmdData = Mid(cstrCfgData, iStart + 1, iEnd - (iStart + 1))
    GetCmdData = cstrCmdData 
End Function 

Public Function ReplaceCmdDesc(ByVal cstrCmd As StringByRef cstrCfgData As StringAs String 
    Dim iStart As Integer 
    Dim iCmd As Integer 
    Dim cstrNew As String 
    Dim cstrDesc As String 

    ReplaceCmdDesc = cstrCfgData 
    cstrNew = "" 
    If (Len(cstrCfgData) < 7) Then Exit Function ' no data
    If (Len(cstrCmd) <> 4) Then Exit Function ' bad command
    iCmd = InStr(1, cstrCfgData, cstrCmd + "=")
    If (iCmd = 0) Then Exit Function ' cmd not found
    cstrDesc = GetCmdDesc(cstrCmd)
    If (Len(cstrDesc) = 0) Then Exit Function ' cmd desc  not found
    iStart = InStr(iCmd, cstrCfgData, "=")
    If (iStart <> (iCmd + 4)) Then Exit Function ' data start not found
    cstrNew = Left(cstrCfgData, iCmd - 1) & cstrDesc & Mid(cstrCfgData, iStart)
    ReplaceCmdDesc = cstrNew 
End Function 

Public Function AppendCmdDesc(ByRef cstrCmd As StringByRef cstrCfgData As StringAs String 
    Dim iStart As Integer 
    Dim iEnd As Integer 
    Dim iCmd As Integer 
    Dim cstrNew As String 
    Dim cstrDesc As String 

    AppendCmdDesc = cstrCfgData 
    cstrNew = "" 
    If (Len(cstrCfgData) < 7) Then Exit Function ' no data
    If (Len(cstrCmd) <> 4) Then Exit Function ' bad command
    iCmd = InStr(1, cstrCfgData, cstrCmd + "=")
    If (iCmd = 0) Then Exit Function ' cmd not found
    cstrDesc = GetCmdDesc(cstrCmd)
    If (Len(cstrDesc) = 0) Then Exit Function ' cmd desc  not found
    iStart = InStr(iCmd, cstrCfgData, "=")
    If (iStart <> (iCmd + 4)) Then Exit Function ' data start not found
    iEnd = InStr(iStart + 1, cstrCfgData, ";")
    If (iEnd > (iStart + 11)) Then Exit Function ' data end not found
    cstrNew = Left(cstrCfgData, iEnd) & "    " & cstrDesc & Mid(cstrCfgData, iEnd + 1)
    AppendCmdDesc = cstrNew 
End Function 

Public Function RemoveCmd(ByVal cstrCmd As StringByVal cstrCfgData As StringAs String 
    Dim iStart As Integer 
    Dim iEnd As Integer 
    Dim iCmd As Integer 
    Dim cstrNew As String 
    Dim strLeft As String 
    Dim strRight As String 

    cstrNew = "" 
    RemoveCmd = cstrCfgData 
    If (Len(cstrCfgData) < 7) Then Exit Function ' no data
    If (Len(cstrCmd) <> 4) Then Exit Function ' bad command
    iCmd = InStr(1, cstrCfgData, cstrCmd + "=")
    If (iCmd = 0) Then Exit Function ' cmd not found
    iStart = iCmd 
    iEnd = InStr(iCmd, cstrCfgData, ";")
    If (iEnd = 0) Then Exit Function 
    If (iEnd <= iStart) Then Exit Function ' unknown error
    strLeft = Left(cstrCfgData, iStart - 1)
    strRight = Mid(cstrCfgData, iEnd + 1)
    cstrNew = strLeft & strRight 
    RemoveCmd = cstrNew 
End Function 

'removes selected command by dpp device type
Public Function RemoveCmdByDeviceType(ByVal strCfgDataIn As String, PC5_PRESENT As Boolean, DppType As Byte, isDP5_RevDxGains As Boolean, DPP_ECO As ByteAs String 
    Dim strCfgData As String 
    Dim isHVSE As Boolean 
    Dim isPAPS As Boolean 
    Dim isTECS As Boolean 
    Dim isVOLU As Boolean 
    Dim isCON1 As Boolean 
    Dim isCON2 As Boolean 
    Dim isINOF As Boolean 
    Dim isBOOT As Boolean 
    Dim isGATE As Boolean 
    Dim isPAPZ As Boolean 
    Dim isSCTC As Boolean 
    Dim isPREL As Boolean 
    Dim isDP5_DxK As Boolean 
    Dim isDP5_DxL As Boolean 
    
    strCfgData = strCfgDataIn 
    If (DppType = dppMCA8000D) Then 
        strCfgData = Remove_MCA8000D_Cmds(strCfgData, DppType)
        RemoveCmdByDeviceType = strCfgData 
    End If 
    
    ' DP5 Rev Dx K,L needs PAPZ
    If ((DppType = dppDP5) And isDP5_RevDxGains) Then 
        If ((DPP_ECO And &HF) = &HA) Then 
                isDP5_DxK = True 
        End If 
        If ((DPP_ECO And &HF) = &HB) Then 
                isDP5_DxL = True 
        End If 
    End If 

    isHVSE = CBool(((DppType <> dppPX5) And PC5_PRESENT) Or (DppType = dppPX5))
    isPAPS = CBool((DppType <> dppDP5G) And (DppType <> dppTB5))
    isTECS = CBool(((DppType = dppDP5) And PC5_PRESENT) Or (DppType = dppPX5) Or (DppType = dppDP5X))
    isVOLU = CBool(DppType = dppPX5)
    isCON1 = CBool((DppType <> dppDP5) And (DppType <> dppDP5X))
    isCON2 = CBool((DppType <> dppDP5) And (DppType <> dppDP5X))
    isINOF = CBool((DppType <> dppDP5G) And (DppType <> dppTB5))
    isSCTC = CBool((DppType = dppDP5G) Or (DppType = dppTB5))
    isBOOT = CBool((DppType = dppDP5) Or (DppType = dppDP5X))
    isGATE = CBool((DppType = dppDP5) Or (DppType = dppDP5X))
    isPAPZ = CBool((DppType = dppPX5) Or isDP5_DxK Or isDP5_DxL)
    isPREL = CBool(DppType = dppMCA8000D)
    If (Not isHVSE) Then strCfgData = RemoveCmd("HVSE", strCfgData)     'High Voltage Bias
    If (Not isPAPS) Then strCfgData = RemoveCmd("PAPS", strCfgData)     'Preamp Voltage
    If (Not isTECS) Then strCfgData = RemoveCmd("TECS", strCfgData)     'Cooler Temperature
    If (Not isVOLU) Then strCfgData = RemoveCmd("VOLU", strCfgData)     'px5 speaker
    If (Not isCON1) Then strCfgData = RemoveCmd("CON1", strCfgData)     'connector 1
    If (Not isCON2) Then strCfgData = RemoveCmd("CON2", strCfgData)     'connector 2
    If (Not isINOF) Then strCfgData = RemoveCmd("INOF", strCfgData)     'input offset
    If (Not isBOOT) Then strCfgData = RemoveCmd("BOOT", strCfgData)     'PC5 On At StartUp
    If (Not isGATE) Then strCfgData = RemoveCmd("GATE", strCfgData)     'Gate input
    If (Not isPAPZ) Then strCfgData = RemoveCmd("PAPZ", strCfgData)     'Pole-Zero
    If (Not isSCTC) Then strCfgData = RemoveCmd("SCTC", strCfgData)     'Scintillator Time Constant
    If (Not isPREL) Then strCfgData = RemoveCmd("PREL", strCfgData)     'Preset Live Time
    RemoveCmdByDeviceType = strCfgData 
End Function 

''removes MCA8000D commands
Public Function Remove_MCA8000D_Cmds(strCfgDataIn As String, DppType As ByteAs String 
    Dim strCfgData As String 
    
    strCfgData = strCfgDataIn 
    If (DppType = dppMCA8000D) Then 
        strCfgData = RemoveCmd("CLCK", strCfgData)
        strCfgData = RemoveCmd("TPEA", strCfgData)
        strCfgData = RemoveCmd("GAIF", strCfgData)
        strCfgData = RemoveCmd("GAIN", strCfgData)
        strCfgData = RemoveCmd("RESL", strCfgData)
        strCfgData = RemoveCmd("TFLA", strCfgData)
        strCfgData = RemoveCmd("TPFA", strCfgData)
        'strCfgData = RemoveCmd("PURE", strCfgData)
        strCfgData = RemoveCmd("RTDE", strCfgData)
        strCfgData = RemoveCmd("AINP", strCfgData)
        strCfgData = RemoveCmd("INOF", strCfgData)
        strCfgData = RemoveCmd("CUSP", strCfgData)
        strCfgData = RemoveCmd("THFA", strCfgData)
        strCfgData = RemoveCmd("DACO", strCfgData)
        strCfgData = RemoveCmd("DACF", strCfgData)
        strCfgData = RemoveCmd("RTDS", strCfgData)
        strCfgData = RemoveCmd("RTDT", strCfgData)
        strCfgData = RemoveCmd("BLRM", strCfgData)
        strCfgData = RemoveCmd("BLRD", strCfgData)
        strCfgData = RemoveCmd("BLRU", strCfgData)
        strCfgData = RemoveCmd("PRET", strCfgData)
        strCfgData = RemoveCmd("HVSE", strCfgData)
        strCfgData = RemoveCmd("TECS", strCfgData)
        strCfgData = RemoveCmd("PAPZ", strCfgData)
        strCfgData = RemoveCmd("PAPS", strCfgData)
        strCfgData = RemoveCmd("TPMO", strCfgData)
        strCfgData = RemoveCmd("SCAH", strCfgData)
        strCfgData = RemoveCmd("SCAI", strCfgData)
        strCfgData = RemoveCmd("SCAL", strCfgData)
        strCfgData = RemoveCmd("SCAO", strCfgData)
        strCfgData = RemoveCmd("SCAW", strCfgData)
        strCfgData = RemoveCmd("BOOT", strCfgData)

        ' added to list late, recheck at later date 20120817
        strCfgData = RemoveCmd("CON1", strCfgData)
        strCfgData = RemoveCmd("CON2", strCfgData)

        ' not implemented as of 20120817, will be implemented at some time
        strCfgData = RemoveCmd("VOLU", strCfgData)
    End If 
    Remove_MCA8000D_Cmds = strCfgData 
End Function 

Public Function GetCmdChunk(strCmd As StringAs Long 
    Dim idxCfg As Long 
    Dim lChunk As Long 
    Dim lEnd As Long 
    GetCmdChunk = 0 
    lChunk = 0 
    lEnd = 0 
    For idxCfg = 1 To Len(strCmd)
        lChunk = InStr(lEnd + 1, strCmd, ";")
        If ((lChunk = 0) Or (lChunk > 512)) Then Exit For 
        lEnd = lChunk 
    Next 
    GetCmdChunk = lEnd 
End Function 

Public Function ReplaceText(ByVal strInTextIn As StringByVal strFrom As StringByVal strTo As StringAs String 
    Dim strInText As String 
    Dim strOutText As String 
    Dim lFromLen As Long 
    Dim lMatchPos As Long 

    strInText = strInTextIn 
    strOutText = "" 
    lFromLen = Len(strFrom)
    Do While Len(strInText) > 0 
        lMatchPos = InStr(strInText, strFrom)
        If lMatchPos = 0 Then 
            strOutText = strOutText & strInText 
            strInText = "" 
        Else 
            strOutText = strOutText & Left(strInText, lMatchPos - 1) & strTo 
            strInText = Mid(strInText, lMatchPos + lFromLen)
        End If 
    Loop 
    ReplaceText = strOutText 
End Function 

Public Function CreateResTestReadBackCmd(bSendCoarseFineGain As BooleanAs String 
    Dim strCfg As String 
    Dim isINOF As Boolean 

    isINOF = (STATUS.DEVICE_ID <> dppDP5G) And (STATUS.DEVICE_ID <> dppTB5)
    strCfg = "" 
    strCfg = strCfg & "CLCK=?;" 
    strCfg = strCfg & "TPEA=?;" 
    If (bSendCoarseFineGain) Then strCfg = strCfg & "GAIF=?;" 
    If (Not bSendCoarseFineGain) Then strCfg = strCfg & "GAIN=?;" 
    strCfg = strCfg & "RESL=?;" 
    strCfg = strCfg & "TFLA=?;" 
    strCfg = strCfg & "TPFA=?;" 
    strCfg = strCfg & "PURE=?;" 
    strCfg = strCfg & "RTDE=?;" 
    strCfg = strCfg & "MCAS=?;" 
    strCfg = strCfg & "MCAC=?;" 
    strCfg = strCfg & "SOFF=?;" 
    strCfg = strCfg & "AINP=?;" 
    If (isINOF) Then strCfg = strCfg & "INOF=?;" 
    If (bSendCoarseFineGain) Then strCfg = strCfg & "GAIA=?;" 
    CreateResTestReadBackCmd = strCfg 
End Function 

''''Private Sub SendCfgToHwExample(strCfg As String)
'''''For SCAs'Private Sub SendCfgToHwExample(strCfg As String, sca As scaSetup)
''''    Dim idxCmd As Long
''''    Dim strDisplay As String
''''    Dim strCmd As String
''''    Dim curStart As Currency            'start time from system time in milliseconds
''''    Dim TimeExpired As Boolean          'time expired flag
''''    Dim curElapsed As Currency          'Elapsed time from start time in milliseconds
''''    Dim lCfgLen As Long                 'ASCII Configuration Command String Length
''''    Dim idxSplitCfg As Long             'Configuration split position, only if necessary
''''    Dim bSplitCfg As Boolean            'Configuration split flag
''''    Dim strSplitCfg As String           'Configuration split string second buffer
''''
''''    bSplitCfg = False
''''    strDisplay = ""
''''    If (Len(strCfg) = 0) Then Exit Sub   'not initialized
''''    strCfg = TypeName(varConfig)             'test variant data type
''''    If (strCfg = "String()") Then           'have data
''''        strCfg = ""                         'clear cfg storage
''''    Else
''''        Exit Sub                            'no data
''''    End If
''''    For idxCmd = 0 To UBound(varConfig, 1)
''''        strCmd = varConfig(idxCmd, 0) & "=" & varConfig(idxCmd, 1) & ";"
''''        If (Not (InStr(strCmd, "RESC") > 0)) Then
''''            If (Len(Trim(varConfig(idxCmd, 1))) > 0) Then
''''                strCfg = strCfg & strCmd
''''                strDisplay = strDisplay & strCmd & vbNewLine
''''            Else
''''                strDisplay = strDisplay & ";" & strCmd & vbNewLine
''''            End If
''''        End If
''''    Next
''''    strCfg = "RESC=YES;" & strCfg
''''    strCfg = UCase(strCfg)
''''    strCfg = RemoveCmdByDeviceType(strCfg, STATUS.PC5_PRESENT, STATUS.DEVICE_ID)
''''    Clipboard.SetText strCfg
''''    strDisplay = "RESC=YES;" & vbNewLine & strDisplay
''''    strDisplay = UCase(strDisplay)
''''    'txtSendCfgToHwNoEdit = strDisplay
''''
''''    'Test configuration size
''''    lCfgLen = Len(strCfg)
''''    If (lCfgLen > 512) Then     'configuration is too large, try to reduce
''''        strCfg = ReplaceText(strCfg, "US;", ";")
''''        strCfg = ReplaceText(strCfg, "OFF;", "OF;")
''''        strCfg = ReplaceText(strCfg, "RISING;", "RI;")
''''        strCfg = ReplaceText(strCfg, "FALLING;", "FA;")
''''        lCfgLen = Len(strCfg)
''''        If (lCfgLen > 512) Then 'configuration is still too large, split cfg
''''            bSplitCfg = True
''''            idxSplitCfg = GetCmdChunk(strCfg)
''''            strSplitCfg = Mid(strCfg, idxSplitCfg + 1)
''''            strCfg = Left(strCfg, idxSplitCfg)
''''        End If
''''    End If
''''
''''    'MsgBox strCfg
''''    'MsgBox strSplitCfg
''''
''''    'lblCfgLenValue = CStr(Len(strCfg))
''''    s.HwCfgReady = False
''''    s.HwCfgExReady = False
''''    s.HwCfgDP5Out = strCfg
''''    If (Len(strCfg) > 0) Then
''''        s.HwCfgReady = True
''''        frmDP5.SendCommand XMTPT_SEND_CONFIG_PACKET_TO_HW
''''        s.HwCfgReady = False
''''    End If
''''
''''    If (bSplitCfg) Then             'send second configuration block
''''        TimeExpired = False
''''        'lblPleaseWait.Visible = True
''''        curStart = msTimeStart()
''''        Do                          'wait for cfg packet to be processed
''''            DoEvents
''''            curElapsed = msTimeDiff(curStart)
''''            TimeExpired = msTimeExpired(curStart, 200)    '200 milliseconds wait
''''        Loop Until (TimeExpired)
''''        'lblPleaseWait.Visible = False
''''        s.HwCfgReady = False
''''        s.HwCfgExReady = False
''''        s.HwCfgDP5Out = strSplitCfg
''''        If (Len(strCfg) > 0) Then
''''            s.HwCfgReady = True
''''            frmDP5.SendCommand XMTPT_SEND_CONFIG_PACKET_TO_HW
''''            s.HwCfgReady = False
''''        End If
''''    End If
''''
'''''For SCAs'    If (s.SCAEnabled And s.isDppConnected) Then
'''''For SCAs'        TimeExpired = False
'''''For SCAs'        'lblPleaseWait.Visible = True
'''''For SCAs'        curStart = msTimeStart()
'''''For SCAs'        Do                          'wait for cfg packet to be processed
'''''For SCAs'            DoEvents
'''''For SCAs'            curElapsed = msTimeDiff(curStart)
'''''For SCAs'            TimeExpired = msTimeExpired(curStart, 200)    '200 milliseconds wait
'''''For SCAs'        Loop Until (TimeExpired)
'''''For SCAs'        'lblPleaseWait.Visible = False
'''''For SCAs'        strCfg = SCAStringALL(sca, True)
'''''For SCAs'        s.HwCfgReady = False
'''''For SCAs'        s.HwCfgExReady = False
'''''For SCAs'        s.HwCfgDP5Out = strCfg
'''''For SCAs'        If (Len(strCfg) > 0) Then
'''''For SCAs'            s.HwCfgReady = True
'''''For SCAs'            frmDP5.SendCommand XMTPT_SEND_CONFIG_PACKET_TO_HW
'''''For SCAs'            s.HwCfgReady = False
'''''For SCAs'        End If
'''''For SCAs'    End If
''''
''''End Sub
''''