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.
266 lines
10 KiB
266 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.
|
|
*/
|
|
#pragma once
|
|
|
|
#include "parameter_export.h"
|
|
|
|
#include <stdint.h>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
/** Forward declaration of private classes.
|
|
* Client should not use those class.
|
|
* They are not part of the public api and may be remove/renamed in any release.
|
|
* @{
|
|
*/
|
|
class CParameterMgr;
|
|
class CConfigurableElement;
|
|
class CBaseParameter;
|
|
/** @} */
|
|
|
|
/** TODO */
|
|
class PARAMETER_EXPORT ElementHandle
|
|
{
|
|
public:
|
|
/** @return element's name. */
|
|
std::string getName() const;
|
|
|
|
/** @return element's size in bytes.
|
|
*
|
|
* If the element size in bit is not a multiple of CHAR_BIT (8)
|
|
* it is rounded to the upper multiple.
|
|
* Effectively returning the element memory footprint.
|
|
*/
|
|
size_t getSize() const;
|
|
|
|
/** @return true if the element is a parameter, false otherwise. */
|
|
bool isParameter() const;
|
|
|
|
/** @return a human readable description of the element. */
|
|
std::string getDescription() const;
|
|
|
|
/** @return is the element and all its descendant not in a domain.
|
|
*
|
|
* Only rogue elements are allowed to be set.
|
|
* */
|
|
bool isRogue() const;
|
|
|
|
/** @return true if the element is an array, false otherwise.*/
|
|
bool isArray() const;
|
|
|
|
/** @return the parameter array length.
|
|
* 0 if the element is not an array (scalar).
|
|
*/
|
|
size_t getArrayLength() const;
|
|
|
|
/** @return element's path in the parameter hierarchy tree. */
|
|
std::string getPath() const;
|
|
|
|
/** @return element's kind.
|
|
*
|
|
* Ie: a string identifying the type of Element.
|
|
*/
|
|
std::string getKind() const;
|
|
|
|
std::vector<ElementHandle> getChildren();
|
|
|
|
/** Get mapping data of the element context
|
|
*
|
|
* Retrieve mapping data associated to a given key if any.
|
|
* If the key is not present in this element, query ancestors.
|
|
*
|
|
* @param[in] strKey the input mapping key
|
|
* @param[out] strValue the resulting mapping value in case of success
|
|
* @return true for if mapping key exists, false otherwise
|
|
*/
|
|
bool getMappingData(const std::string &strKey, std::string &strValue) const;
|
|
|
|
/** Gets element structure description as XML string
|
|
*
|
|
* @return the output XML string
|
|
*/
|
|
bool getStructureAsXML(std::string &xmlStructure, std::string &error) const;
|
|
|
|
/** Gets element settings as XML string
|
|
*
|
|
* @param[out] xmlValue the values to get
|
|
* @param[out] error On failure (false returned) will contain a human
|
|
* readable description of the error.
|
|
* On success (true returned) the content is not
|
|
* specified.
|
|
*
|
|
* @note returned value format depends on the current ParameterMgr format
|
|
* control properties, including value space and output raw format.
|
|
* @see ParameterMgrPlatformConnector::setOutputRawFormat
|
|
* @see ParameterMgrPlatformConnector::setValueSpace
|
|
*
|
|
* @return true on success, false on failure
|
|
*/
|
|
bool getAsXML(std::string &xmlValue, std::string &error) const;
|
|
|
|
/** Sets element settings as XML string
|
|
*
|
|
* @param[in] xmlValue the values to set
|
|
* @param[out] error On failure (false returned) will contain a human
|
|
* readable description of the error.
|
|
* On success (true returned) the content is not
|
|
* specified.
|
|
*
|
|
* @note
|
|
* - targeted element needs to be rogue for this operation to be allowed
|
|
* - structure of the passed XML element must match the targeted
|
|
* configurable element's one otherwise this operation will fail
|
|
* - expected value format depends on current value space.
|
|
* @see ParameterMgrPlatformConnector::valueSpaceIsRaw
|
|
*
|
|
* @return true on success, false otherwise
|
|
*/
|
|
bool setAsXML(const std::string &xmlValue, std::string &error);
|
|
|
|
/** Gets element settings in binary format
|
|
*
|
|
* @param[out] bytesValue the output vector
|
|
* @param[out] error unused
|
|
*
|
|
* @returns true
|
|
*/
|
|
bool getAsBytes(std::vector<uint8_t> &bytesValue, std::string &error) const;
|
|
|
|
/** Sets element settings in binary format
|
|
*
|
|
* @param[out] bytesValue the output vector
|
|
* @param[out] error On failure (false returned) will contain a human
|
|
* readable description of the error.
|
|
* On success (true returned) the content is not
|
|
* specified.
|
|
*
|
|
* @note
|
|
* - targeted element needs to be rogue for this operation to be allowed
|
|
* - size of the passed array must match that of the element
|
|
*/
|
|
bool setAsBytes(const std::vector<uint8_t> &bytesValue, std::string &error);
|
|
|
|
/** Access (get or set) parameters as different types.
|
|
*
|
|
* Will fail if the element is not a paramete.
|
|
* Array access will fail if the parameter is not an array.
|
|
*
|
|
* @param value if get, the value to get (in parameter)
|
|
* if set, the value to set (out parameter)
|
|
*
|
|
* Setting an array requires the std::vector size to match the arrayLength.
|
|
* Ie: value.size() == arrayLength()
|
|
*
|
|
* @param[out] error On failure (false returned) will contain a human
|
|
* readable description of the error.
|
|
* On success (true returned) the content is not
|
|
* specified.
|
|
* @return true if the access was successful,
|
|
* false otherwise (see error for the detail)
|
|
* @{
|
|
*/
|
|
|
|
/** Boolean access @{ */
|
|
bool getAsBoolean(bool &value, std::string &error) const;
|
|
bool setAsBoolean(bool value, std::string &error);
|
|
bool setAsBooleanArray(const std::vector<bool> &value, std::string &error);
|
|
bool getAsBooleanArray(std::vector<bool> &value, std::string &error) const;
|
|
/** @} */
|
|
|
|
/** Integer Access @{ */
|
|
bool setAsInteger(uint32_t value, std::string &error);
|
|
bool getAsInteger(uint32_t &value, std::string &error) const;
|
|
bool setAsIntegerArray(const std::vector<uint32_t> &value, std::string &error);
|
|
bool getAsIntegerArray(std::vector<uint32_t> &value, std::string &error) const;
|
|
/** @} */
|
|
|
|
/** Signed Integer Access @{ */
|
|
bool setAsSignedInteger(int32_t value, std::string &error);
|
|
bool getAsSignedInteger(int32_t &value, std::string &error) const;
|
|
bool setAsSignedIntegerArray(const std::vector<int32_t> &value, std::string &error);
|
|
bool getAsSignedIntegerArray(std::vector<int32_t> &value, std::string &error) const;
|
|
/** @} */
|
|
|
|
/** Double Access @{ */
|
|
bool setAsDouble(double value, std::string &error);
|
|
bool getAsDouble(double &value, std::string &error) const;
|
|
bool setAsDoubleArray(const std::vector<double> &value, std::string &error);
|
|
bool getAsDoubleArray(std::vector<double> &value, std::string &error) const;
|
|
/** @} */
|
|
|
|
/** String Access @{ */
|
|
bool setAsString(const std::string &value, std::string &error);
|
|
bool getAsString(std::string &value, std::string &error) const;
|
|
bool setAsStringArray(const std::vector<std::string> &value, std::string &error);
|
|
bool getAsStringArray(std::vector<std::string> &value, std::string &error) const;
|
|
/** @} */
|
|
|
|
/** @} */
|
|
|
|
protected:
|
|
ElementHandle(CConfigurableElement &element, CParameterMgr ¶meterMgr);
|
|
friend CParameterMgr; // So that it can build the handler
|
|
|
|
private:
|
|
template <class T>
|
|
bool setAs(const T value, std::string &error) const;
|
|
template <class T>
|
|
bool getAs(T &value, std::string &error) const;
|
|
|
|
CBaseParameter &getParameter();
|
|
const CBaseParameter &getParameter() const;
|
|
|
|
/** Check that the parameter value can be modify.
|
|
*
|
|
* @param arrayLength[in] If accessing as an array: the new value array length
|
|
* Otherwise: 0
|
|
* @param error[out] If access is forbidden: a human readable message explaining why
|
|
* Otherwise: not modified.
|
|
*
|
|
* @return true if the parameter value can be retrieved, false otherwise.
|
|
*/
|
|
bool checkSetValidity(size_t arrayLength, std::string &error) const;
|
|
|
|
/** Check that the parameter value can be retrieved.
|
|
*
|
|
* @param asArray[in] true if accessing as an array, false otherwise.
|
|
* @param error[out] If access is forbidden, a human readable message explaining why
|
|
* Otherwise, not modified.
|
|
*
|
|
* @return true if the parameter value can be retrieved, false otherwise.
|
|
*/
|
|
bool checkGetValidity(bool asArray, std::string &error) const;
|
|
|
|
/** Reference to the handled Configurable element. */
|
|
CConfigurableElement &mElement;
|
|
|
|
CParameterMgr &mParameterMgr;
|
|
};
|