1341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker/* 2341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * Copyright 2018 The Android Open Source Project 3341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * 4341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * Licensed under the Apache License, Version 2.0 (the "License"); 5341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * you may not use this file except in compliance with the License. 6341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * You may obtain a copy of the License at 7341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * 8341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * http://www.apache.org/licenses/LICENSE-2.0 9341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * 10341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * Unless required by applicable law or agreed to in writing, software 11341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * distributed under the License is distributed on an "AS IS" BASIS, 12341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * See the License for the specific language governing permissions and 14341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * limitations under the License. 15341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker */ 16341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 17341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#pragma once 18341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 19341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#include "avrcp_packet.h" 20341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 21341ab2befa059e859cdc67655d83bac14980ea9eAjay Panickernamespace bluetooth { 22341ab2befa059e859cdc67655d83bac14980ea9eAjay Panickernamespace avrcp { 23341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 24341ab2befa059e859cdc67655d83bac14980ea9eAjay Panickerclass PassThroughPacketBuilder : public PacketBuilder { 25341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker public: 26341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker virtual ~PassThroughPacketBuilder() = default; 27341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 28341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker static std::unique_ptr<PassThroughPacketBuilder> MakeBuilder( 29341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker bool response, bool pushed, uint8_t operation_id); 30341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 31341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker virtual size_t size() const override; 32341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker virtual bool Serialize( 33341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker const std::shared_ptr<::bluetooth::Packet>& pkt) override; 34341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 35341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker private: 36341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker bool pushed_; 37341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker uint8_t opperation_id_; 38341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 39341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker PassThroughPacketBuilder(bool response, bool pushed, uint8_t opperation_id) 40341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker : PacketBuilder(response ? CType::ACCEPTED : CType::CONTROL, 0x09, 0x00, 41341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Opcode::PASS_THROUGH), 42341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker pushed_(pushed), 43341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker opperation_id_(opperation_id){}; 44341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker}; 45341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 46341ab2befa059e859cdc67655d83bac14980ea9eAjay Panickerclass PassThroughPacket : public Packet { 47341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker public: 48341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker virtual ~PassThroughPacket() = default; 49341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 50341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker /** 51341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * Pass Through Packet Layout 52341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * AvrcpPacket: 53341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * CType c_type_; 54341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * uint8_t subunit_type_ : 5; 55341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * uint8_t subunit_id_ : 3; 56341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * Opcode opcode_; 57341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * PassThroughPacket: 58341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * uint8_t state : 1; 59341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * uint8_t opperation_id : 7; 60341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * uint8_t data_length; 61341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker */ 628f7377353db29efe0a506123deec03d70935957aAjay Panicker static constexpr size_t kMinSize() { return Packet::kMinSize() + 2; } 63341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 64341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker // Getter Functions 6505c13ff0be3e638bbbd54786f60f3a3b17d1e1c0Ajay Panicker KeyState GetKeyState() const; 66341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker uint8_t GetOperationId() const; 67341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 68341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker // Overloaded Functions 69341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker virtual bool IsValid() const override; 70341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker virtual std::string ToString() const override; 71341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 72341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker protected: 73341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker using Packet::Packet; 74341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker}; 75341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 76341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} // namespace avrcp 77341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} // namespace bluetooth