You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

234 lines
10 KiB

/*
* Copyright (c) 2015, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
// The generated python module will be named "PyPfw"
// the "directors" feature is used to derive Python classes and make them look
// like derived C++ classes (calls to virtual methods will be properly
// forwarded to Python) - only on classes for which is it specified, see
// ILogger below..
%module(directors="1", threads="1") PyPfw
%feature("director:except") {
if ($error != NULL) {
throw Swig::DirectorMethodException();
}
}
%exception {
try { $action }
catch (Swig::DirectorException &e) { SWIG_fail; }
}
%include "std_string.i"
%include "std_vector.i"
%include "typemaps.i"
// We need to tell SWIG that std::vector<std::string> is a vector of strings
namespace std {
%template(StringVector) vector<string>;
}
// Tells swig that 'std::string& strError' must be treated as output parameters
// TODO: make it return a tuple instead of a list
%apply std::string &OUTPUT { std::string& strError };
// Automatic python docstring generation
// FIXME: because of the typemap above, the output type is wrong for methods
// that can return an error string.
// TODO: document each function manually ?
%feature("autodoc", "1");
// rename "CParameterMgrFullConnector" into the nicer "ParameterFramework" name
%rename(ParameterFramework) CParameterMgrFullConnector;
class CParameterMgrFullConnector
{
%{
#include "ParameterMgrFullConnector.h"
%}
public:
CParameterMgrFullConnector(const std::string& strConfigurationFilePath);
bool start(std::string& strError);
void setLogger(ILogger* pLogger);
ISelectionCriterionTypeInterface* createSelectionCriterionType(bool bIsInclusive);
ISelectionCriterionInterface* createSelectionCriterion(const std::string& strName,
const ISelectionCriterionTypeInterface* pSelectionCriterionType);
ISelectionCriterionInterface* getSelectionCriterion(const std::string& strName);
// Configuration application
void applyConfigurations();
bool getForceNoRemoteInterface() const;
void setForceNoRemoteInterface(bool bForceNoRemoteInterface);
bool setFailureOnMissingSubsystem(bool bFail, std::string& strError);
bool getFailureOnMissingSubsystem() const;
bool setFailureOnFailedSettingsLoad(bool bFail, std::string& strError);
bool getFailureOnFailedSettingsLoad() const;
void setSchemaUri(const std::string& schemaUri);
const std::string& getSchemaUri() const;
bool setValidateSchemasOnStart(bool bValidate, std::string &strError);
bool getValidateSchemasOnStart() const;
// Tuning mode
bool setTuningMode(bool bOn, std::string& strError);
bool isTuningModeOn() const;
// Current value space for user set/get value interpretation
void setValueSpace(bool bIsRaw);
bool isValueSpaceRaw() const;
// Current Output Raw Format for user get value interpretation
void setOutputRawFormat(bool bIsHex);
bool isOutputRawFormatHex() const;
// Automatic hardware synchronization control (during tuning session)
bool setAutoSync(bool bAutoSyncOn, std::string& strError);
bool isAutoSyncOn() const;
bool sync(std::string& strError);
// User set/get parameters
%apply std::string &INOUT { std::string& strValue };
bool accessParameterValue(const std::string& strPath, std::string& strValue, bool bSet, std::string& strError);
bool accessConfigurationValue(const std::string &strDomain, const std::string &strConfiguration, const std::string& strPath, std::string& strValue, bool bSet, std::string& strError);
%clear std::string& strValue;
bool getParameterMapping(const std::string& strPath, std::string& strValue) const;
// Creation/Deletion
bool createDomain(const std::string& strName, std::string& strError);
bool deleteDomain(const std::string& strName, std::string& strError);
bool renameDomain(const std::string& strName, const std::string& strNewName, std::string& strError);
bool deleteAllDomains(std::string& strError);
%apply std::string &OUTPUT { std::string& strResult }
bool setSequenceAwareness(const std::string& strName, bool bSequenceAware, std::string& strResult);
bool getSequenceAwareness(const std::string& strName, bool& bSequenceAware, std::string& strResult);
%clear std::string& strResult;
bool createConfiguration(const std::string& strDomain, const std::string& strConfiguration, std::string& strError);
bool deleteConfiguration(const std::string& strDomain, const std::string& strConfiguration, std::string& strError);
bool renameConfiguration(const std::string& strDomain, const std::string& strConfiguration, const std::string& strNewConfiguration, std::string& strError);
// Save/Restore
bool restoreConfiguration(const std::string& strDomain, const std::string& strConfiguration, std::list<std::string>& strError);
bool saveConfiguration(const std::string& strDomain, const std::string& strConfiguration, std::string& strError);
// Configurable element - domain association
bool addConfigurableElementToDomain(const std::string& strDomain, const std::string& strConfigurableElementPath, std::string& strError);
bool removeConfigurableElementFromDomain(const std::string& strDomain, const std::string& strConfigurableElementPath, std::string& strError);
bool split(const std::string& strDomain, const std::string& strConfigurableElementPath, std::string& strError);
bool setElementSequence(const std::string& strDomain, const std::string& strConfiguration, const std::vector<std::string>& astrNewElementSequence, std::string& strError);
bool setApplicationRule(const std::string& strDomain, const std::string& strConfiguration, const std::string& strApplicationRule, std::string& strError);
%apply std::string &OUTPUT { std::string& strResult }
bool getApplicationRule(const std::string& strDomain, const std::string& strConfiguration, std::string& strResult);
%clear std::string& strResult;
bool clearApplicationRule(const std::string& strDomain, const std::string& strConfiguration, std::string& strError);
bool importDomainsXml(const std::string& strXmlSource, bool bWithSettings, bool bFromFile,
std::string& strError);
bool importSingleDomainXml(const std::string& strXmlSource, bool bOverwrite,
std::string& strError);
bool importSingleDomainXml(const std::string& xmlSource, bool overwrite, bool withSettings,
bool fromFile, std::string& strError);
// Tells swig that "strXmlDest" in the two following methods are "inout"
// parameters
%apply std::string &INOUT { std::string& strXmlDest };
bool exportDomainsXml(std::string& strXmlDest, bool bWithSettings, bool bToFile,
std::string& strError) const;
bool exportSingleDomainXml(std::string& strXmlDest, const std::string& strDomainName, bool bWithSettings,
bool bToFile, std::string& strError) const;
%clear std::string& strXmlDest;
};
// SWIG nested class support is not complete - cf.
// http://swig.org/Doc2.0/SWIGPlus.html#SWIGPlus_nested_classes
// This link also explains how to trick SWIG and pretend that
// ILogger is a toplevel class (whereas it actually is an inner class of
// CParameterMgrFullConnector
// Logger interface
%feature("director") ILogger;
// The nested workaround is used to tell swig to ignore the
// inner class definition that would be redundant with the fake outer class.
// It would have been useful if ParameterMgrFullConnector.h was included
// (as opposed to copying the class definition in this .i).
// As their is no conflicting ILogger definition, this workaround is useless.
class ILogger
{
public:
virtual void info(const std::string& log) = 0;
virtual void warning(const std::string& log) = 0;
protected:
virtual ~ILogger() {}
};
%{
typedef CParameterMgrFullConnector::ILogger ILogger;
%}
class ISelectionCriterionTypeInterface
{
%{
#include "SelectionCriterionTypeInterface.h"
%}
public:
virtual bool addValuePair(int iValue, const std::string& strValue, std::string& strError) = 0;
virtual bool getNumericalValue(const std::string& strValue, int& iValue) const = 0;
virtual bool getLiteralValue(int iValue, std::string& strValue) const = 0;
virtual bool isTypeInclusive() const = 0;
virtual std::string getFormattedState(int iValue) const = 0;
protected:
virtual ~ISelectionCriterionTypeInterface() {}
};
class ISelectionCriterionInterface
{
%{
#include "SelectionCriterionInterface.h"
%}
public:
virtual void setCriterionState(int iState) = 0;
virtual int getCriterionState() const = 0;
virtual std::string getCriterionName() const = 0;
virtual const ISelectionCriterionTypeInterface* getCriterionType() const = 0;
protected:
virtual ~ISelectionCriterionInterface() {}
};