Use Parser Code for GNSS CHPP->CHRE Conversion am: c825b356a0
Original change: https://googleplex-android-review.googlesource.com/c/platform/system/chre/+/12674979
Change-Id: I6530a35e12472c52cefa3a1a52c1d7077bfc1ebd
diff --git a/chpp/clients/gnss.c b/chpp/clients/gnss.c
index 4aec70d..31415b8 100644
--- a/chpp/clients/gnss.c
+++ b/chpp/clients/gnss.c
@@ -444,27 +444,22 @@
static void chppGnssLocationResultNotification(
struct ChppGnssClientState *clientContext, uint8_t *buf, size_t len) {
UNUSED_VAR(clientContext);
+ CHPP_LOGD("chppGnssLocationResultNotification received data len=%" PRIuSIZE,
+ len);
- if (len < sizeof(struct ChppGnssLocationEventWithHeader)) {
- CHPP_LOGE("GNSS LocationResultNotification too short");
+ buf += sizeof(struct ChppAppHeader);
+ len -= sizeof(struct ChppAppHeader);
+ struct chreGnssLocationEvent *chre =
+ chppGnssLocationEventToChre((struct ChppGnssLocationEvent *)buf, len);
+
+ if (chre == NULL) {
+ CHPP_LOGE(
+ "chppGnssLocationResultNotification CHPP -> CHRE conversion failed. "
+ "Input len=%" PRIuSIZE,
+ len);
} else {
- CHPP_LOGD("chppGnssLocationResultNotification received location");
-
- // TODO: Use parser script instead. i.e. chppGnssLocationEventToChre()
- struct ChppGnssLocationEventWithHeader *chppEvent =
- (struct ChppGnssLocationEventWithHeader *)buf;
- struct chreGnssLocationEvent *chreResult =
- chppMalloc(sizeof(struct chreGnssLocationEvent));
-
- if (chreResult == NULL) {
- CHPP_LOG_OOM();
-
- } else {
- memcpy(chreResult, &chppEvent->payload,
- sizeof(struct ChppGnssLocationEvent));
- gCallbacks->locationEventCallback(chreResult);
- }
+ gCallbacks->locationEventCallback(chre);
}
}
@@ -480,11 +475,24 @@
static void chppGnssMeasurementResultNotification(
struct ChppGnssClientState *clientContext, uint8_t *buf, size_t len) {
UNUSED_VAR(clientContext);
- UNUSED_VAR(buf);
- UNUSED_VAR(len);
- // TODO: Use parser script, i.e. chppGnssMeasurementEventToChre(), to convert
+ CHPP_LOGD(
+ "chppGnssMeasurementResultNotification received data len=%" PRIuSIZE,
+ len);
- // gCallbacks->measurementEventCallback(chreResult);
+ buf += sizeof(struct ChppAppHeader);
+ len -= sizeof(struct ChppAppHeader);
+
+ struct chreGnssDataEvent *chre =
+ chppGnssDataEventToChre((struct ChppGnssDataEvent *)buf, len);
+
+ if (chre == NULL) {
+ CHPP_LOGE(
+ "chppGnssMeasurementResultNotification CHPP -> CHRE conversion failed. "
+ "Input len=%" PRIuSIZE,
+ len);
+ } else {
+ gCallbacks->measurementEventCallback(chre);
+ }
}
/**