diff --git a/silecs-codegen/src/xml/fesa/fesa_3_0_0/fesaTemplates.py b/silecs-codegen/src/xml/fesa/fesa_3_0_0/fesaTemplates.py index 917daa4e83ed8a09a1f565554164e3012c361a7e..bd60e315aa68cc3b0c4452069d38c8c29b516d3d 100644 --- a/silecs-codegen/src/xml/fesa/fesa_3_0_0/fesaTemplates.py +++ b/silecs-codegen/src/xml/fesa/fesa_3_0_0/fesaTemplates.py @@ -98,25 +98,26 @@ cproject = """<?xml version="1.0" encoding="UTF-8" standalone="no"?> #========================================================================= # H Source template (.h file) #========================================================================= -hTop = """/* - * %s.h + +htop = """/* + * ${className}.h * * Generated by SILECS framework tools */ -#ifndef %s_%s_H_ -#define %s_%s_H_ +#ifndef ${className}_${className}_H_ +#define ${className}_${className}_H_ #include <SilecsService.h> #include <fesa-core/Synchronization/MultiplexingContext.h> -#include <%s/GeneratedCode/ServiceLocator.h> - """ +#include <${className}/GeneratedCode/ServiceLocator.h> +""" -hTopBlock = """#include <%s/Server/%s.h> - """ +hTopBlock = """#include <${className}/Server/${blockName}.h> +""" hTop2 = """ -namespace %s +namespace ${className} { /*--------------------------------------------------------------------------------------------------------- @@ -150,7 +151,7 @@ namespace %s * -------------------------------------------------------------------------------------------------------- */ - class Abstract%s + class Abstract${className} { public: static inline Silecs::Service* theService() { return pService_; } @@ -159,12 +160,12 @@ namespace %s static void setup(const ServiceLocator* serviceLocator); static void cleanup(); - static bool isInitialized(){ return Abstract%s::isInitialized_; } + static bool isInitialized(){ return Abstract${className}::isInitialized_; } static void setPLCSlaveRegisters(Silecs::PLC* pPLC, const ServiceLocator* serviceLocator); static void getPLCMasterRegisters(Silecs::PLC* pPLC, const ServiceLocator* serviceLocator); - Abstract%s(std::string blockName); - virtual ~Abstract%s(); + Abstract${className}(std::string blockName); + virtual ~Abstract${className}(); void getAllDevices(const ServiceLocator* serviceLocator, const bool recvNow, MultiplexingContext* pContext); void getPLCDevices(Silecs::PLC* pPLC, const ServiceLocator* serviceLocator, const bool recvNow, MultiplexingContext* pContext); @@ -186,13 +187,13 @@ namespace %s std::string blockName_; // not copyable object - Abstract%s(const Abstract%s&); - Abstract%s& operator=(const Abstract%s&); + Abstract${className}(const Abstract${className}&); + Abstract${className}& operator=(const Abstract${className}&); }; // ------------------------------------------------------------------------------------------------- #define BLOCK_RO( name )\t\\ - class name##_Type : public Abstract%s\t\\ + class name##_Type : public Abstract${className}\t\\ {\t\\ public:\t\\ name##_Type(std::string name);\t\\ @@ -202,7 +203,7 @@ namespace %s #define BLOCK_WO( name )\t\\ - class name##_Type : public Abstract%s\t\\ + class name##_Type : public Abstract${className}\t\\ {\t\\ public:\t\\ name##_Type(std::string name);\t\\ @@ -212,7 +213,7 @@ namespace %s } #define BLOCK_RW( name )\t\\ - class name##_Type : public Abstract%s\t\\ + class name##_Type : public Abstract${className}\t\\ {\t\\ public:\t\\ name##_Type(std::string name);\t\\ @@ -224,7 +225,7 @@ namespace %s """ -hBlock = """BLOCK_%s( %s ); +hBlock = """BLOCK_${mode}( ${blockName} ); """ hBottom = """ @@ -233,73 +234,73 @@ hBottom = """ *--------------------------------------------------------------------------------------------------------- * This is the public interface used from the FESA code to access the PLC service. */ - class %s + class ${className} { public: - static inline Silecs::Service* theService() { return Abstract%s::theService(); } - static inline Silecs::Cluster* theCluster() { return Abstract%s::theCluster(); } - static void setup(const ServiceLocator* serviceLocator) { Abstract%s::setup(serviceLocator); } - static void cleanup() { Abstract%s::cleanup(); } - static bool isInitialized(){ return Abstract%s::isInitialized(); } + static inline Silecs::Service* theService() { return Abstract${className}::theService(); } + static inline Silecs::Cluster* theCluster() { return Abstract${className}::theCluster(); } + static void setup(const ServiceLocator* serviceLocator) { Abstract${className}::setup(serviceLocator); } + static void cleanup() { Abstract${className}::cleanup(); } + static bool isInitialized(){ return Abstract${className}::isInitialized(); } static Silecs::PLC* getPLC(Device* pDevice) { - return Abstract%s::theCluster()->getPLC(pDevice->plcHostName.get(),pDevice->parameterFile.get()); + return Abstract${className}::theCluster()->getPLC(pDevice->plcHostName.get(),pDevice->parameterFile.get()); } """ -hDeclBlocks = """ static %s_Type %s; +hDeclBlocks = """ static ${className}_Type ${className}; """ hClosing = """ }; } - #endif /* %s_%s_H_ */ + #endif /* ${className}_${className}_H_ */ """ #========================================================================= # C++ Source template (.cpp file) #========================================================================= cTop = """/* - * %s.cpp + * ${className}.cpp * * Generated by SILECS framework tools */ -#include <%s/Common/%s.h> +#include <${className}/Common/${className}.h> #include <fesa-core/Synchronization/NoneContext.h> #include <fesa-core/Synchronization/MultiplexingContext.h> -namespace %s +namespace ${className} { //Global objects of the SILECS class - Silecs::Service* Abstract%s::pService_ = NULL; - Silecs::Cluster* Abstract%s::pCluster_ = NULL; - bool Abstract%s::isInitialized_ = false; + Silecs::Service* Abstract${className}::pService_ = NULL; + Silecs::Cluster* Abstract${className}::pCluster_ = NULL; + bool Abstract${className}::isInitialized_ = false; """ -cGlobal = """%s_Type\t%s::%s("%s"); +cGlobal = """${blockName}_Type\t${className}::${blockName}("${blockName}"); """ cPart1 = """ //------------------------------------------------------------------------------------------------------------- // Constructor & Destructor methods - Abstract%s::Abstract%s(std::string blockName): blockName_(blockName) {} - Abstract%s::~Abstract%s() {} + Abstract${className}::Abstract${className}(std::string blockName): blockName_(blockName) {} + Abstract${className}::~Abstract${className}() {} """ cBlockConstr = """ - %s_Type::%s_Type(std::string name): Abstract%s(name) {} - %s_Type::~%s_Type() {} + ${blockName}_Type::${blockName}_Type(std::string name): Abstract${className}(name) {} + ${blockName}_Type::~${blockName}_Type() {} """ cPart2 = """ //--------------------------------------------------------------------------------------------------------- - // Set-up the SILECS components for the Abstract%s class (service & cluster) + // Set-up the SILECS components for the Abstract${className} class (service & cluster) - void Abstract%s::setup(const ServiceLocator* serviceLocator) + void Abstract${className}::setup(const ServiceLocator* serviceLocator) { try { @@ -311,7 +312,7 @@ cPart2 = """ // Instantiate the SILECS Cluster object for the given Class/Version GlobalDevice* pGlobalDevice = serviceLocator->getGlobalDevice(); - pCluster_ = pService_->getCluster( "%s", pGlobalDevice->plcClassVersion.get()); + pCluster_ = pService_->getCluster( "${className}", pGlobalDevice->plcClassVersion.get()); isInitialized_ = true; // Connect each PLC of the Cluster that is referred from the FESA instance @@ -345,7 +346,7 @@ cPart2 = """ //--------------------------------------------------------------------------------------------------------- // Release all the SILECS resources - void Abstract%s::cleanup() + void Abstract${className}::cleanup() { // Attention! This method is responsible to stop all the PLC connections // and to remove all the SILECS resources (Clusters and related components: PLCs, Devices, Registers, ..) @@ -356,24 +357,24 @@ cPart2 = """ //--------------------------------------------------------------------------------------------------------- // Synchronise PLC SLAVE/MASTER registers and related FESA fields (automatically called by the setup method @connection time) - void Abstract%s::setPLCSlaveRegisters(Silecs::PLC* pPLC, const ServiceLocator* serviceLocator) + void Abstract${className}::setPLCSlaveRegisters(Silecs::PLC* pPLC, const ServiceLocator* serviceLocator) { fesa::NoneContext noneContext; """ cSetPLC = """ - %s::%s.setPLCDevices(pPLC, serviceLocator, false, &noneContext);""" + ${className}::${blockName}.setPLCDevices(pPLC, serviceLocator, false, &noneContext);""" cPart3 = """ } - void Abstract%s::getPLCMasterRegisters(Silecs::PLC* pPLC, const ServiceLocator* serviceLocator) + void Abstract${className}::getPLCMasterRegisters(Silecs::PLC* pPLC, const ServiceLocator* serviceLocator) { fesa::NoneContext noneContext; //MASTER acquisition fields are not consistent, can be set with none-context """ cGetPLC = """ - %s::%s.getPLCDevices(pPLC, serviceLocator, false, &noneContext);""" + ${className}::${blockName}.getPLCDevices(pPLC, serviceLocator, false, &noneContext);""" cPart4 = """ } @@ -386,7 +387,7 @@ cPart4 = """ //--------------------------------------------------------------------------------------------------------- - void Abstract%s::getAllDevices(const ServiceLocator* serviceLocator, const bool recvNow, MultiplexingContext* pContext) + void Abstract${className}::getAllDevices(const ServiceLocator* serviceLocator, const bool recvNow, MultiplexingContext* pContext) { if (recvNow) theCluster()->recv(blockName_); @@ -396,7 +397,7 @@ cPart4 = """ } } - void Abstract%s::getPLCDevices(Silecs::PLC* pPLC, const ServiceLocator* serviceLocator, const bool recvNow, MultiplexingContext* pContext) + void Abstract${className}::getPLCDevices(Silecs::PLC* pPLC, const ServiceLocator* serviceLocator, const bool recvNow, MultiplexingContext* pContext) { if (recvNow) pPLC->recv(blockName_); @@ -408,18 +409,18 @@ cPart4 = """ } } - void Abstract%s::getSomeDevices(std::vector<Device*> deviceCol, const bool sendNow, MultiplexingContext* pContext) + void Abstract${className}::getSomeDevices(std::vector<Device*> deviceCol, const bool sendNow, MultiplexingContext* pContext) { for(std::vector<Device*>::iterator pDeviceIter=deviceCol.begin(); pDeviceIter!= deviceCol.end(); pDeviceIter++) { getOneDevice(*pDeviceIter, sendNow, pContext); } } - void Abstract%s::getOneDevice(Device* pDevice, const bool recvNow, MultiplexingContext* pContext) {}; + void Abstract${className}::getOneDevice(Device* pDevice, const bool recvNow, MultiplexingContext* pContext) {}; //--------------------------------------------------------------------------------------------------------- - void Abstract%s::setAllDevices(const ServiceLocator* serviceLocator, bool sendNow, MultiplexingContext* pContext) + void Abstract${className}::setAllDevices(const ServiceLocator* serviceLocator, bool sendNow, MultiplexingContext* pContext) { std::vector<Device*> deviceCol = serviceLocator->getDeviceCollection(); for(std::vector<Device*>::iterator pDeviceIter=deviceCol.begin(); pDeviceIter!= deviceCol.end(); pDeviceIter++) @@ -429,7 +430,7 @@ cPart4 = """ if (sendNow) theCluster()->send(blockName_); } - void Abstract%s::setPLCDevices(Silecs::PLC* pPLC, const ServiceLocator* serviceLocator, bool sendNow, MultiplexingContext* pContext) + void Abstract${className}::setPLCDevices(Silecs::PLC* pPLC, const ServiceLocator* serviceLocator, bool sendNow, MultiplexingContext* pContext) { std::vector<Device*> deviceCol = serviceLocator->getDeviceCollection(); for(std::vector<Device*>::iterator pDeviceIter=deviceCol.begin(); pDeviceIter!= deviceCol.end(); pDeviceIter++) @@ -441,24 +442,24 @@ cPart4 = """ if (sendNow) pPLC->send(blockName_); } - void Abstract%s::setSomeDevices(std::vector<Device*> deviceCol, bool sendNow, MultiplexingContext* pContext) + void Abstract${className}::setSomeDevices(std::vector<Device*> deviceCol, bool sendNow, MultiplexingContext* pContext) { for(std::vector<Device*>::iterator pDeviceIter=deviceCol.begin(); pDeviceIter!= deviceCol.end(); pDeviceIter++) { setOneDevice(*pDeviceIter, sendNow, pContext); } } - void Abstract%s::setOneDevice(Device* pDevice, const bool sendNow, MultiplexingContext* pContext) {}; + void Abstract${className}::setOneDevice(Device* pDevice, const bool sendNow, MultiplexingContext* pContext) {}; //--------------------------------------------------------------------------------------------------------- """ cCommonGet = """ - void %s_Type::getOneDevice(Device* pDevice, const bool recvNow, MultiplexingContext* pContext) + void ${blockName}_Type::getOneDevice(Device* pDevice, const bool recvNow, MultiplexingContext* pContext) { if( !isInitialized_ ) { - throw fesa::FesaException(__FILE__, __LINE__, "SILECS-Service not initialized yet - %s::setup needs to be called before any plc-interaction can be done"); + throw fesa::FesaException(__FILE__, __LINE__, "SILECS-Service not initialized yet - ${className}::setup needs to be called before any plc-interaction can be done"); } Silecs::PLC* pPLC = pCluster_->getPLC(pDevice->plcHostName.get(),pDevice->parameterFile.get()); Silecs::Device* pPLCDevice = pPLC->getDevice(pDevice->plcDeviceLabel.get()); @@ -482,60 +483,61 @@ cRecv = """ if (recvNow) pPLCDevice -> recv(blockName_); """ cGetStringReg = """ - pRegister = pPLCDevice->getRegister("%s"); - pDevice->%s.set(pRegister->getValString().c_str(), pContext); + pRegister = pPLCDevice->getRegister("${registerName}"); + pDevice->${registerName}.set(pRegister->getValString().c_str(), pContext); """ cGetStringArrayReg = """ { - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); const std::string** stdStringArray = pRegister->getRefStringArray(dim1); for (unsigned int i=0; i<dim1; i++) - { pDevice->%s.setString(stdStringArray[i]->c_str(), i, pContext); + { pDevice->${registerName}.setString(stdStringArray[i]->c_str(), i, pContext); } } """ cGetScalarReg = """ - pDevice->%s.set( pPLCDevice->getRegister("%s")->getVal%s(), pContext);""" + pDevice->${registerName}.set( pPLCDevice->getRegister("${registerName}")->getVal${registerType}(), pContext);""" cGetArrayReg = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); - pDevice->%s.set(pRegister->getRef%sArray(dim1), dim1, pContext); + pDevice->${registerName}.set(pRegister->getRef${registerType}Array(dim1), dim1, pContext); """ cGetArray2DReg = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); dim2 = pRegister->getDimension2(); - pDevice->%s.set(pRegister->getRef%sArray2D(dim1, dim2), dim1, dim2, pContext); + pDevice->${registerName}.set(pRegister->getRef${registerType}Array2D(dim1, dim2), dim1, dim2, pContext); """ + cGetUnsignedArrayReg = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); - %s* %s = (%s*)calloc(dim1, sizeof(%s)); - pRegister->getVal%sArray(%s, dim1);\t//use automatic conversion for JAVA non-supported type - pDevice->%s.set(%s, dim1, pContext); - free(%s); + ${registerType}* ${registerName} = (${registerType}*)calloc(dim1, sizeof(${registerType})); + pRegister->getVal${registerType}Array(${registerName}, dim1);\t//use automatic conversion for JAVA non-supported type + pDevice->${registerName}.set(${registerName}, dim1, pContext); + free(${registerName}); """ cGetUnsignedArray2DReg = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); dim2 = pRegister->getDimension2(); - %s* %s = (%s*)calloc(dim1*dim2, sizeof(%s)); - pRegister->getVal%sArray2D(%s, dim1, dim2);\t//use automatic conversion for JAVA non-supported type - pDevice->%s.set(%s, dim1, dim2, pContext); - free(%s); + ${fesaType]* ${registerName} = (${fesaType]*)calloc(dim1*dim2, sizeof(${fesaType])); + pRegister->getVal${registerType}Array2D(${registerName}, dim1, dim2);\t//use automatic conversion for JAVA non-supported type + pDevice->${registerName}.set(${registerName}, dim1, dim2, pContext); + free(${registerName}); """ cCommonSet = """ - void %s_Type::setOneDevice(Device* pDevice, const bool sendNow, MultiplexingContext* pContext) + void ${blockName}_Type::setOneDevice(Device* pDevice, const bool sendNow, MultiplexingContext* pContext) { if( !isInitialized_ ) { - throw fesa::FesaException(__FILE__, __LINE__, "SILECS-Service not initialized yet - %s::setup needs to be called before any plc-interaction can be done"); + throw fesa::FesaException(__FILE__, __LINE__, "SILECS-Service not initialized yet - ${className}::setup needs to be called before any plc-interaction can be done"); } Silecs::PLC* pPLC = pCluster_->getPLC(pDevice->plcHostName.get(),pDevice->parameterFile.get()); Silecs::Device* pPLCDevice = pPLC->getDevice(pDevice->plcDeviceLabel.get()); @@ -546,117 +548,118 @@ cSend = """ """ cDatatypeSet = """ - void %s_Type::setOneDevice(Device* pDevice, %sPropertyData& data, bool sendNow, MultiplexingContext* pContext) + void ${blockName}_Type::setOneDevice(Device* pDevice, ${blockName}PropertyData& data, bool sendNow, MultiplexingContext* pContext) { if( !isInitialized_ ) { - throw fesa::FesaException(__FILE__, __LINE__, "SILECS-Service not initialized yet - %s::setup needs to be called before any plc-interaction can be done"); + throw fesa::FesaException(__FILE__, __LINE__, "SILECS-Service not initialized yet - ${className}::setup needs to be called before any plc-interaction can be done"); } Silecs::PLC* pPLC = pCluster_->getPLC(pDevice->plcHostName.get(),pDevice->parameterFile.get()); Silecs::Device* pPLCDevice = pPLC->getDevice(pDevice->plcDeviceLabel.get()); """ cSetStringReg = """ - pPLCDevice->getRegister("%s")->setValString(pDevice->%s.get(pContext)); + pPLCDevice->getRegister("${registerName}")->setValString(pDevice->${registerName}.get(pContext)); """ cSetStringArrayReg = """ { - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); std::string stdStringArray[dim1]; - const char** cStringArray = pDevice->%s.get(fesaDim1, pContext); + const char** cStringArray = pDevice->${registerName}.get(fesaDim1, pContext); for (unsigned int i=0; i<dim1; i++) stdStringArray[i] = (const char*)cStringArray[i]; pRegister->setValStringArray(stdStringArray, dim1); } """ cSetScalarReg = """ - pPLCDevice->getRegister("%s")->setVal%s( pDevice->%s.get(pContext));""" + pPLCDevice->getRegister("${registerName}")->setVal${registerType}( pDevice->${registerName}.get(pContext));""" cSetScalarUReg = """ - pPLCDevice->getRegister("%s")->setVal%s( (%s)pDevice->%s.get(pContext));""" + pPLCDevice->getRegister("${registerName}")->setVal${registerType}( (${lowerType})pDevice->${registerName}.get(pContext));""" cSetArrayReg = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); - pRegister->setVal%sArray(pDevice->%s.get(fesaDim1, pContext), dim1); + pRegister->setVal${registerType}Array(pDevice->${registerName}.get(fesaDim1, pContext), dim1); """ cSetArray2DReg = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); dim2 = pRegister->getDimension2(); - pRegister->setVal%sArray2D(pDevice->%s.get(fesaDim1, fesaDim2, pContext), dim1, dim2); + pRegister->setVal${registerType}Array2D(pDevice->${registerName}.get(fesaDim1, fesaDim2, pContext), dim1, dim2); """ cSetUnsignedArrayReg = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); - pRegister->setVal%sArray(pDevice->%s.get(fesaDim1, pContext), dim1);\t//use automatic conversion for JAVA non-supported type + pRegister->setVal${registerType}Array(pDevice->${registerName}.get(fesaDim1, pContext), dim1);\t//use automatic conversion for JAVA non-supported type """ cSetUnsignedArray2DReg = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); dim2 = pRegister->getDimension2(); - pRegister->setVal%sArray2D( pDevice->%s.get(fesaDim1, fesaDim2, pContext), dim1, dim2);\t//use automatic conversion for JAVA non-supported type + pRegister->setVal${registerType}Array2D( pDevice->${registerName}.get(fesaDim1, fesaDim2, pContext), dim1, dim2);\t//use automatic conversion for JAVA non-supported type """ cSetStringRegData = """ - (data.is%sAvailable()) ? pPLCDevice->getRegister("%s")->setValString(data.%s.get()) : - pPLCDevice->getRegister("%s")->setValString(pDevice->%s.get(pContext));""" + (data.is${registerName_upper}Available()) ? pPLCDevice->getRegister("${registerName}")->setValString(data.${registerName}.get()) : + pPLCDevice->getRegister("${registerName}")->setValString(pDevice->${registerName}.get(pContext));""" cSetStringArrayRegData = """ { - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); std::string stdStringArray[dim1]; - const char** cStringArray = (data.is%sAvailable() ? data.%s.get(fesaDim1) : pDevice->%s.get(fesaDim1, pContext)); + const char** cStringArray = (data.is${registerName_upper}Available() ? data.${registerName}.get(fesaDim1) : pDevice->${registerName}.get(fesaDim1, pContext)); for (unsigned int i=0; i<dim1; i++) stdStringArray[i] = (const char*)cStringArray[i]; pRegister->setValStringArray(stdStringArray, dim1); } """ + cSetScalarRegData = """ - (data.is%sAvailable()) ? pPLCDevice->getRegister("%s")->setVal%s( data.%s.get()) : - pPLCDevice->getRegister("%s")->setVal%s( pDevice->%s.get(pContext));""" + (data.is${registerName_upper}Available()) ? pPLCDevice->getRegister("${registerName}")->setVal${registerType}( data.${registerName}.get()) : + pPLCDevice->getRegister("${registerName}")->setVal${registerType}( pDevice->${registerName}.get(pContext));""" cSetScalarURegData = """ - (data.is%sAvailable()) ? pPLCDevice->getRegister("%s")->setVal%s( (%s)data.%s.get()) : - pPLCDevice->getRegister("%s")->setVal%s( (%s)pDevice->%s.get(pContext));""" + (data.is${registerName_upper}Available()) ? pPLCDevice->getRegister("${registerName}")->setVal${registerType}( (${lowerType})data.${registerName}.get()) : + pPLCDevice->getRegister("${registerName}")->setVal${registerType}( (${lowerType})pDevice->${registerName}.get(pContext));""" cSetArrayRegData = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); - (data.is%sAvailable()) ? pRegister->setVal%sArray( data.%s.get(fesaDim1), dim1) : - pRegister->setVal%sArray( pDevice->%s.get(fesaDim1, pContext), dim1); + (data.is${registerName_upper}Available()) ? pRegister->setVal${registerType}Array( data.${registerName}.get(fesaDim1), dim1) : + pRegister->setVal${registerType}Array( pDevice->${registerName}.get(fesaDim1, pContext), dim1); """ cSetUnsignedArrayRegData = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); - (data.is%sAvailable()) ? pRegister->setVal%sArray( data.%s.get(fesaDim1), dim1) : - pRegister->setVal%sArray( pDevice->%s.get(fesaDim1, pContext), dim1); + (data.is${registerName_upper}Available()) ? pRegister->setVal${registerType}Array( data.${registerName}.get(fesaDim1), dim1) : + pRegister->setVal${registerType}Array( pDevice->${registerName}.get(fesaDim1, pContext), dim1); """ cSetArray2DRegData = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); dim2 = pRegister->getDimension2(); - (data.is%sAvailable()) ? pRegister->setVal%sArray2D(data.%s.get(fesaDim1, fesaDim2), dim1, dim2) : - pRegister->setVal%sArray2D(pDevice->%s.get(fesaDim1, fesaDim2, pContext), dim1, dim2); + (data.is${registerName_upper}Available()) ? pRegister->setVal${registerType}Array2D(data.${registerName}.get(fesaDim1, fesaDim2), dim1, dim2) : + pRegister->setVal${registerType}Array2D(pDevice->${registerName}.get(fesaDim1, fesaDim2, pContext), dim1, dim2); """ cSetUnsignedArray2DRegData = """ - pRegister = pPLCDevice->getRegister("%s"); + pRegister = pPLCDevice->getRegister("${registerName}"); dim1 = pRegister->getDimension1(); dim2 = pRegister->getDimension2(); - (data.is%sAvailable()) ? pRegister->setVal%sArray2D(data.%s.get(fesaDim1, fesaDim2), dim1, dim2) : - pRegister->setVal%sArray2D(pDevice->%s.get(fesaDim1, fesaDim2, pContext), dim1, dim2); + (data.is${registerName_upper}Available()) ? pRegister->setVal${registerType}Array2D(data.${registerName}.get(fesaDim1, fesaDim2), dim1, dim2) : + pRegister->setVal${registerType}Array2D(pDevice->${registerName}.get(fesaDim1, fesaDim2, pContext), dim1, dim2); """ makeDesign = """# Include SILECS library path -SILECS_PATH ?= %s +SILECS_PATH ?= ${centralMakefilePath} # Additional compiler warning flags override WARNFLAGS += @@ -668,13 +671,11 @@ LINKER_FLAGS += # Additional headers (Custom.h Specific.h ...) which need to be installed EXTRA_HEADERS += - - """ - +""" makeDeploy = """# Include SILECS library path -SILECS_PATH ?= %s +SILECS_PATH ?= ${silecsBasePath} -SNAP7_BASE = %s +SNAP7_BASE = ${snap7BasePath} # Additional compiler warning flags override WARNFLAGS += @@ -697,9 +698,8 @@ LINKER_SERVER_FLAGS += # Additional headers (Custom.h Specific.h ...) which need to be released EXTRA_HEADERS += - - """ - +""" + #========================================================================= # FESA .cproject file #========================================================================= @@ -709,138 +709,139 @@ def genCProject(): #========================================================================= # Header file (.h) code generation sub-functions -#========================================================================= +#================ ========================================================= + def genHTop(className): - return hTop %(className, className, className, className, className, className) + return htop.replace('${className}', className ) def genHTopBlock(className, blockName): - return hTopBlock %(className, blockName) + return hTopBlock.replace('${className}', className).replace('${blockName}', blockName) def genHTop2(className): - return hTop2 %(className, className, className, className, className, className, className, className, className, className, className, className) - + return hTop2.replace('${className}', className) + def genHBlock(mode, blockName): - return hBlock %(mode, blockName) + return hBlock.replace('${mode}', mode).replace('${blockName}', blockName) def genHBottom(className): - return hBottom %(className, className, className, className, className, className, className) + return hBottom.replace('${className}', className) def genHDeclBlocks(className): - return hDeclBlocks %(className, className) + return hDeclBlocks.replace('${className}', className) def genHClosing(className): - return hClosing %(className, className) + return hClosing.replace('${className}', className) #========================================================================= # C++ file (.cpp) code generation sub-functions #========================================================================= def genCTop(className): - return cTop %(className, className, className, className, className, className, className) + return cTop.replace('${className}', className) def genCGlobal(className, blockName): - return cGlobal %(blockName, className, blockName, blockName) + return cGlobal.replace('${className}', className).replace('${blockName}', blockName) def genCPart1(className): - return cPart1 %(className, className, className, className) + return cPart1.replace('${className}', className) def genCBlockConstr(blockName, className): - return cBlockConstr %(blockName, blockName, className, blockName, blockName) + return cBlockConstr.replace('${className}', className).replace('${blockName}', blockName) def genCPart2(className): - return cPart2 %(className, className, className, className, className) + return cPart2.replace('${className}', className) def genCSetPLC(className, blockName): - return cSetPLC %(className, blockName) + return cSetPLC.replace('${className}', className).replace('${blockName}', blockName) def genCCommonGet(blockName,className): - return cCommonGet %(blockName,className) + return cCommonGet.replace('${className}', className).replace('${blockName}', blockName) def genCPart3(className): - return cPart3 %(className) + return cPart3.replace('${className}', className) def genCGetPLC(className, blockName): - return cGetPLC %(className, blockName) + return cGetPLC.replace('${className}', className).replace('${blockName}', blockName) def genCPart4(className): - return cPart4 %(className, className, className, className, className, className, className, className) - -def genCGetStringReg(regName): - return cGetStringReg %(regName, regName) + return cPart4.replace('${className}', className) -def genCGetStringArrayReg(regName): - return cGetStringArrayReg %(regName, regName) +def genCGetStringReg(registerName): + return cGetStringReg.replace('${registerName}', registerName) -def genCGetScalarReg(regName, regType): - return cGetScalarReg %(regName, regName, regType) +def genCGetStringArrayReg(registerName): + return cGetStringArrayReg.replace('${registerName}', registerName) -def genCGetArrayReg(regName, regType): - return cGetArrayReg %(regName, regName, regType) +def genCGetScalarReg(registerName, registerType): + return cGetScalarReg.replace('${registerName}', registerName).replace('${registerType}', registerType) -def genCGetArray2DReg(regName, regType): - return cGetArray2DReg %(regName, regName, regType) +def genCGetArrayReg(registerName, registerType): + return cGetArrayReg.replace('${registerName}', registerName).replace('${registerType}', registerType) -def genCGetUnsignedArrayReg(regName, fesaType, regType): - return cGetUnsignedArrayReg %(regName, fesaType, regName, fesaType, fesaType, regType, regName, regName, regName, regName) +def genCGetArray2DReg(registerName, registerType): + return cGetArray2DReg.replace('${registerName}', registerName).replace('${registerType}', registerType) -def genCGetUnsignedArray2DReg(regName, fesaType, regType): - return cGetUnsignedArray2DReg %(regName, fesaType, regName, fesaType, fesaType, regType, regName, regName, regName, regName) +def genCGetUnsignedArrayReg(registerName, fesaType, registerType): + return cGetUnsignedArrayReg.replace('${registerName}', registerName).replace('${registerType}', registerType) + +def genCGetUnsignedArray2DReg(registerName, fesaType, registerType): + return cGetUnsignedArray2DReg.replace('${registerName}', registerName).replace('${registerType}', registerType).replace('${fesaType]', fesaType) def genCCommonSet(blockName,className): - return cCommonSet %(blockName,className) + return cCommonSet.replace('${className}', className).replace('${blockName}', blockName) def genCDatatypeSet(blockName,className): - return cDatatypeSet %(blockName, blockName,className) + return cDatatypeSet.replace('${className}', className).replace('${blockName}', blockName) -def genCSetStringReg(regName): - return cSetStringReg %(regName, regName) +def genCSetStringReg(registerName): + return cSetStringReg.replace('${registerName}', registerName) -def genCSetStringArrayReg(regName): - return cSetStringArrayReg %(regName, regName) +def genCSetStringArrayReg(registerName): + return cSetStringArrayReg.replace('${registerName}', registerName) -def genCSetScalarReg(regName, regType): - return cSetScalarReg %(regName, regType, regName) +def genCSetScalarReg(registerName, registerType): + return cSetScalarReg.replace('${registerName}', registerName).replace('${registerType}', registerType) -def genCSetScalarUReg(regName, regType, lowerType): - return cSetScalarUReg %(regName, regType, lowerType, regName) +def genCSetScalarUReg(registerName, registerType, lowerType): + return cSetScalarUReg.replace('${registerName}', registerName).replace('${registerType}', registerType).replace('${lowerType}', lowerType) -def genCSetArrayReg(regName, regType): - return cSetArrayReg %(regName, regType, regName) +def genCSetArrayReg(registerName, registerType): + return cSetArrayReg.replace('${registerName}', registerName).replace('${registerType}', registerType) -def genCSetUnsignedArrayReg(regName, regType): - return cSetUnsignedArrayReg %(regName, regType, regName) +def genCSetUnsignedArrayReg(registerName, registerType): + return cSetUnsignedArrayReg.replace('${registerName}', registerName).replace('${registerType}', registerType) -def genCSetArray2DReg(regName, regType): - return cSetArray2DReg %(regName, regType, regName) +def genCSetArray2DReg(registerName, registerType): + return cSetArray2DReg.replace('${registerName}', registerName).replace('${registerType}', registerType) -def genCSetUnsignedArray2DReg(regName, regType): - return cSetUnsignedArray2DReg %(regName, regType, regName) +def genCSetUnsignedArray2DReg(registerName, registerType): + return cSetUnsignedArray2DReg.replace('${registerName}', registerName).replace('${registerType}', registerType) -def genCSetStringRegData(regName): - return cSetStringRegData %(iecommon.capitalizeString(regName), regName, regName, regName, regName) +def genCSetStringRegData(registerName): + return cSetStringRegData.replace('${registerName}', registerName).replace('${registerName_upper}', iecommon.capitalizeString(registerName)) -def genCSetStringArrayRegData(regName): - return cSetStringArrayRegData %(regName, iecommon.capitalizeString(regName), regName, regName) +def genCSetStringArrayRegData(registerName): + return cSetStringArrayRegData.replace('${registerName}', registerName).replace('${registerName_upper}', iecommon.capitalizeString(registerName)) -def genCSetScalarRegData(regName, regType): - return cSetScalarRegData %(iecommon.capitalizeString(regName), regName, regType, regName, regName, regType, regName) +def genCSetScalarRegData(registerName, registerType): + return cSetScalarRegData.replace('${registerName}', registerName).replace('${registerName_upper}', iecommon.capitalizeString(registerName)).replace('${registerType}', registerType) -def genCSetScalarURegData(regName, regType, lowerType): - return cSetScalarURegData %(iecommon.capitalizeString(regName), regName, regType, lowerType, regName, regName, regType, lowerType, regName) +def genCSetScalarURegData(registerName, registerType, lowerType): + return cSetScalarURegData.replace('${registerName}', registerName).replace('${registerName_upper}', iecommon.capitalizeString(registerName)).replace('${registerType}', registerType).replace('${lowerType}', lowerType) -def genCSetUnsignedArrayRegData(regName, regType): - return cSetUnsignedArrayRegData %(regName, iecommon.capitalizeString(regName), regType, regName, regType, regName) +def genCSetUnsignedArrayRegData(registerName, registerType): + return cSetUnsignedArrayRegData.replace('${registerName}', registerName).replace('${registerName_upper}', iecommon.capitalizeString(registerName)).replace('${registerType}', registerType) -def genCSetUnsignedArray2DRegData(regName, fesaType, regType): - return cSetUnsignedArray2DRegData %(regName, iecommon.capitalizeString(regName), regType, regName, regType, regName) +def genCSetUnsignedArray2DRegData(registerName, fesaType, registerType): + return cSetUnsignedArray2DRegData.replace('${registerName}', registerName).replace('${registerName_upper}', iecommon.capitalizeString(registerName)).replace('${registerType}', registerType) -def genCSetArrayRegData(regName, regType): - return cSetArrayRegData %(regName, iecommon.capitalizeString(regName), regType, regName, regType, regName) +def genCSetArrayRegData(registerName, registerType): + return cSetArrayRegData.replace('${registerName}', registerName).replace('${registerName_upper}', iecommon.capitalizeString(registerName)).replace('${registerType}', registerType) -def genCSetArray2DRegData(regName, fesaType, regType): - return cSetArray2DRegData %(regName, iecommon.capitalizeString(regName), regType, regName, regType, regName) +def genCSetArray2DRegData(registerName, fesaType, registerType): + return cSetArray2DRegData.replace('${registerName}', registerName).replace('${registerName_upper}', iecommon.capitalizeString(registerName)).replace('${registerType}', registerType) -def genMakeDesign(CentralMakefilePath): - return makeDesign %(CentralMakefilePath) +def genMakeDesign(centralMakefilePath): + return makeDesign.replace('${centralMakefilePath}', centralMakefilePath) def genMakeDeploy(silecsBasePath,snap7BasePath): - return makeDeploy %(silecsBasePath,snap7BasePath) + return makeDeploy.replace('${silecsBasePath}', silecsBasePath).replace('${snap7BasePath}', snap7BasePath) diff --git a/silecs-codegen/src/xml/test/generated_correct/AllTypes.h b/silecs-codegen/src/xml/test/generated_correct/AllTypes.h index 5418e9aca486de02d3d430791c164f486a1d3e62..ead17ae51ff1c4136695adcf96e9cbd1340492ed 100644 --- a/silecs-codegen/src/xml/test/generated_correct/AllTypes.h +++ b/silecs-codegen/src/xml/test/generated_correct/AllTypes.h @@ -10,9 +10,9 @@ #include <SilecsService.h> #include <fesa-core/Synchronization/MultiplexingContext.h> #include <AllTypes/GeneratedCode/ServiceLocator.h> - #include <AllTypes/Server/SendMyRWBlock.h> - #include <AllTypes/Server/SendMyWOBlock.h> - +#include <AllTypes/Server/SendMyRWBlock.h> +#include <AllTypes/Server/SendMyWOBlock.h> + namespace AllTypes {