diff --git a/core/UlpProxyBase.h b/core/UlpProxyBase.h index 5d93e2b9..7f896a67 100644 --- a/core/UlpProxyBase.h +++ b/core/UlpProxyBase.h @@ -112,6 +112,12 @@ public: (void)aidingData; return false; } + inline virtual bool reportNmea(const char* nmea, int length) + { + (void)nmea; + (void)length; + return false; + } }; } // namespace loc_core diff --git a/core/gps_extended_c.h b/core/gps_extended_c.h index 46be08b5..87599053 100644 --- a/core/gps_extended_c.h +++ b/core/gps_extended_c.h @@ -78,6 +78,7 @@ extern "C" { #define ULP_LOCATION_IS_FROM_EXT_DR 0X0080 #define ULP_MIN_INTERVAL_INVALID 0xffffffff +#define ULP_MAX_NMEA_STRING_SIZE 201 /*Emergency SUPL*/ #define GPS_NI_TYPE_EMERGENCY_SUPL 4 @@ -110,6 +111,14 @@ typedef struct { unsigned char map_index[GPS_LOCATION_MAP_INDEX_SIZE]; } UlpLocation; +typedef struct { + /** set to sizeof(UlpNmea) */ + size_t size; + char nmea_str[ULP_MAX_NMEA_STRING_SIZE]; + unsigned int len; +} UlpNmea; + + /** AGPS type */ typedef int16_t AGpsExtType; #define AGPS_TYPE_INVALID -1 diff --git a/loc_api/Makefile.am b/loc_api/Makefile.am index a5f529bd..46480974 100644 --- a/loc_api/Makefile.am +++ b/loc_api/Makefile.am @@ -6,7 +6,11 @@ AM_CFLAGS = \ $(LOCPLA_CFLAGS) \ -fno-short-enums \ -D__func__=__PRETTY_FUNCTION__ \ - -DTARGET_USES_QCOM_BSP + -DTARGET_USES_QCOM_BSP \ + -std=c++11 + +AM_CPPFLAGS = \ + -std=c++11 libloc_eng_so_la_h_sources = \ loc_eng_dmn_conn_glue_msg.h \ diff --git a/loc_api/libloc_api_50001/LocEngAdapter.cpp b/loc_api/libloc_api_50001/LocEngAdapter.cpp index 2d9eeac0..73f5ed6d 100644 --- a/loc_api/libloc_api_50001/LocEngAdapter.cpp +++ b/loc_api/libloc_api_50001/LocEngAdapter.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved. +/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -433,10 +433,17 @@ void LocEngAdapter::reportStatus(GpsStatusValue status) } } -inline -void LocEngAdapter::reportNmea(const char* nmea, int length) +void LocInternalAdapter::reportNmea(const char* nmea, int length) { - sendMsg(new LocEngReportNmea(mOwner, nmea, length)); + sendMsg(new LocEngReportNmea(mLocEngAdapter->getOwner(), nmea, length)); +} + +inline void LocEngAdapter::reportNmea(const char* nmea, int length) +{ + if (!mUlp->reportNmea(nmea, length)) { + //Report it to HAL + mInternalAdapter->reportNmea(nmea, length); + } } inline diff --git a/loc_api/libloc_api_50001/LocEngAdapter.h b/loc_api/libloc_api_50001/LocEngAdapter.h index 416e4b70..4afea495 100644 --- a/loc_api/libloc_api_50001/LocEngAdapter.h +++ b/loc_api/libloc_api_50001/LocEngAdapter.h @@ -63,6 +63,7 @@ public: virtual void stopFixInt(); virtual void getZppInt(); virtual void setUlpProxy(UlpProxyBase* ulp); + virtual void reportNmea(const char* nmea, int length); }; typedef void (*loc_msg_sender)(void* loc_eng_data_p, void* msgp); diff --git a/loc_api/libloc_api_50001/loc_eng_nmea.cpp b/loc_api/libloc_api_50001/loc_eng_nmea.cpp index ac057c11..6ab4a5f8 100644 --- a/loc_api/libloc_api_50001/loc_eng_nmea.cpp +++ b/loc_api/libloc_api_50001/loc_eng_nmea.cpp @@ -156,6 +156,9 @@ void loc_eng_nmea_send(char *pNmea, int length, loc_eng_data_s_type *loc_eng_dat int64_t now = tv.tv_sec * 1000LL + tv.tv_usec / 1000; if (loc_eng_data_p->nmea_cb != NULL) loc_eng_data_p->nmea_cb(now, pNmea, length); + + loc_eng_data_p->adapter->getUlpProxy()->reportNmea(pNmea, length); + LOC_LOGD("NMEA <%s", pNmea); }