Imported CSS files

This commit is contained in:
Sakbe
2019-10-21 16:02:55 +01:00
parent 22146b8413
commit 87401e8c95
365 changed files with 1092613 additions and 0 deletions

View 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 $")

View 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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -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 &timestamp); // 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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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.
________________________________________________________________________

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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;
}

View 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;
}

View File

@@ -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;
}

View 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;
}

View 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)
{
}

View File

@@ -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;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
Simpliest way to test is to use netcat
nc localhost 10010 < MARTe-ConfigurationHandler.cfg

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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=

View File

@@ -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=

View File

@@ -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 $")

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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=

View File

@@ -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=

View File

@@ -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 $")

View File

@@ -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

View File

@@ -0,0 +1,7 @@
telnet localhost 9090
StateMachine|1793|PULSE
StateMachine|1800|TRIGGER
StateMachine|1801|END_PULSE
StateMachine|1795|COLLECTION_COMPLETED

View File

@@ -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

View File

@@ -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