Imported CSS files
This commit is contained in:
394
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSGAM/EPICSGAM.cpp
Normal file
394
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSGAM/EPICSGAM.cpp
Normal file
@@ -0,0 +1,394 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
**/
|
||||
/*
|
||||
EPICS GAM is a data proxy from/to RTThread and EPICSLib
|
||||
|
||||
secondo me bisogna farla a tipo GAM con la sincronizzazione
|
||||
come visto c'è da risolvere il problema del postEvent che viene
|
||||
gratis sull'epics thread ma non in MARTe
|
||||
|
||||
|
||||
config parameters
|
||||
subsampling to epics
|
||||
thresholds
|
||||
bandwidth/deadbands
|
||||
*/
|
||||
|
||||
|
||||
#include "EPICSGAM.h"
|
||||
|
||||
#include "ConfigurationDataBase.h"
|
||||
#include "CDBExtended.h"
|
||||
#include "GlobalObjectDataBase.h"
|
||||
|
||||
#include "GCNString.h"
|
||||
#include "MenuEntry.h"
|
||||
|
||||
EPICSGAM::EPICSGAM(){
|
||||
usecTime = NULL;
|
||||
fastTrigger = NULL;
|
||||
jpfData = NULL;
|
||||
hasTriggerSignal = False;
|
||||
acceptingMessages = False;
|
||||
}
|
||||
|
||||
/* in GAMs usually instead of calling ObjectLoadSetup of the single GAM you can
|
||||
* call the super object ObjectLoadSetup that will call the redefined Initialize
|
||||
* method, so ObjectLoadSetup is not required
|
||||
*/
|
||||
//ObjectLoadSetup() {
|
||||
bool EPICSGAM::Initialise(ConfigurationDataBase& cdbData) {
|
||||
|
||||
acceptingMessages = False;
|
||||
CDBExtended cdb(cdbData);
|
||||
|
||||
//////////////////////////
|
||||
// Add Time BaseSignal //
|
||||
//////////////////////////
|
||||
|
||||
if(!AddInputInterface(usecTime,"UsecTimeInterface")){
|
||||
AssertErrorCondition(InitialisationError,"EPICSGAM::Initialise: %s failed to add input interface InputInterface UsecTimeInterface",Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
FString timeBase;
|
||||
if(!cdb.ReadFString(timeBase,"UsecTimeSignalName")){
|
||||
AssertErrorCondition(InitialisationError, "EPICSGAM::Initialise: %s does not specify a UsecTimeSignalName", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
FString timeBaseType;
|
||||
if(!cdb.ReadFString(timeBaseType,"TimeSignalType","int32")){
|
||||
AssertErrorCondition(Warning, "EPICSGAM::Initialise: %s does not specify a TimeSignalType. Assuming int32", Name());
|
||||
}
|
||||
|
||||
if(!usecTime->AddSignal(timeBase.Buffer(), timeBaseType.Buffer())){
|
||||
AssertErrorCondition(InitialisationError,"EPICSGAM::Initialise: %s failed to add input Signal %s to interface InputInterface",Name(),timeBase.Buffer());
|
||||
return False;
|
||||
}
|
||||
|
||||
/////////////////////////////////////
|
||||
// Add Trigger Signal to Interface //
|
||||
/////////////////////////////////////
|
||||
|
||||
if(cdb->Exists("TriggerSignalName")){
|
||||
|
||||
if(!AddIOInterface(fastTrigger,"FastTriggerSignal",DDB_ReadMode|DDB_WriteMode)){
|
||||
AssertErrorCondition(InitialisationError,"EPICSGAM::Initialise: %s failed to add input interface InputInterface FastTriggerSignal",Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
FString triggerSignal;
|
||||
if(!cdb.ReadFString(triggerSignal,"TriggerSignalName")){
|
||||
AssertErrorCondition(InitialisationError, "EPICSGAM::Initialise: %s does not specify a TriggerSignalName", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
if(!fastTrigger->AddSignal(triggerSignal.Buffer(), "int32")){
|
||||
AssertErrorCondition(InitialisationError,"EPICSGAM::Initialise: %s failed to add input Signal %s to interface InputInterface",Name(),triggerSignal.Buffer());
|
||||
return False;
|
||||
}
|
||||
|
||||
hasTriggerSignal = True;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Add EPICS Signal List to Interface //
|
||||
//////////////////////////////////////
|
||||
|
||||
if(!AddInputInterface(jpfData,"EPICSSignalList")){
|
||||
AssertErrorCondition(InitialisationError,"EPICSGAM::Initialise: %s failed to add input interface InputInterface JPFSignalList",Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
// Read Signal Names //
|
||||
if(!cdb->Move("Signals")){
|
||||
AssertErrorCondition(InitialisationError,"EPICSGAM::Initialise: %s did not specify Signals entry",Name());
|
||||
return False;
|
||||
}
|
||||
//jpfData is DDBInterface
|
||||
if(!jpfData->ObjectLoadSetup(cdb,NULL)){
|
||||
AssertErrorCondition(InitialisationError,"EPICSGAM::Initialise: %s: ObjectLoadSetup Failed DDBInterface %s ",Name(),jpfData->InterfaceName());
|
||||
return False;
|
||||
}
|
||||
cdb->MoveToFather();
|
||||
|
||||
// we move this initialization there to let the signal Table fetching "SignalServer" parameter
|
||||
if(!signalTable.Initialize(*jpfData, cdb)) {
|
||||
AssertErrorCondition(InitialisationError,"EPICSGAM::Initialise: %s: Failed to initialize signal Table",Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
acceptingMessages = True;
|
||||
return True;
|
||||
} //--------------------------------------------------------------------------- EIPCSGAM::Initialize
|
||||
|
||||
bool EPICSGAM::Execute(GAM_FunctionNumbers functionNumber) {
|
||||
|
||||
// Read Cycle Time
|
||||
usecTime->Read();
|
||||
int32 *timePointer = (int32 *)usecTime->Buffer();
|
||||
int32 usecTimeSample = timePointer[0];
|
||||
|
||||
// Get the Trigger Request
|
||||
bool fastTriggerRequested = False;
|
||||
if(hasTriggerSignal){
|
||||
fastTrigger->Read();
|
||||
int32 fastTriggerSignal = *((int32 *)fastTrigger->Buffer());
|
||||
fastTriggerRequested = (fastTriggerSignal != 0);
|
||||
}
|
||||
|
||||
// Read Jpf Data
|
||||
jpfData->Read();
|
||||
// Update the signals table
|
||||
signalTable.UpdateSignals( (char *)jpfData->Buffer(), usecTimeSample);
|
||||
|
||||
switch(functionNumber){
|
||||
case GAMOnline:{
|
||||
break;
|
||||
}
|
||||
case GAMPrepulse:{
|
||||
// Disable Handling of the Messages
|
||||
if(acceptingMessages) acceptingMessages = False;
|
||||
break;
|
||||
}
|
||||
case GAMPostpulse:{
|
||||
// Enable Handling of the Messages
|
||||
if(!acceptingMessages) acceptingMessages = True;
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
// Clear Trigger Request
|
||||
if(fastTriggerRequested){
|
||||
int32 *fastTriggerSignal = (int32 *)fastTrigger->Buffer();
|
||||
*fastTriggerSignal = 0;
|
||||
fastTrigger->Write();
|
||||
}
|
||||
|
||||
return True;
|
||||
|
||||
}
|
||||
//----------------------------------------------------------------------------- end Execute
|
||||
|
||||
/*
|
||||
GCRTemplate<SignalInterface> EPICSGAM::GetSignal(const FString &signalName){
|
||||
return dataCollector.GetSignalData(signalName);
|
||||
};
|
||||
*/
|
||||
|
||||
// still to do..
|
||||
bool EPICSGAM::ProcessMessage(GCRTemplate<MessageEnvelope> envelope){
|
||||
|
||||
if(!acceptingMessages){
|
||||
AssertErrorCondition(InitialisationError,"DataCollectionGAM::ProcessMessage: %s: DataCollectionGAM is not accepting messages yet", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
GCRTemplate<Message> message = envelope->GetMessage();
|
||||
if (!message.IsValid()){
|
||||
AssertErrorCondition(InitialisationError,"DataCollectionGAM::ProcessMessage: %s: Received invalid Message", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
FString messageContent = message->Content();
|
||||
FString messageSender = envelope->Sender();
|
||||
|
||||
// GAP Message Request
|
||||
if(messageContent == "LISTSIGNALS"){
|
||||
|
||||
GCRTemplate<Message> addSignals(GCFT_Create);
|
||||
if(!addSignals.IsValid()){
|
||||
AssertErrorCondition(InitialisationError,"DataCollectionGAM::ProcessMessage: %s: Failed creating Message", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
addSignals->Init(0,"ADDSIGNAL");
|
||||
|
||||
CDBExtended cdb;
|
||||
/* if(!dataCollector.ObjectSaveSetup(cdb)){
|
||||
AssertErrorCondition(InitialisationError,"DataCollectionGAM::ProcessMessage: %s: Failed gathering information about data collection", Name());
|
||||
return False;
|
||||
}
|
||||
*/
|
||||
int32 nOfAcquiredSignals = 0;
|
||||
cdb.ReadInt32(nOfAcquiredSignals, "NOfChannels");
|
||||
|
||||
if(!cdb->Move("Signals")){
|
||||
AssertErrorCondition(InitialisationError,"DataCollectionGAM::ProcessMessage: %s: Signals entry not available in the data base", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
for(int nSignals = 0; nSignals < nOfAcquiredSignals; nSignals++){
|
||||
GCRTemplate<GCNString> signalDescription(GCFT_Create);
|
||||
if(!signalDescription.IsValid()){
|
||||
AssertErrorCondition(FatalError,"DataCollectionGAM::ProcessMessage: %s: Failed creating GCNString", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
cdb->MoveToChildren(nSignals);
|
||||
FString signalName;
|
||||
cdb.ReadFString(signalName, "Name");
|
||||
signalDescription->SetObjectName(signalName.Buffer());
|
||||
cdb->WriteToStream(*(signalDescription.operator->()));
|
||||
signalDescription->Seek(0);
|
||||
addSignals->Insert(signalDescription);
|
||||
cdb->MoveToFather();
|
||||
//AssertErrorCondition(Information,"DataCollectionGAM::ProcessMessage: %s: Adding Signal %s to the collection list", Name(), signalName.Buffer());
|
||||
}
|
||||
|
||||
|
||||
GCRTemplate<MessageEnvelope> addSignalsEnvelope(GCFT_Create);
|
||||
if(!addSignalsEnvelope.IsValid()){
|
||||
AssertErrorCondition(FatalError,"DataCollectionGAM::ProcessMessage: %s: Failed creating MessageEnvelope", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
addSignalsEnvelope->PrepareReply(envelope, addSignals);
|
||||
MessageHandler::SendMessage(addSignalsEnvelope);
|
||||
|
||||
return True;
|
||||
}
|
||||
else if ( messageContent == "INITSIGNAL" ) {
|
||||
|
||||
return True;
|
||||
}else if(messageContent == "GETSIGNAL"){
|
||||
|
||||
GCRTemplate<Message> sendSignal(GCFT_Create);
|
||||
if(!sendSignal.IsValid()){
|
||||
AssertErrorCondition(FatalError,"DataCollectionGAM::ProcessMessage: %s: GETSIGNALS: Failed creating Message", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
sendSignal->Init(0,"SIGNAL");
|
||||
|
||||
GCRTemplate<GCNString> errorMessage(GCFT_Create);
|
||||
if(!errorMessage.IsValid()){
|
||||
AssertErrorCondition(FatalError,"DataCollectionGAM::ProcessMessage: %s: GETSIGNALS: Failed creating GCNString", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
errorMessage->SetObjectName("ERROR");
|
||||
|
||||
GCRTemplate<MessageEnvelope> sendSignalsEnvelope(GCFT_Create);
|
||||
if(!sendSignalsEnvelope.IsValid()){
|
||||
AssertErrorCondition(FatalError,"DataCollectionGAM::ProcessMessage: %s: GETSIGNALS: Failed creating MessageEnvelope", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
sendSignalsEnvelope->PrepareReply(envelope, sendSignal);
|
||||
|
||||
GCRTemplate<GCNString> signalName = message->Find(0);
|
||||
if (!signalName.IsValid()) {
|
||||
errorMessage->Printf("Missing Signal Name");
|
||||
sendSignal->Insert(errorMessage);
|
||||
MessageHandler::SendMessage(sendSignalsEnvelope);
|
||||
AssertErrorCondition(InitialisationError,"DataCollectionGAM::ProcessMessage: %s: GETSIGNALS: No valid signalName has been specified ", Name());
|
||||
return False;
|
||||
}
|
||||
/*
|
||||
GCRTemplate<SignalInterface> signal = GetSignal(*(signalName.operator->()));
|
||||
if (!signal.IsValid()) {
|
||||
errorMessage->Printf("Signal %s not found in GAM %s", signalName->Buffer(), Name());
|
||||
sendSignal->Insert(errorMessage);
|
||||
MessageHandler::SendMessage(sendSignalsEnvelope);
|
||||
AssertErrorCondition(InitialisationError,"DataCollectionGAM::ProcessMessage: %s: GETSIGNALS: %s ", Name(), errorMessage->Buffer());
|
||||
return False;
|
||||
}
|
||||
|
||||
sendSignal->Insert(signal);
|
||||
MessageHandler::SendMessage(sendSignalsEnvelope);
|
||||
*/
|
||||
return True;
|
||||
}
|
||||
|
||||
return False;
|
||||
}
|
||||
//----------------------------------------------------------------------------- end ProcessMessage
|
||||
|
||||
const char* EPICSGAM::css = "table.bltable {"
|
||||
"margin: 1em 1em 1em 2em;"
|
||||
"background: whitesmoke;"
|
||||
"border-collapse: collapse;"
|
||||
"}"
|
||||
"table.bltable th, table.bltable td {"
|
||||
"border: 1px silver solid;"
|
||||
"padding: 0.2em;"
|
||||
"}"
|
||||
"table.bltable th {"
|
||||
"background: gainsboro;"
|
||||
"text-align: left;"
|
||||
"}"
|
||||
"table.bltable caption {"
|
||||
"margin-left: inherit;"
|
||||
"margin-right: inherit;"
|
||||
"}";
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
|
||||
#define TABLE_NEWROW hStream.Printf("<tr>\n")
|
||||
#define TABLE_ENDROW hStream.Printf("</tr>\n")
|
||||
|
||||
bool EPICSGAM::ProcessHttpMessage(HttpStream &hStream) {
|
||||
hStream.SSPrintf("OutputHttpOtions.Content-Type","text/html");
|
||||
hStream.keepAlive = False;
|
||||
|
||||
hStream.Printf("<html><head><title>%s</title>", Name());
|
||||
hStream.Printf( "<style type=\"text/css\">\n" );
|
||||
hStream.Printf("%s\n", css);
|
||||
hStream.Printf( "</style></head><body>\n" );
|
||||
|
||||
|
||||
hStream.Printf("<h1> EPICSGAM EPICSSignalTable dump</h1>\n");
|
||||
hStream.Printf("<table class=\"bltable\">\n");
|
||||
EPICSSignal * ptrSignal = dynamic_cast<EPICSSignal*>( this->signalTable.List() );
|
||||
TABLE_NEWROW;
|
||||
hStream.Printf("<td>DDB name</td> <td>DDB offset</td> <td>DDB size</td> <td>DDB type</td>\n"
|
||||
"<td>EPICS name</td> <td>EPICS id</td> <td>EPICS subsamples</td> <td>EPICS counter</td>\n");
|
||||
TABLE_ENDROW;
|
||||
while (ptrSignal) {
|
||||
TABLE_NEWROW;
|
||||
BString bsbuf;
|
||||
hStream.Printf("<td>%s</td> <td>%d</td> <td>%d</td> <td>%s</td>\n"
|
||||
"<td>%s</td> <td>%d</td> <td>%d</td> <td>%d</td>\n",
|
||||
ptrSignal->GetDDBName(), ptrSignal->GetDDBOffset(),
|
||||
ptrSignal->GetDDBSize(), (ptrSignal->GetDDBType()).ConvertToString(bsbuf),
|
||||
|
||||
ptrSignal->GetEPICSName(), ptrSignal->GetEPICSIndex(),
|
||||
ptrSignal->GetEPICSSubSample(), ptrSignal->counter);
|
||||
TABLE_ENDROW;
|
||||
|
||||
ptrSignal =dynamic_cast<EPICSSignal*>( ptrSignal->Next() );
|
||||
}
|
||||
hStream.Printf("</table>\n");
|
||||
hStream.Printf("<BR>\n");
|
||||
|
||||
|
||||
hStream.Printf("</body></html>");
|
||||
hStream.WriteReplyHeader(True);
|
||||
return True;
|
||||
}
|
||||
//----------------------------------------------------------------------------- end ProcessHttpMessage
|
||||
|
||||
OBJECTLOADREGISTER(EPICSGAM,"$Id: EPICSGAM.cpp,v 1.22 2011/06/26 10:10:10 abarb Exp $")
|
||||
127
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSGAM/EPICSGAM.h
Normal file
127
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSGAM/EPICSGAM.h
Normal file
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
**/
|
||||
#if !defined(_EPICS_GAM_)
|
||||
#define _EPICS_GAM_
|
||||
|
||||
|
||||
#include "System.h"
|
||||
#include "GAM.h"
|
||||
#include "HttpInterface.h"
|
||||
#include "MessageHandler.h"
|
||||
|
||||
// TODO --start
|
||||
|
||||
|
||||
#include "GCRTemplate.h"
|
||||
#include "FString.h"
|
||||
|
||||
// TODO also add support for DDBOutputInterface as well
|
||||
//#include "DDBOutputInterface.h"
|
||||
#include "DDBInputInterface.h"
|
||||
#include "DDBIOInterface.h"
|
||||
|
||||
//#include "RTDataCollector.h"
|
||||
|
||||
#include "SignalInterface.h"
|
||||
// TODO -- end
|
||||
|
||||
#include "EPICSSignalsTable.h"
|
||||
|
||||
|
||||
|
||||
OBJECT_DLL(EPICSGAM)
|
||||
;
|
||||
|
||||
class EPICSGAM
|
||||
: public GAM, public HttpInterface, public MessageHandler {
|
||||
|
||||
OBJECT_DLL_STUFF(EPICSGAM)
|
||||
|
||||
|
||||
private:
|
||||
|
||||
static const char * css;
|
||||
/** Get Data Collected during the pulse */
|
||||
// GCRTemplate<SignalInterface> GetSignal(const FString &jpfSignalName);
|
||||
|
||||
// DDB Interface for the Time
|
||||
DDBInputInterface *usecTime;
|
||||
|
||||
// Fast Trigger Request signal
|
||||
DDBIOInterface *fastTrigger;
|
||||
|
||||
// Jpf Data Collection
|
||||
DDBInputInterface *jpfData;
|
||||
|
||||
|
||||
|
||||
// Has trigger signal
|
||||
bool hasTriggerSignal;
|
||||
|
||||
// Data Collector
|
||||
// RTDataCollector dataCollector;
|
||||
|
||||
// flag to avoid processing messages during pulse
|
||||
bool acceptingMessages;
|
||||
|
||||
|
||||
/** SignalTable Database */
|
||||
EPICSSignalsTable signalTable;
|
||||
|
||||
public:
|
||||
|
||||
EPICSGAM();
|
||||
virtual ~EPICSGAM(){};
|
||||
|
||||
// Initialise the module
|
||||
// which is the difference between Initialise and Object Load Setup?
|
||||
virtual bool Initialise(ConfigurationDataBase& cdbData);
|
||||
|
||||
/** Execute the module functionalities */
|
||||
virtual bool Execute(GAM_FunctionNumbers functionNumber);
|
||||
|
||||
/** Implements the Saving of the parameters to Configuration Data Base */
|
||||
virtual bool ObjectSaveSetup(ConfigurationDataBase &info, StreamInterface *err) {
|
||||
return True;
|
||||
}
|
||||
|
||||
/** Menu Interface */
|
||||
// virtual bool MenuInterface(StreamInterface &in,StreamInterface &out,void *userData) {
|
||||
// return dataCollector.ObjectDescription(in, True);
|
||||
// }
|
||||
|
||||
/**
|
||||
* Builds the webpage.
|
||||
* @param hStream The HttpStream to write to.
|
||||
* @return False on error, True otherwise.
|
||||
*/
|
||||
virtual bool ProcessHttpMessage(HttpStream &hStream);
|
||||
|
||||
protected:
|
||||
// MESSAGE HANDLER INTERFACE
|
||||
virtual bool ProcessMessage(GCRTemplate<MessageEnvelope> envelope);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,272 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
**/
|
||||
#include "EPICSSignalsTable.h"
|
||||
|
||||
|
||||
|
||||
#include "GlobalObjectDataBase.h"
|
||||
#include "GCRTemplate.h"
|
||||
|
||||
#include "DDBInterface.h"
|
||||
#include "CDBExtended.h"
|
||||
#include "SignalInterface.h"
|
||||
|
||||
|
||||
#define DEFAULT_SERVER_SUBSAMPLING 1000
|
||||
|
||||
|
||||
// we do not need to sort the list in any order
|
||||
// so we remove it (at least for now)
|
||||
|
||||
/*
|
||||
class AlphaSorterClass : public SortFilter {
|
||||
|
||||
public:
|
||||
|
||||
virtual ~AlphaSorterClass(){};
|
||||
|
||||
virtual int32 Compare(LinkedListable *data1,LinkedListable *data2){
|
||||
const EPICSSignal *p1 = (const EPICSSignal *)data1;
|
||||
const EPICSSignal *p2 = (const EPICSSignal *)data2;
|
||||
if (p2 == NULL) return 1;
|
||||
if (p1 == NULL) return -1;
|
||||
|
||||
return strcmp(p2->EPICSName(),p1->EPICSName());
|
||||
}
|
||||
|
||||
} AlphaSorter;
|
||||
*/
|
||||
|
||||
/*
|
||||
* Initialize has to link signals in the DDB with
|
||||
* EPICS descriptors (sending messages ?)
|
||||
* EPICS is message based so doesn't care
|
||||
*/
|
||||
bool EPICSSignalsTable::Initialize (const DDBInterface &ddbInterface, ConfigurationDataBase &info) {
|
||||
// CleanUp
|
||||
CleanUp();
|
||||
|
||||
// check the number of signals
|
||||
int32 nOfSignals = ddbInterface.NumberOfEntries();
|
||||
if(nOfSignals == 0)
|
||||
return False;
|
||||
|
||||
CDBExtended cdb(info);
|
||||
unsigned dataOffset = 0;
|
||||
int i = 0;
|
||||
|
||||
// Find the Signal Server object
|
||||
FString SignalsServer;
|
||||
if (!cdb.ReadFString(SignalsServer,"SignalsServer")) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: SignalsServer not defined in the configuration"
|
||||
);
|
||||
return False;
|
||||
}
|
||||
|
||||
GCReference gc = GODBFindByName( SignalsServer.Buffer() );
|
||||
if ( !gc.IsValid() ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize cannot find %s in the GlobalObjectDataBase",
|
||||
SignalsServer.Buffer() );
|
||||
return False;
|
||||
}
|
||||
|
||||
// GCRTemplate<PubSubInterface> epics_hnd = gc;
|
||||
// TODO more generic
|
||||
gcrEPICSHnd = gc;
|
||||
if ( !gcrEPICSHnd.IsValid() ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize cannot cast %s as an EPICSHandler",
|
||||
SignalsServer.Buffer() );
|
||||
return False;
|
||||
}
|
||||
//------------------------------------------------------------------------- end server initialization
|
||||
|
||||
// ddbInterface signal list
|
||||
const DDBSignalDescriptor *descriptor = ddbInterface.SignalsList();
|
||||
|
||||
// searching for signals
|
||||
if(!cdb->Move("Signals")){
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialise: GAM did not specify Signals entry"
|
||||
);
|
||||
return False;
|
||||
}
|
||||
|
||||
if ( signalsTable )
|
||||
delete [] signalsTable;
|
||||
signalsTable = new EPICSSignal * [nOfSignals];
|
||||
|
||||
for(i = 0; ((i < nOfSignals)&&(descriptor != NULL)); i++) {
|
||||
// move to children
|
||||
cdb->MoveToChildren(i);
|
||||
|
||||
// retrive descriptor description
|
||||
FString ddbName = descriptor->SignalName();
|
||||
uint32 ddbSize = descriptor->SignalSize();
|
||||
BasicTypeDescriptor ddbDesc = descriptor->SignalTypeCode();
|
||||
|
||||
// Get the server signal name
|
||||
FString EPICSSignalName;
|
||||
if ( !cdb.ReadFString(EPICSSignalName,"ServerName") ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: ServerName not specified for DDB signal %s",
|
||||
ddbName.Buffer());
|
||||
return False;
|
||||
}
|
||||
// Get the server signal subsampling
|
||||
int32 EPICSSignalSubSample;
|
||||
if ( !cdb.ReadInt32(EPICSSignalSubSample,"ServerSubSampling", DEFAULT_SERVER_SUBSAMPLING) ) {
|
||||
CStaticAssertErrorCondition(Information,
|
||||
"EPICSSignalsTable::Initialize: ServerSubSampling not specified for signal %s assuming %d",
|
||||
ddbName.Buffer(), EPICSSignalSubSample);
|
||||
} //------------------------------------------------------------------- end fetching configuration data
|
||||
|
||||
|
||||
// subscribe for service in the server
|
||||
unsigned EPICSId = -1;
|
||||
if ( !(gcrEPICSHnd->subscribe(EPICSSignalName.Buffer(), ddbDesc, ddbSize, EPICSId)) ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: %s subscribe fails for signal %s (server's signal name %s)",
|
||||
SignalsServer.Buffer(), ddbName.Buffer(), EPICSSignalName.Buffer() );
|
||||
return False;
|
||||
}
|
||||
|
||||
// NOTA differently from the JpfSignalTable we are not interested in the calibration data (if needed to be implemented)
|
||||
// in the previous version (jpf) if you have an array of signals in MARTe than each signals
|
||||
// will be mapped to a different jpf signal and also EPICSSignal, in this implementation
|
||||
// EPICS (and also MDSplus) support array of data so we also need to support array of data
|
||||
// now it is possible to create the Server's signal
|
||||
|
||||
EPICSSignal * newSignal = new EPICSSignal(
|
||||
ddbName, ddbDesc, ddbSize, dataOffset,
|
||||
EPICSSignalName, EPICSId, EPICSSignalSubSample);
|
||||
if (newSignal == NULL) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: Failed allocating space for signal %s (%s)",
|
||||
ddbName.Buffer(), EPICSSignalName.Buffer());
|
||||
return False;
|
||||
}
|
||||
else
|
||||
CStaticAssertErrorCondition(Information,
|
||||
"EPICSSignalsTable::Initialize: Added Signal %s (EPICS: %s)",
|
||||
ddbName.Buffer(), EPICSSignalName.Buffer());
|
||||
|
||||
|
||||
//ListInsert(newSignal,&AlphaSorter); //previous implementation
|
||||
ListInsert(newSignal);
|
||||
// copy the pointer in the table
|
||||
signalsTable[i] = newSignal;
|
||||
|
||||
// Increment offset
|
||||
dataOffset += newSignal->GetDDBSize();
|
||||
|
||||
// return to parent
|
||||
cdb->MoveToFather();
|
||||
// move to another signal
|
||||
descriptor = descriptor->Next();
|
||||
}
|
||||
// end "Signals" configuration
|
||||
cdb->MoveToFather();
|
||||
|
||||
if( (ListSize() == 0) || (List() == NULL) ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: No signal added to the list"
|
||||
);
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
} //--------------------------------------------------------------------------- ObjectLoadSetup
|
||||
|
||||
/* UpdateSignals
|
||||
* Updates all signals in the list pushing an event message on the queue
|
||||
*/
|
||||
bool EPICSSignalsTable::UpdateSignals (char * buffer, int32 timestamp) {
|
||||
int _ret;
|
||||
|
||||
int nOfSignals = this->ListSize(); // get the number of signals from the list
|
||||
for (int i=0; i<nOfSignals; i++) {
|
||||
// update the signal on the server only if needed
|
||||
if ( !(signalsTable[i]->counter % signalsTable[i]->GetEPICSSubSample()) ) {
|
||||
_ret = gcrEPICSHnd->put( signalsTable[i]->GetEPICSIndex(),
|
||||
(buffer + signalsTable[i]->GetDDBOffset()), (unsigned) timestamp );
|
||||
if ( _ret == 0 )
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::UpdateSignals: ->put return CIRCULAR BUFFER OVERFLOW"
|
||||
);
|
||||
}
|
||||
|
||||
signalsTable[i]->counter++;
|
||||
}
|
||||
|
||||
return True;
|
||||
} //--------------------------------------------------------------------------- UpdateSignals
|
||||
|
||||
|
||||
// not required
|
||||
/*
|
||||
int32 EPICSSignalsTable::FindOffsetAndInitSignalType(const FString &signalName, GCRTemplate<SignalInterface> signal, int32 nOfSamples) {
|
||||
|
||||
EPICSSignal *sig = (EPICSSignal *)List();
|
||||
for(int i = 0; i < ListSize(); i++){
|
||||
if(strcmp(sig->EPICSName(),signalName.Buffer()) == 0){
|
||||
signal->CopyData(sig->Type(), nOfSamples);
|
||||
return sig->Offset();
|
||||
}
|
||||
sig = (EPICSSignal *)sig->Next();
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
bool EPICSSignalsTable::ObjectDescription(StreamInterface &s,bool full,StreamInterface *err) {
|
||||
|
||||
EPICSSignal *sig = (EPICSSignal *)List();
|
||||
if(sig == NULL) return False;
|
||||
|
||||
s.Printf("Signals = {\n");
|
||||
for(int i = 0; i < this->ListSize(); i++){
|
||||
|
||||
FString bType;
|
||||
FString oType;
|
||||
|
||||
s.Printf("Signal%d = {\n",i);
|
||||
sig->GetDDBType().ConvertToString(bType);
|
||||
s.Printf(" Name = \"%s\" \n" , sig->GetEPICSName());
|
||||
s.Printf(" DataType = %s \n" , bType.Buffer());
|
||||
// s.Printf(" Cal0 = %f \n", sortedSignalVector[i]->Cal0());
|
||||
// s.Printf(" Cal1 = %f \n", sortedSignalVector[i]->Cal1());
|
||||
s.Printf("}\n");
|
||||
sig = (EPICSSignal *)sig->Next();
|
||||
}
|
||||
|
||||
s.Printf("}\n");
|
||||
return True;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
**/
|
||||
#if !defined(_EPICS_SIGNALS_TABLE)
|
||||
#define _EPICS_SIGNALS_TABLE
|
||||
|
||||
#include "System.h"
|
||||
#include "LinkedListable.h"
|
||||
|
||||
#include "FString.h"
|
||||
#include "BasicTypes.h"
|
||||
|
||||
#include "GCRTemplate.h"
|
||||
|
||||
class DDBInterface;
|
||||
class SignalInterface;
|
||||
|
||||
|
||||
|
||||
// EPICS Lib include
|
||||
#include "EPICSHandler.h"
|
||||
|
||||
|
||||
/*
|
||||
* DDB Supported Signal types
|
||||
* BTDInt32, BTDInt64 (int32, int64)
|
||||
* BTDUint32, BTDUint64 (uint32, uint64)
|
||||
* BTDFloat, BTDDouble (float32, float64)
|
||||
*/
|
||||
|
||||
|
||||
|
||||
class EPICSSignal :
|
||||
public LinkedListable
|
||||
{
|
||||
private:
|
||||
// Signal name in the DDB
|
||||
FString ddbSignalName;
|
||||
// Signal basic type descriptor in the DDB
|
||||
BasicTypeDescriptor typeDescriptor;
|
||||
// Signal number of elements
|
||||
int numElements;
|
||||
// Signal offset from the beginning of the DDB's buffer (byte)
|
||||
unsigned dataOffset;
|
||||
|
||||
// Signal name in the external server
|
||||
FString EPICSSignalName;
|
||||
// handle in the external server
|
||||
int EPICSindex;
|
||||
// esternal server required subsample
|
||||
int EPICSsubsample;
|
||||
|
||||
public:
|
||||
// subsampling public counter
|
||||
int counter;
|
||||
|
||||
// Next
|
||||
EPICSSignal *Next () {
|
||||
return (EPICSSignal *)LinkedListable::Next() ;
|
||||
};
|
||||
|
||||
// Constructor
|
||||
EPICSSignal (FString &nameIn, BasicTypeDescriptor descriptorIn, int elementIn, unsigned offsetIn,
|
||||
FString &serverNameIn, int indexIn, int subsampleIn) {
|
||||
Initialize(nameIn, descriptorIn, elementIn, offsetIn,
|
||||
serverNameIn, indexIn, subsampleIn);
|
||||
};
|
||||
|
||||
// De-constructor
|
||||
// no dynamic allocation, so nothing to do
|
||||
virtual ~EPICSSignal () {} ;
|
||||
|
||||
// Initialize data information
|
||||
inline bool Initialize (FString &nameIn, BasicTypeDescriptor descriptorIn, int elementIn, unsigned offsetIn,
|
||||
FString &serverNameIn, int indexIn, int subsampleIn)
|
||||
{
|
||||
ddbSignalName = nameIn;
|
||||
typeDescriptor = descriptorIn;
|
||||
numElements = elementIn;
|
||||
dataOffset = offsetIn;
|
||||
|
||||
EPICSSignalName = serverNameIn;
|
||||
EPICSindex = indexIn;
|
||||
EPICSsubsample = subsampleIn;
|
||||
|
||||
counter = 0;
|
||||
return True;
|
||||
}
|
||||
|
||||
// Get copy of the DDB Name
|
||||
inline const char * GetDDBName() const {
|
||||
return ddbSignalName.Buffer();
|
||||
}
|
||||
// type
|
||||
inline BasicTypeDescriptor GetDDBType () const {
|
||||
return typeDescriptor;
|
||||
}
|
||||
// whole signal data size
|
||||
inline int GetDDBSize() {
|
||||
return ( numElements * typeDescriptor.ByteSize() );
|
||||
}
|
||||
// Offset
|
||||
inline unsigned GetDDBOffset() const {
|
||||
return dataOffset;
|
||||
}
|
||||
|
||||
// Get copy of the Server Name
|
||||
inline const char * GetEPICSName() const {
|
||||
return EPICSSignalName.Buffer();
|
||||
}
|
||||
// Get copy of the EPICS index
|
||||
inline const int GetEPICSIndex() const {
|
||||
return EPICSindex;
|
||||
}
|
||||
// Get copy of the EPICS subsample factor
|
||||
inline const int GetEPICSSubSample() const {
|
||||
return EPICSsubsample;
|
||||
}
|
||||
}; //-------------------------------------------------------------------------- class EPICSSignal
|
||||
|
||||
|
||||
|
||||
class EPICSSignalsTable :
|
||||
public LinkedListHolder
|
||||
{
|
||||
EPICSSignal ** signalsTable;
|
||||
GCRTemplate<EPICSHandler> gcrEPICSHnd;
|
||||
|
||||
public:
|
||||
|
||||
/** Constructor */
|
||||
EPICSSignalsTable () {
|
||||
signalsTable = 0;
|
||||
};
|
||||
|
||||
/** Destructor */
|
||||
virtual ~EPICSSignalsTable () {
|
||||
|
||||
for (int i=0; i<this->ListSize(); i++)
|
||||
gcrEPICSHnd->unsubscribe( signalsTable[i]->GetEPICSIndex() );
|
||||
|
||||
// TODO
|
||||
// delete all the elements in the linked list
|
||||
// it is done automatically by Filippo's code?
|
||||
|
||||
if ( signalsTable )
|
||||
delete [] signalsTable;
|
||||
|
||||
if ( gcrEPICSHnd.IsValid() )
|
||||
gcrEPICSHnd.RemoveReference();
|
||||
};
|
||||
|
||||
/** return EPICSSignal table */
|
||||
inline EPICSSignal ** GetTable () {
|
||||
return signalsTable;
|
||||
};
|
||||
|
||||
/** Update all signals in the list */
|
||||
bool UpdateSignals (char * buffer, int32 timestamp);
|
||||
|
||||
/** Initialize the signal table */
|
||||
bool Initialize(const DDBInterface &interfacex, ConfigurationDataBase &info);
|
||||
|
||||
/** Object Description. Saves information on a StreamInterface. The information
|
||||
is used by the DataCollectionGAM to process the GAP message LISTSIGNALS. */
|
||||
virtual bool ObjectDescription(StreamInterface &s,bool full=False,StreamInterface *err=NULL);
|
||||
|
||||
/** Find the offset for the signal */
|
||||
// int32 FindOffsetAndInitSignalType(const FString &signalName, GCRTemplate<SignalInterface> signal, int32 nOfSamples);
|
||||
|
||||
}; //-------------------------------------------------------------------------- class EPICSSignalsTable
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,56 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
EPICS_PATH=$(EPICS_BASE)
|
||||
MARTEBasePath=/opt/MARTe
|
||||
|
||||
MAKEDEFAULTDIR=$(MARTEBasePath)/MakeDefaults
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET)
|
||||
|
||||
OBJSX= EPICSSignalsTable.x
|
||||
|
||||
CFLAGS+= -I.
|
||||
CFLAGS+= -I$(MARTEBasePath)/
|
||||
CFLAGS+= -I$(MARTEBasePath)/MARTe/MARTeSupportLib
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level0
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level1
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level2
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level3
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level4
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level5
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level6
|
||||
|
||||
CFLAGS+= -I$(EPICS_PATH)/include
|
||||
CFLAGS+= -I$(EPICS_PATH)/include/os/Linux
|
||||
CFLAGS+= -I$(EPICS_PATH)/include/compiler/gcc
|
||||
CFLAGS+= -I../EPICSLib
|
||||
|
||||
all: $(OBJS) \
|
||||
$(TARGET)/EPICSGAM$(GAMEXT)
|
||||
echo $(OBJS)
|
||||
|
||||
include depends.$(TARGET)
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET)
|
||||
@@ -0,0 +1,56 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
EPICS_PATH=$(EPICS_BASE)
|
||||
MARTEBasePath=/opt/MARTe
|
||||
|
||||
MAKEDEFAULTDIR=$(MARTEBasePath)/MakeDefaults
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET)
|
||||
|
||||
OBJSX= EPICSSignalsTable.x
|
||||
|
||||
CFLAGS+= -I.
|
||||
CFLAGS+= -I$(MARTEBasePath)/
|
||||
CFLAGS+= -I$(MARTEBasePath)/MARTe/MARTeSupportLib
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level0
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level1
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level2
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level3
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level4
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level5
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level6
|
||||
|
||||
CFLAGS+= -I$(EPICS_PATH)/include
|
||||
CFLAGS+= -I$(EPICS_PATH)/include/os/Linux
|
||||
CFLAGS+= -I$(EPICS_PATH)/include/compiler/gcc
|
||||
CFLAGS+= -I../../EPICSLib
|
||||
|
||||
all: $(OBJS) \
|
||||
$(TARGET)/EPICSGAM$(GAMEXT)
|
||||
echo $(OBJS)
|
||||
|
||||
include depends.$(TARGET)
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET)
|
||||
@@ -0,0 +1,30 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
TARGET=linux
|
||||
|
||||
include Makefile.inc
|
||||
|
||||
LIBRARIES += -L$(MARTEBasePath)/BaseLib2/$(TARGET) -lBaseLib2
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
TARGET=linux
|
||||
|
||||
include Makefile.inc
|
||||
|
||||
LIBRARIES += -L../../BaseLib2/$(TARGET) -lBaseLib2
|
||||
|
||||
@@ -0,0 +1,302 @@
|
||||
linux/EPICSGAM.o: EPICSGAM.cpp EPICSGAM.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level5/GAM.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level3/CDB.h /opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level3/CDBNodeRef.h \
|
||||
/opt/MARTe/BaseLib2/Level3/CDBNode.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MenuContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MenuInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Console.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BasicConsole.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageEnvelope.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level5/Message.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageCode.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MDRFlags.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MuxLock.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpRealm.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpStream.h \
|
||||
/opt/MARTe/BaseLib2/Level3/StreamConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageQueue.h \
|
||||
/opt/MARTe/BaseLib2/Level2/SXMemory.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInputInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterfaceDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBSignalDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBIOInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/SignalInterface.h EPICSSignalsTable.h \
|
||||
../EPICSLib/EPICSHandler.h /opt/MARTe/BaseLib2/Level0/CountSem.h \
|
||||
../EPICSLib/exServer.h /opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GlobalObjectDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level2/GCNString.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MenuEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpGroupResource.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h
|
||||
linux/EPICSSignalsTable.o: EPICSSignalsTable.cpp EPICSSignalsTable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/HRT.h /opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h ../EPICSLib/EPICSHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpRealm.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpStream.h \
|
||||
/opt/MARTe/BaseLib2/Level3/StreamConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CountSem.h ../EPICSLib/exServer.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GlobalObjectDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterfaceDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBSignalDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level5/SignalInterface.h
|
||||
@@ -0,0 +1,302 @@
|
||||
EPICSGAM.o: EPICSGAM.cpp EPICSGAM.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level5/GAM.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level3/CDB.h /opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level3/CDBNodeRef.h \
|
||||
/opt/MARTe/BaseLib2/Level3/CDBNode.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MenuContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MenuInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Console.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BasicConsole.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageEnvelope.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level5/Message.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageCode.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MDRFlags.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MuxLock.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpRealm.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpStream.h \
|
||||
/opt/MARTe/BaseLib2/Level3/StreamConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageQueue.h \
|
||||
/opt/MARTe/BaseLib2/Level2/SXMemory.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInputInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterfaceDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBSignalDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBIOInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/SignalInterface.h EPICSSignalsTable.h \
|
||||
../EPICSLib/EPICSHandler.h /opt/MARTe/BaseLib2/Level0/CountSem.h \
|
||||
../EPICSLib/exServer.h /opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GlobalObjectDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level2/GCNString.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MenuEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpGroupResource.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h
|
||||
EPICSSignalsTable.o: EPICSSignalsTable.cpp EPICSSignalsTable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/HRT.h /opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h ../EPICSLib/EPICSHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpRealm.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpStream.h \
|
||||
/opt/MARTe/BaseLib2/Level3/StreamConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CountSem.h ../EPICSLib/exServer.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GlobalObjectDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterfaceDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBSignalDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level5/SignalInterface.h
|
||||
1612
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSGAM/test.cfg
Normal file
1612
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSGAM/test.cfg
Normal file
File diff suppressed because it is too large
Load Diff
1574
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSGAM/test1.cfg
Normal file
1574
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSGAM/test1.cfg
Normal file
File diff suppressed because it is too large
Load Diff
1396
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSLib/EPICSHandler.cpp
Normal file
1396
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSLib/EPICSHandler.cpp
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,307 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
**/
|
||||
#if !defined (EPICS_HANDLER)
|
||||
#define EPICS_HANDLER
|
||||
|
||||
#include "System.h"
|
||||
#include "GCNamedObject.h"
|
||||
#include "HttpInterface.h"
|
||||
#include "FString.h"
|
||||
#include "CountSem.h"
|
||||
|
||||
|
||||
//#include "epicsGuard.h"
|
||||
#include "exServer.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
// special gddDestructor guarantees same form of new and delete
|
||||
//
|
||||
class float32Destructor: public gddDestructor {
|
||||
virtual void run ( void * pUntyped ) {
|
||||
aitFloat32 * pf = reinterpret_cast < aitFloat32 * > ( pUntyped );
|
||||
delete [] pf;
|
||||
}
|
||||
};
|
||||
class float64Destructor: public gddDestructor {
|
||||
virtual void run ( void * pUntyped ) {
|
||||
aitFloat64 * pf = reinterpret_cast < aitFloat64 * > ( pUntyped );
|
||||
delete [] pf;
|
||||
}
|
||||
};
|
||||
class int8Destructor: public gddDestructor {
|
||||
virtual void run ( void * pUntyped ) {
|
||||
aitInt8 * pf = reinterpret_cast < aitInt8 * > ( pUntyped );
|
||||
delete [] pf;
|
||||
}
|
||||
};
|
||||
class int16Destructor: public gddDestructor {
|
||||
virtual void run ( void * pUntyped ) {
|
||||
aitInt16 * pf = reinterpret_cast < aitInt16 * > ( pUntyped );
|
||||
delete [] pf;
|
||||
}
|
||||
};
|
||||
class int32Destructor: public gddDestructor {
|
||||
virtual void run ( void * pUntyped ) {
|
||||
aitInt32 * pf = reinterpret_cast < aitInt32 * > ( pUntyped );
|
||||
delete [] pf;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
// aitInt64 not supported by GDD
|
||||
class int64Destructor: public gddDestructor {
|
||||
virtual void run ( void * pUntyped ) {
|
||||
aitInt64 * pf = reinterpret_cast < aitInt64 * > ( pUntyped );
|
||||
delete [] pf;
|
||||
}
|
||||
};
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
void callback (void * args);
|
||||
void callback_event (void * args);
|
||||
*/
|
||||
|
||||
// nel buffer circolare ogni entry dev'essere casta in questo modo
|
||||
// value è il contenitore dei dati.
|
||||
//nel buffer non ce frammentazione perche sfruttiamo un buffer circolare
|
||||
|
||||
|
||||
#define CB_HEADER_MAGIC 0xBEEF
|
||||
|
||||
|
||||
typedef struct _cbHeader {
|
||||
uint16 magic;
|
||||
uint16 id;
|
||||
uint32 timestamp; // aggiunto con dolore per finire il progetto.. :-|
|
||||
uint32 value [];
|
||||
} cbHeader;
|
||||
|
||||
|
||||
typedef struct _subscriber {
|
||||
int count;
|
||||
int size;
|
||||
BasicTypeDescriptor type;
|
||||
int statisticPut;
|
||||
int statisticGet;
|
||||
} subscriber;
|
||||
|
||||
OBJECT_DLL(EPICSHandler)
|
||||
;
|
||||
|
||||
class EPICSHandler
|
||||
: public GCNamedObject, public HttpInterface
|
||||
{
|
||||
|
||||
OBJECT_DLL_STUFF(EPICSHandler)
|
||||
|
||||
|
||||
//friend void callback (void * args);
|
||||
//friend void callback_event (void * args);
|
||||
|
||||
|
||||
private:
|
||||
//process variables prefix
|
||||
FString pvPrefix;
|
||||
|
||||
bool setup_complete; // setup status (yes complete no nou complete)
|
||||
|
||||
//debug level
|
||||
unsigned debugLevel;
|
||||
//scanOn true or false
|
||||
bool scanOn;
|
||||
//asyncScan true or false
|
||||
bool asyncScan;
|
||||
//asyncDelay
|
||||
double asyncDelay;
|
||||
//maxsimulasyncio
|
||||
unsigned maxSimultAsyncIO;
|
||||
|
||||
TID threadID;
|
||||
int32 cpuMask;
|
||||
|
||||
TID threadID_event;
|
||||
int32 cpuMask_event;
|
||||
|
||||
//Number of process variables
|
||||
int32 numberOfPVs;
|
||||
// PVs are registered in the pCAS
|
||||
exServer * pCAS;
|
||||
// list of PV to register to the pCAS
|
||||
pvInfo ** pvList ;
|
||||
|
||||
|
||||
// subscriber support list
|
||||
subscriber * subList;
|
||||
int subListSize;
|
||||
|
||||
// buffer support data
|
||||
int buffer_size ;
|
||||
int buffer_align ;
|
||||
int32 buffer_free ;
|
||||
|
||||
cbHeader * buffer_head;
|
||||
cbHeader * buffer_tail;
|
||||
|
||||
int buffer_err;
|
||||
|
||||
char * buffer_ptr;
|
||||
|
||||
CountSem sem;
|
||||
TimeoutType timeout;
|
||||
|
||||
char * subBuffer;
|
||||
unsigned subSize;
|
||||
|
||||
public:
|
||||
static const char * css;
|
||||
static const char * aitEnum_strings[];
|
||||
static const char * excasIoType_strings[];
|
||||
|
||||
static const char * tf_strings[];
|
||||
static const int tf_values[];
|
||||
|
||||
static const char * menuAlarmSevr_strings[];
|
||||
static const char * menuAlarmStat_strings[];
|
||||
static const char * menuScan_strings[];
|
||||
static const char * menuYesNo_strings[];
|
||||
|
||||
static const int menu_values[];
|
||||
static const float menuScan_values[];
|
||||
|
||||
/**
|
||||
* Converts a null terminated string to an aitEnum value
|
||||
*/
|
||||
static aitEnum ConvertToaitEnum (const char * s );
|
||||
static excasIoType ConvertToexcasIoType(const char * s);
|
||||
|
||||
inline const exServer * getCaServer() const {
|
||||
return pCAS;
|
||||
} ;
|
||||
|
||||
// TODO
|
||||
EPICSHandler() {
|
||||
setup_complete = false;
|
||||
|
||||
numberOfPVs = 0;
|
||||
pCAS = 0;
|
||||
pvList = 0;
|
||||
|
||||
subList = 0;
|
||||
subListSize = 0;
|
||||
buffer_size = 0;
|
||||
buffer_align = 0;
|
||||
|
||||
buffer_head = 0;
|
||||
buffer_tail = 0;
|
||||
|
||||
buffer_ptr = 0;
|
||||
|
||||
buffer_err = 0; // last error issued by the circular buffer
|
||||
|
||||
sem.Create();
|
||||
timeout = TTInfiniteWait;
|
||||
|
||||
subBuffer = 0;
|
||||
subSize = 0;
|
||||
}
|
||||
|
||||
// TODO
|
||||
virtual ~EPICSHandler(){
|
||||
//if(pvList != NULL){
|
||||
// delete [] pvList;
|
||||
//}
|
||||
setup_complete = false;
|
||||
|
||||
callback_finalize--;
|
||||
callback_event_finalize--;
|
||||
|
||||
sem.Post();
|
||||
sem.Close();
|
||||
|
||||
// wait for event...
|
||||
// devo aspettare che i thread escano prima di eliminare gli objects..
|
||||
|
||||
if (pCAS)
|
||||
delete pCAS;
|
||||
|
||||
for(int i=0; i<numberOfPVs; i++)
|
||||
delete pvList[i];
|
||||
|
||||
if (pvList)
|
||||
delete [] pvList;
|
||||
|
||||
if (buffer_ptr)
|
||||
delete [] buffer_ptr;
|
||||
|
||||
if (subBuffer)
|
||||
delete [] subBuffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load and configure object parameters
|
||||
* @param info the configuration database
|
||||
* @param err the error stream
|
||||
* @return True if no errors are found during object configuration
|
||||
*/
|
||||
bool ObjectLoadSetup(ConfigurationDataBase &info,StreamInterface *err);
|
||||
|
||||
/**
|
||||
* Http Page that reflects the state of the object
|
||||
*/
|
||||
bool ProcessHttpMessage(HttpStream &hStream);
|
||||
|
||||
/**
|
||||
* the data pool stayes in a circular memory buffer
|
||||
* symbolic name that identify a pv or a mdsplus tree...
|
||||
* type is the MARTe's basictype on which this signal appears on the DDB
|
||||
* count is the number of elements of the same type (array support)
|
||||
* id is the PV's List entry index (handle)
|
||||
*/
|
||||
|
||||
// probabilmente sarebbe da tenere anche un puntatore all'oggetto che fa il subscribing
|
||||
// -> il numero di buckets dev'essere settato da cfg file
|
||||
// -> ogni bucket è della stessa grandezza, i bukets sono grandi come la union di tutti
|
||||
// i tipi base
|
||||
bool subscribe ( const char * nameIn, BasicTypeDescriptor typeIn, int countIn, unsigned &idOut);
|
||||
int put (unsigned idIn, void * bufferIn, unsigned timestamp); // al massimo si può estendere per fare put multipli
|
||||
int get (unsigned &idOut, void * bufferIn, unsigned sizeIn, unsigned ×tamp); // anche in questo caso il buffer dev'essere pre allocato
|
||||
bool unsubscribe (unsigned id);
|
||||
|
||||
private:
|
||||
static void callback (void * args); //threadID [this must be static also]
|
||||
static void callback_event (void * args); //threadID_event
|
||||
|
||||
static int callback_finalize; //threadID
|
||||
static int callback_event_finalize; //threadID_event
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,266 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
**/
|
||||
#include "EPICSSignalsTable.h"
|
||||
#include "GlobalObjectDataBase.h"
|
||||
#include "GCRTemplate.h"
|
||||
#include "DDBInterface.h"
|
||||
#include "CDBExtended.h"
|
||||
#include "SignalInterface.h"
|
||||
|
||||
#define DEFAULT_SERVER_SUBSAMPLING 1000
|
||||
|
||||
// we do not need to sort the list in any order
|
||||
// so we remove it (at least for now)
|
||||
|
||||
/*
|
||||
class AlphaSorterClass : public SortFilter {
|
||||
|
||||
public:
|
||||
|
||||
virtual ~AlphaSorterClass(){};
|
||||
|
||||
virtual int32 Compare(LinkedListable *data1,LinkedListable *data2){
|
||||
const EPICSSignal *p1 = (const EPICSSignal *)data1;
|
||||
const EPICSSignal *p2 = (const EPICSSignal *)data2;
|
||||
if (p2 == NULL) return 1;
|
||||
if (p1 == NULL) return -1;
|
||||
|
||||
return strcmp(p2->EPICSName(),p1->EPICSName());
|
||||
}
|
||||
|
||||
} AlphaSorter;
|
||||
*/
|
||||
|
||||
/*
|
||||
* Initialize has to link signals in the DDB with
|
||||
* EPICS descriptors (sending messages ?)
|
||||
* EPICS is message based so doesn't care
|
||||
*/
|
||||
bool EPICSSignalsTable::Initialize (const DDBInterface &ddbInterface, ConfigurationDataBase &info) {
|
||||
// CleanUp
|
||||
CleanUp();
|
||||
|
||||
// check the number of signals
|
||||
int32 nOfSignals = ddbInterface.NumberOfEntries();
|
||||
if(nOfSignals == 0)
|
||||
return False;
|
||||
|
||||
CDBExtended cdb(info);
|
||||
unsigned dataOffset = 0;
|
||||
int i = 0;
|
||||
|
||||
// Find the Signal Server object
|
||||
FString SignalsServer;
|
||||
if (!cdb.ReadFString(SignalsServer,"SignalsServer")) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: SignalsServer not defined in the configuration"
|
||||
);
|
||||
return False;
|
||||
}
|
||||
|
||||
GCReference gc = GODBFindByName( SignalsServer.Buffer() );
|
||||
if ( !gc.IsValid() ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize cannot find %s in the GlobalObjectDataBase",
|
||||
SignalsServer.Buffer() );
|
||||
return False;
|
||||
}
|
||||
|
||||
// GCRTemplate<PubSubInterface> epics_hnd = gc;
|
||||
// TODO more generic
|
||||
gcrEPICSHnd = gc;
|
||||
if ( !gcrEPICSHnd.IsValid() ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize cannot cast %s as an EPICSHandler",
|
||||
SignalsServer.Buffer() );
|
||||
return False;
|
||||
}
|
||||
//------------------------------------------------------------------------- end server initialization
|
||||
|
||||
// ddbInterface signal list
|
||||
const DDBSignalDescriptor *descriptor = ddbInterface.SignalsList();
|
||||
|
||||
// searching for signals
|
||||
if(!cdb->Move("Signals")){
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialise: GAM did not specify Signals entry"
|
||||
);
|
||||
return False;
|
||||
}
|
||||
|
||||
if ( signalsTable )
|
||||
delete [] signalsTable;
|
||||
signalsTable = new EPICSSignal * [nOfSignals];
|
||||
|
||||
for(i = 0; ((i < nOfSignals)&&(descriptor != NULL)); i++) {
|
||||
// move to children
|
||||
cdb->MoveToChildren(i);
|
||||
|
||||
// retrive descriptor description
|
||||
FString ddbName = descriptor->SignalName();
|
||||
uint32 ddbSize = descriptor->SignalSize();
|
||||
BasicTypeDescriptor ddbDesc = descriptor->SignalTypeCode();
|
||||
|
||||
// Get the server signal name
|
||||
FString EPICSSignalName;
|
||||
if ( !cdb.ReadFString(EPICSSignalName,"ServerName") ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: ServerName not specified for DDB signal %s",
|
||||
ddbName.Buffer());
|
||||
return False;
|
||||
}
|
||||
// Get the server signal subsampling
|
||||
int32 EPICSSignalSubSample;
|
||||
if ( !cdb.ReadInt32(EPICSSignalSubSample,"ServerSubSampling", DEFAULT_SERVER_SUBSAMPLING) ) {
|
||||
CStaticAssertErrorCondition(Information,
|
||||
"EPICSSignalsTable::Initialize: ServerSubSampling not specified for signal %s assuming %d",
|
||||
ddbName.Buffer(), EPICSSignalSubSample);
|
||||
} //------------------------------------------------------------------- end fetching configuration data
|
||||
|
||||
|
||||
// subscribe for service in the server
|
||||
unsigned EPICSId = -1;
|
||||
if ( !(gcrEPICSHnd->subscribe(EPICSSignalName.Buffer(), ddbDesc, ddbSize, EPICSId)) ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: %s subscribe fails for signal %s (server's signal name %s)",
|
||||
SignalsServer.Buffer(), ddbName.Buffer(), EPICSSignalName.Buffer() );
|
||||
return False;
|
||||
}
|
||||
|
||||
// NOTA differently from the JpfSignalTable we are not interested in the calibration data (if needed to be implemented)
|
||||
// in the previous version (jpf) if you have an array of signals in MARTe than each signals
|
||||
// will be mapped to a different jpf signal and also EPICSSignal, in this implementation
|
||||
// EPICS (and also MDSplus) support array of data so we also need to support array of data
|
||||
// now it is possible to create the Server's signal
|
||||
|
||||
EPICSSignal * newSignal = new EPICSSignal(
|
||||
ddbName, ddbDesc, ddbSize, dataOffset,
|
||||
EPICSSignalName, EPICSId, EPICSSignalSubSample);
|
||||
if (newSignal == NULL) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: Failed allocating space for signal %s (%s)",
|
||||
ddbName.Buffer(), EPICSSignalName.Buffer());
|
||||
return False;
|
||||
}
|
||||
else
|
||||
CStaticAssertErrorCondition(Information,
|
||||
"EPICSSignalsTable::Initialize: Added Signal %s (EPICS: %s)",
|
||||
ddbName.Buffer(), EPICSSignalName.Buffer());
|
||||
|
||||
|
||||
//ListInsert(newSignal,&AlphaSorter); //previous implementation
|
||||
ListInsert(newSignal);
|
||||
// copy the pointer in the table
|
||||
signalsTable[i] = newSignal;
|
||||
|
||||
// Increment offset
|
||||
dataOffset += newSignal->GetDDBSize();
|
||||
|
||||
// return to parent
|
||||
cdb->MoveToFather();
|
||||
// move to another signal
|
||||
descriptor = descriptor->Next();
|
||||
}
|
||||
// end "Signals" configuration
|
||||
cdb->MoveToFather();
|
||||
|
||||
if( (ListSize() == 0) || (List() == NULL) ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: No signal added to the list"
|
||||
);
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
} //--------------------------------------------------------------------------- ObjectLoadSetup
|
||||
|
||||
/* UpdateSignals
|
||||
* Updates all signals in the list pushing an event message on the queue
|
||||
*/
|
||||
bool EPICSSignalsTable::UpdateSignals (char * buffer, int32 timestamp) {
|
||||
int _ret;
|
||||
|
||||
int nOfSignals = this->ListSize(); // get the number of signals from the list
|
||||
for (int i=0; i<nOfSignals; i++) {
|
||||
// update the signal on the server only if needed
|
||||
if ( !(signalsTable[i]->counter % signalsTable[i]->GetEPICSSubSample()) ) {
|
||||
_ret = gcrEPICSHnd->put( signalsTable[i]->GetEPICSIndex(),
|
||||
(buffer + signalsTable[i]->GetDDBOffset()), (unsigned) timestamp );
|
||||
if ( _ret == 0 )
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::UpdateSignals: ->put return CIRCULAR BUFFER OVERFLOW"
|
||||
);
|
||||
}
|
||||
|
||||
signalsTable[i]->counter++;
|
||||
}
|
||||
|
||||
return True;
|
||||
} //--------------------------------------------------------------------------- UpdateSignals
|
||||
|
||||
|
||||
// not required
|
||||
/*
|
||||
int32 EPICSSignalsTable::FindOffsetAndInitSignalType(const FString &signalName, GCRTemplate<SignalInterface> signal, int32 nOfSamples) {
|
||||
|
||||
EPICSSignal *sig = (EPICSSignal *)List();
|
||||
for(int i = 0; i < ListSize(); i++){
|
||||
if(strcmp(sig->EPICSName(),signalName.Buffer()) == 0){
|
||||
signal->CopyData(sig->Type(), nOfSamples);
|
||||
return sig->Offset();
|
||||
}
|
||||
sig = (EPICSSignal *)sig->Next();
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
bool EPICSSignalsTable::ObjectDescription(StreamInterface &s,bool full,StreamInterface *err) {
|
||||
|
||||
EPICSSignal *sig = (EPICSSignal *)List();
|
||||
if(sig == NULL) return False;
|
||||
|
||||
s.Printf("Signals = {\n");
|
||||
for(int i = 0; i < this->ListSize(); i++){
|
||||
|
||||
FString bType;
|
||||
FString oType;
|
||||
|
||||
s.Printf("Signal%d = {\n",i);
|
||||
sig->GetDDBType().ConvertToString(bType);
|
||||
s.Printf(" Name = \"%s\" \n" , sig->GetEPICSName());
|
||||
s.Printf(" DataType = %s \n" , bType.Buffer());
|
||||
// s.Printf(" Cal0 = %f \n", sortedSignalVector[i]->Cal0());
|
||||
// s.Printf(" Cal1 = %f \n", sortedSignalVector[i]->Cal1());
|
||||
s.Printf("}\n");
|
||||
sig = (EPICSSignal *)sig->Next();
|
||||
}
|
||||
|
||||
s.Printf("}\n");
|
||||
return True;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
**/
|
||||
#if !defined(_EPICS_SIGNALS_TABLE)
|
||||
#define _EPICS_SIGNALS_TABLE
|
||||
|
||||
#include "System.h"
|
||||
#include "LinkedListable.h"
|
||||
|
||||
#include "FString.h"
|
||||
#include "BasicTypes.h"
|
||||
|
||||
#include "GCRTemplate.h"
|
||||
|
||||
class DDBInterface;
|
||||
class SignalInterface;
|
||||
|
||||
|
||||
|
||||
// EPICS Lib include
|
||||
#include "EPICSHandler.h"
|
||||
|
||||
|
||||
/*
|
||||
* DDB Supported Signal types
|
||||
* BTDInt32, BTDInt64 (int32, int64)
|
||||
* BTDUint32, BTDUint64 (uint32, uint64)
|
||||
* BTDFloat, BTDDouble (float32, float64)
|
||||
*/
|
||||
|
||||
|
||||
|
||||
class EPICSSignal :
|
||||
public LinkedListable
|
||||
{
|
||||
private:
|
||||
// Signal name in the DDB
|
||||
FString ddbSignalName;
|
||||
// Signal basic type descriptor in the DDB
|
||||
BasicTypeDescriptor typeDescriptor;
|
||||
// Signal number of elements
|
||||
int numElements;
|
||||
// Signal offset from the beginning of the DDB's buffer (byte)
|
||||
unsigned dataOffset;
|
||||
|
||||
// Signal name in the external server
|
||||
FString EPICSSignalName;
|
||||
// handle in the external server
|
||||
int EPICSindex;
|
||||
// esternal server required subsample
|
||||
int EPICSsubsample;
|
||||
|
||||
public:
|
||||
// subsampling public counter
|
||||
int counter;
|
||||
|
||||
// Next
|
||||
EPICSSignal *Next () {
|
||||
return (EPICSSignal *)LinkedListable::Next() ;
|
||||
};
|
||||
|
||||
// Constructor
|
||||
EPICSSignal (FString &nameIn, BasicTypeDescriptor descriptorIn, int elementIn, unsigned offsetIn,
|
||||
FString &serverNameIn, int indexIn, int subsampleIn) {
|
||||
Initialize(nameIn, descriptorIn, elementIn, offsetIn,
|
||||
serverNameIn, indexIn, subsampleIn);
|
||||
};
|
||||
|
||||
// De-constructor
|
||||
// no dynamic allocation, so nothing to do
|
||||
virtual ~EPICSSignal () {} ;
|
||||
|
||||
// Initialize data information
|
||||
inline bool Initialize (FString &nameIn, BasicTypeDescriptor descriptorIn, int elementIn, unsigned offsetIn,
|
||||
FString &serverNameIn, int indexIn, int subsampleIn)
|
||||
{
|
||||
ddbSignalName = nameIn;
|
||||
typeDescriptor = descriptorIn;
|
||||
numElements = elementIn;
|
||||
dataOffset = offsetIn;
|
||||
|
||||
EPICSSignalName = serverNameIn;
|
||||
EPICSindex = indexIn;
|
||||
EPICSsubsample = subsampleIn;
|
||||
|
||||
counter = 0;
|
||||
return True;
|
||||
}
|
||||
|
||||
// Get copy of the DDB Name
|
||||
inline const char * GetDDBName() const {
|
||||
return ddbSignalName.Buffer();
|
||||
}
|
||||
// type
|
||||
inline BasicTypeDescriptor GetDDBType () const {
|
||||
return typeDescriptor;
|
||||
}
|
||||
// whole signal data size
|
||||
inline int GetDDBSize() {
|
||||
return ( numElements * typeDescriptor.ByteSize() );
|
||||
}
|
||||
// Offset
|
||||
inline unsigned GetDDBOffset() const {
|
||||
return dataOffset;
|
||||
}
|
||||
|
||||
// Get copy of the Server Name
|
||||
inline const char * GetEPICSName() const {
|
||||
return EPICSSignalName.Buffer();
|
||||
}
|
||||
// Get copy of the EPICS index
|
||||
inline const int GetEPICSIndex() const {
|
||||
return EPICSindex;
|
||||
}
|
||||
// Get copy of the EPICS subsample factor
|
||||
inline const int GetEPICSSubSample() const {
|
||||
return EPICSsubsample;
|
||||
}
|
||||
}; //-------------------------------------------------------------------------- class EPICSSignal
|
||||
|
||||
|
||||
|
||||
class EPICSSignalsTable :
|
||||
public LinkedListHolder
|
||||
{
|
||||
EPICSSignal ** signalsTable;
|
||||
GCRTemplate<EPICSHandler> gcrEPICSHnd;
|
||||
|
||||
public:
|
||||
|
||||
/** Constructor */
|
||||
EPICSSignalsTable () {
|
||||
signalsTable = 0;
|
||||
};
|
||||
|
||||
/** Destructor */
|
||||
virtual ~EPICSSignalsTable () {
|
||||
|
||||
for (int i=0; i<this->ListSize(); i++)
|
||||
gcrEPICSHnd->unsubscribe( signalsTable[i]->GetEPICSIndex() );
|
||||
|
||||
// TODO
|
||||
// delete all the elements in the linked list
|
||||
// it is done automatically by Filippo's code?
|
||||
|
||||
if ( signalsTable )
|
||||
delete [] signalsTable;
|
||||
|
||||
if ( gcrEPICSHnd.IsValid() )
|
||||
gcrEPICSHnd.RemoveReference();
|
||||
};
|
||||
|
||||
/** return EPICSSignal table */
|
||||
inline EPICSSignal ** GetTable () {
|
||||
return signalsTable;
|
||||
};
|
||||
|
||||
/** Update all signals in the list */
|
||||
bool UpdateSignals (char * buffer, int32 timestamp);
|
||||
|
||||
/** Initialize the signal table */
|
||||
bool Initialize(const DDBInterface &interfacex, ConfigurationDataBase &info);
|
||||
|
||||
/** Object Description. Saves information on a StreamInterface. The information
|
||||
is used by the DataCollectionGAM to process the GAP message LISTSIGNALS. */
|
||||
virtual bool ObjectDescription(StreamInterface &s,bool full=False,StreamInterface *err=NULL);
|
||||
|
||||
/** Find the offset for the signal */
|
||||
// int32 FindOffsetAndInitSignalType(const FString &signalName, GCRTemplate<SignalInterface> signal, int32 nOfSamples);
|
||||
|
||||
}; //-------------------------------------------------------------------------- class EPICSSignalsTable
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,288 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
**/
|
||||
// EPICS Lib include
|
||||
#include "EPICSHandler.h"
|
||||
//#include "exServer.h"
|
||||
|
||||
|
||||
|
||||
|
||||
#include "EPICSSignalsTable.h"
|
||||
|
||||
|
||||
#include "GlobalObjectDataBase.h"
|
||||
#include "GCRTemplate.h"
|
||||
|
||||
#include "DDBInterface.h"
|
||||
#include "CDBExtended.h"
|
||||
#include "SignalInterface.h"
|
||||
|
||||
|
||||
class AlphaSorterClass : public SortFilter {
|
||||
|
||||
public:
|
||||
|
||||
virtual ~AlphaSorterClass(){};
|
||||
|
||||
virtual int32 Compare(LinkedListable *data1,LinkedListable *data2){
|
||||
const EPICSSignal *p1 = (const EPICSSignal *)data1;
|
||||
const EPICSSignal *p2 = (const EPICSSignal *)data2;
|
||||
if (p2 == NULL) return 1;
|
||||
if (p1 == NULL) return -1;
|
||||
|
||||
return strcmp(p2->EPICSName(),p1->EPICSName());
|
||||
}
|
||||
|
||||
} AlphaSorter;
|
||||
|
||||
|
||||
bool EPICSSignal::Initialize(const FString &ddbName, const FString &jpfName, uint32 offset, BasicTypeDescriptor descriptor) {
|
||||
ddbSignalName = ddbName;
|
||||
EPICSSignalName = jpfName;
|
||||
dataOffset = offset;
|
||||
typeDescriptor = descriptor;
|
||||
data_size = typeDescriptor.ByteSize();
|
||||
data_buffer = new char[data_size];
|
||||
memset(data_buffer, 0, data_size);
|
||||
return True;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize has to link signals in the DDB with
|
||||
* EPICS descriptors (sending messages ?)
|
||||
* EPICS is message based so doesn't care
|
||||
*/
|
||||
bool EPICSSignalsTable::Initialize(const DDBInterface &ddbInterface, ConfigurationDataBase &info) {
|
||||
// CleanUp
|
||||
CleanUp();
|
||||
|
||||
int32 nOfSignals = ddbInterface.NumberOfEntries();
|
||||
if(nOfSignals == 0)return False;
|
||||
|
||||
// ddbInterface signal list
|
||||
CDBExtended cdb(info);
|
||||
const DDBSignalDescriptor *descriptor = ddbInterface.SignalsList();
|
||||
uint32 wordOffset = 0;
|
||||
int i = 0;
|
||||
|
||||
// EPICS interface signal list
|
||||
#define EPICS_LIBRARY "EPICSLib"
|
||||
GCReference gc = GODBFindByName(EPICS_LIBRARY);
|
||||
if ( !gc.IsValid() ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize cannot find %s in the GlobalObjectDataBase",
|
||||
EPICS_LIBRARY);
|
||||
return False;
|
||||
}
|
||||
|
||||
GCRTemplate<EPICSHandler> epics_hnd = gc;
|
||||
if ( !epics_hnd.IsValid() ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize cannot cast %s as an EPICSHandler",
|
||||
EPICS_LIBRARY);
|
||||
return False;
|
||||
}
|
||||
|
||||
exServer *es = const_cast<exServer*>( epics_hnd->getCaServer() );
|
||||
|
||||
for(i = 0; ((i < nOfSignals)&&(descriptor != NULL)); i++){
|
||||
cdb->MoveToChildren(i);
|
||||
|
||||
FString ddbName;
|
||||
ddbName = descriptor->SignalName();
|
||||
|
||||
// Get the JPF name of the signal
|
||||
FString EPICSSignalName;
|
||||
if (!cdb.ReadFString(EPICSSignalName,"EPICSName")) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: EPICSName not specified for DDB signal %s",
|
||||
ddbName.Buffer());
|
||||
return False;
|
||||
}
|
||||
|
||||
|
||||
// probably this must be done also in EPICS... conversion to uppercase letters
|
||||
/*
|
||||
char *temp = EPICSSignalName.Buffer();
|
||||
for(int j =0; j<EPICSSignalName.Size(); j++){
|
||||
temp[j] = toupper(temp[j]);
|
||||
}
|
||||
*/
|
||||
|
||||
//Locate the signal by message ..
|
||||
// honestly I do not know which is the best way to implement it bu...
|
||||
// as a first prototype we do things in this way...
|
||||
//searching the GODB for the EPICSLib (one instance I hope)
|
||||
// and getting the signals by
|
||||
|
||||
uint32 signalSize = descriptor->SignalSize();
|
||||
// If it is an array add the :xxx number at the end of the JPF name
|
||||
if (signalSize > 1) {
|
||||
|
||||
float *cal0 = NULL;
|
||||
float *cal1 = NULL;
|
||||
|
||||
if(descriptor->SignalTypeCode() == BTDInt32){
|
||||
// Read Calibration Factors
|
||||
cal0 = (float *)malloc(signalSize*sizeof(float));
|
||||
if(cal0 == NULL){
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: Failed allocating space cal0 for signal %s (%s)",
|
||||
ddbName.Buffer(), EPICSSignalName.Buffer());
|
||||
return False;
|
||||
}
|
||||
cal1 = (float *)malloc(signalSize*sizeof(float));
|
||||
if(cal1 == NULL){
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: Failed allocating space cal1 for signal %s (%s)",
|
||||
ddbName.Buffer(), EPICSSignalName.Buffer());
|
||||
free((void*&)cal0);
|
||||
return False;
|
||||
}
|
||||
|
||||
int dims = 1;
|
||||
int size[2] = {signalSize,1};
|
||||
if(!cdb.ReadFloatArray(cal0,size,dims,"Cal0")){
|
||||
CStaticAssertErrorCondition(FatalError,"EPICSSignalsTable::Initialize: No Cal0 has been specified for signal %s (%s). Assuming 0.0", ddbName.Buffer(), EPICSSignalName.Buffer());
|
||||
for(int i = 0; i < signalSize; i++){
|
||||
cal0[i] = 0.0;
|
||||
}
|
||||
}
|
||||
dims = 1;
|
||||
size[0] = signalSize;
|
||||
size[1] = 1;
|
||||
if(!cdb.ReadFloatArray(cal1,size,dims,"Cal1")){
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: No Cal1 has been specified for signal %s (%s). Assuming 1.0",
|
||||
ddbName.Buffer(), EPICSSignalName.Buffer());
|
||||
for(int i = 0; i < signalSize; i++){
|
||||
cal1[i] = 1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(int j = 0; j < signalSize; j++){
|
||||
FString newJpfName;
|
||||
newJpfName.Printf("%s:%03d",EPICSSignalName.Buffer(),j);
|
||||
EPICSSignal *newSignal = new EPICSSignal(ddbName, newJpfName, wordOffset, descriptor->SignalTypeCode());
|
||||
if(newSignal == NULL){
|
||||
CStaticAssertErrorCondition(FatalError,"EPICSSignalsTable::Initialize: Failed allocating space for signal %s (%s)", ddbName.Buffer(), EPICSSignalName.Buffer());
|
||||
if(cal0 != NULL)free((void*&)cal0);
|
||||
if(cal1 != NULL)free((void*&)cal1);
|
||||
return False;
|
||||
}
|
||||
|
||||
newSignal->SetCalibrations(cal0[j],cal1[j]);
|
||||
|
||||
ListInsert(newSignal,&AlphaSorter);
|
||||
// Increment offset
|
||||
wordOffset += descriptor->SignalTypeCode().Word32Size();
|
||||
}
|
||||
|
||||
if(cal0 != NULL)free((void*&)cal0);
|
||||
if(cal1 != NULL)free((void*&)cal1);
|
||||
|
||||
} //------------------------------------------------------------------- array values
|
||||
else {
|
||||
|
||||
EPICSSignal *newSignal = new EPICSSignal(ddbName, EPICSSignalName, wordOffset, descriptor->SignalTypeCode());
|
||||
if(newSignal == NULL){
|
||||
CStaticAssertErrorCondition(FatalError,"EPICSSignalsTable::Initialize: Failed allocating space for signal %s (%s)", ddbName.Buffer(), EPICSSignalName.Buffer());
|
||||
return False;
|
||||
}
|
||||
|
||||
// Set Calibrations
|
||||
float cal0 = 0.0;
|
||||
float cal1 = 1.0;
|
||||
cdb.ReadFloat(cal0,"Cal0",0.0);
|
||||
cdb.ReadFloat(cal1,"Cal1",1.0);
|
||||
newSignal->SetCalibrations(cal0, cal1);
|
||||
|
||||
ListInsert(newSignal,&AlphaSorter);
|
||||
// Increment offset
|
||||
wordOffset += descriptor->SignalTypeCode().Word32Size();
|
||||
|
||||
|
||||
pvExistReturn _exist = es->pvExistTest( EPICSSignalName.Buffer(), newSignal->DataBuffer(), newSignal->Type());
|
||||
if ( _exist.getStatus() == pverDoesNotExistHere ) {
|
||||
CStaticAssertErrorCondition(FatalError,
|
||||
"EPICSSignalsTable::Initialize: EPICS Signal %s cannot be located in EPICSLib",
|
||||
EPICSSignalName.Buffer());
|
||||
return False;
|
||||
}
|
||||
|
||||
} //------------------------------------------------------------------- scalar values
|
||||
|
||||
descriptor = descriptor->Next();
|
||||
cdb->MoveToFather();
|
||||
}
|
||||
|
||||
if((ListSize() == 0) ||(List() == NULL)) {
|
||||
CStaticAssertErrorCondition(FatalError,"EPICSSignalsTable::Initialize: No sighal added to the list");
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
} //--------------------------------------------------------------------------- ObjectLoadSetup
|
||||
|
||||
|
||||
int32 EPICSSignalsTable::FindOffsetAndInitSignalType(const FString &signalName, GCRTemplate<SignalInterface> signal, int32 nOfSamples) {
|
||||
|
||||
EPICSSignal *sig = (EPICSSignal *)List();
|
||||
for(int i = 0; i < ListSize(); i++){
|
||||
if(strcmp(sig->EPICSName(),signalName.Buffer()) == 0){
|
||||
signal->CopyData(sig->Type(), nOfSamples);
|
||||
return sig->Offset();
|
||||
}
|
||||
sig = (EPICSSignal *)sig->Next();
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
bool EPICSSignalsTable::ObjectDescription(StreamInterface &s,bool full,StreamInterface *err) {
|
||||
|
||||
EPICSSignal *sig = (EPICSSignal *)List();
|
||||
if(sig == NULL) return False;
|
||||
|
||||
s.Printf("Signals = {\n");
|
||||
for(int i = 0; i < ListSize(); i++){
|
||||
|
||||
FString bType;
|
||||
FString oType;
|
||||
|
||||
s.Printf("Signal%d = {\n",i);
|
||||
sig->Type().ConvertToString(bType);
|
||||
s.Printf(" Name = \"%s\" \n" , sig->EPICSName());
|
||||
s.Printf(" DataType = %s \n" , bType.Buffer());
|
||||
// s.Printf(" Cal0 = %f \n", sortedSignalVector[i]->Cal0());
|
||||
// s.Printf(" Cal1 = %f \n", sortedSignalVector[i]->Cal1());
|
||||
s.Printf("}\n");
|
||||
sig = (EPICSSignal *)sig->Next();
|
||||
}
|
||||
|
||||
s.Printf("}\n");
|
||||
return True;
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
**/
|
||||
#if !defined(_EPICS_SIGNALS_TABLE)
|
||||
#define _EPICS_SIGNALS_TABLE
|
||||
|
||||
#include "System.h"
|
||||
#include "LinkedListable.h"
|
||||
|
||||
#include "FString.h"
|
||||
#include "BasicTypes.h"
|
||||
|
||||
#include "GCRTemplate.h"
|
||||
|
||||
class DDBInterface;
|
||||
class SignalInterface;
|
||||
|
||||
|
||||
class EPICSSignal: public LinkedListable{
|
||||
|
||||
private:
|
||||
|
||||
/** SignalName in the DDB */
|
||||
FString ddbSignalName;
|
||||
// int ddbSignalSize;
|
||||
|
||||
/** SignalName in the JPF database */
|
||||
FString EPICSSignalName;
|
||||
// int epicsSignalSize;
|
||||
|
||||
|
||||
/** SignalType Descriptor DDB*/
|
||||
BasicTypeDescriptor typeDescriptor;
|
||||
|
||||
/** Singal type descriptor EPICS?!?!? */
|
||||
|
||||
|
||||
|
||||
/** Offset From Beginning of the buffer */
|
||||
uint32 dataOffset;
|
||||
|
||||
/** Cal 0. To be used by the GAP interface for integer signals */
|
||||
float cal0;
|
||||
|
||||
/** Cal 1. To be used by the GAP interface for integer signals */
|
||||
float cal1;
|
||||
|
||||
|
||||
int data_size;
|
||||
|
||||
/** just for the prototype we allocate a buffer where to store the previous value */
|
||||
char* data_buffer;
|
||||
|
||||
public:
|
||||
|
||||
/** Next */
|
||||
EPICSSignal *Next(){ return (EPICSSignal *)LinkedListable::Next();}
|
||||
|
||||
|
||||
/** Constructor */
|
||||
EPICSSignal():dataOffset(0){
|
||||
cal0 = 0.0;
|
||||
cal1 = 1.0;
|
||||
};
|
||||
|
||||
/** Constructor */
|
||||
EPICSSignal(FString &ddbName, FString &jpfName, uint32 offset, BasicTypeDescriptor typeDescriptor){
|
||||
Initialize(ddbName, jpfName, offset, typeDescriptor);
|
||||
};
|
||||
|
||||
/** Destructor */
|
||||
virtual ~EPICSSignal(){};
|
||||
|
||||
/** Initialize data information */
|
||||
bool Initialize(const FString &ddbName, const FString &jpfName, uint32 offset, BasicTypeDescriptor typeDescriptor);
|
||||
|
||||
/** Get copy of the Name*/
|
||||
const char * DDBName() const {return ddbSignalName.Buffer();}
|
||||
|
||||
/** Get copy of the Name*/
|
||||
const char * EPICSName() const {return EPICSSignalName.Buffer();}
|
||||
|
||||
/** Offset */
|
||||
uint32 Offset() const {return dataOffset;}
|
||||
|
||||
char* DataBuffer() {return data_buffer;}
|
||||
int DataSize() {return data_size;}
|
||||
|
||||
/** Type */
|
||||
BasicTypeDescriptor Type()const {return typeDescriptor;}
|
||||
|
||||
/** Set Calibration factors*/
|
||||
bool SetCalibrations(float cal0, float cal1){
|
||||
this->cal0 = cal0;
|
||||
this->cal1 = cal1;
|
||||
return True;
|
||||
}
|
||||
|
||||
/** Returns the cal0 factor */
|
||||
float Cal0(){return cal0;}
|
||||
|
||||
/** Returns the cal1 factor */
|
||||
float Cal1(){return cal1;}
|
||||
};
|
||||
|
||||
|
||||
|
||||
class EPICSSignalsTable: public LinkedListHolder{
|
||||
|
||||
public:
|
||||
|
||||
/** Constructor */
|
||||
EPICSSignalsTable () {};
|
||||
|
||||
/** Destructor */
|
||||
virtual ~EPICSSignalsTable () {};
|
||||
|
||||
/** Initialize the signal table */
|
||||
bool Initialize(const DDBInterface &interfacex, ConfigurationDataBase &info);
|
||||
|
||||
/** Find the offset for the signal */
|
||||
int32 FindOffsetAndInitSignalType(const FString &signalName, GCRTemplate<SignalInterface> signal, int32 nOfSamples);
|
||||
|
||||
/** Object Description. Saves information on a StreamInterface. The information
|
||||
is used by the DataCollectionGAM to process the GAP message LISTSIGNALS. */
|
||||
virtual bool ObjectDescription(StreamInterface &s,bool full=False,StreamInterface *err=NULL);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,84 @@
|
||||
Copyright (c) 1991-2007 UChicago Argonne LLC and The Regents of the
|
||||
University of California. All rights reserved.
|
||||
|
||||
EPICS BASE is distributed subject to the following license conditions:
|
||||
|
||||
SOFTWARE LICENSE AGREEMENT
|
||||
Software: EPICS BASE
|
||||
Versions: 3.13.7 and higher
|
||||
|
||||
1. The "Software", below, refers to EPICS BASE (in either source code, or
|
||||
binary form and accompanying documentation). Each licensee is
|
||||
addressed as "you" or "Licensee."
|
||||
|
||||
2. The copyright holders shown above and their third-party licensors
|
||||
hereby grant Licensee a royalty-free nonexclusive license, subject to
|
||||
the limitations stated herein and U.S. Government license rights.
|
||||
|
||||
3. You may modify and make a copy or copies of the Software for use
|
||||
within your organization, if you meet the following conditions:
|
||||
a. Copies in source code must include the copyright notice and this
|
||||
Software License Agreement.
|
||||
b. Copies in binary form must include the copyright notice and this
|
||||
Software License Agreement in the documentation and/or other
|
||||
materials provided with the copy.
|
||||
|
||||
4. You may modify a copy or copies of the Software or any portion of it,
|
||||
thus forming a work based on the Software, and distribute copies of
|
||||
such work outside your organization, if you meet all of the following
|
||||
conditions:
|
||||
a. Copies in source code must include the copyright notice and this
|
||||
Software License Agreement;
|
||||
b. Copies in binary form must include the copyright notice and this
|
||||
Software License Agreement in the documentation and/or other
|
||||
materials provided with the copy;
|
||||
c. Modified copies and works based on the Software must carry
|
||||
prominent notices stating that you changed specified portions of
|
||||
the Software.
|
||||
|
||||
5. Portions of the Software resulted from work developed under a U.S.
|
||||
Government contract and are subject to the following license: the
|
||||
Government is granted for itself and others acting on its behalf a
|
||||
paid-up, nonexclusive, irrevocable worldwide license in this computer
|
||||
software to reproduce, prepare derivative works, and perform publicly
|
||||
and display publicly.
|
||||
|
||||
6. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND. THE COPYRIGHT HOLDERS, THEIR THIRD PARTY LICENSORS, THE
|
||||
UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND THEIR
|
||||
EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT, (2) DO NOT ASSUME
|
||||
ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS,
|
||||
OR USEFULNESS OF THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF THE
|
||||
SOFTWARE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS, (4) DO NOT WARRANT
|
||||
THAT THE SOFTWARE WILL FUNCTION UNINTERRUPTED, THAT IT IS ERROR-FREE
|
||||
OR THAT ANY ERRORS WILL BE CORRECTED.
|
||||
|
||||
7. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT HOLDERS, THEIR
|
||||
THIRD PARTY LICENSORS, THE UNITED STATES, THE UNITED STATES DEPARTMENT
|
||||
OF ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT, INCIDENTAL,
|
||||
CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF ANY KIND OR NATURE,
|
||||
INCLUDING BUT NOT LIMITED TO LOSS OF PROFITS OR LOSS OF DATA, FOR ANY
|
||||
REASON WHATSOEVER, WHETHER SUCH LIABILITY IS ASSERTED ON THE BASIS OF
|
||||
CONTRACT, TORT (INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR
|
||||
OTHERWISE, EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE
|
||||
POSSIBILITY OF SUCH LOSS OR DAMAGES.
|
||||
|
||||
________________________________________________________________________
|
||||
|
||||
This software is in part copyrighted by the BERLINER SPEICHERRING
|
||||
GESELLSCHAFT FUER SYNCHROTRONSTRAHLUNG M.B.H. (BESSY), BERLIN, GERMANY.
|
||||
|
||||
In no event shall BESSY be liable to any party for direct, indirect,
|
||||
special, incidental, or consequential damages arising out of the use of
|
||||
this software, its documentation, or any derivatives thereof, even if
|
||||
BESSY has been advised of the possibility of such damage.
|
||||
|
||||
BESSY specifically disclaims any warranties, including, but not limited
|
||||
to, the implied warranties of merchantability, fitness for a particular
|
||||
purpose, and non-infringement. This software is provided on an "as is"
|
||||
basis, and BESSY has no obligation to provide maintenance, support,
|
||||
updates, enhancements, or modifications.
|
||||
________________________________________________________________________
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
EPICS_PATH=$(EPICS_BASE)
|
||||
|
||||
MARTEBasePath=/opt/MARTe
|
||||
|
||||
MAKEDEFAULTDIR=$(MARTEBasePath)/MakeDefaults
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET)
|
||||
|
||||
OBJSX=
|
||||
OBJS= $(TARGET)/exServer.o \
|
||||
$(TARGET)/exPV.o \
|
||||
$(TARGET)/exVectorPV.o \
|
||||
$(TARGET)/exScalarPV.o \
|
||||
$(TARGET)/exAsyncPV.o \
|
||||
$(TARGET)/exChannel.o
|
||||
|
||||
CFLAGS+= -I.
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level0
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level1
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level2
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level3
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level4
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level5
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level6
|
||||
|
||||
CFLAGS+= -I$(EPICS_PATH)/include
|
||||
CFLAGS+= -I$(EPICS_PATH)/include/os/Linux
|
||||
CFLAGS+= -I$(EPICS_PATH)/include/compiler/gcc
|
||||
CFLAGS+= -I$(EPICS_PATH)/src/ca/client/
|
||||
|
||||
LIBRARIES += -L$(EPICS_PATH)/lib/$(EPICS_HOST_ARCH)
|
||||
LIBRARIES += -lcas
|
||||
LIBRARIES += -lca
|
||||
LIBRARIES += -lCom
|
||||
LIBRARIES += -lgdd
|
||||
|
||||
all: $(OBJS) \
|
||||
$(TARGET)/EPICSHandler$(DLLEXT)
|
||||
echo $(OBJS)
|
||||
|
||||
include depends.$(TARGET)
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET)
|
||||
@@ -0,0 +1,67 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
EPICS_PATH=$(EPICS_BASE)
|
||||
|
||||
MARTEBasePath=/opt/MARTe
|
||||
|
||||
MAKEDEFAULTDIR=$(MARTEBasePath)/MakeDefaults
|
||||
|
||||
OBJSX=
|
||||
OBJS= $(TARGET)/exServer.o \
|
||||
$(TARGET)/exPV.o \
|
||||
$(TARGET)/exVectorPV.o \
|
||||
$(TARGET)/exScalarPV.o \
|
||||
$(TARGET)/exAsyncPV.o \
|
||||
$(TARGET)/exChannel.o
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET)
|
||||
|
||||
CFLAGS+= -I.
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level0
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level1
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level2
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level3
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level4
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level5
|
||||
CFLAGS+= -I$(MARTEBasePath)/BaseLib2/Level6
|
||||
|
||||
CFLAGS+= -I$(EPICS_PATH)/include
|
||||
CFLAGS+= -I$(EPICS_PATH)/include/os/Linux
|
||||
CFLAGS+= -I$(EPICS_PATH)/include/compiler/gcc
|
||||
CFLAGS+= -I$(EPICS_PATH)/src/base-3.15.5/ca/client/
|
||||
|
||||
LIBRARIES += -L$(EPICS_PATH)/lib/$(EPICS_HOST_ARCH)
|
||||
LIBRARIES += -lcas
|
||||
LIBRARIES += -lca
|
||||
LIBRARIES += -lCom
|
||||
LIBRARIES += -lgdd
|
||||
|
||||
all: $(OBJS) \
|
||||
$(TARGET)/EPICSHandler$(DLLEXT)
|
||||
echo $(OBJS)
|
||||
|
||||
include depends.$(TARGET)
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET)
|
||||
@@ -0,0 +1,31 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
|
||||
TARGET=linux
|
||||
|
||||
include Makefile.inc
|
||||
|
||||
LIBRARIES += -L$(MARTEBasePath)/BaseLib2/$(TARGET) -lBaseLib2
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
|
||||
TARGET=linux
|
||||
|
||||
include Makefile.inc
|
||||
|
||||
LIBRARIES += -L../../BaseLib2/$(TARGET) -lBaseLib2
|
||||
|
||||
@@ -0,0 +1,852 @@
|
||||
linux/EPICSHandler.o: EPICSHandler.cpp EPICSHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpRealm.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpStream.h \
|
||||
/opt/MARTe/BaseLib2/Level3/StreamConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level0/HRT.h /opt/MARTe/BaseLib2/Level0/CountSem.h \
|
||||
exServer.h /opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/codac/epics/base/src/ca/client/nciu.h \
|
||||
/opt/codac/epics/base/include/tsDLList.h \
|
||||
/opt/codac/epics/base/include/tsFreeList.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/src/ca/client/caProto.h \
|
||||
/opt/codac/epics/base/src/ca/client/cacIO.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/caProto.h \
|
||||
/opt/codac/epics/base/include/epicsVersion.h \
|
||||
/opt/codac/epics/base/include/epicsRelease.h \
|
||||
/opt/codac/epics/base/include/fdmgr.h \
|
||||
/opt/codac/epics/base/include/bucketLib.h \
|
||||
/opt/codac/epics/base/include/fdManager.h \
|
||||
/opt/codac/epics/base/include/tsDLList.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/gddApps.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/codac/epics/base/include/menuAlarmSevr.h \
|
||||
/opt/codac/epics/base/include/menuAlarmStat.h \
|
||||
/opt/codac/epics/base/include/menuScan.h \
|
||||
/opt/codac/epics/base/include/menuYesNo.h
|
||||
linux/EPICSpvTable.o: EPICSpvTable.cpp EPICSHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpRealm.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpStream.h \
|
||||
/opt/MARTe/BaseLib2/Level3/StreamConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level0/HRT.h /opt/MARTe/BaseLib2/Level0/CountSem.h \
|
||||
exServer.h /opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h EPICSSignalsTable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GlobalObjectDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterfaceDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBSignalDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level5/SignalInterface.h
|
||||
linux/EPICSSignalsTable.o: EPICSSignalsTable.cpp EPICSSignalsTable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/HRT.h /opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h EPICSHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpRealm.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpStream.h \
|
||||
/opt/MARTe/BaseLib2/Level3/StreamConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CountSem.h exServer.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GlobalObjectDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterfaceDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBSignalDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level5/SignalInterface.h
|
||||
linux/exAsyncPV.o: exAsyncPV.cpp exServer.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h
|
||||
linux/exChannel.o: exChannel.cpp exServer.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h
|
||||
linux/exPV.o: exPV.cpp exServer.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/codac/epics/base/include/gddApps.h \
|
||||
/opt/codac/epics/base/include/dbMapper.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/db_access.h \
|
||||
/opt/codac/epics/base/include/cadef.h \
|
||||
/opt/codac/epics/base/include/caerr.h \
|
||||
/opt/codac/epics/base/include/caeventmask.h
|
||||
linux/exScalarPV.o: exScalarPV.cpp /opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/shareLib.h exServer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/codac/epics/base/include/gddApps.h
|
||||
linux/exServer.o: exServer.cpp exServer.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h
|
||||
linux/exVectorPV.o: exVectorPV.cpp exServer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/codac/epics/base/include/gddApps.h
|
||||
@@ -0,0 +1,852 @@
|
||||
EPICSHandler.o: EPICSHandler.cpp EPICSHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpRealm.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpStream.h \
|
||||
/opt/MARTe/BaseLib2/Level3/StreamConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level0/HRT.h /opt/MARTe/BaseLib2/Level0/CountSem.h \
|
||||
exServer.h /opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/codac/epics/base/src/ca/client/nciu.h \
|
||||
/opt/codac/epics/base/include/tsDLList.h \
|
||||
/opt/codac/epics/base/include/tsFreeList.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/src/ca/client/caProto.h \
|
||||
/opt/codac/epics/base/src/ca/client/cacIO.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/caProto.h \
|
||||
/opt/codac/epics/base/include/epicsVersion.h \
|
||||
/opt/codac/epics/base/include/epicsRelease.h \
|
||||
/opt/codac/epics/base/include/fdmgr.h \
|
||||
/opt/codac/epics/base/include/bucketLib.h \
|
||||
/opt/codac/epics/base/include/fdManager.h \
|
||||
/opt/codac/epics/base/include/tsDLList.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/gddApps.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/codac/epics/base/include/menuAlarmSevr.h \
|
||||
/opt/codac/epics/base/include/menuAlarmStat.h \
|
||||
/opt/codac/epics/base/include/menuScan.h \
|
||||
/opt/codac/epics/base/include/menuYesNo.h
|
||||
EPICSpvTable.o: EPICSpvTable.cpp EPICSHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpRealm.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpStream.h \
|
||||
/opt/MARTe/BaseLib2/Level3/StreamConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level0/HRT.h /opt/MARTe/BaseLib2/Level0/CountSem.h \
|
||||
exServer.h /opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h EPICSSignalsTable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GlobalObjectDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterfaceDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBSignalDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level5/SignalInterface.h
|
||||
EPICSSignalsTable.o: EPICSSignalsTable.cpp EPICSSignalsTable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/HRT.h /opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h EPICSHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpRealm.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level4/HttpStream.h \
|
||||
/opt/MARTe/BaseLib2/Level3/StreamConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CountSem.h exServer.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GlobalObjectDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBInterfaceDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level5/DDBSignalDescriptor.h \
|
||||
/opt/MARTe/BaseLib2/Level5/SignalInterface.h
|
||||
exAsyncPV.o: exAsyncPV.cpp exServer.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h
|
||||
exChannel.o: exChannel.cpp exServer.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h
|
||||
exPV.o: exPV.cpp exServer.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/codac/epics/base/include/gddApps.h \
|
||||
/opt/codac/epics/base/include/dbMapper.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/db_access.h \
|
||||
/opt/codac/epics/base/include/cadef.h \
|
||||
/opt/codac/epics/base/include/caerr.h \
|
||||
/opt/codac/epics/base/include/caeventmask.h
|
||||
exScalarPV.o: exScalarPV.cpp /opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/shareLib.h exServer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/codac/epics/base/include/gddApps.h
|
||||
exServer.o: exServer.cpp exServer.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h
|
||||
exVectorPV.o: exVectorPV.cpp exServer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/codac/epics/base/include/gddAppFuncTable.h \
|
||||
/opt/codac/epics/base/include/gdd.h \
|
||||
/opt/codac/epics/base/include/gddNewDel.h \
|
||||
/opt/codac/epics/base/include/epicsMutex.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/compilerDependencies.h \
|
||||
/opt/codac/epics/base/include/compiler/gcc/compilerSpecific.h \
|
||||
/opt/codac/epics/base/include/epicsGuard.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdMutex.h \
|
||||
/opt/codac/epics/base/include/epicsThread.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdEvent.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdThread.h \
|
||||
/opt/codac/epics/base/include/shareLib.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/epicsEvent.h \
|
||||
/opt/codac/epics/base/include/gddUtils.h \
|
||||
/opt/codac/epics/base/include/aitTypes.h \
|
||||
/opt/codac/epics/base/include/aitHelpers.h \
|
||||
/opt/codac/epics/base/include/gddErrorCodes.h \
|
||||
/opt/codac/epics/base/include/gddUtilsI.h \
|
||||
/opt/codac/epics/base/include/aitConvert.h \
|
||||
/opt/codac/epics/base/include/osiSock.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdSock.h \
|
||||
/opt/codac/epics/base/include/ellLib.h \
|
||||
/opt/codac/epics/base/include/gddEnumStringTable.h \
|
||||
/opt/codac/epics/base/include/gddArray.h \
|
||||
/opt/codac/epics/base/include/gddScalar.h \
|
||||
/opt/codac/epics/base/include/gddContainer.h \
|
||||
/opt/codac/epics/base/include/gddI.h \
|
||||
/opt/codac/epics/base/include/gddArrayI.h \
|
||||
/opt/codac/epics/base/include/gddScalarI.h \
|
||||
/opt/codac/epics/base/include/gddContainerI.h \
|
||||
/opt/codac/epics/base/include/gddAppTable.h \
|
||||
/opt/codac/epics/base/include/errMdef.h \
|
||||
/opt/codac/epics/base/include/errlog.h \
|
||||
/opt/codac/epics/base/include/smartGDDPointer.h \
|
||||
/opt/codac/epics/base/include/epicsTimer.h \
|
||||
/opt/codac/epics/base/include/epicsTime.h \
|
||||
/opt/codac/epics/base/include/epicsTypes.h \
|
||||
/opt/codac/epics/base/include/os/Linux/osdTime.h \
|
||||
/opt/codac/epics/base/include/casdef.h \
|
||||
/opt/codac/epics/base/include/alarm.h \
|
||||
/opt/codac/epics/base/include/caNetAddr.h \
|
||||
/opt/codac/epics/base/include/casEventMask.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsSLList.h \
|
||||
/opt/codac/epics/base/include/epicsString.h \
|
||||
/opt/codac/epics/base/include/epicsAssert.h \
|
||||
/opt/codac/epics/base/include/resourceLib.h \
|
||||
/opt/codac/epics/base/include/tsMinMax.h \
|
||||
/opt/codac/epics/base/include/gddApps.h
|
||||
@@ -0,0 +1,229 @@
|
||||
/*************************************************************************\
|
||||
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
* National Laboratory.
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE Versions 3.13.7
|
||||
* and higher are distributed subject to a Software License Agreement found
|
||||
* in file LICENSE-EPICS that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
//
|
||||
// Example EPICS CA server
|
||||
// (asynchrronous process variable)
|
||||
//
|
||||
|
||||
#include "exServer.h"
|
||||
|
||||
exAsyncPV::exAsyncPV ( exServer & cas, pvInfo & setup,
|
||||
bool preCreateFlag, bool scanOnIn,
|
||||
double asyncDelayIn ) :
|
||||
exScalarPV ( cas, setup, preCreateFlag, scanOnIn ),
|
||||
asyncDelay ( asyncDelayIn ),
|
||||
simultAsychReadIOCount ( 0u ),
|
||||
simultAsychWriteIOCount ( 0u )
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncPV::read()
|
||||
//
|
||||
caStatus exAsyncPV::read (const casCtx &ctx, gdd &valueIn)
|
||||
{
|
||||
exAsyncReadIO *pIO;
|
||||
|
||||
if ( this->simultAsychReadIOCount >= this->cas.maxSimultAsyncIO () ) {
|
||||
return S_casApp_postponeAsyncIO;
|
||||
}
|
||||
|
||||
pIO = new exAsyncReadIO ( this->cas, ctx,
|
||||
*this, valueIn, this->asyncDelay );
|
||||
if ( ! pIO ) {
|
||||
if ( this->simultAsychReadIOCount > 0 ) {
|
||||
return S_casApp_postponeAsyncIO;
|
||||
}
|
||||
else {
|
||||
return S_casApp_noMemory;
|
||||
}
|
||||
}
|
||||
this->simultAsychReadIOCount++;
|
||||
return S_casApp_asyncCompletion;
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncPV::writeNotify()
|
||||
//
|
||||
caStatus exAsyncPV::writeNotify ( const casCtx &ctx, const gdd &valueIn )
|
||||
{
|
||||
if ( this->simultAsychWriteIOCount >= this->cas.maxSimultAsyncIO() ) {
|
||||
return S_casApp_postponeAsyncIO;
|
||||
}
|
||||
|
||||
exAsyncWriteIO * pIO = new
|
||||
exAsyncWriteIO ( this->cas, ctx, *this,
|
||||
valueIn, this->asyncDelay );
|
||||
if ( ! pIO ) {
|
||||
if ( this->simultAsychReadIOCount > 0 ) {
|
||||
return S_casApp_postponeAsyncIO;
|
||||
}
|
||||
else {
|
||||
return S_casApp_noMemory;
|
||||
}
|
||||
}
|
||||
this->simultAsychWriteIOCount++;
|
||||
return S_casApp_asyncCompletion;
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncPV::write()
|
||||
//
|
||||
caStatus exAsyncPV::write ( const casCtx &ctx, const gdd &valueIn )
|
||||
{
|
||||
// implement the discard intermediate values, but last value
|
||||
// sent always applied behavior that IOCs provide excepting
|
||||
// that we will alow N requests to pend instead of a limit
|
||||
// of only one imposed in the IOC
|
||||
if ( this->simultAsychWriteIOCount >= this->cas.maxSimultAsyncIO() ) {
|
||||
pStandbyValue.set ( & valueIn );
|
||||
return S_casApp_success;
|
||||
}
|
||||
|
||||
exAsyncWriteIO * pIO = new
|
||||
exAsyncWriteIO ( this->cas, ctx, *this,
|
||||
valueIn, this->asyncDelay );
|
||||
if ( ! pIO ) {
|
||||
pStandbyValue.set ( & valueIn );
|
||||
return S_casApp_success;
|
||||
}
|
||||
this->simultAsychWriteIOCount++;
|
||||
return S_casApp_asyncCompletion;
|
||||
}
|
||||
|
||||
// Implementing a specialized update for exAsyncPV
|
||||
// allows standby value to update when we update
|
||||
// the PV from an asynchronous write timer expiration
|
||||
// which is a better time compared to removeIO below
|
||||
// which, if used, gets the reads and writes out of
|
||||
// order. This type of reordering can cause the
|
||||
// regression tests to fail.
|
||||
caStatus exAsyncPV :: updateFromAsyncWrite ( const gdd & src )
|
||||
{
|
||||
caStatus stat = this->update ( src , true, true);
|
||||
if ( this->simultAsychWriteIOCount <=1 &&
|
||||
pStandbyValue.valid () ) {
|
||||
//printf("updateFromAsyncWrite: write standby\n");
|
||||
stat = this->update ( *this->pStandbyValue, true, true );
|
||||
this->pStandbyValue.set ( 0 );
|
||||
}
|
||||
return stat;
|
||||
}
|
||||
|
||||
void exAsyncPV::removeReadIO ()
|
||||
{
|
||||
if ( this->simultAsychReadIOCount > 0u ) {
|
||||
this->simultAsychReadIOCount--;
|
||||
}
|
||||
else {
|
||||
fprintf ( stderr, "inconsistent simultAsychReadIOCount?\n" );
|
||||
}
|
||||
}
|
||||
|
||||
void exAsyncPV::removeWriteIO ()
|
||||
{
|
||||
if ( this->simultAsychWriteIOCount > 0u ) {
|
||||
this->simultAsychWriteIOCount--;
|
||||
if ( this->simultAsychWriteIOCount == 0 &&
|
||||
pStandbyValue.valid () ) {
|
||||
//printf("removeIO: write standby\n");
|
||||
this->update ( *this->pStandbyValue, true, true );
|
||||
this->pStandbyValue.set ( 0 );
|
||||
}
|
||||
}
|
||||
else {
|
||||
fprintf ( stderr, "inconsistent simultAsychWriteIOCount?\n" );
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncWriteIO::exAsyncWriteIO()
|
||||
//
|
||||
exAsyncWriteIO::exAsyncWriteIO ( exServer & cas,
|
||||
const casCtx & ctxIn, exAsyncPV & pvIn,
|
||||
const gdd & valueIn, double asyncDelay ) :
|
||||
casAsyncWriteIO ( ctxIn ), pv ( pvIn ),
|
||||
timer ( cas.createTimer () ), pValue(valueIn)
|
||||
{
|
||||
this->timer.start ( *this, asyncDelay );
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncWriteIO::~exAsyncWriteIO()
|
||||
//
|
||||
exAsyncWriteIO::~exAsyncWriteIO()
|
||||
{
|
||||
this->timer.destroy ();
|
||||
// if the timer hasnt expired, and the value
|
||||
// hasnt been written then force it to happen
|
||||
// now so that regression testing works
|
||||
if ( this->pValue.valid () ) {
|
||||
this->pv.updateFromAsyncWrite ( *this->pValue );
|
||||
}
|
||||
this->pv.removeWriteIO();
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncWriteIO::expire()
|
||||
// (a virtual function that runs when the base timer expires)
|
||||
//
|
||||
epicsTimerNotify::expireStatus exAsyncWriteIO::
|
||||
expire ( const epicsTime & /* currentTime */ )
|
||||
{
|
||||
assert ( this->pValue.valid () );
|
||||
caStatus status = this->pv.updateFromAsyncWrite ( *this->pValue );
|
||||
this->pValue.set ( 0 );
|
||||
this->postIOCompletion ( status );
|
||||
return noRestart;
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncReadIO::exAsyncReadIO()
|
||||
//
|
||||
exAsyncReadIO::exAsyncReadIO ( exServer & cas, const casCtx & ctxIn,
|
||||
exAsyncPV & pvIn, gdd & protoIn,
|
||||
double asyncDelay ) :
|
||||
casAsyncReadIO ( ctxIn ), pv ( pvIn ),
|
||||
timer ( cas.createTimer() ), pProto ( protoIn )
|
||||
{
|
||||
this->timer.start ( *this, asyncDelay );
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncReadIO::~exAsyncReadIO()
|
||||
//
|
||||
exAsyncReadIO::~exAsyncReadIO()
|
||||
{
|
||||
this->pv.removeReadIO ();
|
||||
this->timer.destroy ();
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncReadIO::expire()
|
||||
// (a virtual function that runs when the base timer expires)
|
||||
//
|
||||
epicsTimerNotify::expireStatus
|
||||
exAsyncReadIO::expire ( const epicsTime & /* currentTime */ )
|
||||
{
|
||||
//
|
||||
// map between the prototype in and the
|
||||
// current value
|
||||
//
|
||||
caStatus status = this->pv.exPV::readNoCtx ( this->pProto );
|
||||
|
||||
//
|
||||
// post IO completion
|
||||
//
|
||||
this->postIOCompletion ( status, *this->pProto );
|
||||
|
||||
return noRestart;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/*************************************************************************\
|
||||
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
* National Laboratory.
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE Versions 3.13.7
|
||||
* and higher are distributed subject to a Software License Agreement found
|
||||
* in file LICENSE-EPICS that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
//
|
||||
// Example EPICS CA server
|
||||
//
|
||||
|
||||
#include "exServer.h"
|
||||
|
||||
//
|
||||
// exChannel::setOwner ()
|
||||
//
|
||||
void exChannel::setOwner(const char * const /* pUserName */,
|
||||
const char * const /* pHostName */)
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// exChannel::readAccess ()
|
||||
//
|
||||
bool exChannel::readAccess () const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// exChannel::writeAccess ()
|
||||
//
|
||||
bool exChannel::writeAccess () const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
534
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSLib/exPV.cpp
Normal file
534
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSLib/exPV.cpp
Normal file
@@ -0,0 +1,534 @@
|
||||
/*************************************************************************\
|
||||
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
* National Laboratory.
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE Versions 3.13.7
|
||||
* and higher are distributed subject to a Software License Agreement found
|
||||
* in file LICENSE-EPICS that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
//
|
||||
// Example EPICS CA server
|
||||
//
|
||||
#include "exServer.h"
|
||||
|
||||
#include "gddApps.h"
|
||||
#include "dbMapper.h"
|
||||
|
||||
//
|
||||
// static data for exPV
|
||||
//
|
||||
char exPV::hasBeenInitialized = 0;
|
||||
gddAppFuncTable<exPV> exPV::ft;
|
||||
epicsTime exPV::currentTime;
|
||||
|
||||
//
|
||||
// special gddDestructor guarantees same form of new and delete
|
||||
//
|
||||
class exFixedStringDestructor: public gddDestructor {
|
||||
virtual void run (void *);
|
||||
};
|
||||
|
||||
//
|
||||
// exPV::exPV()
|
||||
//
|
||||
exPV::exPV ( exServer & casIn, pvInfo & setup,
|
||||
bool preCreateFlag, bool scanOnIn ) :
|
||||
cas ( casIn ),
|
||||
timer ( cas.createTimer() ),
|
||||
info ( setup ),
|
||||
interest ( false ),
|
||||
preCreate ( preCreateFlag ),
|
||||
scanOn ( scanOnIn )
|
||||
{
|
||||
//
|
||||
// no dataless PV allowed
|
||||
//
|
||||
assert (this->info.getElementCount()>=1u);
|
||||
|
||||
//
|
||||
// start a very slow background scan
|
||||
// (we will speed this up to the normal rate when
|
||||
// someone is watching the PV)
|
||||
//
|
||||
if ( this->scanOn && this->info.getScanPeriod () > 0.0 ) {
|
||||
this->timer.start ( *this, this->getScanPeriod() );
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::~exPV()
|
||||
//
|
||||
exPV::~exPV()
|
||||
{
|
||||
this->timer.destroy ();
|
||||
this->info.unlinkPV();
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::destroy()
|
||||
//
|
||||
// this is replaced by a noop since we are
|
||||
// pre-creating most of the PVs during init in this simple server
|
||||
//
|
||||
void exPV::destroy()
|
||||
{
|
||||
if ( ! this->preCreate ) {
|
||||
delete this;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Events that can be posted are:
|
||||
* #define DBE_VALUE (1<<0)
|
||||
* #define DBE_ARCHIVE (1<<1)
|
||||
* #define DBE_LOG DBE_ARCHIVE
|
||||
* #define DBE_ALARM (1<<2)
|
||||
* #define DBE_PROPERTY (1<<3)
|
||||
* see /src/db/dbEvent.c
|
||||
*/
|
||||
//
|
||||
// exPV::update()
|
||||
//
|
||||
caStatus exPV::update ( const gdd & valueIn, bool processEvent, bool updateValue )
|
||||
{
|
||||
# if DEBUG
|
||||
printf("Setting %s too:\n", this->info.getName().string());
|
||||
valueIn.dump();
|
||||
# endif
|
||||
|
||||
aitInt16 sta = 0, sev = 0;
|
||||
if ( this->pValue.valid() ) // check the validity
|
||||
this->pValue->getStatSevr(sta, sev); // fetch previous values
|
||||
|
||||
if ( updateValue ) {
|
||||
//----------------------------------------------------------------------------- updateValue
|
||||
caStatus status = this->updateValue ( valueIn );
|
||||
if ( status || ( ! this->pValue.valid() ) ) {
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( !processEvent || !(this->pValue.valid()) )
|
||||
return S_casApp_success;
|
||||
//----------------------------------------------------------------------------- processEvent
|
||||
|
||||
caServer * pCAS = this->getCAS();
|
||||
if ( this->interest == true && pCAS != NULL ) {
|
||||
casEventMask monitor_mask;
|
||||
|
||||
//monitor from aiRecord.c
|
||||
aiRecord_monitor:
|
||||
|
||||
|
||||
// alarms
|
||||
aitInt16 nsta, nsev;
|
||||
this->pValue->getStatSevr(nsta, nsev); // fetch previous values
|
||||
if ( (nsta != sta) || (nsev != sev) )
|
||||
monitor_mask |= pCAS->alarmEventMask();
|
||||
|
||||
if ( (this->pValue)->isScalar() ) {
|
||||
double delta;
|
||||
double value;
|
||||
this->pValue->get(value);
|
||||
|
||||
// monitoring
|
||||
delta = this->info.mlst - value;
|
||||
if (delta < 0.0) delta = - delta;
|
||||
if ( delta > this->info.mdel) {
|
||||
monitor_mask |= pCAS->valueEventMask();
|
||||
this->info.mlst = value;
|
||||
}
|
||||
|
||||
//archiving
|
||||
delta = this->info.alst - value;
|
||||
if (delta < 0.0) delta = - delta;
|
||||
if ( delta > this->info.adel ) {
|
||||
monitor_mask |= pCAS->logEventMask();
|
||||
this->info.alst = value;
|
||||
}
|
||||
}
|
||||
else
|
||||
monitor_mask |= pCAS->valueEventMask();
|
||||
|
||||
if ( monitor_mask.eventsSelected() )
|
||||
this->postEvent ( monitor_mask, *this->pValue );
|
||||
}
|
||||
|
||||
return S_casApp_success;
|
||||
}
|
||||
|
||||
//
|
||||
// exScanTimer::expire ()
|
||||
//
|
||||
epicsTimerNotify::expireStatus
|
||||
exPV::expire ( const epicsTime & /*currentTime*/ ) // X aCC 361
|
||||
{
|
||||
this->scan();
|
||||
if ( this->scanOn && this->getScanPeriod() > 0.0 ) {
|
||||
return expireStatus ( restart, this->getScanPeriod() );
|
||||
}
|
||||
else {
|
||||
return noRestart;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::bestExternalType()
|
||||
//
|
||||
aitEnum exPV::bestExternalType () const
|
||||
{
|
||||
return this->info.getType ();
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::interestRegister()
|
||||
//
|
||||
caStatus exPV::interestRegister ()
|
||||
{
|
||||
if ( ! this->getCAS() ) {
|
||||
return S_casApp_success;
|
||||
}
|
||||
|
||||
this->interest = true;
|
||||
if ( this->scanOn && this->getScanPeriod() > 0.0 &&
|
||||
this->getScanPeriod() < this->timer.getExpireDelay() ) {
|
||||
this->timer.start ( *this, this->getScanPeriod() );
|
||||
}
|
||||
|
||||
return S_casApp_success;
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::interestDelete()
|
||||
//
|
||||
void exPV::interestDelete()
|
||||
{
|
||||
this->interest = false;
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::show()
|
||||
//
|
||||
void exPV::show ( unsigned level ) const
|
||||
{
|
||||
if (level>1u) {
|
||||
if ( this->pValue.valid () ) {
|
||||
printf ( "exPV: cond=%d\n", this->pValue->getStat () );
|
||||
printf ( "exPV: sevr=%d\n", this->pValue->getSevr () );
|
||||
printf ( "exPV: value=%f\n", static_cast < double > ( * this->pValue ) );
|
||||
}
|
||||
printf ( "exPV: interest=%d\n", this->interest );
|
||||
this->timer.show ( level - 1u );
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::initFT()
|
||||
//
|
||||
void exPV::initFT ()
|
||||
{
|
||||
if ( exPV::hasBeenInitialized ) {
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// time stamp, status, and severity are extracted from the
|
||||
// GDD associated with the "value" application type.
|
||||
//
|
||||
|
||||
// questo è un limite visto dal punto di vista del RECORD
|
||||
// perche dovremmo associare un sacco di apptype che non esistono...
|
||||
|
||||
// perciò dovremmo abbandonare questa interfaccia per passare ai record
|
||||
|
||||
exPV::ft.installReadFunc ("value", &exPV::getValue);
|
||||
exPV::ft.installReadFunc ("precision", &exPV::getPrecision);
|
||||
exPV::ft.installReadFunc ("units", &exPV::getUnits);
|
||||
exPV::ft.installReadFunc ("enums", &exPV::getEnums);
|
||||
|
||||
exPV::ft.installReadFunc ("graphicHigh", &exPV::getHighLimit);
|
||||
exPV::ft.installReadFunc ("graphicLow", &exPV::getLowLimit);
|
||||
exPV::ft.installReadFunc ("controlHigh", &exPV::getHighLimit);
|
||||
exPV::ft.installReadFunc ("controlLow", &exPV::getLowLimit);
|
||||
exPV::ft.installReadFunc ("alarmHigh", &exPV::getHighAlarm);
|
||||
exPV::ft.installReadFunc ("alarmLow", &exPV::getLowAlarm);
|
||||
exPV::ft.installReadFunc ("alarmHighWarning", &exPV::getHighWarning);
|
||||
exPV::ft.installReadFunc ("alarmLowWarning", &exPV::getLowWarning);
|
||||
|
||||
// possiamo registrare anche le altre funzioni che si trovano nel mapper..
|
||||
// gdd/gddAppTale.h, per il momento ci interessano "ackt" e "acks" per la simulazione degli allarmi
|
||||
exPV::ft.installReadFunc ("ackt", &exPV::getAckt);
|
||||
exPV::ft.installReadFunc ("acks", &exPV::getAcks);
|
||||
// exPV::ft.installReadFunc ("timeStamp", &exPV::getTimeStamp);
|
||||
|
||||
exPV::hasBeenInitialized = 1;
|
||||
}
|
||||
|
||||
|
||||
caStatus exPV::getAckt (gdd & prec) {
|
||||
prec.put(info.ackt);
|
||||
return S_cas_success;
|
||||
}
|
||||
caStatus exPV::getAcks (gdd & prec) {
|
||||
|
||||
// printf("exPV::getAcks\n");
|
||||
|
||||
prec.put(info.acks);
|
||||
return S_cas_success;
|
||||
}
|
||||
|
||||
/*caStatus exPV::getTimeStamp (gdd & prec) {
|
||||
prec.put(info.timestamp);
|
||||
return S_cas_success;
|
||||
}
|
||||
*/
|
||||
//
|
||||
// exPV::getPrecision()
|
||||
//
|
||||
caStatus exPV::getPrecision ( gdd & prec )
|
||||
{
|
||||
prec.put(info.prec);
|
||||
return S_cas_success;
|
||||
}
|
||||
|
||||
// exPV::getHighLimit()
|
||||
caStatus exPV::getHighLimit ( gdd & value )
|
||||
{
|
||||
value.put(info.getHopr());
|
||||
return S_cas_success;
|
||||
}
|
||||
// exPV::getLowLimit()
|
||||
caStatus exPV::getLowLimit ( gdd & value )
|
||||
{
|
||||
value.put(info.getLopr());
|
||||
return S_cas_success;
|
||||
}
|
||||
|
||||
// high alarm -> HIHI field
|
||||
caStatus exPV::getHighAlarm ( gdd & value )
|
||||
{
|
||||
value.put(info.getHihi());
|
||||
return S_cas_success;
|
||||
}
|
||||
// low alarm -> LOLO field
|
||||
caStatus exPV::getLowAlarm ( gdd & value )
|
||||
{
|
||||
value.put(info.getLolo());
|
||||
return S_cas_success;
|
||||
}
|
||||
|
||||
// high warning alarm -> HIGH field
|
||||
caStatus exPV::getHighWarning ( gdd & value )
|
||||
{
|
||||
value.put(info.getHigh());
|
||||
return S_cas_success;
|
||||
}
|
||||
// low warning alarm -> LOW field
|
||||
caStatus exPV::getLowWarning ( gdd & value )
|
||||
{
|
||||
value.put(info.getLow());
|
||||
return S_cas_success;
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::getUnits()
|
||||
//
|
||||
caStatus exPV::getUnits( gdd & units )
|
||||
{
|
||||
// aitString str("furlongs", aitStrRefConstImortal);
|
||||
// units.put(str);
|
||||
units.put(info.getUnits());
|
||||
return S_cas_success;
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::getEnums()
|
||||
//
|
||||
// returns the eneumerated state strings
|
||||
// for a discrete channel
|
||||
//
|
||||
// The PVs in this example are purely analog,
|
||||
// and therefore this isnt appropriate in an
|
||||
// analog context ...
|
||||
//
|
||||
caStatus exPV::getEnums ( gdd & enumsIn )
|
||||
{
|
||||
if ( this->info.getType () == aitEnumEnum16 ) {
|
||||
static const unsigned nStr = 2;
|
||||
aitFixedString *str;
|
||||
exFixedStringDestructor *pDes;
|
||||
|
||||
str = new aitFixedString[nStr];
|
||||
if (!str) {
|
||||
return S_casApp_noMemory;
|
||||
}
|
||||
|
||||
pDes = new exFixedStringDestructor;
|
||||
if (!pDes) {
|
||||
delete [] str;
|
||||
return S_casApp_noMemory;
|
||||
}
|
||||
|
||||
strncpy (str[0].fixed_string, "off",
|
||||
sizeof(str[0].fixed_string));
|
||||
strncpy (str[1].fixed_string, "on",
|
||||
sizeof(str[1].fixed_string));
|
||||
|
||||
enumsIn.setDimension(1);
|
||||
enumsIn.setBound (0,0,nStr);
|
||||
enumsIn.putRef (str, pDes);
|
||||
|
||||
return S_cas_success;
|
||||
}
|
||||
|
||||
return S_cas_success;
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::getValue()
|
||||
//
|
||||
caStatus exPV::getValue ( gdd & value )
|
||||
{
|
||||
caStatus status;
|
||||
|
||||
if ( this->pValue.valid () ) {
|
||||
gddStatus gdds;
|
||||
|
||||
gdds = gddApplicationTypeTable::
|
||||
app_table.smartCopy ( &value, & (*this->pValue) );
|
||||
if (gdds) {
|
||||
status = S_cas_noConvert;
|
||||
}
|
||||
else {
|
||||
status = S_cas_success;
|
||||
}
|
||||
}
|
||||
else {
|
||||
status = S_casApp_undefined;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::write()
|
||||
// (synchronous default)
|
||||
//
|
||||
|
||||
// CALLED by CA mentre update e chiamata anche dal thread automatico di EPICS
|
||||
caStatus exPV::write ( const casCtx &, const gdd & valueIn )
|
||||
{
|
||||
/* apptype checking is required : array type do not have
|
||||
* alarms (at least I have to check also this).
|
||||
*
|
||||
* exPV::write -> exPV::update -> exPV::updateValue (exScalarPV or exVectorPV)
|
||||
* meglio qui..
|
||||
* ca_array_put can only *put* base application type and acks/ackt
|
||||
*/
|
||||
//printf("exPV::write application type %d [ACKT = %d .app, ACKS = %d .app]\n",
|
||||
/* printf("exPV::write application type %d [ACKT = %d .app %hd, ACKS = %d .app %hd]\n",
|
||||
valueIn.applicationType(),
|
||||
DBR_PUT_ACKT, gddDbrToAit[DBR_PUT_ACKT].app,
|
||||
DBR_PUT_ACKS, gddDbrToAit[DBR_PUT_ACKS].app );
|
||||
*/
|
||||
// printf("exPV::app %d \n", valueIn.applicationType() ); //do not work ! :-| :-( very sad
|
||||
|
||||
if ( valueIn.applicationType() == gddDbrToAit[DBR_PUT_ACKT].app) {
|
||||
return this->putAckt( valueIn );
|
||||
}
|
||||
else if (valueIn.applicationType() == gddDbrToAit[DBR_PUT_ACKS].app) {
|
||||
//else if (valueIn.applicationType() == 20) {
|
||||
return this->putAcks( valueIn );
|
||||
}
|
||||
else
|
||||
return this->update ( valueIn, true, true );
|
||||
}
|
||||
// FROM dbAccess.c
|
||||
//static long putAckt(DBADDR *paddr, const unsigned short *pbuffer, long nRequest, long no_elements, long offset)
|
||||
caStatus exPV::putAckt ( const gdd & valueIn )
|
||||
{
|
||||
//dbCommon *precord = paddr->precord;
|
||||
aitUint16 ack_value;
|
||||
valueIn.get(ack_value);
|
||||
|
||||
//if (*pbuffer == precord->ackt) return 0;
|
||||
if (ack_value == this->info.ackt)
|
||||
return 0; // 0 is success
|
||||
|
||||
this->info.ackt = (aitEnum)ack_value;
|
||||
|
||||
//db_post_events(precord, &precord->ackt, DBE_VALUE | DBE_ALARM); // I do not know how to do when not in a record
|
||||
if (!this->info.ackt && (this->info.acks > (aitEnum) this->pValue->getSevr()) ) {
|
||||
this->info.acks = (aitEnum)this->pValue->getSevr();
|
||||
|
||||
//db_post_events(precord, &precord->acks, DBE_VALUE | DBE_ALARM);
|
||||
}
|
||||
|
||||
//do a post event to people monitoring alarm changes...
|
||||
//db_post_events(precord, NULL, DBE_ALARM);
|
||||
caServer * pCAS = this->getCAS();
|
||||
casEventMask select ( pCAS->alarmEventMask());
|
||||
this->postEvent ( select, *this->pValue );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FROM dbAccess.c
|
||||
//static long putAcks(DBADDR *paddr, const unsigned short *pbuffer, long nRequest, long no_elements, long offset)
|
||||
caStatus exPV::putAcks ( const gdd & valueIn )
|
||||
{
|
||||
//dbCommon *precord = paddr->precord;
|
||||
aitUint16 ack_value;
|
||||
valueIn.get(ack_value);
|
||||
|
||||
//if (*pbuffer >= precord->acks) {
|
||||
if (ack_value >= this->info.acks ) {
|
||||
this->info.acks = (aitEnum) 0;
|
||||
//db_post_events(precord, NULL, DBE_ALARM);
|
||||
caServer * pCAS = this->getCAS();
|
||||
casEventMask select ( pCAS->alarmEventMask());
|
||||
this->postEvent ( select, *this->pValue );
|
||||
|
||||
// db_post_events(precord, &precord->acks, DBE_VALUE | DBE_ALARM); // wait to implement records
|
||||
}
|
||||
return 0; // return success
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
// exPV::read()
|
||||
// (synchronous default)
|
||||
//
|
||||
caStatus exPV::read ( const casCtx &, gdd & protoIn )
|
||||
{
|
||||
return this->ft.read ( *this, protoIn );
|
||||
}
|
||||
|
||||
//
|
||||
// exPV::createChannel()
|
||||
//
|
||||
// for access control - optional
|
||||
//
|
||||
casChannel *exPV::createChannel ( const casCtx &ctx,
|
||||
const char * const /* pUserName */,
|
||||
const char * const /* pHostName */ )
|
||||
{
|
||||
return new exChannel ( ctx );
|
||||
}
|
||||
|
||||
//
|
||||
// exFixedStringDestructor::run()
|
||||
//
|
||||
// special gddDestructor guarantees same form of new and delete
|
||||
//
|
||||
void exFixedStringDestructor::run ( void * pUntyped )
|
||||
{
|
||||
aitFixedString *ps = (aitFixedString *) pUntyped;
|
||||
delete [] ps;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,269 @@
|
||||
/*************************************************************************\
|
||||
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
* National Laboratory.
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE Versions 3.13.7
|
||||
* and higher are distributed subject to a Software License Agreement found
|
||||
* in file LICENSE-EPICS that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
#include <math.h>
|
||||
#include <limits.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "alarm.h"
|
||||
#include "exServer.h"
|
||||
#include "gddApps.h"
|
||||
|
||||
#define myPI 3.14159265358979323846
|
||||
|
||||
//
|
||||
// SUN C++ does not have RAND_MAX yet
|
||||
//
|
||||
#if !defined(RAND_MAX)
|
||||
//
|
||||
// Apparently SUN C++ is using the SYSV version of rand
|
||||
//
|
||||
#if 0
|
||||
#define RAND_MAX INT_MAX
|
||||
#else
|
||||
#define RAND_MAX SHRT_MAX
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//
|
||||
// exScalarPV::scan
|
||||
//
|
||||
void exScalarPV::scan()
|
||||
{
|
||||
caStatus status;
|
||||
double radians;
|
||||
smartGDDPointer pDD;
|
||||
float newValue;
|
||||
float limit;
|
||||
int gddStatus;
|
||||
|
||||
//
|
||||
// update current time (so we are not required to do
|
||||
// this every time that we write the PV which impacts
|
||||
// throughput under sunos4 because gettimeofday() is
|
||||
// slow)
|
||||
//
|
||||
// this->currentTime = epicsTime::getCurrent ();
|
||||
|
||||
pDD = new gddScalar ( gddAppType_value, aitEnumFloat64 );
|
||||
if ( ! pDD.valid () ) {
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// smart pointer class manages reference count after this point
|
||||
//
|
||||
gddStatus = pDD->unreference ();
|
||||
assert ( ! gddStatus );
|
||||
|
||||
// consider every data type
|
||||
/* if ( this->info.buffer ) { // code by Anto
|
||||
switch ( (this->info.btd).Type() ) {
|
||||
case BTDTInteger:
|
||||
pDD->put( (int)*( (int32 *)this->info.buffer ) );
|
||||
break;
|
||||
case BTDTFloat:
|
||||
default:
|
||||
pDD->put( (float)*( (float *)this->info.buffer ) );
|
||||
break;
|
||||
}
|
||||
// switch in base a data type :-)
|
||||
|
||||
}
|
||||
else { // original code */
|
||||
radians = ( rand () * 2.0 * myPI ) / RAND_MAX;
|
||||
if ( this->pValue.valid () ) {
|
||||
this->pValue->getConvert(newValue);
|
||||
}
|
||||
else {
|
||||
newValue = 0.0f;
|
||||
}
|
||||
newValue += (float) ( sin (radians) / 10.0 );
|
||||
limit = (float) this->info.getHopr ();
|
||||
newValue = tsMin ( newValue, limit );
|
||||
limit = (float) this->info.getLopr ();
|
||||
newValue = tsMax ( newValue, limit );
|
||||
*pDD = newValue;
|
||||
//}
|
||||
|
||||
aitTimeStamp gddts ( this->currentTime ); // TODO change it!!!!
|
||||
pDD->setTimeStamp ( & gddts );
|
||||
|
||||
// antonio code
|
||||
if ( (this->info.getScanPeriod() > 0.0) ) {
|
||||
status = this->update ( *pDD, true, false );
|
||||
if (status!=S_casApp_success) {
|
||||
errMessage ( status, "scalar scan update failed\n" );
|
||||
}
|
||||
}
|
||||
|
||||
// delete &((gddScalar ) *pDD);
|
||||
// delete &((gdd) *pDD);
|
||||
}
|
||||
|
||||
|
||||
#define DBE_VALUE (1<<0)
|
||||
#define DBE_ARCHIVE (1<<1)
|
||||
#define DBE_LOG DBE_ARCHIVE
|
||||
#define DBE_ALARM (1<<2)
|
||||
#define DBE_PROPERTY (1<<3)
|
||||
|
||||
//
|
||||
// exScalarPV::updateValue ()
|
||||
//
|
||||
// NOTES:
|
||||
// 1) This should have a test which verifies that the
|
||||
// incoming value in all of its various data types can
|
||||
// be translated into a real number?
|
||||
// 2) We prefer to unreference the old PV value here and
|
||||
// reference the incomming value because this will
|
||||
// result in each value change events retaining an
|
||||
// independent value on the event queue.
|
||||
//
|
||||
caStatus exScalarPV::updateValue ( const gdd & valueIn )
|
||||
{
|
||||
|
||||
// muoviamo il check per il data type???
|
||||
// mi sa di si... ?!? pero ce da fare lo stesso anche per gli scalars..
|
||||
|
||||
//
|
||||
// Really no need to perform this check since the
|
||||
// server lib verifies that all requests are in range
|
||||
//
|
||||
if ( ! valueIn.isScalar() ) {
|
||||
return S_casApp_outOfBounds;
|
||||
}
|
||||
|
||||
if ( ! pValue.valid () ) {
|
||||
this->pValue = new gddScalar ( gddAppType_value, this->info.getType () );
|
||||
if ( ! pValue.valid () ) {
|
||||
return S_casApp_noMemory;
|
||||
}
|
||||
}
|
||||
|
||||
this->pValue->put ( & valueIn );
|
||||
|
||||
// TODO for a full implementation see aiRecord.c checkAlarms
|
||||
double value;
|
||||
this->pValue->get(value);
|
||||
|
||||
/* Antonio code
|
||||
if ( value < this->info.getLolo() ) {
|
||||
this->pValue->setStatSevr(LOLO_ALARM, MAJOR_ALARM);
|
||||
}
|
||||
else if ( value < this->info.getLow() ) {
|
||||
this->pValue->setStatSevr(LOW_ALARM, MINOR_ALARM);
|
||||
}
|
||||
|
||||
if ( value > this->info.getHihi() ) {
|
||||
this->pValue->setStatSevr(HIHI_ALARM, MAJOR_ALARM);
|
||||
}
|
||||
else if ( value > this->info.getHigh() ) {
|
||||
this->pValue->setStatSevr(HIGH_ALARM, MINOR_ALARM);
|
||||
}
|
||||
*/
|
||||
|
||||
// original code from the aiRecord checkAlarms -----------------------------------------------------------
|
||||
/* non considered for now the following lines
|
||||
if (prec->udf) {
|
||||
recGblSetSevr(prec, UDF_ALARM, INVALID_ALARM);
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
||||
#define recGblSetSevr(NSTA, NSEV) ((nsev<(NSEV)) ? (nsta=(NSTA),nsev=(NSEV),true) : false)
|
||||
aitInt16 nsev, nsta;
|
||||
|
||||
|
||||
aiRecord_checkAlarms:
|
||||
|
||||
double hyst, lalm;
|
||||
double alev;
|
||||
epicsEnum16 asev;
|
||||
|
||||
this->pValue->getStatSevr(nsta, nsev); // fetch previous values
|
||||
|
||||
hyst = this->info.hyst; //hyst = prec->hyst;
|
||||
lalm = this->info.lalm; //lalm = prec->lalm;
|
||||
|
||||
/* alarm condition hihi */
|
||||
asev = this->info.hhsv; //asev = prec->hhsv;
|
||||
alev = this->info.getHihi(); //alev = this->info.hihi; //prec->hihi;
|
||||
if (asev && (value >= alev || ((lalm == alev) && (value >= alev - hyst)))) {
|
||||
if ( recGblSetSevr(HIHI_ALARM, asev) )
|
||||
this->info.lalm = alev;
|
||||
goto recGbl_recGblResetAlarms;
|
||||
}
|
||||
|
||||
/* alarm condition lolo */
|
||||
asev = this->info.llsv; //asev = prec->llsv;
|
||||
alev = this->info.getLolo(); //alev = this->info.lolo; //alev = prec->lolo;
|
||||
if (asev && (value <= alev || ((lalm == alev) && (value <= alev + hyst)))) {
|
||||
if ( recGblSetSevr(LOLO_ALARM, asev) )
|
||||
this->info.lalm = alev;
|
||||
goto recGbl_recGblResetAlarms;
|
||||
}
|
||||
|
||||
/* alarm condition high */
|
||||
asev = this->info.hsv; //asev = prec->hsv;
|
||||
alev = this->info.getHigh(); // alev = this->info.high; // alev = prec->high;
|
||||
if (asev && (value >= alev || ((lalm == alev) && (value >= alev - hyst)))) {
|
||||
if ( recGblSetSevr(HIGH_ALARM, asev) )
|
||||
this->info.lalm = alev;
|
||||
goto recGbl_recGblResetAlarms;
|
||||
}
|
||||
|
||||
/* alarm condition low */
|
||||
asev = this->info.lsv; //asev = prec->lsv;
|
||||
alev = this->info.getLow();//alev = this->info.low; // alev = prec->low;
|
||||
if (asev && (value <= alev || ((lalm == alev) && (value <= alev + hyst)))) {
|
||||
if ( recGblSetSevr(LOW_ALARM, asev) )
|
||||
this->info.lalm = alev;
|
||||
goto recGbl_recGblResetAlarms;
|
||||
}
|
||||
|
||||
/* we get here only if val is out of alarm by at least hyst */
|
||||
this->info.lalm = value;
|
||||
|
||||
|
||||
//recGblResetAlarms from recGbl.c
|
||||
recGbl_recGblResetAlarms:
|
||||
|
||||
epicsEnum16 stat_mask = 0;
|
||||
//epicsEnum16 val_mask = 0;
|
||||
|
||||
if (this->pValue->getSevr() != nsev ) //if (prev_sevr != new_sev)
|
||||
{
|
||||
this->pValue->setSevr(nsev);
|
||||
stat_mask = DBE_ALARM;
|
||||
//db_post_events(pdbc, &pdbc->sevr, DBE_VALUE); // monitor the change of the PV .SEVR
|
||||
}
|
||||
if (this->pValue->getStat() != nsta )
|
||||
{
|
||||
this->pValue->setStat(nsta);
|
||||
stat_mask |= DBE_VALUE;
|
||||
}
|
||||
if (stat_mask)
|
||||
{
|
||||
//db_post_events(pdbc, &pdbc->stat, stat_mask); // monitor the change of the PV .STAT
|
||||
//val_mask = DBE_ALARM;
|
||||
|
||||
// questo significa che se ackt è a zero oppure nsev >= acks allora aggiorna acks
|
||||
//previous code if (!pdbc->ackt || new_sevr >= pdbc->acks) {
|
||||
if (!this->info.ackt || nsev >= this->info.acks) {
|
||||
this->info.acks = (aitEnum) nsev;
|
||||
//db_post_events(pdbc, &pdbc->acks, DBE_VALUE); //monitor the change of the PV .ACKS
|
||||
}
|
||||
}
|
||||
// e fino a qui mi cambia stat e sevr e acks -----------------------------------------------------------
|
||||
|
||||
return S_casApp_success;
|
||||
}
|
||||
|
||||
491
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSLib/exServer.cpp
Normal file
491
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSLib/exServer.cpp
Normal file
@@ -0,0 +1,491 @@
|
||||
/*************************************************************************\
|
||||
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
* National Laboratory.
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE Versions 3.13.7
|
||||
* and higher are distributed subject to a Software License Agreement found
|
||||
* in file LICENSE-EPICS that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
//
|
||||
// fileDescriptorManager.process(delay);
|
||||
// (the name of the global symbol has leaked in here)
|
||||
//
|
||||
|
||||
//
|
||||
// Example EPICS CA server
|
||||
//
|
||||
#include "exServer.h"
|
||||
|
||||
/*
|
||||
//
|
||||
// static list of pre-created PVs
|
||||
//
|
||||
pvInfo exServer::pvList[] = {
|
||||
pvInfo (1.0e-1, "jane", 10.0f, 0.0f, aitEnumFloat64, excasIoSync, 1u),
|
||||
pvInfo (2.0, "fred", 10.0f, -10.0f, aitEnumFloat64, excasIoSync, 1u),
|
||||
pvInfo (1.0e-1, "janet", 10.0f, 0.0f, aitEnumFloat64, excasIoAsync, 1u),
|
||||
pvInfo (2.0, "freddy", 10.0f, -10.0f, aitEnumFloat64, excasIoAsync, 1u),
|
||||
pvInfo (2.0, "alan", 10.0f, -10.0f, aitEnumFloat64, excasIoSync, 100u),
|
||||
pvInfo (20.0, "albert", 10.0f, -10.0f, aitEnumFloat64, excasIoSync, 1000u),
|
||||
pvInfo (-1.0, "boot", 10.0f, -10.0f, aitEnumEnum16, excasIoSync, 1u),
|
||||
pvInfo (1.0, "booty", 10.0f, -10.0f, aitEnumEnum16, excasIoAsync, 1u),
|
||||
pvInfo (-1.0, "bill", 10.0f, -10.0f, aitEnumFloat64, excasIoSync, 1u),
|
||||
pvInfo (-1.0, "billy", 10.0f, -10.0f, aitEnumFloat64, excasIoAsync, 1u)
|
||||
};
|
||||
|
||||
|
||||
const unsigned exServer::pvListNElem = NELEMENTS (exServer::pvList);
|
||||
|
||||
//
|
||||
// static on-the-fly PVs
|
||||
//
|
||||
pvInfo exServer::billy (-1.0, "billybob", 10.0f, -10.0f, aitEnumFloat64, excasIoAsync, 1u);
|
||||
pvInfo exServer::bloater (.010, "bloater", 10.0f, -10.0f, aitEnumFloat64, excasIoSync, 10000u);
|
||||
pvInfo exServer::bloaty (.010, "bloaty", 10.0f, -10.0f, aitEnumFloat64, excasIoSync, 100000u);
|
||||
*/
|
||||
|
||||
//
|
||||
// exServer::exServer()
|
||||
//
|
||||
/*exServer::exServer ( const char * const pvPrefix,
|
||||
unsigned aliasCount, bool scanOnIn,
|
||||
bool asyncScan, double asyncDelayIn,
|
||||
unsigned maxSimultAsyncIOIn ) :
|
||||
*/
|
||||
exServer::exServer ( bool scanOnIn,
|
||||
bool asyncScan, double asyncDelayIn,
|
||||
unsigned maxSimultAsyncIOIn ) :
|
||||
|
||||
pTimerQueue ( 0 ), simultAsychIOCount ( 0u ),
|
||||
_maxSimultAsyncIO ( maxSimultAsyncIOIn ),
|
||||
asyncDelay ( asyncDelayIn ), scanOn ( scanOnIn )
|
||||
{
|
||||
/*
|
||||
unsigned i;
|
||||
exPV *pPV;
|
||||
pvInfo *pPVI;
|
||||
pvInfo *pPVAfter = &exServer::pvList[pvListNElem];
|
||||
char pvAlias[256];
|
||||
const char * const pNameFmtStr = "%.100s%.20s";
|
||||
const char * const pAliasFmtStr = "%.100s%.20s%.6u";
|
||||
*/
|
||||
exPV::initFT();
|
||||
|
||||
if ( asyncScan ) {
|
||||
unsigned timerPriotity;
|
||||
epicsThreadBooleanStatus etbs = epicsThreadLowestPriorityLevelAbove (
|
||||
epicsThreadGetPrioritySelf (), & timerPriotity );
|
||||
if ( etbs != epicsThreadBooleanStatusSuccess ) {
|
||||
timerPriotity = epicsThreadGetPrioritySelf ();
|
||||
}
|
||||
this->pTimerQueue = & epicsTimerQueueActive::allocate ( false, timerPriotity );
|
||||
}
|
||||
/*
|
||||
//
|
||||
// pre-create all of the simple PVs that this server will export
|
||||
//
|
||||
for (pPVI = exServer::pvList; pPVI < pPVAfter; pPVI++) {
|
||||
pPV = pPVI->createPV (*this, true, scanOnIn, this->asyncDelay );
|
||||
if (!pPV) {
|
||||
fprintf(stderr, "Unable to create new PV \"%s\"\n",
|
||||
pPVI->getName());
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Install canonical (root) name
|
||||
//
|
||||
sprintf(pvAlias, pNameFmtStr, pvPrefix, pPVI->getName());
|
||||
this->installAliasName(*pPVI, pvAlias);
|
||||
|
||||
//
|
||||
// Install numbered alias names
|
||||
//
|
||||
for (i=0u; i<aliasCount; i++) {
|
||||
sprintf(pvAlias, pAliasFmtStr, pvPrefix,
|
||||
pPVI->getName(), i);
|
||||
this->installAliasName(*pPVI, pvAlias);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Install create on-the-fly PVs
|
||||
// into the PV name hash table
|
||||
//
|
||||
sprintf ( pvAlias, pNameFmtStr, pvPrefix, billy.getName() );
|
||||
this->installAliasName ( billy, pvAlias );
|
||||
sprintf ( pvAlias, pNameFmtStr, pvPrefix, bloater.getName() );
|
||||
this->installAliasName ( bloater, pvAlias );
|
||||
sprintf ( pvAlias, pNameFmtStr, pvPrefix, bloaty.getName() );
|
||||
this->installAliasName ( bloaty, pvAlias );
|
||||
*/
|
||||
}
|
||||
|
||||
//
|
||||
// exServer::~exServer()
|
||||
//
|
||||
exServer::~exServer()
|
||||
{
|
||||
this->destroyAllPV ();
|
||||
this->stringResTbl.traverse ( &pvEntry::destroy );
|
||||
}
|
||||
|
||||
// TODO
|
||||
void exServer::destroyAllPV ()
|
||||
{
|
||||
/*
|
||||
for ( unsigned i = 0;
|
||||
i < NELEMENTS(exServer::pvList); i++ ) {
|
||||
exServer::pvList[i].deletePV ();
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
//
|
||||
// exServer::installAliasName()
|
||||
//
|
||||
void exServer::installAliasName(pvInfo &info, const char *pAliasName)
|
||||
{
|
||||
pvEntry *pEntry;
|
||||
|
||||
pEntry = new pvEntry(info, *this, pAliasName);
|
||||
if (pEntry) {
|
||||
int resLibStatus;
|
||||
resLibStatus = this->stringResTbl.add(*pEntry);
|
||||
if (resLibStatus==0) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
delete pEntry;
|
||||
}
|
||||
}
|
||||
fprintf ( stderr,
|
||||
"Unable to enter PV=\"%s\" Alias=\"%s\" in PV name alias hash table\n",
|
||||
info.getName(), pAliasName );
|
||||
}
|
||||
|
||||
//
|
||||
// More advanced pvExistTest() isnt needed so we forward to
|
||||
// original version. This avoids sun pro warnings and speeds
|
||||
// up execution.
|
||||
//
|
||||
pvExistReturn exServer::pvExistTest
|
||||
( const casCtx & ctx, const caNetAddr &, const char * pPVName )
|
||||
{
|
||||
return this->pvExistTest ( ctx, pPVName );
|
||||
}
|
||||
|
||||
//
|
||||
// exServer::pvExistTest()
|
||||
//
|
||||
pvExistReturn exServer::pvExistTest // X aCC 361
|
||||
( const casCtx& ctxIn, const char * pPVName )
|
||||
{
|
||||
//
|
||||
// lifetime of id is shorter than lifetime of pName
|
||||
//
|
||||
stringId id ( pPVName, stringId::refString );
|
||||
pvEntry *pPVE;
|
||||
|
||||
//
|
||||
// Look in hash table for PV name (or PV alias name)
|
||||
//
|
||||
|
||||
// TODO delete field name if exists e poi lookup
|
||||
|
||||
pPVE = this->stringResTbl.lookup ( id );
|
||||
if ( ! pPVE ) {
|
||||
return pverDoesNotExistHere;
|
||||
}
|
||||
|
||||
pvInfo & pvi = pPVE->getInfo();
|
||||
|
||||
//
|
||||
// Initiate async IO if this is an async PV
|
||||
//
|
||||
if ( pvi.getIOType() == excasIoSync ) {
|
||||
return pverExistsHere;
|
||||
}
|
||||
else {
|
||||
if ( this->simultAsychIOCount >= this->_maxSimultAsyncIO ) {
|
||||
return pverDoesNotExistHere;
|
||||
}
|
||||
|
||||
this->simultAsychIOCount++;
|
||||
|
||||
exAsyncExistIO * pIO =
|
||||
new exAsyncExistIO ( pvi, ctxIn, *this );
|
||||
if ( pIO ) {
|
||||
return pverAsyncCompletion;
|
||||
}
|
||||
else {
|
||||
this->simultAsychIOCount--;
|
||||
return pverDoesNotExistHere;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// exServer::pvExistTest()
|
||||
// the idea is to return the descriptor from here
|
||||
pvExistReturn exServer::pvExistTest // X aCC 361
|
||||
(const char * pPVName)
|
||||
{
|
||||
//
|
||||
// lifetime of id is shorter than lifetime of pName
|
||||
//
|
||||
stringId id ( pPVName, stringId::refString );
|
||||
pvEntry *pPVE;
|
||||
|
||||
//
|
||||
// Look in hash table for PV name (or PV alias name)
|
||||
//
|
||||
pPVE = this->stringResTbl.lookup ( id );
|
||||
if ( ! pPVE ) {
|
||||
return pverDoesNotExistHere;
|
||||
}
|
||||
|
||||
// pvInfo & pvi = pPVE->getInfo();
|
||||
// set the buffer and size --> will be the basic type descriptor
|
||||
// pvi.buffer = buffer;
|
||||
//pvi.btd = btd_src;
|
||||
|
||||
|
||||
return pverExistsHere;
|
||||
}
|
||||
|
||||
//
|
||||
// exServer::pvAttach()
|
||||
//
|
||||
pvAttachReturn exServer::pvAttach // X aCC 361
|
||||
(const casCtx &ctx, const char *pName)
|
||||
{
|
||||
//
|
||||
// lifetime of id is shorter than lifetime of pName
|
||||
//
|
||||
stringId id(pName, stringId::refString);
|
||||
exPV *pPV;
|
||||
pvEntry *pPVE;
|
||||
|
||||
pPVE = this->stringResTbl.lookup(id);
|
||||
if (!pPVE) {
|
||||
return S_casApp_pvNotFound;
|
||||
}
|
||||
|
||||
pvInfo &pvi = pPVE->getInfo();
|
||||
|
||||
//
|
||||
// If this is a synchronous PV create the PV now
|
||||
//
|
||||
if (pvi.getIOType() == excasIoSync) {
|
||||
pPV = pvi.createPV(*this, false, this->scanOn, this->asyncDelay );
|
||||
if (pPV) {
|
||||
return *pPV;
|
||||
}
|
||||
else {
|
||||
return S_casApp_noMemory;
|
||||
}
|
||||
}
|
||||
//
|
||||
// Initiate async IO if this is an async PV
|
||||
//
|
||||
else {
|
||||
if (this->simultAsychIOCount>=this->_maxSimultAsyncIO) {
|
||||
return S_casApp_postponeAsyncIO;
|
||||
}
|
||||
|
||||
this->simultAsychIOCount++;
|
||||
|
||||
exAsyncCreateIO *pIO =
|
||||
new exAsyncCreateIO ( pvi, *this, ctx,
|
||||
this->scanOn, this->asyncDelay );
|
||||
if (pIO) {
|
||||
return S_casApp_asyncCompletion;
|
||||
}
|
||||
else {
|
||||
this->simultAsychIOCount--;
|
||||
return S_casApp_noMemory;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// exServer::setDebugLevel ()
|
||||
//
|
||||
void exServer::setDebugLevel ( unsigned level )
|
||||
{
|
||||
this->caServer::setDebugLevel ( level );
|
||||
}
|
||||
|
||||
//
|
||||
// exServer::createTimer ()
|
||||
//
|
||||
/*
|
||||
* senza createTimer va tutto un po' in merda
|
||||
* nel senso che appena registri un channel di monitoring
|
||||
* va in seg fault (idem per gli asynch IO)
|
||||
* inoltre stampa a video: exPV: interest=0 (che prima non aveva mai stampato)
|
||||
* ritorna sempre 0 su caget caput funziona invece
|
||||
*/
|
||||
class epicsTimer & exServer::createTimer ()
|
||||
{
|
||||
if ( this->pTimerQueue ) {
|
||||
//printf("pTimerQueue\n");
|
||||
return this->pTimerQueue->createTimer ();
|
||||
}
|
||||
else {
|
||||
//printf("NONONO pTimerQueue\n");
|
||||
return this->caServer::createTimer ();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// pvInfo::createPV()
|
||||
//
|
||||
exPV *pvInfo::createPV ( exServer & cas, bool preCreateFlag,
|
||||
bool scanOn, double asyncDelay )
|
||||
{
|
||||
if (this->pPV) {
|
||||
return this->pPV;
|
||||
}
|
||||
|
||||
exPV *pNewPV;
|
||||
|
||||
//
|
||||
// create an instance of the appropriate class
|
||||
// depending on the io type and the number
|
||||
// of elements
|
||||
//
|
||||
if (this->elementCount==1u) {
|
||||
switch (this->ioType){
|
||||
case excasIoSync:
|
||||
pNewPV = new exScalarPV ( cas, *this, preCreateFlag, scanOn );
|
||||
break;
|
||||
case excasIoAsync:
|
||||
pNewPV = new exAsyncPV ( cas, *this,
|
||||
preCreateFlag, scanOn, asyncDelay );
|
||||
break;
|
||||
default:
|
||||
pNewPV = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( this->ioType == excasIoSync ) {
|
||||
pNewPV = new exVectorPV ( cas, *this, preCreateFlag, scanOn );
|
||||
}
|
||||
else {
|
||||
pNewPV = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// load initial value (this is not done in
|
||||
// the constructor because the base class's
|
||||
// pure virtual function would be called)
|
||||
//
|
||||
// We always perform this step even if
|
||||
// scanning is disable so that there will
|
||||
// always be an initial value
|
||||
//
|
||||
if (pNewPV) {
|
||||
this->pPV = pNewPV;
|
||||
pNewPV->scan();
|
||||
}
|
||||
|
||||
return pNewPV;
|
||||
}
|
||||
|
||||
//
|
||||
// exServer::show()
|
||||
//
|
||||
void exServer::show (unsigned level) const
|
||||
{
|
||||
//
|
||||
// server tool specific show code goes here
|
||||
//
|
||||
this->stringResTbl.show(level);
|
||||
|
||||
//
|
||||
// print information about ca server libarary
|
||||
// internals
|
||||
//
|
||||
this->caServer::show(level);
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncExistIO::exAsyncExistIO()
|
||||
//
|
||||
exAsyncExistIO::exAsyncExistIO ( const pvInfo &pviIn, const casCtx &ctxIn,
|
||||
exServer &casIn ) :
|
||||
casAsyncPVExistIO ( ctxIn ), pvi ( pviIn ),
|
||||
timer ( casIn.createTimer () ), cas ( casIn )
|
||||
{
|
||||
this->timer.start ( *this, 0.00001 );
|
||||
// TODO ASYNC delay!!!! pazzesco fanno le cose a meta!
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncExistIO::~exAsyncExistIO()
|
||||
//
|
||||
exAsyncExistIO::~exAsyncExistIO()
|
||||
{
|
||||
this->cas.removeIO ();
|
||||
this->timer.destroy ();
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncExistIO::expire()
|
||||
// (a virtual function that runs when the base timer expires)
|
||||
//
|
||||
epicsTimerNotify::expireStatus exAsyncExistIO::expire ( const epicsTime & /*currentTime*/ )
|
||||
{
|
||||
//
|
||||
// post IO completion
|
||||
//
|
||||
this->postIOCompletion ( pvExistReturn(pverExistsHere) );
|
||||
return noRestart;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// exAsyncCreateIO::exAsyncCreateIO()
|
||||
//
|
||||
exAsyncCreateIO ::
|
||||
exAsyncCreateIO ( pvInfo &pviIn, exServer &casIn,
|
||||
const casCtx &ctxIn, bool scanOnIn, double asyncDelayIn ) :
|
||||
casAsyncPVAttachIO ( ctxIn ), pvi ( pviIn ),
|
||||
timer ( casIn.createTimer () ),
|
||||
cas ( casIn ), asyncDelay ( asyncDelayIn ), scanOn ( scanOnIn )
|
||||
{
|
||||
this->timer.start ( *this, 0.00001 );
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncCreateIO::~exAsyncCreateIO()
|
||||
//
|
||||
exAsyncCreateIO::~exAsyncCreateIO()
|
||||
{
|
||||
this->cas.removeIO ();
|
||||
this->timer.destroy ();
|
||||
}
|
||||
|
||||
//
|
||||
// exAsyncCreateIO::expire()
|
||||
// (a virtual function that runs when the base timer expires)
|
||||
//
|
||||
epicsTimerNotify::expireStatus exAsyncCreateIO::expire ( const epicsTime & /*currentTime*/ )
|
||||
{
|
||||
exPV * pPV = this->pvi.createPV ( this->cas, false,
|
||||
this->scanOn, this->asyncDelay );
|
||||
if ( pPV ) {
|
||||
this->postIOCompletion ( pvAttachReturn ( *pPV ) );
|
||||
}
|
||||
else {
|
||||
this->postIOCompletion ( pvAttachReturn ( S_casApp_noMemory ) );
|
||||
}
|
||||
return noRestart;
|
||||
}
|
||||
|
||||
843
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSLib/exServer.h
Normal file
843
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSLib/exServer.h
Normal file
@@ -0,0 +1,843 @@
|
||||
/*************************************************************************\
|
||||
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
* National Laboratory.
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE Versions 3.13.7
|
||||
* and higher are distributed subject to a Software License Agreement found
|
||||
* in file LICENSE-EPICS that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
//
|
||||
// Example EPICS CA server
|
||||
//
|
||||
//
|
||||
// caServer
|
||||
// |
|
||||
// exServer
|
||||
//
|
||||
// casPV
|
||||
// |
|
||||
// exPV-----------
|
||||
// | |
|
||||
// exScalarPV exVectorPV
|
||||
// |
|
||||
// exAsyncPV
|
||||
//
|
||||
// casChannel
|
||||
// |
|
||||
// exChannel
|
||||
//
|
||||
|
||||
|
||||
//MARTE BAseLib
|
||||
#include "System.h"
|
||||
#include "BasicTypes.h"
|
||||
|
||||
|
||||
//
|
||||
// ANSI C
|
||||
//
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
//
|
||||
// EPICS
|
||||
//
|
||||
//#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"
|
||||
#include "gddAppFuncTable.h"
|
||||
#include "smartGDDPointer.h"
|
||||
#include "epicsTimer.h"
|
||||
#include "casdef.h"
|
||||
#include "epicsAssert.h"
|
||||
#include "resourceLib.h"
|
||||
#include "tsMinMax.h"
|
||||
|
||||
#ifndef NELEMENTS
|
||||
# define NELEMENTS(A) (sizeof(A)/sizeof(A[0]))
|
||||
#endif
|
||||
|
||||
//
|
||||
// info about all pv in this server
|
||||
//
|
||||
enum excasIoType { excasIoSync, excasIoAsync };
|
||||
|
||||
class exPV;
|
||||
class exServer;
|
||||
|
||||
//
|
||||
// pvInfo
|
||||
//
|
||||
class pvInfo {
|
||||
public:
|
||||
|
||||
pvInfo ( double scanPeriodIn, const char * pNameIn, const char * pUnitsIn,
|
||||
aitFloat32 hoprIn, aitFloat32 loprIn,
|
||||
double hihiIn, double highIn, double lowIn, double loloIn,
|
||||
aitEnum typeIn, excasIoType ioTypeIn, unsigned countIn );
|
||||
|
||||
pvInfo ( double scanPeriodIn, const char * pNameIn, const char * pUnitsIn,
|
||||
aitFloat32 hoprIn, aitFloat32 loprIn,
|
||||
double hihiIn, double highIn, double lowIn, double loloIn,
|
||||
aitEnum hhsvIn, aitEnum llsvIn, aitEnum hsvIn, aitEnum lsvIn,
|
||||
/*double lalmIn,*/ double hystIn,
|
||||
/*double alstIn,*/ double adelIn, /*double mlstIn,*/ double mdelIn,
|
||||
aitEnum acksIn, aitEnum acktIn, int precIn,
|
||||
aitEnum typeIn, excasIoType ioTypeIn, unsigned countIn );
|
||||
|
||||
pvInfo ( const pvInfo & copyIn );
|
||||
~pvInfo ();
|
||||
double getScanPeriod () const;
|
||||
const char * getName () const;
|
||||
const char * getUnits () const;
|
||||
double getHopr () const;
|
||||
double getLopr () const;
|
||||
double getHihi () const;
|
||||
double getHigh () const;
|
||||
double getLow () const;
|
||||
double getLolo () const;
|
||||
aitEnum getType () const;
|
||||
|
||||
excasIoType getIOType () const;
|
||||
unsigned getElementCount () const;
|
||||
void unlinkPV ();
|
||||
exPV *createPV ( exServer & exCAS, bool preCreateFlag,
|
||||
bool scanOn, double asyncDelay );
|
||||
void deletePV ();
|
||||
exPV *getPV () { return pPV; };
|
||||
|
||||
// char * buffer;
|
||||
// BasicTypeDescriptor btd;
|
||||
|
||||
private:
|
||||
const double scanPeriod;
|
||||
aitEnum scan;
|
||||
|
||||
// TODO devono essere allocati qui: pvInfo e responsabile della loro creazione e distruzione
|
||||
// poteva andare bene per reference nell'implementazione precedente se erano statici a livello di routine
|
||||
// ma ora non è più così..
|
||||
char * pName;
|
||||
char * pUnits;
|
||||
char * pDesc;
|
||||
|
||||
const double hopr;
|
||||
const double lopr;
|
||||
|
||||
const double hihi;
|
||||
const double high;
|
||||
const double low;
|
||||
const double lolo;
|
||||
|
||||
public:
|
||||
aitEnum hhsv;
|
||||
aitEnum llsv;
|
||||
aitEnum hsv;
|
||||
aitEnum lsv;
|
||||
|
||||
double lalm; // last alarm value
|
||||
double hyst; // hysteresis value
|
||||
double alst; // last archived value
|
||||
double adel; // archive deadband
|
||||
double mlst; // last monitored value
|
||||
double mdel; // monitor deadband
|
||||
|
||||
aitEnum acks;
|
||||
aitEnum ackt; // YESorNO
|
||||
|
||||
int prec;
|
||||
|
||||
private:
|
||||
aitEnum type;
|
||||
const excasIoType ioType;
|
||||
const unsigned elementCount;
|
||||
exPV * pPV;
|
||||
pvInfo & operator = ( const pvInfo & );
|
||||
};
|
||||
|
||||
//
|
||||
// pvEntry
|
||||
//
|
||||
// o entry in the string hash table for the pvInfo
|
||||
// o Since there may be aliases then we may end up
|
||||
// with several of this class all referencing
|
||||
// the same pv info class (justification
|
||||
// for this breaking out into a seperate class
|
||||
// from pvInfo)
|
||||
//
|
||||
class pvEntry // X aCC 655
|
||||
: public stringId, public tsSLNode < pvEntry > {
|
||||
public:
|
||||
pvEntry ( pvInfo &infoIn, exServer & casIn,
|
||||
const char * pAliasName );
|
||||
~pvEntry();
|
||||
pvInfo & getInfo() const { return this->info; }
|
||||
void destroy ();
|
||||
|
||||
private:
|
||||
pvInfo & info;
|
||||
exServer & cas;
|
||||
pvEntry & operator = ( const pvEntry & );
|
||||
pvEntry ( const pvEntry & );
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// exPV
|
||||
//
|
||||
class exPV : public casPV, public epicsTimerNotify,
|
||||
public tsSLNode < exPV > {
|
||||
public:
|
||||
exPV ( exServer & cas, pvInfo & setup,
|
||||
bool preCreateFlag, bool scanOn );
|
||||
virtual ~exPV();
|
||||
|
||||
void show ( unsigned level ) const;
|
||||
|
||||
//
|
||||
// Called by the server libary each time that it wishes to
|
||||
// subscribe for PV the server tool via postEvent() below.
|
||||
//
|
||||
caStatus interestRegister ();
|
||||
|
||||
//
|
||||
// called by the server library each time that it wishes to
|
||||
// remove its subscription for PV value change events
|
||||
// from the server tool via caServerPostEvents()
|
||||
//
|
||||
void interestDelete ();
|
||||
|
||||
aitEnum bestExternalType () const;
|
||||
|
||||
//
|
||||
// chCreate() is called each time that a PV is attached to
|
||||
// by a client. The server tool must create a casChannel object
|
||||
// (or a derived class) each time that this routine is called
|
||||
//
|
||||
// If the operation must complete asynchronously then return
|
||||
// the status code S_casApp_asyncCompletion and then
|
||||
// create the casChannel object at some time in the future
|
||||
//
|
||||
//casChannel *createChannel ();
|
||||
|
||||
//
|
||||
// This gets called when the pv gets a new value
|
||||
//
|
||||
caStatus update ( const gdd & , bool processEvent, bool updateValue);
|
||||
|
||||
//
|
||||
// Gets called when we add noise to the current value
|
||||
//
|
||||
virtual void scan () = 0;
|
||||
|
||||
//
|
||||
// If no one is watching scan the PV with 10.0
|
||||
// times the specified period
|
||||
//
|
||||
double getScanPeriod ();
|
||||
|
||||
caStatus read ( const casCtx &, gdd & protoIn );
|
||||
|
||||
caStatus readNoCtx ( smartGDDPointer pProtoIn );
|
||||
|
||||
caStatus write ( const casCtx &, const gdd & value );
|
||||
|
||||
void destroy ();
|
||||
|
||||
const pvInfo & getPVInfo ();
|
||||
|
||||
const char * getName() const;
|
||||
|
||||
|
||||
caStatus putAckt ( const gdd & valueIn );
|
||||
caStatus putAcks ( const gdd & valueIn );
|
||||
|
||||
|
||||
static void initFT();
|
||||
|
||||
casChannel * createChannel ( const casCtx &ctx,
|
||||
const char * const pUserName,
|
||||
const char * const pHostName );
|
||||
|
||||
protected:
|
||||
smartGDDPointer pValue;
|
||||
exServer & cas;
|
||||
epicsTimer & timer;
|
||||
pvInfo & info;
|
||||
bool interest;
|
||||
bool preCreate;
|
||||
bool scanOn;
|
||||
static epicsTime currentTime;
|
||||
|
||||
virtual caStatus updateValue ( const gdd & ) = 0;
|
||||
|
||||
private:
|
||||
|
||||
//
|
||||
// scan timer expire
|
||||
//
|
||||
expireStatus expire ( const epicsTime & currentTime );
|
||||
|
||||
//
|
||||
// Std PV Attribute fetch support
|
||||
//
|
||||
gddAppFuncTableStatus getPrecision(gdd &value);
|
||||
gddAppFuncTableStatus getHighLimit(gdd &value);
|
||||
gddAppFuncTableStatus getLowLimit(gdd &value);
|
||||
gddAppFuncTableStatus getHighAlarm ( gdd & value );
|
||||
gddAppFuncTableStatus getLowAlarm ( gdd & value );
|
||||
gddAppFuncTableStatus getHighWarning ( gdd & value );
|
||||
gddAppFuncTableStatus getLowWarning ( gdd & value );
|
||||
gddAppFuncTableStatus getUnits(gdd &value);
|
||||
gddAppFuncTableStatus getValue(gdd &value);
|
||||
gddAppFuncTableStatus getEnums(gdd &value);
|
||||
gddAppFuncTableStatus getAckt (gdd & prec);
|
||||
gddAppFuncTableStatus getAcks (gdd & prec);
|
||||
// gddAppFuncTableStatus getTimeStamp (gdd & prec);
|
||||
|
||||
|
||||
|
||||
exPV & operator = ( const exPV & );
|
||||
exPV ( const exPV & );
|
||||
|
||||
//
|
||||
// static
|
||||
//
|
||||
static gddAppFuncTable<exPV> ft;
|
||||
static char hasBeenInitialized;
|
||||
};
|
||||
|
||||
//
|
||||
// exScalarPV
|
||||
//
|
||||
class exScalarPV : public exPV {
|
||||
public:
|
||||
exScalarPV ( exServer & cas, pvInfo &setup,
|
||||
bool preCreateFlag, bool scanOnIn ) :
|
||||
exPV ( cas, setup,
|
||||
preCreateFlag, scanOnIn) {}
|
||||
void scan();
|
||||
private:
|
||||
caStatus updateValue ( const gdd & );
|
||||
exScalarPV & operator = ( const exScalarPV & );
|
||||
exScalarPV ( const exScalarPV & );
|
||||
};
|
||||
|
||||
//
|
||||
// exVectorPV
|
||||
//
|
||||
class exVectorPV : public exPV {
|
||||
public:
|
||||
exVectorPV ( exServer & cas, pvInfo &setup,
|
||||
bool preCreateFlag, bool scanOnIn ) :
|
||||
exPV ( cas, setup,
|
||||
preCreateFlag, scanOnIn) {}
|
||||
void scan();
|
||||
|
||||
unsigned maxDimension() const;
|
||||
aitIndex maxBound (unsigned dimension) const;
|
||||
|
||||
private:
|
||||
caStatus updateValue ( const gdd & );
|
||||
exVectorPV & operator = ( const exVectorPV & );
|
||||
exVectorPV ( const exVectorPV & );
|
||||
};
|
||||
|
||||
//
|
||||
// exServer
|
||||
//
|
||||
class exServer : private caServer {
|
||||
public:
|
||||
//we have removed the unneeded parameters
|
||||
/*exServer ( const char * const pvPrefix,
|
||||
unsigned aliasCount, bool scanOn,
|
||||
bool asyncScan, double asyncDelay,
|
||||
unsigned maxSimultAsyncIO );
|
||||
*/
|
||||
exServer (bool scanOn,
|
||||
bool asyncScan, double asyncDelay,
|
||||
unsigned maxSimultAsyncIO );
|
||||
~exServer ();
|
||||
void show ( unsigned level ) const;
|
||||
void removeIO ();
|
||||
|
||||
void removeAliasName ( pvEntry & entry );
|
||||
// todo change return type to integer o pvEntry.. dato che serve in removeAliasName..
|
||||
void installAliasName ( pvInfo & info, const char * pAliasName );
|
||||
|
||||
class epicsTimer & createTimer ();
|
||||
void setDebugLevel ( unsigned level );
|
||||
|
||||
void destroyAllPV ();
|
||||
|
||||
unsigned maxSimultAsyncIO () const;
|
||||
|
||||
|
||||
pvExistReturn pvExistTest ( const casCtx &,
|
||||
const caNetAddr &, const char * pPVName );
|
||||
pvExistReturn pvExistTest ( const casCtx &,
|
||||
const char * pPVName );
|
||||
// pvExistReturn pvExistTest ( const char * pPVName ); // used by the prototype
|
||||
pvExistReturn pvExistTest (const char * pPVName );
|
||||
|
||||
|
||||
private:
|
||||
resTable < pvEntry, stringId > stringResTbl;
|
||||
epicsTimerQueueActive * pTimerQueue;
|
||||
|
||||
// TODO add eventQueue
|
||||
|
||||
unsigned simultAsychIOCount;
|
||||
const unsigned _maxSimultAsyncIO;
|
||||
double asyncDelay;
|
||||
bool scanOn;
|
||||
|
||||
pvAttachReturn pvAttach ( const casCtx &,
|
||||
const char * pPVName );
|
||||
|
||||
exServer & operator = ( const exServer & );
|
||||
exServer ( const exServer & );
|
||||
|
||||
/*
|
||||
//
|
||||
// list of pre-created PVs
|
||||
//
|
||||
static pvInfo pvList[];
|
||||
static const unsigned pvListNElem;
|
||||
|
||||
//
|
||||
// on-the-fly PVs
|
||||
//
|
||||
static pvInfo bill;
|
||||
static pvInfo billy;
|
||||
static pvInfo bloater;
|
||||
static pvInfo bloaty;
|
||||
static pvInfo boot;
|
||||
static pvInfo booty;
|
||||
*/
|
||||
};
|
||||
|
||||
//
|
||||
// exAsyncPV
|
||||
//
|
||||
class exAsyncPV : public exScalarPV {
|
||||
public:
|
||||
exAsyncPV ( exServer & cas, pvInfo &setup,
|
||||
bool preCreateFlag, bool scanOnIn, double asyncDelay );
|
||||
caStatus read ( const casCtx & ctxIn, gdd & protoIn );
|
||||
caStatus write ( const casCtx & ctxIn, const gdd & value );
|
||||
caStatus writeNotify ( const casCtx & ctxIn, const gdd & value );
|
||||
void removeReadIO();
|
||||
void removeWriteIO();
|
||||
caStatus updateFromAsyncWrite ( const gdd & );
|
||||
private:
|
||||
double asyncDelay;
|
||||
smartConstGDDPointer pStandbyValue;
|
||||
unsigned simultAsychReadIOCount;
|
||||
unsigned simultAsychWriteIOCount;
|
||||
exAsyncPV & operator = ( const exAsyncPV & );
|
||||
exAsyncPV ( const exAsyncPV & );
|
||||
};
|
||||
|
||||
//
|
||||
// exChannel
|
||||
//
|
||||
class exChannel : public casChannel{
|
||||
public:
|
||||
exChannel ( const casCtx & ctxIn );
|
||||
void setOwner ( const char * const pUserName,
|
||||
const char * const pHostName );
|
||||
bool readAccess () const;
|
||||
bool writeAccess () const;
|
||||
private:
|
||||
exChannel & operator = ( const exChannel & );
|
||||
exChannel ( const exChannel & );
|
||||
};
|
||||
|
||||
//
|
||||
// exAsyncWriteIO
|
||||
//
|
||||
class exAsyncWriteIO : public casAsyncWriteIO, public epicsTimerNotify {
|
||||
public:
|
||||
exAsyncWriteIO ( exServer &, const casCtx & ctxIn,
|
||||
exAsyncPV &, const gdd &, double asyncDelay );
|
||||
~exAsyncWriteIO ();
|
||||
private:
|
||||
exAsyncPV & pv;
|
||||
epicsTimer & timer;
|
||||
smartConstGDDPointer pValue;
|
||||
expireStatus expire ( const epicsTime & currentTime );
|
||||
exAsyncWriteIO & operator = ( const exAsyncWriteIO & );
|
||||
exAsyncWriteIO ( const exAsyncWriteIO & );
|
||||
};
|
||||
|
||||
//
|
||||
// exAsyncReadIO
|
||||
//
|
||||
class exAsyncReadIO : public casAsyncReadIO, public epicsTimerNotify {
|
||||
public:
|
||||
exAsyncReadIO ( exServer &, const casCtx &,
|
||||
exAsyncPV &, gdd &, double asyncDelay );
|
||||
virtual ~exAsyncReadIO ();
|
||||
private:
|
||||
exAsyncPV & pv;
|
||||
epicsTimer & timer;
|
||||
smartGDDPointer pProto;
|
||||
expireStatus expire ( const epicsTime & currentTime );
|
||||
exAsyncReadIO & operator = ( const exAsyncReadIO & );
|
||||
exAsyncReadIO ( const exAsyncReadIO & );
|
||||
};
|
||||
|
||||
//
|
||||
// exAsyncExistIO
|
||||
// (PV exist async IO)
|
||||
//
|
||||
class exAsyncExistIO : public casAsyncPVExistIO, public epicsTimerNotify {
|
||||
public:
|
||||
exAsyncExistIO ( const pvInfo & pviIn, const casCtx & ctxIn,
|
||||
exServer & casIn );
|
||||
virtual ~exAsyncExistIO ();
|
||||
private:
|
||||
const pvInfo & pvi;
|
||||
epicsTimer & timer;
|
||||
exServer & cas;
|
||||
expireStatus expire ( const epicsTime & currentTime );
|
||||
exAsyncExistIO & operator = ( const exAsyncExistIO & );
|
||||
exAsyncExistIO ( const exAsyncExistIO & );
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// exAsyncCreateIO
|
||||
// (PV create async IO)
|
||||
//
|
||||
class exAsyncCreateIO : public casAsyncPVAttachIO, public epicsTimerNotify {
|
||||
public:
|
||||
exAsyncCreateIO ( pvInfo & pviIn, exServer & casIn,
|
||||
const casCtx & ctxIn, bool scanOnIn, double asyncDelay );
|
||||
virtual ~exAsyncCreateIO ();
|
||||
private:
|
||||
pvInfo & pvi;
|
||||
epicsTimer & timer;
|
||||
exServer & cas;
|
||||
double asyncDelay;
|
||||
bool scanOn;
|
||||
expireStatus expire ( const epicsTime & currentTime );
|
||||
exAsyncCreateIO & operator = ( const exAsyncCreateIO & );
|
||||
exAsyncCreateIO ( const exAsyncCreateIO & );
|
||||
};
|
||||
|
||||
inline pvInfo::pvInfo ( double scanPeriodIn, const char *pNameIn, const char *pUnitsIn,
|
||||
aitFloat32 hoprIn, aitFloat32 loprIn,
|
||||
double hihiIn, double highIn, double lowIn, double loloIn,
|
||||
aitEnum typeIn, excasIoType ioTypeIn,
|
||||
unsigned countIn )
|
||||
/*,
|
||||
aitEnum hhsvIn, aitEnum llsvIn, aitEnum hsvIn, aitEnum lsvIn,
|
||||
double hystIn, double adelIn, double mdelIn) */:
|
||||
|
||||
scanPeriod ( scanPeriodIn ), /*pName ( pNameIn ), pUnits ( pUnitsIn),*/
|
||||
hopr ( hoprIn ), lopr ( loprIn ),
|
||||
hihi (hihiIn), high (highIn), low (lowIn), lolo (loloIn),
|
||||
type ( typeIn ),
|
||||
ioType ( ioTypeIn ), elementCount ( countIn ),
|
||||
pPV ( 0 )
|
||||
{
|
||||
// NAME
|
||||
if ( pNameIn ) {
|
||||
pName = new char[ strlen(pNameIn) ];
|
||||
if ( pName )
|
||||
memcpy (pName, pNameIn, strlen(pNameIn) +1 );
|
||||
}
|
||||
else
|
||||
pName = 0;
|
||||
// EGU
|
||||
if ( pUnitsIn ) {
|
||||
pUnits = new char[ strlen(pUnitsIn) ];
|
||||
if ( pUnits )
|
||||
memcpy (pUnits, pUnitsIn, strlen(pUnitsIn) +1 );
|
||||
}
|
||||
else
|
||||
pUnits = 0;
|
||||
|
||||
//buffer = 0;
|
||||
//btd = 0;
|
||||
prec = 4;
|
||||
|
||||
//have a look at dbStatic/alarm.h
|
||||
/*epicsSevNone = NO_ALARM,
|
||||
epicsSevMinor,
|
||||
epicsSevMajor,
|
||||
epicsSevInvalid,
|
||||
ALARM_NSEV
|
||||
*/
|
||||
|
||||
acks = (aitEnum) 0; // menuAlarmSevr start without alarms NO CONFIG
|
||||
ackt = (aitEnum) 0; // menuYesNo initial == YES (see menuYesNo.h in /include) YES = 1
|
||||
|
||||
// load it with default values, but there are no default values... ?!?!
|
||||
//menuAlarmSevr
|
||||
hhsv = (aitEnum) 2; // tobe configured - alarm
|
||||
llsv = (aitEnum) 2; // tobe configured - alarm
|
||||
hsv = (aitEnum) 1; // tobe configured - alarm
|
||||
lsv = (aitEnum) 1; // tobe configured - alarm
|
||||
|
||||
//all double
|
||||
lalm = 0.0 ;
|
||||
hyst = 0.0001; // tobe configured - alarm
|
||||
alst = 0.00;
|
||||
adel = 0.000000001; // tobe configured - log
|
||||
mlst = 0.00;
|
||||
mdel = 0.001; // tobe configured - value
|
||||
}
|
||||
|
||||
inline pvInfo::pvInfo ( double scanPeriodIn, const char * pNameIn, const char * pUnitsIn,
|
||||
aitFloat32 hoprIn, aitFloat32 loprIn,
|
||||
double hihiIn, double highIn, double lowIn, double loloIn,
|
||||
aitEnum hhsvIn, aitEnum llsvIn, aitEnum hsvIn, aitEnum lsvIn,
|
||||
/*double lalmIn,*/ double hystIn,
|
||||
/*double alstIn,*/ double adelIn, /*double mlstIn,*/ double mdelIn,
|
||||
aitEnum acksIn, aitEnum acktIn, int precIn,
|
||||
aitEnum typeIn, excasIoType ioTypeIn, unsigned countIn ) :
|
||||
|
||||
scanPeriod ( scanPeriodIn ), /*pName ( pNameIn ), pUnits ( pUnitsIn),*/
|
||||
hopr ( hoprIn ), lopr ( loprIn ),
|
||||
hihi (hihiIn), high (highIn), low (lowIn), lolo (loloIn),
|
||||
hhsv (hhsvIn), llsv (llsvIn), hsv (hsvIn), lsv (lsvIn),
|
||||
lalm ( 0.0 ), hyst (hystIn),
|
||||
alst ( 0.0 ), adel (adelIn), mlst ( 0.0 ), mdel (mdelIn),
|
||||
acks (acksIn), ackt (acktIn), prec (precIn),
|
||||
type ( typeIn ), ioType ( ioTypeIn ), elementCount ( countIn ),
|
||||
pPV ( 0 )
|
||||
{
|
||||
// NAME
|
||||
if ( pNameIn ) {
|
||||
pName = new char[ strlen(pNameIn) ];
|
||||
if ( pName )
|
||||
memcpy (pName, pNameIn, strlen(pNameIn) +1 );
|
||||
}
|
||||
else
|
||||
pName = 0;
|
||||
// EGU
|
||||
if ( pUnitsIn ) {
|
||||
pUnits = new char[ strlen(pUnitsIn) ];
|
||||
if ( pUnits )
|
||||
memcpy (pUnits, pUnitsIn, strlen(pUnitsIn) +1 );
|
||||
}
|
||||
else
|
||||
pUnits = 0;
|
||||
|
||||
// stuff to be removed
|
||||
//buffer = 0;
|
||||
// btd = 0;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// for use when MSVC++ will not build a default copy constructor
|
||||
// for this class
|
||||
//
|
||||
inline pvInfo::pvInfo ( const pvInfo & copyIn ) :
|
||||
|
||||
scanPeriod ( copyIn.scanPeriod ), /*pName ( copyIn.pName ), pUnits ( copyIn.pUnits ),*/
|
||||
hopr ( copyIn.hopr ), lopr ( copyIn.lopr ),
|
||||
hihi ( copyIn.hihi ), high ( copyIn.high ),
|
||||
low ( copyIn.low ), lolo ( copyIn.lolo ), type ( copyIn.type ),
|
||||
ioType ( copyIn.ioType ), elementCount ( copyIn.elementCount ),
|
||||
pPV ( copyIn.pPV )
|
||||
{
|
||||
// buffer = copyIn.buffer;
|
||||
// btd = copyIn.btd;
|
||||
prec = copyIn.prec;
|
||||
|
||||
acks = copyIn.acks;
|
||||
ackt = copyIn.ackt;
|
||||
|
||||
hhsv = copyIn.hhsv;
|
||||
llsv = copyIn.llsv;
|
||||
hsv = copyIn.hsv;
|
||||
lsv = copyIn.lsv;
|
||||
|
||||
//all double
|
||||
lalm = copyIn.lalm ;
|
||||
hyst = copyIn.hyst;
|
||||
alst = copyIn.alst;
|
||||
adel = copyIn.adel;
|
||||
mlst = copyIn.mlst;
|
||||
mdel = copyIn.mdel;
|
||||
|
||||
if ( copyIn.pName ) {
|
||||
pName = new char[ strlen(copyIn.pName) ];
|
||||
if ( pName )
|
||||
memcpy( pName, copyIn.pName, strlen(copyIn.pName) +1 );
|
||||
}
|
||||
|
||||
if ( copyIn.pUnits ) {
|
||||
pUnits = new char[ strlen(copyIn.pUnits) ];
|
||||
if ( pUnits )
|
||||
memcpy( pUnits, copyIn.pUnits, strlen(copyIn.pUnits) +1 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
inline pvInfo::~pvInfo ()
|
||||
{
|
||||
//
|
||||
// GDD cleanup gets rid of GDD's that are in use
|
||||
// by the PV before the file scope destructer for
|
||||
// this class runs here so this does not seem to
|
||||
// be a good idea
|
||||
//
|
||||
//if ( this->pPV != NULL ) {
|
||||
// delete this->pPV;
|
||||
//}
|
||||
|
||||
// NAME
|
||||
if ( pName )
|
||||
delete [] pName;
|
||||
// EGU
|
||||
if ( pUnits )
|
||||
delete [] pUnits;
|
||||
}
|
||||
|
||||
inline void pvInfo::deletePV ()
|
||||
{
|
||||
if ( this->pPV != NULL ) {
|
||||
delete this->pPV;
|
||||
}
|
||||
}
|
||||
|
||||
inline double pvInfo::getScanPeriod () const
|
||||
{
|
||||
return this->scanPeriod;
|
||||
}
|
||||
|
||||
inline const char *pvInfo::getName () const
|
||||
{
|
||||
return this->pName;
|
||||
}
|
||||
|
||||
inline const char *pvInfo::getUnits () const
|
||||
{
|
||||
return this->pUnits;
|
||||
}
|
||||
|
||||
inline double pvInfo::getHopr () const
|
||||
{
|
||||
return this->hopr;
|
||||
}
|
||||
|
||||
inline double pvInfo::getLopr () const
|
||||
{
|
||||
return this->lopr;
|
||||
}
|
||||
|
||||
inline double pvInfo::getHihi () const
|
||||
{
|
||||
return this->hihi;
|
||||
}
|
||||
|
||||
inline double pvInfo::getHigh () const
|
||||
{
|
||||
return this->high;
|
||||
}
|
||||
|
||||
inline double pvInfo::getLow () const
|
||||
{
|
||||
return this->low;
|
||||
}
|
||||
|
||||
inline double pvInfo::getLolo () const
|
||||
{
|
||||
return this->lolo;
|
||||
}
|
||||
|
||||
inline aitEnum pvInfo::getType () const
|
||||
{
|
||||
return this->type;
|
||||
}
|
||||
|
||||
inline excasIoType pvInfo::getIOType () const
|
||||
{
|
||||
return this->ioType;
|
||||
}
|
||||
|
||||
inline unsigned pvInfo::getElementCount () const
|
||||
{
|
||||
return this->elementCount;
|
||||
}
|
||||
|
||||
inline void pvInfo::unlinkPV ()
|
||||
{
|
||||
this->pPV = NULL;
|
||||
}
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
inline pvEntry::pvEntry ( pvInfo & infoIn, exServer & casIn,
|
||||
const char * pAliasName ) :
|
||||
stringId ( pAliasName ), info ( infoIn ), cas ( casIn )
|
||||
{
|
||||
assert ( this->stringId::resourceName() != NULL );
|
||||
}
|
||||
|
||||
inline pvEntry::~pvEntry ()
|
||||
{
|
||||
this->cas.removeAliasName ( *this );
|
||||
}
|
||||
|
||||
inline void pvEntry::destroy ()
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
inline void exServer::removeAliasName ( pvEntry & entry )
|
||||
{
|
||||
pvEntry * pE;
|
||||
pE = this->stringResTbl.remove ( entry );
|
||||
assert ( pE == &entry );
|
||||
}
|
||||
|
||||
inline double exPV::getScanPeriod ()
|
||||
{
|
||||
double curPeriod = this->info.getScanPeriod ();
|
||||
if ( ! this->interest ) {
|
||||
curPeriod *= 10.0L;
|
||||
}
|
||||
return curPeriod;
|
||||
}
|
||||
|
||||
inline caStatus exPV::readNoCtx ( smartGDDPointer pProtoIn )
|
||||
{
|
||||
return this->ft.read ( *this, *pProtoIn );
|
||||
}
|
||||
|
||||
inline const pvInfo & exPV::getPVInfo ()
|
||||
{
|
||||
return this->info;
|
||||
}
|
||||
|
||||
inline const char * exPV::getName () const
|
||||
{
|
||||
return this->info.getName();
|
||||
}
|
||||
|
||||
inline void exServer::removeIO()
|
||||
{
|
||||
if ( this->simultAsychIOCount > 0u ) {
|
||||
this->simultAsychIOCount--;
|
||||
}
|
||||
else {
|
||||
fprintf ( stderr,
|
||||
"simultAsychIOCount underflow?\n" );
|
||||
}
|
||||
}
|
||||
|
||||
inline unsigned exServer :: maxSimultAsyncIO () const
|
||||
{
|
||||
return this->_maxSimultAsyncIO;
|
||||
}
|
||||
|
||||
inline exChannel::exChannel ( const casCtx & ctxIn ) :
|
||||
casChannel(ctxIn)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -0,0 +1,274 @@
|
||||
/*************************************************************************\
|
||||
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
* National Laboratory.
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE Versions 3.13.7
|
||||
* and higher are distributed subject to a Software License Agreement found
|
||||
* in file LICENSE-EPICS that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
#include "exServer.h"
|
||||
#include "gddApps.h"
|
||||
|
||||
#define myPI 3.14159265358979323846
|
||||
|
||||
//
|
||||
// SUN C++ does not have RAND_MAX yet
|
||||
//
|
||||
#if ! defined(RAND_MAX)
|
||||
//
|
||||
// Apparently SUN C++ is using the SYSV version of rand
|
||||
//
|
||||
# if 0
|
||||
# define RAND_MAX INT_MAX
|
||||
# else
|
||||
# define RAND_MAX SHRT_MAX
|
||||
# endif
|
||||
#endif
|
||||
|
||||
//
|
||||
// special gddDestructor guarantees same form of new and delete
|
||||
//
|
||||
class exVecDestructor: public gddDestructor {
|
||||
virtual void run (void *);
|
||||
};
|
||||
|
||||
//
|
||||
// exVectorPV::maxDimension()
|
||||
//
|
||||
unsigned exVectorPV::maxDimension() const
|
||||
{
|
||||
return 1u;
|
||||
}
|
||||
|
||||
//
|
||||
// exVectorPV::maxBound()
|
||||
//
|
||||
aitIndex exVectorPV::maxBound (unsigned dimension) const // X aCC 361
|
||||
{
|
||||
if (dimension==0u) {
|
||||
return this->info.getElementCount();
|
||||
}
|
||||
else {
|
||||
return 0u;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// exVectorPV::scan
|
||||
//
|
||||
void exVectorPV::scan()
|
||||
{
|
||||
caStatus status;
|
||||
double radians;
|
||||
smartGDDPointer pDD;
|
||||
aitFloat32 *pF, *pFE;
|
||||
const aitFloat32 *pCF;
|
||||
float newValue;
|
||||
float limit;
|
||||
exVecDestructor *pDest;
|
||||
int gddStatus;
|
||||
|
||||
//
|
||||
// update current time (so we are not required to do
|
||||
// this every time that we write the PV which impacts
|
||||
// throughput under sunos4 because gettimeofday() is
|
||||
// slow)
|
||||
//
|
||||
this->currentTime = epicsTime::getCurrent();
|
||||
|
||||
pDD = new gddAtomic (gddAppType_value, aitEnumFloat64,
|
||||
1u, this->info.getElementCount());
|
||||
if ( ! pDD.valid () ) {
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// smart pointer class manages reference count after this point
|
||||
//
|
||||
gddStatus = pDD->unreference();
|
||||
assert (!gddStatus);
|
||||
|
||||
//
|
||||
// allocate array buffer
|
||||
//
|
||||
pF = new aitFloat32 [this->info.getElementCount()];
|
||||
if (!pF) {
|
||||
return;
|
||||
}
|
||||
|
||||
pDest = new exVecDestructor;
|
||||
if (!pDest) {
|
||||
delete [] pF;
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// install the buffer into the DD
|
||||
// (do this before we increment pF)
|
||||
//
|
||||
pDD->putRef(pF, pDest);
|
||||
|
||||
//
|
||||
// double check for reasonable bounds on the
|
||||
// current value
|
||||
//
|
||||
pCF=NULL;
|
||||
if ( this->pValue.valid () ) {
|
||||
if (this->pValue->dimension()==1u) {
|
||||
const gddBounds *pB = this->pValue->getBounds();
|
||||
if (pB[0u].size()==this->info.getElementCount()) {
|
||||
pCF = *this->pValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pFE = &pF[this->info.getElementCount()];
|
||||
while (pF<pFE) {
|
||||
radians = (rand () * 2.0 * myPI)/RAND_MAX;
|
||||
if (pCF) {
|
||||
newValue = *pCF++;
|
||||
}
|
||||
else {
|
||||
newValue = 0.0f;
|
||||
}
|
||||
newValue += (float) (sin (radians) / 10.0);
|
||||
limit = (float) this->info.getHopr();
|
||||
newValue = tsMin (newValue, limit);
|
||||
limit = (float) this->info.getLopr();
|
||||
newValue = tsMax (newValue, limit);
|
||||
*(pF++) = newValue;
|
||||
}
|
||||
|
||||
aitTimeStamp gddts = this->currentTime;
|
||||
pDD->setTimeStamp ( & gddts );
|
||||
|
||||
// antonio code
|
||||
if ( (this->info.getScanPeriod() > 0.0) ) {
|
||||
status = this->update ( *pDD, true, false );
|
||||
if (status!=S_casApp_success) {
|
||||
errMessage ( status, "vector scan update failed\n" );
|
||||
}
|
||||
}
|
||||
|
||||
// delete &((gddAtomic ) *pDD);
|
||||
//delete &((gdd) *pDD);
|
||||
}
|
||||
|
||||
//
|
||||
// exVectorPV::updateValue ()
|
||||
//
|
||||
// NOTES:
|
||||
// 1) This should have a test which verifies that the
|
||||
// incoming value in all of its various data types can
|
||||
// be translated into a real number?
|
||||
// 2) We prefer to unreference the old PV value here and
|
||||
// reference the incomming value because this will
|
||||
// result in value change events each retaining an
|
||||
// independent value on the event queue. With large arrays
|
||||
// this may result in too much memory consumtion on
|
||||
// the event queue.
|
||||
//
|
||||
caStatus exVectorPV::updateValue ( const gdd & value )
|
||||
{
|
||||
|
||||
//
|
||||
// Check bounds of incoming request
|
||||
// (and see if we are replacing all elements -
|
||||
// replaceOk==true)
|
||||
//
|
||||
// Perhaps much of this is unnecessary since the
|
||||
// server lib checks the bounds of all requests
|
||||
//
|
||||
if ( value.isAtomic()) {
|
||||
if ( value.dimension() != 1u ) {
|
||||
return S_casApp_badDimension;
|
||||
}
|
||||
const gddBounds* pb = value.getBounds ();
|
||||
if ( pb[0u].first() != 0u ) {
|
||||
return S_casApp_outOfBounds;
|
||||
}
|
||||
else if ( pb[0u].size() > this->info.getElementCount() ) {
|
||||
return S_casApp_outOfBounds;
|
||||
}
|
||||
}
|
||||
else if ( ! value.isScalar() ) {
|
||||
//
|
||||
// no containers
|
||||
//
|
||||
return S_casApp_outOfBounds;
|
||||
}
|
||||
|
||||
//
|
||||
// Create a new array data descriptor
|
||||
// (so that old values that may be referenced on the
|
||||
// event queue are not replaced)
|
||||
//
|
||||
smartGDDPointer pNewValue ( new gddAtomic ( gddAppType_value, aitEnumFloat64,
|
||||
1u, this->info.getElementCount() ) );
|
||||
if ( ! pNewValue.valid() ) {
|
||||
return S_casApp_noMemory;
|
||||
}
|
||||
|
||||
//
|
||||
// smart pointer class takes care of the reference count
|
||||
// from here down
|
||||
//
|
||||
gddStatus gdds = pNewValue->unreference( );
|
||||
assert ( ! gdds );
|
||||
|
||||
//
|
||||
// allocate array buffer
|
||||
//
|
||||
aitFloat64 * pF = new aitFloat64 [this->info.getElementCount()];
|
||||
if (!pF) {
|
||||
return S_casApp_noMemory;
|
||||
}
|
||||
|
||||
//
|
||||
// Install (and initialize) array buffer
|
||||
// if no old values exist
|
||||
//
|
||||
unsigned count = this->info.getElementCount();
|
||||
for ( unsigned i = 0u; i < count; i++ ) {
|
||||
pF[i] = 0.0f;
|
||||
}
|
||||
|
||||
exVecDestructor * pDest = new exVecDestructor;
|
||||
if (!pDest) {
|
||||
delete [] pF;
|
||||
return S_casApp_noMemory;
|
||||
}
|
||||
|
||||
//
|
||||
// install the buffer into the DD
|
||||
// (do this before we increment pF)
|
||||
//
|
||||
pNewValue->putRef ( pF, pDest );
|
||||
|
||||
//
|
||||
// copy in the values that they are writing
|
||||
//
|
||||
gdds = pNewValue->put( & value );
|
||||
if ( gdds ) {
|
||||
return S_cas_noConvert;
|
||||
}
|
||||
|
||||
this->pValue = pNewValue;
|
||||
|
||||
|
||||
|
||||
return S_casApp_success;
|
||||
}
|
||||
|
||||
//
|
||||
// exVecDestructor::run()
|
||||
//
|
||||
// special gddDestructor guarantees same form of new and delete
|
||||
//
|
||||
void exVecDestructor::run ( void *pUntyped )
|
||||
{
|
||||
aitFloat32 * pf = reinterpret_cast < aitFloat32 * > ( pUntyped );
|
||||
delete [] pf;
|
||||
}
|
||||
1461
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSLib/test.cfg
Normal file
1461
epics/css/sys-mng-opi/CSS/MARTe/Interfaces/EPICSLib/test.cfg
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
||||
Simpliest way to test is to use netcat
|
||||
nc localhost 10010 < MARTe-ConfigurationHandler.cfg
|
||||
|
||||
@@ -0,0 +1,586 @@
|
||||
Version = "$Id: MARTe-WaterTank.cfg,v 1.5 2010/04/20 15:42:02 ppcc_dev Exp $"
|
||||
LoggerAddress = "localhost"
|
||||
DefaultCPUs = 1
|
||||
+WEB = {
|
||||
Class = HttpGroupResource
|
||||
+BROWSE = {
|
||||
Title = "Http Object Browser"
|
||||
Class = HttpGCRCBrowser
|
||||
AddReference = {MARTe StateMachine OBJBROWSE THRBROWSE CFGUpload HTTPSignalServer MatlabSignalServer}
|
||||
}
|
||||
+RGRAPH_LIB_DIR = {
|
||||
Class = HttpDirectoryResource
|
||||
BaseDir = "../../3rdPartyLibs/RGraph/libraries"
|
||||
}
|
||||
}
|
||||
+HTTPSERVER = {
|
||||
Class = HttpService
|
||||
Port = 8084
|
||||
HttpRelayURL = "ignore.me:1234"
|
||||
VerboseLevel = 10
|
||||
Root = WEB
|
||||
}
|
||||
+OBJBROWSE = {
|
||||
Class = HttpClassListResource
|
||||
}
|
||||
+THRBROWSE = {
|
||||
Class = HttpThreadListResource
|
||||
}
|
||||
+MatlabSignalServer = {
|
||||
Class = MATLABHandler
|
||||
}
|
||||
+HTTPSignalServer={
|
||||
Class = SignalServer
|
||||
}
|
||||
+CFGUpload = {
|
||||
Class = CFGUploader
|
||||
}
|
||||
+TCPConfigurationHandler = {
|
||||
Class = TCPConfigurationHandler
|
||||
ServerPort = 10010
|
||||
CPUMask = 1
|
||||
MARTeLocation = MARTe
|
||||
}
|
||||
+StateMachine = {
|
||||
Class = StateMachine
|
||||
VerboseLevel = 10
|
||||
+INITIAL = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x0
|
||||
+START = {
|
||||
Class = StateMachineEvent
|
||||
NextState = IDLE
|
||||
Value = START
|
||||
+STARTALL = {
|
||||
Class = MessageDeliveryRequest
|
||||
Sender = StateMachine
|
||||
Destinations = "HTTPSERVER MARTe"
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Content = START
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+IDLE = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x500
|
||||
+PULSE_SETUP_COMPLETED = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x701
|
||||
NextState = WAITING_FOR_TRIGGER
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = PREPULSECHECK
|
||||
}
|
||||
}
|
||||
+UPDATE_MSS = {
|
||||
Class = MessageEnvelope
|
||||
Destination = MatlabSignalServer
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = AUTODETECT
|
||||
}
|
||||
}
|
||||
+UPDATE_SS = {
|
||||
Class = MessageEnvelope
|
||||
Destination = HTTPSignalServer
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = AUTODETECT
|
||||
}
|
||||
}
|
||||
}
|
||||
+INHIBIT = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x704
|
||||
NextState = INHIBIT
|
||||
}
|
||||
+ACTIVATE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x705
|
||||
NextState = SAMESTATE
|
||||
}
|
||||
+UNRECOVERABLE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x776
|
||||
NextState = UNRECOVERABLE
|
||||
}
|
||||
+CONFIG_ERROR = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x777
|
||||
NextState = CONFIG_ERROR
|
||||
}
|
||||
+CONFIG_OK = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x778
|
||||
NextState = SAMESTATE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = COULD.BE.A.MIMIC
|
||||
+SENDSTATE = {
|
||||
Class = Message
|
||||
Code = 0x500
|
||||
}
|
||||
}
|
||||
}
|
||||
+STOP = {
|
||||
Class = StateMachineEvent
|
||||
NextState = IDLE
|
||||
Value = STOP
|
||||
Code = 0x005
|
||||
+STOPALL = {
|
||||
Class = MessageDeliveryRequest
|
||||
Sender = StateMachine
|
||||
Destinations = "HTTPSERVER MARTe"
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Content = STOP
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+WAITING_FOR_TRIGGER = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x504
|
||||
+TRIGGER = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x708
|
||||
NextState = PULSING
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = PULSESTART
|
||||
}
|
||||
}
|
||||
}
|
||||
+ABORT = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x702
|
||||
NextState = IDLE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = PULSESTOP
|
||||
}
|
||||
}
|
||||
}
|
||||
+COLLECTION_COMPLETED = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x703
|
||||
NextState = COMM_ERROR
|
||||
}
|
||||
}
|
||||
+PULSING = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x505
|
||||
+ENTER = {
|
||||
Class = MessageEnvelope
|
||||
Destination = COULD.BE.A.MIMIC
|
||||
+SENDSTATE = {
|
||||
Class = Message
|
||||
}
|
||||
}
|
||||
+ABORT = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x702
|
||||
NextState = IDLE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = PULSESTOP
|
||||
}
|
||||
}
|
||||
}
|
||||
+END_PULSE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x709
|
||||
NextState = POST_PULSE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = PULSESTOP
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+POST_PULSE = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x507
|
||||
+ENTER = {
|
||||
Class = MessageEnvelope
|
||||
Destination = COULD.BE.A.MIMIC
|
||||
+SENDSTATE = {
|
||||
Class = Message
|
||||
}
|
||||
}
|
||||
+COLLECTION_COMPLETED = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x703
|
||||
NextState = IDLE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = COLLECTIONCOMPLETED
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+INHIBIT = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x508
|
||||
+ACTIVATE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x705
|
||||
NextState = IDLE
|
||||
}
|
||||
}
|
||||
+ERROR = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x601
|
||||
+ACTIVATE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x705
|
||||
NextState = IDLE
|
||||
}
|
||||
+COLLECTION_COMPLETED = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x703
|
||||
NextState = IDLE
|
||||
}
|
||||
}
|
||||
+CONFIG_ERROR = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x601
|
||||
+ENTER = {
|
||||
Class = MessageEnvelope
|
||||
Destination = COULD.BE.A.MIMIC
|
||||
+SENDSTATE = {
|
||||
Class = Message
|
||||
}
|
||||
}
|
||||
+ACTIVATE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x705
|
||||
NextState = IDLE
|
||||
}
|
||||
+CONFIG_OK = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x778
|
||||
NextState = IDLE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = COULD.BE.A.MIMIC
|
||||
+SENDSTATE = {
|
||||
Class = Message
|
||||
Code = 0x500
|
||||
}
|
||||
}
|
||||
}
|
||||
+CONFIG_ERROR = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x777
|
||||
NextState = CONFIG_ERROR
|
||||
}
|
||||
}
|
||||
+UNRECOVERABLE = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x601
|
||||
+DEFAULT = {
|
||||
Class = StateMachineEvent
|
||||
UserCode = 0
|
||||
NextState = UNRECOVERABLE
|
||||
}
|
||||
}
|
||||
+COMM_ERROR = {
|
||||
StateCode = 0x601
|
||||
Class = StateMachineState
|
||||
+ABORT = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x702
|
||||
NextState = SAMESTATE
|
||||
}
|
||||
}
|
||||
+DEFAULT = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x601
|
||||
+ABORT = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x702
|
||||
NextState = IDLE
|
||||
}
|
||||
+TRIGGER = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x708
|
||||
NextState = SAMESTATE
|
||||
}
|
||||
+END_PULSE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x709
|
||||
NextState = SAMESTATE
|
||||
}
|
||||
}
|
||||
}
|
||||
+MARTeMenu = {
|
||||
Class = MarteSupLib::MARTeMenu
|
||||
Title = "MARTe Menu"
|
||||
+MenuA = {
|
||||
Class = MenuContainer
|
||||
Title = "State Machine"
|
||||
+ABORT = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = Abort
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x702
|
||||
Content = ABORT
|
||||
}
|
||||
}
|
||||
}
|
||||
+INHIBIT = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = Inhibit
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x704
|
||||
Content = Inhibit
|
||||
}
|
||||
}
|
||||
}
|
||||
+ACTIVATE = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = Activate
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x705
|
||||
Content = Activate
|
||||
}
|
||||
}
|
||||
}
|
||||
+PULSESETUPCOMPLETE = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = "Pulse Setup Complete"
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x701
|
||||
Content = WAITING_FOR_TRIGGER
|
||||
}
|
||||
}
|
||||
}
|
||||
+TRIGGER = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = "Pulse Start"
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x708
|
||||
Content = TRIGGER
|
||||
}
|
||||
}
|
||||
}
|
||||
+END_PULSE = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = "Pulse End"
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x709
|
||||
Content = END_PULSE
|
||||
}
|
||||
}
|
||||
}
|
||||
+COLLECTIONCOMPLETED = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = "Collection Completed"
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x703
|
||||
Content = POSTPULSE
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
AddReference = MARTe.MARTe
|
||||
}
|
||||
+MARTe = {
|
||||
Class = MARTeContainer
|
||||
StateMachineName = StateMachine
|
||||
Level1Name = LEVEL1
|
||||
MenuContainerName = MARTe
|
||||
+MARTe = {
|
||||
Class = MenuContainer
|
||||
}
|
||||
+DriverPool = {
|
||||
Class = GCReferenceContainer
|
||||
+TimerBoard = {
|
||||
Class = GenericTimerDrv
|
||||
NumberOfInputs = 2
|
||||
NumberOfOutputs = 0
|
||||
TimerUsecPeriod = 10000
|
||||
SynchronizationMethod = Synchronizing
|
||||
CPUMask = 1
|
||||
}
|
||||
}
|
||||
+Messages = {
|
||||
Class = GCReferenceContainer
|
||||
+FatalErrorMessage = {
|
||||
Class = MessageDeliveryRequest
|
||||
Destinations = StateMachine
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Code = 0x776
|
||||
Content = UNRECOVERABLE
|
||||
}
|
||||
}
|
||||
+ConfigLoadErrorMessage = {
|
||||
Class = MessageDeliveryRequest
|
||||
Destinations = StateMachine
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Code = 0x777
|
||||
Content = CONFIG_ERROR
|
||||
}
|
||||
}
|
||||
+ConfigLoadOKMessage = {
|
||||
Class = MessageDeliveryRequest
|
||||
Destinations = StateMachine
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Code = 0x778
|
||||
Content = CONFIG_OK
|
||||
}
|
||||
}
|
||||
+SafetyErrorMessage = {
|
||||
Class = MessageDeliveryRequest
|
||||
Destinations = MARTe
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Content = ERROR
|
||||
}
|
||||
}
|
||||
}
|
||||
+ExternalTimeTriggeringService = {
|
||||
Class = InterruptDrivenTTS
|
||||
TsOnlineUsecPeriod = 10000
|
||||
TsOnlineUsecPhase = 0
|
||||
TsOfflineUsecPeriod = 10000
|
||||
TsOfflineUsecPhase = 0
|
||||
TimeModule = {
|
||||
BoardName = TimerBoard
|
||||
}
|
||||
}
|
||||
+Thread_1 = {
|
||||
Class = RealTimeThread
|
||||
ThreadPriority = 28
|
||||
RunOnCPU = 2
|
||||
RTStatusChangeMsecTimeout = 1000
|
||||
SMStatusChangeMsecTimeout = 1000
|
||||
OfflineSemaphoreTimeout = 50
|
||||
TriggeringServiceName = MARTe.ExternalTimeTriggeringService
|
||||
SafetyMsecSleep = 1
|
||||
+DDB = {
|
||||
Class = DDB
|
||||
}
|
||||
+Timer = {
|
||||
Class = IOGAMs::TimeInputGAM
|
||||
TriggeringServiceName = ExternalTimeTriggeringService
|
||||
BoardName = TimerBoard
|
||||
Signals = {
|
||||
time = {
|
||||
SignalName = usecTime
|
||||
SignalType = uint32
|
||||
}
|
||||
counter = {
|
||||
SignalName = counter
|
||||
SignalType = int32
|
||||
}
|
||||
}
|
||||
}
|
||||
+Statistic = {
|
||||
Class = WebStatisticGAM
|
||||
Verbose = True
|
||||
FrequencyOfVerbose = 2000000
|
||||
Signals = {
|
||||
SignalU = {
|
||||
SignalName = usecTime
|
||||
SignalType = uint32
|
||||
}
|
||||
Signal0 = {
|
||||
SignalName = CycleUsecTime
|
||||
SignalType = float
|
||||
}
|
||||
Signal9 = {
|
||||
SignalName = StatisticAbsoluteUsecTime
|
||||
SignalType = float
|
||||
}
|
||||
Signal15 = {
|
||||
SignalName = StatisticRelativeUsecTime
|
||||
SignalType = float
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Online = "Timer Statistic"
|
||||
Offline = "Timer Statistic"
|
||||
}
|
||||
}
|
||||
ReloadAll = 0
|
||||
@@ -0,0 +1,78 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
#############################################################
|
||||
#Start-up script for the MARTe WaterTank example
|
||||
#!/bin/sh
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Please specify the location of the configuration file"
|
||||
exit
|
||||
else
|
||||
echo "Going to start MARTe with the configuration specified in: " $1
|
||||
fi
|
||||
|
||||
target=`uname`
|
||||
case ${target} in
|
||||
Darwin)
|
||||
TARGET=macosx
|
||||
;;
|
||||
SunOS)
|
||||
TARGET=solaris
|
||||
;;
|
||||
*)
|
||||
TARGET=linux
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Target is $TARGET"
|
||||
|
||||
BASEDIR=/DCS/Develop/DCS3/marte-dcs/marte/Base/trunk
|
||||
|
||||
CODE_DIRECTORY=$BASEDIR
|
||||
LD_LIBRARY_PATH=.:$CODE_DIRECTORY/BaseLib2/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/MARTe/MARTeSupportLib/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/IOGAMs/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/IOGAMs/${TARGET}Timer/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/IOGAMs/GenericTimerDriver/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/GAMs/WebStatisticGAM/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/Interfaces/HTTP/CFGUploader/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/Interfaces/HTTP/SignalHandler/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/Interfaces/HTTP/MATLABHandler/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/Interfaces/HTTP/FlotPlot/${TARGET}/
|
||||
#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/Examples/TCPConfigurationHandler/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./${TARGET}/
|
||||
|
||||
|
||||
if [ ${TARGET} == "macosx" ]; then
|
||||
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$LD_LIBRARY_PATH
|
||||
echo $DYLD_LIBRARY_PATH
|
||||
else
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
|
||||
echo $LD_LIBRARY_PATH
|
||||
fi
|
||||
|
||||
$CODE_DIRECTORY/MARTe/${TARGET}/MARTe.ex $1
|
||||
|
||||
#cgdb --args $CODE_DIRECTORY/MARTe/${TARGET}/MARTe.ex $1
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
OBJSX=
|
||||
BASEDIR=/opt/MARTe
|
||||
MAKEDEFAULTDIR=$(BASEDIR)/MakeDefaults
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET)
|
||||
|
||||
CFLAGS+= -I.
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level0
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level1
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level2
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level3
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level4
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level5
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level6
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/LoggerService
|
||||
CFLAGS+= -I$(BASEDIR)/MARTe/MARTeSupportLib
|
||||
|
||||
all: $(OBJS) \
|
||||
$(TARGET)/TCPConfigurationHandler$(DLLEXT)
|
||||
echo $(OBJS)
|
||||
|
||||
include depends.$(TARGET)
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET)
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
OBJSX=
|
||||
BASEDIR=/DCS/Develop/DCS3/marte-dcs/marte/Base/trunk
|
||||
MAKEDEFAULTDIR=$(BASEDIR)/MakeDefaults
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET)
|
||||
|
||||
CFLAGS+= -I.
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level0
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level1
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level2
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level3
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level4
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level5
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level6
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/LoggerService
|
||||
CFLAGS+= -I$(BASEDIR)/MARTe/MARTeSupportLib
|
||||
|
||||
all: $(OBJS) \
|
||||
$(TARGET)/TCPConfigurationHandler$(DLLEXT)
|
||||
echo $(OBJS)
|
||||
|
||||
include depends.$(TARGET)
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET)
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.linux 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
TARGET=linux
|
||||
|
||||
include Makefile.inc
|
||||
|
||||
LIBRARIES += -L$(BASEDIR)/BaseLib2/$(TARGET) -lBaseLib2 -L$(BASEDIR)/MARTe/MARTeSupportLib/$(TARGET) -lMARTeSupLib
|
||||
|
||||
OPTIM=
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.linux 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
TARGET=linux
|
||||
|
||||
BASEDIR=/DCS/Develop/DCS3/marte-dcs/marte/Base/trunk
|
||||
|
||||
include Makefile.inc
|
||||
|
||||
LIBRARIES += -L$(BASEDIR)/BaseLib2/$(TARGET) -lBaseLib2 -L$(BASEDIR)/MARTe/MARTeSupportLib/$(TARGET) -lMARTeSupLib
|
||||
|
||||
OPTIM=
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id: MessageTriggeringTimeService.h 3 2012-01-15 16:26:07Z aneto $
|
||||
*
|
||||
**/
|
||||
|
||||
#include "TCPConfigurationHandler.h"
|
||||
#include "MessageDispatcher.h"
|
||||
|
||||
void ConnectionHandlerFn(TCPConfigurationHandler &tcpmh){
|
||||
while(tcpmh.keepAlive){
|
||||
tcpmh.ConnectionHandler();
|
||||
CStaticAssertErrorCondition(FatalError, "Lost server connection");
|
||||
if(tcpmh.keepAlive){
|
||||
CStaticAssertErrorCondition(FatalError, "Retrying in 10 seconds");
|
||||
SleepSec(10.0);
|
||||
}
|
||||
}
|
||||
//Just to signal that we have shutdown
|
||||
tcpmh.keepAlive = True;
|
||||
}
|
||||
|
||||
TCPConfigurationHandler::TCPConfigurationHandler(){
|
||||
serverPort = -1;
|
||||
serverTID = 0;
|
||||
cpuMask = 0;
|
||||
keepAlive = False;
|
||||
msgTimeout = TTInfiniteWait;
|
||||
}
|
||||
|
||||
TCPConfigurationHandler::~TCPConfigurationHandler(){
|
||||
keepAlive = False;
|
||||
//Open a connection to the server to force the shutdown
|
||||
FString host = "localhost";
|
||||
TCPSocket client;
|
||||
//Open the socket
|
||||
if(!client.Open()){
|
||||
AssertErrorCondition(FatalError, "%s: failed to shutdown server. Waited for 1 second.", Name());
|
||||
return;
|
||||
}
|
||||
//Connect to the server
|
||||
if(!client.Connect(host.Buffer(), serverPort)){
|
||||
CStaticAssertErrorCondition(FatalError, "%s: Failed to connect to %s:%d", Name(), host.Buffer(), serverPort);
|
||||
client.Close();
|
||||
}
|
||||
//Write a line
|
||||
FString line = "";
|
||||
uint32 size = line.Size();
|
||||
if(!client.Write(line.Buffer(), size)){
|
||||
CStaticAssertErrorCondition(FatalError, "Failed to write to socket");
|
||||
}
|
||||
//Housekeeping
|
||||
client.Close();
|
||||
int32 exitCounter = 0;
|
||||
while(!keepAlive){
|
||||
exitCounter++;
|
||||
SleepMsec(10);
|
||||
if(exitCounter > 100){
|
||||
AssertErrorCondition(FatalError, "%s: failed to shutdown server. Waited for 1 second.", Name());
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(exitCounter > 100){
|
||||
Threads::Kill(serverTID);
|
||||
}
|
||||
serverTID = 0;
|
||||
|
||||
}
|
||||
|
||||
bool TCPConfigurationHandler::ConnectionHandler(){
|
||||
//Open the server connection
|
||||
if(!server.Open()){
|
||||
AssertErrorCondition(FatalError, "%s: Failed to open the server socket", Name());
|
||||
return False;
|
||||
}
|
||||
//Set in server mode
|
||||
if(!server.Listen(serverPort)){
|
||||
CStaticAssertErrorCondition(FatalError, "Failed to create server running in port %d", serverPort);
|
||||
server.Close();
|
||||
return False;
|
||||
}
|
||||
//Wait for a connection
|
||||
TCPSocket *client = NULL;
|
||||
|
||||
while(keepAlive){
|
||||
client = server.WaitConnection();
|
||||
if(client == NULL){
|
||||
AssertErrorCondition(FatalError, "%s: Failed waiting for a connection in port %d", serverPort, Name());
|
||||
server.Close();
|
||||
return False;
|
||||
}
|
||||
//Set the client in blocking mode for the read
|
||||
client->SetBlocking(True);
|
||||
//Print information from the client
|
||||
FString hostname;
|
||||
client->Source().HostName(hostname);
|
||||
AssertErrorCondition(Information, "%s: Accepted a connection from %s", Name(), hostname.Buffer());
|
||||
ClientHandler(client);
|
||||
}
|
||||
|
||||
server.Close();
|
||||
return True;
|
||||
}
|
||||
|
||||
void TCPConfigurationHandler::ClientHandler(TCPSocket *client){
|
||||
FString cfg;
|
||||
bool ret = False;
|
||||
|
||||
cfg.SetSize(0);
|
||||
//Read a line from the client socket
|
||||
FString line;
|
||||
line.SetSize(0);
|
||||
while(client->GetLine(line)){
|
||||
cfg += line;
|
||||
cfg += "\n";
|
||||
line.SetSize(0);
|
||||
}
|
||||
ret = HandleRequest(cfg);
|
||||
|
||||
if(!ret){
|
||||
client->Printf("Failed\n");
|
||||
}else{
|
||||
client->Printf("Success\n");
|
||||
}
|
||||
|
||||
client->Close();
|
||||
}
|
||||
|
||||
bool TCPConfigurationHandler::HandleRequest(FString &req){
|
||||
GCRTemplate<MessageEnvelope> envelope(GCFT_Create);
|
||||
GCRTemplate<Message> message(GCFT_Create);
|
||||
GCRTemplate<MessageEnvelope> reply;
|
||||
|
||||
req.Seek(0);
|
||||
ConfigurationDataBase msgCDB;
|
||||
if(!msgCDB->ReadFromStream(req)){
|
||||
AssertErrorCondition(FatalError, "%s::HandleRequest: Failed to parse configuration request", Name());
|
||||
return False;
|
||||
}
|
||||
msgCDB->MoveToRoot();
|
||||
message->Init(0, "ChangeConfigFile");
|
||||
message->Insert(msgCDB);
|
||||
envelope->PrepareMessageEnvelope(message, MARTeLocation.Buffer(), MDRF_ManualReply, this);
|
||||
SendMessageAndWait(envelope, reply, msgTimeout);
|
||||
if(!reply.IsValid()){
|
||||
AssertErrorCondition(FatalError, "%s: HandleRequest: Received an invalid reply", Name());
|
||||
return False;
|
||||
}
|
||||
GCRTemplate<Message> replyMessage = reply->GetMessage();
|
||||
if(!replyMessage.IsValid()){
|
||||
AssertErrorCondition(FatalError, "%s: HandleRequest: Received an invalid reply message", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
AssertErrorCondition(Information, "%s: HandleRequest: Received a reply with code=%d and content=%s", Name(), replyMessage->GetMessageCode().Code(), replyMessage->Content());
|
||||
|
||||
if (strcmp(replyMessage->Content(), "OK") == 0){
|
||||
return True;
|
||||
}else{
|
||||
return False;
|
||||
}
|
||||
}
|
||||
|
||||
bool TCPConfigurationHandler::ObjectLoadSetup(ConfigurationDataBase &cdb, StreamInterface *err){
|
||||
if(!GCNamedObject::ObjectLoadSetup(cdb, err)){
|
||||
AssertErrorCondition(FatalError, "%s::ObjectLoadSetup: ObjectLoadSetup of GCNamedObject failed", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
CDBExtended cdbe(cdb);
|
||||
if(!cdbe.ReadInt32(serverPort, "ServerPort")){
|
||||
AssertErrorCondition(FatalError, "%s::ObjectLoadSetup: PulseNumberMessageCode is compulsory when PulseNumberMessageDestinations are set", Name());
|
||||
}
|
||||
|
||||
//CPU mask for the thread
|
||||
if(!cdbe.ReadInt32(cpuMask, "CPUMask", 0x1)){
|
||||
AssertErrorCondition(Warning, "%s::ObjectLoadSetup: CPUMask was not specified. Using default: %d", Name(), cpuMask);
|
||||
}
|
||||
|
||||
//The msg send timeout, default is infinite
|
||||
int32 msgTimeoutMS = 0;
|
||||
if(cdbe.ReadInt32(msgTimeoutMS, "MSGTimeout")){
|
||||
msgTimeout = msgTimeoutMS;
|
||||
}
|
||||
|
||||
//The location of the MARTe object
|
||||
if(!cdbe.ReadFString(MARTeLocation, "MARTeLocation")){
|
||||
AssertErrorCondition(InitialisationError, "%s::ObjectLoadSetup MARTeLocation was not specified", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
keepAlive = True;
|
||||
serverTID = Threads::BeginThread((void (__thread_decl *)(void *))&ConnectionHandlerFn,this, THREADS_DEFAULT_STACKSIZE, Name(), XH_NotHandled, cpuMask);
|
||||
return True;
|
||||
}
|
||||
|
||||
OBJECTLOADREGISTER(TCPConfigurationHandler, "$Id: TCPConfigurationHandler.cpp,v 1.2 2011/12/07 13:55:43 aneto Exp $")
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id: MessageTriggeringTimeService.h 3 2012-01-15 16:26:07Z aneto $
|
||||
*
|
||||
**/
|
||||
/**
|
||||
* @file
|
||||
* Forwards configuration messages received using a TCP interface to MARTe
|
||||
*/
|
||||
#ifndef TCP_CONFIGURATION_HANDLER_H
|
||||
#define TCP_CONFIGURATION_HANDLER_H
|
||||
|
||||
#include "GCReferenceContainer.h"
|
||||
#include "CDBExtended.h"
|
||||
#include "TCPSocket.h"
|
||||
#include "MessageHandler.h"
|
||||
|
||||
OBJECT_DLL(TCPConfigurationHandler)
|
||||
class TCPConfigurationHandler : public GCNamedObject, public MessageHandler{
|
||||
OBJECT_DLL_STUFF(TCPConfigurationHandler)
|
||||
|
||||
private:
|
||||
/**
|
||||
* Handle connection requests
|
||||
*/
|
||||
friend void ConnectionHandlerFn(TCPConfigurationHandler &tcpmh);
|
||||
bool ConnectionHandler();
|
||||
|
||||
/**
|
||||
* Parse the client request and send the message
|
||||
*/
|
||||
bool HandleRequest(FString &msg);
|
||||
|
||||
/**
|
||||
* Handle the client requests and forward the configuration requests
|
||||
**/
|
||||
void ClientHandler(TCPSocket *client);
|
||||
|
||||
/**
|
||||
* This flag is true while the TCP server is supposed to be running
|
||||
*/
|
||||
bool keepAlive;
|
||||
|
||||
/**
|
||||
* TCP server port
|
||||
*/
|
||||
int32 serverPort;
|
||||
|
||||
/**
|
||||
* The server socket
|
||||
*/
|
||||
TCPSocket server;
|
||||
|
||||
/**
|
||||
* The TCP server thread identifier
|
||||
*/
|
||||
int32 serverTID;
|
||||
|
||||
/**
|
||||
* The TCP server cpu mask
|
||||
*/
|
||||
int32 cpuMask;
|
||||
|
||||
/**
|
||||
* Timeout to send the messages
|
||||
*/
|
||||
TimeoutType msgTimeout;
|
||||
|
||||
/**
|
||||
* The location of MARTe
|
||||
*/
|
||||
FString MARTeLocation;
|
||||
|
||||
public:
|
||||
TCPConfigurationHandler();
|
||||
|
||||
virtual ~TCPConfigurationHandler();
|
||||
|
||||
/**
|
||||
* @sa Object::ObjectLoadSetup
|
||||
*/
|
||||
virtual bool ObjectLoadSetup(
|
||||
ConfigurationDataBase & info,
|
||||
StreamInterface * err);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
linux/TCPConfigurationHandler.o: TCPConfigurationHandler.cpp \
|
||||
TCPConfigurationHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level2/TCPSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BasicTCPSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BasicSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetAddress.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketSelect.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetService.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Endianity.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketSelect.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetService.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketTimer.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageEnvelope.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level5/Message.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageCode.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MDRFlags.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MuxLock.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageQueue.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageDispatcher.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageDeliveryRequest.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h
|
||||
@@ -0,0 +1,96 @@
|
||||
TCPConfigurationHandler.o: TCPConfigurationHandler.cpp \
|
||||
TCPConfigurationHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level2/TCPSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BasicTCPSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BasicSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetAddress.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketSelect.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetService.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Endianity.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketSelect.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetService.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketTimer.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageEnvelope.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level5/Message.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageCode.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MDRFlags.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MuxLock.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageQueue.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageDispatcher.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageDeliveryRequest.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h
|
||||
@@ -0,0 +1,585 @@
|
||||
Version = "$Id: MARTe-WaterTank.cfg,v 1.5 2010/04/20 15:42:02 ppcc_dev Exp $"
|
||||
LoggerAddress = "localhost"
|
||||
DefaultCPUs = 1
|
||||
+WEB = {
|
||||
Class = HttpGroupResource
|
||||
+BROWSE = {
|
||||
Title = "Http Object Browser"
|
||||
Class = HttpGCRCBrowser
|
||||
AddReference = {MARTe StateMachine OBJBROWSE THRBROWSE CFGUpload HTTPSignalServer MatlabSignalServer}
|
||||
}
|
||||
+RGRAPH_LIB_DIR = {
|
||||
Class = HttpDirectoryResource
|
||||
BaseDir = "../../3rdPartyLibs/RGraph/libraries"
|
||||
}
|
||||
}
|
||||
+HTTPSERVER = {
|
||||
Class = HttpService
|
||||
Port = 8084
|
||||
HttpRelayURL = "ignore.me:1234"
|
||||
VerboseLevel = 10
|
||||
Root = WEB
|
||||
}
|
||||
+OBJBROWSE = {
|
||||
Class = HttpClassListResource
|
||||
}
|
||||
+THRBROWSE = {
|
||||
Class = HttpThreadListResource
|
||||
}
|
||||
+MatlabSignalServer = {
|
||||
Class = MATLABHandler
|
||||
}
|
||||
+HTTPSignalServer={
|
||||
Class = SignalServer
|
||||
}
|
||||
+CFGUpload = {
|
||||
Class = CFGUploader
|
||||
}
|
||||
+TCPMessageHandler = {
|
||||
Class = TCPMessageHandler
|
||||
ServerPort = 9090
|
||||
CPUMask = 1
|
||||
}
|
||||
+StateMachine = {
|
||||
Class = StateMachine
|
||||
VerboseLevel = 10
|
||||
+INITIAL = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x0
|
||||
+START = {
|
||||
Class = StateMachineEvent
|
||||
NextState = WAITING_FOR_PULSE
|
||||
Value = START
|
||||
+STARTALL = {
|
||||
Class = MessageDeliveryRequest
|
||||
Sender = StateMachine
|
||||
Destinations = "HTTPSERVER MARTe"
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Content = START
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+WAITING_FOR_PULSE = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x500
|
||||
+PULSE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x701
|
||||
NextState = WAITING_FOR_TRIGGER
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = PREPULSECHECK
|
||||
}
|
||||
}
|
||||
+UPDATE_MSS = {
|
||||
Class = MessageEnvelope
|
||||
Destination = MatlabSignalServer
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = AUTODETECT
|
||||
}
|
||||
}
|
||||
+UPDATE_SS = {
|
||||
Class = MessageEnvelope
|
||||
Destination = HTTPSignalServer
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = AUTODETECT
|
||||
}
|
||||
}
|
||||
}
|
||||
+INHIBIT = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x704
|
||||
NextState = INHIBIT
|
||||
}
|
||||
+ACTIVATE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x705
|
||||
NextState = SAMESTATE
|
||||
}
|
||||
+UNRECOVERABLE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x776
|
||||
NextState = UNRECOVERABLE
|
||||
}
|
||||
+CONFIG_ERROR = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x777
|
||||
NextState = CONFIG_ERROR
|
||||
}
|
||||
+CONFIG_OK = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x778
|
||||
NextState = SAMESTATE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = COULD.BE.A.MIMIC
|
||||
+SENDSTATE = {
|
||||
Class = Message
|
||||
Code = 0x500
|
||||
}
|
||||
}
|
||||
}
|
||||
+STOP = {
|
||||
Class = StateMachineEvent
|
||||
NextState = WAITING_FOR_PULSE
|
||||
Value = STOP
|
||||
Code = 0x005
|
||||
+STOPALL = {
|
||||
Class = MessageDeliveryRequest
|
||||
Sender = StateMachine
|
||||
Destinations = "HTTPSERVER MARTe"
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Content = STOP
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+WAITING_FOR_TRIGGER = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x504
|
||||
+TRIGGER = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x708
|
||||
NextState = PULSING
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = PULSESTART
|
||||
}
|
||||
}
|
||||
}
|
||||
+ABORT = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x702
|
||||
NextState = WAITING_FOR_PULSE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = PULSESTOP
|
||||
}
|
||||
}
|
||||
}
|
||||
+COLLECTION_COMPLETED = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x703
|
||||
NextState = COMM_ERROR
|
||||
}
|
||||
}
|
||||
+PULSING = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x505
|
||||
+ENTER = {
|
||||
Class = MessageEnvelope
|
||||
Destination = COULD.BE.A.MIMIC
|
||||
+SENDSTATE = {
|
||||
Class = Message
|
||||
}
|
||||
}
|
||||
+ABORT = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x702
|
||||
NextState = WAITING_FOR_PULSE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = PULSESTOP
|
||||
}
|
||||
}
|
||||
}
|
||||
+END_PULSE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x709
|
||||
NextState = POST_PULSE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = PULSESTOP
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+POST_PULSE = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x507
|
||||
+ENTER = {
|
||||
Class = MessageEnvelope
|
||||
Destination = COULD.BE.A.MIMIC
|
||||
+SENDSTATE = {
|
||||
Class = Message
|
||||
}
|
||||
}
|
||||
+COLLECTION_COMPLETED = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x703
|
||||
NextState = WAITING_FOR_PULSE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = MARTe
|
||||
+MESSAGE = {
|
||||
Class = Message
|
||||
Content = COLLECTIONCOMPLETED
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+INHIBIT = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x508
|
||||
+ACTIVATE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x705
|
||||
NextState = WAITING_FOR_PULSE
|
||||
}
|
||||
}
|
||||
+ERROR = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x601
|
||||
+ACTIVATE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x705
|
||||
NextState = WAITING_FOR_PULSE
|
||||
}
|
||||
+COLLECTION_COMPLETED = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x703
|
||||
NextState = WAITING_FOR_PULSE
|
||||
}
|
||||
}
|
||||
+CONFIG_ERROR = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x601
|
||||
+ENTER = {
|
||||
Class = MessageEnvelope
|
||||
Destination = COULD.BE.A.MIMIC
|
||||
+SENDSTATE = {
|
||||
Class = Message
|
||||
}
|
||||
}
|
||||
+ACTIVATE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x705
|
||||
NextState = WAITING_FOR_PULSE
|
||||
}
|
||||
+CONFIG_OK = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x778
|
||||
NextState = WAITING_FOR_PULSE
|
||||
+NOTIFY = {
|
||||
Class = MessageEnvelope
|
||||
Sender = StateMachine
|
||||
Destination = COULD.BE.A.MIMIC
|
||||
+SENDSTATE = {
|
||||
Class = Message
|
||||
Code = 0x500
|
||||
}
|
||||
}
|
||||
}
|
||||
+CONFIG_ERROR = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x777
|
||||
NextState = CONFIG_ERROR
|
||||
}
|
||||
}
|
||||
+UNRECOVERABLE = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x601
|
||||
+DEFAULT = {
|
||||
Class = StateMachineEvent
|
||||
UserCode = 0
|
||||
NextState = UNRECOVERABLE
|
||||
}
|
||||
}
|
||||
+COMM_ERROR = {
|
||||
StateCode = 0x601
|
||||
Class = StateMachineState
|
||||
+ABORT = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x702
|
||||
NextState = SAMESTATE
|
||||
}
|
||||
}
|
||||
+DEFAULT = {
|
||||
Class = StateMachineState
|
||||
StateCode = 0x601
|
||||
+ABORT = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x702
|
||||
NextState = WAITING_FOR_PULSE
|
||||
}
|
||||
+TRIGGER = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x708
|
||||
NextState = SAMESTATE
|
||||
}
|
||||
+END_PULSE = {
|
||||
Class = StateMachineEvent
|
||||
Code = 0x709
|
||||
NextState = SAMESTATE
|
||||
}
|
||||
}
|
||||
}
|
||||
+MARTeMenu = {
|
||||
Class = MarteSupLib::MARTeMenu
|
||||
Title = "MARTe Menu"
|
||||
+MenuA = {
|
||||
Class = MenuContainer
|
||||
Title = "State Machine"
|
||||
+ABORT = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = Abort
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x702
|
||||
Content = ABORT
|
||||
}
|
||||
}
|
||||
}
|
||||
+INHIBIT = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = Inhibit
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x704
|
||||
Content = Inhibit
|
||||
}
|
||||
}
|
||||
}
|
||||
+ACTIVATE = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = Activate
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x705
|
||||
Content = Activate
|
||||
}
|
||||
}
|
||||
}
|
||||
+PULSESETUPCOMPLETE = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = "Pulse Setup Complete"
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x701
|
||||
Content = WAITING_FOR_PULSE
|
||||
}
|
||||
}
|
||||
}
|
||||
+TRIGGER = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = "Pulse Start"
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x708
|
||||
Content = TRIGGER
|
||||
}
|
||||
}
|
||||
}
|
||||
+END_PULSE = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = "Pulse End"
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x709
|
||||
Content = END_PULSE
|
||||
}
|
||||
}
|
||||
}
|
||||
+COLLECTION_COMPLETED = {
|
||||
Class = SendMessageMenuEntry
|
||||
Title = "Collection Completed"
|
||||
Envelope = {
|
||||
Class = MessageEnvelope
|
||||
Sender = MARTeMenu
|
||||
Destination = StateMachine
|
||||
+Message = {
|
||||
Class = Message
|
||||
Code = 0x703
|
||||
Content = POSTPULSE
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
AddReference = MARTe.MARTe
|
||||
}
|
||||
+MARTe = {
|
||||
Class = MARTeContainer
|
||||
StateMachineName = StateMachine
|
||||
Level1Name = LEVEL1
|
||||
MenuContainerName = MARTe
|
||||
+MARTe = {
|
||||
Class = MenuContainer
|
||||
}
|
||||
+DriverPool = {
|
||||
Class = GCReferenceContainer
|
||||
+TimerBoard = {
|
||||
Class = GenericTimerDrv
|
||||
NumberOfInputs = 2
|
||||
NumberOfOutputs = 0
|
||||
TimerUsecPeriod = 10000
|
||||
SynchronizationMethod = Synchronizing
|
||||
CPUMask = 1
|
||||
}
|
||||
}
|
||||
+Messages = {
|
||||
Class = GCReferenceContainer
|
||||
+FatalErrorMessage = {
|
||||
Class = MessageDeliveryRequest
|
||||
Destinations = StateMachine
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Code = 0x776
|
||||
Content = UNRECOVERABLE
|
||||
}
|
||||
}
|
||||
+ConfigLoadErrorMessage = {
|
||||
Class = MessageDeliveryRequest
|
||||
Destinations = StateMachine
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Code = 0x777
|
||||
Content = CONFIG_ERROR
|
||||
}
|
||||
}
|
||||
+ConfigLoadOKMessage = {
|
||||
Class = MessageDeliveryRequest
|
||||
Destinations = StateMachine
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Code = 0x778
|
||||
Content = CONFIG_OK
|
||||
}
|
||||
}
|
||||
+SafetyErrorMessage = {
|
||||
Class = MessageDeliveryRequest
|
||||
Destinations = MARTe
|
||||
MsecTimeOut = 1000
|
||||
Flags = NoReply
|
||||
Message = {
|
||||
Class = Message
|
||||
Content = ERROR
|
||||
}
|
||||
}
|
||||
}
|
||||
+ExternalTimeTriggeringService = {
|
||||
Class = InterruptDrivenTTS
|
||||
TsOnlineUsecPeriod = 10000
|
||||
TsOnlineUsecPhase = 0
|
||||
TsOfflineUsecPeriod = 10000
|
||||
TsOfflineUsecPhase = 0
|
||||
TimeModule = {
|
||||
BoardName = TimerBoard
|
||||
}
|
||||
}
|
||||
+Thread_1 = {
|
||||
Class = RealTimeThread
|
||||
ThreadPriority = 28
|
||||
RunOnCPU = 2
|
||||
RTStatusChangeMsecTimeout = 1000
|
||||
SMStatusChangeMsecTimeout = 1000
|
||||
OfflineSemaphoreTimeout = 50
|
||||
TriggeringServiceName = MARTe.ExternalTimeTriggeringService
|
||||
SafetyMsecSleep = 1
|
||||
+DDB = {
|
||||
Class = DDB
|
||||
}
|
||||
+Timer = {
|
||||
Class = IOGAMs::TimeInputGAM
|
||||
TriggeringServiceName = ExternalTimeTriggeringService
|
||||
BoardName = TimerBoard
|
||||
Signals = {
|
||||
time = {
|
||||
SignalName = usecTime
|
||||
SignalType = uint32
|
||||
}
|
||||
counter = {
|
||||
SignalName = counter
|
||||
SignalType = int32
|
||||
}
|
||||
}
|
||||
}
|
||||
+Statistic = {
|
||||
Class = WebStatisticGAM
|
||||
Verbose = True
|
||||
FrequencyOfVerbose = 2000000
|
||||
Signals = {
|
||||
SignalU = {
|
||||
SignalName = usecTime
|
||||
SignalType = uint32
|
||||
}
|
||||
Signal0 = {
|
||||
SignalName = CycleUsecTime
|
||||
SignalType = float
|
||||
}
|
||||
Signal9 = {
|
||||
SignalName = StatisticAbsoluteUsecTime
|
||||
SignalType = float
|
||||
}
|
||||
Signal15 = {
|
||||
SignalName = StatisticRelativeUsecTime
|
||||
SignalType = float
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Online = "Timer Statistic"
|
||||
Offline = "Timer Statistic"
|
||||
}
|
||||
}
|
||||
ReloadAll = 0
|
||||
@@ -0,0 +1,78 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
#############################################################
|
||||
#Start-up script for the MARTe WaterTank example
|
||||
#!/bin/sh
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Please specify the location of the configuration file"
|
||||
exit
|
||||
else
|
||||
echo "Going to start MARTe with the configuration specified in: " $1
|
||||
fi
|
||||
|
||||
target=`uname`
|
||||
case ${target} in
|
||||
Darwin)
|
||||
TARGET=macosx
|
||||
;;
|
||||
SunOS)
|
||||
TARGET=solaris
|
||||
;;
|
||||
*)
|
||||
TARGET=linux
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Target is $TARGET"
|
||||
|
||||
BASEDIR=/DCS/Develop/DCS3/marte-dcs/marte/Base/trunk
|
||||
|
||||
CODE_DIRECTORY=$BASEDIR
|
||||
LD_LIBRARY_PATH=.:$CODE_DIRECTORY/BaseLib2/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/MARTe/MARTeSupportLib/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/IOGAMs/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/IOGAMs/${TARGET}Timer/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/IOGAMs/GenericTimerDriver/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/GAMs/WebStatisticGAM/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/Interfaces/HTTP/CFGUploader/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/Interfaces/HTTP/SignalHandler/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/Interfaces/HTTP/MATLABHandler/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/Interfaces/HTTP/FlotPlot/${TARGET}/
|
||||
#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CODE_DIRECTORY/Examples/TCPMessageHandler/${TARGET}/
|
||||
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./${TARGET}/
|
||||
|
||||
|
||||
if [ ${TARGET} == "macosx" ]; then
|
||||
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$LD_LIBRARY_PATH
|
||||
echo $DYLD_LIBRARY_PATH
|
||||
else
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
|
||||
echo $LD_LIBRARY_PATH
|
||||
fi
|
||||
|
||||
$CODE_DIRECTORY/MARTe/${TARGET}/MARTe.ex $1
|
||||
|
||||
#cgdb --args $CODE_DIRECTORY/MARTe/${TARGET}/MARTe.ex $1
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
OBJSX=
|
||||
BASEDIR=/opt/MARTe
|
||||
MAKEDEFAULTDIR=$(BASEDIR)/MakeDefaults
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET)
|
||||
|
||||
CFLAGS+= -I.
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level0
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level1
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level2
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level3
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level4
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level5
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level6
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/LoggerService
|
||||
CFLAGS+= -I$(BASEDIR)/MARTe/MARTeSupportLib
|
||||
|
||||
all: $(OBJS) \
|
||||
$(TARGET)/TCPMessageHandler$(DLLEXT)
|
||||
echo $(OBJS)
|
||||
|
||||
include depends.$(TARGET)
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET)
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.inc 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
OBJSX=
|
||||
BASEDIR=/DCS/Develop/DCS3/marte-dcs/marte/Base/trunk
|
||||
MAKEDEFAULTDIR=$(BASEDIR)/MakeDefaults
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibDefs.$(TARGET)
|
||||
|
||||
CFLAGS+= -I.
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level0
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level1
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level2
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level3
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level4
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level5
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/Level6
|
||||
CFLAGS+= -I$(BASEDIR)/BaseLib2/LoggerService
|
||||
CFLAGS+= -I$(BASEDIR)/MARTe/MARTeSupportLib
|
||||
|
||||
all: $(OBJS) \
|
||||
$(TARGET)/TCPMessageHandler$(DLLEXT)
|
||||
echo $(OBJS)
|
||||
|
||||
include depends.$(TARGET)
|
||||
|
||||
include $(MAKEDEFAULTDIR)/MakeStdLibRules.$(TARGET)
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.linux 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
TARGET=linux
|
||||
|
||||
include Makefile.inc
|
||||
|
||||
LIBRARIES += -L$(BASEDIR)/BaseLib2/$(TARGET) -lBaseLib2 -L$(BASEDIR)/MARTe/MARTeSupportLib/$(TARGET) -lMARTeSupLib
|
||||
|
||||
OPTIM=
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
#############################################################
|
||||
#
|
||||
# Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
#
|
||||
# Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
# will be approved by the European Commission - subsequent
|
||||
# versions of the EUPL (the "Licence");
|
||||
# You may not use this work except in compliance with the
|
||||
# Licence.
|
||||
# You may obtain a copy of the Licence at:
|
||||
#
|
||||
# http://ec.europa.eu/idabc/eupl
|
||||
#
|
||||
# Unless required by applicable law or agreed to in
|
||||
# writing, software distributed under the Licence is
|
||||
# distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
# express or implied.
|
||||
# See the Licence for the specific language governing
|
||||
# permissions and limitations under the Licence.
|
||||
#
|
||||
# $Id: Makefile.linux 3 2012-01-15 16:26:07Z aneto $
|
||||
#
|
||||
#############################################################
|
||||
TARGET=linux
|
||||
|
||||
BASEDIR=/DCS/Develop/DCS3/marte-dcs/marte/Base/trunk
|
||||
|
||||
include Makefile.inc
|
||||
|
||||
LIBRARIES += -L$(BASEDIR)/BaseLib2/$(TARGET) -lBaseLib2 -L$(BASEDIR)/MARTe/MARTeSupportLib/$(TARGET) -lMARTeSupLib
|
||||
|
||||
OPTIM=
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id: MessageTriggeringTimeService.h 3 2012-01-15 16:26:07Z aneto $
|
||||
*
|
||||
**/
|
||||
|
||||
#include "TCPMessageHandler.h"
|
||||
#include "MessageDispatcher.h"
|
||||
|
||||
void ConnectionHandlerFn(TCPMessageHandler &tcpmh){
|
||||
while(tcpmh.keepAlive){
|
||||
tcpmh.ConnectionHandler();
|
||||
CStaticAssertErrorCondition(FatalError, "Lost server connection");
|
||||
if(tcpmh.keepAlive){
|
||||
CStaticAssertErrorCondition(FatalError, "Retrying in 10 seconds");
|
||||
SleepSec(10.0);
|
||||
}
|
||||
}
|
||||
//Just to signal that we have shutdown
|
||||
tcpmh.keepAlive = True;
|
||||
}
|
||||
|
||||
TCPMessageHandler::TCPMessageHandler(){
|
||||
serverPort = -1;
|
||||
serverTID = 0;
|
||||
cpuMask = 0;
|
||||
keepAlive = False;
|
||||
msgTimeout = TTInfiniteWait;
|
||||
}
|
||||
|
||||
TCPMessageHandler::~TCPMessageHandler(){
|
||||
keepAlive = False;
|
||||
//Open a connection to the server to force the shutdown
|
||||
FString host = "localhost";
|
||||
TCPSocket client;
|
||||
//Open the socket
|
||||
if(!client.Open()){
|
||||
AssertErrorCondition(FatalError, "%s: failed to shutdown server. Waited for 1 second.", Name());
|
||||
return;
|
||||
}
|
||||
//Connect to the server
|
||||
if(!client.Connect(host.Buffer(), serverPort)){
|
||||
CStaticAssertErrorCondition(FatalError, "%s: Failed to connect to %s:%d", Name(), host.Buffer(), serverPort);
|
||||
client.Close();
|
||||
}
|
||||
//Write a line
|
||||
FString line = "";
|
||||
uint32 size = line.Size();
|
||||
if(!client.Write(line.Buffer(), size)){
|
||||
CStaticAssertErrorCondition(FatalError, "Failed to write to socket");
|
||||
}
|
||||
//Housekeeping
|
||||
client.Close();
|
||||
int32 exitCounter = 0;
|
||||
while(!keepAlive){
|
||||
exitCounter++;
|
||||
SleepMsec(10);
|
||||
if(exitCounter > 100){
|
||||
AssertErrorCondition(FatalError, "%s: failed to shutdown server. Waited for 1 second.", Name());
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(exitCounter > 100){
|
||||
Threads::Kill(serverTID);
|
||||
}
|
||||
serverTID = 0;
|
||||
|
||||
}
|
||||
|
||||
bool TCPMessageHandler::ConnectionHandler(){
|
||||
//Open the server connection
|
||||
if(!server.Open()){
|
||||
AssertErrorCondition(FatalError, "%s: Failed to open the server socket", Name());
|
||||
return False;
|
||||
}
|
||||
//Set in server mode
|
||||
if(!server.Listen(serverPort)){
|
||||
CStaticAssertErrorCondition(FatalError, "Failed to create server running in port %d", serverPort);
|
||||
server.Close();
|
||||
return False;
|
||||
}
|
||||
//Wait for a connection
|
||||
TCPSocket *client = NULL;
|
||||
|
||||
while(keepAlive){
|
||||
client = server.WaitConnection();
|
||||
if(client == NULL){
|
||||
AssertErrorCondition(FatalError, "%s: Failed waiting for a connection in port %d", serverPort, Name());
|
||||
server.Close();
|
||||
return False;
|
||||
}
|
||||
//Set the client in blocking mode for the read
|
||||
client->SetBlocking(True);
|
||||
//Print information from the client
|
||||
FString hostname;
|
||||
client->Source().HostName(hostname);
|
||||
AssertErrorCondition(Information, "%s: Accepted a connection from %s", Name(), hostname.Buffer());
|
||||
ClientHandler(client);
|
||||
}
|
||||
|
||||
server.Close();
|
||||
return True;
|
||||
}
|
||||
|
||||
void TCPMessageHandler::ClientHandler(TCPSocket *client){
|
||||
//Read a line from the client socket
|
||||
FString line;
|
||||
bool ret = False;
|
||||
|
||||
line.SetSize(0);
|
||||
while(client->GetLine(line)){
|
||||
ret = HandleRequest(line, client);
|
||||
line.SetSize(0);
|
||||
if(!ret){
|
||||
client->Printf("Failed\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool TCPMessageHandler::HandleRequest(FString &req, TCPSocket *client){
|
||||
FString destination;
|
||||
FString code;
|
||||
FString content;
|
||||
req.Seek(0);
|
||||
printf("%s\n", req.Buffer());
|
||||
if(!req.GetToken(destination, "|")){
|
||||
AssertErrorCondition(FatalError, "%s: HandleRequest: Could not read the message destination", Name());
|
||||
return False;
|
||||
}
|
||||
if(!req.GetToken(code, "|")){
|
||||
AssertErrorCondition(FatalError, "%s: HandleRequest: Could not read the message code", Name());
|
||||
return False;
|
||||
}
|
||||
if(!req.GetToken(content, "|")){
|
||||
AssertErrorCondition(FatalError, "%s: HandleRequest: Could not read the message content", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
AssertErrorCondition(Information, "%s: HandleRequest : D=%s,C=%s,CT=%s", Name(), destination.Buffer(), code.Buffer(), content.Buffer());
|
||||
GCRTemplate<Message> msg(GCFT_Create);
|
||||
if(!msg.IsValid()){
|
||||
AssertErrorCondition(FatalError, "%s: HandleRequest: Failed to create message", Name());
|
||||
return False;
|
||||
}
|
||||
GCRTemplate<MessageEnvelope> env(GCFT_Create);
|
||||
if (!env.IsValid()){
|
||||
AssertErrorCondition(FatalError, "%s: HandleRequest: Failed to creating envelope", Name());
|
||||
return False;
|
||||
}
|
||||
msg->Init(atoi(code.Buffer()), content.Buffer());
|
||||
env->PrepareMessageEnvelope(msg, destination.Buffer(), MDRF_ManualReply, this);
|
||||
|
||||
GCRTemplate<MessageEnvelope> reply;
|
||||
MessageHandler::SendMessageAndWait(env, reply, msgTimeout);
|
||||
if(!reply.IsValid()){
|
||||
AssertErrorCondition(FatalError, "%s: HandleRequest: Received an invalid reply", Name());
|
||||
return False;
|
||||
}
|
||||
GCRTemplate<Message> replyMessage = reply->GetMessage();
|
||||
if(!replyMessage.IsValid()){
|
||||
AssertErrorCondition(FatalError, "%s: HandleRequest: Received an invalid reply message", Name());
|
||||
return False;
|
||||
}
|
||||
AssertErrorCondition(Information, "%s: HandleRequest: Received a reply with code=%d and content=%s", Name(), replyMessage->GetMessageCode().Code(), replyMessage->Content());
|
||||
|
||||
client->Printf("Success with code=%d and content=%s\n", replyMessage->GetMessageCode().Code(), replyMessage->Content());
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
bool TCPMessageHandler::ObjectLoadSetup(ConfigurationDataBase &cdb, StreamInterface *err){
|
||||
if(!GCNamedObject::ObjectLoadSetup(cdb, err)){
|
||||
AssertErrorCondition(FatalError, "%s::ObjectLoadSetup: ObjectLoadSetup of GCNamedObject failed", Name());
|
||||
return False;
|
||||
}
|
||||
|
||||
CDBExtended cdbe(cdb);
|
||||
if(!cdbe.ReadInt32(serverPort, "ServerPort")){
|
||||
AssertErrorCondition(FatalError, "%s::ObjectLoadSetup: PulseNumberMessageCode is compulsory when PulseNumberMessageDestinations are set", Name());
|
||||
}
|
||||
|
||||
//CPU mask for the thread
|
||||
if(!cdbe.ReadInt32(cpuMask, "CPUMask", 0x1)){
|
||||
AssertErrorCondition(Warning, "%s::ObjectLoadSetup: CPUMask was not specified. Using default: %d", Name(), cpuMask);
|
||||
}
|
||||
|
||||
//The msg send timeout, default is infinite
|
||||
int32 msgTimeoutMS = 0;
|
||||
if(cdbe.ReadInt32(msgTimeoutMS, "MSGTimeout")){
|
||||
msgTimeout = msgTimeoutMS;
|
||||
}
|
||||
keepAlive = True;
|
||||
serverTID = Threads::BeginThread((void (__thread_decl *)(void *))&ConnectionHandlerFn,this, THREADS_DEFAULT_STACKSIZE, Name(), XH_NotHandled, cpuMask);
|
||||
return True;
|
||||
}
|
||||
|
||||
OBJECTLOADREGISTER(TCPMessageHandler, "$Id: TCPMessageHandler.cpp,v 1.2 2011/12/07 13:55:43 aneto Exp $")
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright 2011 EFDA | European Fusion Development Agreement
|
||||
*
|
||||
* Licensed under the EUPL, Version 1.1 or - as soon they
|
||||
will be approved by the European Commission - subsequent
|
||||
versions of the EUPL (the "Licence");
|
||||
* You may not use this work except in compliance with the
|
||||
Licence.
|
||||
* You may obtain a copy of the Licence at:
|
||||
*
|
||||
* http://ec.europa.eu/idabc/eupl
|
||||
*
|
||||
* Unless required by applicable law or agreed to in
|
||||
writing, software distributed under the Licence is
|
||||
distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||
express or implied.
|
||||
* See the Licence for the specific language governing
|
||||
permissions and limitations under the Licence.
|
||||
*
|
||||
* $Id: MessageTriggeringTimeService.h 3 2012-01-15 16:26:07Z aneto $
|
||||
*
|
||||
**/
|
||||
/**
|
||||
* @file
|
||||
* Forwards text messages received using a TCP interface to a BaseLib2/MARTe object
|
||||
* The syntax of the message is: DESTINATION|CODE|CONTENT
|
||||
*/
|
||||
#ifndef TCP_MESSAGE_HANDLER_H
|
||||
#define TCP_MESSAGE_HANDLER_H
|
||||
|
||||
#include "GCReferenceContainer.h"
|
||||
#include "CDBExtended.h"
|
||||
#include "TCPSocket.h"
|
||||
#include "MessageHandler.h"
|
||||
|
||||
OBJECT_DLL(TCPMessageHandler)
|
||||
class TCPMessageHandler : public GCNamedObject, public MessageHandler{
|
||||
OBJECT_DLL_STUFF(TCPMessageHandler)
|
||||
|
||||
private:
|
||||
/**
|
||||
* Handle connection requests
|
||||
*/
|
||||
friend void ConnectionHandlerFn(TCPMessageHandler &tcpmh);
|
||||
bool ConnectionHandler();
|
||||
|
||||
/**
|
||||
* Handle the client requests and forward as messages
|
||||
**/
|
||||
void ClientHandler(TCPSocket *client);
|
||||
|
||||
/**
|
||||
* Parse the client request and send the message
|
||||
*/
|
||||
bool HandleRequest(FString &msg, TCPSocket *client);
|
||||
|
||||
/**
|
||||
* This flag is true while the TCP server is supposed to be running
|
||||
*/
|
||||
bool keepAlive;
|
||||
|
||||
/**
|
||||
* TCP server port
|
||||
*/
|
||||
int32 serverPort;
|
||||
|
||||
/**
|
||||
* The server socket
|
||||
*/
|
||||
TCPSocket server;
|
||||
|
||||
/**
|
||||
* The TCP server thread identifier
|
||||
*/
|
||||
int32 serverTID;
|
||||
|
||||
/**
|
||||
* The TCP server cpu mask
|
||||
*/
|
||||
int32 cpuMask;
|
||||
|
||||
/**
|
||||
* Timeout to send the messages
|
||||
*/
|
||||
TimeoutType msgTimeout;
|
||||
|
||||
public:
|
||||
TCPMessageHandler();
|
||||
|
||||
virtual ~TCPMessageHandler();
|
||||
|
||||
/**
|
||||
* @sa Object::ObjectLoadSetup
|
||||
*/
|
||||
virtual bool ObjectLoadSetup(
|
||||
ConfigurationDataBase & info,
|
||||
StreamInterface * err);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
telnet localhost 9090
|
||||
|
||||
StateMachine|1793|PULSE
|
||||
StateMachine|1800|TRIGGER
|
||||
StateMachine|1801|END_PULSE
|
||||
StateMachine|1795|COLLECTION_COMPLETED
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
linux/TCPMessageHandler.o: TCPMessageHandler.cpp TCPMessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level2/TCPSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BasicTCPSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BasicSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetAddress.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketSelect.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetService.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Endianity.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketSelect.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetService.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketTimer.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageEnvelope.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level5/Message.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageCode.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MDRFlags.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MuxLock.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageQueue.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageDispatcher.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageDeliveryRequest.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h
|
||||
@@ -0,0 +1,95 @@
|
||||
TCPMessageHandler.o: TCPMessageHandler.cpp TCPMessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReferenceContainer.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMSC.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemLinux.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5100.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemV6X5500.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemVX68k.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemRTAI.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemSolaris.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SystemMacOSX.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Memory.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRTemplate.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Sleep.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastMath.h /opt/MARTe/BaseLib2/Level0/HRT.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Processor.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level0/StreamInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/TimeoutType.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GarbageCollectable.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h /opt/MARTe/BaseLib2/Level0/System.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectRegistryItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/GenDefs.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListHolder.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LinkedListable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Atomic.h /opt/MARTe/BaseLib2/Level0/Threads.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ExceptionHandlerDefinitions.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadInitialisationInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SemCore.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ProcessorType.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ThreadsDatabase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ErrorSystemInstructionItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructure.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ClassStructureEntry.h \
|
||||
/opt/MARTe/BaseLib2/Level1/BasicTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/ErrorManagement.h \
|
||||
/opt/MARTe/BaseLib2/Level0/LoadableLibrary.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ObjectMacros.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCRCItem.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNOExtender.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBExtended.h \
|
||||
/opt/MARTe/BaseLib2/Level1/ConfigurationDataBase.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBVirtual.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Iterators.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBNull.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CDBDataTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level1/CDBTypes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/Streamable.h \
|
||||
/opt/MARTe/BaseLib2/Level0/CStream.h \
|
||||
/opt/MARTe/BaseLib2/Level2/CStreamBuffering.h \
|
||||
/opt/MARTe/BaseLib2/Level1/Object.h \
|
||||
/opt/MARTe/BaseLib2/Level1/StreamAttributes.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h \
|
||||
/opt/MARTe/BaseLib2/Level2/TCPSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BasicTCPSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BasicSocket.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetAddress.h \
|
||||
/opt/MARTe/BaseLib2/Level0/FastPollingMutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level0/BString.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketSelect.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetService.h \
|
||||
/opt/MARTe/BaseLib2/Level0/Endianity.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketSelect.h \
|
||||
/opt/MARTe/BaseLib2/Level0/InternetService.h \
|
||||
/opt/MARTe/BaseLib2/Level0/SocketTimer.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageInterface.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageEnvelope.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCReference.h \
|
||||
/opt/MARTe/BaseLib2/Level5/Message.h \
|
||||
/opt/MARTe/BaseLib2/Level1/GCNamedObject.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageCode.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MDRFlags.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MuxLock.h \
|
||||
/opt/MARTe/BaseLib2/Level0/MutexSem.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageQueue.h \
|
||||
/opt/MARTe/BaseLib2/Level0/EventSem.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageDispatcher.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageDeliveryRequest.h \
|
||||
/opt/MARTe/BaseLib2/Level5/MessageHandler.h \
|
||||
/opt/MARTe/BaseLib2/Level2/FString.h
|
||||
Reference in New Issue
Block a user