diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2018-11-28 20:43:25 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-11-28 20:43:25 -0800 |
commit | 372ec44be0cbe58e5cd8b0d2df8ddf89b9a64be7 (patch) | |
tree | 9662afa68b14e1fe1bd6e69e372298f1fc854aad /gnss | |
parent | 730abcc3d4354badb431ec99ca10011b29d5eccd (diff) | |
parent | e232986d84deb7178d1a57cc7f1e4d24cbaeeb3c (diff) | |
download | gps-372ec44be0cbe58e5cd8b0d2df8ddf89b9a64be7.tar.gz |
Merge "GPS location API: support destroy with callback for completion"
Diffstat (limited to 'gnss')
-rw-r--r-- | gnss/GnssAdapter.cpp | 15 | ||||
-rw-r--r-- | gnss/GnssAdapter.h | 5 | ||||
-rw-r--r-- | gnss/location_gnss.cpp | 8 |
3 files changed, 19 insertions, 9 deletions
diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp index 6b3e846..016356b 100644 --- a/gnss/GnssAdapter.cpp +++ b/gnss/GnssAdapter.cpp @@ -1859,25 +1859,32 @@ GnssAdapter::addClientCommand(LocationAPI* client, const LocationCallbacks& call } void -GnssAdapter::removeClientCommand(LocationAPI* client) +GnssAdapter::removeClientCommand(LocationAPI* client, + removeClientCompleteCallback rmClientCb) { LOC_LOGD("%s]: client %p", __func__, client); struct MsgRemoveClient : public LocMsg { GnssAdapter& mAdapter; LocationAPI* mClient; + removeClientCompleteCallback mRmClientCb; inline MsgRemoveClient(GnssAdapter& adapter, - LocationAPI* client) : + LocationAPI* client, + removeClientCompleteCallback rmCb) : LocMsg(), mAdapter(adapter), - mClient(client) {} + mClient(client), + mRmClientCb(rmCb){} inline virtual void proc() const { mAdapter.stopClientSessions(mClient); mAdapter.eraseClient(mClient); + if (nullptr != mRmClientCb) { + mRmClientCb(mClient); + } } }; - sendMsg(new MsgRemoveClient(*this, client)); + sendMsg(new MsgRemoveClient(*this, client, rmClientCb)); } void diff --git a/gnss/GnssAdapter.h b/gnss/GnssAdapter.h index f382c6a..1682f02 100644 --- a/gnss/GnssAdapter.h +++ b/gnss/GnssAdapter.h @@ -128,6 +128,8 @@ typedef std::function<void( uint64_t gnssEnergyConsumedFromFirstBoot )> GnssEnergyConsumedCallback; +typedef void (*removeClientCompleteCallback)(LocationAPI* client); + class GnssAdapter : public LocAdapterBase { /* ==== Engine Hub ===================================================================== */ @@ -206,7 +208,8 @@ public: /* ==== CLIENT ========================================================================= */ /* ======== COMMANDS ====(Called from Client Thread)==================================== */ void addClientCommand(LocationAPI* client, const LocationCallbacks& callbacks); - void removeClientCommand(LocationAPI* client); + void removeClientCommand(LocationAPI* client, + removeClientCompleteCallback rmClientCb); void requestCapabilitiesCommand(LocationAPI* client); /* ======== UTILITIES ================================================================== */ void saveClient(LocationAPI* client, const LocationCallbacks& callbacks); diff --git a/gnss/location_gnss.cpp b/gnss/location_gnss.cpp index 5a7710a..f9fbddc 100644 --- a/gnss/location_gnss.cpp +++ b/gnss/location_gnss.cpp @@ -36,7 +36,7 @@ static void initialize(); static void deinitialize(); static void addClient(LocationAPI* client, const LocationCallbacks& callbacks); -static void removeClient(LocationAPI* client); +static void removeClient(LocationAPI* client, removeClientCompleteCallback rmClientCb); static void requestCapabilities(LocationAPI* client); static uint32_t startTracking(LocationAPI* client, TrackingOptions&); @@ -140,10 +140,10 @@ static void addClient(LocationAPI* client, const LocationCallbacks& callbacks) } } -static void removeClient(LocationAPI* client) +static void removeClient(LocationAPI* client, removeClientCompleteCallback rmClientCb) { if (NULL != gGnssAdapter) { - gGnssAdapter->removeClientCommand(client); + gGnssAdapter->removeClientCommand(client, rmClientCb); } } @@ -345,4 +345,4 @@ static void getGnssEnergyConsumed(GnssEnergyConsumedCallback energyConsumedCb) { if (NULL != gGnssAdapter) { gGnssAdapter->getGnssEnergyConsumedCommand(energyConsumedCb); } -}
\ No newline at end of file +} |