• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 #include <set>
20 
21 #include "avrcp_browse_packet.h"
22 
23 namespace bluetooth {
24 namespace avrcp {
25 
26 template <class Builder>
27 class AttributesResponseBuilderTestUser;
28 
29 class GetItemAttributesResponseBuilder : public BrowsePacketBuilder {
30  public:
31   virtual ~GetItemAttributesResponseBuilder() = default;
32   using Builder = std::unique_ptr<GetItemAttributesResponseBuilder>;
33   static Builder MakeBuilder(Status status, size_t mtu);
34 
35   size_t AddAttributeEntry(AttributeEntry entry);
36   size_t AddAttributeEntry(Attribute, const std::string&);
37 
clear()38   virtual void clear() { entries_.clear(); }
39 
kHeaderSize()40   static constexpr size_t kHeaderSize() {
41     size_t len = BrowsePacket::kMinSize();
42     len += 1;  // Status
43     len += 1;  // Number of attributes
44     return len;
45   }
46 
kErrorHeaderSize()47   static constexpr size_t kErrorHeaderSize() {
48     size_t len = BrowsePacket::kMinSize();
49     len += 1;  // Status
50     return len;
51   }
52 
53   virtual size_t size() const override;
54   virtual bool Serialize(
55       const std::shared_ptr<::bluetooth::Packet>& pkt) override;
56 
57  private:
58   Status status_;
59   size_t mtu_;
60   std::set<AttributeEntry> entries_;
61   friend class AttributesResponseBuilderTestUser<
62       GetItemAttributesResponseBuilder>;
63 
GetItemAttributesResponseBuilder(Status status,size_t mtu)64   GetItemAttributesResponseBuilder(Status status, size_t mtu)
65       : BrowsePacketBuilder(BrowsePdu::GET_ITEM_ATTRIBUTES),
66         status_(status),
67         mtu_(mtu) {}
68 };
69 
70 class GetItemAttributesRequest : public BrowsePacket {
71  public:
72   virtual ~GetItemAttributesRequest() = default;
73 
74   /**
75    * Avrcp Change Path Packet Layout
76    *   BrowsePacket:
77    *     uint8_t pdu_;
78    *     uint16_t length_;
79    *   GetItemAttributesRequest:
80    *     uint8_t scope_;
81    *     uint64_t uid_;
82    *     uint16_t uid_counter_;
83    *     uint8_t attr_count_;
84    *     uint32_t[] attr_requested_;
85    */
kMinSize()86   static constexpr size_t kMinSize() { return BrowsePacket::kMinSize() + 12; }
87 
88   Scope GetScope() const;
89   uint64_t GetUid() const;
90   uint16_t GetUidCounter() const;
91   uint8_t GetNumAttributes()
92       const;  // If this value is zero, then all attributes are requested
93   std::vector<Attribute> GetAttributesRequested() const;
94 
95   virtual bool IsValid() const override;
96   virtual std::string ToString() const override;
97 
98  protected:
99   using BrowsePacket::BrowsePacket;
100 };
101 
102 }  // namespace avrcp
103 }  // namespace bluetooth
104