Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1319f5a4 authored by jiabin's avatar jiabin
Browse files

Use vibrator information to initialize HapticGenerator.

Use vibrator's resonant frequency and Q factor to initialize
HapticGenerator when they are available. Otherwise, use default value.

Bug: 182612056
Test: atest HapticGeneratorTest, manual
Change-Id: Ib861e7fbb0ede3a33c0a93fbca8d80c022461d9a
parent dfca1ce8
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -348,6 +348,7 @@ aidl_interface {
        "aidl/android/media/AudioUniqueIdUse.aidl",
        "aidl/android/media/AudioUsage.aidl",
        "aidl/android/media/AudioUuid.aidl",
        "aidl/android/media/AudioVibratorInfo.aidl",
        "aidl/android/media/EffectDescriptor.aidl",
        "aidl/android/media/ExtraAudioDescriptor.aidl",
    ],
+9 −0
Original line number Diff line number Diff line
@@ -2258,6 +2258,15 @@ status_t AudioSystem::registerSoundTriggerCaptureStateListener(
    return NO_ERROR;
}

status_t AudioSystem::setVibratorInfos(
        const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
    const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
    if (af == nullptr) {
        return PERMISSION_DENIED;
    }
    return af->setVibratorInfos(vibratorInfos);
}

// ---------------------------------------------------------------------------

int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback(
+10 −0
Original line number Diff line number Diff line
@@ -733,6 +733,11 @@ status_t AudioFlingerClientAdapter::setAudioHalPids(const std::vector<pid_t>& pi
    return statusTFromBinderStatus(mDelegate->setAudioHalPids(pidsAidl));
}

status_t AudioFlingerClientAdapter::setVibratorInfos(
        const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
    return statusTFromBinderStatus(mDelegate->setVibratorInfos(vibratorInfos));
}


////////////////////////////////////////////////////////////////////////////////////////////////////
// AudioFlingerServerAdapter
@@ -1174,4 +1179,9 @@ Status AudioFlingerServerAdapter::setAudioHalPids(const std::vector<int32_t>& pi
    return Status::ok();
}

Status AudioFlingerServerAdapter::setVibratorInfos(
        const std::vector<media::AudioVibratorInfo>& vibratorInfos) {
    return Status::fromStatusT(mDelegate->setVibratorInfos(vibratorInfos));
}

} // namespace android
+27 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 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;

/**
 * {@hide}
 * A class for vibrator information. The information will be used in HapticGenerator effect.
 */
parcelable AudioVibratorInfo {
    int id;
    float resonantFrequency;
    float qFactor;
}
+5 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.media.AudioPortConfig;
import android.media.AudioStreamType;
import android.media.AudioUniqueIdUse;
import android.media.AudioUuid;
import android.media.AudioVibratorInfo;
import android.media.CreateEffectRequest;
import android.media.CreateEffectResponse;
import android.media.CreateRecordRequest;
@@ -202,4 +203,8 @@ interface IAudioFlingerService {
    MicrophoneInfoData[] getMicrophones();

    void setAudioHalPids(in int[] /* pid_t[] */ pids);

    // Set vibrators' information.
    // The value will be used to initialize HapticGenerator.
    void setVibratorInfos(in AudioVibratorInfo[] vibratorInfos);
}
Loading