aboutsummaryrefslogtreecommitdiffstats
path: root/gobi-api/GobiAPI_1.0.40/Shared/GobiQMICoreOMA.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gobi-api/GobiAPI_1.0.40/Shared/GobiQMICoreOMA.cpp')
-rwxr-xr-xgobi-api/GobiAPI_1.0.40/Shared/GobiQMICoreOMA.cpp535
1 files changed, 535 insertions, 0 deletions
diff --git a/gobi-api/GobiAPI_1.0.40/Shared/GobiQMICoreOMA.cpp b/gobi-api/GobiAPI_1.0.40/Shared/GobiQMICoreOMA.cpp
new file mode 100755
index 0000000..713a7ab
--- /dev/null
+++ b/gobi-api/GobiAPI_1.0.40/Shared/GobiQMICoreOMA.cpp
@@ -0,0 +1,535 @@
+/*===========================================================================
+FILE:
+ GobiQMICoreOMA.cpp
+
+DESCRIPTION:
+ QUALCOMM Gobi QMI Based API Core (OMA-DM Service)
+
+PUBLIC CLASSES AND FUNCTIONS:
+ cGobiQMICore
+
+Copyright (c) 2011, Code Aurora Forum. 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 Code Aurora Forum 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+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 Files
+//---------------------------------------------------------------------------
+#include "StdAfx.h"
+#include "GobiQMICore.h"
+
+#include "QMIBuffers.h"
+
+//---------------------------------------------------------------------------
+// Definitions
+//---------------------------------------------------------------------------
+
+/*=========================================================================*/
+// cGobiQMICore Methods
+/*=========================================================================*/
+
+/*===========================================================================
+METHOD:
+ OMADMStartSession (Public Method)
+
+DESCRIPTION:
+ This function starts an OMA-DM session
+
+PARAMETERS:
+ sessionType [ I ] - Type of session to initiate
+
+RETURN VALUE:
+ eGobiError - Return code
+===========================================================================*/
+eGobiError cGobiQMICore::OMADMStartSession( ULONG sessionType )
+{
+ WORD msgID = (WORD)eQMI_OMA_START_SESSION;
+ std::vector <sDB2PackingInput> piv;
+
+ std::ostringstream tmp;
+ tmp << sessionType;
+
+ sProtocolEntityKey pek( eDB2_ET_QMI_OMA_REQ, msgID, 16 );
+ sDB2PackingInput pi( pek, (LPCSTR)tmp.str().c_str() );
+ piv.push_back( pi );
+
+ // Pack up the QMI request
+ const cCoreDatabase & db = GetDatabase();
+ sSharedBuffer * pRequest = DB2PackQMIBuffer( db, piv );
+ if (pRequest == 0)
+ {
+ return eGOBI_ERR_MEMORY;
+ }
+
+ // Send the QMI request, check result, and return
+ return SendAndCheckReturn( eQMI_SVC_OMA, pRequest );
+}
+
+/*===========================================================================
+METHOD:
+ OMADMCancelSession (Public Method)
+
+DESCRIPTION:
+ This function cancels an ongoing OMA-DM session
+
+RETURN VALUE:
+ eGobiError - Return code
+===========================================================================*/
+eGobiError cGobiQMICore::OMADMCancelSession()
+{
+ // Generate and send the QMI request
+ WORD msgID = (WORD)eQMI_OMA_CANCEL_SESSION;
+ sProtocolBuffer rsp = SendSimple( eQMI_SVC_OMA, msgID );
+ if (rsp.IsValid() == false)
+ {
+ return GetCorrectedLastError();
+ }
+
+ // Did we receive a valid QMI response?
+ sQMIServiceBuffer qmiRsp( rsp.GetSharedBuffer() );
+ if (qmiRsp.IsValid() == false)
+ {
+ return eGOBI_ERR_MALFORMED_RSP;
+ }
+
+ // Check the mandatory QMI result TLV for success
+ ULONG rc = 0;
+ ULONG ec = 0;
+ bool bResult = qmiRsp.GetResult( rc, ec );
+ if (bResult == false)
+ {
+ return eGOBI_ERR_MALFORMED_RSP;
+ }
+ else if (rc != 0)
+ {
+ return GetCorrectedQMIError( ec );
+ }
+
+ return eGOBI_ERR_NONE;
+}
+
+/*===========================================================================
+METHOD:
+ OMADMGetSessionInfo (Public Method)
+
+DESCRIPTION:
+ This function returns information related to the current (or previous
+ if no session is active) OMA-DM session
+
+PARAMETERS:
+ pSessionState [ O ] - State of session
+ pSessionType [ O ] - Type of session
+ pFailureReason [ O ] - Session failure reason (when state indicates failure)
+ pRetryCount [ O ] - Session retry count (when state indicates retrying)
+ pSessionPause [ O ] - Session pause timer (when state indicates retrying)
+ pTimeRemaining [ O ] - Pause time remaining (when state indicates retrying)
+
+RETURN VALUE:
+ eGobiError - Return code
+===========================================================================*/
+eGobiError cGobiQMICore::OMADMGetSessionInfo(
+ ULONG * pSessionState,
+ ULONG * pSessionType,
+ ULONG * pFailureReason,
+ BYTE * pRetryCount,
+ WORD * pSessionPause,
+ WORD * pTimeRemaining )
+{
+ // Validate arguments
+ if ( (pSessionState == 0)
+ || (pSessionType == 0)
+ || (pFailureReason == 0)
+ || (pRetryCount == 0)
+ || (pSessionPause == 0)
+ || (pTimeRemaining == 0) )
+ {
+ return eGOBI_ERR_INVALID_ARG;
+ }
+
+ *pSessionState = ULONG_MAX;
+ *pSessionType = ULONG_MAX;
+ *pFailureReason = ULONG_MAX;
+ *pRetryCount = UCHAR_MAX;
+ *pSessionPause = USHRT_MAX;
+ *pTimeRemaining = USHRT_MAX;
+
+ // Generate and send the QMI request
+ WORD msgID = (WORD)eQMI_OMA_GET_SESSION_INFO;
+ sProtocolBuffer rsp = SendSimple( eQMI_SVC_OMA, msgID );
+ if (rsp.IsValid() == false)
+ {
+ return GetCorrectedLastError();
+ }
+
+ // Did we receive a valid QMI response?
+ sQMIServiceBuffer qmiRsp( rsp.GetSharedBuffer() );
+ if (qmiRsp.IsValid() == false)
+ {
+ return eGOBI_ERR_MALFORMED_RSP;
+ }
+
+ // Check the mandatory QMI result TLV for success
+ ULONG rc = 0;
+ ULONG ec = 0;
+ bool bResult = qmiRsp.GetResult( rc, ec );
+ if (bResult == false)
+ {
+ return eGOBI_ERR_MALFORMED_RSP;
+ }
+ else if (rc != 0)
+ {
+ return GetCorrectedQMIError( ec );
+ }
+
+ // How many parameters did we populate?
+ ULONG params = 0;
+
+ // Prepare TLVs for parsing
+ std::vector <sDB2NavInput> tlvs = DB2ReduceQMIBuffer( qmiRsp );
+ const cCoreDatabase & db = GetDatabase();
+
+ // Parse the TLVs we want (by DB key)
+ sProtocolEntityKey tlvKey( eDB2_ET_QMI_OMA_RSP, msgID, 16 );
+ cDataParser::tParsedFields pf = ParseTLV( db, rsp, tlvs, tlvKey );
+ if (pf.size() >= 2)
+ {
+ *pSessionState = pf[0].mValue.mU32;
+ *pSessionType = pf[1].mValue.mU32;
+ params += 2;
+ }
+
+ tlvKey = sProtocolEntityKey( eDB2_ET_QMI_OMA_RSP, msgID, 17 );
+ pf = ParseTLV( db, rsp, tlvs, tlvKey );
+ if (pf.size() >= 1)
+ {
+ *pFailureReason = pf[0].mValue.mU32;
+ params++;
+ }
+
+ tlvKey = sProtocolEntityKey( eDB2_ET_QMI_OMA_RSP, msgID, 18 );
+ pf = ParseTLV( db, rsp, tlvs, tlvKey );
+ if (pf.size() >= 3)
+ {
+ *pRetryCount = pf[0].mValue.mU8;
+ *pSessionPause = pf[1].mValue.mU16;
+ *pTimeRemaining = pf[2].mValue.mU16;
+ params += 3;
+ }
+
+ if (params == 0)
+ {
+ return eGOBI_ERR_INVALID_RSP;
+ }
+
+ return eGOBI_ERR_NONE;
+}
+
+/*===========================================================================
+METHOD:
+ OMADMGetPendingNIA (Public Method)
+
+DESCRIPTION:
+ This function returns information about the pending network initiated
+ alert
+
+PARAMETERS:
+ pSessionType [ O ] - Type of session
+ pSessionID [ O ] - Unique session ID
+
+RETURN VALUE:
+ eGobiError - Return code
+===========================================================================*/
+eGobiError cGobiQMICore::OMADMGetPendingNIA(
+ ULONG * pSessionType,
+ USHORT * pSessionID )
+{
+ // Validate arguments
+ if (pSessionType == 0 || pSessionID == 0)
+ {
+ return eGOBI_ERR_INVALID_ARG;
+ }
+
+ *pSessionType = ULONG_MAX;
+ *pSessionID = USHRT_MAX;
+
+ // Generate and send the QMI request
+ WORD msgID = (WORD)eQMI_OMA_GET_SESSION_INFO;
+ sProtocolBuffer rsp = SendSimple( eQMI_SVC_OMA, msgID );
+ if (rsp.IsValid() == false)
+ {
+ return GetCorrectedLastError();
+ }
+
+ // Did we receive a valid QMI response?
+ sQMIServiceBuffer qmiRsp( rsp.GetSharedBuffer() );
+ if (qmiRsp.IsValid() == false)
+ {
+ return eGOBI_ERR_MALFORMED_RSP;
+ }
+
+ // Check the mandatory QMI result TLV for success
+ ULONG rc = 0;
+ ULONG ec = 0;
+ bool bResult = qmiRsp.GetResult( rc, ec );
+ if (bResult == false)
+ {
+ return eGOBI_ERR_MALFORMED_RSP;
+ }
+ else if (rc != 0)
+ {
+ return GetCorrectedQMIError( ec );
+ }
+
+ // How many parameters did we populate?
+ ULONG params = 0;
+
+ // Prepare TLVs for parsing
+ std::vector <sDB2NavInput> tlvs = DB2ReduceQMIBuffer( qmiRsp );
+ const cCoreDatabase & db = GetDatabase();
+
+ // Parse the TLVs we want (by DB key)
+ sProtocolEntityKey tlvKey( eDB2_ET_QMI_OMA_RSP, msgID, 19 );
+ cDataParser::tParsedFields pf = ParseTLV( db, rsp, tlvs, tlvKey );
+ if (pf.size() >= 2)
+ {
+ *pSessionType = pf[0].mValue.mU32;
+ *pSessionID = pf[1].mValue.mU16;
+ params += 2;
+ }
+
+ if (params == 0)
+ {
+ return eGOBI_ERR_INVALID_RSP;
+ }
+
+ return eGOBI_ERR_NONE;
+}
+
+/*===========================================================================
+METHOD:
+ OMADMSendSelection (Public Method)
+
+DESCRIPTION:
+ This function sends the specified OMA-DM selection for the current
+ network initiated session
+
+PARAMETERS:
+ selection [ I ] - Selection
+ sessionID [ I ] - Unique session ID
+
+RETURN VALUE:
+ eGobiError - Return code
+===========================================================================*/
+eGobiError cGobiQMICore::OMADMSendSelection(
+ ULONG selection,
+ USHORT sessionID )
+{
+ WORD msgID = (WORD)eQMI_OMA_SEND_SELECTION;
+ std::vector <sDB2PackingInput> piv;
+
+ std::ostringstream tmp;
+ tmp << selection << " " << sessionID;
+
+ sProtocolEntityKey pek( eDB2_ET_QMI_OMA_REQ, msgID, 16 );
+ sDB2PackingInput pi( pek, (LPCSTR)tmp.str().c_str() );
+ piv.push_back( pi );
+
+ // Pack up the QMI request
+ const cCoreDatabase & db = GetDatabase();
+ sSharedBuffer * pRequest = DB2PackQMIBuffer( db, piv );
+ if (pRequest == 0)
+ {
+ return eGOBI_ERR_MEMORY;
+ }
+
+ // Send the QMI request, check result, and return
+ return SendAndCheckReturn( eQMI_SVC_OMA, pRequest );
+}
+
+/*===========================================================================
+METHOD:
+ OMADMGetFeatureSettings (Public Method)
+
+DESCRIPTION:
+ This function returns the OMA-DM feature settings
+
+PARAMETERS:
+ pbProvisioning [ O ] - Device provisioning service update enabled
+ pbPRLUpdate [ O ] - PRL service update enabled
+
+RETURN VALUE:
+ eGobiError - Return code
+===========================================================================*/
+eGobiError cGobiQMICore::OMADMGetFeatureSettings(
+ ULONG * pbProvisioning,
+ ULONG * pbPRLUpdate )
+{
+ // Validate arguments
+ if (pbProvisioning == 0 || pbPRLUpdate == 0)
+ {
+ return eGOBI_ERR_INVALID_ARG;
+ }
+
+ *pbProvisioning = ULONG_MAX;
+ *pbPRLUpdate = ULONG_MAX;
+
+ // Generate and send the QMI request
+ WORD msgID = (WORD)eQMI_OMA_GET_FEATURES;
+ sProtocolBuffer rsp = SendSimple( eQMI_SVC_OMA, msgID );
+ if (rsp.IsValid() == false)
+ {
+ return GetCorrectedLastError();
+ }
+
+ // Did we receive a valid QMI response?
+ sQMIServiceBuffer qmiRsp( rsp.GetSharedBuffer() );
+ if (qmiRsp.IsValid() == false)
+ {
+ return eGOBI_ERR_MALFORMED_RSP;
+ }
+
+ // Check the mandatory QMI result TLV for success
+ ULONG rc = 0;
+ ULONG ec = 0;
+ bool bResult = qmiRsp.GetResult( rc, ec );
+ if (bResult == false)
+ {
+ return eGOBI_ERR_MALFORMED_RSP;
+ }
+ else if (rc != 0)
+ {
+ return GetCorrectedQMIError( ec );
+ }
+
+ // How many parameters did we populate?
+ ULONG params = 0;
+
+ // Prepare TLVs for parsing
+ std::vector <sDB2NavInput> tlvs = DB2ReduceQMIBuffer( qmiRsp );
+ const cCoreDatabase & db = GetDatabase();
+
+ // Parse the TLVs we want (by DB key)
+ sProtocolEntityKey tlvKey( eDB2_ET_QMI_OMA_RSP, msgID, 16 );
+ cDataParser::tParsedFields pf = ParseTLV( db, rsp, tlvs, tlvKey );
+ if (pf.size() >= 1)
+ {
+ *pbProvisioning = pf[0].mValue.mU32;
+ params++;
+ }
+
+ tlvKey = sProtocolEntityKey( eDB2_ET_QMI_OMA_RSP, msgID, 17 );
+ pf = ParseTLV( db, rsp, tlvs, tlvKey );
+ if (pf.size() >= 1)
+ {
+ *pbPRLUpdate = pf[0].mValue.mU32;
+ params++;
+ }
+
+ if (params == 0)
+ {
+ return eGOBI_ERR_INVALID_RSP;
+ }
+
+ return eGOBI_ERR_NONE;
+}
+
+/*===========================================================================
+METHOD:
+ OMADMSetProvisioningFeature (Public Method)
+
+DESCRIPTION:
+ This function sets the OMA-DM device provisioning service
+ update feature setting
+
+PARAMETERS:
+ bProvisioning [ I ] - Device provisioning service update enabled
+
+RETURN VALUE:
+ eGobiError - Return code
+===========================================================================*/
+eGobiError cGobiQMICore::OMADMSetProvisioningFeature(
+ ULONG bProvisioning )
+{
+ WORD msgID = (WORD)eQMI_OMA_SET_FEATURES;
+ std::vector <sDB2PackingInput> piv;
+
+ std::ostringstream tmp;
+ tmp << (ULONG)(bProvisioning != 0);
+
+ sProtocolEntityKey pek( eDB2_ET_QMI_OMA_REQ, msgID, 16 );
+ sDB2PackingInput pi( pek, (LPCSTR)tmp.str().c_str() );
+ piv.push_back( pi );
+
+ // Pack up the QMI request
+ const cCoreDatabase & db = GetDatabase();
+ sSharedBuffer * pRequest = DB2PackQMIBuffer( db, piv );
+ if (pRequest == 0)
+ {
+ return eGOBI_ERR_MEMORY;
+ }
+
+ // Send the QMI request, check result, and return
+ return SendAndCheckReturn( eQMI_SVC_OMA, pRequest );
+}
+
+/*===========================================================================
+METHOD:
+ OMADMSetPRLUpdateFeature (Public Method)
+
+DESCRIPTION:
+ This function sets the OMA-DM PRL service update feature setting
+
+PARAMETERS:
+ bPRLUpdate [ I ] - PRL service update enabled
+
+RETURN VALUE:
+ eGobiError - Return code
+===========================================================================*/
+eGobiError cGobiQMICore::OMADMSetPRLUpdateFeature(
+ ULONG bPRLUpdate )
+{
+ WORD msgID = (WORD)eQMI_OMA_SET_FEATURES;
+ std::vector <sDB2PackingInput> piv;
+
+ std::ostringstream tmp;
+ tmp << (ULONG)(bPRLUpdate != 0);
+
+ sProtocolEntityKey pek( eDB2_ET_QMI_OMA_REQ, msgID, 17 );
+ sDB2PackingInput pi( pek, (LPCSTR)tmp.str().c_str() );
+ piv.push_back( pi );
+
+ // Pack up the QMI request
+ const cCoreDatabase & db = GetDatabase();
+ sSharedBuffer * pRequest = DB2PackQMIBuffer( db, piv );
+ if (pRequest == 0)
+ {
+ return eGOBI_ERR_MEMORY;
+ }
+
+ // Send the QMI request, check result, and return
+ return SendAndCheckReturn( eQMI_SVC_OMA, pRequest );
+}