Files
nearby/embedded/client/tests/gLinux/audio.cc
T
2023-06-06 16:08:21 +00:00

189 lines
6.1 KiB
C++

// Copyright 2022 Google LLC
//
// 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
//
// https://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.
#include "fakes.h"
#include "nearby.h"
#include "nearby_fp_client.h"
#include "nearby_platform_audio.h"
static const nearby_platform_AudioCallbacks* callbacks;
static bool multipoint = false;
static uint8_t switching_preference_flags = 0;
static uint64_t switch_active_peer_address = 0;
static uint8_t switch_active_flags = 0;
static uint64_t switch_active_preferred_audio_source = 0;
static uint64_t switch_back_peer_address = 0;
static uint8_t switch_back_flags = 0;
static uint64_t notify_peer_address = 0;
static uint8_t notify_flags = 0;
static uint64_t drop_peer_address = 0;
static uint8_t drop_flags = 0;
static uint64_t active_peer_address = 0;
bool nearby_platform_GetEarbudRightStatus() { return false; }
bool nearby_platform_GetEarbudLeftStatus() { return false; }
unsigned int nearby_platform_GetAudioConnectionState() {
return NEARBY_PLATFORM_CONNECTION_STATE_A2DP_WITH_AVRCP;
}
bool nearby_platform_OnHead() { return true; }
// Returns true if the device can accept another audio connection without
// dropping any of the existing connections.
bool nearby_platform_CanAcceptConnection() { return false; }
// When the device is in focus mode, connection switching is not allowed
bool nearby_platform_InFocusMode() { return false; }
// Returns true if the current connection is auto-recconnected, meaning it is
// not connected by the user. For multi-point connections, returns true if any
// of the existing connections is auto-reconnected.
bool nearby_platform_AutoReconnected() { return false; }
// Sets a bit in the |bitmap| for every connected peer. The bit stays cleared
// for bonded but not connected peers. The order change is acceptable if it is
// unavoidable, e.g. when users factory reset the headset or when the bonded
// device count reaches the upper limit.
// |length| is the |bitmap| length on input in bytes and used space on output.
// For example, if there are 5 bonded devices, then |length| should be set to 1.
void nearby_platform_GetConnectionBitmap(uint8_t* bitmap, size_t* length) {
if (*length > 0) {
bitmap[0] = 0x09;
*length = 1;
}
}
bool nearby_platform_IsSassOn() { return true; }
bool nearby_platform_IsMultipointConfigurable() { return true; }
bool nearby_platform_IsMultipointOn() { return multipoint; }
bool nearby_platform_IsOnHeadDetectionSupported() { return true; }
bool nearby_platform_IsOnHeadDetectionEnabled() { return false; }
nearby_platform_status nearby_platform_SetMultipoint(uint64_t peer_address,
bool enable) {
multipoint = enable;
return kNearbyStatusOK;
}
nearby_platform_status nearby_platform_SetSwitchingPreference(uint8_t flags) {
switching_preference_flags = flags;
return kNearbyStatusOK;
}
// Gets switching preference flags
uint8_t nearby_platform_GetSwitchingPreference() {
return switching_preference_flags;
}
nearby_platform_status nearby_platform_SwitchActiveAudioSource(
uint64_t peer_address, uint8_t flags, uint64_t preferred_audio_source) {
switch_active_peer_address = peer_address;
switch_active_flags = flags;
switch_active_preferred_audio_source = preferred_audio_source;
return kNearbyStatusOK;
}
nearby_platform_status nearby_platform_SwitchBackAudioSource(
uint64_t peer_address, uint8_t flags) {
switch_back_peer_address = peer_address;
switch_back_flags = flags;
return kNearbyStatusOK;
}
nearby_platform_status nearby_platform_NotifySassInitiatedConnection(
uint64_t peer_address, uint8_t flags) {
notify_peer_address = peer_address;
notify_flags = flags;
return kNearbyStatusOK;
}
nearby_platform_status nearby_platform_SetDropConnectionTarget(
uint64_t peer_address, uint8_t flags) {
drop_peer_address = peer_address;
drop_flags = flags;
return kNearbyStatusOK;
}
uint64_t nearby_platform_GetActiveAudioSource() { return active_peer_address; }
void nearby_test_fakes_SetActiveAudioSource(uint64_t peer_address) {
active_peer_address = peer_address;
}
// Initializes Audio module
nearby_platform_status nearby_platform_AudioInit(
const nearby_platform_AudioCallbacks* audio_interface) {
multipoint = false;
switching_preference_flags = 0;
switch_active_peer_address = 0;
switch_active_flags = 0;
switch_active_preferred_audio_source = 0;
switch_back_peer_address = 0;
switch_back_flags = 0;
notify_peer_address = 0;
notify_flags = 0;
drop_peer_address = 0;
drop_flags = 0;
callbacks = audio_interface;
return kNearbyStatusOK;
}
uint64_t nearby_test_fakes_GetSassSwitchActiveSourcePeerAddress() {
return switch_active_peer_address;
}
uint8_t nearby_test_fakes_GetSassSwitchActiveSourceFlags() {
return switch_active_flags;
}
uint64_t nearby_test_fakes_GetSassSwitchActiveSourcePreferredAudioSource() {
return switch_active_preferred_audio_source;
}
uint64_t nearby_test_fakes_GetSassSwitchBackPeerAddress() {
return switch_back_peer_address;
}
uint8_t nearby_test_fakes_GetSassSwitchBackFlags() { return switch_back_flags; }
uint64_t nearby_test_fakes_GetSassNotifyInitiatedConnectionPeerAddress() {
return notify_peer_address;
}
uint8_t nearby_test_fakes_GetSassNotifyInitiatedConnectionFlags() {
return notify_flags;
}
uint64_t nearby_test_fakes_GetSassDropConnectionTargetPeerAddress() {
return drop_peer_address;
}
uint8_t nearby_test_fakes_GetSassDropConnectionTargetFlags() {
return drop_flags;
}
void nearby_test_fakes_SassMultipointSwitch(uint8_t reason,
uint64_t peer_address,
const char* name) {
callbacks->on_multipoint_switch_event(reason, peer_address, name);
}