/* * File: FireSignalDischargeStatusGAM.cpp * Author: ivoc * */ #include "FireSignalDischargeStatusGAM.h" OBJECTLOADREGISTER(FireSignalDischargeStatusGAM, "$Id: $") // // Default constructor // FireSignalDischargeStatusGAM::FireSignalDischargeStatusGAM(){ this->SignalsInputInterface = NULL; this->plasmaEnded = False; } // // Destructor // FireSignalDischargeStatusGAM::~FireSignalDischargeStatusGAM(){ } // // Initialise the module // bool FireSignalDischargeStatusGAM::Initialise(ConfigurationDataBase& cdbData) { CDBExtended cdb(cdbData); if(!AddInputInterface(this->SignalsInputInterface, "FireSignalDischargeStatusGAMInputInterface")) { AssertErrorCondition(InitialisationError, "FireSignalDischargeStatusGAM::Initialise: %s failed to add the FireSignalDischargeStatusGAMInputInterface", this->Name()); return False; } // INPUT SIGNALS (interface) if(!cdb->Move("input_signals")) { AssertErrorCondition(InitialisationError,"FireSignalDischargeStatusGAM::Initialise: %s Could not move to \"input_signals\"",this->Name()); return False; } int number_of_signals_to_read = 2; FString *CDB_move_to; FString *SignalType; CDB_move_to = new FString[number_of_signals_to_read]; SignalType = new FString[number_of_signals_to_read]; CDB_move_to[0].Printf("discharge_status"); CDB_move_to[1].Printf("system_time"); for (i=0;iMove(CDB_move_to[i].Buffer())) { AssertErrorCondition(InitialisationError,"FireSignalDischargeStatusGAM::Initialise: %s Could not move to \"%s\"",this->Name(),CDB_move_to[i].Buffer()); return False; } if(cdb->Exists("SignalType")) { FString signalName; cdb.ReadFString(SignalType[i], "SignalType"); } if(cdb->Exists("SignalName")) { FString SignalName; cdb.ReadFString(SignalName, "SignalName"); AssertErrorCondition(Information,"FireSignalDischargeStatusGAM::Initialise: Added signal = %s", SignalName.Buffer()); if(!this->SignalsInputInterface->AddSignal(SignalName.Buffer(), SignalType[i].Buffer())) { AssertErrorCondition(InitialisationError,"FireSignalDischargeStatusGAM::Initialise: %s failed to add signal", this->Name()); return False; } } cdb->MoveToFather(); } cdb->MoveToFather(); this->plasmaEnded = False; this->PlasmaStarted = False; return True; } // // Execute the module functionalities // bool FireSignalDischargeStatusGAM::Execute(GAM_FunctionNumbers functionNumber) { InputInterfaceStruct *inputstruct = (InputInterfaceStruct *) this->SignalsInputInterface->Buffer(); this->SignalsInputInterface->Read(); // // Reset plasma ended trigger // if(functionNumber == GAMOffline) { this->plasmaEnded = False; this->plasmaEndedTimeMarked = False; this->PlasmaStarted = False; } if(functionNumber == GAMPrepulse) { this->plasmaEnded = False; this->plasmaEndedTimeMarked = False; this->PlasmaStarted = False; } if(inputstruct[0].DischargeStatus >= 0) this->PlasmaStarted = True; // if (inputstruct[0].DischargeStatus >= 0) AssertErrorCondition(InitialisationError,"FireSignalDischargeStatusGAM::Execute: DischargeStatus = %d !!!",inputstruct[0].DischargeStatus ); if((inputstruct[0].DischargeStatus < 0) && (!this->plasmaEnded) && (this->PlasmaStarted)){ this->plasmaEnded = True; this->PlasmaStarted = False; AssertErrorCondition(InitialisationError,"FireSignalDischargeStatusGAM::Execute: PLASMA ENDED at %d !!!", inputstruct[0].usecTime); if(!this->plasmaEndedTimeMarked){ this->plasmaEndedTime = inputstruct[0].usecTime; this->plasmaEndedTimeMarked = True; } } return True; } // // Builds the HTTP page with information about the CODAC // bool FireSignalDischargeStatusGAM::ProcessHttpMessage(HttpStream &hStream){ hStream.SSPrintf("OutputHttpOtions.Content-Type","text/html"); hStream.keepAlive = False; //copy to the client hStream.WriteReplyHeader(False); hStream.Printf("CODAC GAM"); hStream.Printf("

Information:


"); // // Plasma ended flag // if(this->plasmaEnded) hStream.Printf("

Plasma ended: True

"); else hStream.Printf("

Plasma ended: False

"); hStream.Printf("

Plasma ended time: %d

", this->plasmaEndedTime); hStream.Printf(""); return True; }