1*c33452fbSAndroid Build Coastguard Worker /* 2*c33452fbSAndroid Build Coastguard Worker * Copyright (c) 2015, Intel Corporation 3*c33452fbSAndroid Build Coastguard Worker * All rights reserved. 4*c33452fbSAndroid Build Coastguard Worker * 5*c33452fbSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without modification, 6*c33452fbSAndroid Build Coastguard Worker * are permitted provided that the following conditions are met: 7*c33452fbSAndroid Build Coastguard Worker * 8*c33452fbSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright notice, this 9*c33452fbSAndroid Build Coastguard Worker * list of conditions and the following disclaimer. 10*c33452fbSAndroid Build Coastguard Worker * 11*c33452fbSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright notice, 12*c33452fbSAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation and/or 13*c33452fbSAndroid Build Coastguard Worker * other materials provided with the distribution. 14*c33452fbSAndroid Build Coastguard Worker * 15*c33452fbSAndroid Build Coastguard Worker * 3. Neither the name of the copyright holder nor the names of its contributors 16*c33452fbSAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software without 17*c33452fbSAndroid Build Coastguard Worker * specific prior written permission. 18*c33452fbSAndroid Build Coastguard Worker * 19*c33452fbSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20*c33452fbSAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21*c33452fbSAndroid Build Coastguard Worker * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22*c33452fbSAndroid Build Coastguard Worker * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 23*c33452fbSAndroid Build Coastguard Worker * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24*c33452fbSAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25*c33452fbSAndroid Build Coastguard Worker * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26*c33452fbSAndroid Build Coastguard Worker * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27*c33452fbSAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28*c33452fbSAndroid Build Coastguard Worker * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29*c33452fbSAndroid Build Coastguard Worker */ 30*c33452fbSAndroid Build Coastguard Worker #pragma once 31*c33452fbSAndroid Build Coastguard Worker 32*c33452fbSAndroid Build Coastguard Worker #include "parameter_export.h" 33*c33452fbSAndroid Build Coastguard Worker 34*c33452fbSAndroid Build Coastguard Worker #include <stdint.h> 35*c33452fbSAndroid Build Coastguard Worker #include <string> 36*c33452fbSAndroid Build Coastguard Worker #include <vector> 37*c33452fbSAndroid Build Coastguard Worker 38*c33452fbSAndroid Build Coastguard Worker /** Forward declaration of private classes. 39*c33452fbSAndroid Build Coastguard Worker * Client should not use those class. 40*c33452fbSAndroid Build Coastguard Worker * They are not part of the public api and may be remove/renamed in any release. 41*c33452fbSAndroid Build Coastguard Worker * @{ 42*c33452fbSAndroid Build Coastguard Worker */ 43*c33452fbSAndroid Build Coastguard Worker class CParameterMgr; 44*c33452fbSAndroid Build Coastguard Worker class CConfigurableElement; 45*c33452fbSAndroid Build Coastguard Worker class CBaseParameter; 46*c33452fbSAndroid Build Coastguard Worker /** @} */ 47*c33452fbSAndroid Build Coastguard Worker 48*c33452fbSAndroid Build Coastguard Worker /** TODO */ 49*c33452fbSAndroid Build Coastguard Worker class PARAMETER_EXPORT ElementHandle 50*c33452fbSAndroid Build Coastguard Worker { 51*c33452fbSAndroid Build Coastguard Worker public: 52*c33452fbSAndroid Build Coastguard Worker /** @return element's name. */ 53*c33452fbSAndroid Build Coastguard Worker std::string getName() const; 54*c33452fbSAndroid Build Coastguard Worker 55*c33452fbSAndroid Build Coastguard Worker /** @return element's size in bytes. 56*c33452fbSAndroid Build Coastguard Worker * 57*c33452fbSAndroid Build Coastguard Worker * If the element size in bit is not a multiple of CHAR_BIT (8) 58*c33452fbSAndroid Build Coastguard Worker * it is rounded to the upper multiple. 59*c33452fbSAndroid Build Coastguard Worker * Effectively returning the element memory footprint. 60*c33452fbSAndroid Build Coastguard Worker */ 61*c33452fbSAndroid Build Coastguard Worker size_t getSize() const; 62*c33452fbSAndroid Build Coastguard Worker 63*c33452fbSAndroid Build Coastguard Worker /** @return true if the element is a parameter, false otherwise. */ 64*c33452fbSAndroid Build Coastguard Worker bool isParameter() const; 65*c33452fbSAndroid Build Coastguard Worker 66*c33452fbSAndroid Build Coastguard Worker /** @return a human readable description of the element. */ 67*c33452fbSAndroid Build Coastguard Worker std::string getDescription() const; 68*c33452fbSAndroid Build Coastguard Worker 69*c33452fbSAndroid Build Coastguard Worker /** @return is the element and all its descendant not in a domain. 70*c33452fbSAndroid Build Coastguard Worker * 71*c33452fbSAndroid Build Coastguard Worker * Only rogue elements are allowed to be set. 72*c33452fbSAndroid Build Coastguard Worker * */ 73*c33452fbSAndroid Build Coastguard Worker bool isRogue() const; 74*c33452fbSAndroid Build Coastguard Worker 75*c33452fbSAndroid Build Coastguard Worker /** @return true if the element is an array, false otherwise.*/ 76*c33452fbSAndroid Build Coastguard Worker bool isArray() const; 77*c33452fbSAndroid Build Coastguard Worker 78*c33452fbSAndroid Build Coastguard Worker /** @return the parameter array length. 79*c33452fbSAndroid Build Coastguard Worker * 0 if the element is not an array (scalar). 80*c33452fbSAndroid Build Coastguard Worker */ 81*c33452fbSAndroid Build Coastguard Worker size_t getArrayLength() const; 82*c33452fbSAndroid Build Coastguard Worker 83*c33452fbSAndroid Build Coastguard Worker /** @return element's path in the parameter hierarchy tree. */ 84*c33452fbSAndroid Build Coastguard Worker std::string getPath() const; 85*c33452fbSAndroid Build Coastguard Worker 86*c33452fbSAndroid Build Coastguard Worker /** @return element's kind. 87*c33452fbSAndroid Build Coastguard Worker * 88*c33452fbSAndroid Build Coastguard Worker * Ie: a string identifying the type of Element. 89*c33452fbSAndroid Build Coastguard Worker */ 90*c33452fbSAndroid Build Coastguard Worker std::string getKind() const; 91*c33452fbSAndroid Build Coastguard Worker 92*c33452fbSAndroid Build Coastguard Worker std::vector<ElementHandle> getChildren(); 93*c33452fbSAndroid Build Coastguard Worker 94*c33452fbSAndroid Build Coastguard Worker /** Get mapping data of the element context 95*c33452fbSAndroid Build Coastguard Worker * 96*c33452fbSAndroid Build Coastguard Worker * Retrieve mapping data associated to a given key if any. 97*c33452fbSAndroid Build Coastguard Worker * If the key is not present in this element, query ancestors. 98*c33452fbSAndroid Build Coastguard Worker * 99*c33452fbSAndroid Build Coastguard Worker * @param[in] strKey the input mapping key 100*c33452fbSAndroid Build Coastguard Worker * @param[out] strValue the resulting mapping value in case of success 101*c33452fbSAndroid Build Coastguard Worker * @return true for if mapping key exists, false otherwise 102*c33452fbSAndroid Build Coastguard Worker */ 103*c33452fbSAndroid Build Coastguard Worker bool getMappingData(const std::string &strKey, std::string &strValue) const; 104*c33452fbSAndroid Build Coastguard Worker 105*c33452fbSAndroid Build Coastguard Worker /** Gets element structure description as XML string 106*c33452fbSAndroid Build Coastguard Worker * 107*c33452fbSAndroid Build Coastguard Worker * @return the output XML string 108*c33452fbSAndroid Build Coastguard Worker */ 109*c33452fbSAndroid Build Coastguard Worker bool getStructureAsXML(std::string &xmlStructure, std::string &error) const; 110*c33452fbSAndroid Build Coastguard Worker 111*c33452fbSAndroid Build Coastguard Worker /** Gets element settings as XML string 112*c33452fbSAndroid Build Coastguard Worker * 113*c33452fbSAndroid Build Coastguard Worker * @param[out] xmlValue the values to get 114*c33452fbSAndroid Build Coastguard Worker * @param[out] error On failure (false returned) will contain a human 115*c33452fbSAndroid Build Coastguard Worker * readable description of the error. 116*c33452fbSAndroid Build Coastguard Worker * On success (true returned) the content is not 117*c33452fbSAndroid Build Coastguard Worker * specified. 118*c33452fbSAndroid Build Coastguard Worker * 119*c33452fbSAndroid Build Coastguard Worker * @note returned value format depends on the current ParameterMgr format 120*c33452fbSAndroid Build Coastguard Worker * control properties, including value space and output raw format. 121*c33452fbSAndroid Build Coastguard Worker * @see ParameterMgrPlatformConnector::setOutputRawFormat 122*c33452fbSAndroid Build Coastguard Worker * @see ParameterMgrPlatformConnector::setValueSpace 123*c33452fbSAndroid Build Coastguard Worker * 124*c33452fbSAndroid Build Coastguard Worker * @return true on success, false on failure 125*c33452fbSAndroid Build Coastguard Worker */ 126*c33452fbSAndroid Build Coastguard Worker bool getAsXML(std::string &xmlValue, std::string &error) const; 127*c33452fbSAndroid Build Coastguard Worker 128*c33452fbSAndroid Build Coastguard Worker /** Sets element settings as XML string 129*c33452fbSAndroid Build Coastguard Worker * 130*c33452fbSAndroid Build Coastguard Worker * @param[in] xmlValue the values to set 131*c33452fbSAndroid Build Coastguard Worker * @param[out] error On failure (false returned) will contain a human 132*c33452fbSAndroid Build Coastguard Worker * readable description of the error. 133*c33452fbSAndroid Build Coastguard Worker * On success (true returned) the content is not 134*c33452fbSAndroid Build Coastguard Worker * specified. 135*c33452fbSAndroid Build Coastguard Worker * 136*c33452fbSAndroid Build Coastguard Worker * @note 137*c33452fbSAndroid Build Coastguard Worker * - targeted element needs to be rogue for this operation to be allowed 138*c33452fbSAndroid Build Coastguard Worker * - structure of the passed XML element must match the targeted 139*c33452fbSAndroid Build Coastguard Worker * configurable element's one otherwise this operation will fail 140*c33452fbSAndroid Build Coastguard Worker * - expected value format depends on current value space. 141*c33452fbSAndroid Build Coastguard Worker * @see ParameterMgrPlatformConnector::valueSpaceIsRaw 142*c33452fbSAndroid Build Coastguard Worker * 143*c33452fbSAndroid Build Coastguard Worker * @return true on success, false otherwise 144*c33452fbSAndroid Build Coastguard Worker */ 145*c33452fbSAndroid Build Coastguard Worker bool setAsXML(const std::string &xmlValue, std::string &error); 146*c33452fbSAndroid Build Coastguard Worker 147*c33452fbSAndroid Build Coastguard Worker /** Gets element settings in binary format 148*c33452fbSAndroid Build Coastguard Worker * 149*c33452fbSAndroid Build Coastguard Worker * @param[out] bytesValue the output vector 150*c33452fbSAndroid Build Coastguard Worker * @param[out] error unused 151*c33452fbSAndroid Build Coastguard Worker * 152*c33452fbSAndroid Build Coastguard Worker * @returns true 153*c33452fbSAndroid Build Coastguard Worker */ 154*c33452fbSAndroid Build Coastguard Worker bool getAsBytes(std::vector<uint8_t> &bytesValue, std::string &error) const; 155*c33452fbSAndroid Build Coastguard Worker 156*c33452fbSAndroid Build Coastguard Worker /** Sets element settings in binary format 157*c33452fbSAndroid Build Coastguard Worker * 158*c33452fbSAndroid Build Coastguard Worker * @param[out] bytesValue the output vector 159*c33452fbSAndroid Build Coastguard Worker * @param[out] error On failure (false returned) will contain a human 160*c33452fbSAndroid Build Coastguard Worker * readable description of the error. 161*c33452fbSAndroid Build Coastguard Worker * On success (true returned) the content is not 162*c33452fbSAndroid Build Coastguard Worker * specified. 163*c33452fbSAndroid Build Coastguard Worker * 164*c33452fbSAndroid Build Coastguard Worker * @note 165*c33452fbSAndroid Build Coastguard Worker * - targeted element needs to be rogue for this operation to be allowed 166*c33452fbSAndroid Build Coastguard Worker * - size of the passed array must match that of the element 167*c33452fbSAndroid Build Coastguard Worker */ 168*c33452fbSAndroid Build Coastguard Worker bool setAsBytes(const std::vector<uint8_t> &bytesValue, std::string &error); 169*c33452fbSAndroid Build Coastguard Worker 170*c33452fbSAndroid Build Coastguard Worker /** Access (get or set) parameters as different types. 171*c33452fbSAndroid Build Coastguard Worker * 172*c33452fbSAndroid Build Coastguard Worker * Will fail if the element is not a paramete. 173*c33452fbSAndroid Build Coastguard Worker * Array access will fail if the parameter is not an array. 174*c33452fbSAndroid Build Coastguard Worker * 175*c33452fbSAndroid Build Coastguard Worker * @param value if get, the value to get (in parameter) 176*c33452fbSAndroid Build Coastguard Worker * if set, the value to set (out parameter) 177*c33452fbSAndroid Build Coastguard Worker * 178*c33452fbSAndroid Build Coastguard Worker * Setting an array requires the std::vector size to match the arrayLength. 179*c33452fbSAndroid Build Coastguard Worker * Ie: value.size() == arrayLength() 180*c33452fbSAndroid Build Coastguard Worker * 181*c33452fbSAndroid Build Coastguard Worker * @param[out] error On failure (false returned) will contain a human 182*c33452fbSAndroid Build Coastguard Worker * readable description of the error. 183*c33452fbSAndroid Build Coastguard Worker * On success (true returned) the content is not 184*c33452fbSAndroid Build Coastguard Worker * specified. 185*c33452fbSAndroid Build Coastguard Worker * @return true if the access was successful, 186*c33452fbSAndroid Build Coastguard Worker * false otherwise (see error for the detail) 187*c33452fbSAndroid Build Coastguard Worker * @{ 188*c33452fbSAndroid Build Coastguard Worker */ 189*c33452fbSAndroid Build Coastguard Worker 190*c33452fbSAndroid Build Coastguard Worker /** Boolean access @{ */ 191*c33452fbSAndroid Build Coastguard Worker bool getAsBoolean(bool &value, std::string &error) const; 192*c33452fbSAndroid Build Coastguard Worker bool setAsBoolean(bool value, std::string &error); 193*c33452fbSAndroid Build Coastguard Worker bool setAsBooleanArray(const std::vector<bool> &value, std::string &error); 194*c33452fbSAndroid Build Coastguard Worker bool getAsBooleanArray(std::vector<bool> &value, std::string &error) const; 195*c33452fbSAndroid Build Coastguard Worker /** @} */ 196*c33452fbSAndroid Build Coastguard Worker 197*c33452fbSAndroid Build Coastguard Worker /** Integer Access @{ */ 198*c33452fbSAndroid Build Coastguard Worker bool setAsInteger(uint32_t value, std::string &error); 199*c33452fbSAndroid Build Coastguard Worker bool getAsInteger(uint32_t &value, std::string &error) const; 200*c33452fbSAndroid Build Coastguard Worker bool setAsIntegerArray(const std::vector<uint32_t> &value, std::string &error); 201*c33452fbSAndroid Build Coastguard Worker bool getAsIntegerArray(std::vector<uint32_t> &value, std::string &error) const; 202*c33452fbSAndroid Build Coastguard Worker /** @} */ 203*c33452fbSAndroid Build Coastguard Worker 204*c33452fbSAndroid Build Coastguard Worker /** Signed Integer Access @{ */ 205*c33452fbSAndroid Build Coastguard Worker bool setAsSignedInteger(int32_t value, std::string &error); 206*c33452fbSAndroid Build Coastguard Worker bool getAsSignedInteger(int32_t &value, std::string &error) const; 207*c33452fbSAndroid Build Coastguard Worker bool setAsSignedIntegerArray(const std::vector<int32_t> &value, std::string &error); 208*c33452fbSAndroid Build Coastguard Worker bool getAsSignedIntegerArray(std::vector<int32_t> &value, std::string &error) const; 209*c33452fbSAndroid Build Coastguard Worker /** @} */ 210*c33452fbSAndroid Build Coastguard Worker 211*c33452fbSAndroid Build Coastguard Worker /** Double Access @{ */ 212*c33452fbSAndroid Build Coastguard Worker bool setAsDouble(double value, std::string &error); 213*c33452fbSAndroid Build Coastguard Worker bool getAsDouble(double &value, std::string &error) const; 214*c33452fbSAndroid Build Coastguard Worker bool setAsDoubleArray(const std::vector<double> &value, std::string &error); 215*c33452fbSAndroid Build Coastguard Worker bool getAsDoubleArray(std::vector<double> &value, std::string &error) const; 216*c33452fbSAndroid Build Coastguard Worker /** @} */ 217*c33452fbSAndroid Build Coastguard Worker 218*c33452fbSAndroid Build Coastguard Worker /** String Access @{ */ 219*c33452fbSAndroid Build Coastguard Worker bool setAsString(const std::string &value, std::string &error); 220*c33452fbSAndroid Build Coastguard Worker bool getAsString(std::string &value, std::string &error) const; 221*c33452fbSAndroid Build Coastguard Worker bool setAsStringArray(const std::vector<std::string> &value, std::string &error); 222*c33452fbSAndroid Build Coastguard Worker bool getAsStringArray(std::vector<std::string> &value, std::string &error) const; 223*c33452fbSAndroid Build Coastguard Worker /** @} */ 224*c33452fbSAndroid Build Coastguard Worker 225*c33452fbSAndroid Build Coastguard Worker /** @} */ 226*c33452fbSAndroid Build Coastguard Worker 227*c33452fbSAndroid Build Coastguard Worker protected: 228*c33452fbSAndroid Build Coastguard Worker ElementHandle(CConfigurableElement &element, CParameterMgr ¶meterMgr); 229*c33452fbSAndroid Build Coastguard Worker friend CParameterMgr; // So that it can build the handler 230*c33452fbSAndroid Build Coastguard Worker 231*c33452fbSAndroid Build Coastguard Worker private: 232*c33452fbSAndroid Build Coastguard Worker template <class T> 233*c33452fbSAndroid Build Coastguard Worker bool setAs(const T value, std::string &error) const; 234*c33452fbSAndroid Build Coastguard Worker template <class T> 235*c33452fbSAndroid Build Coastguard Worker bool getAs(T &value, std::string &error) const; 236*c33452fbSAndroid Build Coastguard Worker 237*c33452fbSAndroid Build Coastguard Worker CBaseParameter &getParameter(); 238*c33452fbSAndroid Build Coastguard Worker const CBaseParameter &getParameter() const; 239*c33452fbSAndroid Build Coastguard Worker 240*c33452fbSAndroid Build Coastguard Worker /** Check that the parameter value can be modify. 241*c33452fbSAndroid Build Coastguard Worker * 242*c33452fbSAndroid Build Coastguard Worker * @param arrayLength[in] If accessing as an array: the new value array length 243*c33452fbSAndroid Build Coastguard Worker * Otherwise: 0 244*c33452fbSAndroid Build Coastguard Worker * @param error[out] If access is forbidden: a human readable message explaining why 245*c33452fbSAndroid Build Coastguard Worker * Otherwise: not modified. 246*c33452fbSAndroid Build Coastguard Worker * 247*c33452fbSAndroid Build Coastguard Worker * @return true if the parameter value can be retrieved, false otherwise. 248*c33452fbSAndroid Build Coastguard Worker */ 249*c33452fbSAndroid Build Coastguard Worker bool checkSetValidity(size_t arrayLength, std::string &error) const; 250*c33452fbSAndroid Build Coastguard Worker 251*c33452fbSAndroid Build Coastguard Worker /** Check that the parameter value can be retrieved. 252*c33452fbSAndroid Build Coastguard Worker * 253*c33452fbSAndroid Build Coastguard Worker * @param asArray[in] true if accessing as an array, false otherwise. 254*c33452fbSAndroid Build Coastguard Worker * @param error[out] If access is forbidden, a human readable message explaining why 255*c33452fbSAndroid Build Coastguard Worker * Otherwise, not modified. 256*c33452fbSAndroid Build Coastguard Worker * 257*c33452fbSAndroid Build Coastguard Worker * @return true if the parameter value can be retrieved, false otherwise. 258*c33452fbSAndroid Build Coastguard Worker */ 259*c33452fbSAndroid Build Coastguard Worker bool checkGetValidity(bool asArray, std::string &error) const; 260*c33452fbSAndroid Build Coastguard Worker 261*c33452fbSAndroid Build Coastguard Worker /** Reference to the handled Configurable element. */ 262*c33452fbSAndroid Build Coastguard Worker CConfigurableElement &mElement; 263*c33452fbSAndroid Build Coastguard Worker 264*c33452fbSAndroid Build Coastguard Worker CParameterMgr &mParameterMgr; 265*c33452fbSAndroid Build Coastguard Worker }; 266