Line data Source code
1 : /*
2 : *
3 : * Copyright (c) 2023 Project CHIP Authors
4 : * All rights reserved.
5 : *
6 : * Licensed under the Apache License, Version 2.0 (the "License");
7 : * you may not use this file except in compliance with the License.
8 : * You may obtain a copy of the License at
9 : *
10 : * http://www.apache.org/licenses/LICENSE-2.0
11 : *
12 : * Unless required by applicable law or agreed to in writing, software
13 : * distributed under the License is distributed on an "AS IS" BASIS,
14 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 : * See the License for the specific language governing permissions and
16 : * limitations under the License.
17 : */
18 : #pragma once
19 :
20 : #include <lib/core/TLVTags.h>
21 :
22 : namespace chip {
23 : namespace TLVMeta {
24 :
25 : static constexpr uint32_t kAttributeProfile = 1;
26 : static constexpr uint32_t kCommandProfile = 2;
27 : static constexpr uint32_t kEventProfile = 3;
28 :
29 125 : constexpr TLV::Tag ClusterTag(uint32_t cluster_id)
30 : {
31 125 : return TLV::CommonTag(cluster_id);
32 : }
33 :
34 75 : constexpr TLV::Tag AttributeTag(uint32_t attribute_id)
35 : {
36 75 : return TLV::ProfileTag(kAttributeProfile, attribute_id);
37 : }
38 :
39 5 : constexpr TLV::Tag CommandTag(uint32_t command_id)
40 : {
41 5 : return TLV::ProfileTag(kCommandProfile, command_id);
42 : }
43 :
44 4 : constexpr TLV::Tag EventTag(uint32_t event_id)
45 : {
46 4 : return TLV::ProfileTag(kEventProfile, event_id);
47 : }
48 :
49 10 : constexpr TLV::Tag ConstantValueTag(uint64_t value)
50 : {
51 : // Re-use common tag for a constant value
52 : // Will make "RawValue be equal to value"
53 10 : return TLV::ProfileTag(static_cast<uint32_t>(value >> 32), static_cast<uint32_t>(value & 0xFFFFFFFF));
54 : }
55 :
56 : enum class ItemType : uint8_t
57 : {
58 : kDefault,
59 : kList,
60 : kEnum,
61 : kBitmap,
62 :
63 : // Special protocol types
64 : kProtocolClusterId,
65 : kProtocolAttributeId,
66 : kProtocolCommandId,
67 : kProtocolEventId,
68 :
69 : kProtocolPayloadAttribute,
70 : kProtocolPayloadCommand,
71 : kProtocolPayloadEvent,
72 :
73 : kProtocolBinaryData,
74 : };
75 :
76 : struct ItemInfo
77 : {
78 : TLV::Tag tag;
79 : const char * name;
80 : ItemType type;
81 : };
82 :
83 : } // namespace TLVMeta
84 : } // namespace chip
|