Merge "Use new AIDL IR interface for ConsumerIr service" am: a188a10262 am: 26af7dd375

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

Change-Id: I12a22fa5adc1bf24870d4bc3c69f414bff7f2f51
This commit is contained in:
Devin Moore
2021-12-22 22:08:56 +00:00
committed by Automerger Merge Worker
3 changed files with 55 additions and 12 deletions

View File

@@ -154,6 +154,7 @@ java_library_static {
"android.hardware.oemlock-V1.0-java", "android.hardware.oemlock-V1.0-java",
"android.hardware.configstore-V1.1-java", "android.hardware.configstore-V1.1-java",
"android.hardware.contexthub-V1.0-java", "android.hardware.contexthub-V1.0-java",
"android.hardware.ir-V1-java",
"android.hardware.rebootescrow-V1-java", "android.hardware.rebootescrow-V1-java",
"android.hardware.soundtrigger-V2.3-java", "android.hardware.soundtrigger-V2.3-java",
"android.hardware.power.stats-V1-java", "android.hardware.power.stats-V1-java",

View File

@@ -19,17 +19,19 @@ package com.android.server;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.hardware.IConsumerIrService; import android.hardware.IConsumerIrService;
import android.hardware.ir.ConsumerIrFreqRange;
import android.hardware.ir.IConsumerIr;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Slog; import android.util.Slog;
import java.lang.RuntimeException;
public class ConsumerIrService extends IConsumerIrService.Stub { public class ConsumerIrService extends IConsumerIrService.Stub {
private static final String TAG = "ConsumerIrService"; private static final String TAG = "ConsumerIrService";
private static final int MAX_XMIT_TIME = 2000000; /* in microseconds */ 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 halTransmit(int carrierFrequency, int[] pattern);
private static native int[] halGetCarrierFrequencies(); private static native int[] halGetCarrierFrequencies();
@@ -37,6 +39,7 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
private final PowerManager.WakeLock mWakeLock; private final PowerManager.WakeLock mWakeLock;
private final boolean mHasNativeHal; private final boolean mHasNativeHal;
private final Object mHalLock = new Object(); private final Object mHalLock = new Object();
private IConsumerIr mAidlService = null;
ConsumerIrService(Context context) { ConsumerIrService(Context context) {
mContext = context; mContext = context;
@@ -45,7 +48,8 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
mWakeLock.setReferenceCounted(true); mWakeLock.setReferenceCounted(true);
mHasNativeHal = halOpen(); mHasNativeHal = getHalService();
if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CONSUMER_IR)) { if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CONSUMER_IR)) {
if (!mHasNativeHal) { if (!mHasNativeHal) {
throw new RuntimeException("FEATURE_CONSUMER_IR present, but no IR HAL loaded!"); throw new RuntimeException("FEATURE_CONSUMER_IR present, but no IR HAL loaded!");
@@ -60,6 +64,19 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
return mHasNativeHal; 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() { private void throwIfNoIrEmitter() {
if (!mHasNativeHal) { if (!mHasNativeHal) {
throw new UnsupportedOperationException("IR emitter not available"); 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 // Right now there is no mechanism to ensure fair queing of IR requests
synchronized (mHalLock) { 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); int err = halTransmit(carrierFrequency, pattern);
if (err < 0) { if (err < 0) {
@@ -98,6 +122,7 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
} }
} }
} }
}
@Override @Override
public int[] getCarrierFrequencies() { public int[] getCarrierFrequencies() {
@@ -109,7 +134,24 @@ public class ConsumerIrService extends IConsumerIrService.Stub {
throwIfNoIrEmitter(); throwIfNoIrEmitter();
synchronized(mHalLock) { 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(); return halGetCarrierFrequencies();
} }
} }
} }
}

View File

@@ -34,7 +34,7 @@ namespace android {
static sp<IConsumerIr> mHal; static sp<IConsumerIr> mHal;
static jboolean halOpen(JNIEnv* /* env */, jobject /* obj */) { static jboolean getHidlHalService(JNIEnv * /* env */, jobject /* obj */) {
// TODO(b/31632518) // TODO(b/31632518)
mHal = IConsumerIr::getService(); mHal = IConsumerIr::getService();
return mHal != nullptr; return mHal != nullptr;
@@ -84,7 +84,7 @@ static jintArray halGetCarrierFrequencies(JNIEnv *env, jobject /* obj */) {
} }
static const JNINativeMethod method_table[] = { static const JNINativeMethod method_table[] = {
{ "halOpen", "()Z", (void *)halOpen }, {"getHidlHalService", "()Z", (void *)getHidlHalService},
{"halTransmit", "(I[I)I", (void *)halTransmit}, {"halTransmit", "(I[I)I", (void *)halTransmit},
{"halGetCarrierFrequencies", "()[I", (void *)halGetCarrierFrequencies}, {"halGetCarrierFrequencies", "()[I", (void *)halGetCarrierFrequencies},
}; };