180 lines
6.7 KiB
Java
180 lines
6.7 KiB
Java
/*
|
|
* Copyright (C) 2022 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.
|
|
*/
|
|
|
|
package android.media;
|
|
|
|
import android.annotation.IntDef;
|
|
import android.annotation.NonNull;
|
|
import android.annotation.TestApi;
|
|
import android.os.Parcel;
|
|
import android.os.Parcelable;
|
|
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Defines the audio HAL version.
|
|
*
|
|
* @hide
|
|
*/
|
|
@TestApi
|
|
public final class AudioHalVersionInfo implements Parcelable, Comparable<AudioHalVersionInfo> {
|
|
/**
|
|
* Indicate the audio HAL is implemented with HIDL (HAL interface definition language).
|
|
*
|
|
* @see <a href="https://source.android.com/docs/core/architecture/hidl/">HIDL</a>
|
|
* <p>The value of AUDIO_HAL_TYPE_HIDL should match the value of {@link
|
|
* android.media.AudioHalVersion.Type#HIDL}.
|
|
*/
|
|
public static final int AUDIO_HAL_TYPE_HIDL = 0;
|
|
|
|
/**
|
|
* Indicate the audio HAL is implemented with AIDL (Android Interface Definition Language).
|
|
*
|
|
* @see <a href="https://source.android.com/docs/core/architecture/aidl/">AIDL</a>
|
|
* <p>The value of AUDIO_HAL_TYPE_AIDL should match the value of {@link
|
|
* android.media.AudioHalVersion.Type#AIDL}.
|
|
*/
|
|
public static final int AUDIO_HAL_TYPE_AIDL = 1;
|
|
|
|
/** @hide */
|
|
@IntDef(
|
|
flag = false,
|
|
prefix = "AUDIO_HAL_TYPE_",
|
|
value = {AUDIO_HAL_TYPE_HIDL, AUDIO_HAL_TYPE_AIDL})
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface AudioHalType {}
|
|
|
|
/** AudioHalVersionInfo object of all valid Audio HAL versions. */
|
|
public static final @NonNull AudioHalVersionInfo AIDL_1_0 =
|
|
new AudioHalVersionInfo(AUDIO_HAL_TYPE_AIDL, 1 /* major */, 0 /* minor */);
|
|
|
|
public static final @NonNull AudioHalVersionInfo HIDL_7_1 =
|
|
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 7 /* major */, 1 /* minor */);
|
|
public static final @NonNull AudioHalVersionInfo HIDL_7_0 =
|
|
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 7 /* major */, 0 /* minor */);
|
|
public static final @NonNull AudioHalVersionInfo HIDL_6_0 =
|
|
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 6 /* major */, 0 /* minor */);
|
|
public static final @NonNull AudioHalVersionInfo HIDL_5_0 =
|
|
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 5 /* major */, 0 /* minor */);
|
|
public static final @NonNull AudioHalVersionInfo HIDL_4_0 =
|
|
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 4 /* major */, 0 /* minor */);
|
|
public static final @NonNull AudioHalVersionInfo HIDL_2_0 =
|
|
new AudioHalVersionInfo(AUDIO_HAL_TYPE_HIDL, 2 /* major */, 0 /* minor */);
|
|
|
|
/**
|
|
* List of all valid Audio HAL versions. This list need to be in sync with sAudioHALVersions
|
|
* defined in frameworks/av/media/libaudiohal/FactoryHal.cpp.
|
|
*
|
|
* Note: update {@link android.media.audio.cts.AudioHalVersionInfoTest} CTS accordingly if
|
|
* there is a change to supported versions.
|
|
*/
|
|
public static final @NonNull List<AudioHalVersionInfo> VERSIONS =
|
|
List.of(AIDL_1_0, HIDL_7_1, HIDL_7_0, HIDL_6_0, HIDL_5_0);
|
|
|
|
private static final String TAG = "AudioHalVersionInfo";
|
|
private AudioHalVersion mHalVersion = new AudioHalVersion();
|
|
|
|
public @AudioHalType int getHalType() {
|
|
return mHalVersion.type;
|
|
}
|
|
|
|
public int getMajorVersion() {
|
|
return mHalVersion.major;
|
|
}
|
|
|
|
public int getMinorVersion() {
|
|
return mHalVersion.minor;
|
|
}
|
|
|
|
/** String representative of AudioHalVersion.Type */
|
|
private static @NonNull String typeToString(@AudioHalType int type) {
|
|
if (type == AudioHalVersion.Type.HIDL) {
|
|
return "HIDL";
|
|
} else if (type == AudioHalVersion.Type.AIDL) {
|
|
return "AIDL";
|
|
} else {
|
|
return "INVALID";
|
|
}
|
|
}
|
|
|
|
/** String representative of type, major and minor */
|
|
private static @NonNull String toString(@AudioHalType int type, int major, int minor) {
|
|
return typeToString(type) + ":" + Integer.toString(major) + "." + Integer.toString(minor);
|
|
}
|
|
|
|
private AudioHalVersionInfo(@AudioHalType int type, int major, int minor) {
|
|
mHalVersion.type = type;
|
|
mHalVersion.major = major;
|
|
mHalVersion.minor = minor;
|
|
}
|
|
|
|
private AudioHalVersionInfo(Parcel in) {
|
|
mHalVersion = in.readTypedObject(AudioHalVersion.CREATOR);
|
|
}
|
|
|
|
/** String representative of this (AudioHalVersionInfo) object */
|
|
@Override
|
|
public String toString() {
|
|
return toString(mHalVersion.type, mHalVersion.major, mHalVersion.minor);
|
|
}
|
|
|
|
/**
|
|
* Compare two HAL versions by comparing their index in VERSIONS.
|
|
*
|
|
* <p>Normally all AudioHalVersionInfo object to compare should exist in the VERSIONS list. If
|
|
* both candidates exist in the VERSIONS list, smaller index means newer. Any candidate not
|
|
* exist in the VERSIONS list will be considered to be oldest version.
|
|
*
|
|
* @return 0 if the HAL version is the same as the other HAL version. Positive if the HAL
|
|
* version is newer than the other HAL version. Negative if the HAL version is older than
|
|
* the other version.
|
|
*/
|
|
@Override
|
|
public int compareTo(@NonNull AudioHalVersionInfo other) {
|
|
int indexOther = VERSIONS.indexOf(other);
|
|
int indexThis = VERSIONS.indexOf(this);
|
|
if (indexThis < 0 || indexOther < 0) {
|
|
return indexThis - indexOther;
|
|
}
|
|
return indexOther - indexThis;
|
|
}
|
|
|
|
@Override
|
|
public int describeContents() {
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(@NonNull android.os.Parcel out, int flag) {
|
|
out.writeTypedObject(mHalVersion, flag);
|
|
}
|
|
|
|
public static final @NonNull Parcelable.Creator<AudioHalVersionInfo> CREATOR =
|
|
new Parcelable.Creator<AudioHalVersionInfo>() {
|
|
@Override
|
|
public AudioHalVersionInfo createFromParcel(@NonNull Parcel in) {
|
|
return new AudioHalVersionInfo(in);
|
|
}
|
|
|
|
@Override
|
|
public AudioHalVersionInfo[] newArray(int size) {
|
|
return new AudioHalVersionInfo[size];
|
|
}
|
|
};
|
|
}
|