aboutsummaryrefslogtreecommitdiff
path: root/location/loc_net_iface/le/LocNetIface.h
diff options
context:
space:
mode:
Diffstat (limited to 'location/loc_net_iface/le/LocNetIface.h')
-rw-r--r--location/loc_net_iface/le/LocNetIface.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/location/loc_net_iface/le/LocNetIface.h b/location/loc_net_iface/le/LocNetIface.h
new file mode 100644
index 0000000..ce402fb
--- /dev/null
+++ b/location/loc_net_iface/le/LocNetIface.h
@@ -0,0 +1,125 @@
+/* Copyright (c) 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_NET_IFACE_H
+#define LOC_NET_IFACE_H
+
+#include <LocNetIfaceBase.h>
+#include <dsi_netctrl.h>
+#include <QCMAP_Client.h>
+
+/*--------------------------------------------------------------------
+ * LE platform specific implementation for LocNetIface
+ *-------------------------------------------------------------------*/
+class LocNetIface : public LocNetIfaceBase {
+
+public:
+ /* Constructor */
+ LocNetIface(LocNetConnType connType) :
+ LocNetIfaceBase(connType),
+ mQcmapClientPtr(NULL), mConnectBackhaulSent(false),
+ mIsConnectBackhaulPending(false), mIsDisconnectBackhaulPending(false),
+ mIsDsiInitDone(false), mDsiHandle(NULL), mIsDsiCallUp(false),
+ mIsDsiStartCallPending(false), mIsDsiStopCallPending(false) {}
+ LocNetIface() : LocNetIface(LOC_NET_CONN_TYPE_WWAN_INTERNET) {}
+
+ /* Override base class pure virtual methods */
+ bool setupWwanCall();
+ bool stopWwanCall();
+ void subscribe(const std::list<DataItemId>& itemListToSubscribe);
+ void unsubscribe(const std::list<DataItemId>& itemListToUnsubscribe);
+ void unsubscribeAll();
+ void requestData(const std::list<DataItemId>& itemListToRequestData);
+
+ /* Setup WWAN backhaul via QCMAP
+ * This sets up IP routes as well for any AP socket */
+ bool connectBackhaul();
+ /* Disconnects the WWANbackhaul, only if it was setup by us */
+ bool disconnectBackhaul();
+
+ /* APIs to fetch current WLAN/WWAN status */
+ bool isWlanConnected();
+ bool isWwanConnected();
+
+private:
+ /* QCMAP client handle
+ * This will be set only for static sQcmapInstance. */
+ QCMAP_Client* mQcmapClientPtr;
+
+ /* Flag to track whether we've setup QCMAP backhaul */
+ bool mConnectBackhaulSent;
+ bool mIsConnectBackhaulPending;
+ bool mIsDisconnectBackhaulPending;
+
+ /* Maintain an exclusive instance for QCMAP interaction.
+ * QCMAP does NOT support passing in/out a void user data pointer,
+ * Hence we need to track the instance used internally. */
+ static LocNetIface* sLocNetIfaceInstance;
+
+ /* Private APIs to interact with QCMAP module */
+ void subscribeWithQcmap();
+ void unsubscribeWithQcmap();
+ void handleQcmapCallback(
+ qcmap_msgr_wlan_status_ind_msg_v01 &wlanStatusIndData);
+ void handleQcmapCallback(
+ qcmap_msgr_station_mode_status_ind_msg_v01 &stationModeIndData);
+ void handleQcmapCallback(
+ qcmap_msgr_wwan_status_ind_msg_v01 &wwanStatusIndData);
+ void handleQcmapCallback(
+ qcmap_msgr_bring_up_wwan_ind_msg_v01 &bringUpWwanIndData);
+ void handleQcmapCallback(
+ qcmap_msgr_tear_down_wwan_ind_msg_v01 &teardownWwanIndData);
+ void notifyObserverForWlanStatus(bool isWlanEnabled);
+ void notifyObserverForNetworkInfo(boolean isConnected, LocNetConnType connType);
+ void notifyCurrentNetworkInfo();
+ void notifyCurrentWifiHardwareState();
+
+ /* Callback registered with QCMAP */
+ static void qcmapClientCallback
+ (
+ qmi_client_type user_handle, /* QMI user handle. */
+ unsigned int msg_id, /* Indicator message ID. */
+ void *ind_buf, /* Raw indication data. */
+ unsigned int ind_buf_len, /* Raw data length. */
+ void *ind_cb_data /* User callback handle. */
+ );
+
+ /* Data call setup specific members */
+ bool mIsDsiInitDone;
+ dsi_hndl_t mDsiHandle;
+ bool mIsDsiCallUp;
+ bool mIsDsiStartCallPending;
+ bool mIsDsiStopCallPending;
+
+ /* Callback registered with DSI */
+ static void dsiNetEventCallback(
+ dsi_hndl_t dsiHandle, void* userDataPtr, dsi_net_evt_t event,
+ dsi_evt_payload_t* eventPayloadPtr);
+ void handleDSCallback(dsi_hndl_t dsiHandle, bool isNetConnected);
+};
+
+#endif /* #ifndef LOC_NET_IFACE_H */