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