summaryrefslogtreecommitdiff
path: root/gps/utils
diff options
context:
space:
mode:
authordianlujitao <dianlujitao@lineageos.org>2020-02-02 16:40:06 +0800
committerdianlujitao <dianlujitao@lineageos.org>2020-02-15 15:49:59 +0800
commit570a57c7abc1a0f0e48698821e0061dd2e807dc5 (patch)
tree345adba6b768011f63e0acb644ee03d87dc944f0 /gps/utils
parentd292a85ea71f9feb85267c21f1f59057018ffd5a (diff)
sdm660-common: Remove GPS HAL for subtree import
Change-Id: Ib18b7d867224557562c3f6a4a20c206f0ec30fec
Diffstat (limited to 'gps/utils')
-rw-r--r--gps/utils/Android.mk63
-rw-r--r--gps/utils/LocHeap.cpp354
-rw-r--r--gps/utils/LocHeap.h96
-rw-r--r--gps/utils/LocIpc.cpp237
-rw-r--r--gps/utils/LocIpc.h153
-rw-r--r--gps/utils/LocSharedLock.h59
-rw-r--r--gps/utils/LocThread.cpp266
-rw-r--r--gps/utils/LocThread.h92
-rw-r--r--gps/utils/LocTimer.cpp753
-rw-r--r--gps/utils/LocTimer.h74
-rw-r--r--gps/utils/LocUnorderedSetMap.h192
-rw-r--r--gps/utils/Makefile.am70
-rw-r--r--gps/utils/MsgTask.cpp105
-rw-r--r--gps/utils/MsgTask.h67
-rw-r--r--gps/utils/configure.ac82
-rw-r--r--gps/utils/gps-utils.pc.in10
-rw-r--r--gps/utils/gps_extended.h106
-rw-r--r--gps/utils/gps_extended_c.h1342
-rw-r--r--gps/utils/linked_list.c325
-rw-r--r--gps/utils/linked_list.h217
-rw-r--r--gps/utils/loc_cfg.cpp1139
-rw-r--r--gps/utils/loc_cfg.h142
-rw-r--r--gps/utils/loc_gps.h2209
-rw-r--r--gps/utils/loc_log.cpp239
-rw-r--r--gps/utils/loc_log.h71
-rw-r--r--gps/utils/loc_misc_utils.cpp114
-rw-r--r--gps/utils/loc_misc_utils.h99
-rw-r--r--gps/utils/loc_nmea.cpp1114
-rw-r--r--gps/utils/loc_nmea.h54
-rw-r--r--gps/utils/loc_target.cpp208
-rw-r--r--gps/utils/loc_target.h78
-rw-r--r--gps/utils/loc_timer.h74
-rw-r--r--gps/utils/log_util.h175
-rw-r--r--gps/utils/msg_q.c333
-rw-r--r--gps/utils/msg_q.h207
35 files changed, 0 insertions, 10919 deletions
diff --git a/gps/utils/Android.mk b/gps/utils/Android.mk
deleted file mode 100644
index b8320de..0000000
--- a/gps/utils/Android.mk
+++ /dev/null
@@ -1,63 +0,0 @@
-ifneq ($(BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE),)
-ifneq ($(BUILD_TINY_ANDROID),true)
-#Compile this library only for builds with the latest modem image
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-
-## Libs
-LOCAL_SHARED_LIBRARIES := \
- libutils \
- libcutils \
- liblog
-
-LOCAL_SRC_FILES += \
- loc_log.cpp \
- loc_cfg.cpp \
- msg_q.c \
- linked_list.c \
- loc_target.cpp \
- LocHeap.cpp \
- LocTimer.cpp \
- LocThread.cpp \
- MsgTask.cpp \
- loc_misc_utils.cpp \
- loc_nmea.cpp \
- LocIpc.cpp
-
-# Flag -std=c++11 is not accepted by compiler when LOCAL_CLANG is set to true
-LOCAL_CFLAGS += \
- -fno-short-enums \
- -D_ANDROID_
-
-ifeq ($(TARGET_BUILD_VARIANT),user)
- LOCAL_CFLAGS += -DTARGET_BUILD_VARIANT_USER
-endif
-
-LOCAL_LDFLAGS += -Wl,--export-dynamic
-
-## Includes
-LOCAL_HEADER_LIBRARIES := \
- libutils_headers \
- libloc_pla_headers \
- liblocation_api_headers
-
-LOCAL_MODULE := libgps.utils
-LOCAL_VENDOR_MODULE := true
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_CFLAGS += $(GNSS_CFLAGS)
-
-include $(BUILD_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libgps.utils_headers
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
-include $(BUILD_HEADER_LIBRARY)
-
-endif # not BUILD_TINY_ANDROID
-endif # BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE
diff --git a/gps/utils/LocHeap.cpp b/gps/utils/LocHeap.cpp
deleted file mode 100644
index d667f14..0000000
--- a/gps/utils/LocHeap.cpp
+++ /dev/null
@@ -1,354 +0,0 @@
-/* Copyright (c) 2015, 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.
- *
- */
-#include <LocHeap.h>
-
-class LocHeapNode {
- friend class LocHeap;
-
- // size of of the subtree, excluding self, 1 if no subtree
- int mSize;
- LocHeapNode* mLeft;
- LocHeapNode* mRight;
- LocRankable* mData;
-public:
- inline LocHeapNode(LocRankable& data) :
- mSize(1), mLeft(NULL), mRight(NULL), mData(&data) {}
- ~LocHeapNode();
-
- // this only swaps the data of the two nodes, so no
- // detach / re-attached is necessary
- void swap(LocHeapNode& node);
-
- LocRankable* detachData();
-
- // push a node into the tree stucture, keeping sorted by rank
- void push(LocHeapNode& node);
-
- // pop the head node out of the tree stucture. keeping sorted by rank
- static LocHeapNode* pop(LocHeapNode*& top);
-
- // remove a specific node from the tree
- // returns the pointer to the node removed, which would be either the
- // same as input (if successfully removed); or NULL (if failed).
- static LocHeapNode* remove(LocHeapNode*& top, LocRankable& data);
-
- // convenience method to compare data ranking
- inline bool outRanks(LocHeapNode& node) { return mData->outRanks(*node.mData); }
- inline bool outRanks(LocRankable& data) { return mData->outRanks(data); }
-
- // checks if mSize is correct, AND this node is the highest ranking
- // of the entire subtree
- bool checkNodes();
-
- inline int getSize() { return mSize; }
-};
-
-inline
-LocHeapNode::~LocHeapNode() {
- if (mLeft) {
- delete mLeft;
- mLeft = NULL;
- }
- if (mRight) {
- delete mRight;
- mRight = NULL;
- }
- if (mData) {
- mData = NULL;
- }
-}
-
-inline
-void LocHeapNode::swap(LocHeapNode& node) {
- LocRankable* tmpData = node.mData;
- node.mData = mData;
- mData = tmpData;
-}
-
-inline
-LocRankable* LocHeapNode::detachData() {
- LocRankable* data = mData;
- mData = NULL;
- return data;
-}
-
-// push keeps the tree sorted by rank, it also tries to balance the
-// tree by adding the new node to the smaller of the subtrees.
-// The pointer to the tree and internal links never change. If the
-// mData of tree top ranks lower than that of the incoming node,
-// mData will be swapped with that of the incoming node to ensure
-// ranking, no restructuring the container nodes.
-void LocHeapNode::push(LocHeapNode& node) {
- // ensure the current node ranks higher than in the incoming one
- if (node.outRanks(*this)) {
- swap(node);
- }
-
- // now drop the new node (ensured lower than *this) into a subtree
- if (NULL == mLeft) {
- mLeft = &node;
- } else if (NULL == mRight) {
- mRight = &node;
- } else if (mLeft->mSize <= mRight->mSize) {
- mLeft->push(node);
- } else {
- mRight->push(node);
- }
- mSize++;
-}
-
-// pop keeps the tree sorted by rank, but it does not try to balance
-// the tree. It recursively swaps with the higher ranked top of the
-// subtrees.
-// The return is a popped out node from leaf level, that has the data
-// swapped all the way down from the top. The pinter to the tree and
-// internal links will not be changed or restructured, except for the
-// node that is popped out.
-// If the return pointer == this, this the last node in the tree.
-LocHeapNode* LocHeapNode::pop(LocHeapNode*& top) {
- // we know the top has the highest ranking at this point, else
- // the tree is broken. This top will be popped out. But we need
- // a node from the left or right child, whichever ranks higher,
- // to replace the current top. This then will need to be done
- // recursively to the leaf level. So we swap the mData of the
- // current top node all the way down to the leaf level.
- LocHeapNode* poppedNode = top;
- // top is losing a node in its subtree
- top->mSize--;
- if (top->mLeft || top->mRight) {
- // if mLeft is NULL, mRight for sure is NOT NULL, take that;
- // else if mRight is NULL, mLeft for sure is NOT, take that;
- // else we take the address of whatever has higher ranking mData
- LocHeapNode*& subTop = (NULL == top->mLeft) ? top->mRight :
- ((NULL == top->mRight) ? top->mLeft :
- (top->mLeft->outRanks(*(top->mRight)) ? top->mLeft : top->mRight));
- // swap mData, the tree top gets updated with the new data.
- top->swap(*subTop);
- // pop out from the subtree
- poppedNode = pop(subTop);
- } else {
- // if the top has only single node
- // detach the poppedNode from the tree
- // subTop is the reference of ether mLeft or mRight
- // NOT a local stack pointer. so it MUST be NULL'ed here.
- top = NULL;
- }
-
- return poppedNode;
-}
-
-// navigating through the tree and find the node that hass the input
-// data. Since this is a heap, we do recursive linear search.
-// returns the pointer to the node removed, which would be either the
-// same as input (if successfully removed); or NULL (if failed).
-LocHeapNode* LocHeapNode::remove(LocHeapNode*& top, LocRankable& data) {
- LocHeapNode* removedNode = NULL;
- // this is the node, by address
- if (&data == (LocRankable*)(top->mData)) {
- // pop this node out
- removedNode = pop(top);
- } else if (!data.outRanks(*top->mData)) {
- // subtrees might have this node
- if (top->mLeft) {
- removedNode = remove(top->mLeft, data);
- }
- // if we did not find in mLeft, and mRight is not empty
- if (!removedNode && top->mRight) {
- removedNode = remove(top->mRight, data);
- }
-
- // top lost a node in its subtree
- if (removedNode) {
- top->mSize--;
- }
- }
-
- return removedNode;
-}
-
-// checks if mSize is correct, AND this node is the highest ranking
-// of the entire subtree
-bool LocHeapNode::checkNodes() {
- // size of the current subtree
- int totalSize = mSize;
- if (mLeft) {
- // check the consistency of left subtree
- if (mLeft->outRanks(*this) || !mLeft->checkNodes()) {
- return false;
- }
- // subtract the size of left subtree (with subtree head)
- totalSize -= mLeft->mSize;
- }
-
- if (mRight) {
- // check the consistency of right subtree
- if (mRight->outRanks(*this) || !mRight->checkNodes()) {
- return false;
- }
- // subtract the size of right subtree (with subtree head)
- totalSize -= mRight->mSize;
- }
-
- // for the tree nodes to consistent, totalSize must be 1 now
- return totalSize == 1;
-}
-
-LocHeap::~LocHeap() {
- if (mTree) {
- delete mTree;
- }
-}
-
-void LocHeap::push(LocRankable& node) {
- LocHeapNode* heapNode = new LocHeapNode(node);
- if (!mTree) {
- mTree = heapNode;
- } else {
- mTree->push(*heapNode);
- }
-}
-
-LocRankable* LocHeap::peek() {
- LocRankable* top = NULL;
- if (mTree) {
- top = mTree->mData;
- }
- return top;
-}
-
-LocRankable* LocHeap::pop() {
- LocRankable* locNode = NULL;
- if (mTree) {
- // mTree may become NULL after this call
- LocHeapNode* heapNode = LocHeapNode::pop(mTree);
- locNode = heapNode->detachData();
- delete heapNode;
- }
- return locNode;
-}
-
-LocRankable* LocHeap::remove(LocRankable& rankable) {
- LocRankable* locNode = NULL;
- if (mTree) {
- // mTree may become NULL after this call
- LocHeapNode* heapNode = LocHeapNode::remove(mTree, rankable);
- if (heapNode) {
- locNode = heapNode->detachData();
- delete heapNode;
- }
- }
- return locNode;
-}
-
-#ifdef __LOC_UNIT_TEST__
-bool LocHeap::checkTree() {
- return ((NULL == mTree) || mTree->checkNodes());
-}
-uint32_t LocHeap::getTreeSize() {
- return (NULL == mTree) ? 0 : mTree->getSize();
-}
-#endif
-
-#ifdef __LOC_DEBUG__
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-class LocHeapDebug : public LocHeap {
-public:
- bool checkTree() {
- return ((NULL == mTree) || mTree->checkNodes());
- }
-
- uint32_t getTreeSize() {
- return (NULL == mTree) ? 0 : (mTree->getSize());
- }
-};
-
-class LocHeapDebugData : public LocRankable {
- const int mID;
-public:
- LocHeapDebugData(int id) : mID(id) {}
- inline virtual int ranks(LocRankable& rankable) {
- LocHeapDebugData* testData = dynamic_cast<LocHeapDebugData*>(&rankable);
- return testData->mID - mID;
- }
-};
-
-// For Linux command line testing:
-// compilation: g++ -D__LOC_HOST_DEBUG__ -D__LOC_DEBUG__ -g -I. -I../../../../vendor/qcom/proprietary/gps-internal/unit-tests/fakes_for_host -I../../../../system/core/include LocHeap.cpp
-// test: valgrind --leak-check=full ./a.out 100
-int main(int argc, char** argv) {
- srand(time(NULL));
- int tries = atoi(argv[1]);
- int checks = tries >> 3;
- LocHeapDebug heap;
- int treeSize = 0;
-
- for (int i = 0; i < tries; i++) {
- if (i % checks == 0 && !heap.checkTree()) {
- printf("tree check failed before %dth op\n", i);
- }
- int r = rand();
-
- if (r & 1) {
- LocHeapDebugData* data = new LocHeapDebugData(r >> 1);
- heap.push(dynamic_cast<LocRankable&>(*data));
- treeSize++;
- } else {
- LocRankable* rankable = heap.pop();
- if (rankable) {
- delete rankable;
- }
- treeSize ? treeSize-- : 0;
- }
-
- printf("%s: %d == %d\n", (r&1)?"push":"pop", treeSize, heap.getTreeSize());
- if (treeSize != heap.getTreeSize()) {
- printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
- tries = i+1;
- break;
- }
- }
-
- if (!heap.checkTree()) {
- printf("!!!!!!!!!!tree check failed at the end after %d ops!!!!!!!\n", tries);
- } else {
- printf("success!\n");
- }
-
- for (LocRankable* data = heap.pop(); NULL != data; data = heap.pop()) {
- delete data;
- }
-
- return 0;
-}
-
-#endif
diff --git a/gps/utils/LocHeap.h b/gps/utils/LocHeap.h
deleted file mode 100644
index b491948..0000000
--- a/gps/utils/LocHeap.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright (c) 2015, 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 __LOC_HEAP__
-#define __LOC_HEAP__
-
-#include <stddef.h>
-#include <string.h>
-
-// abstract class to be implemented by client to provide a rankable class
-class LocRankable {
-public:
- virtual inline ~LocRankable() {}
-
- // method to rank objects of such type for sorting purposes.
- // The pointer of the input node would be stored in the heap.
- // >0 if ranks higher than the input;
- // ==0 if equally ranks with the input;
- // <0 if ranks lower than the input
- virtual int ranks(LocRankable& rankable) = 0;
-
- // convenient method to rank objects of such type for sorting purposes.
- inline bool outRanks(LocRankable& rankable) { return ranks(rankable) > 0; }
-};
-
-// opaque class to provide service implementation.
-class LocHeapNode;
-
-// a heap whose left and right children are not sorted. It is sorted only vertically,
-// i.e. parent always ranks higher than children, if they exist. Ranking algorithm is
-// implemented in Rankable. The reason that there is no sort between children is to
-// help beter balance the tree with lower cost. When a node is pushed to the tree,
-// it is guaranteed that the subtree that is smaller gets to have the new node.
-class LocHeap {
-protected:
- LocHeapNode* mTree;
-public:
- inline LocHeap() : mTree(NULL) {}
- ~LocHeap();
-
- // push keeps the tree sorted by rank, it also tries to balance the
- // tree by adding the new node to the smaller of the subtrees.
- // node is reference to an obj that is managed by client, that client
- // creates and destroyes. The destroy should happen after the
- // node is popped out from the heap.
- void push(LocRankable& node);
-
- // Peeks the node data on tree top, which has currently the highest ranking
- // There is no change the tree structure with this operation
- // Returns NULL if the tree is empty, otherwise pointer to the node data of
- // the tree top.
- LocRankable* peek();
-
- // pop keeps the tree sorted by rank, but it does not try to balance
- // the tree.
- // Return - pointer to the node popped out, or NULL if heap is already empty
- LocRankable* pop();
-
- // navigating through the tree and find the node that ranks the same
- // as the input data, then remove it from the tree. Rank is implemented
- // by rankable obj.
- // returns the pointer to the node removed; or NULL (if failed).
- LocRankable* remove(LocRankable& rankable);
-
-#ifdef __LOC_UNIT_TEST__
- bool checkTree();
- uint32_t getTreeSize();
-#endif
-};
-
-#endif //__LOC_HEAP__
diff --git a/gps/utils/LocIpc.cpp b/gps/utils/LocIpc.cpp
deleted file mode 100644
index 675664a..0000000
--- a/gps/utils/LocIpc.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/* Copyright (c) 2017-2018 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.
- *
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <log_util.h>
-#include "LocIpc.h"
-
-namespace loc_util {
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "LocSvc_LocIpc"
-
-#define LOC_MSG_BUF_LEN 8192
-#define LOC_MSG_HEAD "$MSGLEN$"
-#define LOC_MSG_ABORT "LocIpcMsg::ABORT"
-
-class LocIpcRunnable : public LocRunnable {
-friend LocIpc;
-public:
- LocIpcRunnable(LocIpc& locIpc, const std::string& ipcName)
- : mLocIpc(locIpc), mIpcName(ipcName) {}
- bool run() override {
- if (!mLocIpc.startListeningBlocking(mIpcName)) {
- LOC_LOGe("listen to socket failed");
- }
-
- return false;
- }
-private:
- LocIpc& mLocIpc;
- const std::string mIpcName;
-};
-
-bool LocIpc::startListeningNonBlocking(const std::string& name) {
- mRunnable = new LocIpcRunnable(*this, name);
- std::string threadName("LocIpc-");
- threadName.append(name);
- return mThread.start(threadName.c_str(), mRunnable);
-}
-
-bool LocIpc::startListeningBlocking(const std::string& name) {
-
- int fd = socket(AF_UNIX, SOCK_DGRAM, 0);
- if (fd < 0) {
- LOC_LOGe("create socket error. reason:%s", strerror(errno));
- return false;
- }
-
- if ((unlink(name.c_str()) < 0) && (errno != ENOENT)) {
- LOC_LOGw("unlink socket error. reason:%s", strerror(errno));
- }
-
- struct sockaddr_un addr = { .sun_family = AF_UNIX };
- snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", name.c_str());
-
- umask(0157);
-
- if (::bind(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
- LOC_LOGe("bind socket error. reason:%s", strerror(errno));
- ::close(fd);
- fd = -1;
- return false;
- }
-
- mIpcFd = fd;
-
- // inform that the socket is ready to receive message
- onListenerReady();
-
- ssize_t nBytes = 0;
- std::string msg = "";
- std::string abort = LOC_MSG_ABORT;
- while (1) {
- msg.resize(LOC_MSG_BUF_LEN);
- nBytes = ::recvfrom(mIpcFd, (void*)(msg.data()), msg.size(), 0, NULL, NULL);
- if (nBytes < 0) {
- break;
- } else if (nBytes == 0) {
- continue;
- }
-
- if (strncmp(msg.data(), abort.c_str(), abort.length()) == 0) {
- LOC_LOGi("recvd abort msg.data %s", msg.data());
- break;
- }
-
- if (strncmp(msg.data(), LOC_MSG_HEAD, sizeof(LOC_MSG_HEAD) - 1)) {
- // short message
- msg.resize(nBytes);
- onReceive(msg);
- } else {
- // long message
- size_t msgLen = 0;
- sscanf(msg.data(), LOC_MSG_HEAD"%zu", &msgLen);
- msg.resize(msgLen);
- size_t msgLenReceived = 0;
- while ((msgLenReceived < msgLen) && (nBytes > 0)) {
- nBytes = recvfrom(mIpcFd, (void*)&(msg[msgLenReceived]),
- msg.size() - msgLenReceived, 0, NULL, NULL);
- msgLenReceived += nBytes;
- }
- if (nBytes > 0) {
- onReceive(msg);
- } else {
- break;
- }
- }
- }
-
- if (mStopRequested) {
- mStopRequested = false;
- return true;
- } else {
- LOC_LOGe("cannot read socket. reason:%s", strerror(errno));
- (void)::close(mIpcFd);
- mIpcFd = -1;
- return false;
- }
-}
-
-void LocIpc::stopListening() {
-
- const char *socketName = nullptr;
- mStopRequested = true;
-
- if (mRunnable) {
- std::string abort = LOC_MSG_ABORT;
- socketName = (reinterpret_cast<LocIpcRunnable *>(mRunnable))->mIpcName.c_str();
- send(socketName, abort);
- mRunnable = nullptr;
- }
-
- if (mIpcFd >= 0) {
- if (::close(mIpcFd)) {
- LOC_LOGe("cannot close socket:%s", strerror(errno));
- }
- mIpcFd = -1;
- }
-
- //delete from the file system at the end
- if (socketName) {
- unlink(socketName);
- }
-}
-
-bool LocIpc::send(const char name[], const std::string& data) {
- return send(name, (const uint8_t*)data.c_str(), data.length());
-}
-
-bool LocIpc::send(const char name[], const uint8_t data[], uint32_t length) {
-
- bool result = true;
- int fd = ::socket(AF_UNIX, SOCK_DGRAM, 0);
- if (fd < 0) {
- LOC_LOGe("create socket error. reason:%s", strerror(errno));
- return false;
- }
-
- struct sockaddr_un addr = { .sun_family = AF_UNIX };
- snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", name);
-
- result = sendData(fd, addr, data, length);
-
- (void)::close(fd);
- return result;
-}
-
-
-bool LocIpc::sendData(int fd, const sockaddr_un &addr, const uint8_t data[], uint32_t length) {
-
- bool result = true;
-
- if (length <= LOC_MSG_BUF_LEN) {
- if (::sendto(fd, data, length, 0,
- (struct sockaddr*)&addr, sizeof(addr)) < 0) {
- LOC_LOGe("cannot send to socket. reason:%s", strerror(errno));
- result = false;
- }
- } else {
- std::string head = LOC_MSG_HEAD;
- head.append(std::to_string(length));
- if (::sendto(fd, head.c_str(), head.length(), 0,
- (struct sockaddr*)&addr, sizeof(addr)) < 0) {
- LOC_LOGe("cannot send to socket. reason:%s", strerror(errno));
- result = false;
- } else {
- size_t sentBytes = 0;
- while(sentBytes < length) {
- size_t partLen = length - sentBytes;
- if (partLen > LOC_MSG_BUF_LEN) {
- partLen = LOC_MSG_BUF_LEN;
- }
- ssize_t rv = ::sendto(fd, data + sentBytes, partLen, 0,
- (struct sockaddr*)&addr, sizeof(addr));
- if (rv < 0) {
- LOC_LOGe("cannot send to socket. reason:%s", strerror(errno));
- result = false;
- break;
- }
- sentBytes += rv;
- }
- }
- }
- return result;
-}
-
-}
diff --git a/gps/utils/LocIpc.h b/gps/utils/LocIpc.h
deleted file mode 100644
index 364093b..0000000
--- a/gps/utils/LocIpc.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Copyright (c) 2017-2018 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 __LOC_SOCKET__
-#define __LOC_SOCKET__
-
-#include <string>
-#include <memory>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <LocThread.h>
-
-namespace loc_util {
-
-class LocIpcSender;
-
-class LocIpc {
-friend LocIpcSender;
-public:
- inline LocIpc() : mIpcFd(-1), mStopRequested(false), mRunnable(nullptr) {}
- inline virtual ~LocIpc() { stopListening(); }
-
- // Listen for new messages in current thread. Calling this funciton will
- // block current thread. The listening can be stopped by calling stopListening().
- //
- // Argument name is the path of the unix local socket to be listened.
- // The function will return true on success, and false on failure.
- bool startListeningBlocking(const std::string& name);
-
- // Create a new LocThread and listen for new messages in it.
- // Calling this function will return immediately and won't block current thread.
- // The listening can be stopped by calling stopListening().
- //
- // Argument name is the path of the unix local socket to be be listened.
- // The function will return true on success, and false on failure.
- bool startListeningNonBlocking(const std::string& name);
-
- // Stop listening to new messages.
- void stopListening();
-
- // Send out a message.
- // Call this function to send a message in argument data to socket in argument name.
- //
- // Argument name contains the name of the target unix socket. data contains the
- // message to be sent out. Convert your message to a string before calling this function.
- // The function will return true on success, and false on failure.
- static bool send(const char name[], const std::string& data);
- static bool send(const char name[], const uint8_t data[], uint32_t length);
-
-protected:
- // Callback function for receiving incoming messages.
- // Override this function in your derived class to process incoming messages.
- // For each received message, this callback function will be called once.
- // This callback function will be called in the calling thread of startListeningBlocking
- // or in the new LocThread created by startListeningNonBlocking.
- //
- // Argument data contains the received message. You need to parse it.
- inline virtual void onReceive(const std::string& /*data*/) {}
-
- // LocIpc client can overwrite this function to get notification
- // when the socket for LocIpc is ready to receive messages.
- inline virtual void onListenerReady() {}
-
-private:
- static bool sendData(int fd, const sockaddr_un& addr,
- const uint8_t data[], uint32_t length);
-
- int mIpcFd;
- bool mStopRequested;
- LocThread mThread;
- LocRunnable *mRunnable;
-};
-
-class LocIpcSender {
-public:
- // Constructor of LocIpcSender class
- //
- // Argument destSocket contains the full path name of destination socket.
- // This class hides generated fd and destination address object from user.
- inline LocIpcSender(const char* destSocket):
- LocIpcSender(std::make_shared<int>(::socket(AF_UNIX, SOCK_DGRAM, 0)), destSocket) {
- if (-1 == *mSocket) {
- mSocket = nullptr;
- }
- }
-
- // Replicate a new LocIpcSender object with new destination socket.
- inline LocIpcSender* replicate(const char* destSocket) {
- return (nullptr == mSocket) ? nullptr : new LocIpcSender(mSocket, destSocket);
- }
-
- inline ~LocIpcSender() {
- if (nullptr != mSocket && mSocket.unique()) {
- ::close(*mSocket);
- }
- }
-
- // Send out a message.
- // Call this function to send a message
- //
- // Argument data and length contains the message to be sent out.
- // Return true when succeeded
- inline bool send(const uint8_t data[], uint32_t length) {
- bool rtv = false;
- if (nullptr != mSocket && nullptr != data) {
- rtv = LocIpc::sendData(*mSocket, mDestAddr, data, length);
- }
- return rtv;
- }
-
-private:
- std::shared_ptr<int> mSocket;
- struct sockaddr_un mDestAddr;
-
- inline LocIpcSender(
- const std::shared_ptr<int>& mySocket, const char* destSocket) : mSocket(mySocket) {
- if ((nullptr != mSocket) && (-1 != *mSocket) && (nullptr != destSocket)) {
- mDestAddr.sun_family = AF_UNIX;
- snprintf(mDestAddr.sun_path, sizeof(mDestAddr.sun_path), "%s", destSocket);
- }
- }
-};
-
-}
-
-#endif //__LOC_SOCKET__
diff --git a/gps/utils/LocSharedLock.h b/gps/utils/LocSharedLock.h
deleted file mode 100644
index 7fe6237..0000000
--- a/gps/utils/LocSharedLock.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) 2015, 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 __LOC_SHARED_LOCK__
-#define __LOC_SHARED_LOCK__
-
-#include <stddef.h>
-#include <cutils/atomic.h>
-#include <pthread.h>
-
-// This is a utility created for use cases such that there are more than
-// one client who need to share the same lock, but it is not predictable
-// which of these clients is to last to go away. This shared lock deletes
-// itself when the last client calls its drop() method. To add a cient,
-// this share lock's share() method has to be called, so that the obj
-// can maintain an accurate client count.
-class LocSharedLock {
- volatile int32_t mRef;
- pthread_mutex_t mMutex;
- inline ~LocSharedLock() { pthread_mutex_destroy(&mMutex); }
-public:
- // first client to create this LockSharedLock
- inline LocSharedLock() : mRef(1) { pthread_mutex_init(&mMutex, NULL); }
- // following client(s) are to *share()* this lock created by the first client
- inline LocSharedLock* share() { android_atomic_inc(&mRef); return this; }
- // whe a client no longer needs this shared lock, drop() shall be called.
- inline void drop() { if (1 == android_atomic_dec(&mRef)) delete this; }
- // locking the lock to enter critical section
- inline void lock() { pthread_mutex_lock(&mMutex); }
- // unlocking the lock to leave the critical section
- inline void unlock() { pthread_mutex_unlock(&mMutex); }
-};
-
-#endif //__LOC_SHARED_LOCK__
diff --git a/gps/utils/LocThread.cpp b/gps/utils/LocThread.cpp
deleted file mode 100644
index c1052cb..0000000
--- a/gps/utils/LocThread.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-/* Copyright (c) 2015, 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.
- *
- */
-#include <LocThread.h>
-#include <string.h>
-#include <pthread.h>
-#include <loc_pla.h>
-
-class LocThreadDelegate {
- LocRunnable* mRunnable;
- bool mJoinable;
- pthread_t mThandle;
- pthread_mutex_t mMutex;
- int mRefCount;
- ~LocThreadDelegate();
- LocThreadDelegate(LocThread::tCreate creator, const char* threadName,
- LocRunnable* runnable, bool joinable);
- void destroy();
-public:
- static LocThreadDelegate* create(LocThread::tCreate creator,
- const char* threadName, LocRunnable* runnable, bool joinable);
- void stop();
- // bye() is for the parent thread to go away. if joinable,
- // parent must stop the spawned thread, join, and then
- // destroy(); if detached, the parent can go straight
- // ahead to destroy()
- inline void bye() { mJoinable ? stop() : destroy(); }
- inline bool isRunning() { return (NULL != mRunnable); }
- static void* threadMain(void* arg);
-};
-
-// it is important to note that internal members must be
-// initialized to values as if pthread_create succeeds.
-// This is to avoid the race condition between the threads,
-// once the thread is created, some of these values will
-// be check in the spawned thread, and must set correctly
-// then and there.
-// However, upon pthread_create failure, the data members
-// must be set to indicate failure, e.g. mRunnable, and
-// threashold approprietly for destroy(), e.g. mRefCount.
-LocThreadDelegate::LocThreadDelegate(LocThread::tCreate creator,
- const char* threadName, LocRunnable* runnable, bool joinable) :
- mRunnable(runnable), mJoinable(joinable), mThandle((pthread_t)NULL),
- mMutex(PTHREAD_MUTEX_INITIALIZER), mRefCount(2) {
-
- // set up thread name, if nothing is passed in
- if (!threadName) {
- threadName = "LocThread";
- }
-
- // create the thread here, then if successful
- // and a name is given, we set the thread name
- if (creator) {
- mThandle = creator(threadName, threadMain, this);
- } else if (pthread_create(&mThandle, NULL, threadMain, this)) {
- // pthread_create() failed
- mThandle = (pthread_t)NULL;
- }
-
- if (mThandle) {
- // set thread name
- char lname[16];
- int len = (sizeof(lname)>sizeof(threadName)) ?
- (sizeof(threadName) -1):(sizeof(lname) - 1);
- memcpy(lname, threadName, len);
- lname[len] = 0;
- // set the thread name here
- pthread_setname_np(mThandle, lname);
-
- // detach, if not joinable
- if (!joinable) {
- pthread_detach(mThandle);
- }
- } else {
- // must set these values upon failure
- mRunnable = NULL;
- mJoinable = false;
- mRefCount = 1;
- }
-}
-
-inline
-LocThreadDelegate::~LocThreadDelegate() {
- // at this point nothing should need done any more
-}
-
-// factory method so that we could return NULL upon failure
-LocThreadDelegate* LocThreadDelegate::create(LocThread::tCreate creator,
- const char* threadName, LocRunnable* runnable, bool joinable) {
- LocThreadDelegate* thread = NULL;
- if (runnable) {
- thread = new LocThreadDelegate(creator, threadName, runnable, joinable);
- if (thread && !thread->isRunning()) {
- thread->destroy();
- thread = NULL;
- }
- }
-
- return thread;
-}
-
-// The order is importang
-// NULLing mRunnalbe stops the while loop in threadMain()
-// join() if mJoinble must come before destroy() call, as
-// the obj must remain alive at this time so that mThandle
-// remains valud.
-void LocThreadDelegate::stop() {
- // mRunnable and mJoinable are reset on different triggers.
- // mRunnable may get nulled on the spawned thread's way out;
- // or here.
- // mJouinable (if ever been true) gets falsed when client
- // thread triggers stop, with either a stop()
- // call or the client releases thread obj handle.
- if (mRunnable) {
- mRunnable = NULL;
- }
- if (mJoinable) {
- mJoinable = false;
- pthread_join(mThandle, NULL);
- }
- // call destroy() to possibly delete the obj
- destroy();
-}
-
-// method for clients to call to release the obj
-// when it is a detached thread, the client thread
-// and the spawned thread can both try to destroy()
-// asynchronously. And we delete this obj when
-// mRefCount becomes 0.
-void LocThreadDelegate::destroy() {
- // else case shouldn't happen, unless there is a
- // leaking obj. But only our code here has such
- // obj, so if we test our code well, else case
- // will never happen
- if (mRefCount > 0) {
- // we need a flag on the stack
- bool callDelete = false;
-
- // critical section between threads
- pthread_mutex_lock(&mMutex);
- // last destroy() call
- callDelete = (1 == mRefCount--);
- pthread_mutex_unlock(&mMutex);
-
- // upon last destroy() call we delete this obj
- if (callDelete) {
- delete this;
- }
- }
-}
-
-void* LocThreadDelegate::threadMain(void* arg) {
- LocThreadDelegate* locThread = (LocThreadDelegate*)(arg);
-
- if (locThread) {
- LocRunnable* runnable = locThread->mRunnable;
-
- if (runnable) {
- if (locThread->isRunning()) {
- runnable->prerun();
- }
-
- while (locThread->isRunning() && runnable->run());
-
- if (locThread->isRunning()) {
- runnable->postrun();
- }
-
- // at this time, locThread->mRunnable may or may not be NULL
- // NULL it just to be safe and clean, as we want the field
- // in the released memory slot to be NULL.
- locThread->mRunnable = NULL;
- delete runnable;
- }
- locThread->destroy();
- }
-
- return NULL;
-}
-
-LocThread::~LocThread() {
- if (mThread) {
- mThread->bye();
- mThread = NULL;
- }
-}
-
-bool LocThread::start(tCreate creator, const char* threadName, LocRunnable* runnable, bool joinable) {
- bool success = false;
- if (!mThread) {
- mThread = LocThreadDelegate::create(creator, threadName, runnable, joinable);
- // true only if thread is created successfully
- success = (NULL != mThread);
- }
- return success;
-}
-
-void LocThread::stop() {
- if (mThread) {
- mThread->stop();
- mThread = NULL;
- }
-}
-
-#ifdef __LOC_DEBUG__
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-class LocRunnableTest1 : public LocRunnable {
- int mID;
-public:
- LocRunnableTest1(int id) : LocRunnable(), mID(id) {}
- virtual bool run() {
- printf("LocRunnableTest1: %d\n", mID++);
- sleep(1);
- return true;
- }
-};
-
-// on linux command line:
-// compile: g++ -D__LOC_HOST_DEBUG__ -D__LOC_DEBUG__ -g -std=c++0x -I. -I../../../../vendor/qcom/proprietary/gps-internal/unit-tests/fakes_for_host -I../../../../system/core/include -lpthread LocThread.cpp
-// test detached thread: valgrind ./a.out 0
-// test joinable thread: valgrind ./a.out 1
-int main(int argc, char** argv) {
- LocRunnableTest1 test(10);
-
- LocThread thread;
- thread.start("LocThreadTest", test, atoi(argv[1]));
-
- sleep(10);
-
- thread.stop();
-
- sleep(5);
-
- return 0;
-}
-
-#endif
diff --git a/gps/utils/LocThread.h b/gps/utils/LocThread.h
deleted file mode 100644
index 2a65d8f..0000000
--- a/gps/utils/LocThread.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright (c) 2015, 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 __LOC_THREAD__
-#define __LOC_THREAD__
-
-#include <stddef.h>
-#include <pthread.h>
-
-// abstract class to be implemented by client to provide a runnable class
-// which gets scheduled by LocThread
-class LocRunnable {
-public:
- inline LocRunnable() {}
- inline virtual ~LocRunnable() {}
-
- // The method to be implemented by thread clients
- // and be scheduled by LocThread
- // This method will be repeated called until it returns false; or
- // until thread is stopped.
- virtual bool run() = 0;
-
- // The method to be run before thread loop (conditionally repeatedly)
- // calls run()
- inline virtual void prerun() {}
-
- // The method to be run after thread loop (conditionally repeatedly)
- // calls run()
- inline virtual void postrun() {}
-};
-
-// opaque class to provide service implementation.
-class LocThreadDelegate;
-
-// A utility class to create a thread and run LocRunnable
-// caller passes in.
-class LocThread {
- LocThreadDelegate* mThread;
-public:
- inline LocThread() : mThread(NULL) {}
- virtual ~LocThread();
-
- typedef pthread_t (*tCreate)(const char* name, void* (*start)(void*), void* arg);
- // client starts thread with a runnable, which implements
- // the logics to fun in the created thread context.
- // The thread could be either joinable or detached.
- // runnable is an obj managed by client. Client creates and
- // frees it (but must be after stop() is called, or
- // this LocThread obj is deleted).
- // The obj will be deleted by LocThread if start()
- // returns true. Else it is client's responsibility
- // to delete the object
- // Returns 0 if success; false if failure.
- bool start(tCreate creator, const char* threadName, LocRunnable* runnable, bool joinable = true);
- inline bool start(const char* threadName, LocRunnable* runnable, bool joinable = true) {
- return start(NULL, threadName, runnable, joinable);
- }
-
- // NOTE: if this is a joinable thread, this stop may block
- // for a while until the thread is joined.
- void stop();
-
- // thread status check
- inline bool isRunning() { return NULL != mThread; }
-};
-
-#endif //__LOC_THREAD__
diff --git a/gps/utils/LocTimer.cpp b/gps/utils/LocTimer.cpp
deleted file mode 100644
index 93775d0..0000000
--- a/gps/utils/LocTimer.cpp
+++ /dev/null
@@ -1,753 +0,0 @@
-/* Copyright (c) 2015, 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.
- *
- */
-
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <errno.h>
-#include <sys/timerfd.h>
-#include <sys/epoll.h>
-#include <log_util.h>
-#include <loc_timer.h>
-#include <LocTimer.h>
-#include <LocHeap.h>
-#include <LocThread.h>
-#include <LocSharedLock.h>
-#include <MsgTask.h>
-
-#ifdef __HOST_UNIT_TEST__
-#define EPOLLWAKEUP 0
-#define CLOCK_BOOTTIME CLOCK_MONOTONIC
-#define CLOCK_BOOTTIME_ALARM CLOCK_MONOTONIC
-#endif
-
-/*
-There are implementations of 5 classes in this file:
-LocTimer, LocTimerDelegate, LocTimerContainer, LocTimerPollTask, LocTimerWrapper
-
-LocTimer - client front end, interface for client to start / stop timers, also
- to provide a callback.
-LocTimerDelegate - an internal timer entity, which also is a LocRankable obj.
- Its life cycle is different than that of LocTimer. It gets
- created when LocTimer::start() is called, and gets deleted
- when it expires or clients calls the hosting LocTimer obj's
- stop() method. When a LocTimerDelegate obj is ticking, it
- stays in the corresponding LocTimerContainer. When expired
- or stopped, the obj is removed from the container. Since it
- is also a LocRankable obj, and LocTimerContainer also is a
- heap, its ranks() implementation decides where it is placed
- in the heap.
-LocTimerContainer - core of the timer service. It is a container (derived from
- LocHeap) for LocTimerDelegate (implements LocRankable) objs.
- There are 2 of such containers, one for sw timers (or Linux
- timers) one for hw timers (or Linux alarms). It adds one of
- each (those that expire the soonest) to kernel via services
- provided by LocTimerPollTask. All the heap management on the
- LocTimerDelegate objs are done in the MsgTask context, such
- that synchronization is ensured.
-LocTimerPollTask - is a class that wraps timerfd and epoll POXIS APIs. It also
- both implements LocRunnalbe with epoll_wait() in the run()
- method. It is also a LocThread client, so as to loop the run
- method.
-LocTimerWrapper - a LocTimer client itself, to implement the existing C API with
- APIs, loc_timer_start() and loc_timer_stop().
-
-*/
-
-class LocTimerPollTask;
-
-// This is a multi-functaional class that:
-// * extends the LocHeap class for the detection of head update upon add / remove
-// events. When that happens, soonest time out changes, so timerfd needs update.
-// * contains the timers, and add / remove them into the heap
-// * provides and maps 2 of such containers, one for timers (or mSwTimers), one
-// for alarms (or mHwTimers);
-// * provides a polling thread;
-// * provides a MsgTask thread for synchronized add / remove / timer client callback.
-class LocTimerContainer : public LocHeap {
- // mutex to synchronize getters of static members
- static pthread_mutex_t mMutex;
- // Container of timers
- static LocTimerContainer* mSwTimers;
- // Container of alarms
- static LocTimerContainer* mHwTimers;
- // Msg task to provider msg Q, sender and reader.
- static MsgTask* mMsgTask;
- // Poll task to provide epoll call and threading to poll.
- static LocTimerPollTask* mPollTask;
- // timer / alarm fd
- int mDevFd;
- // ctor
- LocTimerContainer(bool wakeOnExpire);
- // dtor
- ~LocTimerContainer();
- static MsgTask* getMsgTaskLocked();
- static LocTimerPollTask* getPollTaskLocked();
- // extend LocHeap and pop if the top outRanks input
- LocTimerDelegate* popIfOutRanks(LocTimerDelegate& timer);
- // update the timer POSIX calls with updated soonest timer spec
- void updateSoonestTime(LocTimerDelegate* priorTop);
-
-public:
- // factory method to control the creation of mSwTimers / mHwTimers
- static LocTimerContainer* get(bool wakeOnExpire);
-
- LocTimerDelegate* getSoonestTimer();
- int getTimerFd();
- // add a timer / alarm obj into the container
- void add(LocTimerDelegate& timer);
- // remove a timer / alarm obj from the container
- void remove(LocTimerDelegate& timer);
- // handling of timer / alarm expiration
- void expire();
-};
-
-// This class implements the polling thread that epolls imer / alarm fds.
-// The LocRunnable::run() contains the actual polling. The other methods
-// will be run in the caller's thread context to add / remove timer / alarm
-// fds the kernel, while the polling is blocked on epoll_wait() call.
-// Since the design is that we have maximally 2 polls, one for all the
-// timers; one for all the alarms, we will poll at most on 2 fds. But it
-// is possile that all we have are only timers or alarms at one time, so we
-// allow dynamically add / remove fds we poll on. The design decision of
-// having 1 fd per container of timer / alarm is such that, we may not need
-// to make a system call each time a timer / alarm is added / removed, unless
-// that changes the "soonest" time out of that of all the timers / alarms.
-class LocTimerPollTask : public LocRunnable {
- // the epoll fd
- const int mFd;
- // the thread that calls run() method
- LocThread* mThread;
- friend class LocThreadDelegate;
- // dtor
- ~LocTimerPollTask();
-public:
- // ctor
- LocTimerPollTask();
- // this obj will be deleted once thread is deleted
- void destroy();
- // add a container of timers. Each contain has a unique device fd, i.e.
- // either timer or alarm fd, and a heap of timers / alarms. It is expected
- // that container would have written to the device fd with the soonest
- // time out value in the heap at the time of calling this method. So all
- // this method does is to add the fd of the input container to the poll
- // and also add the pointer of the container to the event data ptr, such
- // when poll_wait wakes up on events, we know who is the owner of the fd.
- void addPoll(LocTimerContainer& timerContainer);
- // remove a fd that is assciated with a container. The expectation is that
- // the atual timer would have been removed from the container.
- void removePoll(LocTimerContainer& timerContainer);
- // The polling thread context will call this method. This is where
- // epoll_wait() is blocking and waiting for events..
- virtual bool run();
-};
-
-// Internal class of timer obj. It gets born when client calls LocTimer::start();
-// and gets deleted when client calls LocTimer::stop() or when the it expire()'s.
-// This class implements LocRankable::ranks() so that when an obj is added into
-// the container (of LocHeap), it gets placed in sorted order.
-class LocTimerDelegate : public LocRankable {
- friend class LocTimerContainer;
- friend class LocTimer;
- LocTimer* mClient;
- LocSharedLock* mLock;
- struct timespec mFutureTime;
- LocTimerContainer* mContainer;
- // not a complete obj, just ctor for LocRankable comparisons
- inline LocTimerDelegate(struct timespec& delay)
- : mClient(NULL), mLock(NULL), mFutureTime(delay), mContainer(NULL) {}
- inline ~LocTimerDelegate() { if (mLock) { mLock->drop(); mLock = NULL; } }
-public:
- LocTimerDelegate(LocTimer& client, struct timespec& futureTime, LocTimerContainer* container);
- void destroyLocked();
- // LocRankable virtual method
- virtual int ranks(LocRankable& rankable);
- void expire();
- inline struct timespec getFutureTime() { return mFutureTime; }
-};
-
-/***************************LocTimerContainer methods***************************/
-
-// Most of these static recources are created on demand. They however are never
-// destoyed. The theory is that there are processes that link to this util lib
-// but never use timer, then these resources would never need to be created.
-// For those processes that do use timer, it will likely also need to every
-// once in a while. It might be cheaper keeping them around.
-pthread_mutex_t LocTimerContainer::mMutex = PTHREAD_MUTEX_INITIALIZER;
-LocTimerContainer* LocTimerContainer::mSwTimers = NULL;
-LocTimerContainer* LocTimerContainer::mHwTimers = NULL;
-MsgTask* LocTimerContainer::mMsgTask = NULL;
-LocTimerPollTask* LocTimerContainer::mPollTask = NULL;
-
-// ctor - initialize timer heaps
-// A container for swTimer (timer) is created, when wakeOnExpire is true; or
-// HwTimer (alarm), when wakeOnExpire is false.
-LocTimerContainer::LocTimerContainer(bool wakeOnExpire) :
- mDevFd(timerfd_create(wakeOnExpire ? CLOCK_BOOTTIME_ALARM : CLOCK_BOOTTIME, 0)) {
-
- if ((-1 == mDevFd) && (errno == EINVAL)) {
- LOC_LOGW("%s: timerfd_create failure, fallback to CLOCK_MONOTONIC - %s",
- __FUNCTION__, strerror(errno));
- mDevFd = timerfd_create(CLOCK_MONOTONIC, 0);
- }
-
- if (-1 != mDevFd) {
- // ensure we have the necessary resources created
- LocTimerContainer::getPollTaskLocked();
- LocTimerContainer::getMsgTaskLocked();
- } else {
- LOC_LOGE("%s: timerfd_create failure - %s", __FUNCTION__, strerror(errno));
- }
-}
-
-// dtor
-// we do not ever destroy the static resources.
-inline
-LocTimerContainer::~LocTimerContainer() {
- close(mDevFd);
-}
-
-LocTimerContainer* LocTimerContainer::get(bool wakeOnExpire) {
- // get the reference of either mHwTimer or mSwTimers per wakeOnExpire
- LocTimerContainer*& container = wakeOnExpire ? mHwTimers : mSwTimers;
- // it is cheap to check pointer first than locking mutext unconditionally
- if (!container) {
- pthread_mutex_lock(&mMutex);
- // let's check one more time to be safe
- if (!container) {
- container = new LocTimerContainer(wakeOnExpire);
- // timerfd_create failure
- if (-1 == container->getTimerFd()) {
- delete container;
- container = NULL;
- }
- }
- pthread_mutex_unlock(&mMutex);
- }
- return container;
-}
-
-MsgTask* LocTimerContainer::getMsgTaskLocked() {
- // it is cheap to check pointer first than locking mutext unconditionally
- if (!mMsgTask) {
- mMsgTask = new MsgTask("LocTimerMsgTask", false);
- }
- return mMsgTask;
-}
-
-LocTimerPollTask* LocTimerContainer::getPollTaskLocked() {
- // it is cheap to check pointer first than locking mutext unconditionally
- if (!mPollTask) {
- mPollTask = new LocTimerPollTask();
- }
- return mPollTask;
-}
-
-inline
-LocTimerDelegate* LocTimerContainer::getSoonestTimer() {
- return (LocTimerDelegate*)(peek());
-}
-
-inline
-int LocTimerContainer::getTimerFd() {
- return mDevFd;
-}
-
-void LocTimerContainer::updateSoonestTime(LocTimerDelegate* priorTop) {
- LocTimerDelegate* curTop = getSoonestTimer();
-
- // check if top has changed
- if (curTop != priorTop) {
- struct itimerspec delay;
- memset(&delay, 0, sizeof(struct itimerspec));
- bool toSetTime = false;
- // if tree is empty now, we remove poll and disarm timer
- if (!curTop) {
- mPollTask->removePoll(*this);
- // setting the values to disarm timer
- delay.it_value.tv_sec = 0;
- delay.it_value.tv_nsec = 0;
- toSetTime = true;
- } else if (!priorTop || curTop->outRanks(*priorTop)) {
- // do this first to avoid race condition, in case settime is called
- // with too small an interval
- mPollTask->addPoll(*this);
- delay.it_value = curTop->getFutureTime();
- toSetTime = true;
- }
- if (toSetTime) {
- timerfd_settime(getTimerFd(), TFD_TIMER_ABSTIME, &delay, NULL);
- }
- }
-}
-
-// all the heap management is done in the MsgTask context.
-inline
-void LocTimerContainer::add(LocTimerDelegate& timer) {
- struct MsgTimerPush : public LocMsg {
- LocTimerContainer* mTimerContainer;
- LocHeapNode* mTree;
- LocTimerDelegate* mTimer;
- inline MsgTimerPush(LocTimerContainer& container, LocTimerDelegate& timer) :
- LocMsg(), mTimerContainer(&container), mTimer(&timer) {}
- inline virtual void proc() const {
- LocTimerDelegate* priorTop = mTimerContainer->getSoonestTimer();
- mTimerContainer->push((LocRankable&)(*mTimer));
- mTimerContainer->updateSoonestTime(priorTop);
- }
- };
-
- mMsgTask->sendMsg(new MsgTimerPush(*this, timer));
-}
-
-// all the heap management is done in the MsgTask context.
-void LocTimerContainer::remove(LocTimerDelegate& timer) {
- struct MsgTimerRemove : public LocMsg {
- LocTimerContainer* mTimerContainer;
- LocTimerDelegate* mTimer;
- inline MsgTimerRemove(LocTimerContainer& container, LocTimerDelegate& timer) :
- LocMsg(), mTimerContainer(&container), mTimer(&timer) {}
- inline virtual void proc() const {
- LocTimerDelegate* priorTop = mTimerContainer->getSoonestTimer();
-
- // update soonest timer only if mTimer is actually removed from
- // mTimerContainer AND mTimer is not priorTop.
- if (priorTop == ((LocHeap*)mTimerContainer)->remove((LocRankable&)*mTimer)) {
- // if passing in NULL, we tell updateSoonestTime to update
- // kernel with the current top timer interval.
- mTimerContainer->updateSoonestTime(NULL);
- }
- // all timers are deleted here, and only here.
- delete mTimer;
- }
- };
-
- mMsgTask->sendMsg(new MsgTimerRemove(*this, timer));
-}
-
-// all the heap management is done in the MsgTask context.
-// Upon expire, we check and continuously pop the heap until
-// the top node's timeout is in the future.
-void LocTimerContainer::expire() {
- struct MsgTimerExpire : public LocMsg {
- LocTimerContainer* mTimerContainer;
- inline MsgTimerExpire(LocTimerContainer& container) :
- LocMsg(), mTimerContainer(&container) {}
- inline virtual void proc() const {
- struct timespec now;
- // get time spec of now
- clock_gettime(CLOCK_BOOTTIME, &now);
- LocTimerDelegate timerOfNow(now);
- // pop everything in the heap that outRanks now, i.e. has time older than now
- // and then call expire() on that timer.
- for (LocTimerDelegate* timer = (LocTimerDelegate*)mTimerContainer->pop();
- NULL != timer;
- timer = mTimerContainer->popIfOutRanks(timerOfNow)) {
- // the timer delegate obj will be deleted before the return of this call
- timer->expire();
- }
- mTimerContainer->updateSoonestTime(NULL);
- }
- };
-
- struct itimerspec delay;
- memset(&delay, 0, sizeof(struct itimerspec));
- timerfd_settime(getTimerFd(), TFD_TIMER_ABSTIME, &delay, NULL);
- mPollTask->removePoll(*this);
- mMsgTask->sendMsg(new MsgTimerExpire(*this));
-}
-
-LocTimerDelegate* LocTimerContainer::popIfOutRanks(LocTimerDelegate& timer) {
- LocTimerDelegate* poppedNode = NULL;
- if (mTree && !timer.outRanks(*peek())) {
- poppedNode = (LocTimerDelegate*)(pop());
- }
-
- return poppedNode;
-}
-
-
-/***************************LocTimerPollTask methods***************************/
-
-inline
-LocTimerPollTask::LocTimerPollTask()
- : mFd(epoll_create(2)), mThread(new LocThread()) {
- // before a next call returens, a thread will be created. The run() method
- // could already be running in parallel. Also, since each of the objs
- // creates a thread, the container will make sure that there will be only
- // one of such obj for our timer implementation.
- if (!mThread->start("LocTimerPollTask", this)) {
- delete mThread;
- mThread = NULL;
- }
-}
-
-inline
-LocTimerPollTask::~LocTimerPollTask() {
- // when fs is closed, epoll_wait() should fail run() should return false
- // and the spawned thread should exit.
- close(mFd);
-}
-
-void LocTimerPollTask::destroy() {
- if (mThread) {
- LocThread* thread = mThread;
- mThread = NULL;
- delete thread;
- } else {
- delete this;
- }
-}
-
-void LocTimerPollTask::addPoll(LocTimerContainer& timerContainer) {
- struct epoll_event ev;
- memset(&ev, 0, sizeof(ev));
-
- ev.events = EPOLLIN | EPOLLWAKEUP;
- ev.data.fd = timerContainer.getTimerFd();
- // it is important that we set this context pointer with the input
- // timer container this is how we know which container should handle
- // which expiration.
- ev.data.ptr = &timerContainer;
-
- epoll_ctl(mFd, EPOLL_CTL_ADD, timerContainer.getTimerFd(), &ev);
-}
-
-inline
-void LocTimerPollTask::removePoll(LocTimerContainer& timerContainer) {
- epoll_ctl(mFd, EPOLL_CTL_DEL, timerContainer.getTimerFd(), NULL);
-}
-
-// The polling thread context will call this method. If run() method needs to
-// be repetitvely called, it must return true from the previous call.
-bool LocTimerPollTask::run() {
- struct epoll_event ev[2];
-
- // we have max 2 descriptors to poll from
- int fds = epoll_wait(mFd, ev, 2, -1);
-
- // we pretty much want to continually poll until the fd is closed
- bool rerun = (fds > 0) || (errno == EINTR);
-
- if (fds > 0) {
- // we may have 2 events
- for (int i = 0; i < fds; i++) {
- // each fd has a context pointer associated with the right timer container
- LocTimerContainer* container = (LocTimerContainer*)(ev[i].data.ptr);
- if (container) {
- container->expire();
- } else {
- epoll_ctl(mFd, EPOLL_CTL_DEL, ev[i].data.fd, NULL);
- }
- }
- }
-
- // if rerun is true, we are requesting to be scheduled again
- return rerun;
-}
-
-/***************************LocTimerDelegate methods***************************/
-
-inline
-LocTimerDelegate::LocTimerDelegate(LocTimer& client,
- struct timespec& futureTime,
- LocTimerContainer* container)
- : mClient(&client),
- mLock(mClient->mLock->share()),
- mFutureTime(futureTime),
- mContainer(container) {
- // adding the timer into the container
- mContainer->add(*this);
-}
-
-inline
-void LocTimerDelegate::destroyLocked() {
- // client handle will likely be deleted soon after this
- // method returns. Nulling this handle so that expire()
- // won't call the callback on the dead handle any more.
- mClient = NULL;
-
- if (mContainer) {
- LocTimerContainer* container = mContainer;
- mContainer = NULL;
- if (container) {
- container->remove(*this);
- }
- } // else we do not do anything. No such *this* can be
- // created and reached here with mContainer ever been
- // a non NULL. So *this* must have reached the if clause
- // once, and we want it reach there only once.
-}
-
-int LocTimerDelegate::ranks(LocRankable& rankable) {
- int rank = -1;
- LocTimerDelegate* timer = (LocTimerDelegate*)(&rankable);
- if (timer) {
- // larger time ranks lower!!!
- // IOW, if input obj has bigger tv_sec/tv_nsec, this obj outRanks higher
- rank = timer->mFutureTime.tv_sec - mFutureTime.tv_sec;
- if(0 == rank)
- {
- //rank against tv_nsec for msec accuracy
- rank = (int)(timer->mFutureTime.tv_nsec - mFutureTime.tv_nsec);
- }
- }
- return rank;
-}
-
-inline
-void LocTimerDelegate::expire() {
- // keeping a copy of client pointer to be safe
- // when timeOutCallback() is called at the end of this
- // method, *this* obj may be already deleted.
- LocTimer* client = mClient;
- // force a stop, which will lead to delete of this obj
- if (client && client->stop()) {
- // calling client callback with a pointer save on the stack
- // only if stop() returns true, i.e. it hasn't been stopped
- // already.
- client->timeOutCallback();
- }
-}
-
-
-/***************************LocTimer methods***************************/
-LocTimer::LocTimer() : mTimer(NULL), mLock(new LocSharedLock()) {
-}
-
-LocTimer::~LocTimer() {
- stop();
- if (mLock) {
- mLock->drop();
- mLock = NULL;
- }
-}
-
-bool LocTimer::start(unsigned int timeOutInMs, bool wakeOnExpire) {
- bool success = false;
- mLock->lock();
- if (!mTimer) {
- struct timespec futureTime;
- clock_gettime(CLOCK_BOOTTIME, &futureTime);
- futureTime.tv_sec += timeOutInMs / 1000;
- futureTime.tv_nsec += (timeOutInMs % 1000) * 1000000;
- if (futureTime.tv_nsec >= 1000000000) {
- futureTime.tv_sec += futureTime.tv_nsec / 1000000000;
- futureTime.tv_nsec %= 1000000000;
- }
-
- LocTimerContainer* container;
- container = LocTimerContainer::get(wakeOnExpire);
- if (NULL != container) {
- mTimer = new LocTimerDelegate(*this, futureTime, container);
- // if mTimer is non 0, success should be 0; or vice versa
- }
- success = (NULL != mTimer);
- }
- mLock->unlock();
- return success;
-}
-
-bool LocTimer::stop() {
- bool success = false;
- mLock->lock();
- if (mTimer) {
- LocTimerDelegate* timer = mTimer;
- mTimer = NULL;
- if (timer) {
- timer->destroyLocked();
- success = true;
- }
- }
- mLock->unlock();
- return success;
-}
-
-/***************************LocTimerWrapper methods***************************/
-//////////////////////////////////////////////////////////////////////////
-// This section below wraps for the C style APIs
-//////////////////////////////////////////////////////////////////////////
-class LocTimerWrapper : public LocTimer {
- loc_timer_callback mCb;
- void* mCallerData;
- LocTimerWrapper* mMe;
- static pthread_mutex_t mMutex;
- inline ~LocTimerWrapper() { mCb = NULL; mMe = NULL; }
-public:
- inline LocTimerWrapper(loc_timer_callback cb, void* callerData) :
- mCb(cb), mCallerData(callerData), mMe(this) {
- }
- void destroy() {
- pthread_mutex_lock(&mMutex);
- if (NULL != mCb && this == mMe) {
- delete this;
- }
- pthread_mutex_unlock(&mMutex);
- }
- virtual void timeOutCallback() {
- loc_timer_callback cb = mCb;
- void* callerData = mCallerData;
- if (cb) {
- cb(callerData, 0);
- }
- destroy();
- }
-};
-
-pthread_mutex_t LocTimerWrapper::mMutex = PTHREAD_MUTEX_INITIALIZER;
-
-void* loc_timer_start(uint64_t msec, loc_timer_callback cb_func,
- void *caller_data, bool wake_on_expire)
-{
- LocTimerWrapper* locTimerWrapper = NULL;
-
- if (cb_func) {
- locTimerWrapper = new LocTimerWrapper(cb_func, caller_data);
-
- if (locTimerWrapper) {
- locTimerWrapper->start(msec, wake_on_expire);
- }
- }
-
- return locTimerWrapper;
-}
-
-void loc_timer_stop(void*& handle)
-{
- if (handle) {
- LocTimerWrapper* locTimerWrapper = (LocTimerWrapper*)(handle);
- locTimerWrapper->destroy();
- handle = NULL;
- }
-}
-
-//////////////////////////////////////////////////////////////////////////
-// This section above wraps for the C style APIs
-//////////////////////////////////////////////////////////////////////////
-
-#ifdef __LOC_DEBUG__
-
-double getDeltaSeconds(struct timespec from, struct timespec to) {
- return (double)to.tv_sec + (double)to.tv_nsec / 1000000000
- - from.tv_sec - (double)from.tv_nsec / 1000000000;
-}
-
-struct timespec getNow() {
- struct timespec now;
- clock_gettime(CLOCK_BOOTTIME, &now);
- return now;
-}
-
-class LocTimerTest : public LocTimer, public LocRankable {
- int mTimeOut;
- const struct timespec mTimeOfBirth;
- inline struct timespec getTimerWrapper(int timeout) {
- struct timespec now;
- clock_gettime(CLOCK_BOOTTIME, &now);
- now.tv_sec += timeout;
- return now;
- }
-public:
- inline LocTimerTest(int timeout) : LocTimer(), LocRankable(),
- mTimeOut(timeout), mTimeOfBirth(getTimerWrapper(0)) {}
- inline virtual int ranks(LocRankable& rankable) {
- LocTimerTest* timer = dynamic_cast<LocTimerTest*>(&rankable);
- return timer->mTimeOut - mTimeOut;
- }
- inline virtual void timeOutCallback() {
- printf("timeOutCallback() - ");
- deviation();
- }
- double deviation() {
- struct timespec now = getTimerWrapper(0);
- double delta = getDeltaSeconds(mTimeOfBirth, now);
- printf("%lf: %lf\n", delta, delta * 100 / mTimeOut);
- return delta / mTimeOut;
- }
-};
-
-// For Linux command line testing:
-// compilation:
-// g++ -D__LOC_HOST_DEBUG__ -D__LOC_DEBUG__ -g -I. -I../../../../system/core/include -o LocHeap.o LocHeap.cpp
-// g++ -D__LOC_HOST_DEBUG__ -D__LOC_DEBUG__ -g -std=c++0x -I. -I../../../../system/core/include -lpthread -o LocThread.o LocThread.cpp
-// g++ -D__LOC_HOST_DEBUG__ -D__LOC_DEBUG__ -g -I. -I../../../../system/core/include -o LocTimer.o LocTimer.cpp
-int main(int argc, char** argv) {
- struct timespec timeOfStart=getNow();
- srand(time(NULL));
- int tries = atoi(argv[1]);
- int checks = tries >> 3;
- LocTimerTest** timerArray = new LocTimerTest*[tries];
- memset(timerArray, NULL, tries);
-
- for (int i = 0; i < tries; i++) {
- int r = rand() % tries;
- LocTimerTest* timer = new LocTimerTest(r);
- if (timerArray[r]) {
- if (!timer->stop()) {
- printf("%lf:\n", getDeltaSeconds(timeOfStart, getNow()));
- printf("ERRER: %dth timer, id %d, not running when it should be\n", i, r);
- exit(0);
- } else {
- printf("stop() - %d\n", r);
- delete timer;
- timerArray[r] = NULL;
- }
- } else {
- if (!timer->start(r, false)) {
- printf("%lf:\n", getDeltaSeconds(timeOfStart, getNow()));
- printf("ERRER: %dth timer, id %d, running when it should not be\n", i, r);
- exit(0);
- } else {
- printf("stop() - %d\n", r);
- timerArray[r] = timer;
- }
- }
- }
-
- for (int i = 0; i < tries; i++) {
- if (timerArray[i]) {
- if (!timerArray[i]->stop()) {
- printf("%lf:\n", getDeltaSeconds(timeOfStart, getNow()));
- printf("ERRER: %dth timer, not running when it should be\n", i);
- exit(0);
- } else {
- printf("stop() - %d\n", i);
- delete timerArray[i];
- timerArray[i] = NULL;
- }
- }
- }
-
- delete[] timerArray;
-
- return 0;
-}
-
-#endif
diff --git a/gps/utils/LocTimer.h b/gps/utils/LocTimer.h
deleted file mode 100644
index abc7f64..0000000
--- a/gps/utils/LocTimer.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright (c) 2015, 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 __LOC_TIMER_CPP_H__
-#define __LOC_TIMER_CPP_H__
-
-#include <stddef.h>
-#include <loc_pla.h>
-
-// opaque class to provide service implementation.
-class LocTimerDelegate;
-class LocSharedLock;
-
-// LocTimer client must extend this class and implementthe callback.
-// start() / stop() methods are to arm / disarm timer.
-class LocTimer
-{
- LocTimerDelegate* mTimer;
- LocSharedLock* mLock;
- // don't really want mLock to be manipulated by clients, yet LocTimer
- // has to have a reference to the lock so that the delete of LocTimer
- // and LocTimerDelegate can work together on their share resources.
- friend class LocTimerDelegate;
-
-public:
- LocTimer();
- virtual ~LocTimer();
-
- // timeOutInMs: timeout delay in ms
- // wakeOnExpire: true if to wake up CPU (if sleeping) upon timer
- // expiration and notify the client.
- // false if to wait until next time CPU wakes up (if
- // sleeping) and then notify the client.
- // return: true on success;
- // false on failure, e.g. timer is already running.
- bool start(uint32_t timeOutInMs, bool wakeOnExpire);
-
- // return: true on success;
- // false on failure, e.g. timer is not running.
- bool stop();
-
- // LocTimer client Should implement this method.
- // This method is used for timeout calling back to client. This method
- // should be short enough (eg: send a message to your own thread).
- virtual void timeOutCallback() = 0;
-};
-
-#endif //__LOC_DELAY_H__
diff --git a/gps/utils/LocUnorderedSetMap.h b/gps/utils/LocUnorderedSetMap.h
deleted file mode 100644
index 8748134..0000000
--- a/gps/utils/LocUnorderedSetMap.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/* Copyright (c) 2015, 2017 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 __LOC_UNORDERDED_SETMAP_H__
-#define __LOC_UNORDERDED_SETMAP_H__
-
-#include <algorithm>
-#include <unordered_set>
-#include <unordered_map>
-
-using std::unordered_set;
-using std::unordered_map;
-
-namespace loc_util {
-
-// Trim from *fromSet* any elements that also exist in *rVals*.
-// The optional *goneVals*, if not null, will be populated with removed elements.
-template <typename T>
-inline static void trimSet(unordered_set<T>& fromSet, const unordered_set<T>& rVals,
- unordered_set<T>* goneVals) {
- for (auto val : rVals) {
- if (fromSet.erase(val) > 0 && nullptr != goneVals) {
- goneVals->insert(val);
- }
- }
-}
-
-// this method is destructive to the input unordered_sets.
-// the return set is the interset extracted out from the two input sets, *s1* and *s2*.
-// *s1* and *s2* will be left with the intersect removed from them.
-template <typename T>
-static unordered_set<T> removeAndReturnInterset(unordered_set<T>& s1, unordered_set<T>& s2) {
- unordered_set<T> common(0);
- for (auto b = s2.begin(); b != s2.end(); b++) {
- auto a = find(s1.begin(), s1.end(), *b);
- if (a != s1.end()) {
- // this is a common item of both l1 and l2, remove from both
- // but after we add to common
- common.insert(*a);
- s1.erase(a);
- s2.erase(b);
- }
- }
- return common;
-}
-
-template <typename KEY, typename VAL>
-class LocUnorderedSetMap {
- unordered_map<KEY, unordered_set<VAL>> mMap;
-
-
- // Trim the VALs pointed to by *iter*, with everything that also exist in *rVals*.
- // If the set becomes empty, remove the map entry. *goneVals*, if not null, records
- // the trimmed VALs.
- bool trimOrRemove(typename unordered_map<KEY, unordered_set<VAL>>::iterator iter,
- const unordered_set<VAL>& rVals, unordered_set<VAL>* goneVals) {
- trimSet<VAL>(iter->second, rVals, goneVals);
- bool removeEntry = (iter->second.empty());
- if (removeEntry) {
- mMap.erase(iter);
- }
- return removeEntry;
- }
-
-public:
- inline LocUnorderedSetMap() {}
- inline LocUnorderedSetMap(size_t size) : mMap(size) {}
-
- inline bool empty() { return mMap.empty(); }
-
- // This gets the raw pointer to the VALs pointed to by *key*
- // If the entry is not in the map, nullptr will be returned.
- inline unordered_set<VAL>* getValSetPtr(const KEY& key) {
- auto entry = mMap.find(key);
- return (entry != mMap.end()) ? &(entry->second) : nullptr;
- }
-
- // This gets a copy of VALs pointed to by *key*
- // If the entry is not in the map, an empty set will be returned.
- inline unordered_set<VAL> getValSet(const KEY& key) {
- auto entry = mMap.find(key);
- return (entry != mMap.end()) ? entry->second : unordered_set<VAL>(0);
- }
-
- // This gets all the KEYs from the map
- inline unordered_set<KEY> getKeys() {
- unordered_set<KEY> keys(0);
- for (auto entry : mMap) {
- keys.insert(entry.first);
- }
- return keys;
- }
-
- inline bool remove(const KEY& key) {
- return mMap.erase(key) > 0;
- }
-
- // This looks into all the entries keyed by *keys*. Remove any VALs from the entries
- // that also exist in *rVals*. If the entry is left with an empty set, the entry will
- // be removed. The optional parameters *goneKeys* and *goneVals* will record the KEYs
- // (or entries) and the collapsed VALs removed from the map, respectively.
- inline void trimOrRemove(unordered_set<KEY>&& keys, const unordered_set<VAL>& rVals,
- unordered_set<KEY>* goneKeys, unordered_set<VAL>* goneVals) {
- trimOrRemove(keys, rVals, goneKeys, goneVals);
- }
- inline void trimOrRemove(unordered_set<KEY>& keys, const unordered_set<VAL>& rVals,
- unordered_set<KEY>* goneKeys, unordered_set<VAL>* goneVals) {
- for (auto key : keys) {
- auto iter = mMap.find(key);
- if (iter != mMap.end() && trimOrRemove(iter, rVals, goneVals) && nullptr != goneKeys) {
- goneKeys->insert(iter->first);
- }
- }
- }
-
- // This adds all VALs from *newVals* to the map entry keyed by *key*. Or if it
- // doesn't exist yet, add the set to the map.
- bool add(const KEY& key, const unordered_set<VAL>& newVals) {
- bool newEntryAdded = false;
- if (!newVals.empty()) {
- auto iter = mMap.find(key);
- if (iter != mMap.end()) {
- iter->second.insert(newVals.begin(), newVals.end());
- } else {
- mMap[key] = newVals;
- newEntryAdded = true;
- }
- }
- return newEntryAdded;
- }
-
- // This adds to each of entries in the map keyed by *keys* with the VALs in the
- // *enwVals*. If there new entries added (new key in *keys*), *newKeys*, if not
- // null, would be populated with those keys.
- inline void add(const unordered_set<KEY>& keys, const unordered_set<VAL>&& newVals,
- unordered_set<KEY>* newKeys) {
- add(keys, newVals, newKeys);
- }
- inline void add(const unordered_set<KEY>& keys, const unordered_set<VAL>& newVals,
- unordered_set<KEY>* newKeys) {
- for (auto key : keys) {
- if (add(key, newVals) && nullptr != newKeys) {
- newKeys->insert(key);
- }
- }
- }
-
- // This puts *newVals* into the map keyed by *key*, and returns the VALs that are
- // in effect removed from the keyed VAL set in the map entry.
- // This call would also remove those same VALs from *newVals*.
- inline unordered_set<VAL> update(const KEY& key, unordered_set<VAL>& newVals) {
- unordered_set<VAL> goneVals(0);
-
- if (newVals.empty()) {
- mMap.erase(key);
- } else {
- auto curVals = mMap[key];
- mMap[key] = newVals;
- goneVals = removeAndReturnInterset(curVals, newVals);
- }
- return goneVals;
- }
-};
-
-} // namespace loc_util
-
-#endif // #ifndef __LOC_UNORDERDED_SETMAP_H__
diff --git a/gps/utils/Makefile.am b/gps/utils/Makefile.am
deleted file mode 100644
index 3801fdd..0000000
--- a/gps/utils/Makefile.am
+++ /dev/null
@@ -1,70 +0,0 @@
-ACLOCAL_AMFLAGS = -I m4
-
-AM_CFLAGS = -Wundef \
- -MD \
- -Wno-trigraphs \
- -g -O0 \
- -fno-inline \
- -fno-short-enums \
- -fpic \
- -I./ \
- -std=c++11 \
- $(LOCPLA_CFLAGS)
-
-libgps_utils_la_h_sources = \
- msg_q.h \
- linked_list.h \
- loc_cfg.h \
- loc_log.h \
- loc_target.h \
- loc_timer.h \
- MsgTask.h \
- LocHeap.h \
- LocThread.h \
- LocTimer.h \
- LocIpc.h \
- loc_misc_utils.h \
- loc_nmea.h \
- gps_extended_c.h \
- gps_extended.h \
- loc_gps.h \
- log_util.h
-
-libgps_utils_la_c_sources = \
- linked_list.c \
- msg_q.c \
- loc_cfg.cpp \
- loc_log.cpp \
- loc_target.cpp \
- LocHeap.cpp \
- LocTimer.cpp \
- LocThread.cpp \
- LocIpc.cpp \
- MsgTask.cpp \
- loc_misc_utils.cpp \
- loc_nmea.cpp
-
-library_includedir = $(pkgincludedir)
-
-library_include_HEADERS = $(libgps_utils_la_h_sources)
-
-libgps_utils_la_SOURCES = $(libgps_utils_la_c_sources)
-
-if USE_GLIB
-libgps_utils_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
-libgps_utils_la_LDFLAGS = -lstdc++ -Wl,-z,defs -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
-libgps_utils_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
-else
-libgps_utils_la_CFLAGS = $(AM_CFLAGS)
-libgps_utils_la_LDFLAGS = -Wl,-z,defs -lpthread -shared -version-info 1:0:0
-libgps_utils_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
-endif
-
-libgps_utils_la_LIBADD = $(CUTILS_LIBS)
-
-#Create and Install libraries
-lib_LTLIBRARIES = libgps_utils.la
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = gps-utils.pc
-EXTRA_DIST = $(pkgconfig_DATA)
diff --git a/gps/utils/MsgTask.cpp b/gps/utils/MsgTask.cpp
deleted file mode 100644
index eaead5c..0000000
--- a/gps/utils/MsgTask.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright (c) 2011-2013, 2015, 2017The 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.
- *
- */
-#define LOG_NDEBUG 0
-#define LOG_TAG "LocSvc_MsgTask"
-
-#include <unistd.h>
-#include <MsgTask.h>
-#include <msg_q.h>
-#include <log_util.h>
-#include <loc_log.h>
-#include <loc_pla.h>
-
-static void LocMsgDestroy(void* msg) {
- delete (LocMsg*)msg;
-}
-
-MsgTask::MsgTask(LocThread::tCreate tCreator,
- const char* threadName, bool joinable) :
- mQ(msg_q_init2()), mThread(new LocThread()) {
- if (!mThread->start(tCreator, threadName, this, joinable)) {
- delete mThread;
- mThread = NULL;
- }
-}
-
-MsgTask::MsgTask(const char* threadName, bool joinable) :
- mQ(msg_q_init2()), mThread(new LocThread()) {
- if (!mThread->start(threadName, this, joinable)) {
- delete mThread;
- mThread = NULL;
- }
-}
-
-MsgTask::~MsgTask() {
- msg_q_flush((void*)mQ);
- msg_q_destroy((void**)&mQ);
-}
-
-void MsgTask::destroy() {
- LocThread* thread = mThread;
- msg_q_unblock((void*)mQ);
- if (thread) {
- mThread = NULL;
- delete thread;
- } else {
- delete this;
- }
-}
-
-void MsgTask::sendMsg(const LocMsg* msg) const {
- if (msg) {
- msg_q_snd((void*)mQ, (void*)msg, LocMsgDestroy);
- } else {
- LOC_LOGE("%s: msg is NULL", __func__);
- }
-}
-
-void MsgTask::prerun() {
- // make sure we do not run in background scheduling group
- set_sched_policy(gettid(), SP_FOREGROUND);
-}
-
-bool MsgTask::run() {
- LocMsg* msg;
- msq_q_err_type result = msg_q_rcv((void*)mQ, (void **)&msg);
- if (eMSG_Q_SUCCESS != result) {
- LOC_LOGE("%s:%d] fail receiving msg: %s\n", __func__, __LINE__,
- loc_get_msg_q_status(result));
- return false;
- }
-
- msg->log();
- // there is where each individual msg handling is invoked
- msg->proc();
-
- delete msg;
-
- return true;
-}
diff --git a/gps/utils/MsgTask.h b/gps/utils/MsgTask.h
deleted file mode 100644
index 9eb1f56..0000000
--- a/gps/utils/MsgTask.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Copyright (c) 2011-2013,2015 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 __MSG_TASK__
-#define __MSG_TASK__
-
-#include <LocThread.h>
-
-struct LocMsg {
- inline LocMsg() {}
- inline virtual ~LocMsg() {}
- virtual void proc() const = 0;
- inline virtual void log() const {}
-};
-
-class MsgTask : public LocRunnable {
- const void* mQ;
- LocThread* mThread;
- friend class LocThreadDelegate;
-protected:
- virtual ~MsgTask();
-public:
- MsgTask(LocThread::tCreate tCreator, const char* threadName = NULL, bool joinable = true);
- MsgTask(const char* threadName = NULL, bool joinable = true);
- // this obj will be deleted once thread is deleted
- void destroy();
- void sendMsg(const LocMsg* msg) const;
- // Overrides of LocRunnable methods
- // This method will be repeated called until it returns false; or
- // until thread is stopped.
- virtual bool run();
-
- // The method to be run before thread loop (conditionally repeatedly)
- // calls run()
- virtual void prerun();
-
- // The method to be run after thread loop (conditionally repeatedly)
- // calls run()
- inline virtual void postrun() {}
-};
-
-#endif //__MSG_TASK__
diff --git a/gps/utils/configure.ac b/gps/utils/configure.ac
deleted file mode 100644
index 639f8c4..0000000
--- a/gps/utils/configure.ac
+++ /dev/null
@@ -1,82 +0,0 @@
-# configure.ac -- Autoconf script for gps gps-utils
-#
-# Process this file with autoconf to produce a configure script
-
-# Requires autoconf tool later than 2.61
-AC_PREREQ(2.61)
-# Initialize the gps gps-utils package version 1.0.0
-AC_INIT([gps-utils],1.0.0)
-# Does not strictly follow GNU Coding standards
-AM_INIT_AUTOMAKE([foreign])
-# Disables auto rebuilding of configure, Makefile.ins
-AM_MAINTAINER_MODE
-# Verifies the --srcdir is correct by checking for the path
-AC_CONFIG_SRCDIR([Makefile.am])
-# defines some macros variable to be included by source
-AC_CONFIG_HEADERS([config.h])
-AC_CONFIG_MACRO_DIR([m4])
-
-# Checks for programs.
-AC_PROG_LIBTOOL
-AC_PROG_CXX
-AC_PROG_CC
-AM_PROG_CC_C_O
-AC_PROG_AWK
-AC_PROG_CPP
-AC_PROG_INSTALL
-AC_PROG_LN_S
-AC_PROG_MAKE_SET
-PKG_PROG_PKG_CONFIG
-
-# Checks for libraries.
-PKG_CHECK_MODULES([CUTILS], [libcutils])
-AC_SUBST([CUTILS_CFLAGS])
-AC_SUBST([CUTILS_LIBS])
-
-AC_ARG_WITH([core_includes],
- AC_HELP_STRING([--with-core-includes=@<:@dir@:>@],
- [Specify the location of the core headers]),
- [core_incdir=$withval],
- with_core_includes=no)
-
-if test "x$with_core_includes" != "xno"; then
- CPPFLAGS="${CPPFLAGS} -I${core_incdir}"
-fi
-
-AC_ARG_WITH([locpla_includes],
- AC_HELP_STRING([--with-locpla-includes=@<:@dir@:>@],
- [specify the path to locpla-includes in loc-pla_git.bb]),
- [locpla_incdir=$withval],
- with_locpla_includes=no)
-
-if test "x$with_locpla_includes" != "xno"; then
- AC_SUBST(LOCPLA_CFLAGS, "-I${locpla_incdir}")
-fi
-
-AC_SUBST([CPPFLAGS])
-
-AC_ARG_WITH([glib],
- AC_HELP_STRING([--with-glib],
- [enable glib, building HLOS systems which use glib]))
-
-if (test "x${with_glib}" = "xyes"); then
- AC_DEFINE(ENABLE_USEGLIB, 1, [Define if HLOS systems uses glib])
- PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= 2.16, dummy=yes,
- AC_MSG_ERROR(GThread >= 2.16 is required))
- PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, dummy=yes,
- AC_MSG_ERROR(GLib >= 2.16 is required))
- GLIB_CFLAGS="$GLIB_CFLAGS $GTHREAD_CFLAGS"
- GLIB_LIBS="$GLIB_LIBS $GTHREAD_LIBS"
-
- AC_SUBST(GLIB_CFLAGS)
- AC_SUBST(GLIB_LIBS)
-fi
-
-AM_CONDITIONAL(USE_GLIB, test "x${with_glib}" = "xyes")
-
-AC_CONFIG_FILES([ \
- Makefile \
- gps-utils.pc
- ])
-
-AC_OUTPUT
diff --git a/gps/utils/gps-utils.pc.in b/gps/utils/gps-utils.pc.in
deleted file mode 100644
index a988731..0000000
--- a/gps/utils/gps-utils.pc.in
+++ /dev/null
@@ -1,10 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: gps-utils
-Description: QTI GPS Location utils
-Version: @VERSION
-Libs: -L${libdir} -lgps_utils
-Cflags: -I${includedir}/gps-utils
diff --git a/gps/utils/gps_extended.h b/gps/utils/gps_extended.h
deleted file mode 100644
index dc6ad1e..0000000
--- a/gps/utils/gps_extended.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/* Copyright (c) 2013-2017 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 GPS_EXTENDED_H
-#define GPS_EXTENDED_H
-
-/**
- * @file
- * @brief C++ declarations for GPS types
- */
-
-#include <gps_extended_c.h>
-#if defined(USE_GLIB) || defined(OFF_TARGET)
-#include <string.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-
-struct LocPosMode
-{
- LocPositionMode mode;
- LocGpsPositionRecurrence recurrence;
- uint32_t min_interval;
- uint32_t preferred_accuracy;
- uint32_t preferred_time;
- bool share_position;
- char credentials[14];
- char provider[8];
- LocPosMode(LocPositionMode m, LocGpsPositionRecurrence recr,
- uint32_t gap, uint32_t accu, uint32_t time,
- bool sp, const char* cred, const char* prov) :
- mode(m), recurrence(recr),
- min_interval(gap < GPS_MIN_POSSIBLE_FIX_INTERVAL_MS ?
- GPS_MIN_POSSIBLE_FIX_INTERVAL_MS : gap),
- preferred_accuracy(accu), preferred_time(time),
- share_position(sp) {
- memset(credentials, 0, sizeof(credentials));
- memset(provider, 0, sizeof(provider));
- if (NULL != cred) {
- memcpy(credentials, cred, sizeof(credentials)-1);
- }
- if (NULL != prov) {
- memcpy(provider, prov, sizeof(provider)-1);
- }
- }
-
- inline LocPosMode() :
- mode(LOC_POSITION_MODE_MS_BASED),
- recurrence(LOC_GPS_POSITION_RECURRENCE_PERIODIC),
- min_interval(GPS_DEFAULT_FIX_INTERVAL_MS),
- preferred_accuracy(50), preferred_time(120000),
- share_position(true) {
- memset(credentials, 0, sizeof(credentials));
- memset(provider, 0, sizeof(provider));
- }
-
- inline bool equals(const LocPosMode &anotherMode) const
- {
- return anotherMode.mode == mode &&
- anotherMode.recurrence == recurrence &&
- anotherMode.min_interval == min_interval &&
- anotherMode.preferred_accuracy == preferred_accuracy &&
- anotherMode.preferred_time == preferred_time &&
- !strncmp(anotherMode.credentials, credentials, sizeof(credentials)-1) &&
- !strncmp(anotherMode.provider, provider, sizeof(provider)-1);
- }
-
- void logv() const;
-};
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* GPS_EXTENDED_H */
-
diff --git a/gps/utils/gps_extended_c.h b/gps/utils/gps_extended_c.h
deleted file mode 100644
index 5479bec..0000000
--- a/gps/utils/gps_extended_c.h
+++ /dev/null
@@ -1,1342 +0,0 @@
-/* Copyright (c) 2013-2017 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 GPS_EXTENDED_C_H
-#define GPS_EXTENDED_C_H
-
-#include <ctype.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <loc_gps.h>
-#include <LocationAPI.h>
-#include <time.h>
-
-/**
- * @file
- * @brief C++ declarations for GPS types
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/** Location has valid source information. */
-#define LOCATION_HAS_SOURCE_INFO 0x0020
-/** LocGpsLocation has valid "is indoor?" flag */
-#define LOC_GPS_LOCATION_HAS_IS_INDOOR 0x0040
-/** LocGpsLocation has valid floor number */
-#define LOC_GPS_LOCATION_HAS_FLOOR_NUMBER 0x0080
-/** LocGpsLocation has valid map URL*/
-#define LOC_GPS_LOCATION_HAS_MAP_URL 0x0100
-/** LocGpsLocation has valid map index */
-#define LOC_GPS_LOCATION_HAS_MAP_INDEX 0x0200
-
-/** Sizes for indoor fields */
-#define GPS_LOCATION_MAP_URL_SIZE 400
-#define GPS_LOCATION_MAP_INDEX_SIZE 16
-
-/** Position source is ULP */
-#define ULP_LOCATION_IS_FROM_HYBRID 0x0001
-/** Position source is GNSS only */
-#define ULP_LOCATION_IS_FROM_GNSS 0x0002
-/** Position source is ZPP only */
-#define ULP_LOCATION_IS_FROM_ZPP 0x0004
-/** Position is from a Geofence Breach Event */
-#define ULP_LOCATION_IS_FROM_GEOFENCE 0X0008
-/** Position is from Hardware FLP */
-#define ULP_LOCATION_IS_FROM_HW_FLP 0x0010
-/** Position is from NLP */
-#define ULP_LOCATION_IS_FROM_NLP 0x0020
-/** Position is from PIP */
-#define ULP_LOCATION_IS_FROM_PIP 0x0040
-/** Position is from external DR solution*/
-#define ULP_LOCATION_IS_FROM_EXT_DR 0X0080
-/** Raw GNSS position fixes */
-#define ULP_LOCATION_IS_FROM_GNSS_RAW 0X0100
-
-typedef uint32_t LocSvInfoSource;
-/** SVinfo source is GNSS/DR */
-#define ULP_SVINFO_IS_FROM_GNSS ((LocSvInfoSource)0x0001)
-/** Raw SVinfo from GNSS */
-#define ULP_SVINFO_IS_FROM_DR ((LocSvInfoSource)0x0002)
-
-#define ULP_MIN_INTERVAL_INVALID 0xffffffff
-#define ULP_MAX_NMEA_STRING_SIZE 201
-
-/*Emergency SUPL*/
-#define LOC_GPS_NI_TYPE_EMERGENCY_SUPL 4
-
-#define LOC_AGPS_CERTIFICATE_MAX_LENGTH 2000
-#define LOC_AGPS_CERTIFICATE_MAX_SLOTS 10
-
-typedef uint32_t LocPosTechMask;
-#define LOC_POS_TECH_MASK_DEFAULT ((LocPosTechMask)0x00000000)
-#define LOC_POS_TECH_MASK_SATELLITE ((LocPosTechMask)0x00000001)
-#define LOC_POS_TECH_MASK_CELLID ((LocPosTechMask)0x00000002)
-#define LOC_POS_TECH_MASK_WIFI ((LocPosTechMask)0x00000004)
-#define LOC_POS_TECH_MASK_SENSORS ((LocPosTechMask)0x00000008)
-#define LOC_POS_TECH_MASK_REFERENCE_LOCATION ((LocPosTechMask)0x00000010)
-#define LOC_POS_TECH_MASK_INJECTED_COARSE_POSITION ((LocPosTechMask)0x00000020)
-#define LOC_POS_TECH_MASK_AFLT ((LocPosTechMask)0x00000040)
-#define LOC_POS_TECH_MASK_HYBRID ((LocPosTechMask)0x00000080)
-
-enum loc_registration_mask_status {
- LOC_REGISTRATION_MASK_ENABLED,
- LOC_REGISTRATION_MASK_DISABLED,
- LOC_REGISTRATION_MASK_SET
-};
-
-typedef enum {
- LOC_SUPPORTED_FEATURE_ODCPI_2_V02 = 0, /**< Support ODCPI version 2 feature */
- LOC_SUPPORTED_FEATURE_WIFI_AP_DATA_INJECT_2_V02, /**< Support Wifi AP data inject version 2 feature */
- LOC_SUPPORTED_FEATURE_DEBUG_NMEA_V02, /**< Support debug NMEA feature */
- LOC_SUPPORTED_FEATURE_GNSS_ONLY_POSITION_REPORT, /**< Support GNSS Only position reports */
- LOC_SUPPORTED_FEATURE_FDCL /**< Support FDCL */
-} loc_supported_feature_enum;
-
-typedef struct {
- /** set to sizeof(UlpLocation) */
- size_t size;
- LocGpsLocation gpsLocation;
- /* Provider indicator for HYBRID or GPS */
- uint16_t position_source;
- LocPosTechMask tech_mask;
- /*allows HAL to pass additional information related to the location */
- int rawDataSize; /* in # of bytes */
- void * rawData;
- bool is_indoor;
- float floor_number;
- char map_url[GPS_LOCATION_MAP_URL_SIZE];
- 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 int8_t AGpsExtType;
-#define LOC_AGPS_TYPE_INVALID -1
-#define LOC_AGPS_TYPE_ANY 0
-#define LOC_AGPS_TYPE_SUPL 1
-#define LOC_AGPS_TYPE_C2K 2
-#define LOC_AGPS_TYPE_WWAN_ANY 3
-#define LOC_AGPS_TYPE_WIFI 4
-#define LOC_AGPS_TYPE_SUPL_ES 5
-
-/** SSID length */
-#define SSID_BUF_SIZE (32+1)
-
-typedef int16_t AGpsBearerType;
-#define AGPS_APN_BEARER_INVALID 0
-#define AGPS_APN_BEARER_IPV4 1
-#define AGPS_APN_BEARER_IPV6 2
-#define AGPS_APN_BEARER_IPV4V6 3
-
-typedef enum {
- AGPS_CB_PRIORITY_LOW = 1,
- AGPS_CB_PRIORITY_MED = 2,
- AGPS_CB_PRIORITY_HIGH = 3
-} AgpsCbPriority;
-
-typedef struct {
- void* statusV4Cb;
- AgpsCbPriority cbPriority;
-} AgpsCbInfo;
-
-/** GPS extended callback structure. */
-typedef struct {
- /** set to sizeof(LocGpsCallbacks) */
- size_t size;
- loc_gps_set_capabilities set_capabilities_cb;
- loc_gps_acquire_wakelock acquire_wakelock_cb;
- loc_gps_release_wakelock release_wakelock_cb;
- loc_gps_create_thread create_thread_cb;
- loc_gps_request_utc_time request_utc_time_cb;
-} GpsExtCallbacks;
-
-/** Callback to report the xtra server url to the client.
- * The client should use this url when downloading xtra unless overwritten
- * in the gps.conf file
- */
-typedef void (* report_xtra_server)(const char*, const char*, const char*);
-
-/** Callback structure for the XTRA interface. */
-typedef struct {
- loc_gps_xtra_download_request download_request_cb;
- loc_gps_create_thread create_thread_cb;
- report_xtra_server report_xtra_server_cb;
-} GpsXtraExtCallbacks;
-
-/** Represents the status of AGPS. */
-typedef struct {
- /** set to sizeof(AGpsExtStatus) */
- size_t size;
-
- AGpsExtType type;
- LocAGpsStatusValue status;
- uint32_t ipv4_addr;
- struct sockaddr_storage addr;
- char ssid[SSID_BUF_SIZE];
- char password[SSID_BUF_SIZE];
-} AGpsExtStatus;
-
-/** Callback with AGPS status information.
- * Can only be called from a thread created by create_thread_cb.
- */
-typedef void (* agps_status_extended)(AGpsExtStatus* status);
-
-/** Callback structure for the AGPS interface. */
-typedef struct {
- agps_status_extended status_cb;
- loc_gps_create_thread create_thread_cb;
-} AGpsExtCallbacks;
-
-
-typedef void (*loc_ni_notify_callback)(LocGpsNiNotification *notification, bool esEnalbed);
-/** GPS NI callback structure. */
-typedef struct
-{
- /**
- * Sends the notification request from HAL to GPSLocationProvider.
- */
- loc_ni_notify_callback notify_cb;
-} GpsNiExtCallbacks;
-
-typedef enum loc_server_type {
- LOC_AGPS_CDMA_PDE_SERVER,
- LOC_AGPS_CUSTOM_PDE_SERVER,
- LOC_AGPS_MPC_SERVER,
- LOC_AGPS_SUPL_SERVER
-} LocServerType;
-
-typedef enum loc_position_mode_type {
- LOC_POSITION_MODE_INVALID = -1,
- LOC_POSITION_MODE_STANDALONE = 0,
- LOC_POSITION_MODE_MS_BASED,
- LOC_POSITION_MODE_MS_ASSISTED,
- LOC_POSITION_MODE_RESERVED_1,
- LOC_POSITION_MODE_RESERVED_2,
- LOC_POSITION_MODE_RESERVED_3,
- LOC_POSITION_MODE_RESERVED_4,
- LOC_POSITION_MODE_RESERVED_5
-
-} LocPositionMode;
-
-/**
- * @brief Minimum allowed value for fix interval.
- *
- * This value is a sanity limit in GPS framework. The hardware has own internal
- * limits that may not match this value
- *
- * @sa GPS_DEFAULT_FIX_INTERVAL_MS
- */
-
-#define GPS_MIN_POSSIBLE_FIX_INTERVAL_MS 100
-/**
- * @brief Default value for fix interval.
- *
- * This value is used by default whenever appropriate.
- *
- * @sa GPS_MIN_POSSIBLE_FIX_INTERVAL_MS
- */
-#define GPS_DEFAULT_FIX_INTERVAL_MS 1000
-
-/** Flags to indicate which values are valid in a GpsLocationExtended. */
-typedef uint32_t GpsLocationExtendedFlags;
-/** GpsLocationExtended has valid pdop, hdop, vdop. */
-#define GPS_LOCATION_EXTENDED_HAS_DOP 0x0001
-/** GpsLocationExtended has valid altitude mean sea level. */
-#define GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL 0x0002
-/** UlpLocation has valid magnetic deviation. */
-#define GPS_LOCATION_EXTENDED_HAS_MAG_DEV 0x0004
-/** UlpLocation has valid mode indicator. */
-#define GPS_LOCATION_EXTENDED_HAS_MODE_IND 0x0008
-/** GpsLocationExtended has valid vertical uncertainty */
-#define GPS_LOCATION_EXTENDED_HAS_VERT_UNC 0x0010
-/** GpsLocationExtended has valid speed uncertainty */
-#define GPS_LOCATION_EXTENDED_HAS_SPEED_UNC 0x0020
-/** GpsLocationExtended has valid heading uncertainty */
-#define GPS_LOCATION_EXTENDED_HAS_BEARING_UNC 0x0040
-/** GpsLocationExtended has valid horizontal reliability */
-#define GPS_LOCATION_EXTENDED_HAS_HOR_RELIABILITY 0x0080
-/** GpsLocationExtended has valid vertical reliability */
-#define GPS_LOCATION_EXTENDED_HAS_VERT_RELIABILITY 0x0100
-/** GpsLocationExtended has valid Horizontal Elliptical Uncertainty (Semi-Major Axis) */
-#define GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_MAJOR 0x0200
-/** GpsLocationExtended has valid Horizontal Elliptical Uncertainty (Semi-Minor Axis) */
-#define GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_MINOR 0x0400
-/** GpsLocationExtended has valid Elliptical Horizontal Uncertainty Azimuth */
-#define GPS_LOCATION_EXTENDED_HAS_HOR_ELIP_UNC_AZIMUTH 0x0800
-/** GpsLocationExtended has valid gnss sv used in position data */
-#define GPS_LOCATION_EXTENDED_HAS_GNSS_SV_USED_DATA 0x1000
-/** GpsLocationExtended has valid navSolutionMask */
-#define GPS_LOCATION_EXTENDED_HAS_NAV_SOLUTION_MASK 0x2000
-/** GpsLocationExtended has valid LocPosTechMask */
-#define GPS_LOCATION_EXTENDED_HAS_POS_TECH_MASK 0x4000
-/** GpsLocationExtended has valid LocSvInfoSource */
-#define GPS_LOCATION_EXTENDED_HAS_SV_SOURCE_INFO 0x8000
-/** GpsLocationExtended has valid position dynamics data */
-#define GPS_LOCATION_EXTENDED_HAS_POS_DYNAMICS_DATA 0x10000
-/** GpsLocationExtended has GPS Time */
-#define GPS_LOCATION_EXTENDED_HAS_GPS_TIME 0x20000
-/** GpsLocationExtended has Extended Dilution of Precision */
-#define GPS_LOCATION_EXTENDED_HAS_EXT_DOP 0x40000
-/** GpsLocationExtended has Elapsed Time */
-#define GPS_LOCATION_EXTENDED_HAS_ELAPSED_TIME 0x80000
-
-typedef uint32_t LocNavSolutionMask;
-/* Bitmask to specify whether SBAS ionospheric correction is used */
-#define LOC_NAV_MASK_SBAS_CORRECTION_IONO ((LocNavSolutionMask)0x0001)
-/* Bitmask to specify whether SBAS fast correction is used */
-#define LOC_NAV_MASK_SBAS_CORRECTION_FAST ((LocNavSolutionMask)0x0002)
-/**< Bitmask to specify whether SBAS long-tem correction is used */
-#define LOC_NAV_MASK_SBAS_CORRECTION_LONG ((LocNavSolutionMask)0x0004)
-/**< Bitmask to specify whether SBAS integrity information is used */
-#define LOC_NAV_MASK_SBAS_INTEGRITY ((LocNavSolutionMask)0x0008)
-
-typedef uint32_t LocPosDataMask;
-/* Bitmask to specify whether Navigation data has Forward Acceleration */
-#define LOC_NAV_DATA_HAS_LONG_ACCEL ((LocPosDataMask)0x0001)
-/* Bitmask to specify whether Navigation data has Sideward Acceleration */
-#define LOC_NAV_DATA_HAS_LAT_ACCEL ((LocPosDataMask)0x0002)
-/* Bitmask to specify whether Navigation data has Vertical Acceleration */
-#define LOC_NAV_DATA_HAS_VERT_ACCEL ((LocPosDataMask)0x0004)
-/* Bitmask to specify whether Navigation data has Heading Rate */
-#define LOC_NAV_DATA_HAS_YAW_RATE ((LocPosDataMask)0x0008)
-/* Bitmask to specify whether Navigation data has Body pitch */
-#define LOC_NAV_DATA_HAS_PITCH ((LocPosDataMask)0x0010)
-
-/** GPS PRN Range */
-#define GPS_SV_PRN_MIN 1
-#define GPS_SV_PRN_MAX 32
-#define GLO_SV_PRN_MIN 65
-#define GLO_SV_PRN_MAX 96
-#define QZSS_SV_PRN_MIN 193
-#define QZSS_SV_PRN_MAX 197
-#define BDS_SV_PRN_MIN 201
-#define BDS_SV_PRN_MAX 235
-#define GAL_SV_PRN_MIN 301
-#define GAL_SV_PRN_MAX 336
-
-typedef uint32_t LocPosTechMask;
-#define LOC_POS_TECH_MASK_DEFAULT ((LocPosTechMask)0x00000000)
-#define LOC_POS_TECH_MASK_SATELLITE ((LocPosTechMask)0x00000001)
-#define LOC_POS_TECH_MASK_CELLID ((LocPosTechMask)0x00000002)
-#define LOC_POS_TECH_MASK_WIFI ((LocPosTechMask)0x00000004)
-#define LOC_POS_TECH_MASK_SENSORS ((LocPosTechMask)0x00000008)
-#define LOC_POS_TECH_MASK_REFERENCE_LOCATION ((LocPosTechMask)0x00000010)
-#define LOC_POS_TECH_MASK_INJECTED_COARSE_POSITION ((LocPosTechMask)0x00000020)
-#define LOC_POS_TECH_MASK_AFLT ((LocPosTechMask)0x00000040)
-#define LOC_POS_TECH_MASK_HYBRID ((LocPosTechMask)0x00000080)
-
-typedef enum {
- LOC_RELIABILITY_NOT_SET = 0,
- LOC_RELIABILITY_VERY_LOW = 1,
- LOC_RELIABILITY_LOW = 2,
- LOC_RELIABILITY_MEDIUM = 3,
- LOC_RELIABILITY_HIGH = 4
-}LocReliability;
-
-typedef struct {
- struct timespec apTimeStamp;
- /*boottime received from pps-ktimer*/
- float apTimeStampUncertaintyMs;
- /* timestamp uncertainty in milli seconds */
-}Gnss_ApTimeStampStructType;
-
-typedef struct {
- uint64_t gps_sv_used_ids_mask;
- uint64_t glo_sv_used_ids_mask;
- uint64_t gal_sv_used_ids_mask;
- uint64_t bds_sv_used_ids_mask;
- uint64_t qzss_sv_used_ids_mask;
-} GnssSvUsedInPosition;
-
-/* Body Frame parameters */
-typedef struct {
- /** Contains Body frame LocPosDataMask bits. */
- uint32_t bodyFrameDatamask;
- /* Forward Acceleration in body frame (m/s2)*/
- float longAccel;
- /* Sideward Acceleration in body frame (m/s2)*/
- float latAccel;
- /* Vertical Acceleration in body frame (m/s2)*/
- float vertAccel;
- /* Heading Rate (Radians/second) */
- float yawRate;
- /* Body pitch (Radians) */
- float pitch;
-}LocPositionDynamics;
-
-typedef struct {
-
- /** Position dilution of precision.
- Range: 1 (highest accuracy) to 50 (lowest accuracy) */
- float PDOP;
-
- /** Horizontal dilution of precision.
- Range: 1 (highest accuracy) to 50 (lowest accuracy) */
- float HDOP;
-
- /** Vertical dilution of precision.
- Range: 1 (highest accuracy) to 50 (lowest accuracy) */
- float VDOP;
-
- /** geometric dilution of precision.
- Range: 1 (highest accuracy) to 50 (lowest accuracy) */
- float GDOP;
-
- /** time dilution of precision.
- Range: 1 (highest accuracy) to 50 (lowest accuracy) */
- float TDOP;
-}LocExtDOP;
-
-/* GPS Time structure */
-typedef struct {
-
- /**< Current GPS week as calculated from midnight, Jan. 6, 1980. \n
- - Units: Weeks */
- uint16_t gpsWeek;
-
- /**< Amount of time into the current GPS week. \n
- - Units: Milliseconds */
- uint32_t gpsTimeOfWeekMs;
-}GPSTimeStruct;
-
-/** Represents gps location extended. */
-typedef struct {
- /** set to sizeof(GpsLocationExtended) */
- size_t size;
- /** Contains GpsLocationExtendedFlags bits. */
- uint32_t flags;
- /** Contains the Altitude wrt mean sea level */
- float altitudeMeanSeaLevel;
- /** Contains Position Dilusion of Precision. */
- float pdop;
- /** Contains Horizontal Dilusion of Precision. */
- float hdop;
- /** Contains Vertical Dilusion of Precision. */
- float vdop;
- /** Contains Magnetic Deviation. */
- float magneticDeviation;
- /** vertical uncertainty in meters */
- float vert_unc;
- /** speed uncertainty in m/s */
- float speed_unc;
- /** heading uncertainty in degrees (0 to 359.999) */
- float bearing_unc;
- /** horizontal reliability. */
- LocReliability horizontal_reliability;
- /** vertical reliability. */
- LocReliability vertical_reliability;
- /* Horizontal Elliptical Uncertainty (Semi-Major Axis) */
- float horUncEllipseSemiMajor;
- /* Horizontal Elliptical Uncertainty (Semi-Minor Axis) */
- float horUncEllipseSemiMinor;
- /* Elliptical Horizontal Uncertainty Azimuth */
- float horUncEllipseOrientAzimuth;
-
- Gnss_ApTimeStampStructType timeStamp;
- /** Gnss sv used in position data */
- GnssSvUsedInPosition gnss_sv_used_ids;
- /** Nav solution mask to indicate sbas corrections */
- LocNavSolutionMask navSolutionMask;
- /** Position technology used in computing this fix */
- LocPosTechMask tech_mask;
- /** SV Info source used in computing this fix */
- LocSvInfoSource sv_source;
- /** Body Frame Dynamics: 4wayAcceleration and pitch set with validity */
- LocPositionDynamics bodyFrameData;
- /** GPS Time */
- GPSTimeStruct gpsTime;
- /** Elapsed Time */
- int64_t elapsedTime;
- /** Dilution of precision associated with this position*/
- LocExtDOP extDOP;
-} GpsLocationExtended;
-
-enum loc_sess_status {
- LOC_SESS_SUCCESS,
- LOC_SESS_INTERMEDIATE,
- LOC_SESS_FAILURE
-};
-
-// Nmea sentence types mask
-typedef uint32_t NmeaSentenceTypesMask;
-#define LOC_NMEA_MASK_GGA_V02 ((NmeaSentenceTypesMask)0x00000001) /**< Enable GGA type */
-#define LOC_NMEA_MASK_RMC_V02 ((NmeaSentenceTypesMask)0x00000002) /**< Enable RMC type */
-#define LOC_NMEA_MASK_GSV_V02 ((NmeaSentenceTypesMask)0x00000004) /**< Enable GSV type */
-#define LOC_NMEA_MASK_GSA_V02 ((NmeaSentenceTypesMask)0x00000008) /**< Enable GSA type */
-#define LOC_NMEA_MASK_VTG_V02 ((NmeaSentenceTypesMask)0x00000010) /**< Enable VTG type */
-#define LOC_NMEA_MASK_PQXFI_V02 ((NmeaSentenceTypesMask)0x00000020) /**< Enable PQXFI type */
-#define LOC_NMEA_MASK_PSTIS_V02 ((NmeaSentenceTypesMask)0x00000040) /**< Enable PSTIS type */
-#define LOC_NMEA_MASK_GLGSV_V02 ((NmeaSentenceTypesMask)0x00000080) /**< Enable GLGSV type */
-#define LOC_NMEA_MASK_GNGSA_V02 ((NmeaSentenceTypesMask)0x00000100) /**< Enable GNGSA type */
-#define LOC_NMEA_MASK_GNGNS_V02 ((NmeaSentenceTypesMask)0x00000200) /**< Enable GNGNS type */
-#define LOC_NMEA_MASK_GARMC_V02 ((NmeaSentenceTypesMask)0x00000400) /**< Enable GARMC type */
-#define LOC_NMEA_MASK_GAGSV_V02 ((NmeaSentenceTypesMask)0x00000800) /**< Enable GAGSV type */
-#define LOC_NMEA_MASK_GAGSA_V02 ((NmeaSentenceTypesMask)0x00001000) /**< Enable GAGSA type */
-#define LOC_NMEA_MASK_GAVTG_V02 ((NmeaSentenceTypesMask)0x00002000) /**< Enable GAVTG type */
-#define LOC_NMEA_MASK_GAGGA_V02 ((NmeaSentenceTypesMask)0x00004000) /**< Enable GAGGA type */
-#define LOC_NMEA_MASK_PQGSA_V02 ((NmeaSentenceTypesMask)0x00008000) /**< Enable PQGSA type */
-#define LOC_NMEA_MASK_PQGSV_V02 ((NmeaSentenceTypesMask)0x00010000) /**< Enable PQGSV type */
-#define LOC_NMEA_MASK_DEBUG_V02 ((NmeaSentenceTypesMask)0x00020000) /**< Enable DEBUG type */
-
-// all bitmasks of general supported NMEA sentenses - debug is not part of this
-#define LOC_NMEA_ALL_GENERAL_SUPPORTED_MASK (LOC_NMEA_MASK_GGA_V02 | LOC_NMEA_MASK_RMC_V02 | \
- LOC_NMEA_MASK_GSV_V02 | LOC_NMEA_MASK_GSA_V02 | LOC_NMEA_MASK_VTG_V02 | \
- LOC_NMEA_MASK_PQXFI_V02 | LOC_NMEA_MASK_PSTIS_V02 | LOC_NMEA_MASK_GLGSV_V02 | \
- LOC_NMEA_MASK_GNGSA_V02 | LOC_NMEA_MASK_GNGNS_V02 | LOC_NMEA_MASK_GARMC_V02 | \
- LOC_NMEA_MASK_GAGSV_V02 | LOC_NMEA_MASK_GAGSA_V02 | LOC_NMEA_MASK_GAVTG_V02 | \
- LOC_NMEA_MASK_GAGGA_V02 | LOC_NMEA_MASK_PQGSA_V02 | LOC_NMEA_MASK_PQGSV_V02)
-
-typedef enum {
- LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC = 0,
- LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM,
- LOC_ENG_IF_REQUEST_SENDER_ID_MSAPU,
- LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON,
- LOC_ENG_IF_REQUEST_SENDER_ID_MODEM,
- LOC_ENG_IF_REQUEST_SENDER_ID_UNKNOWN
-} loc_if_req_sender_id_e_type;
-
-
-#define smaller_of(a, b) (((a) > (b)) ? (b) : (a))
-#define MAX_APN_LEN 100
-
-// This will be overridden by the individual adapters
-// if necessary.
-#define DEFAULT_IMPL(rtv) \
-{ \
- LOC_LOGD("%s: default implementation invoked", __func__); \
- return rtv; \
-}
-
-enum loc_api_adapter_err {
- LOC_API_ADAPTER_ERR_SUCCESS = 0,
- LOC_API_ADAPTER_ERR_GENERAL_FAILURE = 1,
- LOC_API_ADAPTER_ERR_UNSUPPORTED = 2,
- LOC_API_ADAPTER_ERR_INVALID_HANDLE = 4,
- LOC_API_ADAPTER_ERR_INVALID_PARAMETER = 5,
- LOC_API_ADAPTER_ERR_ENGINE_BUSY = 6,
- LOC_API_ADAPTER_ERR_PHONE_OFFLINE = 7,
- LOC_API_ADAPTER_ERR_TIMEOUT = 8,
- LOC_API_ADAPTER_ERR_SERVICE_NOT_PRESENT = 9,
- LOC_API_ADAPTER_ERR_INTERNAL = 10,
-
- /* equating engine down to phone offline, as they are the same errror */
- LOC_API_ADAPTER_ERR_ENGINE_DOWN = LOC_API_ADAPTER_ERR_PHONE_OFFLINE,
- LOC_API_ADAPTER_ERR_FAILURE = 101,
- LOC_API_ADAPTER_ERR_UNKNOWN
-};
-
-enum loc_api_adapter_event_index {
- LOC_API_ADAPTER_REPORT_POSITION = 0, // Position report comes in loc_parsed_position_s_type
- LOC_API_ADAPTER_REPORT_SATELLITE, // Satellite in view report
- LOC_API_ADAPTER_REPORT_NMEA_1HZ, // NMEA report at 1HZ rate
- LOC_API_ADAPTER_REPORT_NMEA_POSITION, // NMEA report at position report rate
- LOC_API_ADAPTER_REQUEST_NI_NOTIFY_VERIFY, // NI notification/verification request
- LOC_API_ADAPTER_REQUEST_ASSISTANCE_DATA, // Assistance data, eg: time, predicted orbits request
- LOC_API_ADAPTER_REQUEST_LOCATION_SERVER, // Request for location server
- LOC_API_ADAPTER_REPORT_IOCTL, // Callback report for loc_ioctl
- LOC_API_ADAPTER_REPORT_STATUS, // Misc status report: eg, engine state
- LOC_API_ADAPTER_REQUEST_WIFI, //
- LOC_API_ADAPTER_SENSOR_STATUS, //
- LOC_API_ADAPTER_REQUEST_TIME_SYNC, //
- LOC_API_ADAPTER_REPORT_SPI, //
- LOC_API_ADAPTER_REPORT_NI_GEOFENCE, //
- LOC_API_ADAPTER_GEOFENCE_GEN_ALERT, //
- LOC_API_ADAPTER_REPORT_GENFENCE_BREACH, //
- LOC_API_ADAPTER_PEDOMETER_CTRL, //
- LOC_API_ADAPTER_MOTION_CTRL, //
- LOC_API_ADAPTER_REQUEST_WIFI_AP_DATA, // Wifi ap data
- LOC_API_ADAPTER_BATCH_FULL, // Batching on full
- LOC_API_ADAPTER_BATCHED_POSITION_REPORT, // Batching on fix
- LOC_API_ADAPTER_BATCHED_GENFENCE_BREACH_REPORT, //
- LOC_API_ADAPTER_GNSS_MEASUREMENT_REPORT, //GNSS Measurement Report
- LOC_API_ADAPTER_GNSS_SV_POLYNOMIAL_REPORT, //GNSS SV Polynomial Report
- LOC_API_ADAPTER_GDT_UPLOAD_BEGIN_REQ, // GDT upload start request
- LOC_API_ADAPTER_GDT_UPLOAD_END_REQ, // GDT upload end request
- LOC_API_ADAPTER_GNSS_MEASUREMENT, // GNSS Measurement report
- LOC_API_ADAPTER_REQUEST_TIMEZONE, // Timezone injection request
- LOC_API_ADAPTER_REPORT_GENFENCE_DWELL_REPORT, // Geofence dwell report
- LOC_API_ADAPTER_REQUEST_SRN_DATA, // request srn data from AP
- LOC_API_ADAPTER_REQUEST_POSITION_INJECTION, // Position injection request
- LOC_API_ADAPTER_BATCH_STATUS, // batch status
- LOC_API_ADAPTER_FDCL_SERVICE_REQ, // FDCL service request
- LOC_API_ADAPTER_EVENT_MAX
-};
-
-#define LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT (1<<LOC_API_ADAPTER_REPORT_POSITION)
-#define LOC_API_ADAPTER_BIT_SATELLITE_REPORT (1<<LOC_API_ADAPTER_REPORT_SATELLITE)
-#define LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT (1<<LOC_API_ADAPTER_REPORT_NMEA_1HZ)
-#define LOC_API_ADAPTER_BIT_NMEA_POSITION_REPORT (1<<LOC_API_ADAPTER_REPORT_NMEA_POSITION)
-#define LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST (1<<LOC_API_ADAPTER_REQUEST_NI_NOTIFY_VERIFY)
-#define LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST (1<<LOC_API_ADAPTER_REQUEST_ASSISTANCE_DATA)
-#define LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST (1<<LOC_API_ADAPTER_REQUEST_LOCATION_SERVER)
-#define LOC_API_ADAPTER_BIT_IOCTL_REPORT (1<<LOC_API_ADAPTER_REPORT_IOCTL)
-#define LOC_API_ADAPTER_BIT_STATUS_REPORT (1<<LOC_API_ADAPTER_REPORT_STATUS)
-#define LOC_API_ADAPTER_BIT_REQUEST_WIFI (1<<LOC_API_ADAPTER_REQUEST_WIFI)
-#define LOC_API_ADAPTER_BIT_SENSOR_STATUS (1<<LOC_API_ADAPTER_SENSOR_STATUS)
-#define LOC_API_ADAPTER_BIT_REQUEST_TIME_SYNC (1<<LOC_API_ADAPTER_REQUEST_TIME_SYNC)
-#define LOC_API_ADAPTER_BIT_REPORT_SPI (1<<LOC_API_ADAPTER_REPORT_SPI)
-#define LOC_API_ADAPTER_BIT_REPORT_NI_GEOFENCE (1<<LOC_API_ADAPTER_REPORT_NI_GEOFENCE)
-#define LOC_API_ADAPTER_BIT_GEOFENCE_GEN_ALERT (1<<LOC_API_ADAPTER_GEOFENCE_GEN_ALERT)
-#define LOC_API_ADAPTER_BIT_REPORT_GENFENCE_BREACH (1<<LOC_API_ADAPTER_REPORT_GENFENCE_BREACH)
-#define LOC_API_ADAPTER_BIT_BATCHED_GENFENCE_BREACH_REPORT (1<<LOC_API_ADAPTER_BATCHED_GENFENCE_BREACH_REPORT)
-#define LOC_API_ADAPTER_BIT_PEDOMETER_CTRL (1<<LOC_API_ADAPTER_PEDOMETER_CTRL)
-#define LOC_API_ADAPTER_BIT_MOTION_CTRL (1<<LOC_API_ADAPTER_MOTION_CTRL)
-#define LOC_API_ADAPTER_BIT_REQUEST_WIFI_AP_DATA (1<<LOC_API_ADAPTER_REQUEST_WIFI_AP_DATA)
-#define LOC_API_ADAPTER_BIT_BATCH_FULL (1<<LOC_API_ADAPTER_BATCH_FULL)
-#define LOC_API_ADAPTER_BIT_BATCHED_POSITION_REPORT (1<<LOC_API_ADAPTER_BATCHED_POSITION_REPORT)
-#define LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT_REPORT (1<<LOC_API_ADAPTER_GNSS_MEASUREMENT_REPORT)
-#define LOC_API_ADAPTER_BIT_GNSS_SV_POLYNOMIAL_REPORT (1<<LOC_API_ADAPTER_GNSS_SV_POLYNOMIAL_REPORT)
-#define LOC_API_ADAPTER_BIT_GDT_UPLOAD_BEGIN_REQ (1<<LOC_API_ADAPTER_GDT_UPLOAD_BEGIN_REQ)
-#define LOC_API_ADAPTER_BIT_GDT_UPLOAD_END_REQ (1<<LOC_API_ADAPTER_GDT_UPLOAD_END_REQ)
-#define LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT (1<<LOC_API_ADAPTER_GNSS_MEASUREMENT)
-#define LOC_API_ADAPTER_BIT_REQUEST_TIMEZONE (1<<LOC_API_ADAPTER_REQUEST_TIMEZONE)
-#define LOC_API_ADAPTER_BIT_REPORT_GENFENCE_DWELL (1<<LOC_API_ADAPTER_REPORT_GENFENCE_DWELL_REPORT)
-#define LOC_API_ADAPTER_BIT_REQUEST_SRN_DATA (1<<LOC_API_ADAPTER_REQUEST_SRN_DATA)
-#define LOC_API_ADAPTER_BIT_POSITION_INJECTION_REQUEST (1<<LOC_API_ADAPTER_REQUEST_POSITION_INJECTION)
-#define LOC_API_ADAPTER_BIT_BATCH_STATUS (1<<LOC_API_ADAPTER_BATCH_STATUS)
-#define LOC_API_ADAPTER_BIT_FDCL_SERVICE_REQ (1ULL<<LOC_API_ADAPTER_FDCL_SERVICE_REQ)
-
-
-typedef uint64_t LOC_API_ADAPTER_EVENT_MASK_T;
-
-typedef enum loc_api_adapter_msg_to_check_supported {
- LOC_API_ADAPTER_MESSAGE_LOCATION_BATCHING, // Batching 1.0
- LOC_API_ADAPTER_MESSAGE_BATCHED_GENFENCE_BREACH, // Geofence Batched Breach
- LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_TRACKING, // DBT 2.0
- LOC_API_ADAPTER_MESSAGE_ADAPTIVE_LOCATION_BATCHING, // Batching 1.5
- LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_LOCATION_BATCHING, // Batching 2.0
- LOC_API_ADAPTER_MESSAGE_UPDATE_TBF_ON_THE_FLY, // Updating Tracking TBF On The Fly
- LOC_API_ADAPTER_MESSAGE_OUTDOOR_TRIP_BATCHING, // Outdoor Trip Batching
-
- LOC_API_ADAPTER_MESSAGE_MAX
-} LocCheckingMessagesID;
-
-typedef int IzatDevId_t;
-
-typedef uint32_t LOC_GPS_LOCK_MASK;
-#define isGpsLockNone(lock) ((lock) == 0)
-#define isGpsLockMO(lock) ((lock) & ((LOC_GPS_LOCK_MASK)1))
-#define isGpsLockMT(lock) ((lock) & ((LOC_GPS_LOCK_MASK)2))
-#define isGpsLockAll(lock) (((lock) & ((LOC_GPS_LOCK_MASK)3)) == 3)
-
-/*++ ***********************************************
-** Satellite Measurement and Satellite Polynomial
-** Structure definitions
-** ***********************************************
---*/
-#define GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE 12
-#define GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE 3
-#define GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE 9
-#define GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE 4
-#define GNSS_LOC_SV_MEAS_LIST_MAX_SIZE 16
-
-enum ulp_gnss_sv_measurement_valid_flags{
-
- ULP_GNSS_SV_MEAS_GPS_TIME = 0,
- ULP_GNSS_SV_MEAS_PSUEDO_RANGE,
- ULP_GNSS_SV_MEAS_MS_IN_WEEK,
- ULP_GNSS_SV_MEAS_SUB_MSEC,
- ULP_GNSS_SV_MEAS_CARRIER_PHASE,
- ULP_GNSS_SV_MEAS_DOPPLER_SHIFT,
- ULP_GNSS_SV_MEAS_CNO,
- ULP_GNSS_SV_MEAS_LOSS_OF_LOCK,
-
- ULP_GNSS_SV_MEAS_MAX_VALID_FLAGS
-};
-
-#define ULP_GNSS_SV_MEAS_BIT_GPS_TIME (1<<ULP_GNSS_SV_MEAS_GPS_TIME)
-#define ULP_GNSS_SV_MEAS_BIT_PSUEDO_RANGE (1<<ULP_GNSS_SV_MEAS_PSUEDO_RANGE)
-#define ULP_GNSS_SV_MEAS_BIT_MS_IN_WEEK (1<<ULP_GNSS_SV_MEAS_MS_IN_WEEK)
-#define ULP_GNSS_SV_MEAS_BIT_SUB_MSEC (1<<ULP_GNSS_SV_MEAS_SUB_MSEC)
-#define ULP_GNSS_SV_MEAS_BIT_CARRIER_PHASE (1<<ULP_GNSS_SV_MEAS_CARRIER_PHASE)
-#define ULP_GNSS_SV_MEAS_BIT_DOPPLER_SHIFT (1<<ULP_GNSS_SV_MEAS_DOPPLER_SHIFT)
-#define ULP_GNSS_SV_MEAS_BIT_CNO (1<<ULP_GNSS_SV_MEAS_CNO)
-#define ULP_GNSS_SV_MEAS_BIT_LOSS_OF_LOCK (1<<ULP_GNSS_SV_MEAS_LOSS_OF_LOCK)
-
-enum ulp_gnss_sv_poly_valid_flags{
-
- ULP_GNSS_SV_POLY_GLO_FREQ = 0,
- ULP_GNSS_SV_POLY_T0,
- ULP_GNSS_SV_POLY_IODE,
- ULP_GNSS_SV_POLY_FLAG,
- ULP_GNSS_SV_POLY_POLYCOEFF_XYZ0,
- ULP_GNSS_SV_POLY_POLYCOEFF_XYZN,
- ULP_GNSS_SV_POLY_POLYCOEFF_OTHER,
- ULP_GNSS_SV_POLY_SV_POSUNC,
- ULP_GNSS_SV_POLY_IONODELAY,
- ULP_GNSS_SV_POLY_IONODOT,
- ULP_GNSS_SV_POLY_SBAS_IONODELAY,
- ULP_GNSS_SV_POLY_SBAS_IONODOT,
- ULP_GNSS_SV_POLY_TROPODELAY,
- ULP_GNSS_SV_POLY_ELEVATION,
- ULP_GNSS_SV_POLY_ELEVATIONDOT,
- ULP_GNSS_SV_POLY_ELEVATIONUNC,
- ULP_GNSS_SV_POLY_VELO_COEFF,
- ULP_GNSS_SV_POLY_ENHANCED_IOD,
-
- ULP_GNSS_SV_POLY_VALID_FLAGS
-
-};
-
-#define ULP_GNSS_SV_POLY_BIT_GLO_FREQ (1<<ULP_GNSS_SV_POLY_GLO_FREQ)
-#define ULP_GNSS_SV_POLY_BIT_T0 (1<<ULP_GNSS_SV_POLY_T0)
-#define ULP_GNSS_SV_POLY_BIT_IODE (1<<ULP_GNSS_SV_POLY_IODE)
-#define ULP_GNSS_SV_POLY_BIT_FLAG (1<<ULP_GNSS_SV_POLY_FLAG)
-#define ULP_GNSS_SV_POLY_BIT_POLYCOEFF_XYZ0 (1<<ULP_GNSS_SV_POLY_POLYCOEFF_XYZ0)
-#define ULP_GNSS_SV_POLY_BIT_POLYCOEFF_XYZN (1<<ULP_GNSS_SV_POLY_POLYCOEFF_XYZN)
-#define ULP_GNSS_SV_POLY_BIT_POLYCOEFF_OTHER (1<<ULP_GNSS_SV_POLY_POLYCOEFF_OTHER)
-#define ULP_GNSS_SV_POLY_BIT_SV_POSUNC (1<<ULP_GNSS_SV_POLY_SV_POSUNC)
-#define ULP_GNSS_SV_POLY_BIT_IONODELAY (1<<ULP_GNSS_SV_POLY_IONODELAY)
-#define ULP_GNSS_SV_POLY_BIT_IONODOT (1<<ULP_GNSS_SV_POLY_IONODOT)
-#define ULP_GNSS_SV_POLY_BIT_SBAS_IONODELAY (1<<ULP_GNSS_SV_POLY_SBAS_IONODELAY)
-#define ULP_GNSS_SV_POLY_BIT_SBAS_IONODOT (1<<ULP_GNSS_SV_POLY_SBAS_IONODOT)
-#define ULP_GNSS_SV_POLY_BIT_TROPODELAY (1<<ULP_GNSS_SV_POLY_TROPODELAY)
-#define ULP_GNSS_SV_POLY_BIT_ELEVATION (1<<ULP_GNSS_SV_POLY_ELEVATION)
-#define ULP_GNSS_SV_POLY_BIT_ELEVATIONDOT (1<<ULP_GNSS_SV_POLY_ELEVATIONDOT)
-#define ULP_GNSS_SV_POLY_BIT_ELEVATIONUNC (1<<ULP_GNSS_SV_POLY_ELEVATIONUNC)
-#define ULP_GNSS_SV_POLY_BIT_VELO_COEFF (1<<ULP_GNSS_SV_POLY_VELO_COEFF)
-#define ULP_GNSS_SV_POLY_BIT_ENHANCED_IOD (1<<ULP_GNSS_SV_POLY_ENHANCED_IOD)
-
-
-typedef enum
-{
- GNSS_LOC_SV_SYSTEM_GPS = 1,
- /**< GPS satellite. */
- GNSS_LOC_SV_SYSTEM_GALILEO = 2,
- /**< GALILEO satellite. */
- GNSS_LOC_SV_SYSTEM_SBAS = 3,
- /**< SBAS satellite. */
- GNSS_LOC_SV_SYSTEM_COMPASS = 4,
- /**< COMPASS satellite. */
- GNSS_LOC_SV_SYSTEM_GLONASS = 5,
- /**< GLONASS satellite. */
- GNSS_LOC_SV_SYSTEM_BDS = 6,
- /**< BDS satellite. */
- GNSS_LOC_SV_SYSTEM_QZSS = 7
- /**< QZSS satellite. */
-} Gnss_LocSvSystemEnumType;
-
-typedef enum
-{
- GNSS_LOC_FREQ_SOURCE_INVALID = 0,
- /**< Source of the frequency is invalid */
- GNSS_LOC_FREQ_SOURCE_EXTERNAL = 1,
- /**< Source of the frequency is from external injection */
- GNSS_LOC_FREQ_SOURCE_PE_CLK_REPORT = 2,
- /**< Source of the frequency is from Navigation engine */
- GNSS_LOC_FREQ_SOURCE_UNKNOWN = 3
- /**< Source of the frequency is unknown */
-} Gnss_LocSourceofFreqEnumType;
-
-typedef struct
-{
- size_t size;
- float clockDrift;
- /**< Receiver clock Drift \n
- - Units: meter per sec \n
- */
- float clockDriftUnc;
- /**< Receiver clock Drift uncertainty \n
- - Units: meter per sec \n
- */
- Gnss_LocSourceofFreqEnumType sourceOfFreq;
-}Gnss_LocRcvrClockFrequencyInfoStructType;
-
-typedef struct
-{
- size_t size;
- uint8_t leapSec;
- /**< GPS time leap second delta to UTC time \n
- - Units: sec \n
- */
- uint8_t leapSecUnc;
- /**< Uncertainty for GPS leap second \n
- - Units: sec \n
- */
-}Gnss_LeapSecondInfoStructType;
-
-typedef enum
-{
- GNSS_LOC_SYS_TIME_BIAS_VALID = 0x01,
- /**< System time bias valid */
- GNSS_LOC_SYS_TIME_BIAS_UNC_VALID = 0x02,
- /**< System time bias uncertainty valid */
-}Gnss_LocInterSystemBiasValidMaskType;
-
-typedef struct
-{
- size_t size;
- uint32_t validMask;
- /* Validity mask as per Gnss_LocInterSystemBiasValidMaskType */
-
- float timeBias;
- /**< System-1 to System-2 Time Bias \n
- - Units: msec \n
- */
- float timeBiasUnc;
- /**< System-1 to System-2 Time Bias uncertainty \n
- - Units: msec \n
- */
-}Gnss_InterSystemBiasStructType;
-
-
-typedef struct
-{
- size_t size;
- uint16_t systemWeek;
- /**< System week number for GPS, BDS and GAL satellite systems. \n
- Set to 65535 when invalid or not available. \n
- Not valid for GLONASS system. \n
- */
-
- uint32_t systemMsec;
- /**< System time msec. Time of Week for GPS, BDS, GAL and
- Time of Day for GLONASS.
- - Units: msec \n
- */
- float systemClkTimeBias;
- /**< System clock time bias \n
- - Units: msec \n
- System time = systemMsec - systemClkTimeBias \n
- */
- float systemClkTimeUncMs;
- /**< Single sided maximum time bias uncertainty \n
- - Units: msec \n
- */
-}Gnss_LocSystemTimeStructType;
-
-typedef struct {
-
- size_t size;
- uint8_t gloFourYear;
- /**< GLONASS four year number from 1996. Refer to GLONASS ICD.\n
- Applicable only for GLONASS and shall be ignored for other constellations. \n
- If unknown shall be set to 255
- */
-
- uint16_t gloDays;
- /**< GLONASS day number in four years. Refer to GLONASS ICD.
- Applicable only for GLONASS and shall be ignored for other constellations. \n
- If unknown shall be set to 65535
- */
-
- uint32_t gloMsec;
- /**< GLONASS time of day in msec. Refer to GLONASS ICD.
- - Units: msec \n
- */
-
- float gloClkTimeBias;
- /**< System clock time bias (sub-millisecond) \n
- - Units: msec \n
- System time = systemMsec - systemClkTimeBias \n
- */
-
- float gloClkTimeUncMs;
- /**< Single sided maximum time bias uncertainty \n
- - Units: msec \n
- */
-}Gnss_LocGloTimeStructType; /* Type */
-
-typedef struct {
-
- size_t size;
- uint32_t refFCount;
- /**< Receiver frame counter value at reference tick */
-
- uint8_t systemRtc_valid;
- /**< Validity indicator for System RTC */
-
- uint64_t systemRtcMs;
- /**< Platform system RTC value \n
- - Units: msec \n
- */
-
- uint32_t sourceOfTime;
- /**< Source of time information */
-
-}Gnss_LocGnssTimeExtStructType;
-
-
-
-typedef enum
-{
- GNSS_LOC_MEAS_STATUS_NULL = 0x00000000,
- /**< No information state */
- GNSS_LOC_MEAS_STATUS_SM_VALID = 0x00000001,
- /**< Code phase is known */
- GNSS_LOC_MEAS_STATUS_SB_VALID = 0x00000002,
- /**< Sub-bit time is known */
- GNSS_LOC_MEAS_STATUS_MS_VALID = 0x00000004,
- /**< Satellite time is known */
- GNSS_LOC_MEAS_STATUS_BE_CONFIRM = 0x00000008,
- /**< Bit edge is confirmed from signal */
- GNSS_LOC_MEAS_STATUS_VELOCITY_VALID = 0x00000010,
- /**< Satellite Doppler measured */
- GNSS_LOC_MEAS_STATUS_VELOCITY_FINE = 0x00000020,
- /**< TRUE: Fine Doppler measured, FALSE: Coarse Doppler measured */
- GNSS_LOC_MEAS_STATUS_FROM_RNG_DIFF = 0x00000200,
- /**< Range update from Satellite differences */
- GNSS_LOC_MEAS_STATUS_FROM_VE_DIFF = 0x00000400,
- /**< Doppler update from Satellite differences */
- GNSS_LOC_MEAS_STATUS_DONT_USE_X = 0x00000800,
- /**< Don't use measurement if bit is set */
- GNSS_LOC_MEAS_STATUS_DONT_USE_M = 0x000001000,
- /**< Don't use measurement if bit is set */
- GNSS_LOC_MEAS_STATUS_DONT_USE_D = 0x000002000,
- /**< Don't use measurement if bit is set */
- GNSS_LOC_MEAS_STATUS_DONT_USE_S = 0x000004000,
- /**< Don't use measurement if bit is set */
- GNSS_LOC_MEAS_STATUS_DONT_USE_P = 0x000008000
- /**< Don't use measurement if bit is set */
-}Gnss_LocSvMeasStatusMaskType;
-
-typedef struct
-{
- size_t size;
- uint32_t svMs;
- /**< Satellite time milisecond.\n
- For GPS, BDS, GAL range of 0 thru (604800000-1) \n
- For GLONASS range of 0 thru (86400000-1) \n
- Valid when PD_LOC_MEAS_STATUS_MS_VALID bit is set in measurement status \n
- Note: All SV times in the current measurement block are alredy propagated to common reference time epoch. \n
- - Units: msec \n
- */
- float svSubMs;
- /**<Satellite time sub-millisecond. \n
- Total SV Time = svMs + svSubMs \n
- - Units: msec \n
- */
- float svTimeUncMs;
- /**< Satellite Time uncertainty \n
- - Units: msec \n
- */
- float dopplerShift;
- /**< Satellite Doppler \n
- - Units: meter per sec \n
- */
- float dopplerShiftUnc;
- /**< Satellite Doppler uncertainty\n
- - Units: meter per sec \n
- */
-}Gnss_LocSVTimeSpeedStructType;
-
-typedef enum
-{
- GNSS_SV_STATE_IDLE = 0,
- GNSS_SV_STATE_SEARCH = 1,
- GNSS_SV_STATE_SEARCH_VERIFY = 2,
- GNSS_SV_STATE_BIT_EDGE = 3,
- GNSS_SV_STATE_VERIFY_TRACK = 4,
- GNSS_SV_STATE_TRACK = 5,
- GNSS_SV_STATE_RESTART = 6,
- GNSS_SV_STATE_DPO_TRACK = 7
-} Gnss_LocSVStateEnumType;
-
-typedef enum
-{
- GNSS_LOC_SVINFO_MASK_HAS_EPHEMERIS = 0x01,
- /**< Ephemeris is available for this SV */
- GNSS_LOC_SVINFO_MASK_HAS_ALMANAC = 0x02
- /**< Almanac is available for this SV */
-}Gnss_LocSvInfoMaskT;
-
-typedef enum
-{
- GNSS_LOC_SV_SRCH_STATUS_IDLE = 1,
- /**< SV is not being actively processed */
- GNSS_LOC_SV_SRCH_STATUS_SEARCH = 2,
- /**< The system is searching for this SV */
- GNSS_LOC_SV_SRCH_STATUS_TRACK = 3
- /**< SV is being tracked */
-}Gnss_LocSvSearchStatusEnumT;
-
-
-typedef struct
-{
- size_t size;
- uint16_t gnssSvId;
- /**< GNSS SV ID.
- \begin{itemize1}
- \item Range: \begin{itemize1}
- \item For GPS: 1 to 32
- \item For GLONASS: 1 to 32
- \item For SBAS: 120 to 151
- \item For BDS: 201 to 237
- \end{itemize1} \end{itemize1}
- The GPS and GLONASS SVs can be disambiguated using the system field.
- */
- uint8_t gloFrequency;
- /**< GLONASS frequency number + 7 \n
- Valid only for GLONASS System \n
- Shall be ignored for all other systems \n
- - Range: 1 to 14 \n
- */
- Gnss_LocSvSearchStatusEnumT svStatus;
- /**< Satellite search state \n
- @ENUM()
- */
- bool healthStatus_valid;
- /**< SV Health Status validity flag\n
- - 0: Not valid \n
- - 1: Valid \n
- */
- uint8_t healthStatus;
- /**< Health status.
- \begin{itemize1}
- \item Range: 0 to 1; 0 = unhealthy, \n 1 = healthy, 2 = unknown
- \vspace{-0.18in} \end{itemize1}
- */
- Gnss_LocSvInfoMaskT svInfoMask;
- /**< Indicates whether almanac and ephemeris information is available. \n
- @MASK()
- */
- uint64_t measurementStatus;
- /**< Bitmask indicating SV measurement status.
- Valid bitmasks: \n
- If any MSB bit in 0xFFC0000000000000 DONT_USE is set, the measurement
- must not be used by the client.
- @MASK()
- */
- uint16_t CNo;
- /**< Carrier to Noise ratio \n
- - Units: 0.1 dBHz \n
- */
- uint16_t gloRfLoss;
- /**< GLONASS Rf loss reference to Antenna. \n
- - Units: dB, Scale: 0.1 \n
- */
- bool lossOfLock;
- /**< Loss of signal lock indicator \n
- - 0: Signal in continuous track \n
- - 1: Signal not in track \n
- */
- int16_t measLatency;
- /**< Age of the measurement. Positive value means measurement precedes ref time. \n
- - Units: msec \n
- */
- Gnss_LocSVTimeSpeedStructType svTimeSpeed;
- /**< Unfiltered SV Time and Speed information
- */
- float dopplerAccel;
- /**< Satellite Doppler Accelertion\n
- - Units: Hz/s \n
- */
- bool multipathEstValid;
- /**< Multipath estimate validity flag\n
- - 0: Multipath estimate not valid \n
- - 1: Multipath estimate valid \n
- */
- float multipathEstimate;
- /**< Estimate of multipath in measurement\n
- - Units: Meters \n
- */
- bool fineSpeedValid;
- /**< Fine speed validity flag\n
- - 0: Fine speed not valid \n
- - 1: Fine speed valid \n
- */
- float fineSpeed;
- /**< Carrier phase derived speed \n
- - Units: m/s \n
- */
- bool fineSpeedUncValid;
- /**< Fine speed uncertainty validity flag\n
- - 0: Fine speed uncertainty not valid \n
- - 1: Fine speed uncertainty valid \n
- */
- float fineSpeedUnc;
- /**< Carrier phase derived speed \n
- - Units: m/s \n
- */
- bool carrierPhaseValid;
- /**< Carrier Phase measurement validity flag\n
- - 0: Carrier Phase not valid \n
- - 1: Carrier Phase valid \n
- */
- double carrierPhase;
- /**< Carrier phase measurement [L1 cycles] \n
- */
- bool cycleSlipCountValid;
- /**< Cycle slup count validity flag\n
- - 0: Not valid \n
- - 1: Valid \n
- */
- uint8_t cycleSlipCount;
- /**< Increments when a CSlip is detected */
-
- bool svDirectionValid;
- /**< Validity flag for SV direction */
-
- float svAzimuth;
- /**< Satellite Azimuth
- - Units: radians \n
- */
- float svElevation;
- /**< Satellite Elevation
- - Units: radians \n
- */
-} Gnss_SVMeasurementStructType;
-
-/**< Maximum number of satellites in measurement block for given system. */
-
-typedef struct
-{
- size_t size;
- Gnss_LocSvSystemEnumType system;
- /**< Specifies the Satellite System Type
- */
- bool isSystemTimeValid;
- /**< Indicates whether System Time is Valid:\n
- - 0x01 (TRUE) -- System Time is valid \n
- - 0x00 (FALSE) -- System Time is not valid
- */
- Gnss_LocSystemTimeStructType systemTime;
- /**< System Time Information \n
- */
- bool isGloTime_valid;
- Gnss_LocGloTimeStructType gloTime;
-
- bool isSystemTimeExt_valid;
- Gnss_LocGnssTimeExtStructType systemTimeExt;
-
- uint8_t numSvs;
- /* Number of SVs in this report block */
-
- Gnss_SVMeasurementStructType svMeasurement[GNSS_LOC_SV_MEAS_LIST_MAX_SIZE];
- /**< Satellite measurement Information \n
- */
-} Gnss_ClockMeasurementStructType;
-
-
-typedef struct
-{
- size_t size;
- uint8_t seqNum;
- /**< Current message Number */
- uint8_t maxMessageNum;
- /**< Maximum number of message that will be sent for present time epoch. */
-
- bool leapSecValid;
- Gnss_LeapSecondInfoStructType leapSec;
-
- Gnss_InterSystemBiasStructType gpsGloInterSystemBias;
-
- Gnss_InterSystemBiasStructType gpsBdsInterSystemBias;
-
- Gnss_InterSystemBiasStructType gpsGalInterSystemBias;
-
- Gnss_InterSystemBiasStructType bdsGloInterSystemBias;
-
- Gnss_InterSystemBiasStructType galGloInterSystemBias;
-
- Gnss_InterSystemBiasStructType galBdsInterSystemBias;
-
- bool clockFreqValid;
- Gnss_LocRcvrClockFrequencyInfoStructType clockFreq; /* Freq */
- bool gnssMeasValid;
- Gnss_ClockMeasurementStructType gnssMeas;
- Gnss_ApTimeStampStructType timeStamp;
-
-} GnssSvMeasurementSet;
-
-typedef enum
-{
- GNSS_SV_POLY_COEFF_VALID = 0x01,
- /**< SV position in orbit coefficients are valid */
- GNSS_SV_POLY_IONO_VALID = 0x02,
- /**< Iono estimates are valid */
-
- GNSS_SV_POLY_TROPO_VALID = 0x04,
- /**< Tropo estimates are valid */
-
- GNSS_SV_POLY_ELEV_VALID = 0x08,
- /**< Elevation, rate, uncertainty are valid */
-
- GNSS_SV_POLY_SRC_ALM_CORR = 0x10,
- /**< Polynomials based on XTRA */
-
- GNSS_SV_POLY_SBAS_IONO_VALID = 0x20,
- /**< SBAS IONO and rate are valid */
-
- GNSS_SV_POLY_GLO_STR4 = 0x40
- /**< GLONASS String 4 has been received */
-}Gnss_SvPolyStatusMaskType;
-
-
-typedef struct
-{
- size_t size;
- uint16_t gnssSvId;
- /* GPS: 1-32, GLO: 65-96, 0: Invalid,
- SBAS: 120-151, BDS:201-237,GAL:301 to 336
- All others are reserved
- */
- int8_t freqNum;
- /* Freq index, only valid if u_SysInd is GLO */
-
- uint8_t svPolyFlags;
- /* Indicate the validity of the elements
- as per Gnss_SvPolyStatusMaskType
- */
-
- uint32_t is_valid;
-
- uint16_t iode;
- /* Ephemeris reference time
- GPS:Issue of Data Ephemeris used [unitless].
- GLO: Tb 7-bit, refer to ICD02
- */
- double T0;
- /* Reference time for polynominal calculations
- GPS: Secs in week.
- GLO: Full secs since Jan/01/96
- */
- double polyCoeffXYZ0[GNSS_SV_POLY_XYZ_0_TH_ORDER_COEFF_MAX_SIZE];
- /* C0X, C0Y, C0Z */
- double polyCoefXYZN[GNSS_SV_POLY_XYZ_N_TH_ORDER_COEFF_MAX_SIZE];
- /* C1X, C2X ... C2Z, C3Z */
- float polyCoefOther[GNSS_SV_POLY_SV_CLKBIAS_COEFF_MAX_SIZE];
- /* C0T, C1T, C2T, C3T */
- float svPosUnc; /* SV position uncertainty [m]. */
- float ionoDelay; /* Ionospheric delay at d_T0 [m]. */
- float ionoDot; /* Iono delay rate [m/s]. */
- float sbasIonoDelay;/* SBAS Ionospheric delay at d_T0 [m]. */
- float sbasIonoDot; /* SBAS Iono delay rate [m/s]. */
- float tropoDelay; /* Tropospheric delay [m]. */
- float elevation; /* Elevation [rad] at d_T0 */
- float elevationDot; /* Elevation rate [rad/s] */
- float elevationUnc; /* SV elevation [rad] uncertainty */
- double velCoef[GNSS_SV_POLY_VELOCITY_COEF_MAX_SIZE];
- /* Coefficients of velocity poly */
- uint32_t enhancedIOD; /* Enhanced Reference Time */
-} GnssSvPolynomial;
-
-/* Various Short Range Node Technology type*/
-typedef enum {
- SRN_AP_DATA_TECH_TYPE_NONE,
- SRN_AP_DATA_TECH_TYPE_BT,
- SRN_AP_DATA_TECH_TYPE_BTLE,
- SRN_AP_DATA_TECH_TYPE_NFC,
- SRN_AP_DATA_TECH_TYPE_MOBILE_CODE,
- SRN_AP_DATA_TECH_TYPE_OTHER
-} Gnss_SrnTech;
-
-/* Mac Address type requested by modem */
-typedef enum {
- SRN_AP_DATA_PUBLIC_MAC_ADDR_TYPE_INVALID, /* No valid mac address type send */
- SRN_AP_DATA_PUBLIC_MAC_ADDR_TYPE_PUBLIC, /* SRN AP MAC Address type PUBLIC */
- SRN_AP_DATA_PUBLIC_MAC_ADDR_TYPE_PRIVATE, /* SRN AP MAC Address type PRIVATE */
- SRN_AP_DATA_PUBLIC_MAC_ADDR_TYPE_OTHER, /* SRN AP MAC Address type OTHER */
-}Gnss_Srn_MacAddr_Type;
-
-typedef struct
-{
- size_t size;
- Gnss_SrnTech srnTechType; /* SRN Technology type in request */
- bool srnRequest; /* scan - start(true) or stop(false) */
- bool e911Mode; /* If in E911 emergency */
- Gnss_Srn_MacAddr_Type macAddrType; /* SRN AP MAC Address type */
-} GnssSrnDataReq;
-
-/*
- * Represents the status of AGNSS augmented to support IPv4.
- */
-struct AGnssExtStatusIpV4 {
- AGpsExtType type;
- LocAGpsStatusValue status;
- /*
- * 32-bit IPv4 address.
- */
- uint32_t ipV4Addr;
-};
-
-/*
- * Represents the status of AGNSS augmented to support IPv6.
- */
-struct AGnssExtStatusIpV6 {
- AGpsExtType type;
- LocAGpsStatusValue status;
- /*
- * 128-bit IPv6 address.
- */
- uint8_t ipV6Addr[16];
-};
-
-/* ODCPI Request Info */
-enum OdcpiRequestType {
- ODCPI_REQUEST_TYPE_START,
- ODCPI_REQUEST_TYPE_STOP
-};
-struct OdcpiRequestInfo {
- size_t size;
- OdcpiRequestType type;
- uint32_t tbfMillis;
- bool isEmergencyMode;
-};
-/* Callback to send ODCPI request to framework */
-typedef std::function<void(const OdcpiRequestInfo& request)> OdcpiRequestCallback;
-
-/*
- * Callback with AGNSS(IpV4) status information.
- *
- * @param status Will be of type AGnssExtStatusIpV4.
- */
-typedef void (*AgnssStatusIpV4Cb)(AGnssExtStatusIpV4 status);
-
-/*
- * Callback with AGNSS(IpV6) status information.
- *
- * @param status Will be of type AGnssExtStatusIpV6.
- */
-typedef void (*AgnssStatusIpV6Cb)(AGnssExtStatusIpV6 status);
-
-/* Constructs for interaction with loc_net_iface library */
-typedef void (*LocAgpsOpenResultCb)(bool isSuccess, AGpsExtType agpsType, const char* apn,
- AGpsBearerType bearerType, void* userDataPtr);
-
-typedef void (*LocAgpsCloseResultCb)(bool isSuccess, AGpsExtType agpsType, void* userDataPtr);
-
-/* Shared resources of LocIpc */
-#define LOC_IPC_HAL "/dev/socket/location/socket_hal"
-#define LOC_IPC_XTRA "/dev/socket/location/xtra/socket_xtra"
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* GPS_EXTENDED_C_H */
diff --git a/gps/utils/linked_list.c b/gps/utils/linked_list.c
deleted file mode 100644
index 02e1463..0000000
--- a/gps/utils/linked_list.c
+++ /dev/null
@@ -1,325 +0,0 @@
-/* Copyright (c) 2011, 2014, 2017 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.
- */
-
-#define LOG_TAG "LocSvc_utils_ll"
-
-#include "linked_list.h"
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <loc_pla.h>
-#include <log_util.h>
-
-typedef struct list_element {
- struct list_element* next;
- struct list_element* prev;
- void* data_ptr;
- void (*dealloc_func)(void*);
-}list_element;
-
-typedef struct list_state {
- list_element* p_head;
- list_element* p_tail;
-} list_state;
-
-/* ----------------------- END INTERNAL FUNCTIONS ---------------------------------------- */
-
-/*===========================================================================
-
- FUNCTION: linked_list_init
-
- ===========================================================================*/
-linked_list_err_type linked_list_init(void** list_data)
-{
- if( list_data == NULL )
- {
- LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
- return eLINKED_LIST_INVALID_PARAMETER;
- }
-
- list_state* tmp_list;
- tmp_list = (list_state*)calloc(1, sizeof(list_state));
- if( tmp_list == NULL )
- {
- LOC_LOGE("%s: Unable to allocate space for list!\n", __FUNCTION__);
- return eLINKED_LIST_FAILURE_GENERAL;
- }
-
- tmp_list->p_head = NULL;
- tmp_list->p_tail = NULL;
-
- *list_data = tmp_list;
-
- return eLINKED_LIST_SUCCESS;
-}
-
-/*===========================================================================
-
- FUNCTION: linked_list_destroy
-
- ===========================================================================*/
-linked_list_err_type linked_list_destroy(void** list_data)
-{
- if( list_data == NULL )
- {
- LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
- return eLINKED_LIST_INVALID_HANDLE;
- }
-
- list_state* p_list = (list_state*)*list_data;
-
- linked_list_flush(p_list);
-
- free(*list_data);
- *list_data = NULL;
-
- return eLINKED_LIST_SUCCESS;
-}
-
-/*===========================================================================
-
- FUNCTION: linked_list_add
-
- ===========================================================================*/
-linked_list_err_type linked_list_add(void* list_data, void *data_obj, void (*dealloc)(void*))
-{
- if( list_data == NULL )
- {
- LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
- return eLINKED_LIST_INVALID_HANDLE;
- }
-
- if( data_obj == NULL )
- {
- LOC_LOGE("%s: Invalid input parameter!\n", __FUNCTION__);
- return eLINKED_LIST_INVALID_PARAMETER;
- }
-
- list_state* p_list = (list_state*)list_data;
- list_element* elem = (list_element*)malloc(sizeof(list_element));
- if( elem == NULL )
- {
- LOC_LOGE("%s: Memory allocation failed\n", __FUNCTION__);
- return eLINKED_LIST_FAILURE_GENERAL;
- }
-
- /* Copy data to newly created element */
- elem->data_ptr = data_obj;
- elem->next = NULL;
- elem->prev = NULL;
- elem->dealloc_func = dealloc;
-
- /* Replace head element */
- list_element* tmp = p_list->p_head;
- p_list->p_head = elem;
- /* Point next to the previous head element */
- p_list->p_head->next = tmp;
-
- if( tmp != NULL )
- {
- tmp->prev = p_list->p_head;
- }
- else
- {
- p_list->p_tail = p_list->p_head;
- }
-
- return eLINKED_LIST_SUCCESS;
-}
-
-/*===========================================================================
-
- FUNCTION: linked_list_remove
-
- ===========================================================================*/
-linked_list_err_type linked_list_remove(void* list_data, void **data_obj)
-{
- if( list_data == NULL )
- {
- LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
- return eLINKED_LIST_INVALID_HANDLE;
- }
-
- if( data_obj == NULL )
- {
- LOC_LOGE("%s: Invalid input parameter!\n", __FUNCTION__);
- return eLINKED_LIST_INVALID_PARAMETER;
- }
-
- list_state* p_list = (list_state*)list_data;
- if( p_list->p_tail == NULL )
- {
- return eLINKED_LIST_UNAVAILABLE_RESOURCE;
- }
-
- list_element* tmp = p_list->p_tail;
-
- /* Replace tail element */
- p_list->p_tail = tmp->prev;
-
- if( p_list->p_tail != NULL )
- {
- p_list->p_tail->next = NULL;
- }
- else
- {
- p_list->p_head = p_list->p_tail;
- }
-
- /* Copy data to output param */
- *data_obj = tmp->data_ptr;
-
- /* Free allocated list element */
- free(tmp);
-
- return eLINKED_LIST_SUCCESS;
-}
-
-/*===========================================================================
-
- FUNCTION: linked_list_empty
-
- ===========================================================================*/
-int linked_list_empty(void* list_data)
-{
- if( list_data == NULL )
- {
- LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
- return (int)eLINKED_LIST_INVALID_HANDLE;
- }
- else
- {
- list_state* p_list = (list_state*)list_data;
- return p_list->p_head == NULL ? 1 : 0;
- }
-}
-
-/*===========================================================================
-
- FUNCTION: linked_list_flush
-
- ===========================================================================*/
-linked_list_err_type linked_list_flush(void* list_data)
-{
- if( list_data == NULL )
- {
- LOC_LOGE("%s: Invalid list parameter!\n", __FUNCTION__);
- return eLINKED_LIST_INVALID_HANDLE;
- }
-
- list_state* p_list = (list_state*)list_data;
-
- /* Remove all dynamically allocated elements */
- while( p_list->p_head != NULL )
- {
- list_element* tmp = p_list->p_head->next;
-
- /* Free data pointer if told to do so. */
- if( p_list->p_head->dealloc_func != NULL )
- {
- p_list->p_head->dealloc_func(p_list->p_head->data_ptr);
- }
-
- /* Free list element */
- free(p_list->p_head);
-
- p_list->p_head = tmp;
- }
-
- p_list->p_tail = NULL;
-
- return eLINKED_LIST_SUCCESS;
-}
-
-/*===========================================================================
-
- FUNCTION: linked_list_search
-
- ===========================================================================*/
-linked_list_err_type linked_list_search(void* list_data, void **data_p,
- bool (*equal)(void* data_0, void* data),
- void* data_0, bool rm_if_found)
-{
- if( list_data == NULL || NULL == equal )
- {
- LOC_LOGE("%s: Invalid list parameter! list_data %p equal %p\n",
- __FUNCTION__, list_data, equal);
- return eLINKED_LIST_INVALID_HANDLE;
- }
-
- list_state* p_list = (list_state*)list_data;
- if( p_list->p_tail == NULL )
- {
- return eLINKED_LIST_UNAVAILABLE_RESOURCE;
- }
-
- list_element* tmp = p_list->p_head;
-
- if (NULL != data_p) {
- *data_p = NULL;
- }
-
- while (NULL != tmp) {
- if ((*equal)(data_0, tmp->data_ptr)) {
- if (NULL != data_p) {
- *data_p = tmp->data_ptr;
- }
-
- if (rm_if_found) {
- if (NULL == tmp->prev) {
- p_list->p_head = tmp->next;
- } else {
- tmp->prev->next = tmp->next;
- }
-
- if (NULL == tmp->next) {
- p_list->p_tail = tmp->prev;
- } else {
- tmp->next->prev = tmp->prev;
- }
-
- tmp->prev = tmp->next = NULL;
-
- // dealloc data if it is not copied out && caller
- // has given us a dealloc function pointer.
- if (NULL == data_p && NULL != tmp->dealloc_func) {
- tmp->dealloc_func(tmp->data_ptr);
- }
- free(tmp);
- }
-
- tmp = NULL;
- } else {
- tmp = tmp->next;
- }
- }
-
- return eLINKED_LIST_SUCCESS;
-}
-
diff --git a/gps/utils/linked_list.h b/gps/utils/linked_list.h
deleted file mode 100644
index a85f09a..0000000
--- a/gps/utils/linked_list.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/* Copyright (c) 2011, 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 __LINKED_LIST_H__
-#define __LINKED_LIST_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include <stdbool.h>
-#include <stdlib.h>
-
-/** Linked List Return Codes */
-typedef enum
-{
- eLINKED_LIST_SUCCESS = 0,
- /**< Request was successful. */
- eLINKED_LIST_FAILURE_GENERAL = -1,
- /**< Failed because of a general failure. */
- eLINKED_LIST_INVALID_PARAMETER = -2,
- /**< Failed because the request contained invalid parameters. */
- eLINKED_LIST_INVALID_HANDLE = -3,
- /**< Failed because an invalid handle was specified. */
- eLINKED_LIST_UNAVAILABLE_RESOURCE = -4,
- /**< Failed because an there were not enough resources. */
- eLINKED_LIST_INSUFFICIENT_BUFFER = -5,
- /**< Failed because an the supplied buffer was too small. */
-}linked_list_err_type;
-
-/*===========================================================================
-FUNCTION linked_list_init
-
-DESCRIPTION
- Initializes internal structures for linked list.
-
- list_data: State of list to be initialized.
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-linked_list_err_type linked_list_init(void** list_data);
-
-/*===========================================================================
-FUNCTION linked_list_destroy
-
-DESCRIPTION
- Destroys internal structures for linked list.
-
- p_list_data: State of list to be destroyed.
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-linked_list_err_type linked_list_destroy(void** list_data);
-
-/*===========================================================================
-FUNCTION linked_list_add
-
-DESCRIPTION
- Adds an element to the head of the linked list. The passed in data pointer
- is not modified or freed. Passed in data_obj is expected to live throughout
- the use of the linked_list (i.e. data is not allocated internally)
-
- p_list_data: List to add data to the head of.
- data_obj: Pointer to data to add into list
- dealloc: Function used to deallocate memory for this element. Pass NULL
- if you do not want data deallocated during a flush operation
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-linked_list_err_type linked_list_add(void* list_data, void *data_obj, void (*dealloc)(void*));
-
-/*===========================================================================
-FUNCTION linked_list_remove
-
-DESCRIPTION
- Retrieves data from the list tail. data_obj is the tail element from the list
- passed in by linked_list_add.
-
- p_list_data: List to remove the tail from.
- data_obj: Pointer to data removed from list
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-linked_list_err_type linked_list_remove(void* list_data, void **data_obj);
-
-/*===========================================================================
-FUNCTION linked_list_empty
-
-DESCRIPTION
- Tells whether the list currently contains any elements
-
- p_list_data: List to check if empty.
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- 0/FALSE : List contains elements
- 1/TRUE : List is Empty
- Otherwise look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-int linked_list_empty(void* list_data);
-
-/*===========================================================================
-FUNCTION linked_list_flush
-
-DESCRIPTION
- Removes all elements from the list and deallocates them using the provided
- dealloc function while adding elements.
-
- p_list_data: List to remove all elements from.
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-linked_list_err_type linked_list_flush(void* list_data);
-
-/*===========================================================================
-FUNCTION linked_list_search
-
-DESCRIPTION
- Searches for an element in the linked list.
-
- p_list_data: List handle.
- data_p: to be stored with the data found; NUll if no match.
- if data_p passed in as NULL, then no write to it.
- equal: Function ptr takes in a list element, and returns
- indication if this the one looking for.
- data_0: The data being compared against.
- rm_if_found: Should data be removed if found?
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-linked_list_err_type linked_list_search(void* list_data, void **data_p,
- bool (*equal)(void* data_0, void* data),
- void* data_0, bool rm_if_found);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __LINKED_LIST_H__ */
diff --git a/gps/utils/loc_cfg.cpp b/gps/utils/loc_cfg.cpp
deleted file mode 100644
index d7adad1..0000000
--- a/gps/utils/loc_cfg.cpp
+++ /dev/null
@@ -1,1139 +0,0 @@
-/* Copyright (c) 2011-2015, 2018 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.
- *
- */
-
-#define LOG_NDEBUG 0
-#define LOG_TAG "LocSvc_utils_cfg"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <pthread.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <time.h>
-#include <pwd.h>
-#include <errno.h>
-#include <loc_cfg.h>
-#include <loc_pla.h>
-#include <loc_target.h>
-#include <loc_misc_utils.h>
-#ifdef USE_GLIB
-#include <glib.h>
-#endif
-#include "log_util.h"
-
-/*=============================================================================
- *
- * GLOBAL DATA DECLARATION
- *
- *============================================================================*/
-
-/* Parameter data */
-static uint32_t DEBUG_LEVEL = 0xff;
-static uint32_t TIMESTAMP = 0;
-static uint32_t LOC_MODEM_EMULATOR = 0;
-
-/* Parameter spec table */
-static const loc_param_s_type loc_param_table[] =
-{
- {"DEBUG_LEVEL", &DEBUG_LEVEL, NULL, 'n'},
- {"TIMESTAMP", &TIMESTAMP, NULL, 'n'},
- {"LOC_MODEM_EMULATOR", &LOC_MODEM_EMULATOR, NULL, 'n'},
-};
-static const int loc_param_num = sizeof(loc_param_table) / sizeof(loc_param_s_type);
-
-typedef struct loc_param_v_type
-{
- char* param_name;
- char* param_str_value;
- int param_int_value;
- double param_double_value;
-}loc_param_v_type;
-
-// Reference below arrays wherever needed to avoid duplicating
-// same conf path string over and again in location code.
-const char LOC_PATH_GPS_CONF[] = LOC_PATH_GPS_CONF_STR;
-const char LOC_PATH_IZAT_CONF[] = LOC_PATH_IZAT_CONF_STR;
-const char LOC_PATH_FLP_CONF[] = LOC_PATH_FLP_CONF_STR;
-const char LOC_PATH_LOWI_CONF[] = LOC_PATH_LOWI_CONF_STR;
-const char LOC_PATH_SAP_CONF[] = LOC_PATH_SAP_CONF_STR;
-const char LOC_PATH_APDR_CONF[] = LOC_PATH_APDR_CONF_STR;
-const char LOC_PATH_XTWIFI_CONF[] = LOC_PATH_XTWIFI_CONF_STR;
-const char LOC_PATH_QUIPC_CONF[] = LOC_PATH_QUIPC_CONF_STR;
-
-/*===========================================================================
-FUNCTION loc_modem_emulator_enabled
-
-DESCRIPTION
- Provides access to Modem Emulator config item.
-===========================================================================*/
-uint32_t loc_modem_emulator_enabled()
-{
- return LOC_MODEM_EMULATOR;
-}
-
-/*===========================================================================
-FUNCTION loc_set_config_entry
-
-DESCRIPTION
- Potentially sets a given configuration table entry based on the passed in
- configuration value. This is done by using a string comparison of the
- parameter names and those found in the configuration file.
-
-PARAMETERS:
- config_entry: configuration entry in the table to possibly set
- config_value: value to store in the entry if the parameter names match
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- None
-
-SIDE EFFECTS
- N/A
-===========================================================================*/
-int loc_set_config_entry(const loc_param_s_type* config_entry, loc_param_v_type* config_value)
-{
- int ret=-1;
- if(NULL == config_entry || NULL == config_value)
- {
- LOC_LOGE("%s: INVALID config entry or parameter", __FUNCTION__);
- return ret;
- }
-
- if (strcmp(config_entry->param_name, config_value->param_name) == 0 &&
- config_entry->param_ptr)
- {
- switch (config_entry->param_type)
- {
- case 's':
- if (strcmp(config_value->param_str_value, "NULL") == 0)
- {
- *((char*)config_entry->param_ptr) = '\0';
- }
- else {
- strlcpy((char*) config_entry->param_ptr,
- config_value->param_str_value,
- LOC_MAX_PARAM_STRING + 1);
- }
- /* Log INI values */
- LOC_LOGD("%s: PARAM %s = %s", __FUNCTION__,
- config_entry->param_name, (char*)config_entry->param_ptr);
-
- if(NULL != config_entry->param_set)
- {
- *(config_entry->param_set) = 1;
- }
- ret = 0;
- break;
- case 'n':
- *((int *)config_entry->param_ptr) = config_value->param_int_value;
- /* Log INI values */
- LOC_LOGD("%s: PARAM %s = %d", __FUNCTION__,
- config_entry->param_name, config_value->param_int_value);
-
- if(NULL != config_entry->param_set)
- {
- *(config_entry->param_set) = 1;
- }
- ret = 0;
- break;
- case 'f':
- *((double *)config_entry->param_ptr) = config_value->param_double_value;
- /* Log INI values */
- LOC_LOGD("%s: PARAM %s = %f", __FUNCTION__,
- config_entry->param_name, config_value->param_double_value);
-
- if(NULL != config_entry->param_set)
- {
- *(config_entry->param_set) = 1;
- }
- ret = 0;
- break;
- default:
- LOC_LOGE("%s: PARAM %s parameter type must be n, f, or s",
- __FUNCTION__, config_entry->param_name);
- }
- }
- return ret;
-}
-
-/*===========================================================================
-FUNCTION loc_fill_conf_item
-
-DESCRIPTION
- Takes a line of configuration item and sets defined values based on
- the passed in configuration table. This table maps strings to values to
- set along with the type of each of these values.
-
-PARAMETERS:
- input_buf : buffer contanis config item
- config_table: table definition of strings to places to store information
- table_length: length of the configuration table
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- 0: Number of records in the config_table filled with input_buf
-
-SIDE EFFECTS
- N/A
-===========================================================================*/
-int loc_fill_conf_item(char* input_buf,
- const loc_param_s_type* config_table, uint32_t table_length)
-{
- int ret = 0;
-
- if (input_buf && config_table) {
- char *lasts;
- loc_param_v_type config_value;
- memset(&config_value, 0, sizeof(config_value));
-
- /* Separate variable and value */
- config_value.param_name = strtok_r(input_buf, "=", &lasts);
- /* skip lines that do not contain "=" */
- if (config_value.param_name) {
- config_value.param_str_value = strtok_r(NULL, "=", &lasts);
-
- /* skip lines that do not contain two operands */
- if (config_value.param_str_value) {
- /* Trim leading and trailing spaces */
- loc_util_trim_space(config_value.param_name);
- loc_util_trim_space(config_value.param_str_value);
-
- /* Parse numerical value */
- if ((strlen(config_value.param_str_value) >=3) &&
- (config_value.param_str_value[0] == '0') &&
- (tolower(config_value.param_str_value[1]) == 'x'))
- {
- /* hex */
- config_value.param_int_value = (int) strtol(&config_value.param_str_value[2],
- (char**) NULL, 16);
- }
- else {
- config_value.param_double_value = (double) atof(config_value.param_str_value); /* float */
- config_value.param_int_value = atoi(config_value.param_str_value); /* dec */
- }
-
- for(uint32_t i = 0; NULL != config_table && i < table_length; i++)
- {
- if(!loc_set_config_entry(&config_table[i], &config_value)) {
- ret += 1;
- }
- }
- }
- }
- }
-
- return ret;
-}
-
-/*===========================================================================
-FUNCTION loc_read_conf_r (repetitive)
-
-DESCRIPTION
- Reads the specified configuration file and sets defined values based on
- the passed in configuration table. This table maps strings to values to
- set along with the type of each of these values.
- The difference between this and loc_read_conf is that this function returns
- the file pointer position at the end of filling a config table. Also, it
- reads a fixed number of parameters at a time which is equal to the length
- of the configuration table. This functionality enables the caller to
- repeatedly call the function to read data from the same file.
-
-PARAMETERS:
- conf_fp : file pointer
- config_table: table definition of strings to places to store information
- table_length: length of the configuration table
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- 0: Table filled successfully
- 1: No more parameters to read
- -1: Error filling table
-
-SIDE EFFECTS
- N/A
-===========================================================================*/
-int loc_read_conf_r(FILE *conf_fp, const loc_param_s_type* config_table, uint32_t table_length)
-{
- int ret=0;
-
- unsigned int num_params=table_length;
- if(conf_fp == NULL) {
- LOC_LOGE("%s:%d]: ERROR: File pointer is NULL\n", __func__, __LINE__);
- ret = -1;
- goto err;
- }
-
- /* Clear all validity bits */
- for(uint32_t i = 0; NULL != config_table && i < table_length; i++)
- {
- if(NULL != config_table[i].param_set)
- {
- *(config_table[i].param_set) = 0;
- }
- }
-
- char input_buf[LOC_MAX_PARAM_LINE]; /* declare a char array */
-
- LOC_LOGD("%s:%d]: num_params: %d\n", __func__, __LINE__, num_params);
- while(num_params)
- {
- if(!fgets(input_buf, LOC_MAX_PARAM_LINE, conf_fp)) {
- LOC_LOGD("%s:%d]: fgets returned NULL\n", __func__, __LINE__);
- break;
- }
-
- num_params -= loc_fill_conf_item(input_buf, config_table, table_length);
- }
-
-err:
- return ret;
-}
-
-/*===========================================================================
-FUNCTION loc_udpate_conf
-
-DESCRIPTION
- Parses the passed in buffer for configuration items, and update the table
- that is also passed in.
-
-Reads the specified configuration file and sets defined values based on
- the passed in configuration table. This table maps strings to values to
- set along with the type of each of these values.
-
-PARAMETERS:
- conf_data: configuration items in bufferas a string
- length: strlen(conf_data)
- config_table: table definition of strings to places to store information
- table_length: length of the configuration table
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- number of the records in the table that is updated at time of return.
-
-SIDE EFFECTS
- N/A
-===========================================================================*/
-int loc_update_conf(const char* conf_data, int32_t length,
- const loc_param_s_type* config_table, uint32_t table_length)
-{
- int ret = -1;
-
- if (conf_data && length && config_table && table_length) {
- // make a copy, so we do not tokenize the original data
- char* conf_copy = (char*)malloc(length+1);
-
- if (conf_copy != NULL)
- {
- memcpy(conf_copy, conf_data, length);
- // we hard NULL the end of string to be safe
- conf_copy[length] = 0;
-
- // start with one record off
- uint32_t num_params = table_length - 1;
- char* saveptr = NULL;
- char* input_buf = strtok_r(conf_copy, "\n", &saveptr);
- ret = 0;
-
- LOC_LOGD("%s:%d]: num_params: %d\n", __func__, __LINE__, num_params);
- while(num_params && input_buf) {
- ret++;
- num_params -= loc_fill_conf_item(input_buf, config_table, table_length);
- input_buf = strtok_r(NULL, "\n", &saveptr);
- }
- free(conf_copy);
- }
- }
-
- return ret;
-}
-
-/*===========================================================================
-FUNCTION loc_read_conf
-
-DESCRIPTION
- Reads the specified configuration file and sets defined values based on
- the passed in configuration table. This table maps strings to values to
- set along with the type of each of these values.
-
-PARAMETERS:
- conf_file_name: configuration file to read
- config_table: table definition of strings to places to store information
- table_length: length of the configuration table
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- None
-
-SIDE EFFECTS
- N/A
-===========================================================================*/
-void loc_read_conf(const char* conf_file_name, const loc_param_s_type* config_table,
- uint32_t table_length)
-{
- FILE *conf_fp = NULL;
-
- if((conf_fp = fopen(conf_file_name, "r")) != NULL)
- {
- LOC_LOGD("%s: using %s", __FUNCTION__, conf_file_name);
- if(table_length && config_table) {
- loc_read_conf_r(conf_fp, config_table, table_length);
- rewind(conf_fp);
- }
- loc_read_conf_r(conf_fp, loc_param_table, loc_param_num);
- fclose(conf_fp);
- }
- /* Initialize logging mechanism with parsed data */
- loc_logger_init(DEBUG_LEVEL, TIMESTAMP);
-}
-
-/*=============================================================================
- *
- * Define and Structures for Parsing Location Process Configuration File
- *
- *============================================================================*/
-#define MAX_NUM_STRINGS 20
-
-//We can have 8 masks for now
-#define CONFIG_MASK_TARGET_ALL 0X01
-#define CONFIG_MASK_TARGET_FOUND 0X02
-#define CONFIG_MASK_TARGET_CHECK 0X03
-#define CONFIG_MASK_BASEBAND_ALL 0X04
-#define CONFIG_MASK_BASEBAND_FOUND 0X08
-#define CONFIG_MASK_BASEBAND_CHECK 0x0c
-#define CONFIG_MASK_AUTOPLATFORM_ALL 0x10
-#define CONFIG_MASK_AUTOPLATFORM_FOUND 0x20
-#define CONFIG_MASK_AUTOPLATFORM_CHECK 0x30
-
-#define LOC_FEATURE_MASK_GTP_WIFI_BASIC 0x01
-#define LOC_FEATURE_MASK_GTP_WIFI_PREMIUM 0X02
-#define LOC_FEATURE_MASK_GTP_CELL_BASIC 0X04
-#define LOC_FEATURE_MASK_GTP_CELL_PREMIUM 0X08
-#define LOC_FEATURE_MASK_GTP_AP_CELL_BASIC LOC_FEATURE_MASK_GTP_CELL_BASIC
-#define LOC_FEATURE_MASK_GTP_AP_CELL_PREMIUM LOC_FEATURE_MASK_GTP_CELL_PREMIUM
-#define LOC_FEATURE_MASK_SAP_BASIC 0x40
-#define LOC_FEATURE_MASK_SAP_PREMIUM 0X80
-#define LOC_FEATURE_MASK_GTP_WAA_BASIC 0X100
-#define LOC_FEATURE_MASK_GTP_WAA_PREMIUM 0x200
-#define LOC_FEATURE_MASK_GTP_MODEM_CELL_BASIC 0X400
-#define LOC_FEATURE_MASK_GTP_MODEM_CELL_PREMIUM 0X800
-#define LOC_FEATURE_MASK_ODCPI 0x1000
-#define LOC_FEATURE_MASK_FREE_WIFI_SCAN_INJECT 0x2000
-#define LOC_FEATURE_MASK_SUPL_WIFI 0x4000
-#define LOC_FEATURE_MASK_WIFI_SUPPLICANT_INFO 0x8000
-
-typedef struct {
- char proc_name[LOC_MAX_PARAM_STRING];
- char proc_argument[LOC_MAX_PARAM_STRING];
- char proc_status[LOC_MAX_PARAM_STRING];
- char group_list[LOC_MAX_PARAM_STRING];
- unsigned int premium_feature;
- unsigned int loc_feature_mask;
- char platform_list[LOC_MAX_PARAM_STRING];
- char baseband[LOC_MAX_PARAM_STRING];
- unsigned int sglte_target;
- char feature_gtp_cell_proc[LOC_MAX_PARAM_STRING];
- char feature_gtp_waa[LOC_MAX_PARAM_STRING];
- char feature_gtp_cell[LOC_MAX_PARAM_STRING];
- char feature_gtp_wifi[LOC_MAX_PARAM_STRING];
- char feature_sap[LOC_MAX_PARAM_STRING];
- char feature_odcpi[LOC_MAX_PARAM_STRING];
- char feature_free_wifi_scan_inject[LOC_MAX_PARAM_STRING];
- char feature_supl_wifi[LOC_MAX_PARAM_STRING];
- char feature_wifi_supplicant_info[LOC_MAX_PARAM_STRING];
- char auto_platform[LOC_MAX_PARAM_STRING];
-} loc_launcher_conf;
-
-/* process configuration parameters */
-static loc_launcher_conf conf;
-
-/* gps.conf Parameter spec table */
-static const loc_param_s_type gps_conf_parameter_table[] = {
- {"SGLTE_TARGET", &conf.sglte_target, NULL, 'n'},
-};
-
-/* location feature conf, e.g.: izat.conf feature mode table*/
-static const loc_param_s_type loc_feature_conf_table[] = {
- {"GTP_CELL_PROC", &conf.feature_gtp_cell_proc, NULL, 's'},
- {"GTP_CELL", &conf.feature_gtp_cell, NULL, 's'},
- {"GTP_WIFI", &conf.feature_gtp_wifi, NULL, 's'},
- {"GTP_WAA", &conf.feature_gtp_waa, NULL, 's'},
- {"SAP", &conf.feature_sap, NULL, 's'},
- {"ODCPI", &conf.feature_odcpi, NULL, 's'},
- {"FREE_WIFI_SCAN_INJECT", &conf.feature_free_wifi_scan_inject, NULL, 's'},
- {"SUPL_WIFI", &conf.feature_supl_wifi, NULL, 's'},
- {"WIFI_SUPPLICANT_INFO", &conf.feature_wifi_supplicant_info, NULL, 's'},
-};
-
-/* location process conf, e.g.: izat.conf Parameter spec table */
-static const loc_param_s_type loc_process_conf_parameter_table[] = {
- {"PROCESS_NAME", &conf.proc_name, NULL, 's'},
- {"PROCESS_ARGUMENT", &conf.proc_argument, NULL, 's'},
- {"PROCESS_STATE", &conf.proc_status, NULL, 's'},
- {"PROCESS_GROUPS", &conf.group_list, NULL, 's'},
- {"PREMIUM_FEATURE", &conf.premium_feature, NULL, 'n'},
- {"IZAT_FEATURE_MASK", &conf.loc_feature_mask, NULL, 'n'},
- {"PLATFORMS", &conf.platform_list, NULL, 's'},
- {"BASEBAND", &conf.baseband, NULL, 's'},
- {"HARDWARE_TYPE", &conf.auto_platform, NULL, 's'},
-};
-
-/*===========================================================================
-FUNCTION loc_read_process_conf
-
-DESCRIPTION
- Parse the specified conf file and return info for the processes defined.
- The format of the file should conform with izat.conf.
-
-PARAMETERS:
- conf_file_name: configuration file to read
- process_count_ptr: pointer to store number of processes defined in the conf file.
- process_info_table_ptr: pointer to store the process info table.
-
-DEPENDENCIES
- The file must be in izat.conf format.
-
-RETURN VALUE
- 0: success
- none-zero: failure
-
-SIDE EFFECTS
- N/A
-
-NOTES:
- On success, memory pointed by (*process_info_table_ptr) must be freed.
-===========================================================================*/
-int loc_read_process_conf(const char* conf_file_name, uint32_t * process_count_ptr,
- loc_process_info_s_type** process_info_table_ptr) {
- loc_process_info_s_type *child_proc = nullptr;
- volatile int i=0;
- unsigned int j=0;
- gid_t gid_list[LOC_PROCESS_MAX_NUM_GROUPS];
- char *split_strings[MAX_NUM_STRINGS];
- int name_length=0, group_list_length=0, platform_length=0, baseband_length=0, ngroups=0, ret=0;
- int auto_platform_length = 0;
- int group_index=0, nstrings=0, status_length=0;
- FILE* conf_fp = nullptr;
- char platform_name[PROPERTY_VALUE_MAX], baseband_name[PROPERTY_VALUE_MAX];
- char autoplatform_name[PROPERTY_VALUE_MAX];
- unsigned int loc_service_mask=0;
- char config_mask = 0;
- unsigned char proc_list_length=0;
- int gtp_cell_ap_enabled = 0;
- char arg_gtp_waa[LOC_PROCESS_MAX_ARG_STR_LENGTH] = "--";
- char arg_gtp_ap_cell[LOC_PROCESS_MAX_ARG_STR_LENGTH] = "--";
- char arg_gtp_modem_cell[LOC_PROCESS_MAX_ARG_STR_LENGTH] = "--";
- char arg_gtp_wifi[LOC_PROCESS_MAX_ARG_STR_LENGTH] = "--";
- char arg_sap[LOC_PROCESS_MAX_ARG_STR_LENGTH] = "--";
- char arg_disabled[LOC_PROCESS_MAX_ARG_STR_LENGTH] = LOC_FEATURE_MODE_DISABLED;
- char arg_basic[LOC_PROCESS_MAX_ARG_STR_LENGTH] = LOC_FEATURE_MODE_BASIC;
- char arg_premium[LOC_PROCESS_MAX_ARG_STR_LENGTH] = LOC_FEATURE_MODE_PREMIUM;
-
- if (process_count_ptr == NULL || process_info_table_ptr == NULL) {
- return -1;
- }
-
- //Read gps.conf and fill parameter table
- UTIL_READ_CONF(LOC_PATH_GPS_CONF, gps_conf_parameter_table);
-
- //Form argument strings
- strlcat(arg_gtp_waa, LOC_FEATURE_GTP_WAA, LOC_PROCESS_MAX_ARG_STR_LENGTH-3);
- strlcat(arg_gtp_ap_cell, LOC_FEATURE_GTP_AP_CELL, LOC_PROCESS_MAX_ARG_STR_LENGTH-3);
- strlcat(arg_gtp_modem_cell, LOC_FEATURE_GTP_MODEM_CELL, LOC_PROCESS_MAX_ARG_STR_LENGTH-3);
- strlcat(arg_gtp_wifi, LOC_FEATURE_GTP_WIFI, LOC_PROCESS_MAX_ARG_STR_LENGTH-3);
- strlcat(arg_sap, LOC_FEATURE_SAP, LOC_PROCESS_MAX_ARG_STR_LENGTH-3);
-
- //Get platform name from ro.board.platform property
- loc_get_platform_name(platform_name, sizeof(platform_name));
- //Get baseband name from ro.baseband property
- loc_get_target_baseband(baseband_name, sizeof(baseband_name));
- //Identify if this is an automotive platform
- loc_get_auto_platform_name(autoplatform_name,sizeof(autoplatform_name));
-
- UTIL_READ_CONF(conf_file_name, loc_feature_conf_table);
-
- //Set service mask for GTP_WIFI
- if(strcmp(conf.feature_gtp_wifi, "DISABLED") == 0) {
- LOC_LOGD("%s:%d]: GTP WIFI DISABLED", __func__, __LINE__);
- }
- else if(strcmp(conf.feature_gtp_wifi, "BASIC") == 0) {
- LOC_LOGD("%s:%d]: Setting GTP WIFI to mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_GTP_WIFI_BASIC;
- }
- //conf file has a garbage value
- else {
- LOC_LOGE("%s:%d]: Unrecognized value for GTP WIFI Mode."\
- " Setting GTP WIFI to default mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_GTP_WIFI_BASIC;
- }
-
- //Set service mask for GTP_CELL
- //Using a temp variable here to indicate wheter GTP cell is
- //enabled on the AP or modem. This variable will be used in
- //further checks below. An alternative was to compare the
- //string again in each place which would've been more expensive
- if(strcmp(conf.feature_gtp_cell_proc, "AP") == 0) {
- gtp_cell_ap_enabled = 1;
- }
-
- if(strcmp(conf.feature_gtp_cell, "PREMIUM") == 0) {
- LOC_LOGE("%s:%d]: Error: location feature GTP CELL does not support PREMIUM mode" \
- " available modes are BASIC and DISABLED. Starting feature in BASIC mode",
- __func__, __LINE__);
- if(gtp_cell_ap_enabled) {
- loc_service_mask |= LOC_FEATURE_MASK_GTP_AP_CELL_BASIC;
- }
- else {
- loc_service_mask |= LOC_FEATURE_MASK_GTP_MODEM_CELL_BASIC;
- }
- }
- else if(strcmp(conf.feature_gtp_cell, "BASIC") == 0) {
- LOC_LOGD("%s:%d]: Setting GTP CELL to mode: BASIC", __func__, __LINE__);
- if(gtp_cell_ap_enabled) {
- loc_service_mask |= LOC_FEATURE_MASK_GTP_AP_CELL_BASIC;
- }
- else {
- loc_service_mask |= LOC_FEATURE_MASK_GTP_MODEM_CELL_BASIC;
- }
- }
- else if(strcmp(conf.feature_gtp_cell, "DISABLED") == 0) {
- LOC_LOGD("%s:%d]: GTP CELL DISABLED", __func__, __LINE__);
- }
- //conf file has a garbage value
- else {
- LOC_LOGE("%s:%d]: Unrecognized value for GTP CELL Mode." \
- " Setting GTP CELL to default mode: BASIC", __func__, __LINE__);
- if(gtp_cell_ap_enabled) {
- loc_service_mask |= LOC_FEATURE_MASK_GTP_AP_CELL_BASIC;
- }
- else {
- loc_service_mask |= LOC_FEATURE_MASK_GTP_MODEM_CELL_BASIC;
- }
- }
-
- //Set service mask for GTP_WAA
- if(strcmp(conf.feature_gtp_waa, "PREMIUM") == 0) {
- LOC_LOGE("%s:%d]: Error: location feature GTP WAA does not support PREMIUM mode" \
- " available modes are BASIC and DISABLED. Starting feature in BASIC mode",
- __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_GTP_WAA_BASIC;
- }
- else if(strcmp(conf.feature_gtp_waa, "BASIC") == 0) {
- LOC_LOGD("%s:%d]: Setting GTP WAA to mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_GTP_WAA_BASIC;
- }
- else if(strcmp(conf.feature_gtp_waa, "DISABLED") == 0) {
- LOC_LOGD("%s:%d]: GTP WAA DISABLED", __func__, __LINE__);
- }
- //conf file has a garbage value
- else {
- LOC_LOGE("%s:%d]: Unrecognized value for GTP WAA Mode."\
- " Setting GTP WAA to default mode: DISABLED", __func__, __LINE__);
- }
-
- //Set service mask for SAP
- if(strcmp(conf.feature_sap, "PREMIUM") == 0) {
- LOC_LOGD("%s:%d]: Setting SAP to mode: PREMIUM", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_SAP_PREMIUM;
- }
- else if(strcmp(conf.feature_sap, "BASIC") == 0) {
- LOC_LOGD("%s:%d]: Setting SAP to mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_SAP_BASIC;
- }
- else if(strcmp(conf.feature_sap, "DISABLED") == 0) {
- LOC_LOGD("%s:%d]: Setting SAP to mode: DISABLED", __func__, __LINE__);
- }
- else {
- LOC_LOGE("%s:%d]: Unrecognized value for SAP Mode."\
- " Setting SAP to default mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_SAP_BASIC;
- }
-
- // Set service mask for ODCPI
- if(strcmp(conf.feature_odcpi, "BASIC") == 0) {
- LOC_LOGD("%s:%d]: Setting ODCPI to mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_ODCPI;
- }
- else if(strcmp(conf.feature_odcpi, "DISABLED") == 0) {
- LOC_LOGD("%s:%d]: Setting ODCPI to mode: DISABLED", __func__, __LINE__);
- }
- else if(strcmp(conf.feature_odcpi, "PREMIUM") == 0) {
- LOC_LOGD("%s:%d]: Unrecognized value for ODCPI mode."\
- "Setting ODCPI to default mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_ODCPI;
- }
-
- // Set service mask for FREE_WIFI_SCAN_INJECT
- if(strcmp(conf.feature_free_wifi_scan_inject, "BASIC") == 0) {
- LOC_LOGD("%s:%d]: Setting FREE_WIFI_SCAN_INJECT to mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_FREE_WIFI_SCAN_INJECT;
- }
- else if(strcmp(conf.feature_free_wifi_scan_inject, "DISABLED") == 0) {
- LOC_LOGD("%s:%d]: Setting FREE_WIFI_SCAN_INJECT to mode: DISABLED", __func__, __LINE__);
- }
- else if(strcmp(conf.feature_free_wifi_scan_inject, "PREMIUM") == 0) {
- LOC_LOGD("%s:%d]: Unrecognized value for FREE_WIFI_SCAN_INJECT mode."\
- "Setting FREE_WIFI_SCAN_INJECT to default mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_FREE_WIFI_SCAN_INJECT;
- }
-
- // Set service mask for SUPL_WIFI
- if(strcmp(conf.feature_supl_wifi, "BASIC") == 0) {
- LOC_LOGD("%s:%d]: Setting SUPL_WIFI to mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_SUPL_WIFI;
- }
- else if(strcmp(conf.feature_supl_wifi, "DISABLED") == 0) {
- LOC_LOGD("%s:%d]: Setting SUPL_WIFI to mode: DISABLED", __func__, __LINE__);
- }
- else if(strcmp(conf.feature_supl_wifi, "PREMIUM") == 0) {
- LOC_LOGD("%s:%d]: Unrecognized value for SUPL_WIFI mode."\
- "Setting SUPL_WIFI to default mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_SUPL_WIFI;
- }
-
- // Set service mask for WIFI_SUPPLICANT_INFO
- if(strcmp(conf.feature_wifi_supplicant_info, "BASIC") == 0) {
- LOC_LOGD("%s:%d]: Setting WIFI_SUPPLICANT_INFO to mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_WIFI_SUPPLICANT_INFO;
- }
- else if(strcmp(conf.feature_wifi_supplicant_info, "DISABLED") == 0) {
- LOC_LOGD("%s:%d]: Setting WIFI_SUPPLICANT_INFO to mode: DISABLED", __func__, __LINE__);
- }
- else if(strcmp(conf.feature_wifi_supplicant_info, "PREMIUM") == 0) {
- LOC_LOGD("%s:%d]: Unrecognized value for WIFI_SUPPLICANT_INFO mode."\
- "Setting LOC_FEATURE_MASK_WIFI_SUPPLICANT_INFO to default mode: BASIC", __func__, __LINE__);
- loc_service_mask |= LOC_FEATURE_MASK_WIFI_SUPPLICANT_INFO;
- }
-
- LOC_LOGD("%s:%d]: loc_service_mask: %x\n", __func__, __LINE__, loc_service_mask);
-
- if((conf_fp = fopen(conf_file_name, "r")) == NULL) {
- LOC_LOGE("%s:%d]: Error opening %s %s\n", __func__,
- __LINE__, conf_file_name, strerror(errno));
- ret = -1;
- goto err;
- }
-
- //Parse through the file to find out how many processes are to be launched
- proc_list_length = 0;
- do {
- conf.proc_name[0] = 0;
- //Here note that the 3rd parameter is passed as 1.
- //This is so that only the first parameter in the table which is "PROCESS_NAME"
- //is read. We do not want to read the entire block of parameters at this time
- //since we are only counting the number of processes to launch.
- //Therefore, only counting the occurrences of PROCESS_NAME parameter
- //should suffice
- if(loc_read_conf_r(conf_fp, loc_process_conf_parameter_table, 1)) {
- LOC_LOGE("%s:%d]: Unable to read conf file. Failing\n", __func__, __LINE__);
- ret = -1;
- goto err;
- }
- name_length=(int)strlen(conf.proc_name);
- if(name_length) {
- proc_list_length++;
- LOC_LOGD("Process name:%s", conf.proc_name);
- }
- } while(name_length);
- LOC_LOGD("Process cnt = %d", proc_list_length);
-
- child_proc = (loc_process_info_s_type *)calloc(proc_list_length, sizeof(loc_process_info_s_type));
- if(child_proc == NULL) {
- LOC_LOGE("%s:%d]: ERROR: Malloc returned NULL\n", __func__, __LINE__);
- ret = -1;
- goto err;
- }
-
- //Move file descriptor to the beginning of the file
- //so that the parameters can be read
- rewind(conf_fp);
-
- for(j=0; j<proc_list_length; j++) {
- //Set defaults for all the child process structs
- child_proc[j].proc_status = DISABLED;
- memset(child_proc[j].group_list, 0, sizeof(child_proc[j].group_list));
- config_mask=0;
- if(loc_read_conf_r(conf_fp, loc_process_conf_parameter_table,
- sizeof(loc_process_conf_parameter_table)/sizeof(loc_process_conf_parameter_table[0]))) {
- LOC_LOGE("%s:%d]: Unable to read conf file. Failing\n", __func__, __LINE__);
- ret = -1;
- goto err;
- }
-
- name_length=(int)strlen(conf.proc_name);
- group_list_length=(int)strlen(conf.group_list);
- platform_length = (int)strlen(conf.platform_list);
- baseband_length = (int)strlen(conf.baseband);
- status_length = (int)strlen(conf.proc_status);
- auto_platform_length = (int)strlen(conf.auto_platform);
-
- if(!name_length || !group_list_length || !platform_length ||
- !baseband_length || !status_length || !auto_platform_length) {
- LOC_LOGE("%s:%d]: Error: i: %d; One of the parameters not specified in conf file",
- __func__, __LINE__, i);
- continue;
- }
-
- if(strcmp(conf.proc_status, "DISABLED") == 0) {
- LOC_LOGD("%s:%d]: Process %s is disabled in conf file",
- __func__, __LINE__, conf.proc_name);
- child_proc[j].proc_status = DISABLED_FROM_CONF;
- continue;
- }
- else if(strcmp(conf.proc_status, "ENABLED") == 0) {
- LOC_LOGD("%s:%d]: Process %s is enabled in conf file",
- __func__, __LINE__, conf.proc_name);
- }
-
- //Since strlcpy copies length-1 characters, we add 1 to name_length
- if((name_length+1) > LOC_MAX_PARAM_STRING) {
- LOC_LOGE("%s:%d]: i: %d; Length of name parameter too long. Max length: %d",
- __func__, __LINE__, i, LOC_MAX_PARAM_STRING);
- continue;
- }
- strlcpy(child_proc[j].name[0], conf.proc_name, sizeof (child_proc[j].name[0]));
-
- child_proc[j].num_groups = 0;
- ngroups = loc_util_split_string(conf.group_list, split_strings, MAX_NUM_STRINGS, ' ');
-#ifdef __ANDROID__
- for(i=0; i<ngroups; i++) {
- struct passwd* pwd = getpwnam(split_strings[i]);
- if (pwd) {
- child_proc[j].group_list[i] = pwd->pw_gid;
- child_proc[j].num_groups++;
- LOC_LOGD("%s:%d]:Group %s = %d matches child_group: %d\n",
- __func__, __LINE__, split_strings[i],
- pwd->pw_gid,child_proc[j].group_list[i]);
- }
- }
-#endif
- nstrings = loc_util_split_string(conf.platform_list, split_strings, MAX_NUM_STRINGS, ' ');
- if(strcmp("all", split_strings[0]) == 0) {
- if (nstrings == 1 || (nstrings == 2 && (strcmp("exclude", split_strings[1]) == 0))) {
- LOC_LOGD("%s:%d]: Enabled for all targets\n", __func__, __LINE__);
- config_mask |= CONFIG_MASK_TARGET_ALL;
- }
- else if (nstrings > 2 && (strcmp("exclude", split_strings[1]) == 0)) {
- config_mask |= CONFIG_MASK_TARGET_FOUND;
- for (i=2; i<nstrings; i++) {
- if(strcmp(platform_name, split_strings[i]) == 0) {
- LOC_LOGD("%s:%d]: Disabled platform %s\n", __func__, __LINE__, platform_name);
- config_mask &= ~CONFIG_MASK_TARGET_FOUND;
- break;
- }
- }
- }
- }
- else {
- for(i=0; i<nstrings; i++) {
- if(strcmp(platform_name, split_strings[i]) == 0) {
- LOC_LOGD("%s:%d]: Matched platform: %s\n",
- __func__, __LINE__, split_strings[i]);
- config_mask |= CONFIG_MASK_TARGET_FOUND;
- break;
- }
- }
- }
-
- nstrings = loc_util_split_string(conf.baseband, split_strings, MAX_NUM_STRINGS, ' ');
- if(strcmp("all", split_strings[0]) == 0) {
- if (nstrings == 1 || (nstrings == 2 && (strcmp("exclude", split_strings[1]) == 0))) {
- LOC_LOGD("%s:%d]: Enabled for all basebands\n", __func__, __LINE__);
- config_mask |= CONFIG_MASK_BASEBAND_ALL;
- }
- else if (nstrings > 2 && (strcmp("exclude", split_strings[1]) == 0)) {
- config_mask |= CONFIG_MASK_BASEBAND_FOUND;
- for (i=2; i<nstrings; i++) {
- if(strcmp(baseband_name, split_strings[i]) == 0) {
- LOC_LOGD("%s:%d]: Disabled band %s\n", __func__, __LINE__, baseband_name);
- config_mask &= ~CONFIG_MASK_BASEBAND_FOUND;
- break;
- }
- }
- }
- }
- else {
- for(i=0; i<nstrings; i++) {
- if(strcmp(baseband_name, split_strings[i]) == 0) {
- LOC_LOGD("%s:%d]: Matched baseband: %s\n",
- __func__, __LINE__, split_strings[i]);
- config_mask |= CONFIG_MASK_BASEBAND_FOUND;
- break;
- }
- //Since ro.baseband is not a reliable source for detecting sglte
- //the alternative is to read the SGLTE_TARGET parameter from gps.conf
- //this parameter is read into conf_sglte_target
- else if((strcmp("sglte", split_strings[i]) == 0 ) && conf.sglte_target) {
- LOC_LOGD("%s:%d]: Matched baseband SGLTE\n", __func__, __LINE__);
- config_mask |= CONFIG_MASK_BASEBAND_FOUND;
- break;
- }
- }
- }
-
- nstrings = loc_util_split_string(conf.auto_platform, split_strings, MAX_NUM_STRINGS, ' ');
- if(strcmp("all", split_strings[0]) == 0) {
- LOC_LOGD("%s:%d]: Enabled for all auto platforms\n", __func__, __LINE__);
- config_mask |= CONFIG_MASK_AUTOPLATFORM_ALL;
- }
- else {
- for(i=0; i<nstrings; i++) {
- if(strcmp(autoplatform_name, split_strings[i]) == 0) {
- LOC_LOGD("%s:%d]: Matched auto platform: %s\n",
- __func__, __LINE__, split_strings[i]);
- config_mask |= CONFIG_MASK_AUTOPLATFORM_FOUND;
- break;
- }
- }
- }
-
- if((config_mask & CONFIG_MASK_TARGET_CHECK) &&
- (config_mask & CONFIG_MASK_BASEBAND_CHECK) &&
- (config_mask & CONFIG_MASK_AUTOPLATFORM_CHECK) &&
- (child_proc[j].proc_status != DISABLED_FROM_CONF)) {
-
- //Set args
- //The first argument passed through argv is usually the name of the
- //binary when started from commandline.
- //getopt() seems to ignore this first argument and hence we assign it
- //to the process name for consistency with command line args
- i = 0;
- char* temp_arg = ('/' == child_proc[j].name[0][0]) ?
- (strrchr(child_proc[j].name[0], '/') + 1) : child_proc[j].name[0];
- strlcpy (child_proc[j].args[i++], temp_arg, sizeof (child_proc[j].args[i++]));
-
- if(conf.premium_feature) {
- if(conf.loc_feature_mask & loc_service_mask) {
- LOC_LOGD("%s:%d]: Enabled. %s has service mask: %x\n",
- __func__, __LINE__, child_proc[j].name[0], conf.loc_feature_mask);
- child_proc[j].proc_status = ENABLED;
-
- if(conf.loc_feature_mask &
- (LOC_FEATURE_MASK_GTP_WIFI_BASIC | LOC_FEATURE_MASK_GTP_WIFI_PREMIUM)) {
- if(loc_service_mask & LOC_FEATURE_MASK_GTP_WIFI_BASIC) {
- strlcpy(child_proc[j].args[i++], arg_gtp_wifi,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_basic,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- else if(loc_service_mask & LOC_FEATURE_MASK_GTP_WIFI_PREMIUM) {
- strlcpy(child_proc[j].args[i++], arg_gtp_wifi,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_premium,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- else
- {
- strlcpy(child_proc[j].args[i++], arg_gtp_wifi,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_disabled,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- }
- if(conf.loc_feature_mask &
- (LOC_FEATURE_MASK_GTP_CELL_BASIC | LOC_FEATURE_MASK_GTP_CELL_PREMIUM )) {
- if(loc_service_mask & LOC_FEATURE_MASK_GTP_AP_CELL_BASIC){
- strlcpy(child_proc[j].args[i++], arg_gtp_ap_cell,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_basic,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_gtp_modem_cell,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_disabled,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- else if(loc_service_mask & LOC_FEATURE_MASK_GTP_AP_CELL_PREMIUM){
- strlcpy(child_proc[j].args[i++], arg_gtp_ap_cell,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_premium,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_gtp_modem_cell,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_disabled,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- else if(loc_service_mask & LOC_FEATURE_MASK_GTP_MODEM_CELL_BASIC) {
- strlcpy(child_proc[j].args[i++], arg_gtp_modem_cell,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_basic,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_gtp_ap_cell,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_disabled,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- else if(loc_service_mask & LOC_FEATURE_MASK_GTP_MODEM_CELL_PREMIUM) {
- strlcpy(child_proc[j].args[i++], arg_gtp_modem_cell,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_premium,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_gtp_ap_cell,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_disabled,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- else {
- strlcpy(child_proc[j].args[i++], arg_gtp_ap_cell,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_disabled,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_gtp_modem_cell,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_disabled,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- }
- if(conf.loc_feature_mask &
- (LOC_FEATURE_MASK_GTP_WAA_BASIC | LOC_FEATURE_MASK_GTP_WAA_PREMIUM)) {
- if(loc_service_mask & LOC_FEATURE_MASK_GTP_WAA_BASIC) {
- strlcpy(child_proc[j].args[i++], arg_gtp_waa,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_basic,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- else if(loc_service_mask & LOC_FEATURE_MASK_GTP_WAA_PREMIUM) {
- strlcpy(child_proc[j].args[i++], arg_gtp_waa,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_premium,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- else
- {
- strlcpy(child_proc[j].args[i++], arg_gtp_waa,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_disabled,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- }
- if(conf.loc_feature_mask &
- (LOC_FEATURE_MASK_SAP_BASIC | LOC_FEATURE_MASK_SAP_PREMIUM)) {
- if(loc_service_mask & LOC_FEATURE_MASK_SAP_BASIC) {
- strlcpy(child_proc[j].args[i++], arg_sap,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_basic,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- else if(loc_service_mask & LOC_FEATURE_MASK_SAP_PREMIUM) {
- strlcpy(child_proc[j].args[i++], arg_sap,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_premium,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- else
- {
- strlcpy(child_proc[j].args[i++], arg_sap,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- strlcpy(child_proc[j].args[i++], arg_disabled,
- LOC_PROCESS_MAX_ARG_STR_LENGTH);
- }
- }
- IF_LOC_LOGD {
- LOC_LOGD("%s:%d]: %s args\n", __func__, __LINE__, child_proc[j].name[0]);
- for(unsigned int k=0; k<LOC_PROCESS_MAX_NUM_ARGS; k++) {
- if(child_proc[j].args[k][0] != '\0') {
- LOC_LOGD("%s:%d]: k: %d, %s\n", __func__, __LINE__, k,
- child_proc[j].args[k]);
- }
- }
- LOC_LOGD("%s:%d]: \n", __func__, __LINE__);
- }
- }
- else {
- LOC_LOGD("%s:%d]: Disabled. %s has service mask: %x \n",
- __func__, __LINE__, child_proc[j].name[0], conf.loc_feature_mask);
- }
- }
- else {
- LOC_LOGD("%s:%d]: %s not a premium feature. Enabled\n",
- __func__, __LINE__, child_proc[j].name[0]);
- child_proc[j].proc_status = ENABLED;
- }
-
- /*Fill up the remaining arguments from configuration file*/
- LOC_LOGD("%s] Parsing Process_Arguments from Configuration: %s \n",
- __func__, conf.proc_argument);
- if(0 != conf.proc_argument[0])
- {
- /**************************************
- ** conf_proc_argument is shared by all the programs getting launched,
- ** hence copy to process specific argument string and parse the same.
- ***************************************/
- strlcpy(child_proc[j].argumentString, conf.proc_argument,
- sizeof(child_proc[j].argumentString));
- char *temp_args[LOC_PROCESS_MAX_NUM_ARGS];
- memset (temp_args, 0, sizeof (temp_args));
- loc_util_split_string(child_proc[j].argumentString, &temp_args[i],
- (LOC_PROCESS_MAX_NUM_ARGS - i), ' ');
- // copy argument from the pointer to the memory
- for (unsigned int index = i; index < LOC_PROCESS_MAX_NUM_ARGS; index++) {
- if (temp_args[index] == NULL) {
- break;
- }
- strlcpy (child_proc[j].args[index], temp_args[index],
- sizeof (child_proc[j].args[index]));
- }
- }
- }
- else {
- LOC_LOGD("%s:%d]: Process %s is disabled\n",
- __func__, __LINE__, child_proc[j].name[0]);
- }
- }
-
-err:
- if (conf_fp) {
- fclose(conf_fp);
- }
- if (ret != 0) {
- LOC_LOGE("%s:%d]: ret: %d", __func__, __LINE__, ret);
- if (child_proc) {
- free (child_proc);
- child_proc = nullptr;
- }
- *process_count_ptr = 0;
- *process_info_table_ptr = nullptr;
-
- }
- else {
- *process_count_ptr = proc_list_length;
- *process_info_table_ptr = child_proc;
- }
-
- return ret;
-}
diff --git a/gps/utils/loc_cfg.h b/gps/utils/loc_cfg.h
deleted file mode 100644
index 652d86e..0000000
--- a/gps/utils/loc_cfg.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Copyright (c) 2011-2015, 2018 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 LOC_CFG_H
-#define LOC_CFG_H
-
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <grp.h>
-
-#define LOC_MAX_PARAM_NAME 80
-#define LOC_MAX_PARAM_STRING 80
-#define LOC_MAX_PARAM_LINE (LOC_MAX_PARAM_NAME + LOC_MAX_PARAM_STRING)
-
-#define LOC_FEATURE_MODE_DISABLED "DISABLED"
-#define LOC_FEATURE_MODE_BASIC "BASIC"
-#define LOC_FEATURE_MODE_PREMIUM "PREMIUM"
-
-#define LOC_FEATURE_GTP_AP_CELL "gtp-ap-cell"
-#define LOC_FEATURE_GTP_MODEM_CELL "gtp-modem-cell"
-#define LOC_FEATURE_GTP_CELL_ENH "gtp-cell-enh"
-#define LOC_FEATURE_GTP_WIFI "gtp-wifi"
-#define LOC_FEATURE_GTP_WAA "gtp-waa"
-#define LOC_FEATURE_SAP "sap"
-
-#define LOC_PROCESS_MAX_NUM_GROUPS 20
-#define LOC_PROCESS_MAX_NUM_ARGS 25
-#define LOC_PROCESS_MAX_ARG_STR_LENGTH 32
-
-#define UTIL_UPDATE_CONF(conf_data, len, config_table) \
- loc_update_conf((conf_data), (len), (config_table), \
- sizeof(config_table) / sizeof(config_table[0]))
-
-#define UTIL_READ_CONF_DEFAULT(filename) \
- loc_read_conf((filename), NULL, 0);
-
-#define UTIL_READ_CONF(filename, config_table) \
- loc_read_conf((filename), (config_table), sizeof(config_table) / sizeof(config_table[0]))
-
-/*=============================================================================
- *
- * MODULE TYPE DECLARATION
- *
- *============================================================================*/
-typedef struct
-{
- const char *param_name;
- void *param_ptr;
- uint8_t *param_set; /* indicate value set by config file */
- char param_type; /* 'n' for number,
- 's' for string,
- 'f' for double */
-} loc_param_s_type;
-
-typedef enum {
- ENABLED,
- RUNNING,
- DISABLED,
- DISABLED_FROM_CONF
-} loc_process_e_status;
-
-typedef struct {
- loc_process_e_status proc_status;
- pid_t proc_id;
- char name[2][LOC_MAX_PARAM_STRING];
- gid_t group_list[LOC_PROCESS_MAX_NUM_GROUPS];
- unsigned char num_groups;
- char args[LOC_PROCESS_MAX_NUM_ARGS][LOC_PROCESS_MAX_ARG_STR_LENGTH];
- char argumentString[LOC_MAX_PARAM_STRING];
-} loc_process_info_s_type;
-
-/*=============================================================================
- *
- * MODULE EXTERNAL DATA
- *
- *============================================================================*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*=============================================================================
- *
- * MODULE EXPORTED FUNCTIONS
- *
- *============================================================================*/
-void loc_read_conf(const char* conf_file_name,
- const loc_param_s_type* config_table,
- uint32_t table_length);
-int loc_read_conf_r(FILE *conf_fp, const loc_param_s_type* config_table,
- uint32_t table_length);
-int loc_update_conf(const char* conf_data, int32_t length,
- const loc_param_s_type* config_table, uint32_t table_length);
-
-// Below are the location conf file paths
-extern const char LOC_PATH_GPS_CONF[];
-extern const char LOC_PATH_IZAT_CONF[];
-extern const char LOC_PATH_FLP_CONF[];
-extern const char LOC_PATH_LOWI_CONF[];
-extern const char LOC_PATH_SAP_CONF[];
-extern const char LOC_PATH_APDR_CONF[];
-extern const char LOC_PATH_XTWIFI_CONF[];
-extern const char LOC_PATH_QUIPC_CONF[];
-
-int loc_read_process_conf(const char* conf_file_name, uint32_t * process_count_ptr,
- loc_process_info_s_type** process_info_table_ptr);
-
-uint32_t loc_modem_emulator_enabled();
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LOC_CFG_H */
diff --git a/gps/utils/loc_gps.h b/gps/utils/loc_gps.h
deleted file mode 100644
index 5e915a3..0000000
--- a/gps/utils/loc_gps.h
+++ /dev/null
@@ -1,2209 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef LOC_GPS_H
-#define LOC_GPS_H
-
-#include <stdint.h>
-#include <sys/cdefs.h>
-#include <sys/types.h>
-#include <pthread.h>
-#include <sys/socket.h>
-#include <stdbool.h>
-
-__BEGIN_DECLS
-
-#define LOC_FLP_STATUS_LOCATION_AVAILABLE 0
-#define LOC_FLP_STATUS_LOCATION_UNAVAILABLE 1
-#define LOC_CAPABILITY_GNSS (1U<<0)
-#define LOC_CAPABILITY_WIFI (1U<<1)
-#define LOC_CAPABILITY_CELL (1U<<3)
-
-/** Milliseconds since January 1, 1970 */
-typedef int64_t LocGpsUtcTime;
-
-/** Maximum number of SVs for loc_gps_sv_status_callback(). */
-#define LOC_GPS_MAX_SVS 32
-/** Maximum number of SVs for loc_gps_sv_status_callback(). */
-#define LOC_GNSS_MAX_SVS 64
-
-/** Maximum number of Measurements in loc_gps_measurement_callback(). */
-#define LOC_GPS_MAX_MEASUREMENT 32
-
-/** Maximum number of Measurements in loc_gnss_measurement_callback(). */
-#define LOC_GNSS_MAX_MEASUREMENT 64
-
-/** Requested operational mode for GPS operation. */
-typedef uint32_t LocGpsPositionMode;
-/* IMPORTANT: Note that the following values must match
- * constants in GpsLocationProvider.java. */
-/** Mode for running GPS standalone (no assistance). */
-#define LOC_GPS_POSITION_MODE_STANDALONE 0
-/** AGPS MS-Based mode. */
-#define LOC_GPS_POSITION_MODE_MS_BASED 1
-/**
- * AGPS MS-Assisted mode. This mode is not maintained by the platform anymore.
- * It is strongly recommended to use LOC_GPS_POSITION_MODE_MS_BASED instead.
- */
-#define LOC_GPS_POSITION_MODE_MS_ASSISTED 2
-
-/** Requested recurrence mode for GPS operation. */
-typedef uint32_t LocGpsPositionRecurrence;
-/* IMPORTANT: Note that the following values must match
- * constants in GpsLocationProvider.java. */
-/** Receive GPS fixes on a recurring basis at a specified period. */
-#define LOC_GPS_POSITION_RECURRENCE_PERIODIC 0
-/** Request a single shot GPS fix. */
-#define LOC_GPS_POSITION_RECURRENCE_SINGLE 1
-
-/** GPS status event values. */
-typedef uint16_t LocGpsStatusValue;
-/* IMPORTANT: Note that the following values must match
- * constants in GpsLocationProvider.java. */
-/** GPS status unknown. */
-#define LOC_GPS_STATUS_NONE 0
-/** GPS has begun navigating. */
-#define LOC_GPS_STATUS_SESSION_BEGIN 1
-/** GPS has stopped navigating. */
-#define LOC_GPS_STATUS_SESSION_END 2
-/** GPS has powered on but is not navigating. */
-#define LOC_GPS_STATUS_ENGINE_ON 3
-/** GPS is powered off. */
-#define LOC_GPS_STATUS_ENGINE_OFF 4
-
-/** Flags to indicate which values are valid in a LocGpsLocation. */
-typedef uint16_t LocGpsLocationFlags;
-/* IMPORTANT: Note that the following values must match
- * constants in GpsLocationProvider.java. */
-/** LocGpsLocation has valid latitude and longitude. */
-#define LOC_GPS_LOCATION_HAS_LAT_LONG 0x0001
-/** LocGpsLocation has valid altitude. */
-#define LOC_GPS_LOCATION_HAS_ALTITUDE 0x0002
-/** LocGpsLocation has valid speed. */
-#define LOC_GPS_LOCATION_HAS_SPEED 0x0004
-/** LocGpsLocation has valid bearing. */
-#define LOC_GPS_LOCATION_HAS_BEARING 0x0008
-/** LocGpsLocation has valid accuracy. */
-#define LOC_GPS_LOCATION_HAS_ACCURACY 0x0010
-/** LocGpsLocation has valid vertical uncertainity */
-#define LOC_GPS_LOCATION_HAS_VERT_UNCERTAINITY 0x0040
-
-/** Flags for the loc_gps_set_capabilities callback. */
-
-/**
- * GPS HAL schedules fixes for LOC_GPS_POSITION_RECURRENCE_PERIODIC mode. If this is
- * not set, then the framework will use 1000ms for min_interval and will start
- * and call start() and stop() to schedule the GPS.
- */
-#define LOC_GPS_CAPABILITY_SCHEDULING (1 << 0)
-/** GPS supports MS-Based AGPS mode */
-#define LOC_GPS_CAPABILITY_MSB (1 << 1)
-/** GPS supports MS-Assisted AGPS mode */
-#define LOC_GPS_CAPABILITY_MSA (1 << 2)
-/** GPS supports single-shot fixes */
-#define LOC_GPS_CAPABILITY_SINGLE_SHOT (1 << 3)
-/** GPS supports on demand time injection */
-#define LOC_GPS_CAPABILITY_ON_DEMAND_TIME (1 << 4)
-/** GPS supports Geofencing */
-#define LOC_GPS_CAPABILITY_GEOFENCING (1 << 5)
-/** GPS supports Measurements. */
-#define LOC_GPS_CAPABILITY_MEASUREMENTS (1 << 6)
-/** GPS supports Navigation Messages */
-#define LOC_GPS_CAPABILITY_NAV_MESSAGES (1 << 7)
-
-/**
- * Flags used to specify which aiding data to delete when calling
- * delete_aiding_data().
- */
-typedef uint16_t LocGpsAidingData;
-/* IMPORTANT: Note that the following values must match
- * constants in GpsLocationProvider.java. */
-#define LOC_GPS_DELETE_EPHEMERIS 0x0001
-#define LOC_GPS_DELETE_ALMANAC 0x0002
-#define LOC_GPS_DELETE_POSITION 0x0004
-#define LOC_GPS_DELETE_TIME 0x0008
-#define LOC_GPS_DELETE_IONO 0x0010
-#define LOC_GPS_DELETE_UTC 0x0020
-#define LOC_GPS_DELETE_HEALTH 0x0040
-#define LOC_GPS_DELETE_SVDIR 0x0080
-#define LOC_GPS_DELETE_SVSTEER 0x0100
-#define LOC_GPS_DELETE_SADATA 0x0200
-#define LOC_GPS_DELETE_RTI 0x0400
-#define LOC_GPS_DELETE_CELLDB_INFO 0x8000
-#define LOC_GPS_DELETE_ALL 0xFFFF
-
-/** AGPS type */
-typedef uint16_t LocAGpsType;
-#define LOC_AGPS_TYPE_SUPL 1
-#define LOC_AGPS_TYPE_C2K 2
-
-typedef uint16_t LocAGpsSetIDType;
-#define LOC_AGPS_SETID_TYPE_NONE 0
-#define LOC_AGPS_SETID_TYPE_IMSI 1
-#define LOC_AGPS_SETID_TYPE_MSISDN 2
-
-typedef uint16_t LocApnIpType;
-#define LOC_APN_IP_INVALID 0
-#define LOC_APN_IP_IPV4 1
-#define LOC_APN_IP_IPV6 2
-#define LOC_APN_IP_IPV4V6 3
-
-/**
- * String length constants
- */
-#define LOC_GPS_NI_SHORT_STRING_MAXLEN 256
-#define LOC_GPS_NI_LONG_STRING_MAXLEN 2048
-
-/**
- * LocGpsNiType constants
- */
-typedef uint32_t LocGpsNiType;
-#define LOC_GPS_NI_TYPE_VOICE 1
-#define LOC_GPS_NI_TYPE_UMTS_SUPL 2
-#define LOC_GPS_NI_TYPE_UMTS_CTRL_PLANE 3
-/*Emergency SUPL*/
-#define LOC_GPS_NI_TYPE_EMERGENCY_SUPL 4
-
-/**
- * LocGpsNiNotifyFlags constants
- */
-typedef uint32_t LocGpsNiNotifyFlags;
-/** NI requires notification */
-#define LOC_GPS_NI_NEED_NOTIFY 0x0001
-/** NI requires verification */
-#define LOC_GPS_NI_NEED_VERIFY 0x0002
-/** NI requires privacy override, no notification/minimal trace */
-#define LOC_GPS_NI_PRIVACY_OVERRIDE 0x0004
-
-/**
- * GPS NI responses, used to define the response in
- * NI structures
- */
-typedef int LocGpsUserResponseType;
-#define LOC_GPS_NI_RESPONSE_ACCEPT 1
-#define LOC_GPS_NI_RESPONSE_DENY 2
-#define LOC_GPS_NI_RESPONSE_NORESP 3
-
-/**
- * NI data encoding scheme
- */
-typedef int LocGpsNiEncodingType;
-#define LOC_GPS_ENC_NONE 0
-#define LOC_GPS_ENC_SUPL_GSM_DEFAULT 1
-#define LOC_GPS_ENC_SUPL_UTF8 2
-#define LOC_GPS_ENC_SUPL_UCS2 3
-#define LOC_GPS_ENC_UNKNOWN -1
-
-/** AGPS status event values. */
-typedef uint8_t LocAGpsStatusValue;
-/** GPS requests data connection for AGPS. */
-#define LOC_GPS_REQUEST_AGPS_DATA_CONN 1
-/** GPS releases the AGPS data connection. */
-#define LOC_GPS_RELEASE_AGPS_DATA_CONN 2
-/** AGPS data connection initiated */
-#define LOC_GPS_AGPS_DATA_CONNECTED 3
-/** AGPS data connection completed */
-#define LOC_GPS_AGPS_DATA_CONN_DONE 4
-/** AGPS data connection failed */
-#define LOC_GPS_AGPS_DATA_CONN_FAILED 5
-
-typedef uint16_t LocAGpsRefLocationType;
-#define LOC_AGPS_REF_LOCATION_TYPE_GSM_CELLID 1
-#define LOC_AGPS_REF_LOCATION_TYPE_UMTS_CELLID 2
-#define LOC_AGPS_REF_LOCATION_TYPE_MAC 3
-#define LOC_AGPS_REF_LOCATION_TYPE_LTE_CELLID 4
-
-/* Deprecated, to be removed in the next Android release. */
-#define LOC_AGPS_REG_LOCATION_TYPE_MAC 3
-
-/** Network types for update_network_state "type" parameter */
-#define LOC_AGPS_RIL_NETWORK_TYPE_MOBILE 0
-#define LOC_AGPS_RIL_NETWORK_TYPE_WIFI 1
-#define LOC_AGPS_RIL_NETWORK_TYPE_MOBILE_MMS 2
-#define LOC_AGPS_RIL_NETWORK_TYPE_MOBILE_SUPL 3
-#define LOC_AGPS_RIL_NETWORK_TTYPE_MOBILE_DUN 4
-#define LOC_AGPS_RIL_NETWORK_TTYPE_MOBILE_HIPRI 5
-#define LOC_AGPS_RIL_NETWORK_TTYPE_WIMAX 6
-
-/* The following typedef together with its constants below are deprecated, and
- * will be removed in the next release. */
-typedef uint16_t LocGpsClockFlags;
-#define LOC_GPS_CLOCK_HAS_LEAP_SECOND (1<<0)
-#define LOC_GPS_CLOCK_HAS_TIME_UNCERTAINTY (1<<1)
-#define LOC_GPS_CLOCK_HAS_FULL_BIAS (1<<2)
-#define LOC_GPS_CLOCK_HAS_BIAS (1<<3)
-#define LOC_GPS_CLOCK_HAS_BIAS_UNCERTAINTY (1<<4)
-#define LOC_GPS_CLOCK_HAS_DRIFT (1<<5)
-#define LOC_GPS_CLOCK_HAS_DRIFT_UNCERTAINTY (1<<6)
-
-/**
- * Flags to indicate what fields in LocGnssClock are valid.
- */
-typedef uint16_t LocGnssClockFlags;
-/** A valid 'leap second' is stored in the data structure. */
-#define LOC_GNSS_CLOCK_HAS_LEAP_SECOND (1<<0)
-/** A valid 'time uncertainty' is stored in the data structure. */
-#define LOC_GNSS_CLOCK_HAS_TIME_UNCERTAINTY (1<<1)
-/** A valid 'full bias' is stored in the data structure. */
-#define LOC_GNSS_CLOCK_HAS_FULL_BIAS (1<<2)
-/** A valid 'bias' is stored in the data structure. */
-#define LOC_GNSS_CLOCK_HAS_BIAS (1<<3)
-/** A valid 'bias uncertainty' is stored in the data structure. */
-#define LOC_GNSS_CLOCK_HAS_BIAS_UNCERTAINTY (1<<4)
-/** A valid 'drift' is stored in the data structure. */
-#define LOC_GNSS_CLOCK_HAS_DRIFT (1<<5)
-/** A valid 'drift uncertainty' is stored in the data structure. */
-#define LOC_GNSS_CLOCK_HAS_DRIFT_UNCERTAINTY (1<<6)
-
-/* The following typedef together with its constants below are deprecated, and
- * will be removed in the next release. */
-typedef uint8_t LocGpsClockType;
-#define LOC_GPS_CLOCK_TYPE_UNKNOWN 0
-#define LOC_GPS_CLOCK_TYPE_LOCAL_HW_TIME 1
-#define LOC_GPS_CLOCK_TYPE_GPS_TIME 2
-
-/* The following typedef together with its constants below are deprecated, and
- * will be removed in the next release. */
-typedef uint32_t LocGpsMeasurementFlags;
-#define LOC_GPS_MEASUREMENT_HAS_SNR (1<<0)
-#define LOC_GPS_MEASUREMENT_HAS_ELEVATION (1<<1)
-#define LOC_GPS_MEASUREMENT_HAS_ELEVATION_UNCERTAINTY (1<<2)
-#define LOC_GPS_MEASUREMENT_HAS_AZIMUTH (1<<3)
-#define LOC_GPS_MEASUREMENT_HAS_AZIMUTH_UNCERTAINTY (1<<4)
-#define LOC_GPS_MEASUREMENT_HAS_PSEUDORANGE (1<<5)
-#define LOC_GPS_MEASUREMENT_HAS_PSEUDORANGE_UNCERTAINTY (1<<6)
-#define LOC_GPS_MEASUREMENT_HAS_CODE_PHASE (1<<7)
-#define LOC_GPS_MEASUREMENT_HAS_CODE_PHASE_UNCERTAINTY (1<<8)
-#define LOC_GPS_MEASUREMENT_HAS_CARRIER_FREQUENCY (1<<9)
-#define LOC_GPS_MEASUREMENT_HAS_CARRIER_CYCLES (1<<10)
-#define LOC_GPS_MEASUREMENT_HAS_CARRIER_PHASE (1<<11)
-#define LOC_GPS_MEASUREMENT_HAS_CARRIER_PHASE_UNCERTAINTY (1<<12)
-#define LOC_GPS_MEASUREMENT_HAS_BIT_NUMBER (1<<13)
-#define LOC_GPS_MEASUREMENT_HAS_TIME_FROM_LAST_BIT (1<<14)
-#define LOC_GPS_MEASUREMENT_HAS_DOPPLER_SHIFT (1<<15)
-#define LOC_GPS_MEASUREMENT_HAS_DOPPLER_SHIFT_UNCERTAINTY (1<<16)
-#define LOC_GPS_MEASUREMENT_HAS_USED_IN_FIX (1<<17)
-#define LOC_GPS_MEASUREMENT_HAS_UNCORRECTED_PSEUDORANGE_RATE (1<<18)
-
-/**
- * Flags to indicate what fields in LocGnssMeasurement are valid.
- */
-typedef uint32_t LocGnssMeasurementFlags;
-/** A valid 'snr' is stored in the data structure. */
-#define LOC_GNSS_MEASUREMENT_HAS_SNR (1<<0)
-/** A valid 'carrier frequency' is stored in the data structure. */
-#define LOC_GNSS_MEASUREMENT_HAS_CARRIER_FREQUENCY (1<<9)
-/** A valid 'carrier cycles' is stored in the data structure. */
-#define LOC_GNSS_MEASUREMENT_HAS_CARRIER_CYCLES (1<<10)
-/** A valid 'carrier phase' is stored in the data structure. */
-#define LOC_GNSS_MEASUREMENT_HAS_CARRIER_PHASE (1<<11)
-/** A valid 'carrier phase uncertainty' is stored in the data structure. */
-#define LOC_GNSS_MEASUREMENT_HAS_CARRIER_PHASE_UNCERTAINTY (1<<12)
-
-/* The following typedef together with its constants below are deprecated, and
- * will be removed in the next release. */
-typedef uint8_t LocGpsLossOfLock;
-#define LOC_GPS_LOSS_OF_LOCK_UNKNOWN 0
-#define LOC_GPS_LOSS_OF_LOCK_OK 1
-#define LOC_GPS_LOSS_OF_LOCK_CYCLE_SLIP 2
-
-/* The following typedef together with its constants below are deprecated, and
- * will be removed in the next release. Use LocGnssMultipathIndicator instead.
- */
-typedef uint8_t LocGpsMultipathIndicator;
-#define LOC_GPS_MULTIPATH_INDICATOR_UNKNOWN 0
-#define LOC_GPS_MULTIPATH_INDICATOR_DETECTED 1
-#define LOC_GPS_MULTIPATH_INDICATOR_NOT_USED 2
-
-/**
- * Enumeration of available values for the GNSS Measurement's multipath
- * indicator.
- */
-typedef uint8_t LocGnssMultipathIndicator;
-/** The indicator is not available or unknown. */
-#define LOC_GNSS_MULTIPATH_INDICATOR_UNKNOWN 0
-/** The measurement is indicated to be affected by multipath. */
-#define LOC_GNSS_MULTIPATH_INDICATOR_PRESENT 1
-/** The measurement is indicated to be not affected by multipath. */
-#define LOC_GNSS_MULTIPATH_INDICATOR_NOT_PRESENT 2
-
-/* The following typedef together with its constants below are deprecated, and
- * will be removed in the next release. */
-typedef uint16_t LocGpsMeasurementState;
-#define LOC_GPS_MEASUREMENT_STATE_UNKNOWN 0
-#define LOC_GPS_MEASUREMENT_STATE_CODE_LOCK (1<<0)
-#define LOC_GPS_MEASUREMENT_STATE_BIT_SYNC (1<<1)
-#define LOC_GPS_MEASUREMENT_STATE_SUBFRAME_SYNC (1<<2)
-#define LOC_GPS_MEASUREMENT_STATE_TOW_DECODED (1<<3)
-#define LOC_GPS_MEASUREMENT_STATE_MSEC_AMBIGUOUS (1<<4)
-
-/**
- * Flags indicating the GNSS measurement state.
- *
- * The expected behavior here is for GPS HAL to set all the flags that applies.
- * For example, if the state for a satellite is only C/A code locked and bit
- * synchronized, and there is still millisecond ambiguity, the state should be
- * set as:
- *
- * LOC_GNSS_MEASUREMENT_STATE_CODE_LOCK | LOC_GNSS_MEASUREMENT_STATE_BIT_SYNC |
- * LOC_GNSS_MEASUREMENT_STATE_MSEC_AMBIGUOUS
- *
- * If GNSS is still searching for a satellite, the corresponding state should be
- * set to LOC_GNSS_MEASUREMENT_STATE_UNKNOWN(0).
- */
-typedef uint32_t LocGnssMeasurementState;
-#define LOC_GNSS_MEASUREMENT_STATE_UNKNOWN 0
-#define LOC_GNSS_MEASUREMENT_STATE_CODE_LOCK (1<<0)
-#define LOC_GNSS_MEASUREMENT_STATE_BIT_SYNC (1<<1)
-#define LOC_GNSS_MEASUREMENT_STATE_SUBFRAME_SYNC (1<<2)
-#define LOC_GNSS_MEASUREMENT_STATE_TOW_DECODED (1<<3)
-#define LOC_GNSS_MEASUREMENT_STATE_MSEC_AMBIGUOUS (1<<4)
-#define LOC_GNSS_MEASUREMENT_STATE_SYMBOL_SYNC (1<<5)
-#define LOC_GNSS_MEASUREMENT_STATE_GLO_STRING_SYNC (1<<6)
-#define LOC_GNSS_MEASUREMENT_STATE_GLO_TOD_DECODED (1<<7)
-#define LOC_GNSS_MEASUREMENT_STATE_BDS_D2_BIT_SYNC (1<<8)
-#define LOC_GNSS_MEASUREMENT_STATE_BDS_D2_SUBFRAME_SYNC (1<<9)
-#define LOC_GNSS_MEASUREMENT_STATE_GAL_E1BC_CODE_LOCK (1<<10)
-#define LOC_GNSS_MEASUREMENT_STATE_GAL_E1C_2ND_CODE_LOCK (1<<11)
-#define LOC_GNSS_MEASUREMENT_STATE_GAL_E1B_PAGE_SYNC (1<<12)
-#define LOC_GNSS_MEASUREMENT_STATE_SBAS_SYNC (1<<13)
-
-/* The following typedef together with its constants below are deprecated, and
- * will be removed in the next release. */
-typedef uint16_t LocGpsAccumulatedDeltaRangeState;
-#define LOC_GPS_ADR_STATE_UNKNOWN 0
-#define LOC_GPS_ADR_STATE_VALID (1<<0)
-#define LOC_GPS_ADR_STATE_RESET (1<<1)
-#define LOC_GPS_ADR_STATE_CYCLE_SLIP (1<<2)
-
-/**
- * Flags indicating the Accumulated Delta Range's states.
- */
-typedef uint16_t LocGnssAccumulatedDeltaRangeState;
-#define LOC_GNSS_ADR_STATE_UNKNOWN 0
-#define LOC_GNSS_ADR_STATE_VALID (1<<0)
-#define LOC_GNSS_ADR_STATE_RESET (1<<1)
-#define LOC_GNSS_ADR_STATE_CYCLE_SLIP (1<<2)
-
-#if 0
-/* The following typedef together with its constants below are deprecated, and
- * will be removed in the next release. */
-typedef uint8_t GpsNavigationMessageType;
-#define GPS_NAVIGATION_MESSAGE_TYPE_UNKNOWN 0
-#define GPS_NAVIGATION_MESSAGE_TYPE_L1CA 1
-#define GPS_NAVIGATION_MESSAGE_TYPE_L2CNAV 2
-#define GPS_NAVIGATION_MESSAGE_TYPE_L5CNAV 3
-#define GPS_NAVIGATION_MESSAGE_TYPE_CNAV2 4
-
-/**
- * Enumeration of available values to indicate the GNSS Navigation message
- * types.
- *
- * For convenience, first byte is the LocGnssConstellationType on which that signal
- * is typically transmitted
- */
-typedef int16_t GnssNavigationMessageType;
-
-#define GNSS_NAVIGATION_MESSAGE_TYPE_UNKNOWN 0
-/** GPS L1 C/A message contained in the structure. */
-#define GNSS_NAVIGATION_MESSAGE_TYPE_GPS_L1CA 0x0101
-/** GPS L2-CNAV message contained in the structure. */
-#define GNSS_NAVIGATION_MESSAGE_TYPE_GPS_L2CNAV 0x0102
-/** GPS L5-CNAV message contained in the structure. */
-#define GNSS_NAVIGATION_MESSAGE_TYPE_GPS_L5CNAV 0x0103
-/** GPS CNAV-2 message contained in the structure. */
-#define GNSS_NAVIGATION_MESSAGE_TYPE_GPS_CNAV2 0x0104
-/** Glonass L1 CA message contained in the structure. */
-#define GNSS_NAVIGATION_MESSAGE_TYPE_GLO_L1CA 0x0301
-/** Beidou D1 message contained in the structure. */
-#define GNSS_NAVIGATION_MESSAGE_TYPE_BDS_D1 0x0501
-/** Beidou D2 message contained in the structure. */
-#define GNSS_NAVIGATION_MESSAGE_TYPE_BDS_D2 0x0502
-/** Galileo I/NAV message contained in the structure. */
-#define GNSS_NAVIGATION_MESSAGE_TYPE_GAL_I 0x0601
-/** Galileo F/NAV message contained in the structure. */
-#define GNSS_NAVIGATION_MESSAGE_TYPE_GAL_F 0x0602
-
-/**
- * Status of Navigation Message
- * When a message is received properly without any parity error in its navigation words, the
- * status should be set to NAV_MESSAGE_STATUS_PARITY_PASSED. But if a message is received
- * with words that failed parity check, but GPS is able to correct those words, the status
- * should be set to NAV_MESSAGE_STATUS_PARITY_REBUILT.
- * No need to send any navigation message that contains words with parity error and cannot be
- * corrected.
- */
-typedef uint16_t NavigationMessageStatus;
-#define NAV_MESSAGE_STATUS_UNKNOWN 0
-#define NAV_MESSAGE_STATUS_PARITY_PASSED (1<<0)
-#define NAV_MESSAGE_STATUS_PARITY_REBUILT (1<<1)
-
-/* This constant is deprecated, and will be removed in the next release. */
-#define NAV_MESSAGE_STATUS_UNKONW 0
-#endif
-
-/**
- * Flags that indicate information about the satellite
- */
-typedef uint8_t LocGnssSvFlags;
-#define LOC_GNSS_SV_FLAGS_NONE 0
-#define LOC_GNSS_SV_FLAGS_HAS_EPHEMERIS_DATA (1 << 0)
-#define LOC_GNSS_SV_FLAGS_HAS_ALMANAC_DATA (1 << 1)
-#define LOC_GNSS_SV_FLAGS_USED_IN_FIX (1 << 2)
-
-/**
- * Constellation type of LocGnssSvInfo
- */
-typedef uint8_t LocGnssConstellationType;
-#define LOC_GNSS_CONSTELLATION_UNKNOWN 0
-#define LOC_GNSS_CONSTELLATION_GPS 1
-#define LOC_GNSS_CONSTELLATION_SBAS 2
-#define LOC_GNSS_CONSTELLATION_GLONASS 3
-#define LOC_GNSS_CONSTELLATION_QZSS 4
-#define LOC_GNSS_CONSTELLATION_BEIDOU 5
-#define LOC_GNSS_CONSTELLATION_GALILEO 6
-
-/**
- * Name for the GPS XTRA interface.
- */
-#define LOC_GPS_XTRA_INTERFACE "gps-xtra"
-
-/**
- * Name for the GPS DEBUG interface.
- */
-#define LOC_GPS_DEBUG_INTERFACE "gps-debug"
-
-/**
- * Name for the AGPS interface.
- */
-
-#define LOC_AGPS_INTERFACE "agps"
-
-/**
- * Name of the Supl Certificate interface.
- */
-#define LOC_SUPL_CERTIFICATE_INTERFACE "supl-certificate"
-
-/**
- * Name for NI interface
- */
-#define LOC_GPS_NI_INTERFACE "gps-ni"
-
-/**
- * Name for the AGPS-RIL interface.
- */
-#define LOC_AGPS_RIL_INTERFACE "agps_ril"
-
-/**
- * Name for the GPS_Geofencing interface.
- */
-#define LOC_GPS_GEOFENCING_INTERFACE "gps_geofencing"
-
-/**
- * Name of the GPS Measurements interface.
- */
-#define LOC_GPS_MEASUREMENT_INTERFACE "gps_measurement"
-
-/**
- * Name of the GPS navigation message interface.
- */
-#define LOC_GPS_NAVIGATION_MESSAGE_INTERFACE "gps_navigation_message"
-
-/**
- * Name of the GNSS/GPS configuration interface.
- */
-#define LOC_GNSS_CONFIGURATION_INTERFACE "gnss_configuration"
-
-/** Represents a location. */
-typedef struct {
- /** set to sizeof(LocGpsLocation) */
- size_t size;
- /** Contains LocGpsLocationFlags bits. */
- uint16_t flags;
- /** Represents latitude in degrees. */
- double latitude;
- /** Represents longitude in degrees. */
- double longitude;
- /**
- * Represents altitude in meters above the WGS 84 reference ellipsoid.
- */
- double altitude;
- /** Represents horizontal speed in meters per second. */
- float speed;
- /** Represents heading in degrees. */
- float bearing;
- /** Represents expected accuracy in meters. */
- float accuracy;
- /** Represents the expected vertical uncertainity in meters*/
- float vertUncertainity;
- /** Timestamp for the location fix. */
- LocGpsUtcTime timestamp;
-} LocGpsLocation;
-
-/** Represents the status. */
-typedef struct {
- /** set to sizeof(LocGpsStatus) */
- size_t size;
- LocGpsStatusValue status;
-} LocGpsStatus;
-
-/**
- * Legacy struct to represents SV information.
- * Deprecated, to be removed in the next Android release.
- * Use LocGnssSvInfo instead.
- */
-typedef struct {
- /** set to sizeof(LocGpsSvInfo) */
- size_t size;
- /** Pseudo-random number for the SV. */
- int prn;
- /** Signal to noise ratio. */
- float snr;
- /** Elevation of SV in degrees. */
- float elevation;
- /** Azimuth of SV in degrees. */
- float azimuth;
-} LocGpsSvInfo;
-
-typedef struct {
- /** set to sizeof(LocGnssSvInfo) */
- size_t size;
-
- /**
- * Pseudo-random number for the SV, or FCN/OSN number for Glonass. The
- * distinction is made by looking at constellation field. Values should be
- * in the range of:
- *
- * - GPS: 1-32
- * - SBAS: 120-151, 183-192
- * - GLONASS: 1-24, the orbital slot number (OSN), if known. Or, if not:
- * 93-106, the frequency channel number (FCN) (-7 to +6) offset by + 100
- * i.e. report an FCN of -7 as 93, FCN of 0 as 100, and FCN of +6 as 106.
- * - QZSS: 193-200
- * - Galileo: 1-36
- * - Beidou: 1-37
- */
- int16_t svid;
-
- /**
- * Defines the constellation of the given SV. Value should be one of those
- * LOC_GNSS_CONSTELLATION_* constants
- */
- LocGnssConstellationType constellation;
-
- /**
- * Carrier-to-noise density in dB-Hz, typically in the range [0, 63].
- * It contains the measured C/N0 value for the signal at the antenna port.
- *
- * This is a mandatory value.
- */
- float c_n0_dbhz;
-
- /** Elevation of SV in degrees. */
- float elevation;
-
- /** Azimuth of SV in degrees. */
- float azimuth;
-
- /**
- * Contains additional data about the given SV. Value should be one of those
- * LOC_GNSS_SV_FLAGS_* constants
- */
- LocGnssSvFlags flags;
-
-} LocGnssSvInfo;
-
-/**
- * Legacy struct to represents SV status.
- * Deprecated, to be removed in the next Android release.
- * Use LocGnssSvStatus instead.
- */
-typedef struct {
- /** set to sizeof(LocGpsSvStatus) */
- size_t size;
- int num_svs;
- LocGpsSvInfo sv_list[LOC_GPS_MAX_SVS];
- uint32_t ephemeris_mask;
- uint32_t almanac_mask;
- uint32_t used_in_fix_mask;
-} LocGpsSvStatus;
-
-/**
- * Represents SV status.
- */
-typedef struct {
- /** set to sizeof(LocGnssSvStatus) */
- size_t size;
-
- /** Number of GPS SVs currently visible, refers to the SVs stored in sv_list */
- int num_svs;
- /**
- * Pointer to an array of SVs information for all GNSS constellations,
- * except GPS, which is reported using sv_list
- */
- LocGnssSvInfo gnss_sv_list[LOC_GNSS_MAX_SVS];
-
-} LocGnssSvStatus;
-
-/* CellID for 2G, 3G and LTE, used in AGPS. */
-typedef struct {
- LocAGpsRefLocationType type;
- /** Mobile Country Code. */
- uint16_t mcc;
- /** Mobile Network Code .*/
- uint16_t mnc;
- /** Location Area Code in 2G, 3G and LTE. In 3G lac is discarded. In LTE,
- * lac is populated with tac, to ensure that we don't break old clients that
- * might rely in the old (wrong) behavior.
- */
- uint16_t lac;
- /** Cell id in 2G. Utran Cell id in 3G. Cell Global Id EUTRA in LTE. */
- uint32_t cid;
- /** Tracking Area Code in LTE. */
- uint16_t tac;
- /** Physical Cell id in LTE (not used in 2G and 3G) */
- uint16_t pcid;
-} LocAGpsRefLocationCellID;
-
-typedef struct {
- uint8_t mac[6];
-} LocAGpsRefLocationMac;
-
-/** Represents ref locations */
-typedef struct {
- LocAGpsRefLocationType type;
- union {
- LocAGpsRefLocationCellID cellID;
- LocAGpsRefLocationMac mac;
- } u;
-} LocAGpsRefLocation;
-
-/**
- * Callback with location information. Can only be called from a thread created
- * by create_thread_cb.
- */
-typedef void (* loc_gps_location_callback)(LocGpsLocation* location);
-
-/**
- * Callback with status information. Can only be called from a thread created by
- * create_thread_cb.
- */
-typedef void (* loc_gps_status_callback)(LocGpsStatus* status);
-/**
- * Legacy callback with SV status information.
- * Can only be called from a thread created by create_thread_cb.
- *
- * This callback is deprecated, and will be removed in the next release. Use
- * loc_gnss_sv_status_callback() instead.
- */
-typedef void (* loc_gps_sv_status_callback)(LocGpsSvStatus* sv_info);
-
-/**
- * Callback with SV status information.
- * Can only be called from a thread created by create_thread_cb.
- */
-typedef void (* loc_gnss_sv_status_callback)(LocGnssSvStatus* sv_info);
-
-/**
- * Callback for reporting NMEA sentences. Can only be called from a thread
- * created by create_thread_cb.
- */
-typedef void (* loc_gps_nmea_callback)(LocGpsUtcTime timestamp, const char* nmea, int length);
-
-/**
- * Callback to inform framework of the GPS engine's capabilities. Capability
- * parameter is a bit field of LOC_GPS_CAPABILITY_* flags.
- */
-typedef void (* loc_gps_set_capabilities)(uint32_t capabilities);
-
-/**
- * Callback utility for acquiring the GPS wakelock. This can be used to prevent
- * the CPU from suspending while handling GPS events.
- */
-typedef void (* loc_gps_acquire_wakelock)();
-
-/** Callback utility for releasing the GPS wakelock. */
-typedef void (* loc_gps_release_wakelock)();
-
-/** Callback for requesting NTP time */
-typedef void (* loc_gps_request_utc_time)();
-
-/**
- * Callback for creating a thread that can call into the Java framework code.
- * This must be used to create any threads that report events up to the
- * framework.
- */
-typedef pthread_t (* loc_gps_create_thread)(const char* name, void (*start)(void *), void* arg);
-
-/**
- * Provides information about how new the underlying GPS/GNSS hardware and
- * software is.
- *
- * This information will be available for Android Test Applications. If a GPS
- * HAL does not provide this information, it will be considered "2015 or
- * earlier".
- *
- * If a GPS HAL does provide this information, then newer years will need to
- * meet newer CTS standards. E.g. if the date are 2016 or above, then N+ level
- * LocGpsMeasurement support will be verified.
- */
-typedef struct {
- /** Set to sizeof(LocGnssSystemInfo) */
- size_t size;
- /* year in which the last update was made to the underlying hardware/firmware
- * used to capture GNSS signals, e.g. 2016 */
- uint16_t year_of_hw;
-} LocGnssSystemInfo;
-
-/**
- * Callback to inform framework of the engine's hardware version information.
- */
-typedef void (*loc_gnss_set_system_info)(const LocGnssSystemInfo* info);
-
-/** New GPS callback structure. */
-typedef struct {
- /** set to sizeof(LocGpsCallbacks) */
- size_t size;
- loc_gps_location_callback location_cb;
- loc_gps_status_callback status_cb;
- loc_gps_sv_status_callback sv_status_cb;
- loc_gps_nmea_callback nmea_cb;
- loc_gps_set_capabilities set_capabilities_cb;
- loc_gps_acquire_wakelock acquire_wakelock_cb;
- loc_gps_release_wakelock release_wakelock_cb;
- loc_gps_create_thread create_thread_cb;
- loc_gps_request_utc_time request_utc_time_cb;
-
- loc_gnss_set_system_info set_system_info_cb;
- loc_gnss_sv_status_callback gnss_sv_status_cb;
-} LocGpsCallbacks;
-
-/** Represents the standard GPS interface. */
-typedef struct {
- /** set to sizeof(LocGpsInterface) */
- size_t size;
- /**
- * Opens the interface and provides the callback routines
- * to the implementation of this interface.
- */
- int (*init)( LocGpsCallbacks* callbacks );
-
- /** Starts navigating. */
- int (*start)( void );
-
- /** Stops navigating. */
- int (*stop)( void );
-
- /** Closes the interface. */
- void (*cleanup)( void );
-
- /** Injects the current time. */
- int (*inject_time)(LocGpsUtcTime time, int64_t timeReference,
- int uncertainty);
-
- /**
- * Injects current location from another location provider (typically cell
- * ID). Latitude and longitude are measured in degrees expected accuracy is
- * measured in meters
- */
- int (*inject_location)(double latitude, double longitude, float accuracy);
-
- /**
- * Specifies that the next call to start will not use the
- * information defined in the flags. LOC_GPS_DELETE_ALL is passed for
- * a cold start.
- */
- void (*delete_aiding_data)(LocGpsAidingData flags);
-
- /**
- * min_interval represents the time between fixes in milliseconds.
- * preferred_accuracy represents the requested fix accuracy in meters.
- * preferred_time represents the requested time to first fix in milliseconds.
- *
- * 'mode' parameter should be one of LOC_GPS_POSITION_MODE_MS_BASED
- * or LOC_GPS_POSITION_MODE_STANDALONE.
- * It is allowed by the platform (and it is recommended) to fallback to
- * LOC_GPS_POSITION_MODE_MS_BASED if LOC_GPS_POSITION_MODE_MS_ASSISTED is passed in, and
- * LOC_GPS_POSITION_MODE_MS_BASED is supported.
- */
- int (*set_position_mode)(LocGpsPositionMode mode, LocGpsPositionRecurrence recurrence,
- uint32_t min_interval, uint32_t preferred_accuracy, uint32_t preferred_time);
-
- /** Get a pointer to extension information. */
- const void* (*get_extension)(const char* name);
-} LocGpsInterface;
-
-/**
- * Callback to request the client to download XTRA data. The client should
- * download XTRA data and inject it by calling inject_xtra_data(). Can only be
- * called from a thread created by create_thread_cb.
- */
-typedef void (* loc_gps_xtra_download_request)();
-
-/** Callback structure for the XTRA interface. */
-typedef struct {
- loc_gps_xtra_download_request download_request_cb;
- loc_gps_create_thread create_thread_cb;
-} LocGpsXtraCallbacks;
-
-/** Extended interface for XTRA support. */
-typedef struct {
- /** set to sizeof(LocGpsXtraInterface) */
- size_t size;
- /**
- * Opens the XTRA interface and provides the callback routines
- * to the implementation of this interface.
- */
- int (*init)( LocGpsXtraCallbacks* callbacks );
- /** Injects XTRA data into the GPS. */
- int (*inject_xtra_data)( char* data, int length );
-} LocGpsXtraInterface;
-
-#if 0
-/** Extended interface for DEBUG support. */
-typedef struct {
- /** set to sizeof(LocGpsDebugInterface) */
- size_t size;
-
- /**
- * This function should return any information that the native
- * implementation wishes to include in a bugreport.
- */
- size_t (*get_internal_state)(char* buffer, size_t bufferSize);
-} LocGpsDebugInterface;
-#endif
-
-/*
- * Represents the status of AGPS augmented to support IPv4 and IPv6.
- */
-typedef struct {
- /** set to sizeof(LocAGpsStatus) */
- size_t size;
-
- LocAGpsType type;
- LocAGpsStatusValue status;
-
- /**
- * Must be set to a valid IPv4 address if the field 'addr' contains an IPv4
- * address, or set to INADDR_NONE otherwise.
- */
- uint32_t ipaddr;
-
- /**
- * Must contain the IPv4 (AF_INET) or IPv6 (AF_INET6) address to report.
- * Any other value of addr.ss_family will be rejected.
- */
- struct sockaddr_storage addr;
-} LocAGpsStatus;
-
-/**
- * Callback with AGPS status information. Can only be called from a thread
- * created by create_thread_cb.
- */
-typedef void (* loc_agps_status_callback)(LocAGpsStatus* status);
-
-/** Callback structure for the AGPS interface. */
-typedef struct {
- loc_agps_status_callback status_cb;
- loc_gps_create_thread create_thread_cb;
-} LocAGpsCallbacks;
-
-/**
- * Extended interface for AGPS support, it is augmented to enable to pass
- * extra APN data.
- */
-typedef struct {
- /** set to sizeof(LocAGpsInterface) */
- size_t size;
-
- /**
- * Opens the AGPS interface and provides the callback routines to the
- * implementation of this interface.
- */
- void (*init)(LocAGpsCallbacks* callbacks);
- /**
- * Deprecated.
- * If the HAL supports LocAGpsInterface_v2 this API will not be used, see
- * data_conn_open_with_apn_ip_type for more information.
- */
- int (*data_conn_open)(const char* apn);
- /**
- * Notifies that the AGPS data connection has been closed.
- */
- int (*data_conn_closed)();
- /**
- * Notifies that a data connection is not available for AGPS.
- */
- int (*data_conn_failed)();
- /**
- * Sets the hostname and port for the AGPS server.
- */
- int (*set_server)(LocAGpsType type, const char* hostname, int port);
-
- /**
- * Notifies that a data connection is available and sets the name of the
- * APN, and its IP type, to be used for SUPL connections.
- */
- int (*data_conn_open_with_apn_ip_type)(
- const char* apn,
- LocApnIpType apnIpType);
-} LocAGpsInterface;
-
-/** Error codes associated with certificate operations */
-#define LOC_AGPS_CERTIFICATE_OPERATION_SUCCESS 0
-#define LOC_AGPS_CERTIFICATE_ERROR_GENERIC -100
-#define LOC_AGPS_CERTIFICATE_ERROR_TOO_MANY_CERTIFICATES -101
-
-/** A data structure that represents an X.509 certificate using DER encoding */
-typedef struct {
- size_t length;
- u_char* data;
-} LocDerEncodedCertificate;
-
-/**
- * A type definition for SHA1 Fingerprints used to identify X.509 Certificates
- * The Fingerprint is a digest of the DER Certificate that uniquely identifies it.
- */
-typedef struct {
- u_char data[20];
-} LocSha1CertificateFingerprint;
-
-/** AGPS Interface to handle SUPL certificate operations */
-typedef struct {
- /** set to sizeof(LocSuplCertificateInterface) */
- size_t size;
-
- /**
- * Installs a set of Certificates used for SUPL connections to the AGPS server.
- * If needed the HAL should find out internally any certificates that need to be removed to
- * accommodate the certificates to install.
- * The certificates installed represent a full set of valid certificates needed to connect to
- * AGPS SUPL servers.
- * The list of certificates is required, and all must be available at the same time, when trying
- * to establish a connection with the AGPS Server.
- *
- * Parameters:
- * certificates - A pointer to an array of DER encoded certificates that are need to be
- * installed in the HAL.
- * length - The number of certificates to install.
- * Returns:
- * LOC_AGPS_CERTIFICATE_OPERATION_SUCCESS if the operation is completed successfully
- * LOC_AGPS_CERTIFICATE_ERROR_TOO_MANY_CERTIFICATES if the HAL cannot store the number of
- * certificates attempted to be installed, the state of the certificates stored should
- * remain the same as before on this error case.
- *
- * IMPORTANT:
- * If needed the HAL should find out internally the set of certificates that need to be
- * removed to accommodate the certificates to install.
- */
- int (*install_certificates) ( const LocDerEncodedCertificate* certificates, size_t length );
-
- /**
- * Notifies the HAL that a list of certificates used for SUPL connections are revoked. It is
- * expected that the given set of certificates is removed from the internal store of the HAL.
- *
- * Parameters:
- * fingerprints - A pointer to an array of SHA1 Fingerprints to identify the set of
- * certificates to revoke.
- * length - The number of fingerprints provided.
- * Returns:
- * LOC_AGPS_CERTIFICATE_OPERATION_SUCCESS if the operation is completed successfully.
- *
- * IMPORTANT:
- * If any of the certificates provided (through its fingerprint) is not known by the HAL,
- * it should be ignored and continue revoking/deleting the rest of them.
- */
- int (*revoke_certificates) ( const LocSha1CertificateFingerprint* fingerprints, size_t length );
-} LocSuplCertificateInterface;
-
-/** Represents an NI request */
-typedef struct {
- /** set to sizeof(LocGpsNiNotification) */
- size_t size;
-
- /**
- * An ID generated by HAL to associate NI notifications and UI
- * responses
- */
- int notification_id;
-
- /**
- * An NI type used to distinguish different categories of NI
- * events, such as LOC_GPS_NI_TYPE_VOICE, LOC_GPS_NI_TYPE_UMTS_SUPL, ...
- */
- LocGpsNiType ni_type;
-
- /**
- * Notification/verification options, combinations of LocGpsNiNotifyFlags constants
- */
- LocGpsNiNotifyFlags notify_flags;
-
- /**
- * Timeout period to wait for user response.
- * Set to 0 for no time out limit.
- */
- int timeout;
-
- /**
- * Default response when time out.
- */
- LocGpsUserResponseType default_response;
-
- /**
- * Requestor ID
- */
- char requestor_id[LOC_GPS_NI_SHORT_STRING_MAXLEN];
-
- /**
- * Notification message. It can also be used to store client_id in some cases
- */
- char text[LOC_GPS_NI_LONG_STRING_MAXLEN];
-
- /**
- * Client name decoding scheme
- */
- LocGpsNiEncodingType requestor_id_encoding;
-
- /**
- * Client name decoding scheme
- */
- LocGpsNiEncodingType text_encoding;
-
- /**
- * A pointer to extra data. Format:
- * key_1 = value_1
- * key_2 = value_2
- */
- char extras[LOC_GPS_NI_LONG_STRING_MAXLEN];
-
-} LocGpsNiNotification;
-
-/**
- * Callback with NI notification. Can only be called from a thread created by
- * create_thread_cb.
- */
-typedef void (*loc_gps_ni_notify_callback)(LocGpsNiNotification *notification);
-
-/** GPS NI callback structure. */
-typedef struct
-{
- /**
- * Sends the notification request from HAL to GPSLocationProvider.
- */
- loc_gps_ni_notify_callback notify_cb;
- loc_gps_create_thread create_thread_cb;
-} LocGpsNiCallbacks;
-
-/**
- * Extended interface for Network-initiated (NI) support.
- */
-typedef struct
-{
- /** set to sizeof(LocGpsNiInterface) */
- size_t size;
-
- /** Registers the callbacks for HAL to use. */
- void (*init) (LocGpsNiCallbacks *callbacks);
-
- /** Sends a response to HAL. */
- void (*respond) (int notif_id, LocGpsUserResponseType user_response);
-} LocGpsNiInterface;
-
-#define LOC_AGPS_RIL_REQUEST_SETID_IMSI (1<<0L)
-#define LOC_AGPS_RIL_REQUEST_SETID_MSISDN (1<<1L)
-
-#define LOC_AGPS_RIL_REQUEST_REFLOC_CELLID (1<<0L)
-#define LOC_AGPS_RIL_REQUEST_REFLOC_MAC (1<<1L)
-
-typedef void (*loc_agps_ril_request_set_id)(uint32_t flags);
-typedef void (*loc_agps_ril_request_ref_loc)(uint32_t flags);
-
-typedef struct {
- loc_agps_ril_request_set_id request_setid;
- loc_agps_ril_request_ref_loc request_refloc;
- loc_gps_create_thread create_thread_cb;
-} LocAGpsRilCallbacks;
-
-/** Extended interface for AGPS_RIL support. */
-typedef struct {
- /** set to sizeof(LocAGpsRilInterface) */
- size_t size;
- /**
- * Opens the AGPS interface and provides the callback routines
- * to the implementation of this interface.
- */
- void (*init)( LocAGpsRilCallbacks* callbacks );
-
- /**
- * Sets the reference location.
- */
- void (*set_ref_location) (const LocAGpsRefLocation *agps_reflocation, size_t sz_struct);
- /**
- * Sets the set ID.
- */
- void (*set_set_id) (LocAGpsSetIDType type, const char* setid);
-
- /**
- * Send network initiated message.
- */
- void (*ni_message) (uint8_t *msg, size_t len);
-
- /**
- * Notify GPS of network status changes.
- * These parameters match values in the android.net.NetworkInfo class.
- */
- void (*update_network_state) (int connected, int type, int roaming, const char* extra_info);
-
- /**
- * Notify GPS of network status changes.
- * These parameters match values in the android.net.NetworkInfo class.
- */
- void (*update_network_availability) (int avaiable, const char* apn);
-} LocAGpsRilInterface;
-
-/**
- * GPS Geofence.
- * There are 3 states associated with a Geofence: Inside, Outside, Unknown.
- * There are 3 transitions: ENTERED, EXITED, UNCERTAIN.
- *
- * An example state diagram with confidence level: 95% and Unknown time limit
- * set as 30 secs is shown below. (confidence level and Unknown time limit are
- * explained latter)
- * ____________________________
- * | Unknown (30 secs) |
- * """"""""""""""""""""""""""""
- * ^ | | ^
- * UNCERTAIN| |ENTERED EXITED| |UNCERTAIN
- * | v v |
- * ________ EXITED _________
- * | Inside | -----------> | Outside |
- * | | <----------- | |
- * """""""" ENTERED """""""""
- *
- * Inside state: We are 95% confident that the user is inside the geofence.
- * Outside state: We are 95% confident that the user is outside the geofence
- * Unknown state: Rest of the time.
- *
- * The Unknown state is better explained with an example:
- *
- * __________
- * | c|
- * | ___ | _______
- * | |a| | | b |
- * | """ | """""""
- * | |
- * """"""""""
- * In the diagram above, "a" and "b" are 2 geofences and "c" is the accuracy
- * circle reported by the GPS subsystem. Now with regard to "b", the system is
- * confident that the user is outside. But with regard to "a" is not confident
- * whether it is inside or outside the geofence. If the accuracy remains the
- * same for a sufficient period of time, the UNCERTAIN transition would be
- * triggered with the state set to Unknown. If the accuracy improves later, an
- * appropriate transition should be triggered. This "sufficient period of time"
- * is defined by the parameter in the add_geofence_area API.
- * In other words, Unknown state can be interpreted as a state in which the
- * GPS subsystem isn't confident enough that the user is either inside or
- * outside the Geofence. It moves to Unknown state only after the expiry of the
- * timeout.
- *
- * The geofence callback needs to be triggered for the ENTERED and EXITED
- * transitions, when the GPS system is confident that the user has entered
- * (Inside state) or exited (Outside state) the Geofence. An implementation
- * which uses a value of 95% as the confidence is recommended. The callback
- * should be triggered only for the transitions requested by the
- * add_geofence_area call.
- *
- * Even though the diagram and explanation talks about states and transitions,
- * the callee is only interested in the transistions. The states are mentioned
- * here for illustrative purposes.
- *
- * Startup Scenario: When the device boots up, if an application adds geofences,
- * and then we get an accurate GPS location fix, it needs to trigger the
- * appropriate (ENTERED or EXITED) transition for every Geofence it knows about.
- * By default, all the Geofences will be in the Unknown state.
- *
- * When the GPS system is unavailable, loc_gps_geofence_status_callback should be
- * called to inform the upper layers of the same. Similarly, when it becomes
- * available the callback should be called. This is a global state while the
- * UNKNOWN transition described above is per geofence.
- *
- * An important aspect to note is that users of this API (framework), will use
- * other subsystems like wifi, sensors, cell to handle Unknown case and
- * hopefully provide a definitive state transition to the third party
- * application. GPS Geofence will just be a signal indicating what the GPS
- * subsystem knows about the Geofence.
- *
- */
-#define LOC_GPS_GEOFENCE_ENTERED (1<<0L)
-#define LOC_GPS_GEOFENCE_EXITED (1<<1L)
-#define LOC_GPS_GEOFENCE_UNCERTAIN (1<<2L)
-
-#define LOC_GPS_GEOFENCE_UNAVAILABLE (1<<0L)
-#define LOC_GPS_GEOFENCE_AVAILABLE (1<<1L)
-
-#define LOC_GPS_GEOFENCE_OPERATION_SUCCESS 0
-#define LOC_GPS_GEOFENCE_ERROR_TOO_MANY_GEOFENCES -100
-#define LOC_GPS_GEOFENCE_ERROR_ID_EXISTS -101
-#define LOC_GPS_GEOFENCE_ERROR_ID_UNKNOWN -102
-#define LOC_GPS_GEOFENCE_ERROR_INVALID_TRANSITION -103
-#define LOC_GPS_GEOFENCE_ERROR_GENERIC -149
-
-/**
- * The callback associated with the geofence.
- * Parameters:
- * geofence_id - The id associated with the add_geofence_area.
- * location - The current GPS location.
- * transition - Can be one of LOC_GPS_GEOFENCE_ENTERED, LOC_GPS_GEOFENCE_EXITED,
- * LOC_GPS_GEOFENCE_UNCERTAIN.
- * timestamp - Timestamp when the transition was detected.
- *
- * The callback should only be called when the caller is interested in that
- * particular transition. For instance, if the caller is interested only in
- * ENTERED transition, then the callback should NOT be called with the EXITED
- * transition.
- *
- * IMPORTANT: If a transition is triggered resulting in this callback, the GPS
- * subsystem will wake up the application processor, if its in suspend state.
- */
-typedef void (*loc_gps_geofence_transition_callback) (int32_t geofence_id, LocGpsLocation* location,
- int32_t transition, LocGpsUtcTime timestamp);
-
-/**
- * The callback associated with the availability of the GPS system for geofencing
- * monitoring. If the GPS system determines that it cannot monitor geofences
- * because of lack of reliability or unavailability of the GPS signals, it will
- * call this callback with LOC_GPS_GEOFENCE_UNAVAILABLE parameter.
- *
- * Parameters:
- * status - LOC_GPS_GEOFENCE_UNAVAILABLE or LOC_GPS_GEOFENCE_AVAILABLE.
- * last_location - Last known location.
- */
-typedef void (*loc_gps_geofence_status_callback) (int32_t status, LocGpsLocation* last_location);
-
-/**
- * The callback associated with the add_geofence call.
- *
- * Parameter:
- * geofence_id - Id of the geofence.
- * status - LOC_GPS_GEOFENCE_OPERATION_SUCCESS
- * LOC_GPS_GEOFENCE_ERROR_TOO_MANY_GEOFENCES - geofence limit has been reached.
- * LOC_GPS_GEOFENCE_ERROR_ID_EXISTS - geofence with id already exists
- * LOC_GPS_GEOFENCE_ERROR_INVALID_TRANSITION - the monitorTransition contains an
- * invalid transition
- * LOC_GPS_GEOFENCE_ERROR_GENERIC - for other errors.
- */
-typedef void (*loc_gps_geofence_add_callback) (int32_t geofence_id, int32_t status);
-
-/**
- * The callback associated with the remove_geofence call.
- *
- * Parameter:
- * geofence_id - Id of the geofence.
- * status - LOC_GPS_GEOFENCE_OPERATION_SUCCESS
- * LOC_GPS_GEOFENCE_ERROR_ID_UNKNOWN - for invalid id
- * LOC_GPS_GEOFENCE_ERROR_GENERIC for others.
- */
-typedef void (*loc_gps_geofence_remove_callback) (int32_t geofence_id, int32_t status);
-
-
-/**
- * The callback associated with the pause_geofence call.
- *
- * Parameter:
- * geofence_id - Id of the geofence.
- * status - LOC_GPS_GEOFENCE_OPERATION_SUCCESS
- * LOC_GPS_GEOFENCE_ERROR_ID_UNKNOWN - for invalid id
- * LOC_GPS_GEOFENCE_ERROR_INVALID_TRANSITION -
- * when monitor_transitions is invalid
- * LOC_GPS_GEOFENCE_ERROR_GENERIC for others.
- */
-typedef void (*loc_gps_geofence_pause_callback) (int32_t geofence_id, int32_t status);
-
-/**
- * The callback associated with the resume_geofence call.
- *
- * Parameter:
- * geofence_id - Id of the geofence.
- * status - LOC_GPS_GEOFENCE_OPERATION_SUCCESS
- * LOC_GPS_GEOFENCE_ERROR_ID_UNKNOWN - for invalid id
- * LOC_GPS_GEOFENCE_ERROR_GENERIC for others.
- */
-typedef void (*loc_gps_geofence_resume_callback) (int32_t geofence_id, int32_t status);
-
-typedef struct {
- loc_gps_geofence_transition_callback geofence_transition_callback;
- loc_gps_geofence_status_callback geofence_status_callback;
- loc_gps_geofence_add_callback geofence_add_callback;
- loc_gps_geofence_remove_callback geofence_remove_callback;
- loc_gps_geofence_pause_callback geofence_pause_callback;
- loc_gps_geofence_resume_callback geofence_resume_callback;
- loc_gps_create_thread create_thread_cb;
-} LocGpsGeofenceCallbacks;
-
-/** Extended interface for GPS_Geofencing support */
-typedef struct {
- /** set to sizeof(LocGpsGeofencingInterface) */
- size_t size;
-
- /**
- * Opens the geofence interface and provides the callback routines
- * to the implementation of this interface.
- */
- void (*init)( LocGpsGeofenceCallbacks* callbacks );
-
- /**
- * Add a geofence area. This api currently supports circular geofences.
- * Parameters:
- * geofence_id - The id for the geofence. If a geofence with this id
- * already exists, an error value (LOC_GPS_GEOFENCE_ERROR_ID_EXISTS)
- * should be returned.
- * latitude, longtitude, radius_meters - The lat, long and radius
- * (in meters) for the geofence
- * last_transition - The current state of the geofence. For example, if
- * the system already knows that the user is inside the geofence,
- * this will be set to LOC_GPS_GEOFENCE_ENTERED. In most cases, it
- * will be LOC_GPS_GEOFENCE_UNCERTAIN.
- * monitor_transition - Which transitions to monitor. Bitwise OR of
- * LOC_GPS_GEOFENCE_ENTERED, LOC_GPS_GEOFENCE_EXITED and
- * LOC_GPS_GEOFENCE_UNCERTAIN.
- * notification_responsiveness_ms - Defines the best-effort description
- * of how soon should the callback be called when the transition
- * associated with the Geofence is triggered. For instance, if set
- * to 1000 millseconds with LOC_GPS_GEOFENCE_ENTERED, the callback
- * should be called 1000 milliseconds within entering the geofence.
- * This parameter is defined in milliseconds.
- * NOTE: This is not to be confused with the rate that the GPS is
- * polled at. It is acceptable to dynamically vary the rate of
- * sampling the GPS for power-saving reasons; thus the rate of
- * sampling may be faster or slower than this.
- * unknown_timer_ms - The time limit after which the UNCERTAIN transition
- * should be triggered. This parameter is defined in milliseconds.
- * See above for a detailed explanation.
- */
- void (*add_geofence_area) (int32_t geofence_id, double latitude, double longitude,
- double radius_meters, int last_transition, int monitor_transitions,
- int notification_responsiveness_ms, int unknown_timer_ms);
-
- /**
- * Pause monitoring a particular geofence.
- * Parameters:
- * geofence_id - The id for the geofence.
- */
- void (*pause_geofence) (int32_t geofence_id);
-
- /**
- * Resume monitoring a particular geofence.
- * Parameters:
- * geofence_id - The id for the geofence.
- * monitor_transitions - Which transitions to monitor. Bitwise OR of
- * LOC_GPS_GEOFENCE_ENTERED, LOC_GPS_GEOFENCE_EXITED and
- * LOC_GPS_GEOFENCE_UNCERTAIN.
- * This supersedes the value associated provided in the
- * add_geofence_area call.
- */
- void (*resume_geofence) (int32_t geofence_id, int monitor_transitions);
-
- /**
- * Remove a geofence area. After the function returns, no notifications
- * should be sent.
- * Parameter:
- * geofence_id - The id for the geofence.
- */
- void (*remove_geofence_area) (int32_t geofence_id);
-} LocGpsGeofencingInterface;
-
-/**
- * Legacy struct to represent an estimate of the GPS clock time.
- * Deprecated, to be removed in the next Android release.
- * Use LocGnssClock instead.
- */
-typedef struct {
- /** set to sizeof(LocGpsClock) */
- size_t size;
- LocGpsClockFlags flags;
- int16_t leap_second;
- LocGpsClockType type;
- int64_t time_ns;
- double time_uncertainty_ns;
- int64_t full_bias_ns;
- double bias_ns;
- double bias_uncertainty_ns;
- double drift_nsps;
- double drift_uncertainty_nsps;
-} LocGpsClock;
-
-/**
- * Represents an estimate of the GPS clock time.
- */
-typedef struct {
- /** set to sizeof(LocGnssClock) */
- size_t size;
-
- /**
- * A set of flags indicating the validity of the fields in this data
- * structure.
- */
- LocGnssClockFlags flags;
-
- /**
- * Leap second data.
- * The sign of the value is defined by the following equation:
- * utc_time_ns = time_ns - (full_bias_ns + bias_ns) - leap_second *
- * 1,000,000,000
- *
- * If the data is available 'flags' must contain LOC_GNSS_CLOCK_HAS_LEAP_SECOND.
- */
- int16_t leap_second;
-
- /**
- * The GNSS receiver internal clock value. This is the local hardware clock
- * value.
- *
- * For local hardware clock, this value is expected to be monotonically
- * increasing while the hardware clock remains power on. (For the case of a
- * HW clock that is not continuously on, see the
- * hw_clock_discontinuity_count field). The receiver's estimate of GPS time
- * can be derived by substracting the sum of full_bias_ns and bias_ns (when
- * available) from this value.
- *
- * This GPS time is expected to be the best estimate of current GPS time
- * that GNSS receiver can achieve.
- *
- * Sub-nanosecond accuracy can be provided by means of the 'bias_ns' field.
- * The value contains the 'time uncertainty' in it.
- *
- * This field is mandatory.
- */
- int64_t time_ns;
-
- /**
- * 1-Sigma uncertainty associated with the clock's time in nanoseconds.
- * The uncertainty is represented as an absolute (single sided) value.
- *
- * If the data is available, 'flags' must contain
- * LOC_GNSS_CLOCK_HAS_TIME_UNCERTAINTY. This value is effectively zero (it is
- * the reference local clock, by which all other times and time
- * uncertainties are measured.) (And thus this field can be not provided,
- * per LOC_GNSS_CLOCK_HAS_TIME_UNCERTAINTY flag, or provided & set to 0.)
- */
- double time_uncertainty_ns;
-
- /**
- * The difference between hardware clock ('time' field) inside GPS receiver
- * and the true GPS time since 0000Z, January 6, 1980, in nanoseconds.
- *
- * The sign of the value is defined by the following equation:
- * local estimate of GPS time = time_ns - (full_bias_ns + bias_ns)
- *
- * This value is mandatory if the receiver has estimated GPS time. If the
- * computed time is for a non-GPS constellation, the time offset of that
- * constellation to GPS has to be applied to fill this value. The error
- * estimate for the sum of this and the bias_ns is the bias_uncertainty_ns,
- * and the caller is responsible for using this uncertainty (it can be very
- * large before the GPS time has been solved for.) If the data is available
- * 'flags' must contain LOC_GNSS_CLOCK_HAS_FULL_BIAS.
- */
- int64_t full_bias_ns;
-
- /**
- * Sub-nanosecond bias.
- * The error estimate for the sum of this and the full_bias_ns is the
- * bias_uncertainty_ns
- *
- * If the data is available 'flags' must contain LOC_GNSS_CLOCK_HAS_BIAS. If GPS
- * has computed a position fix. This value is mandatory if the receiver has
- * estimated GPS time.
- */
- double bias_ns;
-
- /**
- * 1-Sigma uncertainty associated with the local estimate of GPS time (clock
- * bias) in nanoseconds. The uncertainty is represented as an absolute
- * (single sided) value.
- *
- * If the data is available 'flags' must contain
- * LOC_GNSS_CLOCK_HAS_BIAS_UNCERTAINTY. This value is mandatory if the receiver
- * has estimated GPS time.
- */
- double bias_uncertainty_ns;
-
- /**
- * The clock's drift in nanoseconds (per second).
- *
- * A positive value means that the frequency is higher than the nominal
- * frequency, and that the (full_bias_ns + bias_ns) is growing more positive
- * over time.
- *
- * The value contains the 'drift uncertainty' in it.
- * If the data is available 'flags' must contain LOC_GNSS_CLOCK_HAS_DRIFT.
- *
- * This value is mandatory if the receiver has estimated GNSS time
- */
- double drift_nsps;
-
- /**
- * 1-Sigma uncertainty associated with the clock's drift in nanoseconds (per second).
- * The uncertainty is represented as an absolute (single sided) value.
- *
- * If the data is available 'flags' must contain
- * LOC_GNSS_CLOCK_HAS_DRIFT_UNCERTAINTY. If GPS has computed a position fix this
- * field is mandatory and must be populated.
- */
- double drift_uncertainty_nsps;
-
- /**
- * When there are any discontinuities in the HW clock, this field is
- * mandatory.
- *
- * A "discontinuity" is meant to cover the case of a switch from one source
- * of clock to another. A single free-running crystal oscillator (XO)
- * should generally not have any discontinuities, and this can be set and
- * left at 0.
- *
- * If, however, the time_ns value (HW clock) is derived from a composite of
- * sources, that is not as smooth as a typical XO, or is otherwise stopped &
- * restarted, then this value shall be incremented each time a discontinuity
- * occurs. (E.g. this value may start at zero at device boot-up and
- * increment each time there is a change in clock continuity. In the
- * unlikely event that this value reaches full scale, rollover (not
- * clamping) is required, such that this value continues to change, during
- * subsequent discontinuity events.)
- *
- * While this number stays the same, between LocGnssClock reports, it can be
- * safely assumed that the time_ns value has been running continuously, e.g.
- * derived from a single, high quality clock (XO like, or better, that's
- * typically used during continuous GNSS signal sampling.)
- *
- * It is expected, esp. during periods where there are few GNSS signals
- * available, that the HW clock be discontinuity-free as long as possible,
- * as this avoids the need to use (waste) a GNSS measurement to fully
- * re-solve for the GPS clock bias and drift, when using the accompanying
- * measurements, from consecutive LocGnssData reports.
- */
- uint32_t hw_clock_discontinuity_count;
-
-} LocGnssClock;
-
-/**
- * Legacy struct to represent a GPS Measurement, it contains raw and computed
- * information.
- * Deprecated, to be removed in the next Android release.
- * Use LocGnssMeasurement instead.
- */
-typedef struct {
- /** set to sizeof(LocGpsMeasurement) */
- size_t size;
- LocGpsMeasurementFlags flags;
- int8_t prn;
- double time_offset_ns;
- LocGpsMeasurementState state;
- int64_t received_gps_tow_ns;
- int64_t received_gps_tow_uncertainty_ns;
- double c_n0_dbhz;
- double pseudorange_rate_mps;
- double pseudorange_rate_uncertainty_mps;
- LocGpsAccumulatedDeltaRangeState accumulated_delta_range_state;
- double accumulated_delta_range_m;
- double accumulated_delta_range_uncertainty_m;
- double pseudorange_m;
- double pseudorange_uncertainty_m;
- double code_phase_chips;
- double code_phase_uncertainty_chips;
- float carrier_frequency_hz;
- int64_t carrier_cycles;
- double carrier_phase;
- double carrier_phase_uncertainty;
- LocGpsLossOfLock loss_of_lock;
- int32_t bit_number;
- int16_t time_from_last_bit_ms;
- double doppler_shift_hz;
- double doppler_shift_uncertainty_hz;
- LocGpsMultipathIndicator multipath_indicator;
- double snr_db;
- double elevation_deg;
- double elevation_uncertainty_deg;
- double azimuth_deg;
- double azimuth_uncertainty_deg;
- bool used_in_fix;
-} LocGpsMeasurement;
-
-/**
- * Represents a GNSS Measurement, it contains raw and computed information.
- *
- * Independence - All signal measurement information (e.g. sv_time,
- * pseudorange_rate, multipath_indicator) reported in this struct should be
- * based on GNSS signal measurements only. You may not synthesize measurements
- * by calculating or reporting expected measurements based on known or estimated
- * position, velocity, or time.
- */
-typedef struct {
- /** set to sizeof(LocGnssMeasurement) */
- size_t size;
-
- /** A set of flags indicating the validity of the fields in this data structure. */
- LocGnssMeasurementFlags flags;
-
- /**
- * Satellite vehicle ID number, as defined in LocGnssSvInfo::svid
- * This is a mandatory value.
- */
- int16_t svid;
-
- /**
- * Defines the constellation of the given SV. Value should be one of those
- * LOC_GNSS_CONSTELLATION_* constants
- */
- LocGnssConstellationType constellation;
-
- /**
- * Time offset at which the measurement was taken in nanoseconds.
- * The reference receiver's time is specified by LocGpsData::clock::time_ns and should be
- * interpreted in the same way as indicated by LocGpsClock::type.
- *
- * The sign of time_offset_ns is given by the following equation:
- * measurement time = LocGpsClock::time_ns + time_offset_ns
- *
- * It provides an individual time-stamp for the measurement, and allows sub-nanosecond accuracy.
- * This is a mandatory value.
- */
- double time_offset_ns;
-
- /**
- * Per satellite sync state. It represents the current sync state for the associated satellite.
- * Based on the sync state, the 'received GPS tow' field should be interpreted accordingly.
- *
- * This is a mandatory value.
- */
- LocGnssMeasurementState state;
-
- /**
- * The received GNSS Time-of-Week at the measurement time, in nanoseconds.
- * Ensure that this field is independent (see comment at top of
- * LocGnssMeasurement struct.)
- *
- * For GPS & QZSS, this is:
- * Received GPS Time-of-Week at the measurement time, in nanoseconds.
- * The value is relative to the beginning of the current GPS week.
- *
- * Given the highest sync state that can be achieved, per each satellite, valid range
- * for this field can be:
- * Searching : [ 0 ] : LOC_GNSS_MEASUREMENT_STATE_UNKNOWN
- * C/A code lock : [ 0 1ms ] : LOC_GNSS_MEASUREMENT_STATE_CODE_LOCK is set
- * Bit sync : [ 0 20ms ] : LOC_GNSS_MEASUREMENT_STATE_BIT_SYNC is set
- * Subframe sync : [ 0 6s ] : LOC_GNSS_MEASUREMENT_STATE_SUBFRAME_SYNC is set
- * TOW decoded : [ 0 1week ] : LOC_GNSS_MEASUREMENT_STATE_TOW_DECODED is set
- *
- * Note well: if there is any ambiguity in integer millisecond,
- * LOC_GNSS_MEASUREMENT_STATE_MSEC_AMBIGUOUS should be set accordingly, in the 'state' field.
- *
- * This value must be populated if 'state' != LOC_GNSS_MEASUREMENT_STATE_UNKNOWN.
- *
- * For Glonass, this is:
- * Received Glonass time of day, at the measurement time in nanoseconds.
- *
- * Given the highest sync state that can be achieved, per each satellite, valid range for
- * this field can be:
- * Searching : [ 0 ] : LOC_GNSS_MEASUREMENT_STATE_UNKNOWN
- * C/A code lock : [ 0 1ms ] : LOC_GNSS_MEASUREMENT_STATE_CODE_LOCK is set
- * Symbol sync : [ 0 10ms ] : LOC_GNSS_MEASUREMENT_STATE_SYMBOL_SYNC is set
- * Bit sync : [ 0 20ms ] : LOC_GNSS_MEASUREMENT_STATE_BIT_SYNC is set
- * String sync : [ 0 2s ] : LOC_GNSS_MEASUREMENT_STATE_GLO_STRING_SYNC is set
- * Time of day : [ 0 1day ] : LOC_GNSS_MEASUREMENT_STATE_GLO_TOD_DECODED is set
- *
- * For Beidou, this is:
- * Received Beidou time of week, at the measurement time in nanoseconds.
- *
- * Given the highest sync state that can be achieved, per each satellite, valid range for
- * this field can be:
- * Searching : [ 0 ] : LOC_GNSS_MEASUREMENT_STATE_UNKNOWN
- * C/A code lock: [ 0 1ms ] : LOC_GNSS_MEASUREMENT_STATE_CODE_LOCK is set
- * Bit sync (D2): [ 0 2ms ] : LOC_GNSS_MEASUREMENT_STATE_BDS_D2_BIT_SYNC is set
- * Bit sync (D1): [ 0 20ms ] : LOC_GNSS_MEASUREMENT_STATE_BIT_SYNC is set
- * Subframe (D2): [ 0 0.6s ] : LOC_GNSS_MEASUREMENT_STATE_BDS_D2_SUBFRAME_SYNC is set
- * Subframe (D1): [ 0 6s ] : LOC_GNSS_MEASUREMENT_STATE_SUBFRAME_SYNC is set
- * Time of week : [ 0 1week ] : LOC_GNSS_MEASUREMENT_STATE_TOW_DECODED is set
- *
- * For Galileo, this is:
- * Received Galileo time of week, at the measurement time in nanoseconds.
- *
- * E1BC code lock : [ 0 4ms ] : LOC_GNSS_MEASUREMENT_STATE_GAL_E1BC_CODE_LOCK is set
- * E1C 2nd code lock: [ 0 100ms ] :
- * LOC_GNSS_MEASUREMENT_STATE_GAL_E1C_2ND_CODE_LOCK is set
- *
- * E1B page : [ 0 2s ] : LOC_GNSS_MEASUREMENT_STATE_GAL_E1B_PAGE_SYNC is set
- * Time of week: [ 0 1week ] : LOC_GNSS_MEASUREMENT_STATE_TOW_DECODED is set
- *
- * For SBAS, this is:
- * Received SBAS time, at the measurement time in nanoseconds.
- *
- * Given the highest sync state that can be achieved, per each satellite,
- * valid range for this field can be:
- * Searching : [ 0 ] : LOC_GNSS_MEASUREMENT_STATE_UNKNOWN
- * C/A code lock: [ 0 1ms ] : LOC_GNSS_MEASUREMENT_STATE_CODE_LOCK is set
- * Symbol sync : [ 0 2ms ] : LOC_GNSS_MEASUREMENT_STATE_SYMBOL_SYNC is set
- * Message : [ 0 1s ] : LOC_GNSS_MEASUREMENT_STATE_SBAS_SYNC is set
- */
- int64_t received_sv_time_in_ns;
-
- /**
- * 1-Sigma uncertainty of the Received GPS Time-of-Week in nanoseconds.
- *
- * This value must be populated if 'state' != LOC_GPS_MEASUREMENT_STATE_UNKNOWN.
- */
- int64_t received_sv_time_uncertainty_in_ns;
-
- /**
- * Carrier-to-noise density in dB-Hz, typically in the range [0, 63].
- * It contains the measured C/N0 value for the signal at the antenna port.
- *
- * This is a mandatory value.
- */
- double c_n0_dbhz;
-
- /**
- * Pseudorange rate at the timestamp in m/s. The correction of a given
- * Pseudorange Rate value includes corrections for receiver and satellite
- * clock frequency errors. Ensure that this field is independent (see
- * comment at top of LocGnssMeasurement struct.)
- *
- * It is mandatory to provide the 'uncorrected' 'pseudorange rate', and provide LocGpsClock's
- * 'drift' field as well (When providing the uncorrected pseudorange rate, do not apply the
- * corrections described above.)
- *
- * The value includes the 'pseudorange rate uncertainty' in it.
- * A positive 'uncorrected' value indicates that the SV is moving away from the receiver.
- *
- * The sign of the 'uncorrected' 'pseudorange rate' and its relation to the sign of 'doppler
- * shift' is given by the equation:
- * pseudorange rate = -k * doppler shift (where k is a constant)
- *
- * This should be the most accurate pseudorange rate available, based on
- * fresh signal measurements from this channel.
- *
- * It is mandatory that this value be provided at typical carrier phase PRR
- * quality (few cm/sec per second of uncertainty, or better) - when signals
- * are sufficiently strong & stable, e.g. signals from a GPS simulator at >=
- * 35 dB-Hz.
- */
- double pseudorange_rate_mps;
-
- /**
- * 1-Sigma uncertainty of the pseudorange_rate_mps.
- * The uncertainty is represented as an absolute (single sided) value.
- *
- * This is a mandatory value.
- */
- double pseudorange_rate_uncertainty_mps;
-
- /**
- * Accumulated delta range's state. It indicates whether ADR is reset or there is a cycle slip
- * (indicating loss of lock).
- *
- * This is a mandatory value.
- */
- LocGnssAccumulatedDeltaRangeState accumulated_delta_range_state;
-
- /**
- * Accumulated delta range since the last channel reset in meters.
- * A positive value indicates that the SV is moving away from the receiver.
- *
- * The sign of the 'accumulated delta range' and its relation to the sign of 'carrier phase'
- * is given by the equation:
- * accumulated delta range = -k * carrier phase (where k is a constant)
- *
- * This value must be populated if 'accumulated delta range state' != LOC_GPS_ADR_STATE_UNKNOWN.
- * However, it is expected that the data is only accurate when:
- * 'accumulated delta range state' == LOC_GPS_ADR_STATE_VALID.
- */
- double accumulated_delta_range_m;
-
- /**
- * 1-Sigma uncertainty of the accumulated delta range in meters.
- * This value must be populated if 'accumulated delta range state' != LOC_GPS_ADR_STATE_UNKNOWN.
- */
- double accumulated_delta_range_uncertainty_m;
-
- /**
- * Carrier frequency at which codes and messages are modulated, it can be L1 or L2.
- * If the field is not set, the carrier frequency is assumed to be L1.
- *
- * If the data is available, 'flags' must contain
- * LOC_GNSS_MEASUREMENT_HAS_CARRIER_FREQUENCY.
- */
- float carrier_frequency_hz;
-
- /**
- * The number of full carrier cycles between the satellite and the receiver.
- * The reference frequency is given by the field 'carrier_frequency_hz'.
- * Indications of possible cycle slips and resets in the accumulation of
- * this value can be inferred from the accumulated_delta_range_state flags.
- *
- * If the data is available, 'flags' must contain
- * LOC_GNSS_MEASUREMENT_HAS_CARRIER_CYCLES.
- */
- int64_t carrier_cycles;
-
- /**
- * The RF phase detected by the receiver, in the range [0.0, 1.0].
- * This is usually the fractional part of the complete carrier phase measurement.
- *
- * The reference frequency is given by the field 'carrier_frequency_hz'.
- * The value contains the 'carrier-phase uncertainty' in it.
- *
- * If the data is available, 'flags' must contain
- * LOC_GNSS_MEASUREMENT_HAS_CARRIER_PHASE.
- */
- double carrier_phase;
-
- /**
- * 1-Sigma uncertainty of the carrier-phase.
- * If the data is available, 'flags' must contain
- * LOC_GNSS_MEASUREMENT_HAS_CARRIER_PHASE_UNCERTAINTY.
- */
- double carrier_phase_uncertainty;
-
- /**
- * An enumeration that indicates the 'multipath' state of the event.
- *
- * The multipath Indicator is intended to report the presence of overlapping
- * signals that manifest as distorted correlation peaks.
- *
- * - if there is a distorted correlation peak shape, report that multipath
- * is LOC_GNSS_MULTIPATH_INDICATOR_PRESENT.
- * - if there is not a distorted correlation peak shape, report
- * LOC_GNSS_MULTIPATH_INDICATOR_NOT_PRESENT
- * - if signals are too weak to discern this information, report
- * LOC_GNSS_MULTIPATH_INDICATOR_UNKNOWN
- *
- * Example: when doing the standardized overlapping Multipath Performance
- * test (3GPP TS 34.171) the Multipath indicator should report
- * LOC_GNSS_MULTIPATH_INDICATOR_PRESENT for those signals that are tracked, and
- * contain multipath, and LOC_GNSS_MULTIPATH_INDICATOR_NOT_PRESENT for those
- * signals that are tracked and do not contain multipath.
- */
- LocGnssMultipathIndicator multipath_indicator;
-
- /**
- * Signal-to-noise ratio at correlator output in dB.
- * If the data is available, 'flags' must contain LOC_GNSS_MEASUREMENT_HAS_SNR.
- * This is the power ratio of the "correlation peak height above the
- * observed noise floor" to "the noise RMS".
- */
- double snr_db;
-} LocGnssMeasurement;
-
-/**
- * Legacy struct to represents a reading of GPS measurements.
- * Deprecated, to be removed in the next Android release.
- * Use LocGnssData instead.
- */
-typedef struct {
- /** set to sizeof(LocGpsData) */
- size_t size;
- size_t measurement_count;
- LocGpsMeasurement measurements[LOC_GPS_MAX_MEASUREMENT];
-
- /** The GPS clock time reading. */
- LocGpsClock clock;
-} LocGpsData;
-
-/**
- * Represents a reading of GNSS measurements. For devices where LocGnssSystemInfo's
- * year_of_hw is set to 2016+, it is mandatory that these be provided, on
- * request, when the GNSS receiver is searching/tracking signals.
- *
- * - Reporting of GPS constellation measurements is mandatory.
- * - Reporting of all tracked constellations are encouraged.
- */
-typedef struct {
- /** set to sizeof(LocGnssData) */
- size_t size;
-
- /** Number of measurements. */
- size_t measurement_count;
-
- /** The array of measurements. */
- LocGnssMeasurement measurements[LOC_GNSS_MAX_MEASUREMENT];
-
- /** The GPS clock time reading. */
- LocGnssClock clock;
-} LocGnssData;
-
-/**
- * The legacy callback for to report measurements from the HAL.
- *
- * This callback is deprecated, and will be removed in the next release. Use
- * loc_gnss_measurement_callback() instead.
- *
- * Parameters:
- * data - A data structure containing the measurements.
- */
-typedef void (*loc_gps_measurement_callback) (LocGpsData* data);
-
-/**
- * The callback for to report measurements from the HAL.
- *
- * Parameters:
- * data - A data structure containing the measurements.
- */
-typedef void (*loc_gnss_measurement_callback) (LocGnssData* data);
-
-typedef struct {
- /** set to sizeof(LocGpsMeasurementCallbacks) */
- size_t size;
- loc_gps_measurement_callback measurement_callback;
- loc_gnss_measurement_callback loc_gnss_measurement_callback;
-} LocGpsMeasurementCallbacks;
-
-#define LOC_GPS_MEASUREMENT_OPERATION_SUCCESS 0
-#define LOC_GPS_MEASUREMENT_ERROR_ALREADY_INIT -100
-#define LOC_GPS_MEASUREMENT_ERROR_GENERIC -101
-
-/**
- * Extended interface for GPS Measurements support.
- */
-typedef struct {
- /** Set to sizeof(LocGpsMeasurementInterface) */
- size_t size;
-
- /**
- * Initializes the interface and registers the callback routines with the HAL.
- * After a successful call to 'init' the HAL must begin to provide updates at its own phase.
- *
- * Status:
- * LOC_GPS_MEASUREMENT_OPERATION_SUCCESS
- * LOC_GPS_MEASUREMENT_ERROR_ALREADY_INIT - if a callback has already been registered without a
- * corresponding call to 'close'
- * LOC_GPS_MEASUREMENT_ERROR_GENERIC - if any other error occurred, it is expected that the HAL
- * will not generate any updates upon returning this error code.
- */
- int (*init) (LocGpsMeasurementCallbacks* callbacks);
-
- /**
- * Stops updates from the HAL, and unregisters the callback routines.
- * After a call to stop, the previously registered callbacks must be considered invalid by the
- * HAL.
- * If stop is invoked without a previous 'init', this function should perform no work.
- */
- void (*close) ();
-
-} LocGpsMeasurementInterface;
-
-#if 0
-/**
- * Legacy struct to represents a GPS navigation message (or a fragment of it).
- * Deprecated, to be removed in the next Android release.
- * Use GnssNavigationMessage instead.
- */
-typedef struct {
- /** set to sizeof(GpsNavigationMessage) */
- size_t size;
- int8_t prn;
- GpsNavigationMessageType type;
- NavigationMessageStatus status;
- int16_t message_id;
- int16_t submessage_id;
- size_t data_length;
- uint8_t* data;
-} GpsNavigationMessage;
-
-/** Represents a GPS navigation message (or a fragment of it). */
-typedef struct {
- /** set to sizeof(GnssNavigationMessage) */
- size_t size;
-
- /**
- * Satellite vehicle ID number, as defined in LocGnssSvInfo::svid
- * This is a mandatory value.
- */
- int16_t svid;
-
- /**
- * The type of message contained in the structure.
- * This is a mandatory value.
- */
- GnssNavigationMessageType type;
-
- /**
- * The status of the received navigation message.
- * No need to send any navigation message that contains words with parity error and cannot be
- * corrected.
- */
- NavigationMessageStatus status;
-
- /**
- * Message identifier. It provides an index so the complete Navigation
- * Message can be assembled.
- *
- * - For GPS L1 C/A subframe 4 and 5, this value corresponds to the 'frame
- * id' of the navigation message, in the range of 1-25 (Subframe 1, 2, 3
- * does not contain a 'frame id' and this value can be set to -1.)
- *
- * - For Glonass L1 C/A, this refers to the frame ID, in the range of 1-5.
- *
- * - For BeiDou D1, this refers to the frame number in the range of 1-24
- *
- * - For Beidou D2, this refers to the frame number, in the range of 1-120
- *
- * - For Galileo F/NAV nominal frame structure, this refers to the subframe
- * number, in the range of 1-12
- *
- * - For Galileo I/NAV nominal frame structure, this refers to the subframe
- * number in the range of 1-24
- */
- int16_t message_id;
-
- /**
- * Sub-message identifier. If required by the message 'type', this value
- * contains a sub-index within the current message (or frame) that is being
- * transmitted.
- *
- * - For GPS L1 C/A, BeiDou D1 & BeiDou D2, the submessage id corresponds to
- * the subframe number of the navigation message, in the range of 1-5.
- *
- * - For Glonass L1 C/A, this refers to the String number, in the range from
- * 1-15
- *
- * - For Galileo F/NAV, this refers to the page type in the range 1-6
- *
- * - For Galileo I/NAV, this refers to the word type in the range 1-10+
- */
- int16_t submessage_id;
-
- /**
- * The length of the data (in bytes) contained in the current message.
- * If this value is different from zero, 'data' must point to an array of the same size.
- * e.g. for L1 C/A the size of the sub-frame will be 40 bytes (10 words, 30 bits/word).
- *
- * This is a mandatory value.
- */
- size_t data_length;
-
- /**
- * The data of the reported GPS message. The bytes (or words) specified
- * using big endian format (MSB first).
- *
- * - For GPS L1 C/A, Beidou D1 & Beidou D2, each subframe contains 10 30-bit
- * words. Each word (30 bits) should be fit into the last 30 bits in a
- * 4-byte word (skip B31 and B32), with MSB first, for a total of 40
- * bytes, covering a time period of 6, 6, and 0.6 seconds, respectively.
- *
- * - For Glonass L1 C/A, each string contains 85 data bits, including the
- * checksum. These bits should be fit into 11 bytes, with MSB first (skip
- * B86-B88), covering a time period of 2 seconds.
- *
- * - For Galileo F/NAV, each word consists of 238-bit (sync & tail symbols
- * excluded). Each word should be fit into 30-bytes, with MSB first (skip
- * B239, B240), covering a time period of 10 seconds.
- *
- * - For Galileo I/NAV, each page contains 2 page parts, even and odd, with
- * a total of 2x114 = 228 bits, (sync & tail excluded) that should be fit
- * into 29 bytes, with MSB first (skip B229-B232).
- */
- uint8_t* data;
-
-} GnssNavigationMessage;
-
-/**
- * The legacy callback to report an available fragment of a GPS navigation
- * messages from the HAL.
- *
- * This callback is deprecated, and will be removed in the next release. Use
- * gnss_navigation_message_callback() instead.
- *
- * Parameters:
- * message - The GPS navigation submessage/subframe representation.
- */
-typedef void (*gps_navigation_message_callback) (GpsNavigationMessage* message);
-
-/**
- * The callback to report an available fragment of a GPS navigation messages from the HAL.
- *
- * Parameters:
- * message - The GPS navigation submessage/subframe representation.
- */
-typedef void (*gnss_navigation_message_callback) (GnssNavigationMessage* message);
-
-typedef struct {
- /** set to sizeof(GpsNavigationMessageCallbacks) */
- size_t size;
- gps_navigation_message_callback navigation_message_callback;
- gnss_navigation_message_callback gnss_navigation_message_callback;
-} GpsNavigationMessageCallbacks;
-
-#define GPS_NAVIGATION_MESSAGE_OPERATION_SUCCESS 0
-#define GPS_NAVIGATION_MESSAGE_ERROR_ALREADY_INIT -100
-#define GPS_NAVIGATION_MESSAGE_ERROR_GENERIC -101
-
-/**
- * Extended interface for GPS navigation message reporting support.
- */
-typedef struct {
- /** Set to sizeof(GpsNavigationMessageInterface) */
- size_t size;
-
- /**
- * Initializes the interface and registers the callback routines with the HAL.
- * After a successful call to 'init' the HAL must begin to provide updates as they become
- * available.
- *
- * Status:
- * GPS_NAVIGATION_MESSAGE_OPERATION_SUCCESS
- * GPS_NAVIGATION_MESSAGE_ERROR_ALREADY_INIT - if a callback has already been registered
- * without a corresponding call to 'close'.
- * GPS_NAVIGATION_MESSAGE_ERROR_GENERIC - if any other error occurred, it is expected that
- * the HAL will not generate any updates upon returning this error code.
- */
- int (*init) (GpsNavigationMessageCallbacks* callbacks);
-
- /**
- * Stops updates from the HAL, and unregisters the callback routines.
- * After a call to stop, the previously registered callbacks must be considered invalid by the
- * HAL.
- * If stop is invoked without a previous 'init', this function should perform no work.
- */
- void (*close) ();
-
-} GpsNavigationMessageInterface;
-#endif
-
-/**
- * Interface for passing GNSS configuration contents from platform to HAL.
- */
-typedef struct {
- /** Set to sizeof(LocGnssConfigurationInterface) */
- size_t size;
-
- /**
- * Deliver GNSS configuration contents to HAL.
- * Parameters:
- * config_data - a pointer to a char array which holds what usually is expected from
- file(/vendor/etc/gps.conf), i.e., a sequence of UTF8 strings separated by '\n'.
- * length - total number of UTF8 characters in configuraiton data.
- *
- * IMPORTANT:
- * GPS HAL should expect this function can be called multiple times. And it may be
- * called even when GpsLocationProvider is already constructed and enabled. GPS HAL
- * should maintain the existing requests for various callback regardless the change
- * in configuration data.
- */
- void (*configuration_update) (const char* config_data, int32_t length);
-} LocGnssConfigurationInterface;
-
-__END_DECLS
-
-#endif /* LOC_GPS_H */
-
diff --git a/gps/utils/loc_log.cpp b/gps/utils/loc_log.cpp
deleted file mode 100644
index 50d9e4d..0000000
--- a/gps/utils/loc_log.cpp
+++ /dev/null
@@ -1,239 +0,0 @@
-/* Copyright (c) 2011-2012, 2015, 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.
- *
- */
-
-#define LOG_NDEBUG 0
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-#include <time.h>
-#include "log_util.h"
-#include "loc_log.h"
-#include "msg_q.h"
-#include <loc_pla.h>
-
-#define BUFFER_SIZE 120
-
-// Logging Improvements
-const char *loc_logger_boolStr[]={"False","True"};
-const char VOID_RET[] = "None";
-const char FROM_AFW[] = "===>";
-const char TO_MODEM[] = "--->";
-const char FROM_MODEM[] = "<---";
-const char TO_AFW[] = "<===";
-const char EXIT_TAG[] = "Exiting";
-const char ENTRY_TAG[] = "Entering";
-const char EXIT_ERROR_TAG[] = "Exiting with error";
-
-/* Logging Mechanism */
-loc_logger_s_type loc_logger;
-
-/* Get names from value */
-const char* loc_get_name_from_mask(const loc_name_val_s_type table[], size_t table_size, long mask)
-{
- size_t i;
- for (i = 0; i < table_size; i++)
- {
- if (table[i].val & (long) mask)
- {
- return table[i].name;
- }
- }
- return UNKNOWN_STR;
-}
-
-/* Get names from value */
-const char* loc_get_name_from_val(const loc_name_val_s_type table[], size_t table_size, long value)
-{
- size_t i;
- for (i = 0; i < table_size; i++)
- {
- if (table[i].val == (long) value)
- {
- return table[i].name;
- }
- }
- return UNKNOWN_STR;
-}
-
-static const loc_name_val_s_type loc_msg_q_status[] =
-{
- NAME_VAL( eMSG_Q_SUCCESS ),
- NAME_VAL( eMSG_Q_FAILURE_GENERAL ),
- NAME_VAL( eMSG_Q_INVALID_PARAMETER ),
- NAME_VAL( eMSG_Q_INVALID_HANDLE ),
- NAME_VAL( eMSG_Q_UNAVAILABLE_RESOURCE ),
- NAME_VAL( eMSG_Q_INSUFFICIENT_BUFFER )
-};
-static const size_t loc_msg_q_status_num = LOC_TABLE_SIZE(loc_msg_q_status);
-
-/* Find msg_q status name */
-const char* loc_get_msg_q_status(int status)
-{
- return loc_get_name_from_val(loc_msg_q_status, loc_msg_q_status_num, (long) status);
-}
-
-const char* log_succ_fail_string(int is_succ)
-{
- return is_succ? "successful" : "failed";
-}
-
-//Target names
-static const loc_name_val_s_type target_name[] =
-{
- NAME_VAL(GNSS_NONE),
- NAME_VAL(GNSS_MSM),
- NAME_VAL(GNSS_GSS),
- NAME_VAL(GNSS_MDM),
- NAME_VAL(GNSS_AUTO),
- NAME_VAL(GNSS_UNKNOWN)
-};
-
-static const size_t target_name_num = LOC_TABLE_SIZE(target_name);
-
-/*===========================================================================
-
-FUNCTION loc_get_target_name
-
-DESCRIPTION
- Returns pointer to a string that contains name of the target
-
- XX:XX:XX.000\0
-
-RETURN VALUE
- The target name string
-
-===========================================================================*/
-const char *loc_get_target_name(unsigned int target)
-{
- int index = 0;
- static char ret[BUFFER_SIZE];
-
- index = getTargetGnssType(target);
- if( index < 0 || (unsigned)index >= target_name_num )
- index = target_name_num - 1;
-
- if( (target & HAS_SSC) == HAS_SSC ) {
- snprintf(ret, sizeof(ret), " %s with SSC",
- loc_get_name_from_val(target_name, target_name_num, (long)index) );
- }
- else {
- snprintf(ret, sizeof(ret), " %s without SSC",
- loc_get_name_from_val(target_name, target_name_num, (long)index) );
- }
- return ret;
-}
-
-
-/*===========================================================================
-
-FUNCTION loc_get_time
-
-DESCRIPTION
- Logs a callback event header.
- The pointer time_string should point to a buffer of at least 13 bytes:
-
- XX:XX:XX.000\0
-
-RETURN VALUE
- The time string
-
-===========================================================================*/
-char *loc_get_time(char *time_string, size_t buf_size)
-{
- struct timeval now; /* sec and usec */
- struct tm now_tm; /* broken-down time */
- char hms_string[80]; /* HH:MM:SS */
-
- gettimeofday(&now, NULL);
- localtime_r(&now.tv_sec, &now_tm);
-
- strftime(hms_string, sizeof hms_string, "%H:%M:%S", &now_tm);
- snprintf(time_string, buf_size, "%s.%03d", hms_string, (int) (now.tv_usec / 1000));
-
- return time_string;
-}
-
-
-/*===========================================================================
-FUNCTION loc_logger_init
-
-DESCRIPTION
- Initializes the state of DEBUG_LEVEL and TIMESTAMP
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- None
-
-SIDE EFFECTS
- N/A
-===========================================================================*/
-void loc_logger_init(unsigned long debug, unsigned long timestamp)
-{
- loc_logger.DEBUG_LEVEL = debug;
-#ifdef TARGET_BUILD_VARIANT_USER
- // force user builds to 2 or less
- if (loc_logger.DEBUG_LEVEL > 2) {
- loc_logger.DEBUG_LEVEL = 2;
- }
-#endif
- loc_logger.TIMESTAMP = timestamp;
-}
-
-
-/*===========================================================================
-FUNCTION get_timestamp
-
-DESCRIPTION
- Generates a timestamp using the current system time
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Char pointer to the parameter str
-
-SIDE EFFECTS
- N/A
-===========================================================================*/
-char * get_timestamp(char *str, unsigned long buf_size)
-{
- struct timeval tv;
- struct timezone tz;
- int hh, mm, ss;
- gettimeofday(&tv, &tz);
- hh = tv.tv_sec/3600%24;
- mm = (tv.tv_sec%3600)/60;
- ss = tv.tv_sec%60;
- snprintf(str, buf_size, "%02d:%02d:%02d.%06ld", hh, mm, ss, tv.tv_usec);
- return str;
-}
-
diff --git a/gps/utils/loc_log.h b/gps/utils/loc_log.h
deleted file mode 100644
index be492b1..0000000
--- a/gps/utils/loc_log.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (c) 2011-2012, 2015 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 LOC_LOG_H
-#define LOC_LOG_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include <ctype.h>
-#include <stdlib.h>
-#include "loc_target.h"
-
-typedef struct
-{
- const char *name;
- long val;
-} loc_name_val_s_type;
-
-#define NAME_VAL(x) {"" #x "", x }
-
-#define UNKNOWN_STR "UNKNOWN"
-
-#define CHECK_MASK(type, value, mask_var, mask) \
- (((mask_var) & (mask)) ? (type) (value) : (type) (-1))
-
-#define LOC_TABLE_SIZE(table) (sizeof(table)/sizeof((table)[0]))
-
-/* Get names from value */
-const char* loc_get_name_from_mask(const loc_name_val_s_type table[], size_t table_size, long mask);
-const char* loc_get_name_from_val(const loc_name_val_s_type table[], size_t table_size, long value);
-const char* loc_get_msg_q_status(int status);
-const char* loc_get_target_name(unsigned int target);
-
-extern const char* log_succ_fail_string(int is_succ);
-
-extern char *loc_get_time(char *time_string, size_t buf_size);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LOC_LOG_H */
diff --git a/gps/utils/loc_misc_utils.cpp b/gps/utils/loc_misc_utils.cpp
deleted file mode 100644
index b7c8406..0000000
--- a/gps/utils/loc_misc_utils.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Copyright (c) 2014, 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.
- *
- */
-#define LOG_NDEBUG 0
-#define LOG_TAG "LocSvc_misc_utils"
-#include <stdio.h>
-#include <string.h>
-#include <log_util.h>
-#include <loc_misc_utils.h>
-#include <ctype.h>
-
-
-int loc_util_split_string(char *raw_string, char **split_strings_ptr,
- int max_num_substrings, char delimiter)
-{
- int raw_string_index=0;
- int num_split_strings=0;
- unsigned char end_string=0;
- int raw_string_length=0;
-
- if(!raw_string || !split_strings_ptr) {
- LOC_LOGE("%s:%d]: NULL parameters", __func__, __LINE__);
- num_split_strings = -1;
- goto err;
- }
- LOC_LOGD("%s:%d]: raw string: %s\n", __func__, __LINE__, raw_string);
- raw_string_length = strlen(raw_string) + 1;
- split_strings_ptr[num_split_strings] = &raw_string[raw_string_index];
- for(raw_string_index=0; raw_string_index < raw_string_length; raw_string_index++) {
- if(raw_string[raw_string_index] == '\0')
- end_string=1;
- if((raw_string[raw_string_index] == delimiter) || end_string) {
- raw_string[raw_string_index] = '\0';
- LOC_LOGD("%s:%d]: split string: %s\n",
- __func__, __LINE__, split_strings_ptr[num_split_strings]);
- num_split_strings++;
- if(((raw_string_index + 1) < raw_string_length) &&
- (num_split_strings < max_num_substrings)) {
- split_strings_ptr[num_split_strings] = &raw_string[raw_string_index+1];
- }
- else {
- break;
- }
- }
- if(end_string)
- break;
- }
-err:
- LOC_LOGD("%s:%d]: num_split_strings: %d\n", __func__, __LINE__, num_split_strings);
- return num_split_strings;
-}
-
-void loc_util_trim_space(char *org_string)
-{
- char *scan_ptr, *write_ptr;
- char *first_nonspace = NULL, *last_nonspace = NULL;
-
- if(org_string == NULL) {
- LOC_LOGE("%s:%d]: NULL parameter", __func__, __LINE__);
- goto err;
- }
-
- scan_ptr = write_ptr = org_string;
-
- while (*scan_ptr) {
- //Find the first non-space character
- if ( !isspace(*scan_ptr) && first_nonspace == NULL) {
- first_nonspace = scan_ptr;
- }
- //Once the first non-space character is found in the
- //above check, keep shifting the characters to the left
- //to replace the spaces
- if (first_nonspace != NULL) {
- *(write_ptr++) = *scan_ptr;
- //Keep track of which was the last non-space character
- //encountered
- //last_nonspace will not be updated in the case where
- //the string ends with spaces
- if ( !isspace(*scan_ptr)) {
- last_nonspace = write_ptr;
- }
- }
- scan_ptr++;
- }
- //Add NULL terminator after the last non-space character
- if (last_nonspace) { *last_nonspace = '\0'; }
-err:
- return;
-}
diff --git a/gps/utils/loc_misc_utils.h b/gps/utils/loc_misc_utils.h
deleted file mode 100644
index 7d66d84..0000000
--- a/gps/utils/loc_misc_utils.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Copyright (c) 2014, 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 _LOC_MISC_UTILS_H_
-#define _LOC_MISC_UTILS_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*===========================================================================
-FUNCTION loc_split_string
-
-DESCRIPTION:
- This function is used to split a delimiter separated string into
- sub-strings. This function does not allocate new memory to store the split
- strings. Instead, it places '\0' in places of delimiters and assings the
- starting address of the substring within the raw string as the string address
- The input raw_string no longer remains to be a collection of sub-strings
- after this function is executed.
- Please make a copy of the input string before calling this function if
- necessary
-
-PARAMETERS:
- char *raw_string: is the original string with delimiter separated substrings
- char **split_strings_ptr: is the arraw of pointers which will hold the addresses
- of individual substrings
- int max_num_substrings: is the maximum number of substrings that are expected
- by the caller. The array of pointers in the above parameter
- is usually this long
- char delimiter: is the delimiter that separates the substrings. Examples: ' ', ';'
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- int Number of split strings
-
-SIDE EFFECTS
- The input raw_string no longer remains a delimiter separated single string.
-
-EXAMPLE
- delimiter = ' ' //space
- raw_string = "hello new user" //delimiter is space ' '
- addresses = 0123456789abcd
- split_strings_ptr[0] = &raw_string[0]; //split_strings_ptr[0] contains "hello"
- split_strings_ptr[1] = &raw_string[6]; //split_strings_ptr[1] contains "new"
- split_strings_ptr[2] = &raw_string[a]; //split_strings_ptr[2] contains "user"
-
-===========================================================================*/
-int loc_util_split_string(char *raw_string, char **split_strings_ptr, int max_num_substrings,
- char delimiter);
-
-/*===========================================================================
-FUNCTION trim_space
-
-DESCRIPTION
- Removes leading and trailing spaces of the string
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- None
-
-SIDE EFFECTS
- N/A
-===========================================================================*/
-void loc_util_trim_space(char *org_string);
-#ifdef __cplusplus
-}
-#endif
-
-#endif //_LOC_MISC_UTILS_H_
diff --git a/gps/utils/loc_nmea.cpp b/gps/utils/loc_nmea.cpp
deleted file mode 100644
index 558dc65..0000000
--- a/gps/utils/loc_nmea.cpp
+++ /dev/null
@@ -1,1114 +0,0 @@
-/* Copyright (c) 2012-2017, 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.
- *
- */
-
-#define LOG_NDEBUG 0
-#define LOG_TAG "LocSvc_nmea"
-#include <loc_nmea.h>
-#include <math.h>
-#include <log_util.h>
-#include <loc_pla.h>
-
-#define GLONASS_SV_ID_OFFSET 64
-#define MAX_SATELLITES_IN_USE 12
-
-// GNSS system id according to NMEA spec
-#define SYSTEM_ID_GPS 1
-#define SYSTEM_ID_GLONASS 2
-#define SYSTEM_ID_GALILEO 3
-// Extended systems
-#define SYSTEM_ID_BEIDOU 4
-#define SYSTEM_ID_QZSS 5
-
-typedef struct loc_nmea_sv_meta_s
-{
- char talker[3];
- LocGnssConstellationType svType;
- uint32_t mask;
- uint32_t svCount;
- uint32_t svIdOffset;
- uint32_t signalId;
- uint32_t systemId;
-} loc_nmea_sv_meta;
-
-typedef struct loc_sv_cache_info_s
-{
- uint32_t gps_used_mask;
- uint32_t glo_used_mask;
- uint32_t gal_used_mask;
- uint32_t qzss_used_mask;
- uint32_t bds_used_mask;
- uint32_t gps_count;
- uint32_t glo_count;
- uint32_t gal_count;
- uint32_t qzss_count;
- uint32_t bds_count;
- float hdop;
- float pdop;
- float vdop;
-} loc_sv_cache_info;
-
-/*===========================================================================
-FUNCTION loc_nmea_sv_meta_init
-
-DESCRIPTION
- Init loc_nmea_sv_meta passed in
-
-DEPENDENCIES
- NONE
-
-RETURN VALUE
- Pointer to loc_nmea_sv_meta
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-static loc_nmea_sv_meta* loc_nmea_sv_meta_init(loc_nmea_sv_meta& sv_meta,
- loc_sv_cache_info& sv_cache_info,
- GnssSvType svType,
- bool needCombine)
-{
- memset(&sv_meta, 0, sizeof(sv_meta));
- sv_meta.svType = svType;
-
- switch (svType)
- {
- case GNSS_SV_TYPE_GPS:
- sv_meta.talker[0] = 'G';
- sv_meta.talker[1] = 'P';
- sv_meta.mask = sv_cache_info.gps_used_mask;
- sv_meta.svCount = sv_cache_info.gps_count;
- sv_meta.signalId = 1;
- sv_meta.systemId = SYSTEM_ID_GPS;
- break;
- case GNSS_SV_TYPE_GLONASS:
- sv_meta.talker[0] = 'G';
- sv_meta.talker[1] = 'L';
- sv_meta.mask = sv_cache_info.glo_used_mask;
- sv_meta.svCount = sv_cache_info.glo_count;
- // GLONASS SV ids are from 65-96
- sv_meta.svIdOffset = GLONASS_SV_ID_OFFSET;
- sv_meta.signalId = 1;
- sv_meta.systemId = SYSTEM_ID_GLONASS;
- break;
- case GNSS_SV_TYPE_GALILEO:
- sv_meta.talker[0] = 'G';
- sv_meta.talker[1] = 'A';
- sv_meta.mask = sv_cache_info.gal_used_mask;
- sv_meta.svCount = sv_cache_info.gal_count;
- sv_meta.signalId = 7;
- sv_meta.systemId = SYSTEM_ID_GALILEO;
- break;
- case GNSS_SV_TYPE_QZSS:
- sv_meta.talker[0] = 'P';
- sv_meta.talker[1] = 'Q';
- sv_meta.mask = sv_cache_info.qzss_used_mask;
- sv_meta.svCount = sv_cache_info.qzss_count;
- // QZSS SV ids are from 193-197. So keep svIdOffset 0
- sv_meta.signalId = 0;
- sv_meta.systemId = SYSTEM_ID_QZSS;
- break;
- case GNSS_SV_TYPE_BEIDOU:
- sv_meta.talker[0] = 'P';
- sv_meta.talker[1] = 'Q';
- sv_meta.mask = sv_cache_info.bds_used_mask;
- sv_meta.svCount = sv_cache_info.bds_count;
- // BDS SV ids are from 201-235. So keep svIdOffset 0
- sv_meta.signalId = 0;
- sv_meta.systemId = SYSTEM_ID_BEIDOU;
- break;
- default:
- LOC_LOGE("NMEA Error unknow constellation type: %d", svType);
- return NULL;
- }
- if (needCombine &&
- (sv_cache_info.gps_used_mask ? 1 : 0) +
- (sv_cache_info.glo_used_mask ? 1 : 0) +
- (sv_cache_info.gal_used_mask ? 1 : 0) +
- (sv_cache_info.qzss_used_mask ? 1 : 0) +
- (sv_cache_info.bds_used_mask ? 1 : 0) > 1)
- {
- // If GPS, GLONASS, Galileo, QZSS, BDS etc. are combined
- // to obtain the reported position solution,
- // talker shall be set to GN, to indicate that
- // the satellites are used in a combined solution
- sv_meta.talker[0] = 'G';
- sv_meta.talker[1] = 'N';
- }
- return &sv_meta;
-}
-
-/*===========================================================================
-FUNCTION loc_nmea_put_checksum
-
-DESCRIPTION
- Generate NMEA sentences generated based on position report
-
-DEPENDENCIES
- NONE
-
-RETURN VALUE
- Total length of the nmea sentence
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-static int loc_nmea_put_checksum(char *pNmea, int maxSize)
-{
- uint8_t checksum = 0;
- int length = 0;
- if(NULL == pNmea)
- return 0;
-
- pNmea++; //skip the $
- while (*pNmea != '\0')
- {
- checksum ^= *pNmea++;
- length++;
- }
-
- // length now contains nmea sentence string length not including $ sign.
- int checksumLength = snprintf(pNmea,(maxSize-length-1),"*%02X\r\n", checksum);
-
- // total length of nmea sentence is length of nmea sentence inc $ sign plus
- // length of checksum (+1 is to cover the $ character in the length).
- return (length + checksumLength + 1);
-}
-
-/*===========================================================================
-FUNCTION loc_nmea_generate_GSA
-
-DESCRIPTION
- Generate NMEA GSA sentences generated based on position report
- Currently below sentences are generated:
- - $GPGSA : GPS DOP and active SVs
- - $GLGSA : GLONASS DOP and active SVs
- - $GAGSA : GALILEO DOP and active SVs
- - $GNGSA : GNSS DOP and active SVs
-
-DEPENDENCIES
- NONE
-
-RETURN VALUE
- Number of SVs used
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-static uint32_t loc_nmea_generate_GSA(const GpsLocationExtended &locationExtended,
- char* sentence,
- int bufSize,
- loc_nmea_sv_meta* sv_meta_p,
- std::vector<std::string> &nmeaArraystr)
-{
- if (!sentence || bufSize <= 0 || !sv_meta_p)
- {
- LOC_LOGE("NMEA Error invalid arguments.");
- return 0;
- }
-
- char* pMarker = sentence;
- int lengthRemaining = bufSize;
- int length = 0;
-
- uint32_t svUsedCount = 0;
- uint32_t svUsedList[32] = {0};
-
- char fixType = '\0';
-
- const char* talker = sv_meta_p->talker;
- uint32_t svIdOffset = sv_meta_p->svIdOffset;
- uint32_t mask = sv_meta_p->mask;
-
- for (uint8_t i = 1; mask > 0 && svUsedCount < 32; i++)
- {
- if (mask & 1)
- svUsedList[svUsedCount++] = i + svIdOffset;
- mask = mask >> 1;
- }
-
- if (svUsedCount == 0 && GNSS_SV_TYPE_GPS != sv_meta_p->svType)
- return 0;
-
- if (svUsedCount == 0)
- fixType = '1'; // no fix
- else if (svUsedCount <= 3)
- fixType = '2'; // 2D fix
- else
- fixType = '3'; // 3D fix
-
- // Start printing the sentence
- // Format: $--GSA,a,x,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,p.p,h.h,v.v,s*cc
- // a : Mode : A : Automatic, allowed to automatically switch 2D/3D
- // x : Fixtype : 1 (no fix), 2 (2D fix), 3 (3D fix)
- // xx : 12 SV ID
- // p.p : Position DOP (Dilution of Precision)
- // h.h : Horizontal DOP
- // v.v : Vertical DOP
- // s : GNSS System Id
- // cc : Checksum value
- length = snprintf(pMarker, lengthRemaining, "$%sGSA,A,%c,", talker, fixType);
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return 0;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- // Add first 12 satellite IDs
- for (uint8_t i = 0; i < 12; i++)
- {
- if (i < svUsedCount)
- length = snprintf(pMarker, lengthRemaining, "%02d,", svUsedList[i]);
- else
- length = snprintf(pMarker, lengthRemaining, ",");
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return 0;
- }
- pMarker += length;
- lengthRemaining -= length;
- }
-
- // Add the position/horizontal/vertical DOP values
- if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_DOP)
- {
- length = snprintf(pMarker, lengthRemaining, "%.1f,%.1f,%.1f,",
- locationExtended.pdop,
- locationExtended.hdop,
- locationExtended.vdop);
- }
- else
- { // no dop
- length = snprintf(pMarker, lengthRemaining, ",,,");
- }
- pMarker += length;
- lengthRemaining -= length;
-
- // system id
- length = snprintf(pMarker, lengthRemaining, "%d", sv_meta_p->systemId);
- pMarker += length;
- lengthRemaining -= length;
-
- /* Sentence is ready, add checksum and broadcast */
- length = loc_nmea_put_checksum(sentence, bufSize);
- nmeaArraystr.push_back(sentence);
-
- return svUsedCount;
-}
-
-/*===========================================================================
-FUNCTION loc_nmea_generate_GSV
-
-DESCRIPTION
- Generate NMEA GSV sentences generated based on sv report
- Currently below sentences are generated:
- - $GPGSV: GPS Satellites in View
- - $GLGSV: GLONASS Satellites in View
- - $GAGSV: GALILEO Satellites in View
-
-DEPENDENCIES
- NONE
-
-RETURN VALUE
- NONE
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-static void loc_nmea_generate_GSV(const GnssSvNotification &svNotify,
- char* sentence,
- int bufSize,
- loc_nmea_sv_meta* sv_meta_p,
- std::vector<std::string> &nmeaArraystr)
-{
- if (!sentence || bufSize <= 0)
- {
- LOC_LOGE("NMEA Error invalid argument.");
- return;
- }
-
- char* pMarker = sentence;
- int lengthRemaining = bufSize;
- int length = 0;
- int sentenceCount = 0;
- int sentenceNumber = 1;
- size_t svNumber = 1;
-
- const char* talker = sv_meta_p->talker;
- uint32_t svIdOffset = sv_meta_p->svIdOffset;
- int svCount = sv_meta_p->svCount;
-
- if (svCount <= 0)
- {
- // no svs in view, so just send a blank $--GSV sentence
- snprintf(sentence, lengthRemaining, "$%sGSV,1,1,0,%d", talker, sv_meta_p->signalId);
- length = loc_nmea_put_checksum(sentence, bufSize);
- nmeaArraystr.push_back(sentence);
- return;
- }
-
- svNumber = 1;
- sentenceNumber = 1;
- sentenceCount = svCount / 4 + (svCount % 4 != 0);
-
- while (sentenceNumber <= sentenceCount)
- {
- pMarker = sentence;
- lengthRemaining = bufSize;
-
- length = snprintf(pMarker, lengthRemaining, "$%sGSV,%d,%d,%02d",
- talker, sentenceCount, sentenceNumber, svCount);
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- for (int i=0; (svNumber <= svNotify.count) && (i < 4); svNumber++)
- {
- if (sv_meta_p->svType == svNotify.gnssSvs[svNumber - 1].type)
- {
- length = snprintf(pMarker, lengthRemaining,",%02d,%02d,%03d,",
- svNotify.gnssSvs[svNumber - 1].svId + svIdOffset,
- (int)(0.5 + svNotify.gnssSvs[svNumber - 1].elevation), //float to int
- (int)(0.5 + svNotify.gnssSvs[svNumber - 1].azimuth)); //float to int
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- if (svNotify.gnssSvs[svNumber - 1].cN0Dbhz > 0)
- {
- length = snprintf(pMarker, lengthRemaining,"%02d",
- (int)(0.5 + svNotify.gnssSvs[svNumber - 1].cN0Dbhz)); //float to int
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
- }
-
- i++;
- }
-
- }
-
- // append signalId
- length = snprintf(pMarker, lengthRemaining,",%d",sv_meta_p->signalId);
- pMarker += length;
- lengthRemaining -= length;
-
- length = loc_nmea_put_checksum(sentence, bufSize);
- nmeaArraystr.push_back(sentence);
- sentenceNumber++;
-
- } //while
-}
-
-/*===========================================================================
-FUNCTION loc_nmea_generate_pos
-
-DESCRIPTION
- Generate NMEA sentences generated based on position report
- Currently below sentences are generated within this function:
- - $GPGSA : GPS DOP and active SVs
- - $GLGSA : GLONASS DOP and active SVs
- - $GAGSA : GALILEO DOP and active SVs
- - $GNGSA : GNSS DOP and active SVs
- - $--VTG : Track made good and ground speed
- - $--RMC : Recommended minimum navigation information
- - $--GGA : Time, position and fix related data
-
-DEPENDENCIES
- NONE
-
-RETURN VALUE
- 0
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-void loc_nmea_generate_pos(const UlpLocation &location,
- const GpsLocationExtended &locationExtended,
- unsigned char generate_nmea,
- std::vector<std::string> &nmeaArraystr)
-{
- ENTRY_LOG();
- time_t utcTime(location.gpsLocation.timestamp/1000);
- tm * pTm = gmtime(&utcTime);
- if (NULL == pTm) {
- LOC_LOGE("gmtime failed");
- return;
- }
-
- char sentence[NMEA_SENTENCE_MAX_LENGTH] = {0};
- char* pMarker = sentence;
- int lengthRemaining = sizeof(sentence);
- int length = 0;
- int utcYear = pTm->tm_year % 100; // 2 digit year
- int utcMonth = pTm->tm_mon + 1; // tm_mon starts at zero
- int utcDay = pTm->tm_mday;
- int utcHours = pTm->tm_hour;
- int utcMinutes = pTm->tm_min;
- int utcSeconds = pTm->tm_sec;
- int utcMSeconds = (location.gpsLocation.timestamp)%1000;
- loc_sv_cache_info sv_cache_info = {};
-
- if (GPS_LOCATION_EXTENDED_HAS_GNSS_SV_USED_DATA & locationExtended.flags) {
- sv_cache_info.gps_used_mask =
- (uint32_t)locationExtended.gnss_sv_used_ids.gps_sv_used_ids_mask;
- sv_cache_info.glo_used_mask =
- (uint32_t)locationExtended.gnss_sv_used_ids.glo_sv_used_ids_mask;
- sv_cache_info.gal_used_mask =
- (uint32_t)locationExtended.gnss_sv_used_ids.gal_sv_used_ids_mask;
- sv_cache_info.qzss_used_mask =
- (uint32_t)locationExtended.gnss_sv_used_ids.bds_sv_used_ids_mask;
- sv_cache_info.bds_used_mask =
- (uint32_t)locationExtended.gnss_sv_used_ids.qzss_sv_used_ids_mask;
- }
- if (generate_nmea) {
- char talker[3] = {'G', 'P', '\0'};
- uint32_t svUsedCount = 0;
- uint32_t count = 0;
- loc_nmea_sv_meta sv_meta;
- // -------------------
- // ---$GPGSA/$GNGSA---
- // -------------------
-
- count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GPS, true),
- nmeaArraystr);
- if (count > 0)
- {
- svUsedCount += count;
- talker[0] = sv_meta.talker[0];
- talker[1] = sv_meta.talker[1];
- }
-
- // -------------------
- // ---$GLGSA/$GNGSA---
- // -------------------
-
- count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GLONASS, true),
- nmeaArraystr);
- if (count > 0)
- {
- svUsedCount += count;
- talker[0] = sv_meta.talker[0];
- talker[1] = sv_meta.talker[1];
- }
-
- // -------------------
- // ---$GAGSA/$GNGSA---
- // -------------------
-
- count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GALILEO, true),
- nmeaArraystr);
- if (count > 0)
- {
- svUsedCount += count;
- talker[0] = sv_meta.talker[0];
- talker[1] = sv_meta.talker[1];
- }
-
- // --------------------------
- // ---$PQGSA/$GNGSA (QZSS)---
- // --------------------------
-
- count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_QZSS, false),
- nmeaArraystr);
- if (count > 0)
- {
- svUsedCount += count;
- // talker should be default "GP". If GPS, GLO etc is used, it should be "GN"
- }
-
- // ----------------------------
- // ---$PQGSA/$GNGSA (BEIDOU)---
- // ----------------------------
- count = loc_nmea_generate_GSA(locationExtended, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_BEIDOU, false),
- nmeaArraystr);
- if (count > 0)
- {
- svUsedCount += count;
- // talker should be default "GP". If GPS, GLO etc is used, it should be "GN"
- }
-
- // -------------------
- // ------$--VTG-------
- // -------------------
-
- pMarker = sentence;
- lengthRemaining = sizeof(sentence);
-
- if (location.gpsLocation.flags & LOC_GPS_LOCATION_HAS_BEARING)
- {
- float magTrack = location.gpsLocation.bearing;
- if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_MAG_DEV)
- {
- float magTrack = location.gpsLocation.bearing - locationExtended.magneticDeviation;
- if (magTrack < 0.0)
- magTrack += 360.0;
- else if (magTrack > 360.0)
- magTrack -= 360.0;
- }
-
- length = snprintf(pMarker, lengthRemaining, "$%sVTG,%.1lf,T,%.1lf,M,", talker, location.gpsLocation.bearing, magTrack);
- }
- else
- {
- length = snprintf(pMarker, lengthRemaining, "$%sVTG,,T,,M,", talker);
- }
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- if (location.gpsLocation.flags & LOC_GPS_LOCATION_HAS_SPEED)
- {
- float speedKnots = location.gpsLocation.speed * (3600.0/1852.0);
- float speedKmPerHour = location.gpsLocation.speed * 3.6;
-
- length = snprintf(pMarker, lengthRemaining, "%.1lf,N,%.1lf,K,", speedKnots, speedKmPerHour);
- }
- else
- {
- length = snprintf(pMarker, lengthRemaining, ",N,,K,");
- }
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- if (!(location.gpsLocation.flags & LOC_GPS_LOCATION_HAS_LAT_LONG))
- // N means no fix
- length = snprintf(pMarker, lengthRemaining, "%c", 'N');
- else if (LOC_NAV_MASK_SBAS_CORRECTION_IONO & locationExtended.navSolutionMask)
- // D means differential
- length = snprintf(pMarker, lengthRemaining, "%c", 'D');
- else if (LOC_POS_TECH_MASK_SENSORS == locationExtended.tech_mask)
- // E means estimated (dead reckoning)
- length = snprintf(pMarker, lengthRemaining, "%c", 'E');
- else // A means autonomous
- length = snprintf(pMarker, lengthRemaining, "%c", 'A');
-
- length = loc_nmea_put_checksum(sentence, sizeof(sentence));
- nmeaArraystr.push_back(sentence);
-
- // -------------------
- // ------$--RMC-------
- // -------------------
-
- pMarker = sentence;
- lengthRemaining = sizeof(sentence);
-
- length = snprintf(pMarker, lengthRemaining, "$%sRMC,%02d%02d%02d.%02d,A," ,
- talker, utcHours, utcMinutes, utcSeconds,utcMSeconds/10);
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- if (location.gpsLocation.flags & LOC_GPS_LOCATION_HAS_LAT_LONG)
- {
- double latitude = location.gpsLocation.latitude;
- double longitude = location.gpsLocation.longitude;
- char latHemisphere;
- char lonHemisphere;
- double latMinutes;
- double lonMinutes;
-
- if (latitude > 0)
- {
- latHemisphere = 'N';
- }
- else
- {
- latHemisphere = 'S';
- latitude *= -1.0;
- }
-
- if (longitude < 0)
- {
- lonHemisphere = 'W';
- longitude *= -1.0;
- }
- else
- {
- lonHemisphere = 'E';
- }
-
- latMinutes = fmod(latitude * 60.0 , 60.0);
- lonMinutes = fmod(longitude * 60.0 , 60.0);
-
- length = snprintf(pMarker, lengthRemaining, "%02d%09.6lf,%c,%03d%09.6lf,%c,",
- (uint8_t)floor(latitude), latMinutes, latHemisphere,
- (uint8_t)floor(longitude),lonMinutes, lonHemisphere);
- }
- else
- {
- length = snprintf(pMarker, lengthRemaining,",,,,");
- }
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- if (location.gpsLocation.flags & LOC_GPS_LOCATION_HAS_SPEED)
- {
- float speedKnots = location.gpsLocation.speed * (3600.0/1852.0);
- length = snprintf(pMarker, lengthRemaining, "%.1lf,", speedKnots);
- }
- else
- {
- length = snprintf(pMarker, lengthRemaining, ",");
- }
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- if (location.gpsLocation.flags & LOC_GPS_LOCATION_HAS_BEARING)
- {
- length = snprintf(pMarker, lengthRemaining, "%.1lf,", location.gpsLocation.bearing);
- }
- else
- {
- length = snprintf(pMarker, lengthRemaining, ",");
- }
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- length = snprintf(pMarker, lengthRemaining, "%2.2d%2.2d%2.2d,",
- utcDay, utcMonth, utcYear);
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_MAG_DEV)
- {
- float magneticVariation = locationExtended.magneticDeviation;
- char direction;
- if (magneticVariation < 0.0)
- {
- direction = 'W';
- magneticVariation *= -1.0;
- }
- else
- {
- direction = 'E';
- }
-
- length = snprintf(pMarker, lengthRemaining, "%.1lf,%c,",
- magneticVariation, direction);
- }
- else
- {
- length = snprintf(pMarker, lengthRemaining, ",,");
- }
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- if (!(location.gpsLocation.flags & LOC_GPS_LOCATION_HAS_LAT_LONG))
- // N means no fix
- length = snprintf(pMarker, lengthRemaining, "%c", 'N');
- else if (LOC_NAV_MASK_SBAS_CORRECTION_IONO & locationExtended.navSolutionMask)
- // D means differential
- length = snprintf(pMarker, lengthRemaining, "%c", 'D');
- else if (LOC_POS_TECH_MASK_SENSORS == locationExtended.tech_mask)
- // E means estimated (dead reckoning)
- length = snprintf(pMarker, lengthRemaining, "%c", 'E');
- else // A means autonomous
- length = snprintf(pMarker, lengthRemaining, "%c", 'A');
-
- pMarker += length;
- lengthRemaining -= length;
-
- // hardcode Navigation Status field to 'V'
- length = snprintf(pMarker, lengthRemaining, ",%c", 'V');
- pMarker += length;
- lengthRemaining -= length;
-
- length = loc_nmea_put_checksum(sentence, sizeof(sentence));
- nmeaArraystr.push_back(sentence);
-
- // -------------------
- // ------$--GGA-------
- // -------------------
-
- pMarker = sentence;
- lengthRemaining = sizeof(sentence);
-
- length = snprintf(pMarker, lengthRemaining, "$%sGGA,%02d%02d%02d.%02d," ,
- talker, utcHours, utcMinutes, utcSeconds, utcMSeconds/10);
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- if (location.gpsLocation.flags & LOC_GPS_LOCATION_HAS_LAT_LONG)
- {
- double latitude = location.gpsLocation.latitude;
- double longitude = location.gpsLocation.longitude;
- char latHemisphere;
- char lonHemisphere;
- double latMinutes;
- double lonMinutes;
-
- if (latitude > 0)
- {
- latHemisphere = 'N';
- }
- else
- {
- latHemisphere = 'S';
- latitude *= -1.0;
- }
-
- if (longitude < 0)
- {
- lonHemisphere = 'W';
- longitude *= -1.0;
- }
- else
- {
- lonHemisphere = 'E';
- }
-
- latMinutes = fmod(latitude * 60.0 , 60.0);
- lonMinutes = fmod(longitude * 60.0 , 60.0);
-
- length = snprintf(pMarker, lengthRemaining, "%02d%09.6lf,%c,%03d%09.6lf,%c,",
- (uint8_t)floor(latitude), latMinutes, latHemisphere,
- (uint8_t)floor(longitude),lonMinutes, lonHemisphere);
- }
- else
- {
- length = snprintf(pMarker, lengthRemaining,",,,,");
- }
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- char gpsQuality;
- if (!(location.gpsLocation.flags & LOC_GPS_LOCATION_HAS_LAT_LONG))
- gpsQuality = '0'; // 0 means no fix
- else if (LOC_NAV_MASK_SBAS_CORRECTION_IONO & locationExtended.navSolutionMask)
- gpsQuality = '2'; // 2 means DGPS fix
- else if (LOC_POS_TECH_MASK_SENSORS == locationExtended.tech_mask)
- gpsQuality = '6'; // 6 means estimated (dead reckoning)
- else
- gpsQuality = '1'; // 1 means GPS fix
-
- // Number of satellites in use, 00-12
- if (svUsedCount > MAX_SATELLITES_IN_USE)
- svUsedCount = MAX_SATELLITES_IN_USE;
- if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_DOP)
- {
- length = snprintf(pMarker, lengthRemaining, "%c,%02d,%.1f,",
- gpsQuality, svUsedCount, locationExtended.hdop);
- }
- else
- { // no hdop
- length = snprintf(pMarker, lengthRemaining, "%c,%02d,,",
- gpsQuality, svUsedCount);
- }
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL)
- {
- length = snprintf(pMarker, lengthRemaining, "%.1lf,M,",
- locationExtended.altitudeMeanSeaLevel);
- }
- else
- {
- length = snprintf(pMarker, lengthRemaining,",,");
- }
-
- if (length < 0 || length >= lengthRemaining)
- {
- LOC_LOGE("NMEA Error in string formatting");
- return;
- }
- pMarker += length;
- lengthRemaining -= length;
-
- if ((location.gpsLocation.flags & LOC_GPS_LOCATION_HAS_ALTITUDE) &&
- (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL))
- {
- length = snprintf(pMarker, lengthRemaining, "%.1lf,M,,",
- location.gpsLocation.altitude - locationExtended.altitudeMeanSeaLevel);
- }
- else
- {
- length = snprintf(pMarker, lengthRemaining,",,,");
- }
-
- length = loc_nmea_put_checksum(sentence, sizeof(sentence));
- nmeaArraystr.push_back(sentence);
- }
- //Send blank NMEA reports for non-final fixes
- else {
- strlcpy(sentence, "$GPGSA,A,1,,,,,,,,,,,,,,,", sizeof(sentence));
- length = loc_nmea_put_checksum(sentence, sizeof(sentence));
- nmeaArraystr.push_back(sentence);
-
- strlcpy(sentence, "$GNGSA,A,1,,,,,,,,,,,,,,,", sizeof(sentence));
- length = loc_nmea_put_checksum(sentence, sizeof(sentence));
- nmeaArraystr.push_back(sentence);
-
- strlcpy(sentence, "$PQGSA,A,1,,,,,,,,,,,,,,,", sizeof(sentence));
- length = loc_nmea_put_checksum(sentence, sizeof(sentence));
- nmeaArraystr.push_back(sentence);
-
- strlcpy(sentence, "$GPVTG,,T,,M,,N,,K,N", sizeof(sentence));
- length = loc_nmea_put_checksum(sentence, sizeof(sentence));
- nmeaArraystr.push_back(sentence);
-
- strlcpy(sentence, "$GPRMC,,V,,,,,,,,,,N,V", sizeof(sentence));
- length = loc_nmea_put_checksum(sentence, sizeof(sentence));
- nmeaArraystr.push_back(sentence);
-
- strlcpy(sentence, "$GPGGA,,,,,,0,,,,,,,,", sizeof(sentence));
- length = loc_nmea_put_checksum(sentence, sizeof(sentence));
- nmeaArraystr.push_back(sentence);
- }
-
- EXIT_LOG(%d, 0);
-}
-
-
-
-/*===========================================================================
-FUNCTION loc_nmea_generate_sv
-
-DESCRIPTION
- Generate NMEA sentences generated based on sv report
-
-DEPENDENCIES
- NONE
-
-RETURN VALUE
- 0
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-void loc_nmea_generate_sv(const GnssSvNotification &svNotify,
- std::vector<std::string> &nmeaArraystr)
-{
- ENTRY_LOG();
-
- char sentence[NMEA_SENTENCE_MAX_LENGTH] = {0};
- int svCount = svNotify.count;
- int svNumber = 1;
- loc_sv_cache_info sv_cache_info = {};
-
- //Count GPS SVs for saparating GPS from GLONASS and throw others
- for(svNumber=1; svNumber <= svCount; svNumber++) {
- if (GNSS_SV_TYPE_GPS == svNotify.gnssSvs[svNumber - 1].type)
- {
- // cache the used in fix mask, as it will be needed to send $GPGSA
- // during the position report
- if (GNSS_SV_OPTIONS_USED_IN_FIX_BIT ==
- (svNotify.gnssSvs[svNumber - 1].gnssSvOptionsMask &
- GNSS_SV_OPTIONS_USED_IN_FIX_BIT))
- {
- sv_cache_info.gps_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1));
- }
- sv_cache_info.gps_count++;
- }
- else if (GNSS_SV_TYPE_GLONASS == svNotify.gnssSvs[svNumber - 1].type)
- {
- // cache the used in fix mask, as it will be needed to send $GNGSA
- // during the position report
- if (GNSS_SV_OPTIONS_USED_IN_FIX_BIT ==
- (svNotify.gnssSvs[svNumber - 1].gnssSvOptionsMask &
- GNSS_SV_OPTIONS_USED_IN_FIX_BIT))
- {
- sv_cache_info.glo_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1));
- }
- sv_cache_info.glo_count++;
- }
- else if (GNSS_SV_TYPE_GALILEO == svNotify.gnssSvs[svNumber - 1].type)
- {
- // cache the used in fix mask, as it will be needed to send $GAGSA
- // during the position report
- if (GNSS_SV_OPTIONS_USED_IN_FIX_BIT ==
- (svNotify.gnssSvs[svNumber - 1].gnssSvOptionsMask &
- GNSS_SV_OPTIONS_USED_IN_FIX_BIT))
- {
- sv_cache_info.gal_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1));
- }
- sv_cache_info.gal_count++;
- }
- else if (GNSS_SV_TYPE_QZSS == svNotify.gnssSvs[svNumber - 1].type)
- {
- // cache the used in fix mask, as it will be needed to send $PQGSA
- // during the position report
- if (GNSS_SV_OPTIONS_USED_IN_FIX_BIT ==
- (svNotify.gnssSvs[svNumber - 1].gnssSvOptionsMask &
- GNSS_SV_OPTIONS_USED_IN_FIX_BIT))
- {
- sv_cache_info.qzss_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1));
- }
- sv_cache_info.qzss_count++;
- }
- else if (GNSS_SV_TYPE_BEIDOU == svNotify.gnssSvs[svNumber - 1].type)
- {
- // cache the used in fix mask, as it will be needed to send $PQGSA
- // during the position report
- if (GNSS_SV_OPTIONS_USED_IN_FIX_BIT ==
- (svNotify.gnssSvs[svNumber - 1].gnssSvOptionsMask &
- GNSS_SV_OPTIONS_USED_IN_FIX_BIT))
- {
- sv_cache_info.bds_used_mask |= (1 << (svNotify.gnssSvs[svNumber - 1].svId - 1));
- }
- sv_cache_info.bds_count++;
- }
- }
-
- loc_nmea_sv_meta sv_meta;
- // ------------------
- // ------$GPGSV------
- // ------------------
-
- loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GPS, false), nmeaArraystr);
-
- // ------------------
- // ------$GLGSV------
- // ------------------
-
- loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GLONASS, false),
- nmeaArraystr);
-
- // ------------------
- // ------$GAGSV------
- // ------------------
-
- loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_GALILEO, false),
- nmeaArraystr);
-
- // -------------------------
- // ------$PQGSV (QZSS)------
- // -------------------------
-
- loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_QZSS, false), nmeaArraystr);
-
- // ---------------------------
- // ------$PQGSV (BEIDOU)------
- // ---------------------------
-
- loc_nmea_generate_GSV(svNotify, sentence, sizeof(sentence),
- loc_nmea_sv_meta_init(sv_meta, sv_cache_info, GNSS_SV_TYPE_BEIDOU, false),
- nmeaArraystr);
-
- EXIT_LOG(%d, 0);
-}
diff --git a/gps/utils/loc_nmea.h b/gps/utils/loc_nmea.h
deleted file mode 100644
index 585a9c1..0000000
--- a/gps/utils/loc_nmea.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (c) 2012-2013, 2015-2017 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 LOC_ENG_NMEA_H
-#define LOC_ENG_NMEA_H
-
-#include <gps_extended.h>
-#include <vector>
-#include <string>
-#define NMEA_SENTENCE_MAX_LENGTH 200
-
-void loc_nmea_generate_sv(const GnssSvNotification &svNotify,
- std::vector<std::string> &nmeaArraystr);
-
-void loc_nmea_generate_pos(const UlpLocation &location,
- const GpsLocationExtended &locationExtended,
- unsigned char generate_nmea,
- std::vector<std::string> &nmeaArraystr);
-
-#define DEBUG_NMEA_MINSIZE 6
-#define DEBUG_NMEA_MAXSIZE 4096
-inline bool loc_nmea_is_debug(const char* nmea, int length) {
- return ((nullptr != nmea) &&
- (length >= DEBUG_NMEA_MINSIZE) && (length <= DEBUG_NMEA_MAXSIZE) &&
- (nmea[0] == '$') && (nmea[1] == 'P') && (nmea[2] == 'Q') && (nmea[3] == 'W'));
-}
-
-#endif // LOC_ENG_NMEA_H
diff --git a/gps/utils/loc_target.cpp b/gps/utils/loc_target.cpp
deleted file mode 100644
index 569f3a7..0000000
--- a/gps/utils/loc_target.cpp
+++ /dev/null
@@ -1,208 +0,0 @@
-/* Copyright (c) 2012-2015, 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.
- *
- */
-
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <log_util.h>
-#include "loc_target.h"
-#include "loc_log.h"
-#include <loc_pla.h>
-
-#define APQ8064_ID_1 "109"
-#define APQ8064_ID_2 "153"
-#define MPQ8064_ID_1 "130"
-#define MSM8930_ID_1 "142"
-#define MSM8930_ID_2 "116"
-#define APQ8030_ID_1 "157"
-#define APQ8074_ID_1 "184"
-
-#define LINE_LEN 100
-#define STR_LIQUID "Liquid"
-#define STR_SURF "Surf"
-#define STR_MTP "MTP"
-#define STR_APQ "apq"
-#define STR_SDC "sdc" // alternative string for APQ targets
-#define STR_MSM "msm"
-#define STR_SDM "sdm" // alternative string for MSM targets
-#define STR_APQ_NO_WGR "baseband_apq_nowgr"
-#define STR_AUTO "auto"
-#define IS_STR_END(c) ((c) == '\0' || (c) == '\n' || (c) == '\r')
-#define LENGTH(s) (sizeof(s) - 1)
-#define GPS_CHECK_NO_ERROR 0
-#define GPS_CHECK_NO_GPS_HW 1
-
-static unsigned int gTarget = (unsigned int)-1;
-
-static int read_a_line(const char * file_path, char * line, int line_size)
-{
- FILE *fp;
- int result = 0;
-
- * line = '\0';
- fp = fopen(file_path, "r" );
- if( fp == NULL ) {
- LOC_LOGE("open failed: %s: %s\n", file_path, strerror(errno));
- result = -1;
- } else {
- int len;
- fgets(line, line_size, fp);
- len = strlen(line);
- len = len < line_size - 1? len : line_size - 1;
- line[len] = '\0';
- LOC_LOGD("cat %s: %s", file_path, line);
- fclose(fp);
- }
- return result;
-}
-
-/*The character array passed to this function should have length
- of atleast PROPERTY_VALUE_MAX*/
-void loc_get_target_baseband(char *baseband, int array_length)
-{
- if(baseband && (array_length >= PROPERTY_VALUE_MAX)) {
- property_get("ro.baseband", baseband, "");
- LOC_LOGD("%s:%d]: Baseband: %s\n", __func__, __LINE__, baseband);
- }
- else {
- LOC_LOGE("%s:%d]: NULL parameter or array length less than PROPERTY_VALUE_MAX\n",
- __func__, __LINE__);
- }
-}
-
-/*The character array passed to this function should have length
- of atleast PROPERTY_VALUE_MAX*/
-void loc_get_platform_name(char *platform_name, int array_length)
-{
- if(platform_name && (array_length >= PROPERTY_VALUE_MAX)) {
- property_get("ro.board.platform", platform_name, "");
- LOC_LOGD("%s:%d]: Target name: %s\n", __func__, __LINE__, platform_name);
- }
- else {
- LOC_LOGE("%s:%d]: Null parameter or array length less than PROPERTY_VALUE_MAX\n",
- __func__, __LINE__);
- }
-}
-
-/*The character array passed to this function should have length
- of atleast PROPERTY_VALUE_MAX*/
-void loc_get_auto_platform_name(char *platform_name, int array_length)
-{
- if(platform_name && (array_length >= PROPERTY_VALUE_MAX)) {
- property_get("ro.hardware.type", platform_name, "");
- LOC_LOGD("%s:%d]: Autoplatform name: %s\n", __func__, __LINE__, platform_name);
- }
- else {
- LOC_LOGE("%s:%d]: Null parameter or array length less than PROPERTY_VALUE_MAX\n",
- __func__, __LINE__);
- }
-}
-
-unsigned int loc_get_target(void)
-{
- if (gTarget != (unsigned int)-1)
- return gTarget;
-
- static const char hw_platform[] = "/sys/devices/soc0/hw_platform";
- static const char id[] = "/sys/devices/soc0/soc_id";
- static const char hw_platform_dep[] =
- "/sys/devices/system/soc/soc0/hw_platform";
- static const char id_dep[] = "/sys/devices/system/soc/soc0/id";
- static const char mdm[] = "/target"; // mdm target we are using
-
- char rd_hw_platform[LINE_LEN];
- char rd_id[LINE_LEN];
- char rd_mdm[LINE_LEN];
- char baseband[LINE_LEN];
- char rd_auto_platform[LINE_LEN];
-
- loc_get_target_baseband(baseband, sizeof(baseband));
-
- if (!access(hw_platform, F_OK)) {
- read_a_line(hw_platform, rd_hw_platform, LINE_LEN);
- } else {
- read_a_line(hw_platform_dep, rd_hw_platform, LINE_LEN);
- }
- if (!access(id, F_OK)) {
- read_a_line(id, rd_id, LINE_LEN);
- } else {
- read_a_line(id_dep, rd_id, LINE_LEN);
- }
-
- /*check automotive platform*/
- loc_get_auto_platform_name(rd_auto_platform, sizeof(rd_auto_platform));
- if( !memcmp(rd_auto_platform, STR_AUTO, LENGTH(STR_AUTO)) )
- {
- gTarget = TARGET_AUTO;
- goto detected;
- }
-
- if( !memcmp(baseband, STR_APQ_NO_WGR, LENGTH(STR_APQ_NO_WGR)) ){
-
- gTarget = TARGET_NO_GNSS;
- goto detected;
- }
-
- if( !memcmp(baseband, STR_APQ, LENGTH(STR_APQ)) ||
- !memcmp(baseband, STR_SDC, LENGTH(STR_SDC)) ) {
-
- if( !memcmp(rd_id, MPQ8064_ID_1, LENGTH(MPQ8064_ID_1))
- && IS_STR_END(rd_id[LENGTH(MPQ8064_ID_1)]) )
- gTarget = TARGET_NO_GNSS;
- else
- gTarget = TARGET_APQ_SA;
- } else if (((!memcmp(rd_hw_platform, STR_LIQUID, LENGTH(STR_LIQUID))
- && IS_STR_END(rd_hw_platform[LENGTH(STR_LIQUID)])) ||
- (!memcmp(rd_hw_platform, STR_SURF, LENGTH(STR_SURF))
- && IS_STR_END(rd_hw_platform[LENGTH(STR_SURF)])) ||
- (!memcmp(rd_hw_platform, STR_MTP, LENGTH(STR_MTP))
- && IS_STR_END(rd_hw_platform[LENGTH(STR_MTP)]))) &&
- !read_a_line( mdm, rd_mdm, LINE_LEN)) {
- gTarget = TARGET_MDM;
- } else if( (!memcmp(rd_id, MSM8930_ID_1, LENGTH(MSM8930_ID_1))
- && IS_STR_END(rd_id[LENGTH(MSM8930_ID_1)])) ||
- (!memcmp(rd_id, MSM8930_ID_2, LENGTH(MSM8930_ID_2))
- && IS_STR_END(rd_id[LENGTH(MSM8930_ID_2)])) ) {
- gTarget = TARGET_MSM_NO_SSC;
- } else if ( !memcmp(baseband, STR_MSM, LENGTH(STR_MSM)) ||
- !memcmp(baseband, STR_SDM, LENGTH(STR_SDM)) ) {
- gTarget = TARGET_DEFAULT;
- } else {
- gTarget = TARGET_UNKNOWN;
- }
-
-detected:
- LOC_LOGW("HAL: %s returned %d", __FUNCTION__, gTarget);
- return gTarget;
-}
diff --git a/gps/utils/loc_target.h b/gps/utils/loc_target.h
deleted file mode 100644
index 172b475..0000000
--- a/gps/utils/loc_target.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (c) 2012-2014, 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 LOC_TARGET_H
-#define LOC_TARGET_H
-#define TARGET_SET(gnss,ssc) ( (gnss<<1)|ssc )
-#define TARGET_DEFAULT TARGET_SET(GNSS_MSM, HAS_SSC)
-#define TARGET_MDM TARGET_SET(GNSS_MDM, HAS_SSC)
-#define TARGET_APQ_SA TARGET_SET(GNSS_GSS, NO_SSC)
-#define TARGET_NO_GNSS TARGET_SET(GNSS_NONE, NO_SSC)
-#define TARGET_MSM_NO_SSC TARGET_SET(GNSS_MSM, NO_SSC)
-#define TARGET_AUTO TARGET_SET(GNSS_AUTO, NO_SSC)
-#define TARGET_UNKNOWN TARGET_SET(GNSS_UNKNOWN, NO_SSC)
-#define getTargetGnssType(target) (target>>1)
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-unsigned int loc_get_target(void);
-
-/*The character array passed to this function should have length
- of atleast PROPERTY_VALUE_MAX*/
-void loc_get_target_baseband(char *baseband, int array_length);
-/*The character array passed to this function should have length
- of atleast PROPERTY_VALUE_MAX*/
-void loc_get_platform_name(char *platform_name, int array_length);
-/*The character array passed to this function should have length
- of atleast PROPERTY_VALUE_MAX*/
-void loc_get_auto_platform_name(char *platform_name, int array_length);
-
-/* Please remember to update 'target_name' in loc_log.cpp,
- if do any changes to this enum. */
-typedef enum {
- GNSS_NONE = 0,
- GNSS_MSM,
- GNSS_GSS,
- GNSS_MDM,
- GNSS_AUTO,
- GNSS_UNKNOWN
-}GNSS_TARGET;
-
-typedef enum {
- NO_SSC = 0,
- HAS_SSC
-}SSC_TYPE;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*LOC_TARGET_H*/
diff --git a/gps/utils/loc_timer.h b/gps/utils/loc_timer.h
deleted file mode 100644
index fff0c46..0000000
--- a/gps/utils/loc_timer.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright (c) 2013,2015 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 __LOC_DELAY_H__
-#define __LOC_DELAY_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-#include <stddef.h>
-#include <stdint.h>
-#include <loc_pla.h>
-/*
- user_data: client context pointer, passthrough. Originally received
- from calling client when loc_timer_start() is called.
- result: 0 if timer successfully timed out; else timer failed.
-*/
-typedef void (*loc_timer_callback)(void *user_data, int32_t result);
-
-
-/*
- delay_msec: timeout value for the timer.
- cb_func: callback function pointer, implemented by client.
- Can not be NULL.
- user_data: client context pointer, passthrough. Will be
- returned when loc_timer_callback() is called.
- wakeOnExpire: true if to wake up CPU (if sleeping) upon timer
- expiration and notify the client.
- false if to wait until next time CPU wakes up (if
- sleeping) and then notify the client.
- Returns the handle, which can be used to stop the timer
- NULL, if timer start fails (e.g. if cb_func is NULL).
-*/
-void* loc_timer_start(uint64_t delay_msec,
- loc_timer_callback cb_func,
- void *user_data,
- bool wake_on_expire=false);
-
-/*
- handle becomes invalid upon the return of the callback
-*/
-void loc_timer_stop(void*& handle);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif //__LOC_DELAY_H__
diff --git a/gps/utils/log_util.h b/gps/utils/log_util.h
deleted file mode 100644
index feb4d3c..0000000
--- a/gps/utils/log_util.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Copyright (c) 2011-2014 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 __LOG_UTIL_H__
-#define __LOG_UTIL_H__
-
-#if defined (USE_ANDROID_LOGGING) || defined (ANDROID)
-// Android and LE targets with logcat support
-#include <utils/Log.h>
-
-#elif defined (USE_GLIB)
-// LE targets with no logcat support
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <cutils/log.h>
-
-#ifndef LOG_TAG
-#define LOG_TAG "GPS_UTILS"
-#endif /* LOG_TAG */
-
-#endif /* #if defined (USE_ANDROID_LOGGING) || defined (ANDROID) */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/*=============================================================================
- *
- * LOC LOGGER TYPE DECLARATION
- *
- *============================================================================*/
-/* LOC LOGGER */
-typedef struct loc_logger_s
-{
- unsigned long DEBUG_LEVEL;
- unsigned long TIMESTAMP;
-} loc_logger_s_type;
-
-/*=============================================================================
- *
- * EXTERNAL DATA
- *
- *============================================================================*/
-extern loc_logger_s_type loc_logger;
-
-// Logging Improvements
-extern const char *loc_logger_boolStr[];
-
-extern const char *boolStr[];
-extern const char VOID_RET[];
-extern const char FROM_AFW[];
-extern const char TO_MODEM[];
-extern const char FROM_MODEM[];
-extern const char TO_AFW[];
-extern const char EXIT_TAG[];
-extern const char ENTRY_TAG[];
-extern const char EXIT_ERROR_TAG[];
-
-/*=============================================================================
- *
- * MODULE EXPORTED FUNCTIONS
- *
- *============================================================================*/
-extern void loc_logger_init(unsigned long debug, unsigned long timestamp);
-extern char* get_timestamp(char* str, unsigned long buf_size);
-
-#ifndef DEBUG_DMN_LOC_API
-
-/* LOGGING MACROS */
-/*loc_logger.DEBUG_LEVEL is initialized to 0xff in loc_cfg.cpp
- if that value remains unchanged, it means gps.conf did not
- provide a value and we default to the initial value to use
- Android's logging levels*/
-#define IF_LOC_LOGE if((loc_logger.DEBUG_LEVEL >= 1) && (loc_logger.DEBUG_LEVEL <= 5))
-#define IF_LOC_LOGW if((loc_logger.DEBUG_LEVEL >= 2) && (loc_logger.DEBUG_LEVEL <= 5))
-#define IF_LOC_LOGI if((loc_logger.DEBUG_LEVEL >= 3) && (loc_logger.DEBUG_LEVEL <= 5))
-#define IF_LOC_LOGD if((loc_logger.DEBUG_LEVEL >= 4) && (loc_logger.DEBUG_LEVEL <= 5))
-#define IF_LOC_LOGV if((loc_logger.DEBUG_LEVEL >= 5) && (loc_logger.DEBUG_LEVEL <= 5))
-
-#define LOC_LOGE(...) IF_LOC_LOGE { ALOGE(__VA_ARGS__); }
-#define LOC_LOGW(...) IF_LOC_LOGW { ALOGW(__VA_ARGS__); }
-#define LOC_LOGI(...) IF_LOC_LOGI { ALOGI(__VA_ARGS__); }
-#define LOC_LOGD(...) IF_LOC_LOGD { ALOGD(__VA_ARGS__); }
-#define LOC_LOGV(...) IF_LOC_LOGV { ALOGV(__VA_ARGS__); }
-
-#else /* DEBUG_DMN_LOC_API */
-
-#define LOC_LOGE(...) ALOGE(__VA_ARGS__)
-#define LOC_LOGW(...) ALOGW(__VA_ARGS__)
-#define LOC_LOGI(...) ALOGI(__VA_ARGS__)
-#define LOC_LOGD(...) ALOGD(__VA_ARGS__)
-#define LOC_LOGV(...) ALOGV(__VA_ARGS__)
-
-#endif /* DEBUG_DMN_LOC_API */
-
-/*=============================================================================
- *
- * LOGGING IMPROVEMENT MACROS
- *
- *============================================================================*/
-#define LOG_(LOC_LOG, ID, WHAT, SPEC, VAL) \
- do { \
- if (loc_logger.TIMESTAMP) { \
- char ts[32]; \
- LOC_LOG("[%s] %s %s line %d " #SPEC, \
- get_timestamp(ts, sizeof(ts)), ID, WHAT, __LINE__, VAL); \
- } else { \
- LOC_LOG("%s %s line %d " #SPEC, \
- ID, WHAT, __LINE__, VAL); \
- } \
- } while(0)
-
-#define LOC_LOG_HEAD(fmt) "%s:%d] " fmt
-#define LOC_LOGv(fmt,...) LOC_LOGV(LOC_LOG_HEAD(fmt), __FUNCTION__, __LINE__, ##__VA_ARGS__)
-#define LOC_LOGw(fmt,...) LOC_LOGW(LOC_LOG_HEAD(fmt), __FUNCTION__, __LINE__, ##__VA_ARGS__)
-#define LOC_LOGi(fmt,...) LOC_LOGI(LOC_LOG_HEAD(fmt), __FUNCTION__, __LINE__, ##__VA_ARGS__)
-#define LOC_LOGd(fmt,...) LOC_LOGD(LOC_LOG_HEAD(fmt), __FUNCTION__, __LINE__, ##__VA_ARGS__)
-#define LOC_LOGe(fmt,...) LOC_LOGE(LOC_LOG_HEAD(fmt), __FUNCTION__, __LINE__, ##__VA_ARGS__)
-
-#define LOG_I(ID, WHAT, SPEC, VAL) LOG_(LOC_LOGI, ID, WHAT, SPEC, VAL)
-#define LOG_V(ID, WHAT, SPEC, VAL) LOG_(LOC_LOGV, ID, WHAT, SPEC, VAL)
-#define LOG_E(ID, WHAT, SPEC, VAL) LOG_(LOC_LOGE, ID, WHAT, SPEC, VAL)
-
-#define ENTRY_LOG() LOG_V(ENTRY_TAG, __FUNCTION__, %s, "")
-#define EXIT_LOG(SPEC, VAL) LOG_V(EXIT_TAG, __FUNCTION__, SPEC, VAL)
-#define EXIT_LOG_WITH_ERROR(SPEC, VAL) \
- if (VAL != 0) { \
- LOG_E(EXIT_ERROR_TAG, __FUNCTION__, SPEC, VAL); \
- } else { \
- LOG_V(EXIT_TAG, __FUNCTION__, SPEC, VAL); \
- }
-
-
-// Used for logging callflow from Android Framework
-#define ENTRY_LOG_CALLFLOW() LOG_I(FROM_AFW, __FUNCTION__, %s, "")
-// Used for logging callflow to Modem
-#define EXIT_LOG_CALLFLOW(SPEC, VAL) LOG_I(TO_MODEM, __FUNCTION__, SPEC, VAL)
-// Used for logging callflow from Modem(TO_MODEM, __FUNCTION__, %s, "")
-#define MODEM_LOG_CALLFLOW(SPEC, VAL) LOG_I(FROM_MODEM, __FUNCTION__, SPEC, VAL)
-// Used for logging callflow to Android Framework
-#define CALLBACK_LOG_CALLFLOW(CB, SPEC, VAL) LOG_I(TO_AFW, CB, SPEC, VAL)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // __LOG_UTIL_H__
diff --git a/gps/utils/msg_q.c b/gps/utils/msg_q.c
deleted file mode 100644
index 76c1478..0000000
--- a/gps/utils/msg_q.c
+++ /dev/null
@@ -1,333 +0,0 @@
-/* Copyright (c) 2011-2012, 2014, 2017 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.
- */
-
-#define LOG_TAG "LocSvc_utils_q"
-#include <stdio.h>
-#include <stdlib.h>
-#include <pthread.h>
-#include <loc_pla.h>
-#include <log_util.h>
-#include "linked_list.h"
-#include "msg_q.h"
-
-typedef struct msg_q {
- void* msg_list; /* Linked list to store information */
- pthread_cond_t list_cond; /* Condition variable for waiting on msg queue */
- pthread_mutex_t list_mutex; /* Mutex for exclusive access to message queue */
- int unblocked; /* Has this message queue been unblocked? */
-} msg_q;
-
-/*===========================================================================
-FUNCTION convert_linked_list_err_type
-
-DESCRIPTION
- Converts from one set of enum values to another.
-
- linked_list_val: Value to convert to msg_q_enum_type
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Corresponding linked_list_enum_type in msg_q_enum_type
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-static msq_q_err_type convert_linked_list_err_type(linked_list_err_type linked_list_val)
-{
- switch( linked_list_val )
- {
- case eLINKED_LIST_SUCCESS:
- return eMSG_Q_SUCCESS;
- case eLINKED_LIST_INVALID_PARAMETER:
- return eMSG_Q_INVALID_PARAMETER;
- case eLINKED_LIST_INVALID_HANDLE:
- return eMSG_Q_INVALID_HANDLE;
- case eLINKED_LIST_UNAVAILABLE_RESOURCE:
- return eMSG_Q_UNAVAILABLE_RESOURCE;
- case eLINKED_LIST_INSUFFICIENT_BUFFER:
- return eMSG_Q_INSUFFICIENT_BUFFER;
-
- case eLINKED_LIST_FAILURE_GENERAL:
- default:
- return eMSG_Q_FAILURE_GENERAL;
- }
-}
-
-/* ----------------------- END INTERNAL FUNCTIONS ---------------------------------------- */
-
-/*===========================================================================
-
- FUNCTION: msg_q_init
-
- ===========================================================================*/
-msq_q_err_type msg_q_init(void** msg_q_data)
-{
- if( msg_q_data == NULL )
- {
- LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
- return eMSG_Q_INVALID_PARAMETER;
- }
-
- msg_q* tmp_msg_q;
- tmp_msg_q = (msg_q*)calloc(1, sizeof(msg_q));
- if( tmp_msg_q == NULL )
- {
- LOC_LOGE("%s: Unable to allocate space for message queue!\n", __FUNCTION__);
- return eMSG_Q_FAILURE_GENERAL;
- }
-
- if( linked_list_init(&tmp_msg_q->msg_list) != 0 )
- {
- LOC_LOGE("%s: Unable to initialize storage list!\n", __FUNCTION__);
- free(tmp_msg_q);
- return eMSG_Q_FAILURE_GENERAL;
- }
-
- if( pthread_mutex_init(&tmp_msg_q->list_mutex, NULL) != 0 )
- {
- LOC_LOGE("%s: Unable to initialize list mutex!\n", __FUNCTION__);
- linked_list_destroy(&tmp_msg_q->msg_list);
- free(tmp_msg_q);
- return eMSG_Q_FAILURE_GENERAL;
- }
-
- if( pthread_cond_init(&tmp_msg_q->list_cond, NULL) != 0 )
- {
- LOC_LOGE("%s: Unable to initialize msg q cond var!\n", __FUNCTION__);
- linked_list_destroy(&tmp_msg_q->msg_list);
- pthread_mutex_destroy(&tmp_msg_q->list_mutex);
- free(tmp_msg_q);
- return eMSG_Q_FAILURE_GENERAL;
- }
-
- tmp_msg_q->unblocked = 0;
-
- *msg_q_data = tmp_msg_q;
-
- return eMSG_Q_SUCCESS;
-}
-
-/*===========================================================================
-
- FUNCTION: msg_q_init2
-
- ===========================================================================*/
-const void* msg_q_init2()
-{
- void* q = NULL;
- if (eMSG_Q_SUCCESS != msg_q_init(&q)) {
- q = NULL;
- }
- return q;
-}
-
-/*===========================================================================
-
- FUNCTION: msg_q_destroy
-
- ===========================================================================*/
-msq_q_err_type msg_q_destroy(void** msg_q_data)
-{
- if( msg_q_data == NULL )
- {
- LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
- return eMSG_Q_INVALID_HANDLE;
- }
-
- msg_q* p_msg_q = (msg_q*)*msg_q_data;
-
- linked_list_destroy(&p_msg_q->msg_list);
- pthread_mutex_destroy(&p_msg_q->list_mutex);
- pthread_cond_destroy(&p_msg_q->list_cond);
-
- p_msg_q->unblocked = 0;
-
- free(*msg_q_data);
- *msg_q_data = NULL;
-
- return eMSG_Q_SUCCESS;
-}
-
-/*===========================================================================
-
- FUNCTION: msg_q_snd
-
- ===========================================================================*/
-msq_q_err_type msg_q_snd(void* msg_q_data, void* msg_obj, void (*dealloc)(void*))
-{
- msq_q_err_type rv;
- if( msg_q_data == NULL )
- {
- LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
- return eMSG_Q_INVALID_HANDLE;
- }
- if( msg_obj == NULL )
- {
- LOC_LOGE("%s: Invalid msg_obj parameter!\n", __FUNCTION__);
- return eMSG_Q_INVALID_PARAMETER;
- }
-
- msg_q* p_msg_q = (msg_q*)msg_q_data;
-
- pthread_mutex_lock(&p_msg_q->list_mutex);
- LOC_LOGV("%s: Sending message with handle = %p\n", __FUNCTION__, msg_obj);
-
- if( p_msg_q->unblocked )
- {
- LOC_LOGE("%s: Message queue has been unblocked.\n", __FUNCTION__);
- pthread_mutex_unlock(&p_msg_q->list_mutex);
- return eMSG_Q_UNAVAILABLE_RESOURCE;
- }
-
- rv = convert_linked_list_err_type(linked_list_add(p_msg_q->msg_list, msg_obj, dealloc));
-
- /* Show data is in the message queue. */
- pthread_cond_signal(&p_msg_q->list_cond);
-
- pthread_mutex_unlock(&p_msg_q->list_mutex);
-
- LOC_LOGV("%s: Finished Sending message with handle = %p\n", __FUNCTION__, msg_obj);
-
- return rv;
-}
-
-/*===========================================================================
-
- FUNCTION: msg_q_rcv
-
- ===========================================================================*/
-msq_q_err_type msg_q_rcv(void* msg_q_data, void** msg_obj)
-{
- msq_q_err_type rv;
- if( msg_q_data == NULL )
- {
- LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
- return eMSG_Q_INVALID_HANDLE;
- }
-
- if( msg_obj == NULL )
- {
- LOC_LOGE("%s: Invalid msg_obj parameter!\n", __FUNCTION__);
- return eMSG_Q_INVALID_PARAMETER;
- }
-
- msg_q* p_msg_q = (msg_q*)msg_q_data;
-
- pthread_mutex_lock(&p_msg_q->list_mutex);
-
- if( p_msg_q->unblocked )
- {
- LOC_LOGE("%s: Message queue has been unblocked.\n", __FUNCTION__);
- pthread_mutex_unlock(&p_msg_q->list_mutex);
- return eMSG_Q_UNAVAILABLE_RESOURCE;
- }
-
- /* Wait for data in the message queue */
- while( linked_list_empty(p_msg_q->msg_list) && !p_msg_q->unblocked )
- {
- pthread_cond_wait(&p_msg_q->list_cond, &p_msg_q->list_mutex);
- }
-
- rv = convert_linked_list_err_type(linked_list_remove(p_msg_q->msg_list, msg_obj));
-
- pthread_mutex_unlock(&p_msg_q->list_mutex);
-
- LOC_LOGV("%s: Received message %p rv = %d\n", __FUNCTION__, *msg_obj, rv);
-
- return rv;
-}
-
-/*===========================================================================
-
- FUNCTION: msg_q_flush
-
- ===========================================================================*/
-msq_q_err_type msg_q_flush(void* msg_q_data)
-{
- msq_q_err_type rv;
- if ( msg_q_data == NULL )
- {
- LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
- return eMSG_Q_INVALID_HANDLE;
- }
-
- msg_q* p_msg_q = (msg_q*)msg_q_data;
-
- LOC_LOGD("%s: Flushing Message Queue\n", __FUNCTION__);
-
- pthread_mutex_lock(&p_msg_q->list_mutex);
-
- /* Remove all elements from the list */
- rv = convert_linked_list_err_type(linked_list_flush(p_msg_q->msg_list));
-
- pthread_mutex_unlock(&p_msg_q->list_mutex);
-
- LOC_LOGD("%s: Message Queue flushed\n", __FUNCTION__);
-
- return rv;
-}
-
-/*===========================================================================
-
- FUNCTION: msg_q_unblock
-
- ===========================================================================*/
-msq_q_err_type msg_q_unblock(void* msg_q_data)
-{
- if ( msg_q_data == NULL )
- {
- LOC_LOGE("%s: Invalid msg_q_data parameter!\n", __FUNCTION__);
- return eMSG_Q_INVALID_HANDLE;
- }
-
- msg_q* p_msg_q = (msg_q*)msg_q_data;
- pthread_mutex_lock(&p_msg_q->list_mutex);
-
- if( p_msg_q->unblocked )
- {
- LOC_LOGE("%s: Message queue has been unblocked.\n", __FUNCTION__);
- pthread_mutex_unlock(&p_msg_q->list_mutex);
- return eMSG_Q_UNAVAILABLE_RESOURCE;
- }
-
- LOC_LOGD("%s: Unblocking Message Queue\n", __FUNCTION__);
- /* Unblocking message queue */
- p_msg_q->unblocked = 1;
-
- /* Allow all the waiters to wake up */
- pthread_cond_broadcast(&p_msg_q->list_cond);
-
- pthread_mutex_unlock(&p_msg_q->list_mutex);
-
- LOC_LOGD("%s: Message Queue unblocked\n", __FUNCTION__);
-
- return eMSG_Q_SUCCESS;
-}
diff --git a/gps/utils/msg_q.h b/gps/utils/msg_q.h
deleted file mode 100644
index 453b8ce..0000000
--- a/gps/utils/msg_q.h
+++ /dev/null
@@ -1,207 +0,0 @@
-/* Copyright (c) 2011, 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 __MSG_Q_H__
-#define __MSG_Q_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include <stdlib.h>
-
-/** Linked List Return Codes */
-typedef enum
-{
- eMSG_Q_SUCCESS = 0,
- /**< Request was successful. */
- eMSG_Q_FAILURE_GENERAL = -1,
- /**< Failed because of a general failure. */
- eMSG_Q_INVALID_PARAMETER = -2,
- /**< Failed because the request contained invalid parameters. */
- eMSG_Q_INVALID_HANDLE = -3,
- /**< Failed because an invalid handle was specified. */
- eMSG_Q_UNAVAILABLE_RESOURCE = -4,
- /**< Failed because an there were not enough resources. */
- eMSG_Q_INSUFFICIENT_BUFFER = -5,
- /**< Failed because an the supplied buffer was too small. */
-}msq_q_err_type;
-
-/*===========================================================================
-FUNCTION msg_q_init
-
-DESCRIPTION
- Initializes internal structures for message queue.
-
- msg_q_data: pointer to an opaque Q handle to be returned; NULL if fails
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-msq_q_err_type msg_q_init(void** msg_q_data);
-
-/*===========================================================================
-FUNCTION msg_q_init2
-
-DESCRIPTION
- Initializes internal structures for message queue.
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- opaque handle to the Q created; NULL if create fails
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-const void* msg_q_init2();
-
-/*===========================================================================
-FUNCTION msg_q_destroy
-
-DESCRIPTION
- Releases internal structures for message queue.
-
- msg_q_data: State of message queue to be released.
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-msq_q_err_type msg_q_destroy(void** msg_q_data);
-
-/*===========================================================================
-FUNCTION msg_q_snd
-
-DESCRIPTION
- Sends data to the message queue. The passed in data pointer
- is not modified or freed. Passed in msg_obj is expected to live throughout
- the use of the msg_q (i.e. data is not allocated internally)
-
- msg_q_data: Message Queue to add the element to.
- msgp: Pointer to data to add into message queue.
- dealloc: Function used to deallocate memory for this element. Pass NULL
- if you do not want data deallocated during a flush operation
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-msq_q_err_type msg_q_snd(void* msg_q_data, void* msg_obj, void (*dealloc)(void*));
-
-/*===========================================================================
-FUNCTION msg_q_rcv
-
-DESCRIPTION
- Retrieves data from the message queue. msg_obj is the oldest message received
- and pointer is simply removed from message queue.
-
- msg_q_data: Message Queue to copy data from into msgp.
- msg_obj: Pointer to space to copy msg_q contents to.
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-msq_q_err_type msg_q_rcv(void* msg_q_data, void** msg_obj);
-
-/*===========================================================================
-FUNCTION msg_q_flush
-
-DESCRIPTION
- Function removes all elements from the message queue.
-
- msg_q_data: Message Queue to remove elements from.
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-msq_q_err_type msg_q_flush(void* msg_q_data);
-
-/*===========================================================================
-FUNCTION msg_q_unblock
-
-DESCRIPTION
- This function will stop use of the message queue. All waiters will wake up
- and likely receive nothing from the queue resulting in a negative return
- value. The message queue can no longer be used until it is destroyed
- and initialized again after calling this function.
-
- msg_q_data: Message queue to unblock.
-
-DEPENDENCIES
- N/A
-
-RETURN VALUE
- Look at error codes above.
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-msq_q_err_type msg_q_unblock(void* msg_q_data);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __MSG_Q_H__ */