16e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov/*
26e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov * Copyright (C) 2016 The Android Open Source Project
36e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov *
46e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License");
56e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov * you may not use this file except in compliance with the License.
66e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov * You may obtain a copy of the License at
76e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov *
86e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov *      http://www.apache.org/licenses/LICENSE-2.0
96e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov *
106e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov * Unless required by applicable law or agreed to in writing, software
116e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS,
126e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov * See the License for the specific language governing permissions and
146e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov * limitations under the License.
156e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov */
166e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov
176e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov#ifndef android_hardware_audio_V2_0_Hidl_Utils_H_
186e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov#define android_hardware_audio_V2_0_Hidl_Utils_H_
196e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov
206e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov#include <memory>
216e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov
226e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov#include <android/hardware/audio/common/2.0/types.h>
236e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov#include <system/audio.h>
246e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov
256e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganovusing ::android::hardware::audio::common::V2_0::AudioConfig;
266e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganovusing ::android::hardware::audio::common::V2_0::AudioGain;
276e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganovusing ::android::hardware::audio::common::V2_0::AudioGainConfig;
286e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganovusing ::android::hardware::audio::common::V2_0::AudioOffloadInfo;
296e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganovusing ::android::hardware::audio::common::V2_0::AudioPort;
306e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganovusing ::android::hardware::audio::common::V2_0::AudioPortConfig;
316e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganovusing ::android::hardware::audio::common::V2_0::Uuid;
326e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganovusing ::android::hardware::hidl_vec;
336e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov
346e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganovnamespace android {
356e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov
366e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganovclass HidlUtils {
376e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov  public:
386e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioConfigFromHal(const audio_config_t& halConfig, AudioConfig* config);
396e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioConfigToHal(const AudioConfig& config, audio_config_t* halConfig);
406e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioGainConfigFromHal(
416e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov            const struct audio_gain_config& halConfig, AudioGainConfig* config);
426e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioGainConfigToHal(
436e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov            const AudioGainConfig& config, struct audio_gain_config* halConfig);
446e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioGainFromHal(const struct audio_gain& halGain, AudioGain* gain);
456e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioGainToHal(const AudioGain& gain, struct audio_gain* halGain);
466e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioOffloadInfoFromHal(
476e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov            const audio_offload_info_t& halOffload, AudioOffloadInfo* offload);
486e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioOffloadInfoToHal(
496e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov            const AudioOffloadInfo& offload, audio_offload_info_t* halOffload);
506e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioPortConfigFromHal(
516e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov            const struct audio_port_config& halConfig, AudioPortConfig* config);
526e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioPortConfigToHal(
536e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov            const AudioPortConfig& config, struct audio_port_config* halConfig);
546e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioPortConfigsFromHal(
556e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov            unsigned int numHalConfigs, const struct audio_port_config *halConfigs,
566e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov            hidl_vec<AudioPortConfig> *configs);
576e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static std::unique_ptr<audio_port_config[]> audioPortConfigsToHal(
586e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov            const hidl_vec<AudioPortConfig>& configs);
596e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioPortFromHal(const struct audio_port& halPort, AudioPort* port);
606e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void audioPortToHal(const AudioPort& port, struct audio_port* halPort);
616e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void uuidFromHal(const audio_uuid_t& halUuid, Uuid* uuid);
626e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov    static void uuidToHal(const Uuid& uuid, audio_uuid_t* halUuid);
636e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov};
646e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov
656e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov}  // namespace android
666e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov
676e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov#endif  // android_hardware_audio_V2_0_Hidl_Utils_H_
68