/****************************************************************************** * * Copyright 2018 The Android Open Source Project * * 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/callback_forward.h> #include <hardware/bt_hearing_aid.h> /** Implementations of HearingAid will also implement this interface */ class HearingAidAudioReceiver { public: virtual ~HearingAidAudioReceiver() = default; virtual void OnAudioDataReady(const std::vector<uint8_t>& data) = 0; virtual void OnAudioSuspend(); virtual void OnAudioResume(); }; class HearingAid { public: virtual ~HearingAid() = default; static void Initialize(bluetooth::hearing_aid::HearingAidCallbacks* callbacks, base::Closure initCb); static void CleanUp(); static bool IsInitialized(); static HearingAid* Get(); static void DebugDump(int fd); static void AddFromStorage(const RawAddress& address, uint16_t psm, uint8_t capabilities, uint16_t codec, uint16_t audioControlPointHandle, uint16_t volumeHandle, uint64_t hiSyncId, uint16_t render_delay, uint16_t preparation_delay, uint16_t is_white_listed); static int GetDeviceCount(); virtual void Connect(const RawAddress& address) = 0; virtual void Disconnect(const RawAddress& address) = 0; virtual void SetVolume(int8_t volume) = 0; }; /* Represents configuration of audio codec, as exchanged between hearing aid and * phone. * It can also be passed to the audio source to configure its parameters. */ struct CodecConfiguration { /** sampling rate that the codec expects to receive from audio framework */ uint32_t sample_rate; /** bitrate that codec expects to receive from audio framework in bits per * channel */ uint32_t bit_rate; /** Data interval determines how often we send samples to the remote. This * should match how often we grab data from audio source, optionally we can * grab data every 2 or 3 intervals, but this would increase latency. * * Value is provided in ms, must be divisable by 1.25 to make sure the * connection interval is integer. */ uint16_t data_interval_ms; }; /** Represents source of audio for hearing aids */ class HearingAidAudioSource { public: static void Start(const CodecConfiguration& codecConfiguration, HearingAidAudioReceiver* audioReceiver); static void Stop(); static void Initialize(); static void CleanUp(); static void DebugDump(int fd); };