1 /* 2 * Copyright (c) 2011-2014, 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 #pragma once 31 32 #include <stdint.h> 33 34 #include "TypeElement.h" 35 36 #include <string> 37 38 class CParameterAccessContext; 39 40 class CBitParameterType : public CTypeElement 41 { 42 public: 43 CBitParameterType(const std::string& strName); 44 45 // From IXmlSink 46 virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext); 47 48 // From IXmlSource 49 virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const; 50 /// Conversion 51 // String 52 bool toBlackboard(const std::string& strValue, uint64_t& uiValue, CParameterAccessContext& parameterAccessContext) const; 53 void fromBlackboard(std::string& strValue, const uint64_t& uiValue, CParameterAccessContext& parameterAccessContext) const; 54 // Integer 55 bool toBlackboard(uint64_t uiUserValue, uint64_t& uiValue, CParameterAccessContext& parameterAccessContext) const; 56 void fromBlackboard(uint32_t& uiUserValue, uint64_t uiValue, CParameterAccessContext& parameterAccessContext) const; 57 // Access from area configuration 58 uint64_t merge(uint64_t uiOriginData, uint64_t uiNewData) const; 59 60 // Bit Size 61 uint32_t getBitSize() const; 62 63 // Element properties 64 virtual void showProperties(std::string& strResult) const; 65 66 // CElement 67 virtual std::string getKind() const; 68 69 /** 70 * Get the position of the bit within the bit parameter block. 71 * It corresponds to the "pos" attribute found in the XML file. 72 * 73 * @return position of the bit. 74 */ 75 uint32_t getBitPos() const { return _uiBitPos; } 76 private: 77 // Instantiation 78 virtual CInstanceConfigurableElement* doInstantiate() const; 79 // Max encodable value 80 uint64_t getMaxEncodableValue() const; 81 // Biwise mask 82 uint64_t getMask() const; 83 // Check data has no bit set outside available range 84 bool isEncodable(uint64_t uiData) const; 85 86 // Pos in bits 87 uint32_t _uiBitPos; 88 // Size in bits 89 uint32_t _uiBitSize; 90 // Max value 91 uint64_t _uiMax; 92 }; 93