19368eea42a1afb01dd44110582f997115b50e742François Gaffie/* 29368eea42a1afb01dd44110582f997115b50e742François Gaffie * Copyright (c) 2015, Intel Corporation 39368eea42a1afb01dd44110582f997115b50e742François Gaffie * All rights reserved. 49368eea42a1afb01dd44110582f997115b50e742François Gaffie * 59368eea42a1afb01dd44110582f997115b50e742François Gaffie * Redistribution and use in source and binary forms, with or without modification, 69368eea42a1afb01dd44110582f997115b50e742François Gaffie * are permitted provided that the following conditions are met: 79368eea42a1afb01dd44110582f997115b50e742François Gaffie * 89368eea42a1afb01dd44110582f997115b50e742François Gaffie * 1. Redistributions of source code must retain the above copyright notice, this 99368eea42a1afb01dd44110582f997115b50e742François Gaffie * list of conditions and the following disclaimer. 109368eea42a1afb01dd44110582f997115b50e742François Gaffie * 119368eea42a1afb01dd44110582f997115b50e742François Gaffie * 2. Redistributions in binary form must reproduce the above copyright notice, 129368eea42a1afb01dd44110582f997115b50e742François Gaffie * this list of conditions and the following disclaimer in the documentation and/or 139368eea42a1afb01dd44110582f997115b50e742François Gaffie * other materials provided with the distribution. 149368eea42a1afb01dd44110582f997115b50e742François Gaffie * 159368eea42a1afb01dd44110582f997115b50e742François Gaffie * 3. Neither the name of the copyright holder nor the names of its contributors 169368eea42a1afb01dd44110582f997115b50e742François Gaffie * may be used to endorse or promote products derived from this software without 179368eea42a1afb01dd44110582f997115b50e742François Gaffie * specific prior written permission. 189368eea42a1afb01dd44110582f997115b50e742François Gaffie * 199368eea42a1afb01dd44110582f997115b50e742François Gaffie * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 209368eea42a1afb01dd44110582f997115b50e742François Gaffie * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 219368eea42a1afb01dd44110582f997115b50e742François Gaffie * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 229368eea42a1afb01dd44110582f997115b50e742François Gaffie * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 239368eea42a1afb01dd44110582f997115b50e742François Gaffie * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 249368eea42a1afb01dd44110582f997115b50e742François Gaffie * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 259368eea42a1afb01dd44110582f997115b50e742François Gaffie * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 269368eea42a1afb01dd44110582f997115b50e742François Gaffie * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 279368eea42a1afb01dd44110582f997115b50e742François Gaffie * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 289368eea42a1afb01dd44110582f997115b50e742François Gaffie * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 299368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 309368eea42a1afb01dd44110582f997115b50e742François Gaffie#pragma once 319368eea42a1afb01dd44110582f997115b50e742François Gaffie 329368eea42a1afb01dd44110582f997115b50e742François Gaffie#include "Config.hpp" 339368eea42a1afb01dd44110582f997115b50e742François Gaffie#include "ConfigFiles.hpp" 349368eea42a1afb01dd44110582f997115b50e742François Gaffie#include "FailureWrapper.hpp" 359368eea42a1afb01dd44110582f997115b50e742François Gaffie 369368eea42a1afb01dd44110582f997115b50e742François Gaffie#include <ParameterMgrFullConnector.h> 379368eea42a1afb01dd44110582f997115b50e742François Gaffie 389368eea42a1afb01dd44110582f997115b50e742François Gaffienamespace parameterFramework 399368eea42a1afb01dd44110582f997115b50e742François Gaffie{ 409368eea42a1afb01dd44110582f997115b50e742François Gaffie 419368eea42a1afb01dd44110582f997115b50e742François Gaffie/** This forward declaration is an implementation detail, client should expect its presence. 429368eea42a1afb01dd44110582f997115b50e742François Gaffie * @note This forward definition should not be needed as the `friend class ElementHandle` 439368eea42a1afb01dd44110582f997115b50e742François Gaffie * declaration in ParameterFramework is itself a forward declaration. 449368eea42a1afb01dd44110582f997115b50e742François Gaffie * Unfortunately there seem to be a bug in visual studio 2015, it is required. 459368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 469368eea42a1afb01dd44110582f997115b50e742François Gaffieclass ElementHandle; 479368eea42a1afb01dd44110582f997115b50e742François Gaffie 489368eea42a1afb01dd44110582f997115b50e742François Gaffie/** Wrapper around the Parameter Framework to throw exceptions on errors and 499368eea42a1afb01dd44110582f997115b50e742François Gaffie * have more user friendly methods. 509368eea42a1afb01dd44110582f997115b50e742François Gaffie * @see parameterFramework::ElementHandle to access elements of the parameter tree. 519368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 529368eea42a1afb01dd44110582f997115b50e742François Gaffieclass ParameterFramework : private parameterFramework::ConfigFiles, 539368eea42a1afb01dd44110582f997115b50e742François Gaffie private FailureWrapper<CParameterMgrFullConnector> 549368eea42a1afb01dd44110582f997115b50e742François Gaffie{ 559368eea42a1afb01dd44110582f997115b50e742François Gaffieprotected: 569368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Alias to the Platform Connector PF. 579368eea42a1afb01dd44110582f997115b50e742François Gaffie * It should not be usefull as PF is a super set but is useful 589368eea42a1afb01dd44110582f997115b50e742François Gaffie * to disambiguate overloaded method for MS visual compiler. 599368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 609368eea42a1afb01dd44110582f997115b50e742François Gaffie using PPF = CParameterMgrPlatformConnector; 619368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF = CParameterMgrFullConnector; 629368eea42a1afb01dd44110582f997115b50e742François Gaffie using EH = ::ElementHandle; 639368eea42a1afb01dd44110582f997115b50e742François Gaffie 649368eea42a1afb01dd44110582f997115b50e742François Gaffiepublic: 659368eea42a1afb01dd44110582f997115b50e742François Gaffie ParameterFramework(const Config &config = Config()) 669368eea42a1afb01dd44110582f997115b50e742François Gaffie : ConfigFiles(config), FailureWrapper(getPath()) 679368eea42a1afb01dd44110582f997115b50e742François Gaffie { 689368eea42a1afb01dd44110582f997115b50e742François Gaffie setForceNoRemoteInterface(true); 699368eea42a1afb01dd44110582f997115b50e742François Gaffie } 709368eea42a1afb01dd44110582f997115b50e742François Gaffie 719368eea42a1afb01dd44110582f997115b50e742François Gaffie void start() { mayFailCall(&PF::start); } 729368eea42a1afb01dd44110582f997115b50e742François Gaffie 739368eea42a1afb01dd44110582f997115b50e742François Gaffie /** @name Forwarded methods 749368eea42a1afb01dd44110582f997115b50e742François Gaffie * Forward those methods without modification as there are ergonomic and 759368eea42a1afb01dd44110582f997115b50e742François Gaffie * can not fail (no failure to throw). 769368eea42a1afb01dd44110582f997115b50e742François Gaffie * @{ */ 779368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::applyConfigurations; 789368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::getFailureOnMissingSubsystem; 799368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::getFailureOnFailedSettingsLoad; 809368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::getForceNoRemoteInterface; 819368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::setForceNoRemoteInterface; 829368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::getSchemaUri; 839368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::setSchemaUri; 849368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::getValidateSchemasOnStart; 859368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::isValueSpaceRaw; 869368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::isOutputRawFormatHex; 879368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::isTuningModeOn; 889368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::isAutoSyncOn; 899368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::setLogger; 909368eea42a1afb01dd44110582f997115b50e742François Gaffie using PF::createCommandHandler; 919368eea42a1afb01dd44110582f997115b50e742François Gaffie /** @} */ 929368eea42a1afb01dd44110582f997115b50e742François Gaffie 939368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Wrap PF::setValidateSchemasOnStart to throw an exception on failure. */ 949368eea42a1afb01dd44110582f997115b50e742François Gaffie void setValidateSchemasOnStart(bool validate) 959368eea42a1afb01dd44110582f997115b50e742François Gaffie { 969368eea42a1afb01dd44110582f997115b50e742François Gaffie mayFailCall(&PPF::setValidateSchemasOnStart, validate); 979368eea42a1afb01dd44110582f997115b50e742François Gaffie } 989368eea42a1afb01dd44110582f997115b50e742François Gaffie 999368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Wrap PF::setFailureOnFailedSettingsLoad to throw an exception on failure. */ 1009368eea42a1afb01dd44110582f997115b50e742François Gaffie void setFailureOnFailedSettingsLoad(bool fail) 1019368eea42a1afb01dd44110582f997115b50e742François Gaffie { 1029368eea42a1afb01dd44110582f997115b50e742François Gaffie mayFailCall(&PPF::setFailureOnFailedSettingsLoad, fail); 1039368eea42a1afb01dd44110582f997115b50e742François Gaffie } 1049368eea42a1afb01dd44110582f997115b50e742François Gaffie 1059368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Wrap PF::setFailureOnMissingSubsystem to throw an exception on failure. */ 1069368eea42a1afb01dd44110582f997115b50e742François Gaffie void setFailureOnMissingSubsystem(bool fail) 1079368eea42a1afb01dd44110582f997115b50e742François Gaffie { 1089368eea42a1afb01dd44110582f997115b50e742François Gaffie mayFailCall(&PPF::setFailureOnMissingSubsystem, fail); 1099368eea42a1afb01dd44110582f997115b50e742François Gaffie } 1109368eea42a1afb01dd44110582f997115b50e742François Gaffie 1119368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Renaming for better readability (and coherency with PF::isValueSpaceRaw) 1129368eea42a1afb01dd44110582f997115b50e742François Gaffie * of PF::setValueSpace. */ 1139368eea42a1afb01dd44110582f997115b50e742François Gaffie void setRawValueSpace(bool enable) { setValueSpace(enable); } 1149368eea42a1afb01dd44110582f997115b50e742François Gaffie 1159368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Renaming for better readability (and coherency with PF::isValueSpaceRaw) 1169368eea42a1afb01dd44110582f997115b50e742François Gaffie * of PF::setValueSpace. */ 1179368eea42a1afb01dd44110582f997115b50e742François Gaffie void setHexOutputFormat(bool enable) { setOutputRawFormat(enable); } 1189368eea42a1afb01dd44110582f997115b50e742François Gaffie 1199368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Wrap PF::setTuningMode to throw an exception on failure. */ 1209368eea42a1afb01dd44110582f997115b50e742François Gaffie void setTuningMode(bool enable) { mayFailCall(&PF::setTuningMode, enable); } 1219368eea42a1afb01dd44110582f997115b50e742François Gaffie 1229368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Wrap PF::setAutoSync to throw an exception on failure. */ 1239368eea42a1afb01dd44110582f997115b50e742François Gaffie void setAutoSync(bool enable) { mayFailCall(&PF::setAutoSync, enable); } 1249368eea42a1afb01dd44110582f997115b50e742François Gaffie 1259368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Wrap PF::accessParameterValue in "set" mode (and rename it) to throw an 1269368eea42a1afb01dd44110582f997115b50e742François Gaffie * exception on failure 1279368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 1289368eea42a1afb01dd44110582f997115b50e742François Gaffie void setParameter(const std::string &path, std::string &value) 1299368eea42a1afb01dd44110582f997115b50e742François Gaffie { 1309368eea42a1afb01dd44110582f997115b50e742François Gaffie mayFailCall(&PF::accessParameterValue, path, value, true); 1319368eea42a1afb01dd44110582f997115b50e742François Gaffie } 1329368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Wrap PF::accessParameterValue in "get" mode (and rename it) to throw an 1339368eea42a1afb01dd44110582f997115b50e742François Gaffie * exception on failure 1349368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 1359368eea42a1afb01dd44110582f997115b50e742François Gaffie void getParameter(const std::string &path, std::string &value) 1369368eea42a1afb01dd44110582f997115b50e742François Gaffie { 1379368eea42a1afb01dd44110582f997115b50e742François Gaffie mayFailCall(&PF::accessParameterValue, path, value, false); 1389368eea42a1afb01dd44110582f997115b50e742François Gaffie } 1399368eea42a1afb01dd44110582f997115b50e742François Gaffie 1409368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Wrap PF::accessConfigurationValue in "set" mode (and rename it) to throw an 1419368eea42a1afb01dd44110582f997115b50e742François Gaffie * exception on failure 1429368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 1439368eea42a1afb01dd44110582f997115b50e742François Gaffie void setConfigurationParameter(const std::string domain, const std::string &configuration, 1449368eea42a1afb01dd44110582f997115b50e742François Gaffie const std::string &path, std::string &value) 1459368eea42a1afb01dd44110582f997115b50e742François Gaffie { 1469368eea42a1afb01dd44110582f997115b50e742François Gaffie mayFailCall(&PF::accessConfigurationValue, domain, configuration, path, value, true); 1479368eea42a1afb01dd44110582f997115b50e742François Gaffie } 1489368eea42a1afb01dd44110582f997115b50e742François Gaffie 1499368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Wrap PF::accessConfigurationValue in "get" mode (and rename it) to throw an 1509368eea42a1afb01dd44110582f997115b50e742François Gaffie * exception on failure 1519368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 1529368eea42a1afb01dd44110582f997115b50e742François Gaffie void getConfigurationParameter(const std::string &domain, const std::string &configuration, 1539368eea42a1afb01dd44110582f997115b50e742François Gaffie const std::string &path, std::string &value) 1549368eea42a1afb01dd44110582f997115b50e742François Gaffie { 1559368eea42a1afb01dd44110582f997115b50e742François Gaffie mayFailCall(&PF::accessConfigurationValue, domain, configuration, path, value, false); 1569368eea42a1afb01dd44110582f997115b50e742François Gaffie } 1579368eea42a1afb01dd44110582f997115b50e742François Gaffie 1589368eea42a1afb01dd44110582f997115b50e742François Gaffieprivate: 1599368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Create an unwrapped element handle. 1609368eea42a1afb01dd44110582f997115b50e742François Gaffie * 1619368eea42a1afb01dd44110582f997115b50e742François Gaffie * Is not public as this method is intended to be used by ElementHandle facade. 1629368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 1639368eea42a1afb01dd44110582f997115b50e742François Gaffie EH createElementHandle(const std::string &path) 1649368eea42a1afb01dd44110582f997115b50e742François Gaffie { 1659368eea42a1afb01dd44110582f997115b50e742François Gaffie // PF::createElementHandle takes it's handler in the free store 1669368eea42a1afb01dd44110582f997115b50e742François Gaffie std::unique_ptr<EH> newedHandle{mayFailCall(&PF::createElementHandle, path)}; 1679368eea42a1afb01dd44110582f997115b50e742François Gaffie EH handle{*newedHandle}; 1689368eea42a1afb01dd44110582f997115b50e742François Gaffie return handle; 1699368eea42a1afb01dd44110582f997115b50e742François Gaffie } 1709368eea42a1afb01dd44110582f997115b50e742François Gaffie friend class ElementHandle; 1719368eea42a1afb01dd44110582f997115b50e742François Gaffie}; 1729368eea42a1afb01dd44110582f997115b50e742François Gaffie 1739368eea42a1afb01dd44110582f997115b50e742François Gaffie} // parameterFramework 174