Line data Source code
1 : /** 2 : * 3 : * Copyright (c) 2021 Project CHIP Authors 4 : * 5 : * Licensed under the Apache License, Version 2.0 (the "License"); 6 : * you may not use this file except in compliance with the License. 7 : * You may obtain a copy of the License at 8 : * 9 : * http://www.apache.org/licenses/LICENSE-2.0 10 : * 11 : * Unless required by applicable law or agreed to in writing, software 12 : * distributed under the License is distributed on an "AS IS" BASIS, 13 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 : * See the License for the specific language governing permissions and 15 : * limitations under the License. 16 : */ 17 : 18 : #pragma once 19 : 20 : #include "AttributeDataIB.h" 21 : #include "AttributeStatusIB.h" 22 : #include "StructBuilder.h" 23 : #include "StructParser.h" 24 : 25 : #include <app/AppConfig.h> 26 : #include <app/util/basic-types.h> 27 : #include <lib/core/CHIPCore.h> 28 : #include <lib/core/TLV.h> 29 : #include <lib/support/CodeUtils.h> 30 : #include <lib/support/logging/CHIPLogging.h> 31 : 32 : namespace chip { 33 : namespace app { 34 : namespace AttributeReportIB { 35 : enum class Tag : uint8_t 36 : { 37 : kAttributeStatus = 0, 38 : kAttributeData = 1, 39 : }; 40 : 41 : class Parser : public StructParser 42 : { 43 : public: 44 : #if CHIP_CONFIG_IM_PRETTY_PRINT 45 : CHIP_ERROR PrettyPrint() const; 46 : #endif // CHIP_CONFIG_IM_PRETTY_PRINT 47 : 48 : /** 49 : * @brief Get a TLVReader for the StatusIB. Next() must be called before accessing them. 50 : * 51 : * @param [in] apAttributeStatus A pointer to apAttributeStatus 52 : * 53 : * @return #CHIP_NO_ERROR on success 54 : * # CHIP_ERROR_WRONG_TLV_TYPE if there is such element but it's not a structure 55 : * #CHIP_END_OF_TLV if there is no such element 56 : */ 57 : CHIP_ERROR GetAttributeStatus(AttributeStatusIB::Parser * const apAttributeStatus) const; 58 : 59 : /** 60 : * @brief Get a TLVReader for the AttributeDataIB. Next() must be called before accessing them. 61 : * 62 : * @param [in] apAttributeData A pointer to apAttributeData 63 : * 64 : * @return #CHIP_NO_ERROR on success 65 : * #CHIP_ERROR_WRONG_TLV_TYPE if there is such element but it's not a AttributeData 66 : * #CHIP_END_OF_TLV if there is no such element 67 : */ 68 : CHIP_ERROR GetAttributeData(AttributeDataIB::Parser * const apAttributeData) const; 69 : }; 70 : 71 : class Builder : public StructBuilder 72 : { 73 : public: 74 : /** 75 : * @brief Initialize a AttributeDataIB::Builder for writing into the TLV stream 76 : * 77 : * @return A reference to AttributeDataIB::Builder 78 : */ 79 : AttributeDataIB::Builder & CreateAttributeData(); 80 : 81 9493 : AttributeDataIB::Builder & GetAttributeData() { return mAttributeData; } 82 : /** 83 : * @brief Initialize a StatusIB::Builder for writing into the TLV stream 84 : * 85 : * @return A reference to StatusIB::Builder 86 : */ 87 : AttributeStatusIB::Builder & CreateAttributeStatus(); 88 : 89 : /** 90 : * @brief Mark the end of this AttributeReportIB 91 : * 92 : * @return The builder's final status. 93 : */ 94 : CHIP_ERROR EndOfAttributeReportIB(); 95 : 96 : private: 97 : AttributeStatusIB::Builder mAttributeStatus; 98 : AttributeDataIB::Builder mAttributeData; 99 : }; 100 : } // namespace AttributeReportIB 101 : } // namespace app 102 : } // namespace chip