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

Commit 75b58f4d authored by Devin Moore's avatar Devin Moore Committed by Automerger Merge Worker
Browse files

Merge "Use new AIDL IR interface for ConsumerIr service" am: a188a102 am:...

Merge "Use new AIDL IR interface for ConsumerIr service" am: a188a102 am: 26af7dd3 am: 8522a80d

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1887097

Change-Id: I9c43e89df4942274054d28d0ac9d31ceaffe09cc
parents 26118ca2 8522a80d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -154,6 +154,7 @@ java_library_static {
        "android.hardware.oemlock-V1.0-java",
        "android.hardware.configstore-V1.1-java",
        "android.hardware.contexthub-V1.0-java",
        "android.hardware.ir-V1-java",
        "android.hardware.rebootescrow-V1-java",
        "android.hardware.soundtrigger-V2.3-java",
        "android.hardware.power.stats-V1-java",
+51 −9
Original line number Diff line number Diff line
@@ -19,17 +19,19 @@ package com.android.server;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.IConsumerIrService;
import android.hardware.ir.ConsumerIrFreqRange;
import android.hardware.ir.IConsumerIr;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Slog;

import java.lang.RuntimeException;

public class ConsumerIrService extends IConsumerIrService.Stub {
    private static final String TAG = "ConsumerIrService";

    private static final int MAX_XMIT_TIME = 2000000; /* in microseconds */

    private static native boolean halOpen();
    private static native boolean getHidlHalService();
    private static native int halTransmit(int carrierFrequency, int[] pattern);
    private static native int[] halGetCarrierFrequencies();

@@ -37,6 +39,7 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
    private final PowerManager.WakeLock mWakeLock;
    private final boolean mHasNativeHal;
    private final Object mHalLock = new Object();
    private IConsumerIr mAidlService = null;

    ConsumerIrService(Context context) {
        mContext = context;
@@ -45,7 +48,8 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
        mWakeLock.setReferenceCounted(true);

        mHasNativeHal = halOpen();
        mHasNativeHal = getHalService();

        if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CONSUMER_IR)) {
            if (!mHasNativeHal) {
                throw new RuntimeException("FEATURE_CONSUMER_IR present, but no IR HAL loaded!");
@@ -60,6 +64,19 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
        return mHasNativeHal;
    }

    private boolean getHalService() {
        // Attempt to get the AIDL HAL service first
        final String fqName = IConsumerIr.DESCRIPTOR + "/default";
        mAidlService = IConsumerIr.Stub.asInterface(
                        ServiceManager.waitForDeclaredService(fqName));
        if (mAidlService != null) {
            return true;
        }

        // Fall back to the HIDL HAL service
        return getHidlHalService();
    }

    private void throwIfNoIrEmitter() {
        if (!mHasNativeHal) {
            throw new UnsupportedOperationException("IR emitter not available");
@@ -91,6 +108,13 @@ public class ConsumerIrService extends IConsumerIrService.Stub {

        // Right now there is no mechanism to ensure fair queing of IR requests
        synchronized (mHalLock) {
            if (mAidlService != null) {
                try {
                    mAidlService.transmit(carrierFrequency, pattern);
                } catch (RemoteException ignore) {
                    Slog.e(TAG, "Error transmitting frequency: " + carrierFrequency);
                }
            } else {
                int err = halTransmit(carrierFrequency, pattern);

                if (err < 0) {
@@ -98,6 +122,7 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
                }
            }
        }
    }

    @Override
    public int[] getCarrierFrequencies() {
@@ -109,7 +134,24 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
        throwIfNoIrEmitter();

        synchronized(mHalLock) {
            if (mAidlService != null) {
                try {
                    ConsumerIrFreqRange[] output = mAidlService.getCarrierFreqs();
                    if (output.length <= 0) {
                        Slog.e(TAG, "Error getting carrier frequencies.");
                    }
                    int[] result = new int[output.length * 2];
                    for (int i = 0; i < output.length; i++) {
                        result[i * 2] = output[i].minHz;
                        result[i * 2 + 1] = output[i].maxHz;
                    }
                    return result;
                } catch (RemoteException ignore) {
                    return null;
                }
            } else {
                return halGetCarrierFrequencies();
            }
        }
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ namespace android {

static sp<IConsumerIr> mHal;

static jboolean halOpen(JNIEnv* /* env */, jobject /* obj */) {
static jboolean getHidlHalService(JNIEnv * /* env */, jobject /* obj */) {
    // TODO(b/31632518)
    mHal = IConsumerIr::getService();
    return mHal != nullptr;
@@ -84,7 +84,7 @@ static jintArray halGetCarrierFrequencies(JNIEnv *env, jobject /* obj */) {
}

static const JNINativeMethod method_table[] = {
    { "halOpen", "()Z", (void *)halOpen },
        {"getHidlHalService", "()Z", (void *)getHidlHalService},
        {"halTransmit", "(I[I)I", (void *)halTransmit},
        {"halGetCarrierFrequencies", "()[I", (void *)halGetCarrierFrequencies},
};