10c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker/* 20c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * Copyright 2018 The Android Open Source Project 30c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * 40c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * Licensed under the Apache License, Version 2.0 (the "License"); 50c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * you may not use this file except in compliance with the License. 60c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * You may obtain a copy of the License at 70c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * 80c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * http://www.apache.org/licenses/LICENSE-2.0 90c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * 100c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * Unless required by applicable law or agreed to in writing, software 110c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * distributed under the License is distributed on an "AS IS" BASIS, 120c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * See the License for the specific language governing permissions and 140c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker * limitations under the License. 150c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker */ 160c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 170c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker#include "set_absolute_volume.h" 180c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 190c348413fb8d0a579acb8178c7e006d751508a3eAjay Panickernamespace bluetooth { 200c348413fb8d0a579acb8178c7e006d751508a3eAjay Panickernamespace avrcp { 210c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 220c348413fb8d0a579acb8178c7e006d751508a3eAjay Panickerstd::unique_ptr<SetAbsoluteVolumeRequestBuilder> 230c348413fb8d0a579acb8178c7e006d751508a3eAjay PanickerSetAbsoluteVolumeRequestBuilder::MakeBuilder(uint8_t volume) { 240c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker std::unique_ptr<SetAbsoluteVolumeRequestBuilder> builder( 250c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker new SetAbsoluteVolumeRequestBuilder(volume & 0x7F)); 260c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 270c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker return builder; 280c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker} 290c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 300c348413fb8d0a579acb8178c7e006d751508a3eAjay Panickersize_t SetAbsoluteVolumeRequestBuilder::size() const { 310c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker return VendorPacket::kMinSize() + 1; 320c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker} 330c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 340c348413fb8d0a579acb8178c7e006d751508a3eAjay Panickerbool SetAbsoluteVolumeRequestBuilder::Serialize( 350c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker const std::shared_ptr<::bluetooth::Packet>& pkt) { 360c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ReserveSpace(pkt, size()); 370c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 380c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker PacketBuilder::PushHeader(pkt); 390c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 400c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker VendorPacketBuilder::PushHeader(pkt, size() - VendorPacket::kMinSize()); 410c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 420c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker AddPayloadOctets1(pkt, volume_); 430c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 440c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker return true; 450c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker} 460c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 470c348413fb8d0a579acb8178c7e006d751508a3eAjay Panickeruint8_t SetAbsoluteVolumeResponse::GetVolume() const { 480c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker auto it = begin() + VendorPacket::kMinSize(); 490c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker return *it; 500c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker} 510c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 520c348413fb8d0a579acb8178c7e006d751508a3eAjay Panickerbool SetAbsoluteVolumeResponse::IsValid() const { 530c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker if (!VendorPacket::IsValid()) return false; 540c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker if (GetCType() != CType::ACCEPTED) return false; 550c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker return size() == kMinSize(); 560c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker} 570c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 580c348413fb8d0a579acb8178c7e006d751508a3eAjay Panickerstd::string SetAbsoluteVolumeResponse::ToString() const { 590c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker std::stringstream ss; 600c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ss << "SetAbsoluteVolumeResponse: " << std::endl; 610c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ss << " └ cType = " << GetCType() << std::endl; 620c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ss << " └ Subunit Type = " << loghex(GetSubunitType()) << std::endl; 630c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ss << " └ Subunit ID = " << loghex(GetSubunitId()) << std::endl; 640c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ss << " └ OpCode = " << GetOpcode() << std::endl; 650c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ss << " └ Company ID = " << loghex(GetCompanyId()) << std::endl; 660c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ss << " └ Command PDU = " << GetCommandPdu() << std::endl; 670c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ss << " └ PacketType = " << GetPacketType() << std::endl; 680c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ss << " └ Parameter Length = " << loghex(GetParameterLength()) << std::endl; 690c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ss << " └ Volume = " << GetVolume() << std::endl; 700c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker ss << std::endl; 710c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 720c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker return ss.str(); 730c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker} 740c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker 750c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker} // namespace avrcp 760c348413fb8d0a579acb8178c7e006d751508a3eAjay Panicker} // namespace bluetooth