18f7377353db29efe0a506123deec03d70935957aAjay Panicker/*
28f7377353db29efe0a506123deec03d70935957aAjay Panicker * Copyright 2018 The Android Open Source Project
38f7377353db29efe0a506123deec03d70935957aAjay Panicker *
48f7377353db29efe0a506123deec03d70935957aAjay Panicker * Licensed under the Apache License, Version 2.0 (the "License");
58f7377353db29efe0a506123deec03d70935957aAjay Panicker * you may not use this file except in compliance with the License.
68f7377353db29efe0a506123deec03d70935957aAjay Panicker * You may obtain a copy of the License at
78f7377353db29efe0a506123deec03d70935957aAjay Panicker *
88f7377353db29efe0a506123deec03d70935957aAjay Panicker *      http://www.apache.org/licenses/LICENSE-2.0
98f7377353db29efe0a506123deec03d70935957aAjay Panicker *
108f7377353db29efe0a506123deec03d70935957aAjay Panicker * Unless required by applicable law or agreed to in writing, software
118f7377353db29efe0a506123deec03d70935957aAjay Panicker * distributed under the License is distributed on an "AS IS" BASIS,
128f7377353db29efe0a506123deec03d70935957aAjay Panicker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138f7377353db29efe0a506123deec03d70935957aAjay Panicker * See the License for the specific language governing permissions and
148f7377353db29efe0a506123deec03d70935957aAjay Panicker * limitations under the License.
158f7377353db29efe0a506123deec03d70935957aAjay Panicker */
168f7377353db29efe0a506123deec03d70935957aAjay Panicker
178f7377353db29efe0a506123deec03d70935957aAjay Panicker#pragma once
188f7377353db29efe0a506123deec03d70935957aAjay Panicker
198f7377353db29efe0a506123deec03d70935957aAjay Panicker#include "avrcp_browse_packet.h"
208f7377353db29efe0a506123deec03d70935957aAjay Panicker
218f7377353db29efe0a506123deec03d70935957aAjay Panickernamespace bluetooth {
228f7377353db29efe0a506123deec03d70935957aAjay Panickernamespace avrcp {
238f7377353db29efe0a506123deec03d70935957aAjay Panicker
248f7377353db29efe0a506123deec03d70935957aAjay Panickerclass GetTotalNumberOfItemsResponseBuilder : public BrowsePacketBuilder {
258f7377353db29efe0a506123deec03d70935957aAjay Panicker public:
268f7377353db29efe0a506123deec03d70935957aAjay Panicker  virtual ~GetTotalNumberOfItemsResponseBuilder() = default;
278f7377353db29efe0a506123deec03d70935957aAjay Panicker
288f7377353db29efe0a506123deec03d70935957aAjay Panicker  static std::unique_ptr<GetTotalNumberOfItemsResponseBuilder> MakeBuilder(
298f7377353db29efe0a506123deec03d70935957aAjay Panicker      Status status, uint16_t uid_counter, uint32_t num_items_in_folder);
308f7377353db29efe0a506123deec03d70935957aAjay Panicker
318f7377353db29efe0a506123deec03d70935957aAjay Panicker  virtual size_t size() const override;
328f7377353db29efe0a506123deec03d70935957aAjay Panicker  virtual bool Serialize(
338f7377353db29efe0a506123deec03d70935957aAjay Panicker      const std::shared_ptr<::bluetooth::Packet>& pkt) override;
348f7377353db29efe0a506123deec03d70935957aAjay Panicker
358f7377353db29efe0a506123deec03d70935957aAjay Panicker protected:
368f7377353db29efe0a506123deec03d70935957aAjay Panicker  Status status_;
378f7377353db29efe0a506123deec03d70935957aAjay Panicker  uint16_t uid_counter_;
388f7377353db29efe0a506123deec03d70935957aAjay Panicker  uint32_t num_items_in_folder_;
398f7377353db29efe0a506123deec03d70935957aAjay Panicker
408f7377353db29efe0a506123deec03d70935957aAjay Panicker  GetTotalNumberOfItemsResponseBuilder(Status status, uint16_t uid_counter,
418f7377353db29efe0a506123deec03d70935957aAjay Panicker                                       uint32_t num_items_in_folder)
428f7377353db29efe0a506123deec03d70935957aAjay Panicker      : BrowsePacketBuilder(BrowsePdu::GET_TOTAL_NUMBER_OF_ITEMS),
438f7377353db29efe0a506123deec03d70935957aAjay Panicker        status_(status),
448f7377353db29efe0a506123deec03d70935957aAjay Panicker        uid_counter_(uid_counter),
458f7377353db29efe0a506123deec03d70935957aAjay Panicker        num_items_in_folder_(num_items_in_folder){};
468f7377353db29efe0a506123deec03d70935957aAjay Panicker};
478f7377353db29efe0a506123deec03d70935957aAjay Panicker
488f7377353db29efe0a506123deec03d70935957aAjay Panickerclass GetTotalNumberOfItemsRequest : public BrowsePacket {
498f7377353db29efe0a506123deec03d70935957aAjay Panicker public:
508f7377353db29efe0a506123deec03d70935957aAjay Panicker  virtual ~GetTotalNumberOfItemsRequest() = default;
518f7377353db29efe0a506123deec03d70935957aAjay Panicker
528f7377353db29efe0a506123deec03d70935957aAjay Panicker  /**
538f7377353db29efe0a506123deec03d70935957aAjay Panicker   * AVRCP Get Total Number Of Items Packet Layout
548f7377353db29efe0a506123deec03d70935957aAjay Panicker   *   BrowsePacket:
558f7377353db29efe0a506123deec03d70935957aAjay Panicker   *     uint8_t pdu_;
568f7377353db29efe0a506123deec03d70935957aAjay Panicker   *     uint16_t length_;
578f7377353db29efe0a506123deec03d70935957aAjay Panicker   *   GetTotalNumberOfItemsRequest:
588f7377353db29efe0a506123deec03d70935957aAjay Panicker   *     uint8_t scope_;
598f7377353db29efe0a506123deec03d70935957aAjay Panicker   */
608f7377353db29efe0a506123deec03d70935957aAjay Panicker  static constexpr size_t kMinSize() { return BrowsePacket::kMinSize() + 1; }
618f7377353db29efe0a506123deec03d70935957aAjay Panicker
628f7377353db29efe0a506123deec03d70935957aAjay Panicker  Scope GetScope() const;
638f7377353db29efe0a506123deec03d70935957aAjay Panicker
648f7377353db29efe0a506123deec03d70935957aAjay Panicker  virtual bool IsValid() const override;
658f7377353db29efe0a506123deec03d70935957aAjay Panicker  virtual std::string ToString() const override;
668f7377353db29efe0a506123deec03d70935957aAjay Panicker
678f7377353db29efe0a506123deec03d70935957aAjay Panicker protected:
688f7377353db29efe0a506123deec03d70935957aAjay Panicker  using BrowsePacket::BrowsePacket;
698f7377353db29efe0a506123deec03d70935957aAjay Panicker};
708f7377353db29efe0a506123deec03d70935957aAjay Panicker
718f7377353db29efe0a506123deec03d70935957aAjay Panicker}  // namespace avrcp
728f7377353db29efe0a506123deec03d70935957aAjay Panicker}  // namespace bluetooth