blob: f5291afd9aef4cecefcf7374e6ba80a3bc7dede0 [file] [log] [blame]
Ajay Panicker8f737732018-01-30 10:36:45 -08001/*
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 "avrcp_browse_packet.h"
20
21namespace bluetooth {
22namespace avrcp {
23
24class GetFolderItemsResponseBuilder : public BrowsePacketBuilder {
25 public:
26 virtual ~GetFolderItemsResponseBuilder() = default;
27 static std::unique_ptr<GetFolderItemsResponseBuilder> MakePlayerListBuilder(
Ajay Panickere6552092018-03-31 14:38:53 -070028 Status status, uint16_t uid_counter, size_t mtu);
Ajay Panicker8f737732018-01-30 10:36:45 -080029 static std::unique_ptr<GetFolderItemsResponseBuilder> MakeVFSBuilder(
Ajay Panickere6552092018-03-31 14:38:53 -070030 Status status, uint16_t uid_counter, size_t mtu);
Ajay Panicker8f737732018-01-30 10:36:45 -080031 static std::unique_ptr<GetFolderItemsResponseBuilder> MakeNowPlayingBuilder(
Ajay Panickere6552092018-03-31 14:38:53 -070032 Status status, uint16_t uid_counter, size_t mtu);
Ajay Panicker8f737732018-01-30 10:36:45 -080033
34 virtual size_t size() const override;
35 virtual bool Serialize(
36 const std::shared_ptr<::bluetooth::Packet>& pkt) override;
37
Ajay Panickere6552092018-03-31 14:38:53 -070038 // Returns false if adding an item would exceed the MTU
39 bool AddMediaPlayer(MediaPlayerItem item);
40 bool AddSong(MediaElementItem item);
41 bool AddFolder(FolderItem item);
Ajay Panicker8f737732018-01-30 10:36:45 -080042
43 protected:
44 Scope scope_;
45 std::vector<MediaListItem> items_;
46 Status status_;
47 uint16_t uid_counter_;
Ajay Panickere6552092018-03-31 14:38:53 -070048 size_t mtu_;
Ajay Panicker8f737732018-01-30 10:36:45 -080049
50 GetFolderItemsResponseBuilder(Scope scope, Status status,
Ajay Panickere6552092018-03-31 14:38:53 -070051 uint16_t uid_counter, size_t mtu)
Ajay Panicker8f737732018-01-30 10:36:45 -080052 : BrowsePacketBuilder(BrowsePdu::GET_FOLDER_ITEMS),
53 scope_(scope),
54 status_(status),
Ajay Panickere6552092018-03-31 14:38:53 -070055 uid_counter_(uid_counter),
56 mtu_(mtu){};
Ajay Panicker8f737732018-01-30 10:36:45 -080057
58 private:
59 void PushMediaListItem(const std::shared_ptr<::bluetooth::Packet>& pkt,
60 const MediaListItem& item);
61 void PushMediaPlayerItem(const std::shared_ptr<::bluetooth::Packet>& pkt,
62 const MediaPlayerItem& item);
63 void PushMediaElementItem(const std::shared_ptr<::bluetooth::Packet>& pkt,
64 const MediaElementItem& item);
65 void PushFolderItem(const std::shared_ptr<::bluetooth::Packet>& pkt,
66 const FolderItem& item);
67};
68
69class GetFolderItemsRequest : public BrowsePacket {
70 public:
71 virtual ~GetFolderItemsRequest() = default;
72
73 /**
74 * Avrcp Change Path Packet Layout
75 * BrowsePacket:
76 * uint8_t pdu_;
77 * uint16_t length_;
78 * GetFolderItemsRequest:
79 * uint8_t scope_;
80 * uint32_t start_item_;
81 * uint32_t end_item_;
82 * uint8_t attr_count_;
83 * uint32_t[] attr_requested_;
84 */
85 static constexpr size_t kMinSize() { return BrowsePacket::kMinSize() + 10; }
86
87 Scope GetScope() const;
88 uint32_t GetStartItem() const;
89 uint32_t GetEndItem() const;
90 uint8_t GetNumAttributes() const;
91 std::vector<Attribute> GetAttributesRequested() const;
92
93 virtual bool IsValid() const override;
94 virtual std::string ToString() const override;
95
96 protected:
97 using BrowsePacket::BrowsePacket;
98};
99
Ajay Panickerfc136d12018-04-02 18:21:04 -0700100class GetFolderItemsRequestBuilder : public BrowsePacketBuilder {
101 public:
102 virtual ~GetFolderItemsRequestBuilder() = default;
103
104 static std::unique_ptr<GetFolderItemsRequestBuilder> MakeBuilder(
105 Scope scope, uint32_t start_item, uint32_t end_item,
106 const std::set<Attribute>& requested_attrs);
107
108 virtual size_t size() const override;
109 virtual bool Serialize(
110 const std::shared_ptr<::bluetooth::Packet>& pkt) override;
111
112 protected:
113 GetFolderItemsRequestBuilder(Scope scope, uint32_t start_item,
114 uint32_t end_item,
115 const std::set<Attribute>& requested_attrs)
116 : BrowsePacketBuilder(BrowsePdu::GET_FOLDER_ITEMS),
117 scope_(scope),
118 start_item_(start_item),
119 end_item_(end_item),
120 requested_attrs_(requested_attrs){};
121
122 Scope scope_;
123 uint32_t start_item_;
124 uint32_t end_item_;
125 std::set<Attribute> requested_attrs_;
126};
127
Ajay Panicker8f737732018-01-30 10:36:45 -0800128} // namespace avrcp
129} // namespace bluetooth