From b213495933d28cd50d9dc76e4fa920bb8b03836d Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Sun, 15 Apr 2018 20:34:25 +0200 Subject: [PATCH] Make QtiAudio app, based on QTI HAL to support in-call audio --- Qualcomm/QtiAudio/Android.mk | 12 + Qualcomm/QtiAudio/AndroidManifest.xml | 15 + Qualcomm/QtiAudio/res/values/strings.xml | 4 + .../src/me/phh/qti/audio/Service.java | 65 +++ .../src/me/phh/qti/audio/Starter.java | 13 + .../hardware/radio/am/V1_0/IQcRilAudio.java | 490 +++++++++++++++++ .../radio/am/V1_0/IQcRilAudioCallback.java | 504 ++++++++++++++++++ overlay.mk | 3 +- 8 files changed, 1105 insertions(+), 1 deletion(-) create mode 100644 Qualcomm/QtiAudio/Android.mk create mode 100644 Qualcomm/QtiAudio/AndroidManifest.xml create mode 100644 Qualcomm/QtiAudio/res/values/strings.xml create mode 100644 Qualcomm/QtiAudio/src/me/phh/qti/audio/Service.java create mode 100644 Qualcomm/QtiAudio/src/me/phh/qti/audio/Starter.java create mode 100644 Qualcomm/QtiAudio/src/vendor/qti/hardware/radio/am/V1_0/IQcRilAudio.java create mode 100644 Qualcomm/QtiAudio/src/vendor/qti/hardware/radio/am/V1_0/IQcRilAudioCallback.java diff --git a/Qualcomm/QtiAudio/Android.mk b/Qualcomm/QtiAudio/Android.mk new file mode 100644 index 0000000..4510faf --- /dev/null +++ b/Qualcomm/QtiAudio/Android.mk @@ -0,0 +1,12 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +LOCAL_CERTIFICATE := platform +LOCAL_PRIVILEGED_MODULE := true +LOCAL_PACKAGE_NAME := QtiAudio +LOCAL_PROGUARD_ENABLED := disabled + +include $(BUILD_PACKAGE) diff --git a/Qualcomm/QtiAudio/AndroidManifest.xml b/Qualcomm/QtiAudio/AndroidManifest.xml new file mode 100644 index 0000000..ca4d429 --- /dev/null +++ b/Qualcomm/QtiAudio/AndroidManifest.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/Qualcomm/QtiAudio/res/values/strings.xml b/Qualcomm/QtiAudio/res/values/strings.xml new file mode 100644 index 0000000..1ced373 --- /dev/null +++ b/Qualcomm/QtiAudio/res/values/strings.xml @@ -0,0 +1,4 @@ + + + Qualcomm audio + diff --git a/Qualcomm/QtiAudio/src/me/phh/qti/audio/Service.java b/Qualcomm/QtiAudio/src/me/phh/qti/audio/Service.java new file mode 100644 index 0000000..97ecf60 --- /dev/null +++ b/Qualcomm/QtiAudio/src/me/phh/qti/audio/Service.java @@ -0,0 +1,65 @@ +package me.phh.qti.audio; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; +import android.media.AudioSystem; +import android.os.IBinder; + +import vendor.qti.hardware.radio.am.V1_0.IQcRilAudioCallback; +import vendor.qti.hardware.radio.am.V1_0.IQcRilAudio; + +public class Service extends android.app.Service { + @Override public void onCreate() { + new java.lang.Thread() { + @Override + public void run() { + android.util.Log.d("PHH", "Hello"); + while(service == null) { + try { + Thread.sleep(1000); + service = IQcRilAudio.getService("slot1"); + service.setCallback(cb); + + service = IQcRilAudio.getService("slot2"); + service.setCallback(cb); + break; + } catch(Exception e) { + android.util.Log.d("PHH", "Failed setting callback", e); + } + } + } + }.start(); + } + + IQcRilAudio service; + IQcRilAudioCallback cb = new IQcRilAudioCallback.Stub() { + @Override + public String getParameters(String parameter) { + android.util.Log.d("PHH", "Got getParameters " + parameter); + try { + return AudioSystem.getParameters(parameter); + } catch(Exception e) { + android.util.Log.d("PHH", "Failed getting parameters"); + } + return ""; + } + + @Override + public int setParameters(String parameters) { + android.util.Log.d("PHH", "Got setParameters " + parameters); + try { + AudioSystem.setParameters(parameters); + } catch(Exception e) { + android.util.Log.d("PHH", "Failed setting parameters"); + } + return 0; + } + }; + + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/Qualcomm/QtiAudio/src/me/phh/qti/audio/Starter.java b/Qualcomm/QtiAudio/src/me/phh/qti/audio/Starter.java new file mode 100644 index 0000000..2700ec6 --- /dev/null +++ b/Qualcomm/QtiAudio/src/me/phh/qti/audio/Starter.java @@ -0,0 +1,13 @@ +package me.phh.qti.audio; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class Starter extends BroadcastReceiver { + + @Override + public void onReceive(Context ctxt, Intent intent) { + ctxt.startService(new Intent(ctxt, Service.class)); + } +} diff --git a/Qualcomm/QtiAudio/src/vendor/qti/hardware/radio/am/V1_0/IQcRilAudio.java b/Qualcomm/QtiAudio/src/vendor/qti/hardware/radio/am/V1_0/IQcRilAudio.java new file mode 100644 index 0000000..7e08568 --- /dev/null +++ b/Qualcomm/QtiAudio/src/vendor/qti/hardware/radio/am/V1_0/IQcRilAudio.java @@ -0,0 +1,490 @@ +package vendor.qti.hardware.radio.am.V1_0; + +public interface IQcRilAudio extends android.hidl.base.V1_0.IBase { + public static final String kInterfaceName = "vendor.qti.hardware.radio.am@1.0::IQcRilAudio"; + + /* package private */ static IQcRilAudio asInterface(android.os.IHwBinder binder) { + if (binder == null) { + return null; + } + + android.os.IHwInterface iface = + binder.queryLocalInterface(kInterfaceName); + + if ((iface != null) && (iface instanceof IQcRilAudio)) { + return (IQcRilAudio)iface; + } + + IQcRilAudio proxy = new IQcRilAudio.Proxy(binder); + + try { + for (String descriptor : proxy.interfaceChain()) { + if (descriptor.equals(kInterfaceName)) { + return proxy; + } + } + } catch (android.os.RemoteException e) { + } + + return null; + } + + public static IQcRilAudio castFrom(android.os.IHwInterface iface) { + return (iface == null) ? null : IQcRilAudio.asInterface(iface.asBinder()); + } + + @Override + public android.os.IHwBinder asBinder(); + + public static IQcRilAudio getService(String serviceName) throws android.os.RemoteException { + return IQcRilAudio.asInterface(android.os.HwBinder.getService("vendor.qti.hardware.radio.am@1.0::IQcRilAudio",serviceName)); + } + + public static IQcRilAudio getService() throws android.os.RemoteException { + return IQcRilAudio.asInterface(android.os.HwBinder.getService("vendor.qti.hardware.radio.am@1.0::IQcRilAudio","default")); + } + + void setCallback(IQcRilAudioCallback iQcRilAudioCallback) + throws android.os.RemoteException; + void setError(int error) + throws android.os.RemoteException; + java.util.ArrayList interfaceChain() + throws android.os.RemoteException; + String interfaceDescriptor() + throws android.os.RemoteException; + java.util.ArrayList getHashChain() + throws android.os.RemoteException; + void setHALInstrumentation() + throws android.os.RemoteException; + boolean linkToDeath(android.os.IHwBinder.DeathRecipient recipient, long cookie) + throws android.os.RemoteException; + void ping() + throws android.os.RemoteException; + android.hidl.base.V1_0.DebugInfo getDebugInfo() + throws android.os.RemoteException; + void notifySyspropsChanged() + throws android.os.RemoteException; + boolean unlinkToDeath(android.os.IHwBinder.DeathRecipient recipient) + throws android.os.RemoteException; + + public static final class Proxy implements IQcRilAudio { + private android.os.IHwBinder mRemote; + + public Proxy(android.os.IHwBinder remote) { + mRemote = java.util.Objects.requireNonNull(remote); + } + + @Override + public android.os.IHwBinder asBinder() { + return mRemote; + } + + @Override + public String toString() { + try { + return this.interfaceDescriptor() + "@Proxy"; + } catch (android.os.RemoteException ex) { + /* ignored; handled below. */ + } + return "[class or subclass of " + IQcRilAudio.kInterfaceName + "]@Proxy"; + } + + // Methods from ::vendor::qti::hardware::radio::am::V1_0::IQcRilAudio follow. + @Override + public void setCallback(IQcRilAudioCallback iQcRilAudioCallback) + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(IQcRilAudio.kInterfaceName); + _hidl_request.writeStrongBinder(iQcRilAudioCallback == null ? null : iQcRilAudioCallback.asBinder()); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(1 /* setCallback */, _hidl_request, _hidl_reply, android.os.IHwBinder.FLAG_ONEWAY); + _hidl_request.releaseTemporaryStorage(); + } finally { + _hidl_reply.release(); + } + } + + @Override + public void setError(int error) + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(IQcRilAudio.kInterfaceName); + _hidl_request.writeInt32(error); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(2 /* setError */, _hidl_request, _hidl_reply, android.os.IHwBinder.FLAG_ONEWAY); + _hidl_request.releaseTemporaryStorage(); + } finally { + _hidl_reply.release(); + } + } + + // Methods from ::android::hidl::base::V1_0::IBase follow. + @Override + public java.util.ArrayList interfaceChain() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(256067662 /* interfaceChain */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + + java.util.ArrayList _hidl_out_descriptors = _hidl_reply.readStringVector(); + return _hidl_out_descriptors; + } finally { + _hidl_reply.release(); + } + } + + @Override + public String interfaceDescriptor() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(256136003 /* interfaceDescriptor */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + + String _hidl_out_descriptor = _hidl_reply.readString(); + return _hidl_out_descriptor; + } finally { + _hidl_reply.release(); + } + } + + @Override + public java.util.ArrayList getHashChain() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(256398152 /* getHashChain */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + + java.util.ArrayList _hidl_out_hashchain = new java.util.ArrayList(); + { + android.os.HwBlob _hidl_blob = _hidl_reply.readBuffer(16 /* size */); + { + int _hidl_vec_size = _hidl_blob.getInt32(0 /* offset */ + 8 /* offsetof(hidl_vec, mSize) */); + android.os.HwBlob childBlob = _hidl_reply.readEmbeddedBuffer( + _hidl_vec_size * 32,_hidl_blob.handle(), + 0 /* offset */ + 0 /* offsetof(hidl_vec, mBuffer) */,true /* nullable */); + + _hidl_out_hashchain.clear(); + for (int _hidl_index_0 = 0; _hidl_index_0 < _hidl_vec_size; ++_hidl_index_0) { + final byte[/* 32 */] _hidl_vec_element = new byte[32]; + { + long _hidl_array_offset_1 = _hidl_index_0 * 32; + for (int _hidl_index_1_0 = 0; _hidl_index_1_0 < 32; ++_hidl_index_1_0) { + _hidl_vec_element[_hidl_index_1_0] = childBlob.getInt8(_hidl_array_offset_1); + _hidl_array_offset_1 += 1; + } + } + _hidl_out_hashchain.add(_hidl_vec_element); + } + } + } + return _hidl_out_hashchain; + } finally { + _hidl_reply.release(); + } + } + + @Override + public void setHALInstrumentation() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(256462420 /* setHALInstrumentation */, _hidl_request, _hidl_reply, android.os.IHwBinder.FLAG_ONEWAY); + _hidl_request.releaseTemporaryStorage(); + } finally { + _hidl_reply.release(); + } + } + + @Override + public boolean linkToDeath(android.os.IHwBinder.DeathRecipient recipient, long cookie) + throws android.os.RemoteException { + return mRemote.linkToDeath(recipient, cookie); + } + @Override + public void ping() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(256921159 /* ping */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + } finally { + _hidl_reply.release(); + } + } + + @Override + public android.hidl.base.V1_0.DebugInfo getDebugInfo() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(257049926 /* getDebugInfo */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + + android.hidl.base.V1_0.DebugInfo _hidl_out_info = new android.hidl.base.V1_0.DebugInfo(); + _hidl_out_info.readFromParcel(_hidl_reply); + return _hidl_out_info; + } finally { + _hidl_reply.release(); + } + } + + @Override + public void notifySyspropsChanged() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(257120595 /* notifySyspropsChanged */, _hidl_request, _hidl_reply, android.os.IHwBinder.FLAG_ONEWAY); + _hidl_request.releaseTemporaryStorage(); + } finally { + _hidl_reply.release(); + } + } + + @Override + public boolean unlinkToDeath(android.os.IHwBinder.DeathRecipient recipient) + throws android.os.RemoteException { + return mRemote.unlinkToDeath(recipient); + } + } + + public static abstract class Stub extends android.os.HwBinder implements IQcRilAudio { + @Override + public android.os.IHwBinder asBinder() { + return this; + } + + @Override + public final java.util.ArrayList interfaceChain() { + return new java.util.ArrayList(java.util.Arrays.asList( + IQcRilAudio.kInterfaceName, + android.hidl.base.V1_0.IBase.kInterfaceName)); + } + + @Override + public final String interfaceDescriptor() { + return IQcRilAudio.kInterfaceName; + + } + + @Override + public final java.util.ArrayList getHashChain() { + return new java.util.ArrayList(java.util.Arrays.asList( + new byte[/* 32 */]{35,-44,101,61,83,-91,-11,20,118,-65,-39,105,-3,86,89,122,53,28,5,43,84,86,-31,121,46,5,33,-49,104,103,89,13} /* 23d4653d53a5f51476bfd969fd56597a351c052b5456e1792e0521cf6867590d */, + new byte[/* 32 */]{-67,-38,-74,24,77,122,52,109,-90,-96,125,-64,-126,-116,-15,-102,105,111,76,-86,54,17,-59,31,46,20,86,90,20,-76,15,-39} /* bddab6184d7a346da6a07dc0828cf19a696f4caa3611c51f2e14565a14b40fd9 */)); + + } + + @Override + public final void setHALInstrumentation() { + + } + + @Override + public final boolean linkToDeath(android.os.IHwBinder.DeathRecipient recipient, long cookie) { + return true; + } + + @Override + public final void ping() { + return; + + } + + @Override + public final android.hidl.base.V1_0.DebugInfo getDebugInfo() { + android.hidl.base.V1_0.DebugInfo info = new android.hidl.base.V1_0.DebugInfo(); + info.pid = -1; + info.ptr = 0; + info.arch = android.hidl.base.V1_0.DebugInfo.Architecture.UNKNOWN;return info; + } + + @Override + public final void notifySyspropsChanged() { + android.os.SystemProperties.reportSyspropChanged(); + } + + @Override + public final boolean unlinkToDeath(android.os.IHwBinder.DeathRecipient recipient) { + return true; + + } + + @Override + public android.os.IHwInterface queryLocalInterface(String descriptor) { + if (kInterfaceName.equals(descriptor)) { + return this; + } + return null; + } + + public void registerAsService(String serviceName) throws android.os.RemoteException { + registerService(serviceName); + } + + @Override + public String toString() { + return this.interfaceDescriptor() + "@Stub"; + } + + @Override + public void onTransact(int _hidl_code, android.os.HwParcel _hidl_request, final android.os.HwParcel _hidl_reply, int _hidl_flags) + throws android.os.RemoteException { + switch (_hidl_code) { + case 1 /* setCallback */: + { + _hidl_request.enforceInterface(IQcRilAudio.kInterfaceName); + + IQcRilAudioCallback iQcRilAudioCallback = IQcRilAudioCallback.asInterface(_hidl_request.readStrongBinder()); + setCallback(iQcRilAudioCallback); + break; + } + + case 2 /* setError */: + { + _hidl_request.enforceInterface(IQcRilAudio.kInterfaceName); + + int error = _hidl_request.readInt32(); + setError(error); + break; + } + + case 256067662 /* interfaceChain */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + java.util.ArrayList _hidl_out_descriptors = interfaceChain(); + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + _hidl_reply.writeStringVector(_hidl_out_descriptors); + _hidl_reply.send(); + break; + } + + case 256131655 /* debug */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + _hidl_reply.send(); + break; + } + + case 256136003 /* interfaceDescriptor */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + String _hidl_out_descriptor = interfaceDescriptor(); + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + _hidl_reply.writeString(_hidl_out_descriptor); + _hidl_reply.send(); + break; + } + + case 256398152 /* getHashChain */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + java.util.ArrayList _hidl_out_hashchain = getHashChain(); + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + { + android.os.HwBlob _hidl_blob = new android.os.HwBlob(16 /* size */); + { + int _hidl_vec_size = _hidl_out_hashchain.size(); + _hidl_blob.putInt32(0 /* offset */ + 8 /* offsetof(hidl_vec, mSize) */, _hidl_vec_size); + _hidl_blob.putBool(0 /* offset */ + 12 /* offsetof(hidl_vec, mOwnsBuffer) */, false); + android.os.HwBlob childBlob = new android.os.HwBlob((int)(_hidl_vec_size * 32)); + for (int _hidl_index_0 = 0; _hidl_index_0 < _hidl_vec_size; ++_hidl_index_0) { + { + long _hidl_array_offset_1 = _hidl_index_0 * 32; + for (int _hidl_index_1_0 = 0; _hidl_index_1_0 < 32; ++_hidl_index_1_0) { + childBlob.putInt8(_hidl_array_offset_1, _hidl_out_hashchain.get(_hidl_index_0)[_hidl_index_1_0]); + _hidl_array_offset_1 += 1; + } + } + } + _hidl_blob.putBlob(0 /* offset */ + 0 /* offsetof(hidl_vec, mBuffer) */, childBlob); + } + _hidl_reply.writeBuffer(_hidl_blob); + } + _hidl_reply.send(); + break; + } + + case 256462420 /* setHALInstrumentation */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + setHALInstrumentation(); + break; + } + + case 256660548 /* linkToDeath */: + { + break; + } + + case 256921159 /* ping */: + { + break; + } + + case 257049926 /* getDebugInfo */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.hidl.base.V1_0.DebugInfo _hidl_out_info = getDebugInfo(); + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + _hidl_out_info.writeToParcel(_hidl_reply); + _hidl_reply.send(); + break; + } + + case 257120595 /* notifySyspropsChanged */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + notifySyspropsChanged(); + break; + } + + case 257250372 /* unlinkToDeath */: + { + break; + } + + } + } + } +} diff --git a/Qualcomm/QtiAudio/src/vendor/qti/hardware/radio/am/V1_0/IQcRilAudioCallback.java b/Qualcomm/QtiAudio/src/vendor/qti/hardware/radio/am/V1_0/IQcRilAudioCallback.java new file mode 100644 index 0000000..6be55a3 --- /dev/null +++ b/Qualcomm/QtiAudio/src/vendor/qti/hardware/radio/am/V1_0/IQcRilAudioCallback.java @@ -0,0 +1,504 @@ +package vendor.qti.hardware.radio.am.V1_0; + +public interface IQcRilAudioCallback extends android.hidl.base.V1_0.IBase { + public static final String kInterfaceName = "vendor.qti.hardware.radio.am@1.0::IQcRilAudioCallback"; + + /* package private */ static IQcRilAudioCallback asInterface(android.os.IHwBinder binder) { + if (binder == null) { + return null; + } + + android.os.IHwInterface iface = + binder.queryLocalInterface(kInterfaceName); + + if ((iface != null) && (iface instanceof IQcRilAudioCallback)) { + return (IQcRilAudioCallback)iface; + } + + IQcRilAudioCallback proxy = new IQcRilAudioCallback.Proxy(binder); + + try { + for (String descriptor : proxy.interfaceChain()) { + if (descriptor.equals(kInterfaceName)) { + return proxy; + } + } + } catch (android.os.RemoteException e) { + } + + return null; + } + + public static IQcRilAudioCallback castFrom(android.os.IHwInterface iface) { + return (iface == null) ? null : IQcRilAudioCallback.asInterface(iface.asBinder()); + } + + @Override + public android.os.IHwBinder asBinder(); + + public static IQcRilAudioCallback getService(String serviceName) throws android.os.RemoteException { + return IQcRilAudioCallback.asInterface(android.os.HwBinder.getService("vendor.qti.hardware.radio.am@1.0::IQcRilAudioCallback",serviceName)); + } + + public static IQcRilAudioCallback getService() throws android.os.RemoteException { + return IQcRilAudioCallback.asInterface(android.os.HwBinder.getService("vendor.qti.hardware.radio.am@1.0::IQcRilAudioCallback","default")); + } + + String getParameters(String str) + throws android.os.RemoteException; + int setParameters(String str) + throws android.os.RemoteException; + java.util.ArrayList interfaceChain() + throws android.os.RemoteException; + String interfaceDescriptor() + throws android.os.RemoteException; + java.util.ArrayList getHashChain() + throws android.os.RemoteException; + void setHALInstrumentation() + throws android.os.RemoteException; + boolean linkToDeath(android.os.IHwBinder.DeathRecipient recipient, long cookie) + throws android.os.RemoteException; + void ping() + throws android.os.RemoteException; + android.hidl.base.V1_0.DebugInfo getDebugInfo() + throws android.os.RemoteException; + void notifySyspropsChanged() + throws android.os.RemoteException; + boolean unlinkToDeath(android.os.IHwBinder.DeathRecipient recipient) + throws android.os.RemoteException; + + public static final class Proxy implements IQcRilAudioCallback { + private android.os.IHwBinder mRemote; + + public Proxy(android.os.IHwBinder remote) { + mRemote = java.util.Objects.requireNonNull(remote); + } + + @Override + public android.os.IHwBinder asBinder() { + return mRemote; + } + + @Override + public String toString() { + try { + return this.interfaceDescriptor() + "@Proxy"; + } catch (android.os.RemoteException ex) { + /* ignored; handled below. */ + } + return "[class or subclass of " + IQcRilAudioCallback.kInterfaceName + "]@Proxy"; + } + + // Methods from ::vendor::qti::hardware::radio::am::V1_0::IQcRilAudioCallback follow. + @Override + public String getParameters(String str) + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(IQcRilAudioCallback.kInterfaceName); + _hidl_request.writeString(str); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(1 /* getParameters */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + + String _hidl_out_result = _hidl_reply.readString(); + return _hidl_out_result; + } finally { + _hidl_reply.release(); + } + } + + @Override + public int setParameters(String str) + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(IQcRilAudioCallback.kInterfaceName); + _hidl_request.writeString(str); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(2 /* setParameters */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + + int _hidl_out_success = _hidl_reply.readInt32(); + return _hidl_out_success; + } finally { + _hidl_reply.release(); + } + } + + // Methods from ::android::hidl::base::V1_0::IBase follow. + @Override + public java.util.ArrayList interfaceChain() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(256067662 /* interfaceChain */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + + java.util.ArrayList _hidl_out_descriptors = _hidl_reply.readStringVector(); + return _hidl_out_descriptors; + } finally { + _hidl_reply.release(); + } + } + + @Override + public String interfaceDescriptor() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(256136003 /* interfaceDescriptor */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + + String _hidl_out_descriptor = _hidl_reply.readString(); + return _hidl_out_descriptor; + } finally { + _hidl_reply.release(); + } + } + + @Override + public java.util.ArrayList getHashChain() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(256398152 /* getHashChain */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + + java.util.ArrayList _hidl_out_hashchain = new java.util.ArrayList(); + { + android.os.HwBlob _hidl_blob = _hidl_reply.readBuffer(16 /* size */); + { + int _hidl_vec_size = _hidl_blob.getInt32(0 /* offset */ + 8 /* offsetof(hidl_vec, mSize) */); + android.os.HwBlob childBlob = _hidl_reply.readEmbeddedBuffer( + _hidl_vec_size * 32,_hidl_blob.handle(), + 0 /* offset */ + 0 /* offsetof(hidl_vec, mBuffer) */,true /* nullable */); + + _hidl_out_hashchain.clear(); + for (int _hidl_index_0 = 0; _hidl_index_0 < _hidl_vec_size; ++_hidl_index_0) { + final byte[/* 32 */] _hidl_vec_element = new byte[32]; + { + long _hidl_array_offset_1 = _hidl_index_0 * 32; + for (int _hidl_index_1_0 = 0; _hidl_index_1_0 < 32; ++_hidl_index_1_0) { + _hidl_vec_element[_hidl_index_1_0] = childBlob.getInt8(_hidl_array_offset_1); + _hidl_array_offset_1 += 1; + } + } + _hidl_out_hashchain.add(_hidl_vec_element); + } + } + } + return _hidl_out_hashchain; + } finally { + _hidl_reply.release(); + } + } + + @Override + public void setHALInstrumentation() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(256462420 /* setHALInstrumentation */, _hidl_request, _hidl_reply, android.os.IHwBinder.FLAG_ONEWAY); + _hidl_request.releaseTemporaryStorage(); + } finally { + _hidl_reply.release(); + } + } + + @Override + public boolean linkToDeath(android.os.IHwBinder.DeathRecipient recipient, long cookie) + throws android.os.RemoteException { + return mRemote.linkToDeath(recipient, cookie); + } + @Override + public void ping() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(256921159 /* ping */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + } finally { + _hidl_reply.release(); + } + } + + @Override + public android.hidl.base.V1_0.DebugInfo getDebugInfo() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(257049926 /* getDebugInfo */, _hidl_request, _hidl_reply, 0 /* flags */); + _hidl_reply.verifySuccess(); + _hidl_request.releaseTemporaryStorage(); + + android.hidl.base.V1_0.DebugInfo _hidl_out_info = new android.hidl.base.V1_0.DebugInfo(); + _hidl_out_info.readFromParcel(_hidl_reply); + return _hidl_out_info; + } finally { + _hidl_reply.release(); + } + } + + @Override + public void notifySyspropsChanged() + throws android.os.RemoteException { + android.os.HwParcel _hidl_request = new android.os.HwParcel(); + _hidl_request.writeInterfaceToken(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.os.HwParcel _hidl_reply = new android.os.HwParcel(); + try { + mRemote.transact(257120595 /* notifySyspropsChanged */, _hidl_request, _hidl_reply, android.os.IHwBinder.FLAG_ONEWAY); + _hidl_request.releaseTemporaryStorage(); + } finally { + _hidl_reply.release(); + } + } + + @Override + public boolean unlinkToDeath(android.os.IHwBinder.DeathRecipient recipient) + throws android.os.RemoteException { + return mRemote.unlinkToDeath(recipient); + } + } + + public static abstract class Stub extends android.os.HwBinder implements IQcRilAudioCallback { + @Override + public android.os.IHwBinder asBinder() { + return this; + } + + @Override + public final java.util.ArrayList interfaceChain() { + return new java.util.ArrayList(java.util.Arrays.asList( + IQcRilAudioCallback.kInterfaceName, + android.hidl.base.V1_0.IBase.kInterfaceName)); + } + + @Override + public final String interfaceDescriptor() { + return IQcRilAudioCallback.kInterfaceName; + + } + + @Override + public final java.util.ArrayList getHashChain() { + return new java.util.ArrayList(java.util.Arrays.asList( + new byte[/* 32 */]{-52,108,-122,12,-23,-127,-15,-89,-101,-41,-8,-38,67,-55,-25,-127,86,-27,-94,-49,-69,-90,93,89,61,-12,102,18,-25,61,16,47} /* cc6c860ce981f1a79bd7f8da43c9e78156e5a2cfbba65d593df46612e73d102f */, + new byte[/* 32 */]{-67,-38,-74,24,77,122,52,109,-90,-96,125,-64,-126,-116,-15,-102,105,111,76,-86,54,17,-59,31,46,20,86,90,20,-76,15,-39} /* bddab6184d7a346da6a07dc0828cf19a696f4caa3611c51f2e14565a14b40fd9 */)); + + } + + @Override + public final void setHALInstrumentation() { + + } + + @Override + public final boolean linkToDeath(android.os.IHwBinder.DeathRecipient recipient, long cookie) { + return true; + } + + @Override + public final void ping() { + return; + + } + + @Override + public final android.hidl.base.V1_0.DebugInfo getDebugInfo() { + android.hidl.base.V1_0.DebugInfo info = new android.hidl.base.V1_0.DebugInfo(); + info.pid = -1; + info.ptr = 0; + info.arch = android.hidl.base.V1_0.DebugInfo.Architecture.UNKNOWN;return info; + } + + @Override + public final void notifySyspropsChanged() { + android.os.SystemProperties.reportSyspropChanged(); + } + + @Override + public final boolean unlinkToDeath(android.os.IHwBinder.DeathRecipient recipient) { + return true; + + } + + @Override + public android.os.IHwInterface queryLocalInterface(String descriptor) { + if (kInterfaceName.equals(descriptor)) { + return this; + } + return null; + } + + public void registerAsService(String serviceName) throws android.os.RemoteException { + registerService(serviceName); + } + + @Override + public String toString() { + return this.interfaceDescriptor() + "@Stub"; + } + + @Override + public void onTransact(int _hidl_code, android.os.HwParcel _hidl_request, final android.os.HwParcel _hidl_reply, int _hidl_flags) + throws android.os.RemoteException { + switch (_hidl_code) { + case 1 /* getParameters */: + { + _hidl_request.enforceInterface(IQcRilAudioCallback.kInterfaceName); + + String str = _hidl_request.readString(); + String _hidl_out_result = getParameters(str); + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + _hidl_reply.writeString(_hidl_out_result); + _hidl_reply.send(); + break; + } + + case 2 /* setParameters */: + { + _hidl_request.enforceInterface(IQcRilAudioCallback.kInterfaceName); + + String str = _hidl_request.readString(); + int _hidl_out_success = setParameters(str); + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + _hidl_reply.writeInt32(_hidl_out_success); + _hidl_reply.send(); + break; + } + + case 256067662 /* interfaceChain */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + java.util.ArrayList _hidl_out_descriptors = interfaceChain(); + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + _hidl_reply.writeStringVector(_hidl_out_descriptors); + _hidl_reply.send(); + break; + } + + case 256131655 /* debug */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + _hidl_reply.send(); + break; + } + + case 256136003 /* interfaceDescriptor */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + String _hidl_out_descriptor = interfaceDescriptor(); + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + _hidl_reply.writeString(_hidl_out_descriptor); + _hidl_reply.send(); + break; + } + + case 256398152 /* getHashChain */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + java.util.ArrayList _hidl_out_hashchain = getHashChain(); + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + { + android.os.HwBlob _hidl_blob = new android.os.HwBlob(16 /* size */); + { + int _hidl_vec_size = _hidl_out_hashchain.size(); + _hidl_blob.putInt32(0 /* offset */ + 8 /* offsetof(hidl_vec, mSize) */, _hidl_vec_size); + _hidl_blob.putBool(0 /* offset */ + 12 /* offsetof(hidl_vec, mOwnsBuffer) */, false); + android.os.HwBlob childBlob = new android.os.HwBlob((int)(_hidl_vec_size * 32)); + for (int _hidl_index_0 = 0; _hidl_index_0 < _hidl_vec_size; ++_hidl_index_0) { + { + long _hidl_array_offset_1 = _hidl_index_0 * 32; + for (int _hidl_index_1_0 = 0; _hidl_index_1_0 < 32; ++_hidl_index_1_0) { + childBlob.putInt8(_hidl_array_offset_1, _hidl_out_hashchain.get(_hidl_index_0)[_hidl_index_1_0]); + _hidl_array_offset_1 += 1; + } + } + } + _hidl_blob.putBlob(0 /* offset */ + 0 /* offsetof(hidl_vec, mBuffer) */, childBlob); + } + _hidl_reply.writeBuffer(_hidl_blob); + } + _hidl_reply.send(); + break; + } + + case 256462420 /* setHALInstrumentation */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + setHALInstrumentation(); + break; + } + + case 256660548 /* linkToDeath */: + { + break; + } + + case 256921159 /* ping */: + { + break; + } + + case 257049926 /* getDebugInfo */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + android.hidl.base.V1_0.DebugInfo _hidl_out_info = getDebugInfo(); + _hidl_reply.writeStatus(android.os.HwParcel.STATUS_SUCCESS); + _hidl_out_info.writeToParcel(_hidl_reply); + _hidl_reply.send(); + break; + } + + case 257120595 /* notifySyspropsChanged */: + { + _hidl_request.enforceInterface(android.hidl.base.V1_0.IBase.kInterfaceName); + + notifySyspropsChanged(); + break; + } + + case 257250372 /* unlinkToDeath */: + { + break; + } + + } + } + } +} diff --git a/overlay.mk b/overlay.mk index 16ab8e5..8822bb8 100644 --- a/overlay.mk +++ b/overlay.mk @@ -3,7 +3,8 @@ PRODUCT_PACKAGES += \ treble-overlay-NightMode \ treble-overlay-Telephony-LTE \ treble-overlay-SystemUI-FalseLocks \ - HardwareOverlayPicker + HardwareOverlayPicker \ + QtiAudio PRODUCT_PACKAGES += \