diff --git a/MAC/APL/APLCommon/include/APL/APLCommon/ControllerDefines.h b/MAC/APL/APLCommon/include/APL/APLCommon/ControllerDefines.h new file mode 100644 index 0000000000000000000000000000000000000000..b15a7b725d07f7e151d20ad87c9c5620feda0a32 --- /dev/null +++ b/MAC/APL/APLCommon/include/APL/APLCommon/ControllerDefines.h @@ -0,0 +1,82 @@ +//# ControllerDefines.h: all kind of enumerations for controllers. +//# +//# Copyright (C) 2006 +//# ASTRON (Netherlands Foundation for Research in Astronomy) +//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl +//# +//# This program is free software; you can redistribute it and/or modify +//# it under the terms of the GNU General Public License as published by +//# the Free Software Foundation; either version 2 of the License, or +//# (at your option) any later version. +//# +//# This program is distributed in the hope that it will be useful, +//# but WITHOUT ANY WARRANTY; without even the implied warranty of +//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//# GNU General Public License for more details. +//# +//# You should have received a copy of the GNU General Public License +//# along with this program; if not, write to the Free Software +//# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//# +//# $Id$ + +#ifndef APL_CONTROLLERDEFINES_H +#define APL_CONTROLLERDEFINES_H + +namespace LOFAR { +namespace APLCommon { + +// Define errornumbers the controller may return. +enum +{ + CT_RESULT_NO_ERROR = 0, + CT_RESULT_UNSPECIFIED +}; + +// Define numbers for the controllertypes. These numbers are translated to names, +// execuables, etc in the class ControllerName. +enum { + CNTLRTYPE_NO_TYPE = 0, // no type defined yet + CNTLRTYPE_SCHEDULERCTRL, // MACscheduler + CNTLRTYPE_OBSERVATIONCTRL, // ObservationControl + CNTLRTYPE_BEAMDIRECTIONCTRL, // BeamDirectionControl + CNTLRTYPE_GROUPCTRL, // RingControl + CNTLRTYPE_STATIONCTRL, // StationControl + CNTLRTYPE_DIGITALBOARDCTRL, // DigitalBoardControl + CNTLRTYPE_BEAMCTRL, // BeamControl + CNTLRTYPE_CALIBRATIONCTRL, // CalibrationControl + CNTLRTYPE_STATIONINFRACTRL, // StationInfraControl + + CNTLRTYPE_NR_TYPES // should always be the last +}; + +// Construct a uniq controllername from the controllerType, the instanceNr +// of the controller and the observationID. +// Note: the returned name is always the 'non-shared' name. To get the 'shared' +// name passed the result to 'sharedControllerName') +string controllerName (uint16 cntlrType, + uint16 instanceNr, + uint32 ObservationNr); + +// Convert the 'non-shared controllername' to the 'shared controller' name. +string sharedControllerName (const string& controllerName); + +// Return name of the executable +string getExecutable (uint16 cntlrType); + +// return 'shared' bit of controllertype +bool isSharedController(uint16 cntrlType) ; + +// Get the ObservationNr from the controllername. +uint32 getObservationNr (const string& ObservationName); + +// Get the instanceNr from the controllername. +uint16 getInstanceNr (const string& ObservationName); + +// Get the controllerType from the controllername. +int32 getControllerType (const string& ObservationName); + +}; // APLCommon +}; // LOFAR + +#endif diff --git a/MAC/APL/APLCommon/include/APL/APLCommon/Makefile.am b/MAC/APL/APLCommon/include/APL/APLCommon/Makefile.am index 015f9752d9e503cf077c185748e6c063e376a115..6925693f36078952ed4e642c4e8b74bdcf06db76 100644 --- a/MAC/APL/APLCommon/include/APL/APLCommon/Makefile.am +++ b/MAC/APL/APLCommon/include/APL/APLCommon/Makefile.am @@ -5,6 +5,7 @@ pkginclude_HEADERS = \ APLCommonExceptions.h \ APL_Defines.h \ APLUtilities.h \ + ControllerDefines.h \ LogicalDeviceFactoryBase.h \ LogicalDeviceFactory.h \ LogicalDevice.h \ diff --git a/MAC/APL/APLCommon/src/ControllerDefines.cc b/MAC/APL/APLCommon/src/ControllerDefines.cc new file mode 100644 index 0000000000000000000000000000000000000000..1dc4bf0839b424ac9f7c7a370ce0b194661a1f18 --- /dev/null +++ b/MAC/APL/APLCommon/src/ControllerDefines.cc @@ -0,0 +1,127 @@ +//# ControllerDefines.cc: Controller(name) related utilities +//# +//# Copyright (C) 2006 +//# ASTRON (Netherlands Foundation for Research in Astronomy) +//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl +//# +//# This program is free software; you can redistribute it and/or modify +//# it under the terms of the GNU General Public License as published by +//# the Free Software Foundation; either version 2 of the License, or +//# (at your option) any later version. +//# +//# This program is distributed in the hope that it will be useful, +//# but WITHOUT ANY WARRANTY; without even the implied warranty of +//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//# GNU General Public License for more details. +//# +//# You should have received a copy of the GNU General Public License +//# along with this program; if not, write to the Free Software +//# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//# +//# $Id$ +//# +//# Always #include <lofar_config.h> first! +#include <lofar_config.h> + +//# Includes +#include <Common/LofarLogger.h> +#include <Common/StringUtil.h> // rtrim +#include <APS/ParameterSet.h> // indexValue +#include <APL/APLCommon/ControllerDefines.h> + +namespace LOFAR { + namespace APLCommon { + +typedef struct cntlrDefinition { + char* cntlrName; + bool shared; +} cntlrDefinition_t; + +static cntlrDefinition_t controllerTable[] = { + { "", false }, + { "MACScheduler", false }, + { "ObservationControl", false }, + { "BeamDirectionControl", true }, + { "RingControl", true }, + { "StationControl", false }, + { "DigitalBoardControl", false }, + { "BeamControl", true }, + { "CalibrationControl", true }, + { "StationInfraControl", true }, + { "", false } +}; + +// Construct a uniq controllername from the controllerType, the instanceNr +// of the controller and the observationID. +// Note: the returned name is always the 'non-shared' name. To get the 'shared' +// name passed the result to 'sharedControllerName') +string controllerName (uint16 cntlrType, + uint16 instanceNr, + uint32 ObservationNr) +{ + ASSERTSTR (cntlrType != CNTLRTYPE_NO_TYPE && cntlrType < CNTLRTYPE_NR_TYPES, + "No controller defined with type: " << cntlrType); + + return (formatString("%s(%d){%d}", controllerTable[cntlrType].cntlrName, + ObservationNr, instanceNr)); +} + +// Convert the 'non-shared controllername' to the 'shared controller' name. +string sharedControllerName (const string& controllerName) +{ + string cName(controllerName); // destroyable copy + rtrim(cName, "{0123456789}"); + return (cName); +} + +// Return name of the executable +string getExecutable (uint16 cntlrType) +{ + ASSERTSTR (cntlrType != CNTLRTYPE_NO_TYPE && cntlrType < CNTLRTYPE_NR_TYPES, + "No controller defined with type: " << cntlrType); + + return (controllerTable[cntlrType].cntlrName); +} + +// return 'shared' bit of controllertype +bool isSharedController(uint16 cntlrType) +{ + ASSERTSTR (cntlrType != CNTLRTYPE_NO_TYPE && cntlrType < CNTLRTYPE_NR_TYPES, + "No controller defined with type: " << cntlrType); + + return (controllerTable[cntlrType].shared); +} + +// Get the ObservationNr from the controllername. +uint32 getObservationNr (const string& ObservationName) +{ + return (ACC::APS::indexValue(sharedControllerName(ObservationName), "()")); +} + +// Get the instanceNr from the controllername. +uint16 getInstanceNr (const string& ObservationName) +{ + return (ACC::APS::indexValue(ObservationName, "{}")); +} + +// Get the controllerType from the controllername. +int32 getControllerType (const string& controllerName) +{ + string cntlrName(controllerName); // destroyable copy + rtrim(cntlrName, "(){}0123456789"); // cut down to executable name + uint32 idx = CNTLRTYPE_NO_TYPE + 1; + while (idx < CNTLRTYPE_NR_TYPES) { + if (!strcmp (controllerTable[idx].cntlrName, cntlrName.c_str())) { + return (idx); + } + idx++; + } + + return (CNTLRTYPE_NO_TYPE); +} + + } // namespace APLCommon +} // namespace LOFAR + + + diff --git a/MAC/APL/APLCommon/src/Makefile.am b/MAC/APL/APLCommon/src/Makefile.am index cd4f7704f1cb37e6c2a6144230fee373fb4c1e92..cbf3828d049ae45136e54ac4b7ab98c17505d053 100644 --- a/MAC/APL/APLCommon/src/Makefile.am +++ b/MAC/APL/APLCommon/src/Makefile.am @@ -15,6 +15,7 @@ libaplcommon_la_CPPFLAGS = \ libaplcommon_la_SOURCES = \ $(DOCHDRS) \ APLUtilities.cc \ + ControllerDefines.cc \ LogicalDevice.cc \ PropertySetAnswer.cc \ ResourceAllocator.cc \ diff --git a/MAC/APL/APLCommon/test/Makefile.am b/MAC/APL/APLCommon/test/Makefile.am index 5c056f6ecf2abd83a982e4f3c5c1fe052e09688f..86a34c47198d044e7b83199b97f02e186c199bb5 100755 --- a/MAC/APL/APLCommon/test/Makefile.am +++ b/MAC/APL/APLCommon/test/Makefile.am @@ -1,3 +1,20 @@ +check_PROGRAMS = tControllerDefines + +tControllerDefines_SOURCES = tControllerDefines.cc +tControllerDefines_LDADD = ../src/libaplcommon.la +tControllerDefines_DEPENCIES= ../src/libaplcommon.la $(LOFAR_DEPEND) + +TESTSCRIPTS = tControllerDefines_test.sh + +TESTS_ENVIRONMENT = lofar_sharedir=$(lofar_sharedir) \ + LOFARROOT=$(LOFARROOT) + +TESTS = $(TESTSCRIPTS) + +EXTRA_DIST = tControllerDefines.log_prop \ + ResourceAllocatorTest.log_prop \ + $(TESTSCRIPTS) + noinst_PROGRAMS = \ ResourceAllocatorTest @@ -22,10 +39,6 @@ INSTHDRS = pkginclude_HEADERS = $(NOINSTHDRS) $(INSTHDRS) -sysconf_DATA = \ - ResourceAllocatorTest.log_prop - -EXTRA_DIST = $(BUILT_SOURCES) $(sysconf_data) %.log_prop: %.log_prop.in cp $< $@ diff --git a/MAC/APL/APLCommon/test/tControllerDefines.cc b/MAC/APL/APLCommon/test/tControllerDefines.cc new file mode 100644 index 0000000000000000000000000000000000000000..a83ca3fd051f421adfadc25cf72b25b65cfa05c9 --- /dev/null +++ b/MAC/APL/APLCommon/test/tControllerDefines.cc @@ -0,0 +1,83 @@ +//# tControllerDefines.cc +//# +//# Copyright (C) 2002-2004 +//# ASTRON (Netherlands Foundation for Research in Astronomy) +//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl +//# +//# This program is free software; you can redistribute it and/or modify +//# it under the terms of the GNU General Public License as published by +//# the Free Software Foundation; either version 2 of the License, or +//# (at your option) any later version. +//# +//# This program is distributed in the hope that it will be useful, +//# but WITHOUT ANY WARRANTY; without even the implied warranty of +//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//# GNU General Public License for more details. +//# +//# You should have received a copy of the GNU General Public License +//# along with this program; if not, write to the Free Software +//# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//# +//# $Id$ + +//# Always #include <lofar_config.h> first! +#include <lofar_config.h> + +//# Includes +#include <Common/LofarLogger.h> +#include <APL/APLCommon/ControllerDefines.h> + +using namespace LOFAR; +using namespace LOFAR::APLCommon; + +int main (int argc, char* argv[]) +{ + INIT_LOGGER(argv[0]); + + uint16 cntlrType(CNTLRTYPE_STATIONCTRL); + uint16 instanceNr(8); + uint32 obsNr(123); + + string cntlrName = controllerName(cntlrType, instanceNr, obsNr); + LOG_INFO_STR("Controllername = " << cntlrName); + ASSERTSTR (cntlrName == "StationControl(123){8}", + "Expecting cntlrName 'StationControl(123){8}' in stead of " << cntlrName); + + string sharedName = sharedControllerName(cntlrName); + LOG_INFO_STR("SharedName = " << sharedName); + ASSERTSTR (sharedName == "StationControl(123)", + "Expecting sharedName 'StationControl(123)' in stead of " << sharedName); + + string execName = getExecutable(cntlrType); + LOG_INFO_STR("Executable = " << execName); + ASSERTSTR (execName == "StationControl", + "Expecting executable 'StationControl' in stead of " << execName); + + ASSERTSTR (isSharedController(CNTLRTYPE_GROUPCTRL), + "Expected group controller to be shared."); + + uint32 retrievedObsNr = getObservationNr(cntlrName); + LOG_INFO_STR("ObservationNr = " << retrievedObsNr); + ASSERTSTR (retrievedObsNr == obsNr, + "Expected observationNr " << obsNr << " in stead of " << retrievedObsNr); + + uint32 retrievedInstanceNr = getInstanceNr(cntlrName); + LOG_INFO_STR("InstanceNr = " << retrievedInstanceNr); + ASSERTSTR (retrievedInstanceNr == instanceNr, + "Expected instanceNr " << instanceNr << " in stead of " + << retrievedInstanceNr); + + uint16 retrievedCntlrType = getControllerType(cntlrName); + LOG_INFO_STR("ControllerType = " << cntlrType); + ASSERTSTR (retrievedCntlrType == cntlrType, + "Expected controllerType " << cntlrType << " in stead of " + << retrievedCntlrType); + + LOG_INFO_STR("ObservationNr of shared name= " << getObservationNr(sharedName)); + LOG_INFO_STR("InstanceNr of shared name = " << getInstanceNr(sharedName)); + LOG_INFO_STR("CntlrType of shared name = " << getControllerType(sharedName)); + LOG_INFO_STR("Sharedname of shared name = " << sharedControllerName(sharedName)); + + return (0); +} + diff --git a/MAC/APL/APLCommon/test/tControllerDefines.log_prop b/MAC/APL/APLCommon/test/tControllerDefines.log_prop new file mode 100644 index 0000000000000000000000000000000000000000..15bfe2a4055ebefd55d81bc21608e79cb871a9b3 --- /dev/null +++ b/MAC/APL/APLCommon/test/tControllerDefines.log_prop @@ -0,0 +1,9 @@ +# Configure the rootLogger +log4cplus.rootLogger=DEBUG, STDOUT + +# Define the STDOUT appender +log4cplus.appender.STDOUT=log4cplus::ConsoleAppender +log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout +log4cplus.appender.STDOUT.layout.ConversionPattern=%-5p [%x]%c{3} - %m%n +log4cplus.appender.STDOUT.ImmediateFlush=true + diff --git a/MAC/APL/APLCommon/test/tControllerDefines_test.sh b/MAC/APL/APLCommon/test/tControllerDefines_test.sh new file mode 100755 index 0000000000000000000000000000000000000000..de0eddeb17beea67a9040e2b36162bc57a95a22b --- /dev/null +++ b/MAC/APL/APLCommon/test/tControllerDefines_test.sh @@ -0,0 +1,2 @@ +#!/bin/sh +$lofar_sharedir/runtest.sh tControllerDefines 2>&1 > tControllerDefines_test.log