123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /* Copyright (c) 2017-2019, 2021, 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
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation, nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
- #ifndef BATCHING_ADAPTER_H
- #define BATCHING_ADAPTER_H
- #include <LocAdapterBase.h>
- #include <LocContext.h>
- #include <LocationAPI.h>
- #include <map>
- using namespace loc_core;
- class BatchingAdapter : public LocAdapterBase {
- /* ==== BATCHING ======================================================================= */
- typedef struct {
- uint32_t accumulatedDistanceOngoingBatch;
- uint32_t accumulatedDistanceThisTrip;
- uint32_t accumulatedDistanceOnTripRestart;
- uint32_t tripDistance;
- uint32_t tripTBFInterval;
- } TripSessionStatus;
- typedef std::map<uint32_t, TripSessionStatus> TripSessionStatusMap;
- typedef std::map<LocationSessionKey, BatchingOptions> BatchingSessionMap;
- BatchingSessionMap mBatchingSessions;
- TripSessionStatusMap mTripSessions;
- uint32_t mOngoingTripDistance;
- uint32_t mOngoingTripTBFInterval;
- bool mTripWithOngoingTBFDropped;
- bool mTripWithOngoingTripDistanceDropped;
- PowerStateType mSystemPowerState;
- void startTripBatchingMultiplex(LocationAPI* client, uint32_t sessionId,
- const BatchingOptions& batchingOptions);
- void stopTripBatchingMultiplex(LocationAPI* client, uint32_t sessionId,
- bool restartNeeded,
- const BatchingOptions& batchOptions,
- bool eraseSession = true);
- inline void stopTripBatchingMultiplex(LocationAPI* client, uint32_t id,
- bool eraseSession = true) {
- BatchingOptions batchOptions;
- stopTripBatchingMultiplex(client, id, false, batchOptions, eraseSession);
- };
- void stopTripBatchingMultiplexCommon(LocationError err,
- LocationAPI* client,
- uint32_t sessionId,
- bool restartNeeded,
- const BatchingOptions& batchOptions,
- bool eraseSession = true);
- void restartTripBatching(bool queryAccumulatedDistance, uint32_t accDist = 0,
- uint32_t numbatchedPos = 0);
- void printTripReport();
- /* ==== CONFIGURATION ================================================================== */
- uint32_t mBatchingTimeout;
- uint32_t mBatchingAccuracy;
- size_t mBatchSize;
- size_t mTripBatchSize;
- protected:
- /* ==== CLIENT ========================================================================= */
- virtual void updateClientsEventMask();
- virtual void stopClientSessions(LocationAPI* client, bool eraseSession = true);
- public:
- BatchingAdapter();
- virtual ~BatchingAdapter() {}
- /* ==== SSR ============================================================================ */
- /* ======== EVENTS ====(Called from QMI Thread)========================================= */
- virtual void handleEngineUpEvent();
- /* ======== UTILITIES ================================================================== */
- void restartSessions();
- /* ==== BATCHING ======================================================================= */
- /* ======== COMMANDS ====(Called from Client Thread)==================================== */
- uint32_t startBatchingCommand(LocationAPI* client, BatchingOptions &batchOptions);
- void updateBatchingOptionsCommand(
- LocationAPI* client, uint32_t id, BatchingOptions& batchOptions);
- void stopBatchingCommand(LocationAPI* client, uint32_t id);
- void getBatchedLocationsCommand(LocationAPI* client, uint32_t id, size_t count);
- void updateSystemPowerStateCommand(PowerStateType systemPowerState);
- /* ======== RESPONSES ================================================================== */
- void reportResponse(LocationAPI* client, LocationError err, uint32_t sessionId);
- /* ======== UTILITIES ================================================================== */
- bool hasBatchingCallback(LocationAPI* client);
- bool isBatchingSession(LocationAPI* client, uint32_t sessionId);
- bool isTripSession(uint32_t sessionId);
- void saveBatchingSession(LocationAPI* client, uint32_t sessionId,
- const BatchingOptions& batchingOptions);
- void eraseBatchingSession(LocationAPI* client, uint32_t sessionId);
- uint32_t autoReportBatchingSessionsCount();
- void startBatching(LocationAPI* client, uint32_t sessionId,
- const BatchingOptions& batchingOptions);
- void stopBatching(LocationAPI* client, uint32_t sessionId, bool restartNeeded,
- const BatchingOptions& batchOptions, bool eraseSession = true);
- void stopBatching(LocationAPI* client, uint32_t sessionId, bool eraseSession = true) {
- BatchingOptions batchOptions;
- stopBatching(client, sessionId, false, batchOptions, eraseSession);
- };
- void suspendBatchingSessions();
- void updateSystemPowerState(PowerStateType systemPowerState);
- /* ==== REPORTS ======================================================================== */
- /* ======== EVENTS ====(Called from QMI Thread)========================================= */
- void reportLocationsEvent(const Location* locations, size_t count,
- BatchingMode batchingMode);
- void reportCompletedTripsEvent(uint32_t accumulatedDistance);
- void reportBatchStatusChangeEvent(BatchingStatus batchStatus);
- /* ======== UTILITIES ================================================================== */
- void reportLocations(Location* locations, size_t count, BatchingMode batchingMode);
- void reportBatchStatusChange(BatchingStatus batchStatus,
- std::list<uint32_t> & completedTripsList);
- /* ==== CONFIGURATION ================================================================== */
- /* ======== COMMANDS ====(Called from Client Thread)==================================== */
- void readConfigCommand();
- void setConfigCommand();
- /* ======== UTILITIES ================================================================== */
- void setBatchSize(size_t batchSize) { mBatchSize = batchSize; }
- size_t getBatchSize() { return mBatchSize; }
- void setTripBatchSize(size_t batchSize) { mTripBatchSize = batchSize; }
- size_t getTripBatchSize() { return mTripBatchSize; }
- void setBatchingTimeout(uint32_t batchingTimeout) { mBatchingTimeout = batchingTimeout; }
- uint32_t getBatchingTimeout() { return mBatchingTimeout; }
- void setBatchingAccuracy(uint32_t accuracy) { mBatchingAccuracy = accuracy; }
- uint32_t getBatchingAccuracy() { return mBatchingAccuracy; }
- };
- #endif /* BATCHING_ADAPTER_H */
|