module CDataDisplayConsole
	! use CDataDisplayConsole
    use SimulationVariables
	implicit none    
	public    
    contains  

    subroutine DataDisplayConsoleToJson(parent)

        type(json_value),pointer :: parent
        type(json_core) :: json
        type(json_value),pointer :: p

        ! 1. create new node
        call json%create_object(p,'DataDisplay')
        call json%add(p,"TripAlarmLow",data%EquipmentControl%DataDisplayConsole%TripAlarmLow)
        call json%add(p,"TripAlarmHigh",data%EquipmentControl%DataDisplayConsole%TripAlarmHigh)
        call json%add(p,"RetFlowAlarmLow",data%EquipmentControl%DataDisplayConsole%RetFlowAlarmLow)
        call json%add(p,"RetFlowAlarmHigh",data%EquipmentControl%DataDisplayConsole%RetFlowAlarmHigh)
        call json%add(p,"PitAlarmLow",data%EquipmentControl%DataDisplayConsole%PitAlarmLow)
        call json%add(p,"PitAlarmHigh",data%EquipmentControl%DataDisplayConsole%PitAlarmHigh)
        call json%add(p,"PortWeightOnBit",data%EquipmentControl%DataDisplayConsole%PortWeightOnBit)
        call json%add(p,"PortHookLoad",data%EquipmentControl%DataDisplayConsole%PortHookLoad)
        call json%add(p,"PortCasingPressure",data%EquipmentControl%DataDisplayConsole%PortCasingPressure)
        call json%add(p,"PortPumpPressure",data%EquipmentControl%DataDisplayConsole%PortPumpPressure)
        call json%add(p,"TripTankSetAlarmLow",data%EquipmentControl%DataDisplayConsole%TripTankSetAlarmLow)
        call json%add(p,"TripTankSetAlarmHigh",data%EquipmentControl%DataDisplayConsole%TripTankSetAlarmHigh)
        call json%add(p,"TripTankSetAlarmSwitch",data%EquipmentControl%DataDisplayConsole%TripTankSetAlarmSwitch)
        call json%add(p,"TripTankPowerSwitch",data%EquipmentControl%DataDisplayConsole%TripTankPowerSwitch)
        call json%add(p,"TripTankPumpSwitch",data%EquipmentControl%DataDisplayConsole%TripTankPumpSwitch)
        call json%add(p,"TripTankHornSwitch",data%EquipmentControl%DataDisplayConsole%TripTankHornSwitch)
        call json%add(p,"AcidGasDetectionHornSwitch",data%EquipmentControl%DataDisplayConsole%AcidGasDetectionHornSwitch)
        call json%add(p,"TotalStrokeCounterResetSwitch",data%EquipmentControl%DataDisplayConsole%TotalStrokeCounterResetSwitch)
        call json%add(p,"DrillingTrippingSelectorSwitch",data%EquipmentControl%DataDisplayConsole%DrillingTrippingSelectorSwitch)
        call json%add(p,"MVTSetAlarmLowKnob",data%EquipmentControl%DataDisplayConsole%MVTSetAlarmLowKnob)
        call json%add(p,"MVTSetAlarmHighKnob",data%EquipmentControl%DataDisplayConsole%MVTSetAlarmHighKnob)
        call json%add(p,"MVTSetAlarmSwitch",data%EquipmentControl%DataDisplayConsole%MVTSetAlarmSwitch)
        call json%add(p,"MudTank1Switch",data%EquipmentControl%DataDisplayConsole%MudTank1Switch)
        call json%add(p,"MudTank2Switch",data%EquipmentControl%DataDisplayConsole%MudTank2Switch)
        call json%add(p,"MudTank3Switch",data%EquipmentControl%DataDisplayConsole%MudTank3Switch)
        call json%add(p,"MudTank4Switch",data%EquipmentControl%DataDisplayConsole%MudTank4Switch)
        call json%add(p,"MVTFineKnob",data%EquipmentControl%DataDisplayConsole%MVTFineKnob)
        call json%add(p,"MVTCoarseKnob",data%EquipmentControl%DataDisplayConsole%MVTCoarseKnob)
        call json%add(p,"MVTHornSwitch",data%EquipmentControl%DataDisplayConsole%MVTHornSwitch)
        call json%add(p,"MVTDeviationTripSelectionSwitch",data%EquipmentControl%DataDisplayConsole%MVTDeviationTripSelectionSwitch)
        call json%add(p,"MVTPowerSwitch",data%EquipmentControl%DataDisplayConsole%MVTPowerSwitch)
        call json%add(p,"MFFIResetTotalStrokes",data%EquipmentControl%DataDisplayConsole%MFFIResetTotalStrokes)
        call json%add(p,"MFFIResetFillCounter",data%EquipmentControl%DataDisplayConsole%MFFIResetFillCounter)
        call json%add(p,"MFFIPumpSelectorSwitch",data%EquipmentControl%DataDisplayConsole%MFFIPumpSelectorSwitch)
        call json%add(p,"MFFIFillSPMSelectorSwitch",data%EquipmentControl%DataDisplayConsole%MFFIFillSPMSelectorSwitch)
        call json%add(p,"MFFISetAlarmLowKnob",data%EquipmentControl%DataDisplayConsole%MFFISetAlarmLowKnob)
        call json%add(p,"MFFISetAlarmHighKnob",data%EquipmentControl%DataDisplayConsole%MFFISetAlarmHighKnob)
        call json%add(p,"MFFISetAlarmSwitch",data%EquipmentControl%DataDisplayConsole%MFFISetAlarmSwitch)
        call json%add(p,"MFFIPowerSwitch",data%EquipmentControl%DataDisplayConsole%MFFIPowerSwitch)
        call json%add(p,"MFFIHornSwitch",data%EquipmentControl%DataDisplayConsole%MFFIHornSwitch)
        call json%add(p,"ResetWob",data%EquipmentControl%DataDisplayConsole%ResetWob)
        call json%add(p,"Clutch",data%EquipmentControl%DataDisplayConsole%Clutch)
        call json%add(p,"WOBPointer",data%EquipmentControl%DataDisplayConsole%WOBPointer)
        call json%add(p,"HookLoadPointer",data%EquipmentControl%DataDisplayConsole%HookLoadPointer)
        call json%add(p,"TripTankGauge",data%EquipmentControl%DataDisplayConsole%TripTankGauge)
        call json%add(p,"TripTankAlarmLED",data%EquipmentControl%DataDisplayConsole%TripTankAlarmLED)
        call json%add(p,"TripTankPumpLED",data%EquipmentControl%DataDisplayConsole%TripTankPumpLED)
        call json%add(p,"StandPipePressureGauge",data%EquipmentControl%DataDisplayConsole%StandPipePressureGauge)
        call json%add(p,"CasingPressureGauge",data%EquipmentControl%DataDisplayConsole%CasingPressureGauge)
        call json%add(p,"MP1SPMGauge",data%EquipmentControl%DataDisplayConsole%MP1SPMGauge)
        call json%add(p,"MP2SPMGauge",data%EquipmentControl%DataDisplayConsole%MP2SPMGauge)
        call json%add(p,"ReturnLineTempGauge",data%EquipmentControl%DataDisplayConsole%ReturnLineTempGauge)
        call json%add(p,"RotaryTorqueGauge",data%EquipmentControl%DataDisplayConsole%RotaryTorqueGauge)
        call json%add(p,"RotaryRPMGauge",data%EquipmentControl%DataDisplayConsole%RotaryRPMGauge)
        call json%add(p,"AcidGasDetectionLED",data%EquipmentControl%DataDisplayConsole%AcidGasDetectionLED)
        call json%add(p,"TotalStrokeCounter",data%EquipmentControl%DataDisplayConsole%TotalStrokeCounter)
        call json%add(p,"PitGainLossGauge",data%EquipmentControl%DataDisplayConsole%PitGainLossGauge)
        call json%add(p,"MudTanksVolumeGauge",data%EquipmentControl%DataDisplayConsole%MudTanksVolumeGauge)
        call json%add(p,"MVTAlarmLED",data%EquipmentControl%DataDisplayConsole%MVTAlarmLED)
        call json%add(p,"ReturnMudFlowGauge",data%EquipmentControl%DataDisplayConsole%ReturnMudFlowGauge)
        call json%add(p,"FillStrokeCounter",data%EquipmentControl%DataDisplayConsole%FillStrokeCounter)
        call json%add(p,"MFFITotalStrokeCounter",data%EquipmentControl%DataDisplayConsole%MFFITotalStrokeCounter)
        call json%add(p,"MFFIAlarmLED",data%EquipmentControl%DataDisplayConsole%MFFIAlarmLED)
        call json%add(p,"MFFIPumpLED",data%EquipmentControl%DataDisplayConsole%MFFIPumpLED)
        call json%add(p,"TotalWellDepth",data%EquipmentControl%DataDisplayConsole%TotalWellDepth)
        call json%add(p,"BitDepth",data%EquipmentControl%DataDisplayConsole%BitDepth)
        call json%add(p,"HookLoad",data%EquipmentControl%DataDisplayConsole%HookLoad)
        call json%add(p,"StandPipePressure",data%EquipmentControl%DataDisplayConsole%StandPipePressure)
        call json%add(p,"CasingPressure",data%EquipmentControl%DataDisplayConsole%CasingPressure)
        call json%add(p,"MP1SPM",data%EquipmentControl%DataDisplayConsole%MP1SPM)
        call json%add(p,"MP2SPM",data%EquipmentControl%DataDisplayConsole%MP2SPM)
        call json%add(p,"RTTorque",data%EquipmentControl%DataDisplayConsole%RTTorque)
        call json%add(p,"RTRPM",data%EquipmentControl%DataDisplayConsole%RTRPM)
        call json%add(p,"WOP",data%EquipmentControl%DataDisplayConsole%WOP)
        call json%add(p,"ROP",data%EquipmentControl%DataDisplayConsole%ROP)
        call json%add(p,"MudWeightIn",data%EquipmentControl%DataDisplayConsole%MudWeightIn)
        call json%add(p,"MudWeightOut",data%EquipmentControl%DataDisplayConsole%MudWeightOut)
        call json%add(p,"Buzzer1",data%EquipmentControl%DataDisplayConsole%Buzzer1)
        call json%add(p,"Buzzer2",data%EquipmentControl%DataDisplayConsole%Buzzer2)
        call json%add(p,"Buzzer3",data%EquipmentControl%DataDisplayConsole%Buzzer3)
        call json%add(p,"Buzzer4",data%EquipmentControl%DataDisplayConsole%Buzzer4)
    

        call json%add(parent,p)
    end subroutine


    subroutine Set_TotalDepth(v)
        use SimulationVariables !@!!, only: data%EquipmentControl%DrillingWatch%Depth
        ! use CSimulationVariables, only: SetDistanceDrilled
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%TotalWellDepth = v
        data%EquipmentControl%DrillingWatch%Depth = v
        ! call SetDistanceDrilled(v)
    end subroutine
    
    subroutine Set_BitPosition(v)
        use SimulationVariables !@!!, only: data%EquipmentControl%DrillingWatch%BitPosition
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%BitDepth = v
        data%EquipmentControl%DrillingWatch%BitPosition = v
    end subroutine
    
    subroutine Set_RotaryTorque(v)
        use SimulationVariables !@!!, only: data%EquipmentControl%DrillingWatch%Torque
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%RotaryTorqueGauge = v
	    data%EquipmentControl%DrillingWatch%Torque = v
        data%EquipmentControl%DataDisplayConsole%RTTorque = v
    end subroutine
    
    
    subroutine Set_MudWeightIn(v)
        use SimulationVariables !@!, only: MudWeightInDw => data%EquipmentControl%DataDisplayConsole%MudWeightIn
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%MudWeightIn = v
	    data%EquipmentControl%DrillingWatch%MudWeightIn = v
    end subroutine
    
    subroutine Set_MudWeightOut(v)
        use SimulationVariables !@!, only: MudWeightOutDw => data%EquipmentControl%DataDisplayConsole%MudWeightOut
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%MudWeightOut = v
	    data%EquipmentControl%DrillingWatch%MudWeightOut = v
    end subroutine
    
    subroutine Set_TripTankVolume(v)
        use SimulationVariables !@!, only: data%EquipmentControl%DrillingWatch%TripTankVolume
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DrillingWatch%TripTankVolume = v
    end subroutine
    
    subroutine Set_FillVolume(v)
        use SimulationVariables !@!, only: data%EquipmentControl%DrillingWatch%FillVolume
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DrillingWatch%FillVolume = v
    end subroutine
    
    subroutine Set_HookLoad(v)
        use SimulationVariables !@!, only: HookLoadDw => data%EquipmentControl%DataDisplayConsole%HookLoad
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%HookLoadPointer = v
        data%EquipmentControl%DrillingWatch%HookLoad = v * 1000
        data%EquipmentControl%DataDisplayConsole%HookLoad = v
    end subroutine
    
    subroutine Set_WeightOnBit(v)
        use SimulationVariables !@!, only: data%EquipmentControl%DrillingWatch%WeightOnBit
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%WOBPointer = v
        data%EquipmentControl%DrillingWatch%WeightOnBit = v
        data%EquipmentControl%DataDisplayConsole%WOP = v
    end subroutine
    
    subroutine Set_ROP(v)
        use SimulationVariables !@!, only: ROPDw => data%EquipmentControl%DataDisplayConsole%ROP
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%ROP = v
        data%EquipmentControl%DrillingWatch%ROP = v
    end subroutine
    
    subroutine Set_CasingPressure(v)
        use SimulationVariables !@!, only: CasingPressureDw => CasingPressure
        use CChokeControlPanelVariables
        use SimulationVariables!, only: CasingPressureChoke => CasingPressure
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%CasingPressureGauge = v
        data%EquipmentControl%DrillingWatch%CasingPressure = v
        data%EquipmentControl%ChokeControlPanel%CasingPressure = v
        data%EquipmentControl%DataDisplayConsole%CasingPressure = v
    end subroutine
    
    subroutine Set_StandPipePressure(v)
        use SimulationVariables !@!, only: data%EquipmentControl%DrillingWatch%PumpPressure
        use CChokeControlPanelVariables
    use SimulationVariables!, only: StandPipePressureChoke => data%EquipmentControl%DataDisplayConsole%StandPipePressure
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%StandPipePressureGauge = v
        data%EquipmentControl%DrillingWatch%PumpPressure = v
        data%EquipmentControl%ChokeControlPanel%StandPipePressure = v
        data%EquipmentControl%DataDisplayConsole%StandPipePressure = v
        
        
        
    end subroutine
    
    
    subroutine Set_RotaryRPMGauge(v)
        use SimulationVariables !@!, only: data%EquipmentControl%DrillingWatch%RPM
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%RotaryRPMGauge = v
        data%EquipmentControl%DrillingWatch%RPM = v
        data%EquipmentControl%DataDisplayConsole%RTRPM = v
        ! call data%EquipmentControl%DataDisplayConsole%OnRotaryRpmChange%RunAll(v)
    end subroutine
    
    
    
    
    subroutine Set_MP1SPMGauge(v)
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%MP1SPMGauge = v
        data%EquipmentControl%DataDisplayConsole%MP1SPM = v
        !@data%State%unitySignals%(PumpsSpmChanges)) call PumpsSpmChanges(data%EquipmentControl%DataDisplayConsole%MP1SPMGauge, data%EquipmentControl%DataDisplayConsole%MP2SPMGauge)
#ifdef deb
	    print*, 'MP1SPMGauge=', data%EquipmentControl%DataDisplayConsole%MP1SPMGauge
#endif
    end subroutine
    
    subroutine Set_MP2SPMGauge(v)
	    implicit none
	    real(8), intent(in) :: v
	    data%EquipmentControl%DataDisplayConsole%MP2SPMGauge = v
        data%EquipmentControl%DataDisplayConsole%MP2SPM = v
        !@data%State%unitySignals%(PumpsSpmChanges)) call PumpsSpmChanges(data%EquipmentControl%DataDisplayConsole%MP1SPMGauge, data%EquipmentControl%DataDisplayConsole%MP2SPMGauge)
#ifdef deb
	    print*, 'MP2SPMGauge=', data%EquipmentControl%DataDisplayConsole%MP2SPMGauge
#endif
    end subroutine
end module CDataDisplayConsole