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#include "get_total_number_of_items.h"
188f7377353db29efe0a506123deec03d70935957aAjay Panicker
198f7377353db29efe0a506123deec03d70935957aAjay Panickernamespace bluetooth {
208f7377353db29efe0a506123deec03d70935957aAjay Panickernamespace avrcp {
218f7377353db29efe0a506123deec03d70935957aAjay Panicker
228f7377353db29efe0a506123deec03d70935957aAjay Panickerstd::unique_ptr<GetTotalNumberOfItemsResponseBuilder>
238f7377353db29efe0a506123deec03d70935957aAjay PanickerGetTotalNumberOfItemsResponseBuilder::MakeBuilder(
248f7377353db29efe0a506123deec03d70935957aAjay Panicker    Status status, uint16_t uid_counter, uint32_t num_items_in_folder) {
258f7377353db29efe0a506123deec03d70935957aAjay Panicker  std::unique_ptr<GetTotalNumberOfItemsResponseBuilder> builder(
268f7377353db29efe0a506123deec03d70935957aAjay Panicker      new GetTotalNumberOfItemsResponseBuilder(status, uid_counter,
278f7377353db29efe0a506123deec03d70935957aAjay Panicker                                               num_items_in_folder));
288f7377353db29efe0a506123deec03d70935957aAjay Panicker
298f7377353db29efe0a506123deec03d70935957aAjay Panicker  return builder;
308f7377353db29efe0a506123deec03d70935957aAjay Panicker}
318f7377353db29efe0a506123deec03d70935957aAjay Panicker
328f7377353db29efe0a506123deec03d70935957aAjay Panickersize_t GetTotalNumberOfItemsResponseBuilder::size() const {
338f7377353db29efe0a506123deec03d70935957aAjay Panicker  size_t len = BrowsePacket::kMinSize();
348f7377353db29efe0a506123deec03d70935957aAjay Panicker  len += 1;  // Status
358f7377353db29efe0a506123deec03d70935957aAjay Panicker
368f7377353db29efe0a506123deec03d70935957aAjay Panicker  if (status_ != Status::NO_ERROR) return len;
378f7377353db29efe0a506123deec03d70935957aAjay Panicker
388f7377353db29efe0a506123deec03d70935957aAjay Panicker  len += 2;  // UID Counter
398f7377353db29efe0a506123deec03d70935957aAjay Panicker  len += 4;  // Number of items in folder
408f7377353db29efe0a506123deec03d70935957aAjay Panicker  return len;
418f7377353db29efe0a506123deec03d70935957aAjay Panicker}
428f7377353db29efe0a506123deec03d70935957aAjay Panicker
438f7377353db29efe0a506123deec03d70935957aAjay Panickerbool GetTotalNumberOfItemsResponseBuilder::Serialize(
448f7377353db29efe0a506123deec03d70935957aAjay Panicker    const std::shared_ptr<::bluetooth::Packet>& pkt) {
458f7377353db29efe0a506123deec03d70935957aAjay Panicker  ReserveSpace(pkt, size());
468f7377353db29efe0a506123deec03d70935957aAjay Panicker
478f7377353db29efe0a506123deec03d70935957aAjay Panicker  BrowsePacketBuilder::PushHeader(pkt, size() - BrowsePacket::kMinSize());
488f7377353db29efe0a506123deec03d70935957aAjay Panicker
498f7377353db29efe0a506123deec03d70935957aAjay Panicker  AddPayloadOctets1(pkt, (uint8_t)status_);
508f7377353db29efe0a506123deec03d70935957aAjay Panicker
518f7377353db29efe0a506123deec03d70935957aAjay Panicker  if (status_ != Status::NO_ERROR) return true;
528f7377353db29efe0a506123deec03d70935957aAjay Panicker  AddPayloadOctets2(pkt, base::ByteSwap(uid_counter_));
538f7377353db29efe0a506123deec03d70935957aAjay Panicker  AddPayloadOctets4(pkt, base::ByteSwap(num_items_in_folder_));
548f7377353db29efe0a506123deec03d70935957aAjay Panicker  return true;
558f7377353db29efe0a506123deec03d70935957aAjay Panicker}
568f7377353db29efe0a506123deec03d70935957aAjay Panicker
578f7377353db29efe0a506123deec03d70935957aAjay PanickerScope GetTotalNumberOfItemsRequest::GetScope() const {
588f7377353db29efe0a506123deec03d70935957aAjay Panicker  auto it = begin() + BrowsePacket::kMinSize();
598f7377353db29efe0a506123deec03d70935957aAjay Panicker  return static_cast<Scope>(*it);
608f7377353db29efe0a506123deec03d70935957aAjay Panicker}
618f7377353db29efe0a506123deec03d70935957aAjay Panicker
628f7377353db29efe0a506123deec03d70935957aAjay Panickerbool GetTotalNumberOfItemsRequest::IsValid() const {
638f7377353db29efe0a506123deec03d70935957aAjay Panicker  if (!BrowsePacket::IsValid()) return false;
648f7377353db29efe0a506123deec03d70935957aAjay Panicker  return size() == kMinSize();
658f7377353db29efe0a506123deec03d70935957aAjay Panicker}
668f7377353db29efe0a506123deec03d70935957aAjay Panicker
678f7377353db29efe0a506123deec03d70935957aAjay Panickerstd::string GetTotalNumberOfItemsRequest::ToString() const {
688f7377353db29efe0a506123deec03d70935957aAjay Panicker  std::stringstream ss;
698f7377353db29efe0a506123deec03d70935957aAjay Panicker  ss << "GetTotalNumberOfItemsRequest: " << std::endl;
708f7377353db29efe0a506123deec03d70935957aAjay Panicker  ss << "  └ PDU = " << GetPdu() << std::endl;
718f7377353db29efe0a506123deec03d70935957aAjay Panicker  ss << "  └ Length = " << GetLength() << std::endl;
728f7377353db29efe0a506123deec03d70935957aAjay Panicker  ss << "  └ Scope = " << GetScope() << std::endl;
738f7377353db29efe0a506123deec03d70935957aAjay Panicker  ss << std::endl;
748f7377353db29efe0a506123deec03d70935957aAjay Panicker
758f7377353db29efe0a506123deec03d70935957aAjay Panicker  return ss.str();
768f7377353db29efe0a506123deec03d70935957aAjay Panicker}
778f7377353db29efe0a506123deec03d70935957aAjay Panicker
788f7377353db29efe0a506123deec03d70935957aAjay Panicker}  // namespace avrcp
798f7377353db29efe0a506123deec03d70935957aAjay Panicker}  // namespace bluetooth
80