1 /* 2 * Copyright (c) 2015, Intel Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this 9 * list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, 12 * this list of conditions and the following disclaimer in the documentation and/or 13 * other materials provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors 16 * may be used to endorse or promote products derived from this software without 17 * specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 // The generated python module will be named "PyPfw" 31 // the "directors" feature is used to derive Python classes and make them look 32 // like derived C++ classes (calls to virtual methods will be properly 33 // forwarded to Python) - only on classes for which is it specified, see 34 // ILogger below.. 35 %module(directors="1", threads="1") PyPfw 36 37 %feature("director:except") { 38 if ($error != NULL) { 39 throw Swig::DirectorMethodException(); 40 } 41 } 42 %exception { 43 try { $action } catch(Swig::DirectorException & e)44 catch (Swig::DirectorException &e) { SWIG_fail; } 45 } 46 47 %include "std_string.i" 48 %include "std_vector.i" 49 %include "typemaps.i" 50 51 // We need to tell SWIG that std::vector<std::string> is a vector of strings 52 namespace std { 53 %template(StringVector) vector<string>; 54 } 55 56 // Tells swig that 'std::string& strError' must be treated as output parameters 57 // TODO: make it return a tuple instead of a list 58 %apply std::string &OUTPUT { std::string& strError }; 59 60 // Automatic python docstring generation 61 // FIXME: because of the typemap above, the output type is wrong for methods 62 // that can return an error string. 63 // TODO: document each function manually ? 64 %feature("autodoc", "1"); 65 66 67 // rename "CParameterMgrFullConnector" into the nicer "ParameterFramework" name 68 %rename(ParameterFramework) CParameterMgrFullConnector; 69 class CParameterMgrFullConnector 70 { 71 72 %{ 73 #include "ParameterMgrFullConnector.h" 74 %} 75 76 public: 77 CParameterMgrFullConnector(const std::string& strConfigurationFilePath); 78 79 bool start(std::string& strError); 80 81 void setLogger(ILogger* pLogger); 82 83 ISelectionCriterionTypeInterface* createSelectionCriterionType(bool bIsInclusive); 84 ISelectionCriterionInterface* createSelectionCriterion(const std::string& strName, 85 const ISelectionCriterionTypeInterface* pSelectionCriterionType); 86 ISelectionCriterionInterface* getSelectionCriterion(const std::string& strName); 87 88 // Configuration application 89 void applyConfigurations(); 90 91 bool getForceNoRemoteInterface() const; 92 void setForceNoRemoteInterface(bool bForceNoRemoteInterface); 93 94 bool setFailureOnMissingSubsystem(bool bFail, std::string& strError); 95 bool getFailureOnMissingSubsystem() const; 96 97 bool setFailureOnFailedSettingsLoad(bool bFail, std::string& strError); 98 bool getFailureOnFailedSettingsLoad() const; 99 100 void setSchemaUri(const std::string& schemaUri); 101 const std::string& getSchemaUri() const; 102 103 bool setValidateSchemasOnStart(bool bValidate, std::string &strError); 104 bool getValidateSchemasOnStart() const; 105 106 // Tuning mode 107 bool setTuningMode(bool bOn, std::string& strError); 108 bool isTuningModeOn() const; 109 110 // Current value space for user set/get value interpretation 111 void setValueSpace(bool bIsRaw); 112 bool isValueSpaceRaw() const; 113 114 // Current Output Raw Format for user get value interpretation 115 void setOutputRawFormat(bool bIsHex); 116 bool isOutputRawFormatHex() const; 117 118 // Automatic hardware synchronization control (during tuning session) 119 bool setAutoSync(bool bAutoSyncOn, std::string& strError); 120 bool isAutoSyncOn() const; 121 bool sync(std::string& strError); 122 123 // User set/get parameters 124 %apply std::string &INOUT { std::string& strValue }; 125 bool accessParameterValue(const std::string& strPath, std::string& strValue, bool bSet, std::string& strError); 126 bool accessConfigurationValue(const std::string &strDomain, const std::string &strConfiguration, const std::string& strPath, std::string& strValue, bool bSet, std::string& strError); 127 %clear std::string& strValue; 128 129 bool getParameterMapping(const std::string& strPath, std::string& strValue) const; 130 131 // Creation/Deletion 132 bool createDomain(const std::string& strName, std::string& strError); 133 bool deleteDomain(const std::string& strName, std::string& strError); 134 bool renameDomain(const std::string& strName, const std::string& strNewName, std::string& strError); 135 bool deleteAllDomains(std::string& strError); 136 %apply std::string &OUTPUT { std::string& strResult } 137 bool setSequenceAwareness(const std::string& strName, bool bSequenceAware, std::string& strResult); 138 bool getSequenceAwareness(const std::string& strName, bool& bSequenceAware, std::string& strResult); 139 %clear std::string& strResult; 140 bool createConfiguration(const std::string& strDomain, const std::string& strConfiguration, std::string& strError); 141 bool deleteConfiguration(const std::string& strDomain, const std::string& strConfiguration, std::string& strError); 142 bool renameConfiguration(const std::string& strDomain, const std::string& strConfiguration, const std::string& strNewConfiguration, std::string& strError); 143 144 // Save/Restore 145 bool restoreConfiguration(const std::string& strDomain, const std::string& strConfiguration, std::list<std::string>& strError); 146 bool saveConfiguration(const std::string& strDomain, const std::string& strConfiguration, std::string& strError); 147 148 // Configurable element - domain association 149 bool addConfigurableElementToDomain(const std::string& strDomain, const std::string& strConfigurableElementPath, std::string& strError); 150 bool removeConfigurableElementFromDomain(const std::string& strDomain, const std::string& strConfigurableElementPath, std::string& strError); 151 bool split(const std::string& strDomain, const std::string& strConfigurableElementPath, std::string& strError); 152 bool setElementSequence(const std::string& strDomain, const std::string& strConfiguration, const std::vector<std::string>& astrNewElementSequence, std::string& strError); 153 154 bool setApplicationRule(const std::string& strDomain, const std::string& strConfiguration, const std::string& strApplicationRule, std::string& strError); 155 %apply std::string &OUTPUT { std::string& strResult } 156 bool getApplicationRule(const std::string& strDomain, const std::string& strConfiguration, std::string& strResult); 157 %clear std::string& strResult; 158 bool clearApplicationRule(const std::string& strDomain, const std::string& strConfiguration, std::string& strError); 159 160 bool importDomainsXml(const std::string& strXmlSource, bool bWithSettings, bool bFromFile, 161 std::string& strError); 162 bool importSingleDomainXml(const std::string& strXmlSource, bool bOverwrite, 163 std::string& strError); 164 bool importSingleDomainXml(const std::string& xmlSource, bool overwrite, bool withSettings, 165 bool fromFile, std::string& strError); 166 167 // Tells swig that "strXmlDest" in the two following methods are "inout" 168 // parameters 169 %apply std::string &INOUT { std::string& strXmlDest }; 170 bool exportDomainsXml(std::string& strXmlDest, bool bWithSettings, bool bToFile, 171 std::string& strError) const; 172 173 bool exportSingleDomainXml(std::string& strXmlDest, const std::string& strDomainName, bool bWithSettings, 174 bool bToFile, std::string& strError) const; 175 %clear std::string& strXmlDest; 176 }; 177 178 // SWIG nested class support is not complete - cf. 179 // http://swig.org/Doc2.0/SWIGPlus.html#SWIGPlus_nested_classes 180 // This link also explains how to trick SWIG and pretend that 181 // ILogger is a toplevel class (whereas it actually is an inner class of 182 // CParameterMgrFullConnector 183 // Logger interface 184 %feature("director") ILogger; 185 // The nested workaround is used to tell swig to ignore the 186 // inner class definition that would be redundant with the fake outer class. 187 // It would have been useful if ParameterMgrFullConnector.h was included 188 // (as opposed to copying the class definition in this .i). 189 // As their is no conflicting ILogger definition, this workaround is useless. 190 class ILogger 191 { 192 public: 193 virtual void info(const std::string& log) = 0; 194 virtual void warning(const std::string& log) = 0; 195 protected: ~ILogger()196 virtual ~ILogger() {} 197 }; 198 %{ 199 typedef CParameterMgrFullConnector::ILogger ILogger; 200 %} 201 202 class ISelectionCriterionTypeInterface 203 { 204 %{ 205 #include "SelectionCriterionTypeInterface.h" 206 %} 207 208 public: 209 virtual bool addValuePair(int iValue, const std::string& strValue, std::string& strError) = 0; 210 virtual bool getNumericalValue(const std::string& strValue, int& iValue) const = 0; 211 virtual bool getLiteralValue(int iValue, std::string& strValue) const = 0; 212 virtual bool isTypeInclusive() const = 0; 213 virtual std::string getFormattedState(int iValue) const = 0; 214 215 protected: ~ISelectionCriterionTypeInterface()216 virtual ~ISelectionCriterionTypeInterface() {} 217 }; 218 219 class ISelectionCriterionInterface 220 { 221 %{ 222 #include "SelectionCriterionInterface.h" 223 %} 224 225 public: 226 virtual void setCriterionState(int iState) = 0; 227 virtual int getCriterionState() const = 0; 228 virtual std::string getCriterionName() const = 0; 229 virtual const ISelectionCriterionTypeInterface* getCriterionType() const = 0; 230 231 protected: ~ISelectionCriterionInterface()232 virtual ~ISelectionCriterionInterface() {} 233 }; 234