Merge "Fix GnssMeasurement JNI for 1.1" into pi-dev
am: 04f2800d53
Change-Id: I671abacb6e65b7ece511653a677b3fcdc1adae49
This commit is contained in:
@@ -81,13 +81,9 @@ using android::hardware::Return;
|
|||||||
using android::hardware::Void;
|
using android::hardware::Void;
|
||||||
using android::hardware::hidl_vec;
|
using android::hardware::hidl_vec;
|
||||||
using android::hardware::hidl_death_recipient;
|
using android::hardware::hidl_death_recipient;
|
||||||
using android::hidl::base::V1_0::IBase;
|
|
||||||
using android::hardware::gnss::V1_0::GnssLocation;
|
using android::hardware::gnss::V1_0::GnssLocation;
|
||||||
using android::hardware::gnss::V1_0::GnssLocationFlags;
|
using android::hardware::gnss::V1_0::GnssLocationFlags;
|
||||||
using IGnss_V1_1 = android::hardware::gnss::V1_1::IGnss;
|
|
||||||
using IGnssMeasurement_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurement;
|
|
||||||
using IGnssMeasurement_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurement;
|
|
||||||
using android::hardware::gnss::V1_0::IGnss;
|
|
||||||
using android::hardware::gnss::V1_0::IAGnss;
|
using android::hardware::gnss::V1_0::IAGnss;
|
||||||
using android::hardware::gnss::V1_0::IAGnssCallback;
|
using android::hardware::gnss::V1_0::IAGnssCallback;
|
||||||
using android::hardware::gnss::V1_0::IAGnssCallback;
|
using android::hardware::gnss::V1_0::IAGnssCallback;
|
||||||
@@ -99,7 +95,6 @@ using android::hardware::gnss::V1_0::IGnssConfiguration;
|
|||||||
using android::hardware::gnss::V1_0::IGnssDebug;
|
using android::hardware::gnss::V1_0::IGnssDebug;
|
||||||
using android::hardware::gnss::V1_0::IGnssGeofenceCallback;
|
using android::hardware::gnss::V1_0::IGnssGeofenceCallback;
|
||||||
using android::hardware::gnss::V1_0::IGnssGeofencing;
|
using android::hardware::gnss::V1_0::IGnssGeofencing;
|
||||||
using IGnssMeasurementCallback_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurementCallback;
|
|
||||||
using android::hardware::gnss::V1_0::IGnssNavigationMessage;
|
using android::hardware::gnss::V1_0::IGnssNavigationMessage;
|
||||||
using android::hardware::gnss::V1_0::IGnssNavigationMessageCallback;
|
using android::hardware::gnss::V1_0::IGnssNavigationMessageCallback;
|
||||||
using android::hardware::gnss::V1_0::IGnssNi;
|
using android::hardware::gnss::V1_0::IGnssNi;
|
||||||
@@ -108,7 +103,16 @@ using android::hardware::gnss::V1_0::IGnssXtra;
|
|||||||
using android::hardware::gnss::V1_0::IGnssXtraCallback;
|
using android::hardware::gnss::V1_0::IGnssXtraCallback;
|
||||||
|
|
||||||
using android::hardware::gnss::V1_1::IGnssCallback;
|
using android::hardware::gnss::V1_1::IGnssCallback;
|
||||||
using android::hardware::gnss::V1_1::IGnssMeasurementCallback;
|
|
||||||
|
using android::hidl::base::V1_0::IBase;
|
||||||
|
|
||||||
|
using IGnss_V1_0 = android::hardware::gnss::V1_0::IGnss;
|
||||||
|
using IGnss_V1_1 = android::hardware::gnss::V1_1::IGnss;
|
||||||
|
using IGnssMeasurement_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurement;
|
||||||
|
using IGnssMeasurement_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurement;
|
||||||
|
using IGnssMeasurementCallback_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurementCallback;
|
||||||
|
using IGnssMeasurementCallback_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurementCallback;
|
||||||
|
|
||||||
|
|
||||||
struct GnssDeathRecipient : virtual public hidl_death_recipient
|
struct GnssDeathRecipient : virtual public hidl_death_recipient
|
||||||
{
|
{
|
||||||
@@ -122,7 +126,7 @@ struct GnssDeathRecipient : virtual public hidl_death_recipient
|
|||||||
};
|
};
|
||||||
|
|
||||||
sp<GnssDeathRecipient> gnssHalDeathRecipient = nullptr;
|
sp<GnssDeathRecipient> gnssHalDeathRecipient = nullptr;
|
||||||
sp<IGnss> gnssHal = nullptr;
|
sp<IGnss_V1_0> gnssHal = nullptr;
|
||||||
sp<IGnss_V1_1> gnssHal_V1_1 = nullptr;
|
sp<IGnss_V1_1> gnssHal_V1_1 = nullptr;
|
||||||
sp<IGnssXtra> gnssXtraIface = nullptr;
|
sp<IGnssXtra> gnssXtraIface = nullptr;
|
||||||
sp<IAGnssRil> agnssRilIface = nullptr;
|
sp<IAGnssRil> agnssRilIface = nullptr;
|
||||||
@@ -732,32 +736,33 @@ Return<void> GnssNavigationMessageCallback::gnssNavigationMessageCb(
|
|||||||
* GnssMeasurementCallback implements the callback methods required for the
|
* GnssMeasurementCallback implements the callback methods required for the
|
||||||
* GnssMeasurement interface.
|
* GnssMeasurement interface.
|
||||||
*/
|
*/
|
||||||
struct GnssMeasurementCallback : public IGnssMeasurementCallback {
|
struct GnssMeasurementCallback : public IGnssMeasurementCallback_V1_1 {
|
||||||
Return<void> gnssMeasurementCb(const IGnssMeasurementCallback::GnssData& data) override;
|
Return<void> gnssMeasurementCb(const IGnssMeasurementCallback_V1_1::GnssData& data) override;
|
||||||
Return<void> GnssMeasurementCb(const IGnssMeasurementCallback_V1_0::GnssData& data) override;
|
Return<void> GnssMeasurementCb(const IGnssMeasurementCallback_V1_0::GnssData& data) override;
|
||||||
private:
|
private:
|
||||||
void translateGnssMeasurement_V1_0(
|
void translateGnssMeasurement_V1_0(
|
||||||
JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement,
|
JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement,
|
||||||
JavaObject object);
|
JavaObject& object);
|
||||||
jobjectArray translateGnssMeasurements(
|
jobjectArray translateGnssMeasurements(
|
||||||
JNIEnv* env,
|
JNIEnv* env,
|
||||||
const IGnssMeasurementCallback::GnssMeasurement* measurements,
|
const IGnssMeasurementCallback_V1_1::GnssMeasurement* measurements_v1_1,
|
||||||
const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0,
|
const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0,
|
||||||
size_t count);
|
size_t count);
|
||||||
jobject translateGnssClock(
|
jobject translateGnssClock(
|
||||||
JNIEnv* env, const IGnssMeasurementCallback::GnssClock* clock);
|
JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssClock* clock);
|
||||||
void setMeasurementData(JNIEnv* env, jobject clock, jobjectArray measurementArray);
|
void setMeasurementData(JNIEnv* env, jobject clock, jobjectArray measurementArray);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Return<void> GnssMeasurementCallback::gnssMeasurementCb(
|
Return<void> GnssMeasurementCallback::gnssMeasurementCb(
|
||||||
const IGnssMeasurementCallback::GnssData& data) {
|
const IGnssMeasurementCallback_V1_1::GnssData& data) {
|
||||||
JNIEnv* env = getJniEnv();
|
JNIEnv* env = getJniEnv();
|
||||||
|
|
||||||
jobject clock;
|
jobject clock;
|
||||||
jobjectArray measurementArray;
|
jobjectArray measurementArray;
|
||||||
|
|
||||||
clock = translateGnssClock(env, &data.clock);
|
clock = translateGnssClock(env, &data.clock);
|
||||||
|
|
||||||
measurementArray = translateGnssMeasurements(
|
measurementArray = translateGnssMeasurements(
|
||||||
env, data.measurements.data(), NULL, data.measurements.size());
|
env, data.measurements.data(), NULL, data.measurements.size());
|
||||||
setMeasurementData(env, clock, measurementArray);
|
setMeasurementData(env, clock, measurementArray);
|
||||||
@@ -787,7 +792,7 @@ Return<void> GnssMeasurementCallback::GnssMeasurementCb(
|
|||||||
// preallocate object as: JavaObject object(env, "android/location/GnssMeasurement");
|
// preallocate object as: JavaObject object(env, "android/location/GnssMeasurement");
|
||||||
void GnssMeasurementCallback::translateGnssMeasurement_V1_0(
|
void GnssMeasurementCallback::translateGnssMeasurement_V1_0(
|
||||||
JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement,
|
JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement,
|
||||||
JavaObject object) {
|
JavaObject& object) {
|
||||||
uint32_t flags = static_cast<uint32_t>(measurement->flags);
|
uint32_t flags = static_cast<uint32_t>(measurement->flags);
|
||||||
|
|
||||||
SET(Svid, static_cast<int32_t>(measurement->svid));
|
SET(Svid, static_cast<int32_t>(measurement->svid));
|
||||||
@@ -826,7 +831,7 @@ void GnssMeasurementCallback::translateGnssMeasurement_V1_0(
|
|||||||
}
|
}
|
||||||
|
|
||||||
jobject GnssMeasurementCallback::translateGnssClock(
|
jobject GnssMeasurementCallback::translateGnssClock(
|
||||||
JNIEnv* env, const IGnssMeasurementCallback::GnssClock* clock) {
|
JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssClock* clock) {
|
||||||
JavaObject object(env, "android/location/GnssClock");
|
JavaObject object(env, "android/location/GnssClock");
|
||||||
|
|
||||||
uint32_t flags = static_cast<uint32_t>(clock->gnssClockFlags);
|
uint32_t flags = static_cast<uint32_t>(clock->gnssClockFlags);
|
||||||
@@ -865,7 +870,7 @@ jobject GnssMeasurementCallback::translateGnssClock(
|
|||||||
}
|
}
|
||||||
|
|
||||||
jobjectArray GnssMeasurementCallback::translateGnssMeasurements(JNIEnv* env,
|
jobjectArray GnssMeasurementCallback::translateGnssMeasurements(JNIEnv* env,
|
||||||
const IGnssMeasurementCallback::GnssMeasurement* measurements,
|
const IGnssMeasurementCallback_V1_1::GnssMeasurement* measurements_v1_1,
|
||||||
const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0,
|
const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0,
|
||||||
size_t count) {
|
size_t count) {
|
||||||
if (count == 0) {
|
if (count == 0) {
|
||||||
@@ -880,12 +885,12 @@ jobjectArray GnssMeasurementCallback::translateGnssMeasurements(JNIEnv* env,
|
|||||||
|
|
||||||
for (uint16_t i = 0; i < count; ++i) {
|
for (uint16_t i = 0; i < count; ++i) {
|
||||||
JavaObject object(env, "android/location/GnssMeasurement");
|
JavaObject object(env, "android/location/GnssMeasurement");
|
||||||
if (measurements != NULL) {
|
if (measurements_v1_1 != NULL) {
|
||||||
translateGnssMeasurement_V1_0(env, &(measurements[i].v1_0), object);
|
translateGnssMeasurement_V1_0(env, &(measurements_v1_1[i].v1_0), object);
|
||||||
|
|
||||||
// Set the V1_1 flag
|
// Set the V1_1 flag
|
||||||
SET(AccumulatedDeltaRangeState,
|
SET(AccumulatedDeltaRangeState,
|
||||||
static_cast<int32_t>(measurements[i].accumulatedDeltaRangeState));
|
static_cast<int32_t>(measurements_v1_1[i].accumulatedDeltaRangeState));
|
||||||
} else {
|
} else {
|
||||||
translateGnssMeasurement_V1_0(env, &(measurements_v1_0[i]), object);
|
translateGnssMeasurement_V1_0(env, &(measurements_v1_0[i]), object);
|
||||||
}
|
}
|
||||||
@@ -1169,7 +1174,7 @@ static void android_location_GnssLocationProvider_class_init_native(JNIEnv* env,
|
|||||||
gnssHal_V1_1 = IGnss_V1_1::getService();
|
gnssHal_V1_1 = IGnss_V1_1::getService();
|
||||||
if (gnssHal_V1_1 == nullptr) {
|
if (gnssHal_V1_1 == nullptr) {
|
||||||
ALOGD("gnssHal 1.1 was null, trying 1.0");
|
ALOGD("gnssHal 1.1 was null, trying 1.0");
|
||||||
gnssHal = IGnss::getService();
|
gnssHal = IGnss_V1_0::getService();
|
||||||
} else {
|
} else {
|
||||||
gnssHal = gnssHal_V1_1;
|
gnssHal = gnssHal_V1_1;
|
||||||
}
|
}
|
||||||
@@ -1367,18 +1372,18 @@ static jboolean android_location_GnssLocationProvider_set_position_mode(JNIEnv*
|
|||||||
jint preferred_time, jboolean low_power_mode) {
|
jint preferred_time, jboolean low_power_mode) {
|
||||||
Return<bool> result = false;
|
Return<bool> result = false;
|
||||||
if (gnssHal_V1_1 != nullptr) {
|
if (gnssHal_V1_1 != nullptr) {
|
||||||
result = gnssHal_V1_1->setPositionMode_1_1(static_cast<IGnss::GnssPositionMode>(mode),
|
result = gnssHal_V1_1->setPositionMode_1_1(static_cast<IGnss_V1_0::GnssPositionMode>(mode),
|
||||||
static_cast<IGnss::GnssPositionRecurrence>(recurrence),
|
static_cast<IGnss_V1_0::GnssPositionRecurrence>(recurrence),
|
||||||
min_interval,
|
min_interval,
|
||||||
preferred_accuracy,
|
preferred_accuracy,
|
||||||
preferred_time,
|
preferred_time,
|
||||||
low_power_mode);
|
low_power_mode);
|
||||||
} else if (gnssHal != nullptr) {
|
} else if (gnssHal != nullptr) {
|
||||||
result = gnssHal->setPositionMode(static_cast<IGnss::GnssPositionMode>(mode),
|
result = gnssHal->setPositionMode(static_cast<IGnss_V1_0::GnssPositionMode>(mode),
|
||||||
static_cast<IGnss::GnssPositionRecurrence>(recurrence),
|
static_cast<IGnss_V1_0::GnssPositionRecurrence>(recurrence),
|
||||||
min_interval,
|
min_interval,
|
||||||
preferred_accuracy,
|
preferred_accuracy,
|
||||||
preferred_time);
|
preferred_time);
|
||||||
}
|
}
|
||||||
if (!result.isOk()) {
|
if (!result.isOk()) {
|
||||||
ALOGE("%s: GNSS setPositionMode failed\n", __func__);
|
ALOGE("%s: GNSS setPositionMode failed\n", __func__);
|
||||||
@@ -1417,7 +1422,7 @@ static void android_location_GnssLocationProvider_delete_aiding_data(JNIEnv* /*
|
|||||||
jobject /* obj */,
|
jobject /* obj */,
|
||||||
jint flags) {
|
jint flags) {
|
||||||
if (gnssHal != nullptr) {
|
if (gnssHal != nullptr) {
|
||||||
auto result = gnssHal->deleteAidingData(static_cast<IGnss::GnssAidingData>(flags));
|
auto result = gnssHal->deleteAidingData(static_cast<IGnss_V1_0::GnssAidingData>(flags));
|
||||||
if (!result.isOk()) {
|
if (!result.isOk()) {
|
||||||
ALOGE("Error in deleting aiding data");
|
ALOGE("Error in deleting aiding data");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user