Support HAL v3.0 in inject_psds_data

Bug: 166660953
Test: on Cuttlefish
Change-Id: I913b95c74836e25e52c80e79affdccfe2ff02ce6
This commit is contained in:
Yu-Han Yang
2020-08-28 09:32:47 -07:00
parent 0693cf674a
commit ac3e089691
2 changed files with 17 additions and 10 deletions

View File

@@ -821,7 +821,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
byte[] data = psdsDownloader.downloadPsdsData(psdsType);
if (data != null) {
if (DEBUG) Log.d(TAG, "calling native_inject_psds_data");
native_inject_psds_data(data, data.length);
native_inject_psds_data(data, data.length, psdsType);
mPsdsBackOff.reset();
}
@@ -2111,7 +2111,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
private native boolean native_supports_psds();
private native void native_inject_psds_data(byte[] data, int length);
private native void native_inject_psds_data(byte[] data, int length, int psdsType);
// DEBUG Support
private native String native_get_internal_state();

View File

@@ -928,7 +928,7 @@ Return<void> GnssCallback::gnssSetSystemInfoCb(const IGnssCallback_V2_0::GnssSys
* GnssPsdsCallback class implements the callback methods for the IGnssPsds
* interface.
*/
class GnssPsdsCallback : public IGnssPsdsCallback {
struct GnssPsdsCallback : public IGnssPsdsCallback {
Return<void> downloadRequestCb() override;
Return<void> downloadRequestCb_3_0(int32_t psdsType) override;
};
@@ -2743,19 +2743,26 @@ static void android_location_GnssLocationProvider_inject_location(JNIEnv* /* env
static jboolean android_location_GnssLocationProvider_supports_psds(
JNIEnv* /* env */, jobject /* obj */) {
return (gnssXtraIface != nullptr) ? JNI_TRUE : JNI_FALSE;
return (gnssPsdsIface != nullptr || gnssXtraIface != nullptr) ? JNI_TRUE : JNI_FALSE;
}
static void android_location_GnssLocationProvider_inject_psds_data(JNIEnv* env, jobject /* obj */,
jbyteArray data, jint length) {
if (gnssXtraIface == nullptr) {
ALOGE("%s: IGnssXtra interface not available.", __func__);
jbyteArray data, jint length,
jint psdsType) {
if (gnssPsdsIface == nullptr && gnssXtraIface == nullptr) {
ALOGE("%s: IGnssPsds or IGnssXtra interface not available.", __func__);
return;
}
jbyte* bytes = reinterpret_cast<jbyte *>(env->GetPrimitiveArrayCritical(data, 0));
auto result = gnssXtraIface->injectXtraData(std::string((const char*)bytes, length));
checkHidlReturn(result, "IGnssXtra injectXtraData() failed.");
if (gnssPsdsIface != nullptr) {
auto result = gnssPsdsIface->injectPsdsData_3_0(psdsType,
std::string((const char*)bytes, length));
checkHidlReturn(result, "IGnssPsds injectPsdsData() failed.");
} else if (gnssXtraIface != nullptr) {
auto result = gnssXtraIface->injectXtraData(std::string((const char*)bytes, length));
checkHidlReturn(result, "IGnssXtra injectXtraData() failed.");
}
env->ReleasePrimitiveArrayCritical(data, bytes, JNI_ABORT);
}
@@ -3685,7 +3692,7 @@ static const JNINativeMethod sLocationProviderMethods[] = {
reinterpret_cast<void*>(android_location_GnssLocationProvider_inject_location)},
{"native_supports_psds", "()Z",
reinterpret_cast<void*>(android_location_GnssLocationProvider_supports_psds)},
{"native_inject_psds_data", "([BI)V",
{"native_inject_psds_data", "([BII)V",
reinterpret_cast<void*>(android_location_GnssLocationProvider_inject_psds_data)},
{"native_agps_set_id", "(ILjava/lang/String;)V",
reinterpret_cast<void*>(android_location_GnssLocationProvider_agps_set_id)},