You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
8.9 KiB
180 lines
8.9 KiB
//
|
|
// Copyright (C) 2017 Google, Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at:
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include <base/macros.h>
|
|
#include <hardware/bluetooth.h>
|
|
#include <hardware/bt_rc.h>
|
|
|
|
namespace bluetooth {
|
|
namespace hal {
|
|
|
|
class BluetoothAvrcpInterface {
|
|
public:
|
|
// The HAL interface doesn't allow registering "user data" that carries
|
|
// context beyond the callback parameters, forcing implementations to deal
|
|
// with global variables. The *Observer interface is to redirect these events
|
|
// to interested parties in an object-oriented manner.
|
|
class TargetObserver {
|
|
public:
|
|
virtual ~TargetObserver() = default;
|
|
|
|
virtual void RemoteFeaturesCallback(const RawAddress& bd_addr,
|
|
btrc_remote_features_t features);
|
|
virtual void GetPlayStatusCallback(const RawAddress& bd_addr);
|
|
virtual void ListPlayerAppAttrCallback(const RawAddress& bd_addr);
|
|
virtual void ListPlayerAppValuesCallback(btrc_player_attr_t attr_id,
|
|
const RawAddress& bd_addr);
|
|
virtual void GetPlayerAppValueCallback(uint8_t num_attr,
|
|
btrc_player_attr_t* p_attrs,
|
|
const RawAddress& bd_addr);
|
|
virtual void GetPlayerAppAttrsTextCallback(uint8_t num_attr,
|
|
btrc_player_attr_t* p_attrs,
|
|
const RawAddress& bd_addr);
|
|
virtual void GetPlayerAppValuesTextCallback(uint8_t attr_id,
|
|
uint8_t num_val,
|
|
uint8_t* p_vals,
|
|
const RawAddress& bd_addr);
|
|
virtual void SetPlayerAppValueCallback(btrc_player_settings_t* p_vals,
|
|
const RawAddress& bd_addr);
|
|
virtual void GetElementAttrCallback(uint8_t num_attr,
|
|
btrc_media_attr_t* p_attrs,
|
|
const RawAddress& bd_addr);
|
|
virtual void RegisterNotificationCallback(btrc_event_id_t event_id,
|
|
uint32_t param,
|
|
const RawAddress& bd_addr);
|
|
virtual void VolumeChangeCallback(uint8_t volume, uint8_t ctype,
|
|
const RawAddress& bd_addr);
|
|
virtual void PassthroughCmdCallback(int id, int key_state,
|
|
const RawAddress& bd_addr);
|
|
virtual void SetAddressedPlayerCallback(uint16_t player_id,
|
|
const RawAddress& bd_addr);
|
|
virtual void SetBrowsedPlayerCallback(uint16_t player_id,
|
|
const RawAddress& bd_addr);
|
|
virtual void GetFolderItemsCallback(uint8_t scope, uint32_t start_item,
|
|
uint32_t end_item, uint8_t num_attr,
|
|
uint32_t* p_attr_ids,
|
|
const RawAddress& bd_addr);
|
|
virtual void ChangePathCallback(uint8_t direction, uint8_t* folder_uid,
|
|
const RawAddress& bd_addr);
|
|
virtual void GetItemAttrCallback(uint8_t scope, uint8_t* uid,
|
|
uint16_t uid_counter, uint8_t num_attr,
|
|
btrc_media_attr_t* p_attrs,
|
|
const RawAddress& bd_addr);
|
|
virtual void PlayItemCallback(uint8_t scope, uint16_t uid_counter,
|
|
uint8_t* uid, const RawAddress& bd_addr);
|
|
virtual void GetTotalNumOfItemsCallback(uint8_t scope,
|
|
const RawAddress& bd_addr);
|
|
virtual void SearchCallback(uint16_t str_len, uint8_t* p_str,
|
|
const RawAddress& bd_addr);
|
|
virtual void AddToNowPlayingCallback(uint8_t scope, uint8_t* uid,
|
|
uint16_t uid_counter,
|
|
const RawAddress& bd_addr);
|
|
};
|
|
|
|
class ControlObserver {
|
|
public:
|
|
virtual ~ControlObserver() = default;
|
|
|
|
virtual void PassthroughRspCallback(const RawAddress& bd_addr, int id,
|
|
int key_state);
|
|
virtual void GroupnavigationRspCallback(int id, int key_state);
|
|
virtual void ConnectionStateCallback(bool rc_connect, bool bt_connect,
|
|
const RawAddress& bd_addr);
|
|
virtual void CtrlGetrcfeaturesCallback(const RawAddress& bd_addr,
|
|
int features);
|
|
virtual void CtrlSetplayerapplicationsettingRspCallback(
|
|
const RawAddress& bd_addr, uint8_t accepted);
|
|
virtual void CtrlPlayerapplicationsettingCallback(
|
|
const RawAddress& bd_addr, uint8_t num_attr,
|
|
btrc_player_app_attr_t* app_attrs, uint8_t num_ext_attr,
|
|
btrc_player_app_ext_attr_t* ext_attrs);
|
|
virtual void CtrlPlayerapplicationsettingChangedCallback(
|
|
const RawAddress& bd_addr, const btrc_player_settings_t& p_vals);
|
|
virtual void CtrlSetabsvolCmdCallback(const RawAddress& bd_addr,
|
|
uint8_t abs_vol, uint8_t label);
|
|
virtual void CtrlRegisternotificationAbsVolCallback(
|
|
const RawAddress& bd_addr, uint8_t label);
|
|
virtual void CtrlTrackChangedCallback(const RawAddress& bd_addr,
|
|
uint8_t num_attr,
|
|
btrc_element_attr_val_t* p_attrs);
|
|
virtual void CtrlPlayPositionChangedCallback(const RawAddress& bd_addr,
|
|
uint32_t song_len,
|
|
uint32_t song_pos);
|
|
virtual void CtrlPlayStatusChangedCallback(const RawAddress& bd_addr,
|
|
btrc_play_status_t play_status);
|
|
virtual void CtrlGetFolderItemsCallback(
|
|
const RawAddress& bd_addr, btrc_status_t status,
|
|
const btrc_folder_items_t* folder_items, uint8_t count);
|
|
virtual void CtrlChangePathCallback(const RawAddress& bd_addr,
|
|
uint32_t count);
|
|
virtual void CtrlSetBrowsedPlayerCallback(const RawAddress& bd_addr,
|
|
uint8_t num_items, uint8_t depth);
|
|
virtual void CtrlSetAddressedPlayerCallback(const RawAddress& bd_addr,
|
|
uint8_t status);
|
|
};
|
|
|
|
// Initialize and clean up the BluetoothInterface singleton. Returns false if
|
|
// the underlying HAL interface failed to initialize, and true on success.
|
|
static bool Initialize();
|
|
|
|
// Shuts down and cleans up the interface. CleanUp must be called on the same
|
|
// thread that called Initialize.
|
|
static void CleanUp();
|
|
|
|
// Returns true if the interface was initialized and a global singleton has
|
|
// been created.
|
|
static bool IsInitialized();
|
|
|
|
// Initialize for testing. Use this to inject a test version of
|
|
// BluetoothAvrcpInterface. To be used from unit tests only.
|
|
static void InitializeForTesting(BluetoothAvrcpInterface* test_instance);
|
|
|
|
// Returns the BluetoothAvrcpInterface singleton. If the interface has
|
|
// not been initialized, returns nullptr. This method is thread-safe, in that
|
|
// it will block if the internal lock is being held by another thread. Don't
|
|
// call this re-entrantly from an observer event as this may cause a deadlock.
|
|
static BluetoothAvrcpInterface* Get();
|
|
|
|
virtual bool AvrcpControlEnable() = 0;
|
|
virtual void AvrcpControlDisable() = 0;
|
|
virtual bool AvrcpTargetEnable() = 0;
|
|
virtual void AvrcpTargetDisable() = 0;
|
|
|
|
// Thread-safety is guaranteed by ObserverList.
|
|
virtual void AddTargetObserver(TargetObserver* observer) = 0;
|
|
virtual void RemoveTargetObserver(TargetObserver* observer) = 0;
|
|
|
|
// Thread-safety is guaranteed by ObserverList.
|
|
virtual void AddControlObserver(ControlObserver* observer) = 0;
|
|
virtual void RemoveControlObserver(ControlObserver* observer) = 0;
|
|
|
|
// The HAL module pointers provided by the shared Bluetooth library
|
|
virtual const btrc_interface_t* GetTargetHALInterface() const = 0;
|
|
virtual const btrc_ctrl_interface_t* GetControlHALInterface() const = 0;
|
|
|
|
protected:
|
|
BluetoothAvrcpInterface() = default;
|
|
virtual ~BluetoothAvrcpInterface() = default;
|
|
|
|
private:
|
|
DISALLOW_COPY_AND_ASSIGN(BluetoothAvrcpInterface);
|
|
};
|
|
|
|
} // namespace hal
|
|
} // namespace bluetooth
|