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 ChangePathResponseBuilder : public BrowsePacketBuilder { 258f7377353db29efe0a506123deec03d70935957aAjay Panicker public: 268f7377353db29efe0a506123deec03d70935957aAjay Panicker virtual ~ChangePathResponseBuilder() = default; 278f7377353db29efe0a506123deec03d70935957aAjay Panicker 288f7377353db29efe0a506123deec03d70935957aAjay Panicker static std::unique_ptr<ChangePathResponseBuilder> MakeBuilder( 298f7377353db29efe0a506123deec03d70935957aAjay Panicker Status status, 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 private: 368f7377353db29efe0a506123deec03d70935957aAjay Panicker Status status_; 378f7377353db29efe0a506123deec03d70935957aAjay Panicker uint32_t num_items_in_folder_; 388f7377353db29efe0a506123deec03d70935957aAjay Panicker 398f7377353db29efe0a506123deec03d70935957aAjay Panicker ChangePathResponseBuilder(Status status, uint32_t num_items_in_folder) 408f7377353db29efe0a506123deec03d70935957aAjay Panicker : BrowsePacketBuilder(BrowsePdu::CHANGE_PATH), 418f7377353db29efe0a506123deec03d70935957aAjay Panicker status_(status), 428f7377353db29efe0a506123deec03d70935957aAjay Panicker num_items_in_folder_(num_items_in_folder) {} 438f7377353db29efe0a506123deec03d70935957aAjay Panicker}; 448f7377353db29efe0a506123deec03d70935957aAjay Panicker 458f7377353db29efe0a506123deec03d70935957aAjay Panickerclass ChangePathRequest : public BrowsePacket { 468f7377353db29efe0a506123deec03d70935957aAjay Panicker public: 478f7377353db29efe0a506123deec03d70935957aAjay Panicker virtual ~ChangePathRequest() = default; 488f7377353db29efe0a506123deec03d70935957aAjay Panicker 498f7377353db29efe0a506123deec03d70935957aAjay Panicker /** 508f7377353db29efe0a506123deec03d70935957aAjay Panicker * Avrcp Change Path Packet Layout 518f7377353db29efe0a506123deec03d70935957aAjay Panicker * BrowsePacket: 528f7377353db29efe0a506123deec03d70935957aAjay Panicker * uint8_t pdu_; 538f7377353db29efe0a506123deec03d70935957aAjay Panicker * uint16_t length_; 548f7377353db29efe0a506123deec03d70935957aAjay Panicker * ChangePathRequest: 558f7377353db29efe0a506123deec03d70935957aAjay Panicker * uint16_t uid_counter_; 568f7377353db29efe0a506123deec03d70935957aAjay Panicker * uint8_t direction_; 578f7377353db29efe0a506123deec03d70935957aAjay Panicker * uint64_t folder_uid_; 588f7377353db29efe0a506123deec03d70935957aAjay Panicker */ 598f7377353db29efe0a506123deec03d70935957aAjay Panicker static constexpr size_t kMinSize() { return BrowsePacket::kMinSize() + 11; } 608f7377353db29efe0a506123deec03d70935957aAjay Panicker 618f7377353db29efe0a506123deec03d70935957aAjay Panicker uint16_t GetUidCounter() const; 628f7377353db29efe0a506123deec03d70935957aAjay Panicker Direction GetDirection() const; 638f7377353db29efe0a506123deec03d70935957aAjay Panicker uint64_t GetUid() const; 648f7377353db29efe0a506123deec03d70935957aAjay Panicker 658f7377353db29efe0a506123deec03d70935957aAjay Panicker virtual bool IsValid() const override; 668f7377353db29efe0a506123deec03d70935957aAjay Panicker virtual std::string ToString() const override; 678f7377353db29efe0a506123deec03d70935957aAjay Panicker 688f7377353db29efe0a506123deec03d70935957aAjay Panicker protected: 698f7377353db29efe0a506123deec03d70935957aAjay Panicker using BrowsePacket::BrowsePacket; 708f7377353db29efe0a506123deec03d70935957aAjay Panicker}; 718f7377353db29efe0a506123deec03d70935957aAjay Panicker 728b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panickerclass ChangePathRequestBuilder : public BrowsePacketBuilder { 738b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker public: 748b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker virtual ~ChangePathRequestBuilder() = default; 758b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker 768b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker static std::unique_ptr<ChangePathRequestBuilder> MakeBuilder( 778b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker uint16_t uid_counter, Direction direction, uint64_t folder_uid); 788b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker 798b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker virtual size_t size() const override; 808b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker virtual bool Serialize( 818b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker const std::shared_ptr<::bluetooth::Packet>& pkt) override; 828b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker 838b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker private: 848b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker ChangePathRequestBuilder(uint16_t uid_counter, Direction direction, 858b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker uint64_t folder_uid) 868b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker : BrowsePacketBuilder(BrowsePdu::CHANGE_PATH), 878b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker uid_counter_(uid_counter), 888b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker direction_(direction), 898b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker folder_uid_(folder_uid){}; 908b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker 918b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker uint16_t uid_counter_; 928b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker Direction direction_; 938b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker uint64_t folder_uid_; 948b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker}; 958b6e6b8b9f8190cfbcdabb53ced727f81523d2b4Ajay Panicker 968f7377353db29efe0a506123deec03d70935957aAjay Panicker} // namespace avrcp 978f7377353db29efe0a506123deec03d70935957aAjay Panicker} // namespace bluetooth