From 7aafead299a6212dbede906c96a59cc8ddbcdb2d Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 5 Aug 2014 11:12:04 -0500 Subject: [PATCH] gobi-api: add CodeAurora GobiAPI_2013-07-31-1347 sources Makes for easier grepping. --- .../GobiAPI_2013-07-31-1347/Core/Comm.cpp | 646 + gobi-api/GobiAPI_2013-07-31-1347/Core/Comm.h | 138 + .../GobiAPI_2013-07-31-1347/Core/Connection.h | 148 + .../GobiAPI_2013-07-31-1347/Core/Event.cpp | 436 + gobi-api/GobiAPI_2013-07-31-1347/Core/Event.h | 116 + .../Core/ProtocolBuffer.cpp | 221 + .../Core/ProtocolBuffer.h | 161 + .../Core/ProtocolEnum.h | 398 + .../Core/ProtocolLog.cpp | 189 + .../Core/ProtocolLog.h | 90 + .../Core/ProtocolNotification.cpp | 170 + .../Core/ProtocolNotification.h | 236 + .../Core/ProtocolRequest.cpp | 253 + .../Core/ProtocolRequest.h | 192 + .../Core/ProtocolServer.cpp | 1749 + .../Core/ProtocolServer.h | 362 + .../Core/QMIBuffers.cpp | 365 + .../GobiAPI_2013-07-31-1347/Core/QMIBuffers.h | 390 + .../GobiAPI_2013-07-31-1347/Core/QMIEnum.h | 2350 ++ .../Core/QMIProtocolServer.cpp | 434 + .../Core/QMIProtocolServer.h | 115 + .../Core/SharedBuffer.cpp | 374 + .../Core/SharedBuffer.h | 165 + .../GobiAPI_2013-07-31-1347/Core/Socket.cpp | 836 + .../GobiAPI_2013-07-31-1347/Core/Socket.h | 163 + .../GobiAPI_2013-07-31-1347/Core/StdAfx.h | 199 + .../GobiAPI_2013-07-31-1347/Core/SyncQueue.h | 418 + .../Gobi3000Translation.cpp | 100 + .../Gobi3000Translation/Gobi3000Translation.h | 1027 + .../Gobi3000TranslationCAT.cpp | 176 + .../Gobi3000TranslationDMS.cpp | 1482 + .../Gobi3000TranslationNAS.cpp | 2021 + .../Gobi3000TranslationOMA.cpp | 480 + .../Gobi3000TranslationPDS.cpp | 1206 + .../Gobi3000TranslationRMS.cpp | 187 + .../Gobi3000TranslationUIM.cpp | 1169 + .../Gobi3000TranslationVoice.cpp | 173 + .../Gobi3000TranslationWDS.cpp | 3485 ++ .../Gobi3000TranslationWMS.cpp | 1120 + .../GobiConnectionMgmt/GobiConnectionMgmt.cpp | 605 + .../GobiConnectionMgmt/GobiConnectionMgmt.h | 269 + .../GobiConnectionMgmtAPI.h | 18734 +++++++++ .../GobiConnectionMgmtAPIEnums.h | 7083 ++++ .../GobiConnectionMgmtAPIStructs.h | 33556 ++++++++++++++++ .../GobiConnectionMgmtExports.cpp | 25838 ++++++++++++ .../GobiSampleCM/GobiCMCallback.cpp | 308 + .../GobiSampleCM/GobiCMCallback.h | 82 + .../GobiSampleCM/GobiCMDLL.cpp | 1238 + .../GobiSampleCM/GobiCMDLL.h | 265 + .../GobiSampleCM/QTSampleCM.cpp | 315 + .../GobiSampleCM/QTSampleCM.h | 458 + .../GobiSampleCM/SampleCM.cpp | 1734 + .../GobiSampleCM/SampleCM.h | 397 + .../assets/qml/GobiSampleCM/Connect.png | Bin 0 -> 5581 bytes .../android/assets/qml/GobiSampleCM/Info.png | Bin 0 -> 5300 bytes .../android/assets/qml/GobiSampleCM/main.qml | 822 + .../android/res/drawable/icon.png | Bin 0 -> 7361 bytes .../android/res/drawable/logo.png | Bin 0 -> 427576 bytes .../GobiSampleCM/main.cpp | 44 + .../GobiSampleCM/qml/GobiSampleCM/Connect.png | Bin 0 -> 5581 bytes .../GobiSampleCM/qml/GobiSampleCM/Info.png | Bin 0 -> 5300 bytes .../GobiSampleCM/qml/GobiSampleCM/main.qml | 822 + gobi-api/GobiAPI_2013-07-31-1347/Readme.txt | 177 + .../Shared/GobiError.h | 136 + .../Shared/GobiQMICore.cpp | 533 + .../Shared/GobiQMICore.h | 191 + 66 files changed, 117547 insertions(+) create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/Comm.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/Comm.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/Connection.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/Event.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/Event.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolBuffer.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolBuffer.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolEnum.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolLog.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolLog.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolNotification.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolNotification.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolRequest.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolRequest.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolServer.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolServer.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/QMIBuffers.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/QMIBuffers.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/QMIEnum.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/QMIProtocolServer.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/QMIProtocolServer.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/SharedBuffer.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/SharedBuffer.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/Socket.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/Socket.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/StdAfx.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Core/SyncQueue.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000Translation.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000Translation.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationCAT.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationDMS.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationNAS.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationOMA.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationPDS.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationRMS.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationUIM.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationVoice.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationWDS.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationWMS.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmt.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmt.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPI.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPIEnums.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPIStructs.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtExports.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMCallback.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMCallback.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMDLL.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMDLL.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/QTSampleCM.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/QTSampleCM.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/SampleCM.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/SampleCM.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/android/assets/qml/GobiSampleCM/Connect.png create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/android/assets/qml/GobiSampleCM/Info.png create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/android/assets/qml/GobiSampleCM/main.qml create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/android/res/drawable/icon.png create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/android/res/drawable/logo.png create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/main.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/qml/GobiSampleCM/Connect.png create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/qml/GobiSampleCM/Info.png create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/qml/GobiSampleCM/main.qml create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Readme.txt create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiError.h create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiQMICore.cpp create mode 100644 gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiQMICore.h diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/Comm.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Core/Comm.cpp new file mode 100644 index 0000000..d877934 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/Comm.cpp @@ -0,0 +1,646 @@ +/*=========================================================================== +FILE: + Comm.cpp + +DESCRIPTION: + Implementation of cComm class + +PUBLIC CLASSES AND METHODS: + cComm + This class wraps low level port communications + +Copyright (c) 2013, 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 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 "Comm.h" +#include "ProtocolServer.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- +// Thread commands +#define START_READ_CMD 0 +#define STOP_READ_CMD 1 +#define EXIT_CMD 2 + +/*=========================================================================*/ +// Free Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + RxThread (Free Method) + +DESCRIPTION: + Thread for simulating asynchronous reads + +PARAMETERS: + pData [ I ] Asynchronous read object + +RETURN VALUE: + void * - thread exit value (always 0) +===========================================================================*/ +void * RxThread( void * pData ) +{ + cComm * pComm = (cComm*)pData; + if (pComm == NULL || pComm->IsValid() == false) + { + return 0; + } + + fd_set inputSet, outputSet; + FD_ZERO( &inputSet ); + FD_SET( pComm->mCommandPipe[READING], &inputSet ); + int largestFD = pComm->mCommandPipe[READING]; + + int status = 0; + while (true) + { + // No FD_COPY() available + memcpy( &outputSet, &inputSet, sizeof( fd_set ) ); + + status = select( largestFD + 1, &outputSet, NULL, NULL, NULL ); + if (status <= 0) + { + TRACE( "error %d in select, errno %d\n", status, errno ); + break; + } + + if (FD_ISSET( pComm->mCommandPipe[READING], &outputSet ) == true) + { + // Read from the pipe + BYTE cmd; + status = read( pComm->mCommandPipe[READING], &cmd, 1 ); + if (status != 1) + { + TRACE( "cmd error %d\n", status ); + break; + } + + if (cmd == START_READ_CMD) + { + FD_SET( pComm->mPort, &inputSet ); + largestFD = std::max( pComm->mPort, + pComm->mCommandPipe[READING] ); + } + else if (cmd == STOP_READ_CMD) + { + FD_CLR( pComm->mPort, &inputSet ); + largestFD = pComm->mCommandPipe[READING]; + } + else + { + // EXIT_CMD or anything else + pComm->mpRxCallback = 0; + break; + } + } + else if (FD_ISSET( pComm->mPort, &outputSet ) == true) + { + // Stop watching for read data + FD_CLR( pComm->mPort, &inputSet ); + largestFD = pComm->mCommandPipe[READING]; + + // Perform a read + status = read( pComm->mPort, + pComm->mpBuffer, + pComm->mBuffSz ); + + cIOCallback * pCallback = pComm->mpRxCallback; + pComm->mpRxCallback = 0; + + if (pCallback == (cIOCallback *)1) + { + // We wanted to read, but not to be notified + } + else if (status >= 0) + { + pCallback->IOComplete( 0, status ); + } + else + { + pCallback->IOComplete( status, 0 ); + } + } + } + + return 0; +}; + +/*=========================================================================*/ +// cComm Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cComm (Public Method) + +DESCRIPTION: + Constructor + +RETURN VALUE: + None +===========================================================================*/ +cComm::cComm() + : mPortName( "" ), + mPort( INVALID_HANDLE_VALUE ), + mbCancelWrite( false ), + mpBuffer( 0 ), + mBuffSz( 0 ), + mRxThreadID( 0 ) +{ + mCommandPipe[READING] = INVALID_HANDLE_VALUE; + mCommandPipe[WRITING] = INVALID_HANDLE_VALUE; +} + +/*=========================================================================== +METHOD: + ~cComm (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +cComm::~cComm() +{ + // Disconnect from current port + Disconnect(); + + mCommandPipe[READING] = INVALID_HANDLE_VALUE; + mCommandPipe[WRITING] = INVALID_HANDLE_VALUE; +} + +/*=========================================================================== +METHOD: + IsValid (Public Method) + +DESCRIPTION: + Is this object valid? + +RETURN VALUE: + Bool +===========================================================================*/ +bool cComm::IsValid() +{ + // Nothing to do, dependant on extended class functionality + return true; +} + +/*=========================================================================== +METHOD: + Connect (Public Method) + +DESCRIPTION: + Connect to the specified port + +PARAMETERS: + pPort [ I ] - Name of port to open (IE: /dev/qcqmi0) + +RETURN VALUE: + bool +===========================================================================*/ +bool cComm::Connect( LPCSTR pPort ) +{ + if (IsValid() == false || pPort == 0 || pPort[0] == 0) + { + return false; + } + + if (mPort != INVALID_HANDLE_VALUE) + { + Disconnect(); + } + + // Initialize command pipe for read thread + int nRet = pipe( mCommandPipe ); + if (nRet != 0) + { + TRACE( "cComm:Connect() pipe creation failed %d\n", nRet ); + return false; + } + + // Start the read thread + nRet = pthread_create( &mRxThreadID, + 0, + RxThread, + this ); + if (nRet != 0) + { + TRACE( "cComm::Connect() pthread_create = %d\n", nRet ); + + Disconnect(); + return false; + } + + // Opening the com port + mPort = open( pPort, O_RDWR ); + if (mPort == INVALID_HANDLE_VALUE) + { + Disconnect(); + return false; + } + + // Save port name + mPortName = pPort; + + // Success! + return true; +} + +/*=========================================================================== +METHOD: + SendCtl (Public Method) + +DESCRIPTION: + Run an IOCTL on the open file handle + +PARAMETERS: + ioctlReq [ I ] - ioctl request value + pData [I/O] - input or output specific to ioctl request value + +RETURN VALUE: + int - ioctl return value (0 for success) +===========================================================================*/ +int cComm::SendCtl( + UINT ioctlReq, + void * pData ) +{ + if (mPort == INVALID_HANDLE_VALUE) + { + TRACE( "Invalid file handle\n" ); + return -EBADFD; + } + + return ioctl( mPort, ioctlReq, pData ); +} + +/*=========================================================================== +METHOD: + Disconnect (Public Method) + +DESCRIPTION: + Disconnect from the current port + +RETURN VALUE: + bool +===========================================================================*/ +bool cComm::Disconnect() +{ + // Assume success + bool bRC = true; + + if (mCommandPipe[WRITING] != INVALID_HANDLE_VALUE) + { + if (mRxThreadID != 0) + { + // Notify the thread to exit + BYTE byte = EXIT_CMD; + write( mCommandPipe[WRITING], &byte, 1 ); + + // And wait for it + TRACE( "cComm::Disconnnect() joining thread %lu\n", mRxThreadID ); + int nRC = pthread_join( mRxThreadID, 0 ); + if (nRC != 0) + { + TRACE( "failed to join thread %d\n", nRC ); + bRC = false; + } + + mRxThreadID = 0; + } + + close( mCommandPipe[WRITING] ); + close( mCommandPipe[READING] ); + mCommandPipe[READING] = INVALID_HANDLE_VALUE; + mCommandPipe[WRITING] = INVALID_HANDLE_VALUE; + } + + if (mPort != INVALID_HANDLE_VALUE) + { + close( mPort ); + mPort = INVALID_HANDLE_VALUE; + } + + // Double check + mpRxCallback = 0; + + mPortName.clear(); + return bRC; +} + +/*=========================================================================== +METHOD: + ConfigureSettings (Public Method) + +DESCRIPTION: + Configure the port with the passed in parameters + +PARAMETERS: + pSettings [ I ] - Desired port settings + +RETURN VALUE: + bool +===========================================================================*/ +bool cComm::ConfigureSettings( termios * pSettings ) +{ + if (mPort == INVALID_HANDLE_VALUE || pSettings == 0) + { + return false; + } + + tcflush( mPort, TCIOFLUSH ); + int nRC = tcsetattr( mPort, TCSANOW, pSettings ); + if (nRC == -1) + { + return false; + } + + // Success! + return true; +} + +/*=========================================================================== +METHOD: + GetSettings (Public Method) + +DESCRIPTION: + Return the current port settings + +PARAMETERS: + pSettings [ I ] - Current port settings + +RETURN VALUE: + bool +===========================================================================*/ +bool cComm::GetSettings( termios * pSettings ) +{ + if (mPort == INVALID_HANDLE_VALUE || pSettings == 0) + { + return false; + } + + // Get the COM port settings + int nRC = tcgetattr( mPort, pSettings ); + if (nRC == -1) + { + return false; + } + + // Success! + return true; +} + +/*=========================================================================== +METHOD: + CancelIO (Public Method) + +DESCRIPTION: + Cancel any in-progress I/O + +PARAMETERS: + +RETURN VALUE: + bool +===========================================================================*/ +bool cComm::CancelIO() +{ + if (mPort == INVALID_HANDLE_VALUE) + { + return false; + } + + bool bRxCancel = CancelRx(); + bool bTxCancel = CancelTx(); + + return (bRxCancel && bTxCancel); +} + +/*=========================================================================== +METHOD: + CancelRx (Public Method) + +DESCRIPTION: + Cancel any in-progress receive operation + +RETURN VALUE: + bool +===========================================================================*/ +bool cComm::CancelRx() +{ + if (mPort == INVALID_HANDLE_VALUE + || mCommandPipe[WRITING] == INVALID_HANDLE_VALUE + || mpRxCallback == 0 + || mRxThreadID == 0) + { + TRACE( "cannot cancel, thread not active\n" ); + mpRxCallback = 0; + return false; + } + + // Notify the thread to stop reading + BYTE byte = STOP_READ_CMD; + int nRC = write( mCommandPipe[WRITING], &byte, 1 ); + if (nRC != 1) + { + TRACE( "error %d canceling read\n", nRC ); + return false; + } + + // Remove the old callback + mpRxCallback = 0; + + return true; +} + +/*=========================================================================== +METHOD: + CancelTx (Public Method) + +DESCRIPTION: + Cancel any in-progress transmit operation + +RETURN VALUE: + bool +===========================================================================*/ +bool cComm::CancelTx() +{ + if (mPort == INVALID_HANDLE_VALUE) + { + return false; + } + + mbCancelWrite = true; + + return true; +} + +/*=========================================================================== +METHOD: + RxData (Public Method) + +DESCRIPTION: + Receive data + +PARAMETERS: + pBuf [ I ] - Buffer to contain received data + bufSz [ I ] - Amount of data to be received + pCallback [ I ] - Callback object to be exercised when the + operation completes + +RETURN VALUE: + bool +===========================================================================*/ +bool cComm::RxData( + BYTE * pBuf, + ULONG bufSz, + cIOCallback * pCallback ) +{ + if (IsValid() == false || mpRxCallback != 0) + { + return false; + } + + if (pCallback == 0) + { + // Not interested in being notified, but we still need a value + // for this so that only one outstanding I/O operation is active + // at any given point in time + mpRxCallback = (cIOCallback * )1; + } + else + { + mpRxCallback = pCallback; + } + + mpBuffer = pBuf; + mBuffSz = bufSz; + + // Notify the thread to stop reading + BYTE byte = START_READ_CMD; + int nRC = write( mCommandPipe[WRITING], &byte, 1 ); + if (nRC != 1) + { + TRACE( "error %d starting read\n", nRC ); + return false; + } + + return true; +} + +/*=========================================================================== +METHOD: + TxData (Public Method) + +DESCRIPTION: + Transmit data + +PARAMETERS: + pBuf [ I ] - Data to be transmitted + bufSz [ I ] - Amount of data to be transmitted + +RETURN VALUE: + bool +===========================================================================*/ +bool cComm::TxData( + const BYTE * pBuf, + ULONG bufSz ) +{ + if (IsValid() == false) + { + return false; + } + +#ifdef DEBUG + ULONGLONG nStart = GetTickCount(); +#endif + + // Allow ourselves to be interupted + mbCancelWrite = false; + + // This seems a bit pointless, but we're still going verify + // the device is ready for writing, and give it up to + // (1000 + num bytes) MS to be ready (in 100 MS chunks) + + struct timeval TimeOut; + fd_set set; + + int nReady = 0; + unsigned int nCount = 0; + + while ( nReady == 0 ) + { + if (mbCancelWrite == true) + { + TRACE( "cComm::TxData() write canceled before device was ready\n" ); + return false; + } + + if (nCount >= (1000 + bufSz) / 100) + { + // Timeout is expired + break; + } + + FD_ZERO( &set ); + FD_SET( mPort, &set ); + TimeOut.tv_sec = 0; + TimeOut.tv_usec = 100000; + nReady = select( mPort + 1, NULL, &set, NULL, &TimeOut ); + + nCount++; + } + + if (nReady <= 0) + { + TRACE( "cComm::TxData() Unable to get device ready for" + " Write, error %d: %s\n", + nReady, + strerror( nReady) ); + return false; + } + + size_t nRet = write( mPort, pBuf, bufSz ); + if (nRet == std::string::npos || nRet != bufSz) + { + TRACE( "cComm::TxData() write returned %d instead of %lu\n", + nRet, + bufSz ); + return false; + } + +#ifdef DEBUG + TRACE( "Write of %lu bytes took %llu milliseconds\n", bufSz, GetTickCount() - nStart ); +#endif + + return true; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/Comm.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/Comm.h new file mode 100644 index 0000000..7e33c75 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/Comm.h @@ -0,0 +1,138 @@ +/*=========================================================================== +FILE: + Comm.h + +DESCRIPTION: + Declaration of cComm class + +PUBLIC CLASSES AND METHODS: + cComm + This class wraps low level port communications + +Copyright (c) 2013, 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 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 "Event.h" +#include "Connection.h" + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +/*=========================================================================*/ +// Class cComm +/*=========================================================================*/ +class cComm : public cConnection +{ + public: + // Constructor + cComm(); + + // Destructor + ~cComm(); + + // Is this object valid? + bool IsValid(); + + // Connect to the specified port + bool Connect( LPCSTR pPort ); + + // Run an IOCTL on the open file handle + int SendCtl( + UINT ioctlReq, + void * pData ); + + // Disconnect from the current port + bool Disconnect(); + + // Configure the port with the passed in parameters + bool ConfigureSettings( termios * pSettings ); + + // Return the current port settings + bool GetSettings( termios * pSettings ); + + // Cancel any in-progress I/O + bool CancelIO(); + + // Cancel any in-progress receive operation + bool CancelRx(); + + // Cancel any in-progress transmit operation + bool CancelTx(); + + // Receive data + bool RxData( + BYTE * pBuf, + ULONG bufSz, + cIOCallback * pCallback ); + + // Transmit data + bool TxData( + const BYTE * pBuf, + ULONG bufSz ); + + // (Inline) Return current port name + std::string GetPortName() const + { + return mPortName; + }; + + // Are we currently connected to a port? + bool IsConnected() + { + return (mPort != INVALID_HANDLE_VALUE); + }; + + protected: + /* Name of current port */ + std::string mPortName; + + /* Handle to COM port */ + int mPort; + + // Cancel the write request? + bool mbCancelWrite; + + /* Buffer */ + BYTE * mpBuffer; + + /* Buffer size */ + ULONG mBuffSz; + + /* Pipe for comunication with thread */ + int mCommandPipe[2]; + + /* Thread ID of Rx Thread. */ + pthread_t mRxThreadID; + + // Rx thread is allowed complete access + friend void * RxThread( void * pData ); +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/Connection.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/Connection.h new file mode 100644 index 0000000..007c010 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/Connection.h @@ -0,0 +1,148 @@ +/*=========================================================================== +FILE: + Connection.h + +DESCRIPTION: + Declaration of cConnection class + +PUBLIC CLASSES AND METHODS: + cComm + This class defines a prototype for low level communications + +Copyright (c) 2013, 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 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 "Event.h" + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +/*=========================================================================*/ +// Class cIOCallback +/*=========================================================================*/ +class cIOCallback +{ + public: + // (Inline) Constructor + cIOCallback() { }; + + // (Inline) Destructor + virtual ~cIOCallback() { }; + + // The I/O has been completed, process the results + virtual void IOComplete( + DWORD status, + DWORD bytesTransferred ) = 0; +}; + +/*=========================================================================*/ +// Class cConnection +/*=========================================================================*/ +class cConnection +{ + public: + // Constructor + cConnection() + : mpRxCallback( 0 ) + { }; + + // Is this object valid? + virtual bool IsValid() + { + return false; + }; + + // Connect to the specified interface + virtual bool Connect( LPCSTR /* pPort */ ) + { + return false; + }; + + // Send a control message + virtual int SendCtl( + UINT /* type */, + void * /* pData */ ) + { + return -1; + }; + + // Disconnect from the current port + virtual bool Disconnect() + { + return false; + }; + + // Cancel any in-progress I/O + virtual bool CancelIO() + { + return false; + }; + + // Cancel any in-progress receive operation + virtual bool CancelRx() + { + return false; + }; + + // Cancel any in-progress transmit operation + virtual bool CancelTx() + { + return false; + }; + + // Receive data + virtual bool RxData( + BYTE * /* pBuf */, + ULONG /* bufSz */, + cIOCallback * /* pCallback */ ) + { + return false; + }; + + // Transmit data + virtual bool TxData( + const BYTE * /* pBuf */, + ULONG /* bufSz */ ) + { + return false; + }; + + // Are we currently connected to a port? + virtual bool IsConnected() + { + return false; + }; + + protected: + /* Read callbacks */ + cIOCallback * mpRxCallback; +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/Event.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Core/Event.cpp new file mode 100644 index 0000000..d16613c --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/Event.cpp @@ -0,0 +1,436 @@ +/*=========================================================================== +FILE: + Event.cpp + +DESCRIPTION: + Implementation of cEvent class + +PUBLIC CLASSES AND METHODS: + WaitOnMultipleEvents + cEvent + Functionality to mimic Windows events using UNIX pipes (enhanced + somewhat to allow one to specify a DWORD value to pass through + when signalling the event) + + WARNING: + This class is not designed to be thread safe + +Copyright (c) 2013, 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 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 "Event.h" + +/*=========================================================================== +METHOD: + WaitOnMultipleEvents (Free Method) + +DESCRIPTION: + Wait for any of the events to be set and return the value + + Note: If multiple events are set, only the event specified by + eventIndex will be read from. Run this function again + to get the next event. + +PARAMETERS: + events [ I ] - Vector of events which may be signaled + timeoutMS [ I ] - Relative timeout length (in milliseconds) + val [ O ] - Associated value upon success + eventIndex [ O ] - Index of event which was signaled + +RETURN VALUE: + Return code + positive for number of events set + -ETIME on timeout + negative errno value on failure +===========================================================================*/ +int WaitOnMultipleEvents( + std::vector events, + DWORD timeoutMS, + DWORD & val, + DWORD & eventIndex ) +{ + // Check internal pipes' status + for (ULONG index = 0; index < events.size(); index++) + { + int error = events[index]->mError; + if (error != 0) + { + TRACE( "cEvent %lu has error %d\n", index, error ); + return -error; + } + } + + // Initialize the FD set + fd_set fds; + FD_ZERO( &fds ); + + // Add each item to the FD set, keeping track of the largest, + // which is used for select() + int largestFD = 0; + for (ULONG index = 0; index < events.size(); index++) + { + int pipe = events[index]->mPipes[READING]; + FD_SET( pipe, &fds ); + + largestFD = std::max( pipe, largestFD ); + } + + struct timeval timeOut; + + // Add avoiding an overflow on (long)usec + timeOut.tv_sec = timeoutMS / 1000l; + timeOut.tv_usec = ( timeoutMS % 1000l ) * 1000l; + + // Wait for activity on the pipes for the specified amount of time + int rc = select( largestFD + 1, &fds, 0, 0, &timeOut ); + if (rc == -1) + { + TRACE( "WaitOnMultipleEvents error %d\n", errno ); + return -errno; + } + else if (rc == 0) + { + // No activity on the pipes + return -ETIME; + } + + int numSignaled = rc; + + // Only read from first pipe which was signaled + int signaled = -1; + for (ULONG index = 0; index < events.size(); index++) + { + int pipe = events[index]->mPipes[READING]; + if (FD_ISSET( pipe, &fds ) != 0) + { + signaled = index; + break; + } + } + + if (signaled == -1) + { + // Odd, no one was signaled + return -ENODATA; + } + + DWORD tempVal = 0; + rc = events[signaled]->Read( tempVal ); + if (rc == 0) + { + // Success + val = tempVal; + eventIndex = signaled; + return numSignaled; + } + else + { + // failure + return rc; + } +} + +/*=========================================================================*/ +// cEvent Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cEvent (Public Method) + +DESCRIPTION: + Constructor + +RETURN VALUE: + None +===========================================================================*/ +cEvent::cEvent() + : mError( 0 ) +{ + int rc = pipe( mPipes ); + if (rc != 0) + { + mError = errno; + TRACE( "cEvent - Error %d creating pipe, %s\n", + mError, + strerror( mError ) ); + } +} + +/*=========================================================================== +METHOD: + ~cEvent (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +cEvent::~cEvent() +{ + // Check internal pipe status + if (mError == 0) + { + Close(); + mError = EBADF; + } +} + +/*=========================================================================== +METHOD: + Close (Internal Method) + +DESCRIPTION: + Close pipe + +RETURN VALUE: + Return code + 0 on success + errno value on failure +===========================================================================*/ +int cEvent::Close() +{ + int retCode = 0; + + int rc = close( mPipes[READING] ); + mPipes[READING] = -1; + + if (rc != 0) + { + retCode = errno; + TRACE( "cEvent - Error %d deleting pipe[READING], %s\n", + retCode, + strerror( retCode ) ); + } + + rc = close( mPipes[WRITING] ); + mPipes[WRITING] = -1; + + if (rc != 0) + { + retCode = errno; + TRACE( "cEvent - Error %d deleting pipe[WRITING], %s\n", + retCode, + strerror( retCode ) ); + } + + return retCode; +} + +/*=========================================================================== +METHOD: + Set (Public Method) + +DESCRIPTION: + Set/signal the event with the specified value + +PARAMETERS: + val [ I ] - Value to pass through with signal + +RETURN VALUE: + Return code + 0 on success + errno value on failure +===========================================================================*/ +int cEvent::Set( DWORD val ) +{ + // Check internal pipe status + if (mError != 0) + { + return mError; + } + + PBYTE pWrite = (PBYTE)&val; + + int writeSize = sizeof( DWORD ); + while (writeSize > 0) + { + int bytesWritten = write( mPipes[WRITING], pWrite, writeSize ); + if (bytesWritten == -1) + { + // Store error from write + int writeErr = errno; + + // First error? + if (mError == 0) + { + // Yes, save the error + mError = writeErr; + } + + // We cannot recover from this error + Close(); + return writeErr; + } + + pWrite += bytesWritten; + writeSize -= bytesWritten; + } + + // Success + return 0; +} + +/*=========================================================================== +METHOD: + Wait (Free Method) + +DESCRIPTION: + Wait for the event to be signalled and return the read in value + +PARAMETERS: + timeoutMS [ I ] - Relative timeout length (in milliseconds) + val [ O ] - Associated value upon success + +RETURN VALUE: + Return code + 0 on success + ETIME on timeout + errno value on failure +===========================================================================*/ +int cEvent::Wait( + DWORD timeoutMS, + DWORD & val ) +{ + // Check internal pipe status + if (mError != 0) + { + return mError; + } + + fd_set fds; + FD_ZERO( &fds ); + FD_SET( mPipes[READING], &fds ); + + struct timeval timeOut; + + // Add avoiding an overflow on (long)usec + timeOut.tv_sec = timeoutMS / 1000l; + timeOut.tv_usec = ( timeoutMS % 1000l ) * 1000l; + + // Wait for activity on the pipe for the specified amount of time + int rc = select( mPipes[READING] + 1, &fds, 0, 0, &timeOut ); + if (rc == -1) + { + // Store error from select + int selectErr = errno; + + // First error? + if (mError == 0) + { + // Yes, save the error + mError = selectErr; + } + + // We cannot recover from this error + Close(); + return selectErr; + } + else if (rc == 0) + { + // No activity on the pipe + return ETIME; + } + + return Read( val ); +} + +/*=========================================================================== +METHOD: + Clear (Free Method) + +DESCRIPTION: + Read and discard all values currently in the pipe +===========================================================================*/ +void cEvent::Clear() +{ + DWORD unusedVal; + int rc = 0; + while (rc == 0) + { + rc = Wait( (DWORD)0, unusedVal ); + } +} + + +/*=========================================================================== +METHOD: + Read (Internal Method) + +DESCRIPTION: + Read a DWORD from the pipe + +RETURN VALUE: + Return code + 0 on success + errno value on failure +===========================================================================*/ +int cEvent::Read( DWORD & val ) +{ + DWORD tempVal; + PBYTE pRead = (PBYTE)&tempVal; + + int readSize = sizeof( DWORD ); + while (readSize > 0) + { + int bytesRead = read( mPipes[READING], pRead, readSize ); + if (bytesRead <= 0) + { + // Store error from read + int readErr = errno; + if (readErr == 0) + { + // Hard error! This should NEVER happen for a pipe + ASSERT( 0 ); + readErr = EBADF; + } + + // First error? + if (mError == 0) + { + // Yes, store the error + mError = readErr; + } + + // We cannot recover from this error + Close(); + return readErr; + } + + pRead += bytesRead; + readSize -= bytesRead; + } + + val = tempVal; + + return 0; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/Event.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/Event.h new file mode 100644 index 0000000..2b4a9e4 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/Event.h @@ -0,0 +1,116 @@ +/*=========================================================================== +FILE: + Event.h + +DESCRIPTION: + Declaration of cEvent class + +PUBLIC CLASSES AND METHODS: + WaitOnMultipleEvents + cEvent + Functionality to mimic Windows events using UNIX pipes (enhanced + somewhat to allow one to specify a DWORD value to pass through + when signalling the event) + + WARNING: + This class is not designed to be thread safe + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "StdAfx.h" +#include + +//--------------------------------------------------------------------------- +// Prototype +//--------------------------------------------------------------------------- + +class cEvent; + +/*=========================================================================*/ +// Free methods +/*=========================================================================*/ + +// Wait for any of the events to be set and return the value +int WaitOnMultipleEvents( + std::vector events, + DWORD timeoutMS, + DWORD & val, + DWORD & eventIndex ); + +/*=========================================================================*/ +// Class cEvent +/*=========================================================================*/ +class cEvent +{ + public: + // Constructor + cEvent(); + + // Destructor + ~cEvent(); + + // Set/signal the event with the specified value + int Set( DWORD val ); + + // Wait for the event to be signalled and return the read in value + int Wait( + DWORD timeoutMS, + DWORD & val ); + + // Read and discard all values currently in the pipe + void Clear(); + + protected: + // Close pipe (used in errors or normal exit) + int Close(); + + // Read from the pipe + int Read( DWORD & val ); + + /* Internal error status */ + int mError; + + /* Internal pipes */ + int mPipes[2]; + + // WaitOnMultipleEvents gets full access + friend int WaitOnMultipleEvents( + std::vector events, + DWORD timeoutMS, + DWORD & val, + DWORD & eventIndex ); +}; + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolBuffer.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolBuffer.cpp new file mode 100644 index 0000000..b192cfa --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolBuffer.cpp @@ -0,0 +1,221 @@ +/*=========================================================================== +FILE: + ProtocolBuffer.cpp + +DESCRIPTION: + Generic protocol structures and affliated methods + +PUBLIC CLASSES AND METHODS: + sProtocolBuffer + Simple struct to represent a protocol buffer using a reference counted + (shared) buffer, this allows us to use in in several places without + copying it once in each place. A few base services are provided + but the main purpose is to provide a class to inherit off of for + specific protocols + +Copyright (c) 2013, 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 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 "ProtocolBuffer.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +/*=========================================================================*/ +// sProtocolBuffer Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + sProtocolBuffer (Public Method) + +DESCRIPTION: + Constructor (default) + +RETURN VALUE: + None +===========================================================================*/ +sProtocolBuffer::sProtocolBuffer() + : mpData( 0 ), + mbValid( false ) +{ + // Object is currently invalid + mTimestamp = EMPTY_TIME; +} + +/*=========================================================================== +METHOD: + sProtocolBuffer (Public Method) + +DESCRIPTION: + Constructor (parameterized) + +PARAMETERS: + pBuffer [ I ] - Shareable buffer that contains the DIAG data + +RETURN VALUE: + None +===========================================================================*/ +sProtocolBuffer::sProtocolBuffer( sSharedBuffer * pBuffer ) + : mpData( 0 ), + mbValid( false ) +{ + mTimestamp = EMPTY_TIME; + + time_t rawtime; + time( &rawtime ); + tm * timestamp = localtime( &rawtime ); + if (timestamp != 0) + { + mTimestamp = *timestamp; + } + + if (mpData != 0 && mpData->IsValid() == true) + { + mpData->Release(); + mpData = 0; + } + + mpData = pBuffer; + if (mpData != 0 && mpData->IsValid() == true) + { + mpData->AddRef(); + } + else + { + mpData = 0; + } + + // NOTE: Derived classes need to call their own validation method + // in their constructors since the override might try to access + // data that is not yet in place + sProtocolBuffer::Validate(); +} + +/*=========================================================================== +METHOD: + sProtocolBuffer (Public Method) + +DESCRIPTION: + Copy constructor + +PARAMETERS: + copyThis [ I ] - sProtocolBuffer to base the new one on + +RETURN VALUE: + None +===========================================================================*/ +sProtocolBuffer::sProtocolBuffer( const sProtocolBuffer & copyThis ) + : mpData( copyThis.mpData ), + mTimestamp( copyThis.mTimestamp ), + mbValid( copyThis.mbValid ) +{ + // Bump reference count for shared buffer + if (mpData != 0 && mpData->IsValid() == true) + { + mpData->AddRef(); + } + else + { + mpData = 0; + mbValid = false; + } +} + +/*=========================================================================== +METHOD: + operator = (Public Method) + +DESCRIPTION: + Assignment operator + +PARAMETERS: + copyThis [ I ] - sProtocolBuffer to base the new one on + +RETURN VALUE: + sProtocolBuffer & +===========================================================================*/ +sProtocolBuffer & sProtocolBuffer::operator = ( const sProtocolBuffer & copyThis ) +{ + // Do we already have data? + if (mpData != 0) + { + // Is it different than what we are duplicating? + if (mpData != copyThis.mpData) + { + // Yes, release our current buffer + mpData->Release(); + } + } + + mpData = copyThis.mpData; + mTimestamp = copyThis.mTimestamp; + mbValid = copyThis.mbValid; + + // Bump reference count for shared buffer + if (mpData != 0 && mpData->IsValid() == true) + { + mpData->AddRef(); + } + else + { + mpData = 0; + mbValid = false; + } + + return *this; +} + +/*=========================================================================== +METHOD: + ~sProtocolBuffer (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +sProtocolBuffer::~sProtocolBuffer() +{ + if (mpData != 0 && mpData->IsValid() == true) + { + mpData->Release(); + mpData = 0; + } + else if (mpData != 0) + { + ASSERT( 0 ); + } + + mbValid = false; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolBuffer.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolBuffer.h new file mode 100644 index 0000000..4075d9e --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolBuffer.h @@ -0,0 +1,161 @@ +/*=========================================================================== +FILE: + ProtocolBuffer.h + +DESCRIPTION: + Generic protocol structures and affliated methods + +PUBLIC CLASSES AND METHODS: + sProtocolBuffer + Simple struct to represent a protocol buffer using a reference counted + (shared) buffer, this allows us to use in in several places without + copying it once in each place. A few base services are provided + but the main purpose is to provide a class to inherit off of for + specific protocols + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "SharedBuffer.h" +#include "ProtocolEnum.h" + +static const tm EMPTY_TIME = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + +/*=========================================================================*/ +// Struct sProtocolBuffer +/*=========================================================================*/ +struct sProtocolBuffer +{ + public: + // Constructor (default) + sProtocolBuffer(); + + // Constructor (parameterized) + sProtocolBuffer( sSharedBuffer * pBuffer ); + + // Copy constructor + sProtocolBuffer( const sProtocolBuffer & copyThis ); + + // Assignment operator + sProtocolBuffer & operator = ( const sProtocolBuffer & copyThis ); + + // Destructor + virtual ~sProtocolBuffer(); + + // (Inline) Get buffer + const BYTE * GetBuffer() const + { + BYTE * pRet = 0; + if (IsValid() == true) + { + pRet = (BYTE *)mpData->GetBuffer(); + } + + return (const BYTE *)pRet; + }; + + // (Inline) Get buffer size + ULONG GetSize() const + { + ULONG size = 0; + if (IsValid() == true) + { + size = mpData->GetSize(); + } + + return size; + }; + + // (Inline) Return the protocol type + eProtocolType GetType() const + { + eProtocolType pt = ePROTOCOL_ENUM_BEGIN; + if (IsValid() == true) + { + pt = (eProtocolType)mpData->GetType(); + } + + return pt; + }; + + // (Inline) Return the shared buffer + sSharedBuffer * GetSharedBuffer() const + { + sSharedBuffer * pRet = 0; + if (IsValid() == true) + { + pRet = mpData; + } + + return pRet; + }; + + // (Inline) Return the timestamp + tm GetTimestamp() const + { + tm ft = EMPTY_TIME; + + if (IsValid() == true) + { + ft = mTimestamp; + } + + return ft; + }; + + // (Inline) Is this buffer valid? + virtual bool IsValid() const + { + return mbValid; + }; + + protected: + // (Inline) Validate buffer + virtual bool Validate() + { + // Do we have a shared buffer and is it valid? + mbValid = (mpData != 0 && mpData->IsValid()); + return mbValid; + }; + + /* Our data buffer */ + sSharedBuffer * mpData; + + /* Time buffer was created */ + tm mTimestamp; + + /* Has this buffer been validated? (NOTE: *NOT* set in base) */ + bool mbValid; +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolEnum.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolEnum.h new file mode 100644 index 0000000..9dfc9bf --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolEnum.h @@ -0,0 +1,398 @@ +/*=========================================================================== +FILE: + ProtocolEnum.h + +DESCRIPTION: + Generic protocol enumerations and related methods + +PUBLIC ENUMERATIONS AND METHODS: + eProtocolType + + IsValid() + IsQMIProtocol() + IsQMIProtocolRX() + IsQMIProtocolTX() + IsDSEProtocol() + IsDSEProtocolCmd() + IsDSEProtocolRsp() + IsDSEProtocolEvt() + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +/*=========================================================================*/ +// eProtocolType Enumeration +// +// NOTE: QMI protocol types need to be in the same order as eQMIService +// with RX added first then TX +/*=========================================================================*/ +enum eProtocolType +{ + ePROTOCOL_ENUM_BEGIN = -1, + + ePROTOCOL_COMMAND, // 000 Protocol server command + ePROTOCOL_AT, // 001 AT command protocol + ePROTOCOL_NMEA, // 002 NMEA (GPS) protocol + ePROTOCOL_DIAG_RX, // 003 DIAG protocol (incoming) + ePROTOCOL_DIAG_TX, // 004 DIAG protocol (outgoing) + ePROTOCOL_DOWNLOAD_RX, // 005 Download protocol (incoming) + ePROTOCOL_DOWNLOAD_TX, // 006 Download protocol (outgoing) + ePROTOCOL_SDOWNLOAD_RX, // 007 Streaming download protocol (incoming) + ePROTOCOL_SDOWNLOAD_TX, // 008 Streaming download protocol (outgoing) + ePROTOCOL_QDL_RX, // 009 QDL streaming protocol (incoming) + ePROTOCOL_QDL_TX, // 010 QDL streaming protocol (outgoing) + + ePROTOCOL_DSE_QDU_CMD = 30, // 030 Device update protocol (command, TX) + ePROTOCOL_DSE_QDU_RSP, // 031 Device update protocol (response, RX) + ePROTOCOL_DSE_QDU_EVT, // 032 Device update protocol (event, RX) + ePROTOCOL_DSE_QMBE_CMD, // 033 MBB extensions protocol (command, TX) + ePROTOCOL_DSE_QMBE_RSP, // 034 MBB extensions protocol (response, RX) + ePROTOCOL_DSE_QMBE_EVT, // 035 MBB extensions protocol (event, RX) + ePROTOCOL_DSE_QMUX_CMD, // 036 Tunneled QMUX protocol (command, TX) + ePROTOCOL_DSE_QMUX_RSP, // 037 Tunneled QMUX protocol (response, RX) + ePROTOCOL_DSE_QMUX_EVT, // 038 Tunneled QMUX protocol (event, RX) + + ePROTOCOL_QMI_CTL_RX = 60, // 060 QMI CTL protocol (incoming) + ePROTOCOL_QMI_CTL_TX, // 061 QMI CTL protocol (outgoing) + ePROTOCOL_QMI_WDS_RX, // 062 QMI WDS protocol (incoming) + ePROTOCOL_QMI_WDS_TX, // 063 QMI WDS protocol (outgoing) + ePROTOCOL_QMI_DMS_RX, // 064 QMI DMS protocol (incoming) + ePROTOCOL_QMI_DMS_TX, // 065 QMI DMS protocol (outgoing) + ePROTOCOL_QMI_NAS_RX, // 066 QMI NAS protocol (incoming) + ePROTOCOL_QMI_NAS_TX, // 067 QMI NAS protocol (outgoing) + ePROTOCOL_QMI_QOS_RX, // 068 QMI QOS protocol (incoming) + ePROTOCOL_QMI_QOS_TX, // 069 QMI QOS protocol (outgoing) + ePROTOCOL_QMI_WMS_RX, // 070 QMI WMS protocol (incoming) + ePROTOCOL_QMI_WMS_TX, // 071 QMI WMS protocol (outgoing) + ePROTOCOL_QMI_PDS_RX, // 072 QMI PDS protocol (incoming) + ePROTOCOL_QMI_PDS_TX, // 073 QMI PDS protocol (outgoing) + ePROTOCOL_QMI_AUTH_RX, // 074 QMI AUTH protocol (incoming) + ePROTOCOL_QMI_AUTH_TX, // 075 QMI AUTH protocol (outgoing) + ePROTOCOL_QMI_AT_RX, // 076 QMI AUTH protocol (incoming) + ePROTOCOL_QMI_AT_TX, // 077 QMI AUTH protocol (outgoing) + ePROTOCOL_QMI_VOICE_RX, // 078 QMI Voice protocol (incoming) + ePROTOCOL_QMI_VOICE_TX, // 079 QMI Voice protocol (outgoing) + ePROTOCOL_QMI_CAT2_RX, // 080 QMI CAT (new) protocol (incoming) + ePROTOCOL_QMI_CAT2_TX, // 081 QMI CAT (new) protocol (outgoing) + ePROTOCOL_QMI_UIM_RX, // 082 QMI UIM protocol (incoming) + ePROTOCOL_QMI_UIM_TX, // 083 QMI UIM protocol (outgoing) + ePROTOCOL_QMI_PBM_RX, // 084 QMI PBM protocol (incoming) + ePROTOCOL_QMI_PBM_TX, // 085 QMI PBM protocol (outgoing) + ePROTOCOL_QMI_QCHAT_RX, // 086 QMI QCHAT protocol (incoming) + ePROTOCOL_QMI_QCHAT_TX, // 087 QMI QCHAT protocol (outgoing) + ePROTOCOL_QMI_RMTFS_RX, // 088 QMI RMTFS protocol (incoming) + ePROTOCOL_QMI_RMTFS_TX, // 089 QMI RMTFS protocol (outgoing) + ePROTOCOL_QMI_TEST_RX, // 090 QMI Test protocol (incoming) + ePROTOCOL_QMI_TEST_TX, // 091 QMI Test protocol (outgoing) + ePROTOCOL_QMI_LOC_RX, // 092 QMI LOC protocol (incoming) + ePROTOCOL_QMI_LOC_TX, // 093 QMI LOC protocol (outgoing) + ePROTOCOL_QMI_SAR_RX, // 094 QMI PBM protocol (incoming) + ePROTOCOL_QMI_SAR_TX, // 095 QMI PBM protocol (outgoing) + ePROTOCOL_QMI_IMSS_RX, // 096 QMI IMSS protocol (incoming) + ePROTOCOL_QMI_IMSS_TX, // 097 QMI IMSS protocol (outgoing) + ePROTOCOL_QMI_ADC_RX, // 098 QMI ADC protocol (incoming) + ePROTOCOL_QMI_ADC_TX, // 099 QMI ADC protocol (outgoing) + ePROTOCOL_QMI_CSD_RX, // 100 QMI CSD protocol (incoming) + ePROTOCOL_QMI_CSD_TX, // 101 QMI CSD protocol (outgoing) + ePROTOCOL_QMI_MFS_RX, // 102 QMI MFS protocol (incoming) + ePROTOCOL_QMI_MFS_TX, // 103 QMI MFS protocol (outgoing) + ePROTOCOL_QMI_TIME_RX, // 104 QMI TIME protocol (incoming) + ePROTOCOL_QMI_TIME_TX, // 105 QMI TIME protocol (outgoing) + ePROTOCOL_QMI_TS_RX, // 106 QMI TS protocol (incoming) + ePROTOCOL_QMI_TS_TX, // 107 QMI TS protocol (outgoing) + ePROTOCOL_QMI_TMD_RX, // 108 QMI TMD protocol (incoming) + ePROTOCOL_QMI_TMD_TX, // 109 QMI TMD protocol (outgoing) + ePROTOCOL_QMI_SAP_RX, // 110 QMI SAP protocol (incoming) + ePROTOCOL_QMI_SAP_TX, // 111 QMI SAP protocol (outgoing) + ePROTOCOL_QMI_WDA_RX, // 112 QMI WDA protocol (incoming) + ePROTOCOL_QMI_WDA_TX, // 113 QMI WDA protocol (outgoing) + ePROTOCOL_QMI_TSYNC_RX, // 114 QMI TSYNC protocol (incoming) + ePROTOCOL_QMI_TSYNC_TX, // 115 QMI TSYNC protocol (outgoing) + ePROTOCOL_QMI_RFSA_RX, // 116 QMI RFSA protocol (incoming) + ePROTOCOL_QMI_RFSA_TX, // 117 QMI RFSA protocol (outgoing) + ePROTOCOL_QMI_CSVT_RX, // 118 QMI CSVT protocol (incoming) + ePROTOCOL_QMI_CSVT_TX, // 119 QMI CSVT protocol (outgoing) + ePROTOCOL_QMI_QCMAP_RX, // 120 QMI QCMAP protocol (incoming) + ePROTOCOL_QMI_QCMAP_TX, // 121 QMI QCMAP protocol (outgoing) + ePROTOCOL_QMI_IMSP_RX, // 122 QMI IMSP protocol (incoming) + ePROTOCOL_QMI_IMSP_TX, // 123 QMI IMSP protocol (outgoing) + ePROTOCOL_QMI_IMSVT_RX, // 124 QMI IMSVT protocol (incoming) + ePROTOCOL_QMI_IMSVT_TX, // 125 QMI IMSVT protocol (outgoing) + ePROTOCOL_QMI_IMSA_RX, // 126 QMI IMSA protocol (incoming) + ePROTOCOL_QMI_IMSA_TX, // 127 QMI IMSA protocol (outgoing) + ePROTOCOL_QMI_COEX_RX, // 128 QMI COEX protocol (incoming) + ePROTOCOL_QMI_COEX_TX, // 129 QMI COEX protocol (outgoing) + ePROTOCOL_QMI_35_RX, // 130 QMI service ID 35 protocol (incoming) + ePROTOCOL_QMI_35_TX, // 131 QMI service ID 35 protocol (outgoing) + ePROTOCOL_QMI_PDC_RX, // 132 QMI PDC protocol (incoming) + ePROTOCOL_QMI_PDC_TX, // 133 QMI PDC protocol (outgoing) + ePROTOCOL_QMI_37_RX, // 134 QMI service ID 37 protocol (incoming) + ePROTOCOL_QMI_37_TX, // 135 QMI service ID 37 protocol (outgoing) + ePROTOCOL_QMI_STX_RX, // 136 QMI STX protocol (incoming) + ePROTOCOL_QMI_STX_TX, // 137 QMI STX protocol (outgoing) + ePROTOCOL_QMI_BIT_RX, // 138 QMI BIT protocol (incoming) + ePROTOCOL_QMI_BIT_TX, // 139 QMI BIT protocol (outgoing) + ePROTOCOL_QMI_IMSRTP_RX, // 140 QMI IMSRTP protocol (incoming) + ePROTOCOL_QMI_IMSRTP_TX, // 141 QMI IMSRTP protocol (outgoing) + ePROTOCOL_QMI_RFRPE_RX, // 142 QMI RFRPE protocol (incoming) + ePROTOCOL_QMI_RFRPE_TX, // 143 QMI RFRPE protocol (outgoing) + ePROTOCOL_QMI_DSD_RX, // 144 QMI DSD protocol (incoming) + ePROTOCOL_QMI_DSD_TX, // 145 QMI DSD protocol (outgoing) + ePROTOCOL_QMI_SSCTL_RX, // 146 QMI SSCTL protocol (incoming) + ePROTOCOL_QMI_SSCTL_TX, // 147 QMI SSCTL protocol (outgoing) + + ePROTOCOL_QMI_CAT_RX = 508, // 508 QMI CAT protocol (incoming) + ePROTOCOL_QMI_CAT_TX, // 509 QMI CAT protocol (outgoing) + ePROTOCOL_QMI_RMS_RX, // 510 QMI RMS protocol (incoming) + ePROTOCOL_QMI_RMS_TX, // 511 QMI RMS protocol (outgoing) + ePROTOCOL_QMI_OMA_RX, // 512 QMI OMA protocol (incoming) + ePROTOCOL_QMI_OMA_TX, // 513 QMI OMA protocol (outgoing) + + ePROTOCOL_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eProtocolType validity check + +PARAMETERS: + pt [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eProtocolType pt ) +{ + bool retVal = false; + if ( (pt > ePROTOCOL_ENUM_BEGIN && pt <= ePROTOCOL_QDL_TX) + || (pt >= ePROTOCOL_DSE_QDU_CMD && pt <= ePROTOCOL_DSE_QMUX_EVT) + || (pt >= ePROTOCOL_QMI_CTL_RX && pt <= ePROTOCOL_QMI_RFRPE_TX) + || (pt >= ePROTOCOL_QMI_CAT_RX && pt < ePROTOCOL_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================== +METHOD: + IsQMIProtocol (Inline Method) + +DESCRIPTION: + Does the passed in value represent a QMI protocol? + +PARAMETERS: + pt [ I ] - Enum value being checked + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsQMIProtocol( eProtocolType pt ) +{ + bool retVal = false; + if ( (pt >= ePROTOCOL_QMI_CTL_RX && pt <= ePROTOCOL_QMI_RFRPE_TX) + || (pt >= ePROTOCOL_QMI_CAT_RX && pt < ePROTOCOL_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================== +METHOD: + IsQMIProtocolRX (Inline Method) + +DESCRIPTION: + Does the passed in value represent a QMI protocol and if so in the + incoming direction? + +PARAMETERS: + pt [ I ] - Enum value being checked + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsQMIProtocolRX( eProtocolType pt ) +{ + bool retVal = false; + + // QMI protocol values that are even are RX + if ( (IsQMIProtocol( pt ) == true) + && ((DWORD)pt % 2 == 0) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================== +METHOD: + IsQMIProtocolTX (Inline Method) + +DESCRIPTION: + Does the passed in value represent a QMI protocol and if so in the + outgoing direction? + +PARAMETERS: + pt [ I ] - Enum value being checked + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsQMIProtocolTX( eProtocolType pt ) +{ + bool retVal = false; + + // QMI protocol values that are odd are TX + if ( (IsQMIProtocol( pt ) == true) + && ((DWORD)pt % 2 == 1) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================== +METHOD: + IsDSEProtocol (Inline Method) + +DESCRIPTION: + Does the passed in value represent a DSE protocol? + +PARAMETERS: + pt [ I ] - Enum value being checked + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsDSEProtocol( eProtocolType pt ) +{ + bool retVal = false; + if (pt >= ePROTOCOL_DSE_QDU_CMD && pt <= ePROTOCOL_DSE_QMUX_EVT) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================== +METHOD: + IsDSEProtocolCmd (Inline Method) + +DESCRIPTION: + Does the passed in value represent a DSE protocol and if so is it a + command? + +PARAMETERS: + pt [ I ] - Enum value being checked + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsDSEProtocolCmd( eProtocolType pt ) +{ + bool retVal = false; + + if ( (IsDSEProtocol( pt ) == true) + && ((DWORD)pt % 3 == 0) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================== +METHOD: + IsDSEProtocolRsp (Inline Method) + +DESCRIPTION: + Does the passed in value represent a DSE protocol and if so is it a + response? + +PARAMETERS: + pt [ I ] - Enum value being checked + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsDSEProtocolRsp( eProtocolType pt ) +{ + bool retVal = false; + + if ( (IsDSEProtocol( pt ) == true) + && ((DWORD)pt % 3 == 1) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================== +METHOD: + IsDSEProtocolEvt (Inline Method) + +DESCRIPTION: + Does the passed in value represent a DSE protocol and if so is it an + event? + +PARAMETERS: + pt [ I ] - Enum value being checked + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsDSEProtocolEvt( eProtocolType pt ) +{ + bool retVal = false; + + if ( (IsDSEProtocol( pt ) == true) + && ((DWORD)pt % 3 == 2) ) + { + retVal = true; + } + + return retVal; +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolLog.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolLog.cpp new file mode 100644 index 0000000..43556df --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolLog.cpp @@ -0,0 +1,189 @@ +/*=========================================================================== +FILE: + ProtocolLog.h + +DESCRIPTION: + Simple protocol 'log' class definition + +PUBLIC CLASSES AND METHODS: + cProtocolLog + This class stores protocol buffers in to a flat array (actually a + double-ended queue) so that they can be accessed by other objects + during the flow of normal processing. Note that the storage is + in-memory and therefore finite + +Copyright (c) 2013, 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 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 "ProtocolLog.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// The maximum number of in-memory buffers we allow +const ULONG MAX_PROTOCOL_BUFFERS = 1024 * 16; + +/*=========================================================================*/ +// cProtocolLog Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cProtocolLog (Public Method) + +DESCRIPTION: + Constructor + +PARAMETERS: + maxBuffers [ I ] - Maximum number of buffers to store in the log + +RETURN VALUE: + None +===========================================================================*/ +cProtocolLog::cProtocolLog( ULONG maxBuffers ) + : mLog( maxBuffers > MAX_PROTOCOL_BUFFERS ? MAX_PROTOCOL_BUFFERS : maxBuffers, + true ) +{ + // Nothing to do +} + +/*=========================================================================== +METHOD: + ~cProtocolLog (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +cProtocolLog::~cProtocolLog() +{ + // Empty out the log + Clear(); +} + +/*=========================================================================== +METHOD: + AddBuffer (Public Method) + +DESCRIPTION: + Add an protocol buffer to the end of the log + +PARAMETERS: + buff [ I ] - Protocol buffer to add + +RETURN VALUE: + ULONG - Index of newly added buffer (INVALID_LOG_INDEX upon failure) +===========================================================================*/ +ULONG cProtocolLog::AddBuffer( sProtocolBuffer & buf ) +{ + ULONG idx = INVALID_LOG_INDEX; + if (buf.IsValid() == false) + { + return idx; + } + + bool bRC = mLog.AddElement( buf, idx ); + if (bRC == false) + { + idx = INVALID_LOG_INDEX; + } + + return idx; +} + +/*=========================================================================== +METHOD: + GetBuffer (Public Method) + +DESCRIPTION: + Return the protocol buffer at the given index from the log + +PARAMETERS: + idx [ I ] - Index of protocol buffer to obtain + +RETURN VALUE: + sProtocolBuffer - Protocol buffer +===========================================================================*/ +sProtocolBuffer cProtocolLog::GetBuffer( ULONG idx ) const +{ + sProtocolBuffer buf; + mLog.GetElement( idx, buf ); + return buf; +} + +/*=========================================================================== +METHOD: + GetSignalEvent (Public Method) + +DESCRIPTION: + Return the underlying signal event, which will be set when + the log is updated. + +RETURN VALUE: + cEvent - Signal event +===========================================================================*/ +cEvent & cProtocolLog::GetSignalEvent() const +{ + return mLog.GetSignalEvent(); +} + +/*=========================================================================== +METHOD: + GetCount (Public Method) + +DESCRIPTION: + Return the total number of buffers added to the log + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cProtocolLog::GetCount() const +{ + return mLog.GetTotalCount(); +} + +/*=========================================================================== +METHOD: + Clear (Public Method) + +DESCRIPTION: + Clear the log + +RETURN VALUE: + None +===========================================================================*/ +void cProtocolLog::Clear() +{ + mLog.EmptyQueue(); +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolLog.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolLog.h new file mode 100644 index 0000000..024defc --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolLog.h @@ -0,0 +1,90 @@ +/*=========================================================================== +FILE: + ProtocolLog.h + +DESCRIPTION: + Simple protocol 'log' class declaration + +PUBLIC CLASSES AND METHODS: + cProtocolLog + This class stores protocol buffers in to a flat array (actually a + double-ended queue) so that they can be accessed by other objects + during the flow of normal processing. Note that the storage is + in-memory and therefore finite + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "ProtocolBuffer.h" +#include "SyncQueue.h" + +#include + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- +const ULONG INVALID_LOG_INDEX = ULONG_MAX; + +/*=========================================================================*/ +// Class cProtocolLog +/*=========================================================================*/ +class cProtocolLog +{ + public: + // Constructor + cProtocolLog( ULONG maxBuffers ); + + // Destructor + virtual ~cProtocolLog(); + + // Add an protocol buffer to the end of the log + virtual ULONG AddBuffer( sProtocolBuffer & buf ); + + // Return the protocol buffer at the given index from the log + virtual sProtocolBuffer GetBuffer( ULONG idx ) const; + + // Return the underlying signal event + virtual cEvent & GetSignalEvent() const; + + // Return the total number of buffers added to the log + virtual ULONG GetCount() const; + + // Clear the log + virtual void Clear(); + + protected: + /* The underlying 'log' */ + cSyncQueue mLog; +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolNotification.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolNotification.cpp new file mode 100644 index 0000000..eec26e6 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolNotification.cpp @@ -0,0 +1,170 @@ +/*=========================================================================== +FILE: + ProtocolNotification.cpp + +DESCRIPTION: + Implementation of cProtocolNotification base class and derivations + +PUBLIC CLASSES AND METHODS: + sProtocolNotificationEvent + Generic protocol event notification structure + + cProtocolNotification + This abstract base class provides notification of protocol server + events sent from the protocol server to protocol server clients + + cProtocolQueueNotification + This class provides notification via a cSyncQueue object + populated with sProtocolNotificationEvent objects + +Copyright (c) 2013, 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 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 "ProtocolNotification.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +/*=========================================================================*/ +// cProtocolQueueNotification Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cProtocolQueueNotification (Public Method) + +DESCRIPTION: + Constructor + +PARAMETERS: + pSQ [ I ] - Sync queue to utilize + +RETURN VALUE: + None +===========================================================================*/ +cProtocolQueueNotification::cProtocolQueueNotification( + cSyncQueue * pSQ ) + : mpSQ( pSQ ) +{ + // Nothing to do +} + +/*=========================================================================== +METHOD: + cProtocolQueueNotification (Public Method) + +DESCRIPTION: + Copy constructor + +PARAMETERS: + notifier [ I ] - Notifier to base the new one on + +RETURN VALUE: + None +===========================================================================*/ +cProtocolQueueNotification::cProtocolQueueNotification( + const cProtocolQueueNotification & notifier ) + : mpSQ( notifier.mpSQ ) +{ + // Nothing to do +} + +/*=========================================================================== +METHOD: + ~cProtocolQueueNotification (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +cProtocolQueueNotification::~cProtocolQueueNotification() +{ + mpSQ = 0; +} + +/*=========================================================================== +METHOD: + Clone (Public Method) + +DESCRIPTION: + Return an allocated copy of this object downcasted to our base class + +RETURN VALUE: + cProtocolNotification * : Cloned object (0 on error) +===========================================================================*/ +cProtocolNotification * cProtocolQueueNotification::Clone() const +{ + cProtocolQueueNotification * pCopy = 0; + + try + { + pCopy = new cProtocolQueueNotification( *this ); + } + catch (...) + { + // Simply return 0 + } + + return ((cProtocolNotification *)pCopy); +} + +/*=========================================================================== +METHOD: + Notify (Public Method) + +DESCRIPTION: + Notify view of a protocol event by adding notification structure to + the underlying sync queue (which will provide the notification + by signalling an event) + +PARAMETERS: + eventType [ I ] - Protocol event type + param1 [ I ] - Event type specific argument (see header description) + param2 [ I ] - Event type specific argument (see header description) + +RETURN VALUE: + None +===========================================================================*/ +void cProtocolQueueNotification::Notify( + eProtocolEventType eventType, + DWORD param1, + DWORD param2 ) const +{ + sProtocolNotificationEvent evt( eventType, param1, param2 ); + if (evt.IsValid() == true && mpSQ != 0 && mpSQ->IsValid() == true) + { + sProtocolNotificationEvent elem( eventType, param1, param2 ); + mpSQ->AddElement( elem ); + } +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolNotification.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolNotification.h new file mode 100644 index 0000000..c76dd59 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolNotification.h @@ -0,0 +1,236 @@ +/*=========================================================================== +FILE: + ProtocolNotification.h + +DESCRIPTION: + Declaration of cProtocolNotification base class and derivations + +PUBLIC CLASSES AND METHODS: + sProtocolNotificationEvent + Generic protocol event notification structure + + cProtocolNotification + This abstract base class provides notification of protocol server + events sent from the protocol server to protocol server clients + + cProtocolQueueNotification + This class provides notification via a cSyncQueue object + populated with sProtocolNotificationEvent objects + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "SyncQueue.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- +enum eProtocolEventType +{ + ePROTOCOL_EVT_BEGIN = -1, + + ePROTOCOL_EVT_REQ_ERR, // There was an error sending the request + ePROTOCOL_EVT_REQ_SENT, // The request has been sent + + ePROTOCOL_EVT_RSP_ERR, // There was an error receiving the response + ePROTOCOL_EVT_RSP_RECV, // The response has been received + + ePROTOCOL_EVT_AUX_TU_SENT, // Auxiliary data transmission unit sent + + ePROTOCOL_EVT_END +}; + +// NOTE: The arguments for each event are currently as follows: +// +// ePROTOCOL_EVT_REQ_ERR +// param1: Request ID +// param2: Error code +// +// ePROTOCOL_EVT_REQ_SENT +// param1: Request ID +// param2: Index of request buffer in associated protocol log + +// ePROTOCOL_EVT_RSP_ERR +// param1: Request ID +// param2: Error code +// +// ePROTOCOL_EVT_RSP_RECV +// param1: Request ID +// param2: Index of response buffer in associated protocol log +// +// ePROTOCOL_EVT_AUX_TU_SENT +// param1: Request ID +// param2: Size of transmission unit + +// NOTE: To handle protoocl events using the Windows notifier add the following +// prototype to your Window class header file: +// +// afx_msg LRESULT OnProtocolEvent( +// WPARAM wParam, +// LPARAM lParam ); +// +// Then add an entry to the message map in your Window class source file: +// +// BEGIN_MESSAGE_MAP( CView, CChildView ) +// ON_MESSAGE( PROTOCOL_WM_BASE + (ULONG)ePROTOCOL_EVT_XXX, OnProtocolEvent ) +// END_MESSAGE_MAP() +// +// Finally write the handler itself: +// +// LRESULT CView::OnProtocolEvent( +// WPARAM wParam, +// LPARAM lParam ) +// { +// Do something +// return 0; +// } + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eProtocolEventType validity check + +PARAMETERS: + evtType [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eProtocolEventType evtType ) +{ + bool bRC = false; + if (evtType > ePROTOCOL_EVT_BEGIN && evtType < ePROTOCOL_EVT_END) + { + bRC = true; + } + + return bRC; +}; + +/*=========================================================================*/ +// Struct sProtocolNotificationEvent +/*=========================================================================*/ +struct sProtocolNotificationEvent +{ + public: + // (Inline) Default constructor (results in invalid object) + sProtocolNotificationEvent() + : mEventType( ePROTOCOL_EVT_BEGIN ), + mParam1( 0 ), + mParam2( 0 ) + { + // Nothing to do + }; + + // (Inline) Parameter constructor + sProtocolNotificationEvent( + eProtocolEventType eventType, + DWORD param1, + DWORD param2 ) + : mEventType( eventType ), + mParam1( param1 ), + mParam2( param2 ) + { + // Nothing to do + }; + + // (Inline) Is this object valid? + bool IsValid() + { + return ::IsValid( mEventType ); + } + + /* Event type */ + eProtocolEventType mEventType; + + /* First parameter (see above) */ + DWORD mParam1; + + /* Second parameter (see above) */ + DWORD mParam2; +}; + +/*=========================================================================*/ +// Class cProtocolNotification +// +// This abstract base class provides notification of protocol server +// events sent from the protocol server to protocol server clients +/*=========================================================================*/ +class cProtocolNotification +{ + public: + // Return an allocated copy of this object + virtual cProtocolNotification * Clone() const = 0; + + // Notify view of a protocol event + virtual void Notify( + eProtocolEventType eventType, + DWORD param1, + DWORD param2 ) const = 0; +}; + +/*=========================================================================*/ +// Class cProtocolQueueNotification +// +// This class provides notification via a cSyncQueue object +// populated with sProtocolNotificationEvent objects +/*=========================================================================*/ +class cProtocolQueueNotification : public cProtocolNotification +{ + public: + // Constructor + cProtocolQueueNotification( cSyncQueue * pSQ ); + + // Copy constructor + cProtocolQueueNotification( const cProtocolQueueNotification & notifier ); + + // Destructor + virtual ~cProtocolQueueNotification(); + + // Return a copy of this object + virtual cProtocolNotification * Clone() const; + + // Notify view of a MIS event + virtual void Notify( + eProtocolEventType eventType, + DWORD param1, + DWORD param2 ) const; + + protected: + /* Event notification queue */ + mutable cSyncQueue * mpSQ; +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolRequest.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolRequest.cpp new file mode 100644 index 0000000..c001415 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolRequest.cpp @@ -0,0 +1,253 @@ +/*=========================================================================== +FILE: + ProtocolRequest.cpp + +DESCRIPTION: + Generic protocol request/command related structures and + affliated methods, these structures are used by clients of + the protocol server to specify outgoing requests + +PUBLIC CLASSES AND METHODS: + sProtocolRequest + +Copyright (c) 2013, 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 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 "ProtocolRequest.h" +#include "ProtocolNotification.h" +#include "ProtocolServer.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// Default protocol request timeout +const ULONG DEFAULT_REQ_TIMEOUT = 1000; + +// Minimum and maximum allowable timeout values (in milliseconds) +const ULONG MIN_REQ_TIMEOUT = 100; +const ULONG MAX_REQ_TIMEOUT = 300000; + +// Minimum number of attempts a request can be scheduled for +const ULONG MIN_REQ_ATTEMPTS = 1; + +// Value to indicate that a request is to be sent out indefinately +const ULONG INFINITE_REQS = 0xFFFFFFFF; + +// Minimum/default amount of time between repeated requests (in milliseconds) +const ULONG MIN_REQ_FREQUENCY = 10; +const ULONG DEFAULT_REQ_FREQUENCY = 100; + +/*=========================================================================*/ +// sProtocolRequest Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + sProtocolRequest + +DESCRIPTION: + Parameterized constructor + +PARAMETERS: + pBuffer [ I ] - Shareable buffer representing the request (must be + valid) + + schedule [ I ] - When (from now, in milliseconds) to send the first + request, this isn't a hard value as the request is + only guaranteed to go out after this time elapses + + timeout [ I ] - Milliseconds to wait for a response to an individual + request before declaring a timeout. Regardless of + what is passed in the timeout value used will be + between MIN/MAX_REQ_TIMEOUT + + requests [ I ] - Number of request attempts to make, this isn't a + retry count rather this value is used to specify + repeating requests. Regardless of what is passed in + the requests value used will be at least + MIN_REQ_ATTEMPTS + + frequency [ I ] - If the 'requests' value is greater than the + MIN_REQ_ATTEMPTS than this represents the amount of + time to wait between requests (from the completion of + the last request attempt, in milliseconds), again this + isn't a hard value. Regardless of what is passed in + the frequency value used will be at least + MIN_REQ_FREQUENCY + + pNotifier [ I ] - Status notification mechanism (may be 0) + + +RETURN VALUE: + None +===========================================================================*/ +sProtocolRequest::sProtocolRequest( + sSharedBuffer * pBuffer, + ULONG schedule, + ULONG timeout, + ULONG requests, + ULONG frequency, + cProtocolNotification * pNotifier ) + : sProtocolBuffer( pBuffer ), + mSchedule( schedule ), + mTimeout( DEFAULT_REQ_TIMEOUT ), + mRequests( MIN_REQ_ATTEMPTS ), + mFrequency( DEFAULT_REQ_FREQUENCY ), + mpNotifier( 0 ), + mpAuxData( 0 ), + mAuxDataSize( 0 ), + mbTXOnly( false ) +{ + // Constrain requested timeout to allowable range + if (timeout < MIN_REQ_TIMEOUT) + { + timeout = MIN_REQ_TIMEOUT; + } + + if (timeout > MAX_REQ_TIMEOUT) + { + timeout = MAX_REQ_TIMEOUT; + } + + mTimeout = timeout; + + // Constrain request attempts + if (requests >= MIN_REQ_ATTEMPTS) + { + mRequests = requests; + } + + // Constrain frequency + if (frequency >= MIN_REQ_FREQUENCY) + { + mFrequency = frequency; + } + + // Clone notifier? + if (pNotifier != 0) + { + mpNotifier = pNotifier->Clone(); + } +} + +/*=========================================================================== +METHOD: + sProtocolRequest + +DESCRIPTION: + Parameterized constructor (notification with defaults) + +PARAMETERS: + pBuffer [ I ] - Shareable buffer representing the request (must be + valid) + + pNotifier [ I ] - Status notification mechanism (may be 0) + + +RETURN VALUE: + None +===========================================================================*/ +sProtocolRequest::sProtocolRequest( + sSharedBuffer * pBuffer, + cProtocolNotification * pNotifier ) + : sProtocolBuffer( pBuffer ), + mSchedule( 0 ), + mTimeout( DEFAULT_REQ_TIMEOUT ), + mRequests( MIN_REQ_ATTEMPTS ), + mFrequency( DEFAULT_REQ_FREQUENCY ), + mpNotifier( pNotifier ), + mpAuxData( 0 ), + mAuxDataSize( 0 ), + mbTXOnly( false ) +{ + // Clone notifier? + if (pNotifier != 0) + { + mpNotifier = pNotifier->Clone(); + } + + Validate(); +} + +/*=========================================================================== +METHOD: + sProtocolRequest + +DESCRIPTION: + Copy constructor + +PARAMETERS: + req [ I ] - Request to copy + +RETURN VALUE: + None +===========================================================================*/ +sProtocolRequest::sProtocolRequest( const sProtocolRequest & req ) + : sProtocolBuffer( req ), + mSchedule( req.mSchedule ), + mTimeout( req.mTimeout ), + mRequests( req.mRequests ), + mFrequency( req.mFrequency ), + mpNotifier( 0 ), + mpAuxData( req.mpAuxData ), + mAuxDataSize( req.mAuxDataSize ), + mbTXOnly( req.mbTXOnly ) +{ + // Clone notifier? + if (req.mpNotifier != 0) + { + mpNotifier = req.mpNotifier->Clone(); + } + + Validate(); +} + +/*=========================================================================== +METHOD: + ~sProtocolRequest + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +sProtocolRequest::~sProtocolRequest() +{ + // Delete cloned notifier? + if (mpNotifier != 0) + { + delete mpNotifier; + mpNotifier = 0; + } +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolRequest.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolRequest.h new file mode 100644 index 0000000..c0da8e9 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolRequest.h @@ -0,0 +1,192 @@ +/*=========================================================================== +FILE: + ProtocolRequest.h + +DESCRIPTION: + Generic protocol request/command related structures and + affliated methods, these structures are used by clients of + the protocol server to specify outgoing protocol requests + +PUBLIC CLASSES AND METHODS: + sProtocolRequest + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "ProtocolBuffer.h" + +//--------------------------------------------------------------------------- +// Forward Declarations +//--------------------------------------------------------------------------- +class cProtocolNotification; + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// Default protocol request timeout +extern const ULONG DEFAULT_REQ_TIMEOUT; + +// Minimum and maximum allowable timeout values (in milliseconds) +extern const ULONG MIN_REQ_TIMEOUT; +extern const ULONG MAX_REQ_TIMEOUT; + +// Minimum number of attempts a request can be scheduled for +extern const ULONG MIN_REQ_ATTEMPTS; + +// Value to indicate that a request is to be sent out indefinately +extern const ULONG INFINITE_REQS; + +// Minimum/default amount of time between repeated requests (in milliseconds) +extern const ULONG MIN_REQ_FREQUENCY; +extern const ULONG DEFAULT_REQ_FREQUENCY; + +/*=========================================================================*/ +// Struct sProtocolRequest +// +// Structure to represent a generic request packet, including all the +// information needed to schedule the request, send the request, and +// (optionally) reschedule the request for another TX/RX attempt +// +// The default parameters schedule an immediate request (indicated by +// passing in '0' for the schedule parameter) to be sent once with +// the default timeout value +/*=========================================================================*/ +struct sProtocolRequest : public sProtocolBuffer +{ + public: + // Parameterized constructor + sProtocolRequest( + sSharedBuffer * pBuffer, + ULONG schedule = 0, + ULONG timeout = DEFAULT_REQ_TIMEOUT, + ULONG requests = MIN_REQ_ATTEMPTS, + ULONG frequency = DEFAULT_REQ_FREQUENCY, + cProtocolNotification * pNotifier = 0 ); + + // Parameterized constructor (notification with defaults) + sProtocolRequest( + sSharedBuffer * pBuffer, + cProtocolNotification * pNotifier ); + + // Copy constructor + sProtocolRequest( const sProtocolRequest & req ); + + // Destructor + virtual ~sProtocolRequest(); + + // (Inline) Get schedule value (value is in milliseconds) + ULONG GetSchedule() const + { + return mSchedule; + }; + + // (Inline) Get timeout value + ULONG GetTimeout() const + { + return mTimeout; + }; + + // (Inline) Get requests value + ULONG GetRequests() const + { + return mRequests; + }; + + // (Inline) Get frequency value (value is in milliseconds) + ULONG GetFrequency() const + { + return mFrequency; + }; + + const cProtocolNotification * GetNotifier() const + { + return mpNotifier; + }; + + // (Inline) Set auxiliary data + void SetAuxiliaryData( + const BYTE * pData, + ULONG dataSz ) + { + mpAuxData = pData; + mAuxDataSize = dataSz; + }; + + // (Inline) Get auxiliary data + const BYTE * GetAuxiliaryData( ULONG & dataSz ) const + { + dataSz = mAuxDataSize; + return mpAuxData; + }; + + // (Inline) Set TX only flag + void SetTXOnly() + { + mbTXOnly = true; + }; + + // (Inline) Get TX only flag + bool IsTXOnly() const + { + return mbTXOnly; + }; + + protected: + /* Schedule (approximately when to send the initial request) */ + ULONG mSchedule; + + /* Timeout value for receiving a response */ + ULONG mTimeout; + + /* Number of requests to schedule (must be at least one) */ + ULONG mRequests; + + /* Frequency (approximately how long to wait before next request) */ + ULONG mFrequency; + + /* Notification object */ + cProtocolNotification * mpNotifier; + + /* Auxiliary data */ + const BYTE * mpAuxData; + + /* Auxilary data size */ + ULONG mAuxDataSize; + + /* TX only (i.e. do not wait for a response) ? */ + bool mbTXOnly; +}; + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolServer.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolServer.cpp new file mode 100644 index 0000000..ae5e414 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolServer.cpp @@ -0,0 +1,1749 @@ +/*=========================================================================== +FILE: + ProtocolServer.cpp + +DESCRIPTION: + Generic protocol packet server + +PUBLIC CLASSES AND METHODS: + cProtocolServer + Abstract base class for protocol servers + +Copyright (c) 2013, 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 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 "ProtocolServer.h" +#include "ProtocolNotification.h" + +#include + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// Invalid request ID +const ULONG INVALID_REQUEST_ID = 0; + +// Default activity timeout value +const ULONG DEFAULT_WAIT = 100; + +// MTU (Maximum Transmission Unit) for auxiliary data (QC USB imposed) +const ULONG MAX_AUX_MTU_SIZE = 1024 * 256; + +// USB's MaxPacketSize +const ULONG MAX_PACKET_SIZE = 512; + +// Maximum amount of time to wait on external access synchronization object +#ifdef DEBUG + // For the sake of debugging do not be so quick to assume failure + const ULONG DEADLOCK_TIME = 180000; +#else + const ULONG DEADLOCK_TIME = 10000; +#endif + +// Maximum amount of time to wait for the protocol server to process a command +const ULONG COMMAND_TIME = DEADLOCK_TIME; + +/*=========================================================================*/ +// Free Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + ScheduleThread (Free Method) + +DESCRIPTION: + Watch schedule for event to process or timeout + +PARAMETERS: + pArg [ I ] - The protocol server object + +RETURN VALUE: + void * - thread exit value (always NULL) +===========================================================================*/ +void * ScheduleThread( PVOID pArg ) +{ + // Do we have a server? + cProtocolServer * pServer = (cProtocolServer *)pArg; + if (pServer == 0) + { + TRACE( "ScheduleThread started with empty pArg." + " Unable to locate cProtocolServer\n" ); + + ASSERT( 0 ); + return NULL; + } + + TRACE( "Schedule thread [%lu] started\n", + pthread_self() ); + + // Default wait event + timespec toTime = TimeIn( DEFAULT_WAIT ); + + // Return value checking + int nRet; + + while (pServer->mbExiting == false) + { + DWORD nTemp; + nRet = pServer->mThreadScheduleEvent.Wait( TimeFromNow( toTime ), nTemp ); + if (nRet != 0 && nRet != ETIME) + { + // Error condition + TRACE( "ScheduleThread [%lu] ScheduleThread wait error %d, %s\n", + pthread_self(), + nRet, + strerror( nRet ) ); + break; + } + + // Time to exit? + if (pServer->mbExiting == true) + { + break; + } + + // Get Schedule Mutex (non-blocking) + nRet = pthread_mutex_trylock( &pServer->mScheduleMutex ); + if (nRet == EBUSY) + { + // Not an error, we're just too slow + // Someone else got to the ScheduleMutex before us + // We'll wait for the signal again + toTime = TimeIn( DEFAULT_WAIT ); + TRACE( "ScheduleThread [%lu] unable to lock ScheduleMutex\n", + pthread_self() ); + continue; + } + else if (nRet != 0) + { + // Error condition + TRACE( "ScheduleThread [%lu] mScheduleMutex error %d, %s\n", + pthread_self(), + nRet, + strerror( nRet ) ); + break; + } + + // Verify time. In the rare event it does move backward + // it would simply place all our schedule items as due now + pServer->CheckSystemTime(); + + // Default next wait period + toTime = TimeIn( DEFAULT_WAIT ); + + timespec curTime = TimeIn( 0 ); + + if (pServer->mpActiveRequest != 0) + { + if (pServer->mpActiveRequest->mbWaitingForResponse == true) + { + // Waiting on a response, this takes priority over the next + // scheduled event + + // Has timeout expired? + if (pServer->mActiveRequestTimeout <= curTime) + { + // Response timeout + + // Note: This may clear mpActiveRequest + pServer->RxTimeout(); + } + else + { + // Active response timer is not yet due to expire + // Default timeout again, or this response's timeout? + if (pServer->mActiveRequestTimeout <= toTime) + { + toTime = pServer->mActiveRequestTimeout; + } + } + } + else + { + // This should never happen + + TRACE( "ScheduleThread() Sequencing error: " + "Active request %lu is not waiting for response ???\n", + pServer->mpActiveRequest->mID ); + + break; + } + } + + if (pServer->mpActiveRequest == 0 + && pServer->mRequestSchedule.size() > 0) + { + // No response timer active, ready to start the next + // scheduled item if due + + timespec scheduledItem = pServer->GetNextRequestTime(); + + // Is item due to be scheduled? + if (scheduledItem <= curTime) + { + // Process scheduled item + pServer->ProcessRequest(); + } + else + { + // Scheduled item is not yet due to be processed + // Default timeout again, or this item's start time? + if (scheduledItem <= toTime) + { + toTime = scheduledItem; + } + } + } + + /*TRACE( "Updated timer at %llu waiting %lu\n", + GetTickCount(), + TimeFromNow( toTime ) ); */ + + // Unlock schedule mutex + nRet = pthread_mutex_unlock( &pServer->mScheduleMutex ); + if (nRet != 0) + { + TRACE( "ScheduleThread Unable to unlock schedule mutex." + " Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + } + + TRACE( "Schedule thread [%lu] exited\n", + pthread_self() ); + + return NULL; +} + +/*=========================================================================== +METHOD: + TimeIn (Free Method) + +DESCRIPTION: + Fill timespec with the time it will be in specified milliseconds + Relative time to Absolute time + +PARAMETERS: + millis [ I ] - Milliseconds from current time + +RETURN VALUE: + timespec - resulting time (from epoc) + NOTE: tv_sec of 0 is an error +===========================================================================*/ +timespec TimeIn( ULONG millis ) +{ + timespec outTime; + + int nRC = clock_gettime( CLOCK_REALTIME, &outTime ); + if (nRC == 0) + { + // Add avoiding an overflow on (long)nsec + outTime.tv_sec += millis / 1000l; + outTime.tv_nsec += ( millis % 1000l ) * 1000000l; + + // Check if we need to carry + if (outTime.tv_nsec >= 1000000000l) + { + outTime.tv_sec += outTime.tv_nsec / 1000000000l; + outTime.tv_nsec = outTime.tv_nsec % 1000000000l; + } + } + else + { + outTime.tv_sec = 0; + outTime.tv_nsec = 0; + } + + return outTime; +} + +/*=========================================================================== +METHOD: + TimeFromNow (Free Method) + +DESCRIPTION: + Find the milliseconds from current time this timespec will occur + Absolute time to Relative time + +PARAMETERS: + time [ I ] - Absolute time + +RETURN VALUE: + Milliseconds in which absolute time will occur + 0 if time has passed or error has occured +===========================================================================*/ +ULONG TimeFromNow( timespec time ) +{ + // Assume failure + ULONG nOutTime = 0; + + timespec now; + int nRC = clock_gettime( CLOCK_REALTIME, &now ); + if (nRC == -1) + { + TRACE( "Error %d with gettime, %s\n", errno, strerror( errno ) ); + return nOutTime; + } + + if (time <= now) + { + return nOutTime; + } + + nOutTime = (time.tv_sec - now.tv_sec) * 1000l; + nOutTime += (time.tv_nsec - now.tv_nsec) / 1000000l; + + return nOutTime; +} + +/*=========================================================================== +METHOD: + GetTickCount (Free Method) + +DESCRIPTION: + Provide a number for sequencing reference, similar to the windows + ::GetTickCount(). + + NOTE: This number is based on the time since epoc, not + uptime. + +PARAMETERS: + +RETURN VALUE: + ULONGLONG - Number of milliseconds system has been up +===========================================================================*/ +ULONGLONG GetTickCount() +{ + timespec curtime = TimeIn( 0 ); + + ULONGLONG outtime = curtime.tv_sec * 1000LL; + outtime += curtime.tv_nsec / 1000000LL; + + return outtime; +} + +/*=========================================================================*/ +// cProtocolServerRxCallback Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + IOComplete (Free Method) + +DESCRIPTION: + The I/O has been completed, process the results + +PARAMETERS: + status [ I ] - Status of operation + bytesReceived [ I ] - Bytes received during operation + +RETURN VALUE: + None +===========================================================================*/ +void cProtocolServerRxCallback::IOComplete( + DWORD status, + DWORD bytesReceived ) +{ + if (mpServer != 0) + { + mpServer->RxComplete( status, bytesReceived ); + } +} + +/*=========================================================================*/ +// cProtocolServer::sProtocolReqRsp Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cProtocolServer::sProtocolReqRsp (Public Method) + +DESCRIPTION: + Constructor + +PARAMETERS: + requestInfo [ I ] - Underlying request object + requestID [ I ] - Request ID + auxDataMTU [ I ] - MTU (Maximum Transmission Unit) for auxiliary data + +RETURN VALUE: + None +===========================================================================*/ +cProtocolServer::sProtocolReqRsp::sProtocolReqRsp( + const sProtocolRequest & requestInfo, + ULONG requestID, + ULONG auxDataMTU ) + : mRequest( requestInfo ), + mID( requestID ), + mAttempts( 0 ), + mEncodedSize( requestInfo.GetSize() ), + mRequiredAuxTxs( 0 ), + mCurrentAuxTx( 0 ), + mbWaitingForResponse( false ) +{ + ULONG auxDataSz = 0; + const BYTE * pAuxData = requestInfo.GetAuxiliaryData( auxDataSz ); + + // Compute the number of required auxiliary data transmissions? + if (auxDataMTU > 0 && pAuxData != 0 && auxDataSz > 0) + { + mRequiredAuxTxs = 1; + if (auxDataSz > auxDataMTU) + { + mRequiredAuxTxs = auxDataSz / auxDataMTU; + if ((auxDataSz % auxDataMTU) != 0) + { + mRequiredAuxTxs++; + } + } + } +} + +/*=========================================================================== +METHOD: + cProtocolServer::sProtocolReqRsp (Public Method) + +DESCRIPTION: + Copy constructor + +PARAMETERS: + reqRsp [ I ] - Object being copied + +RETURN VALUE: + None +===========================================================================*/ +cProtocolServer::sProtocolReqRsp::sProtocolReqRsp( + const sProtocolReqRsp & reqRsp ) + : mRequest( reqRsp.mRequest ), + mID( reqRsp.mID ), + mAttempts( reqRsp.mAttempts ), + mEncodedSize( reqRsp.mEncodedSize ), + mRequiredAuxTxs( reqRsp.mRequiredAuxTxs ), + mCurrentAuxTx( reqRsp.mCurrentAuxTx ), + mbWaitingForResponse( reqRsp.mbWaitingForResponse ) +{ + // Nothing to do +}; + +/*=========================================================================*/ +// cProtocolServer Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cProtocolServer (Public Method) + +DESCRIPTION: + Constructor + +PARAMETERS: + rxType [ I ] - Protocol type to assign to incoming data + txType [ I ] - Protocol type to verify for outgoing data + bufferSzRx [ I ] - Size of data buffer for incoming data + logSz [ I ] - Size of log (number of buffers) + +SEQUENCING: + None (constructs sequencing objects) + +RETURN VALUE: + None +===========================================================================*/ +cProtocolServer::cProtocolServer( + eProtocolType rxType, + eProtocolType txType, + ULONG bufferSzRx, + ULONG logSz ) + : mpConnection( 0 ), + mConnectionType( eConnectionType_Begin ), + mRxCallback(), + mScheduleThreadID( 0 ), + mThreadScheduleEvent(), + mbExiting( false ), + mpServerControl( 0 ), + mLastRequestID( 1 ), + mpActiveRequest( 0 ), + mpRxBuffer( 0 ), + mRxBufferSize( bufferSzRx ), + mRxType( rxType ), + mTxType( txType ), + mLog( logSz ) +{ + mLastTime = TimeIn( 0 ); + + // Allocate receive buffer? + if (mRxBufferSize > 0) + { + mpRxBuffer = new BYTE[mRxBufferSize]; + } + + // Before continuing verify receive buffer was allocated + if (mpRxBuffer != 0) + { + // Schedule mutex + int nRet = pthread_mutex_init( &mScheduleMutex, NULL ); + if (nRet != 0) + { + TRACE( "Unable to init schedule mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return; + } + } +} + +/*=========================================================================== +METHOD: + ~cProtocolServer (Public Method) + +DESCRIPTION: + Destructor + +SEQUENCING: + None (destroys sequencing objects) + +RETURN VALUE: + None +===========================================================================*/ +cProtocolServer::~cProtocolServer() +{ + // This should have already been called, but ... + Exit(); + + // Schedule mutex + int nRet = pthread_mutex_destroy( &mScheduleMutex ); + if (nRet != 0) + { + TRACE( "Unable to destroy schedule mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + } + + // Free receive buffer + if (mpRxBuffer != 0) + { + delete [] mpRxBuffer; + mpRxBuffer = 0; + } +} + +/*=========================================================================== +METHOD: + HandleRemoveRequest (Public Method) + +DESCRIPTION: + Remove a previously added protocol request + + Note: if a request is being processed, it cannot be inturrupted + +PARAMETERS: + reqID [ I ] - Server assigned request ID + +SEQUENCING: + Calling process must have lock on mScheduleMutex + +RETURN VALUE: + bool +===========================================================================*/ +bool cProtocolServer::HandleRemoveRequest( ULONG reqID ) +{ + // Assume failure + bool bRC = false; + + // Find and erase request from request map + std::map ::iterator pReqIter; + pReqIter = mRequestMap.find( reqID ); + + if (pReqIter != mRequestMap.end()) + { + sProtocolReqRsp * pReqRsp = pReqIter->second; + if (pReqRsp != 0) + { + delete pReqRsp; + } + + mRequestMap.erase( pReqIter ); + + // Success! + bRC = true; + + // Find and erase request from schedule + bool bFound = false; + int entryIndex = -1; + + std::set ::iterator pScheduleIter; + pScheduleIter = mRequestSchedule.begin(); + + while (pScheduleIter != mRequestSchedule.end()) + { + entryIndex++; + + tSchedule entry = *pScheduleIter; + if (entry.second == reqID) + { + bFound = true; + mRequestSchedule.erase( pScheduleIter ); + break; + } + else + { + pScheduleIter++; + } + } + + // Note: schedule will be updated when mutex is unlocked/signaled + } + else if (mpActiveRequest != 0 && mpActiveRequest->mID == reqID) + { + const sProtocolRequest & req = mpActiveRequest->mRequest; + const cProtocolNotification * pNotifier = req.GetNotifier(); + + // Cancel the response timer (when active) + if (mpActiveRequest->mbWaitingForResponse == true) + { + // Schedule will be updated when mutex is unlocked + + // Failure to receive response, notify client + if (pNotifier != 0) + { + pNotifier->Notify( ePROTOCOL_EVT_RSP_ERR, + (DWORD)reqID, + ECANCELED ); + } + } + else + { + // This is the active request, cancel the underlying transmit + // Note: Because ProcessRequest and RemoveRequest are both muxed + // with ScheduleMutex, it is impossible to for the write + // to actually be in progress when this code is reached. + if (mpConnection != 0) + { + mpConnection->CancelTx(); + } + + // Failure to send request, notify client + if (pNotifier != 0) + { + pNotifier->Notify( ePROTOCOL_EVT_REQ_ERR, + (DWORD)reqID, + ECANCELED ); + } + } + + // Now delete the request + delete mpActiveRequest; + mpActiveRequest = 0; + + // Success! + bRC = true; + } + else + { + TRACE( "cProtocolServer::RemoveRequest( %lu )," + " invalid request ID\n", + reqID ); + } + + return bRC; +} + +/*=========================================================================== +METHOD: + ScheduleRequest (Internal Method) + +DESCRIPTION: + Schedule a request for transmission + +PARAMETERS: + reqID [ I ] - ID of the request being scheduled this ID must exist + in the internal request/schedule maps + + schedule [ I ] - Value in milliseconds that indicates the approximate + time from now that the request is to be sent out, the + actual time that the request is sent will be greater + than or equal to this value dependant on requests + scheduled before the request in question and + standard server processing time + +SEQUENCING: + Calling process must have lock on mScheduleMutex + +RETURN VALUE: + bool +===========================================================================*/ +bool cProtocolServer::ScheduleRequest( + ULONG reqID, + ULONG schedule ) +{ + // Assume failure + bool bRC = false; + + // Schedule adjust is in milliseconds + timespec schTimer = TimeIn( schedule ); + + // Create the schedule entry + tSchedule newEntry( schTimer, reqID ); + + // Fit this request into the schedule (ordered by scheduled time) + mRequestSchedule.insert( newEntry ); + + // Note: timer will be updated when mScheduleMutex is unlocked + + return bRC; +} + +/*=========================================================================== +METHOD: + RescheduleActiveRequest (Internal Method) + +DESCRIPTION: + Reschedule (or cleanup) the active request + +SEQUENCING: + Calling process must have lock on mScheduleMutex + +RETURN VALUE: + None +===========================================================================*/ +void cProtocolServer::RescheduleActiveRequest() +{ + // Are there more attempts to be made? + if (mpActiveRequest->mAttempts < mpActiveRequest->mRequest.GetRequests()) + { + // Yes, first reset the request + mpActiveRequest->Reset(); + + // Now add it back to the request map + mRequestMap[mpActiveRequest->mID] = mpActiveRequest; + + TRACE( "RescheduleActiveRequest(): req %lu rescheduled\n", mpActiveRequest->mID ); + + // Lastly reschedule the request + ScheduleRequest( mpActiveRequest->mID, + mpActiveRequest->mRequest.GetFrequency() ); + + } + else + { + TRACE( "RescheduleActiveRequest(): req %lu removed\n", mpActiveRequest->mID ); + + // No, we are through with this request + delete mpActiveRequest; + } + + // There is no longer an active request + mpActiveRequest = 0; + +} + +/*=========================================================================== +METHOD: + ProcessRequest (Internal Method) + +DESCRIPTION: + Process a single outgoing protocol request, this consists of removing + the request ID from the head of the schedule, looking up the internal + request object in the request map, sending out the request, and setting + up the response timer (if a response is required) + +SEQUENCING: + Calling process must have lock on mScheduleMutex + +RETURN VALUE: +===========================================================================*/ +void cProtocolServer::ProcessRequest() +{ + // Is there already an active request? + if (mpActiveRequest != 0 || mpConnection == 0) + { + return; + } + + // Grab request ID from the schedule + std::set ::iterator pScheduleIter; + pScheduleIter = mRequestSchedule.begin(); + + // Did we find the request? + if (pScheduleIter == mRequestSchedule.end()) + { + // No + return; + } + + // Yes, grab the request ID + ULONG reqID = pScheduleIter->second; + + // Remove from schedule + mRequestSchedule.erase( pScheduleIter ); + + // Look up the internal request object + std::map ::iterator pReqIter; + pReqIter = mRequestMap.find( reqID ); + + // Request not found around? + if (pReqIter == mRequestMap.end() || pReqIter->second == 0) + { + // No + return; + } + + // Set this request as the active request + mpActiveRequest = pReqIter->second; + + TRACE( "ProcessRequest(): req %lu started\n", mpActiveRequest->mID ); + + // Remove request from pending request map + mRequestMap.erase( pReqIter ); + + // Extract the underlying request + const sProtocolRequest & req = mpActiveRequest->mRequest; + + // Increment attempt count? + if (req.GetRequests() != INFINITE_REQS) + { + // This request isn't an indefinite one, so keep track of each attempt + mpActiveRequest->mAttempts++; + } + + bool bTxSuccess = false; + + // Encode data for transmission? + bool bEncoded = false; + sSharedBuffer * pEncoded = 0; + pEncoded = EncodeTxData( req.GetSharedBuffer(), bEncoded ); + if (bEncoded == false) + { + // Note: no longer asynchronus + // Send the request data + bTxSuccess = mpConnection->TxData( req.GetBuffer(), + req.GetSize() ); + } + else if (bEncoded == true) + { + if (pEncoded != 0 && pEncoded->IsValid() == true) + { + // Note: no longer asynchronus + // Send the request data + mpActiveRequest->mEncodedSize = pEncoded->GetSize(); + bTxSuccess = mpConnection->TxData( pEncoded->GetBuffer(), + pEncoded->GetSize() ); + } + } + + if (bTxSuccess == true) + { + TRACE( "ProcessRequest(): req %lu finished\n", mpActiveRequest->mID ); + TxComplete(); + } + else + { + TxError(); + TRACE( "ProcessRequest(): req finished with a TxError\n" ); + } + + return; +} + +/*=========================================================================== +METHOD: + CheckSystemTime (Internal Method) + +DESCRIPTION: + Check that system time hasn't moved backwards. Since we use the system + time for scheduling requests we need to periodically check that the + user (or system itself) hasn't reset system time backwards, if it has + then we reschedule everything to the current system time. This disrupts + the schedule but avoids stranding requests + + Updates mLastTime + +SEQUENCING: + Calling process must have lock on mScheduleMutex + +RETURN VALUE: + bool: System time moved backwards? +===========================================================================*/ +bool cProtocolServer::CheckSystemTime() +{ + // Assume that time is still marching forward + bool bAdjust = false; + + timespec curTime = TimeIn( 0 ); + + if (curTime < mLastTime) + { + // Looks like the system clock has been adjusted to an earlier + // value, go through the current schedule and adjust each timer + // to reflect the adjustment. This isn't an exact approach but + // it prevents requests from being stranded which is our goal + + // Note: set iterators are constant. This means we need to + // create a set with the new data, we can't modify this one + + std::set < tSchedule, std::less > tempSchedule; + + std::set ::iterator pScheduleIter; + pScheduleIter = mRequestSchedule.begin(); + + while (pScheduleIter != mRequestSchedule.end()) + { + tSchedule entry = *pScheduleIter; + entry.first.tv_sec = curTime.tv_sec; + entry.first.tv_nsec = curTime.tv_nsec; + tempSchedule.insert( entry ); + + pScheduleIter++; + } + + mRequestSchedule = tempSchedule; + + // Update mActiveRequestTimeout + if ( (mpActiveRequest != 0) + && (mpActiveRequest->mbWaitingForResponse == true) ) + { + // Restart active request's timeout + ULONG mTimeout = mpActiveRequest->mRequest.GetTimeout(); + mActiveRequestTimeout = TimeIn( mTimeout ); + } + + TRACE( "Time has moved backwards, schedule updated\n" ); + + // Indicate the change + bAdjust = true; + } + + mLastTime.tv_sec = curTime.tv_sec; + mLastTime.tv_nsec = curTime.tv_nsec; + + return bAdjust; +} + +/*=========================================================================== +METHOD: + RxComplete (Internal Method) + +DESCRIPTION: + Handle completion of receive data operation + +PARAMETERS: + status [ I ] - Status of operation + bytesReceived [ I ] - Number of bytes received + +SEQUENCING: + This method is sequenced according to the schedule mutex + i.e. any other thread that needs to modify the schedule + will block until this method completes + +RETURN VALUE: + None +===========================================================================*/ +void cProtocolServer::RxComplete( + DWORD status, + DWORD bytesReceived ) +{ + if (status != NO_ERROR) + { + TRACE( "cProtocolServer::RxComplete() = %lu\n", status ); + } + + if (mpConnection == 0) + { + TRACE( "cProtocolServer::RxComplete() - Not initialized\n" ); + return; + } + + // Error with the read + if (status != NO_ERROR || bytesReceived == 0) + { + // Setup the next read + mpConnection->RxData( mpRxBuffer, + (ULONG)mRxBufferSize, + (cIOCallback *)&mRxCallback ); + + return; + } + + // Get Schedule Mutex + if (GetScheduleMutex() == false) + { + TRACE( "RxComplete(), unable to get schedule Mutex\n" ); + return; + } + + TRACE( "RxComplete() - Entry at %llu\n", GetTickCount() ); + + // Decode data + bool bAbortTx = false; + ULONG rspIdx = INVALID_LOG_INDEX; + bool bRsp = DecodeRxData( bytesReceived, rspIdx, bAbortTx ); + + // Is there an active request that needs to be aborted + if (mpActiveRequest != 0 && bAbortTx == true) + { + // Yes, terminate the transmission and handle the error + mpConnection->CancelTx(); + TxError(); + } + // Is there an active request and a valid response? + else if (mpActiveRequest != 0 && bRsp == true) + { + const sProtocolRequest & req = mpActiveRequest->mRequest; + const cProtocolNotification * pNotifier = req.GetNotifier(); + + // Notify client that response was received + if (pNotifier != 0) + { + pNotifier->Notify( ePROTOCOL_EVT_RSP_RECV, + (DWORD)mpActiveRequest->mID, + (DWORD)rspIdx ); + } + + // Reschedule request as needed + RescheduleActiveRequest(); + } + + // Setup the next read + mpConnection->RxData( mpRxBuffer, + (ULONG)mRxBufferSize, + (cIOCallback *)&mRxCallback ); + + TRACE( "RxComplete() - Exit at %llu\n", GetTickCount() ); + + // Unlock schedule mutex + if (ReleaseScheduleMutex() == false) + { + // This should never happen + return; + } + + return; +} + +/*=========================================================================== +METHOD: + RxTimeout (Internal Method) + +DESCRIPTION: + Handle the response timer expiring + +SEQUENCING: + Calling process must have lock on mScheduleMutex + +RETURN VALUE: + None +===========================================================================*/ +void cProtocolServer::RxTimeout() +{ + // No active request? + if (mpActiveRequest == 0) + { + TRACE( "RxTimeout() with no active request\n" ); + ASSERT( 0 ); + } + + TRACE( "RxTimeout() for req %lu\n", mpActiveRequest->mID ); + + const sProtocolRequest & req = mpActiveRequest->mRequest; + const cProtocolNotification * pNotifier = req.GetNotifier(); + + // Failure to receive response, notify client + if (pNotifier != 0) + { + pNotifier->Notify( ePROTOCOL_EVT_RSP_ERR, + (DWORD)mpActiveRequest->mID, + (DWORD)0 ); + } + + // Reschedule request as needed + RescheduleActiveRequest(); +} + +/*=========================================================================== +METHOD: + TxComplete (Internal Method) + +DESCRIPTION: + Handle completion of transmit data operation + +PARAMETERS: + +SEQUENCING: + Calling process must have lock on mScheduleMutex + +RETURN VALUE: + None +===========================================================================*/ +void cProtocolServer::TxComplete() +{ + // No active request? + if (mpActiveRequest == 0 || mpConnection == 0) + { + TRACE( "TxComplete() called with no active request\n" ); + ASSERT( 0 ); + } + + TRACE( "TxComplete() req %lu started\n", mpActiveRequest->mID ); + + ULONG reqID = mpActiveRequest->mID; + const sProtocolRequest & req = mpActiveRequest->mRequest; + const cProtocolNotification * pNotifier = req.GetNotifier(); + + // Notify client of auxiliary data being sent? + if (mpActiveRequest->mRequiredAuxTxs && mpActiveRequest->mCurrentAuxTx) + { + pNotifier->Notify( ePROTOCOL_EVT_AUX_TU_SENT, + (DWORD)reqID, + (DWORD)mpActiveRequest->mEncodedSize ); + } + + // Check for more auxiliary data to transmit + if (mpActiveRequest->mCurrentAuxTx < mpActiveRequest->mRequiredAuxTxs) + { + ULONG auxDataSz = 0; + const BYTE * pAuxData = req.GetAuxiliaryData( auxDataSz ); + if (auxDataSz > 0 && pAuxData != 0) + { + bool bRC = false; + + // Adjust for current MTU + pAuxData += (mpActiveRequest->mCurrentAuxTx * MAX_AUX_MTU_SIZE); + mpActiveRequest->mCurrentAuxTx++; + + // Last MTU? + if (mpActiveRequest->mCurrentAuxTx == mpActiveRequest->mRequiredAuxTxs) + { + // More than one MTU? + if (mpActiveRequest->mRequiredAuxTxs > 1) + { + auxDataSz = (auxDataSz % MAX_AUX_MTU_SIZE); + if (auxDataSz == 0) + { + auxDataSz = MAX_AUX_MTU_SIZE; + } + } + + if (auxDataSz % MAX_PACKET_SIZE == 0) + { + // If last write of unframed write request is divisible + // by 512, break off last byte and send seperatly. + TRACE( "TxComplete() Special case, break off last byte\n" ); + + bRC = mpConnection->TxData( pAuxData, + auxDataSz - 1 ); + + if (bRC == true) + { + bRC = mpConnection->TxData( pAuxData + auxDataSz -1, + 1 ); + } + } + else + { + bRC = mpConnection->TxData( pAuxData, + auxDataSz ); + } + } + else if (mpActiveRequest->mRequiredAuxTxs > 1) + { + auxDataSz = MAX_AUX_MTU_SIZE; + + bRC = mpConnection->TxData( pAuxData, + auxDataSz ); + } + + if (bRC == true) + { + mpActiveRequest->mEncodedSize = auxDataSz; + TxComplete(); + } + else + { + TxError(); + } + + return; + } + } + + // Another successful transmission, add the buffer to the log + ULONG reqIdx = INVALID_LOG_INDEX; + + sProtocolBuffer pb( req.GetSharedBuffer() ); + reqIdx = mLog.AddBuffer( pb ); + + // Notify client? + if (pNotifier != 0) + { + pNotifier->Notify( ePROTOCOL_EVT_REQ_SENT, (DWORD)reqID, (DWORD)reqIdx ); + } + + // Wait for a response? + if (mpActiveRequest->mRequest.IsTXOnly() == false) + { + // We now await the response + mpActiveRequest->mbWaitingForResponse = true; + mActiveRequestTimeout = TimeIn( mpActiveRequest->mRequest.GetTimeout() ); + } + else + { + // Reschedule request as needed + RescheduleActiveRequest(); + } +} + +/*=========================================================================== +METHOD: + TxError (Internal Method) + +DESCRIPTION: + Handle transmit data operation error be either rescheduling the + request or cleaning it up + +SEQUENCING: + Calling process must have lock on mScheduleMutex + +RETURN VALUE: + None +===========================================================================*/ +void cProtocolServer::TxError() +{ + // No active request? + if (mpActiveRequest == 0) + { + return; + } + + ULONG reqID = mpActiveRequest->mID; + const sProtocolRequest & req = mpActiveRequest->mRequest; + const cProtocolNotification * pNotifier = req.GetNotifier(); + + // Failure to send request, notify client + if (pNotifier != 0) + { + pNotifier->Notify( ePROTOCOL_EVT_REQ_ERR, (DWORD)reqID, (DWORD)0 ); + } + + // Reschedule request as needed + RescheduleActiveRequest(); +} + +/*=========================================================================== +METHOD: + Initialize (Public Method) + +DESCRIPTION: + Initialize the protocol server by starting up the schedule thread + +SEQUENCING: + This method is sequenced according to the schedule mutex, i.e. any + other thread that needs to modify the schedule will block until + this method completes + +RETURN VALUE: + bool +===========================================================================*/ +bool cProtocolServer::Initialize() +{ + // Assume failure + bool bRC = false; + + mbExiting = false; + + // Get mScheduleMutex + if (GetScheduleMutex() == true) + { + if (mScheduleThreadID == 0) + { + // Yes, start thread + int nRet = pthread_create( &mScheduleThreadID, + NULL, + ScheduleThread, + this ); + if (nRet == 0) + { + // Success! + bRC = true; + } + } + } + else + { + TRACE( "cProtocolServer::Initialize(), unable to aquire ScheduleMutex\n" ); + return false; + } + + // Unlock schedule mutex + if (ReleaseScheduleMutex() == false) + { + // This should never happen + return false; + } + + return bRC; +} + +/*=========================================================================== +METHOD: + Exit (Public Method) + +DESCRIPTION: + Exit the protocol server by exiting the schedule thread (if necessary) + +SEQUENCING: + This method is sequenced according to the schedule mutex, i.e. any + other thread that needs to modify the schedule will block until + this method completes + +RETURN VALUE: + bool +===========================================================================*/ +bool cProtocolServer::Exit() +{ + // Assume failure + bool bRC = false; + + if (mScheduleThreadID != 0) + { + if (GetScheduleMutex() == false) + { + // This should never happen + return false; + } + + // Check that mScheduleTheadID is still not 0 + if (mScheduleThreadID == 0) + { + printf( "mScheduleThreadID was zero!!!\n" ); + ReleaseScheduleMutex( false ); + return false; + } + + // Set exit event + mbExiting = true; + + // Signal a schedule update + if (mThreadScheduleEvent.Set( 1 ) != 0) + { + // This should never happen + return false; + } + + TRACE( "Joining ScheduleThread %lu\n", mScheduleThreadID ); + + // Allow process to continue until it finishes + int nRet = pthread_join( mScheduleThreadID, NULL ); + if (nRet == ESRCH) + { + TRACE( "ScheduleThread has exited already\n" ); + } + else if (nRet != 0) + { + TRACE( "Unable to join ScheduleThread. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + + TRACE( "cProtocolServer::Exit(), completed thread %lu\n", + (ULONG)mScheduleThreadID ); + + bRC = true; + + // Release "handle" + mScheduleThreadID = 0; + + // Release mutex lock, don't signal ScheduleThread + if (ReleaseScheduleMutex( false ) == false) + { + // This should never happen + return false; + } + } + else + { + // No ScheduleThread + bRC = true; + } + + // Free any allocated requests + std::map ::iterator pReqIter; + pReqIter = mRequestMap.begin(); + + while (pReqIter != mRequestMap.end()) + { + sProtocolReqRsp * pReqRsp = pReqIter->second; + if (pReqRsp != 0) + { + delete pReqRsp; + } + + pReqIter++; + } + + mRequestMap.clear(); + + // Free log + mLog.Clear(); + + return bRC; +} + +/*=========================================================================== +METHOD: + Connect (Public Method) + +DESCRIPTION: + Connect to the given communications port + +PARAMETERS: + pPort [ I ] - String pointer representing the device node to + connect to (IE: /dev/qcqmi0) + +SEQUENCING: + None + +RETURN VALUE: + bool +===========================================================================*/ +bool cProtocolServer::Connect( LPCSTR pPort ) +{ + // Assume failure + bool bRC = false; + if (pPort == 0 || pPort[0] == 0 || mpConnection == 0) + { + return bRC; + } + + // Connect to device + + // Set callback + mRxCallback.SetServer( this ); + + // Override to initialize port with protocol specific options + bRC = mpConnection->Connect( pPort ); + if (bRC == true) + { + bRC = InitializeComm(); + if (bRC == true) + { + // Setup the initial read + mpConnection->RxData( mpRxBuffer, + (ULONG)mRxBufferSize, + (cIOCallback *)&mRxCallback ); + } + } + + return bRC; +} + +/*=========================================================================== +METHOD: + Disconnect (Public Method) + +DESCRIPTION: + Disconnect from the current communications port + +SEQUENCING: + None + +RETURN VALUE: + bool +===========================================================================*/ +bool cProtocolServer::Disconnect() +{ + // Disconnect + + if (mpConnection != 0) + { + // Cancel any outstanding I/O + mpConnection->CancelIO(); + } + + // Empty callback + mRxCallback.SetServer( 0 ); + + // Cleanup COM port + CleanupComm(); + + if (mpConnection != 0) + { + // Now disconnect + bool bDis = mpConnection->Disconnect(); + delete mpConnection; + return bDis; + } + else + { + return true; + } +} + +/*=========================================================================== +METHOD: + IsConnected (Public Method) + +DESCRIPTION: + Are we currently connected to a port? + +SEQUENCING: + None + +RETURN VALUE: + bool +===========================================================================*/ +bool cProtocolServer::IsConnected() +{ + return (mpConnection != 0 && mpConnection->IsConnected()); +} + +/*=========================================================================== +METHOD: + AddRequest (Public Method) + +DESCRIPTION: + Add an outgoing protocol request to the protocol server request queue + +PARAMETERS: + req [ I ] - Request being added + +SEQUENCING: + This method is sequenced according to the schedule mutex, i.e. any + other thread that needs to modify the schedule will block until + this method completes + +RETURN VALUE: + ULONG - ID of scheduled request (INVALID_REQUEST_ID upon error) +===========================================================================*/ +ULONG cProtocolServer::AddRequest( const sProtocolRequest & req ) +{ + // Assume failure + ULONG reqID = INVALID_REQUEST_ID; + + // Server not configured for sending requests? + if (IsValid( mTxType ) == false) + { + return reqID; + } + + // Request type not valid for server? + if (req.GetType() != mTxType) + { + return reqID; + } + + // Invalide request? + if (ValidateRequest( req ) == false) + { + return reqID; + } + + // Get mScheduleMutex + if (GetScheduleMutex() == true) + { + TRACE( "AddRequest() - Entry at %llu\n", GetTickCount() ); + + // Grab next available request ID + if (++mLastRequestID == 0) + { + mLastRequestID++; + } + + reqID = mLastRequestID; + while (mRequestMap.find( reqID ) != mRequestMap.end()) + { + reqID++; + } + + // Wrap in our internal structure + sProtocolReqRsp * pReqRsp = 0; + pReqRsp = new sProtocolReqRsp( req, reqID, MAX_AUX_MTU_SIZE ); + + if (pReqRsp != 0) + { + // Add to request map + mRequestMap[reqID] = pReqRsp; + + // ... and schedule + ScheduleRequest( reqID, req.GetSchedule() ); + } + + TRACE( "AddRequest() - Exit at %llu\n", GetTickCount() ); + + // Unlock schedule mutex + if (ReleaseScheduleMutex() == false) + { + // This should never happen + return INVALID_REQUEST_ID; + } + } + else + { + TRACE( "cProtocolServer::AddRequest(), unable to get schedule Mutex\n" ); + } + + return reqID; +} + +/*=========================================================================== +METHOD: + RemoveRequest (Public Method) + +DESCRIPTION: + Remove a previously added protocol request + +SEQUENCING: + This method is sequenced according to the schedule mutex, i.e. any + other thread that needs to modify the schedule will block until + this method completes + + Note: If a request is being written, it cannot be inturrupted as + both ProcessRequest and RemoveRequest depend on the ScheduleMutex + and the write is synchronus. If the request has been written but + the read has not been triggered it can be removed. + +PARAMETERS: + reqID [ I ] - ID of request being removed + +RETURN VALUE: + bool +===========================================================================*/ +bool cProtocolServer::RemoveRequest( ULONG reqID ) +{ + // Assume failure + bool bRC = false; + + // Get Schedule Mutex + if (GetScheduleMutex() == true) + { + TRACE( "RemoveRequest() - Entry at %llu\n", GetTickCount() ); + + bRC = HandleRemoveRequest( reqID ); + + TRACE( "RemoveRequest() - Exit at %llu\n", GetTickCount() ); + + // Unlock schedule mutex + if (ReleaseScheduleMutex() == false) + { + // This should never happen + return false; + } + } + else + { + TRACE( "cProtocolServer::RemoveRequest(), unable to get mScheduleMutex\n" ); + } + + return bRC; +} + +/*=========================================================================== +METHOD: + GetScheduleMutex (Internal Method) + +DESCRIPTION: + Get the schedule mutex. Additionally a check is applied to verify the + DEADLOCK_TIME was not exceeded + +SEQUENCING: + This function will block until the mScheduleMutex is aquired + +PARAMETERS: + +RETURN VALUE: + bool +===========================================================================*/ +bool cProtocolServer::GetScheduleMutex() +{ + ULONGLONG nStart = GetTickCount(); + + //TRACE( "Locking Schedule mutex\n" ); + int nRet = pthread_mutex_lock( &mScheduleMutex ); + if (nRet != 0) + { + TRACE( "Unable to lock schedule mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + + ULONGLONG nEnd = GetTickCount(); + if (nEnd - nStart > DEADLOCK_TIME) + { + TRACE( "Deadlock time exceeded: took %llu ms\n", nEnd - nStart ); + ReleaseScheduleMutex( true ); + return false; + } + + //TRACE( "Locked ScheduleMutex\n" ); + return true; +} + +/*=========================================================================== +METHOD: + ReleaseScheduleMutex (Internal Method) + +DESCRIPTION: + Release lock on the schedule mutex + +SEQUENCING: + Calling process must have lock + +PARAMETERS: + bSignalThread [ I ] - Signal Schedule thread as well? + +RETURN VALUE: + bool +===========================================================================*/ +bool cProtocolServer::ReleaseScheduleMutex( bool bSignalThread ) +{ + if (bSignalThread == true) + { + if (mThreadScheduleEvent.Set( 1 ) != 0) + { + return false; + } + } + + int nRet = pthread_mutex_unlock( &mScheduleMutex ); + if (nRet != 0) + { + TRACE( "Unable to unlock schedule mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + + return true; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolServer.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolServer.h new file mode 100644 index 0000000..5412af2 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/ProtocolServer.h @@ -0,0 +1,362 @@ +/*=========================================================================== +FILE: + ProtocolServer.h + +DESCRIPTION: + Generic protocol packet server + +PUBLIC CLASSES AND METHODS: + cProtocolServer + Abstract base class for protocol servers + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "Connection.h" +#include "ProtocolRequest.h" +#include "ProtocolLog.h" +#include "Event.h" + +#include +#include + +//--------------------------------------------------------------------------- +// Forward Declarations +//--------------------------------------------------------------------------- +class cProtocolServer; +struct sServerControl; + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// Invalid request ID +extern const ULONG INVALID_REQUEST_ID; + +// Fill timespec with the time it will be in specified milliseconds +// Relative time to Absolute time +timespec TimeIn( ULONG millis ); + +// Find the milliseconds from current time this timespec will occur +// Absolute time to Relative time +ULONG TimeFromNow( timespec time ); + +// Provide a number for sequencing reference, similar to the windows function +ULONGLONG GetTickCount(); + +// timespec < comparison method +inline bool operator< (const timespec & first, const timespec & second) +{ + return ( (first.tv_sec < second.tv_sec) + ||( (first.tv_sec == second.tv_sec) + &&(first.tv_nsec < second.tv_nsec) ) ); +} + +// timespec <= comparison method +inline bool operator<= (const timespec & first, const timespec & second) +{ + return ( (first.tv_sec < second.tv_sec) + ||( (first.tv_sec == second.tv_sec) + &&(first.tv_nsec <= second.tv_nsec) ) ); +} + +/*=========================================================================*/ +// Class cProtocolServerRxCallback +/*=========================================================================*/ +class cProtocolServerRxCallback +{ + public: + // (Inline) Constructor + cProtocolServerRxCallback() + : mpServer( 0 ) + { }; + + // (Inline) Destructor + virtual ~cProtocolServerRxCallback() { }; + + // (Inline) Set server object to pass results to + void SetServer( cProtocolServer * pServer ) + { + mpServer = pServer; + }; + + // The I/O has been completed, process the results + virtual void IOComplete( + DWORD status, + DWORD bytesReceived ); + + protected: + /* Protocol server to interact with */ + cProtocolServer * mpServer; +}; + +/*=========================================================================*/ +// Class cProtocolServer +/*=========================================================================*/ +class cProtocolServer +{ + public: + // Constructor + cProtocolServer( + eProtocolType rxType, + eProtocolType txType, + ULONG bufferSzRx, + ULONG logSz ); + + // Destructor + virtual ~cProtocolServer(); + + // Initialize the protocol server + bool Initialize(); + + // Exit the protocol server + bool Exit(); + + // Connect to the given communications port + bool Connect( LPCSTR pPort ); + + // Disconnect from target + bool Disconnect(); + + // Are we currently connected to a port? + bool IsConnected(); + + // Add an outgoing protocol request to the protocol server request queue + ULONG AddRequest( const sProtocolRequest & req ); + + // Remove a previously added protocol request + bool RemoveRequest( ULONG reqID ); + + // (Inline) Return the protocol log + const cProtocolLog & GetLog() + { + return mLog; + }; + + protected: + // Internal protocol server request/response structure, used to track + // info related to sending out a request + struct sProtocolReqRsp + { + public: + // Constructor + sProtocolReqRsp( + const sProtocolRequest & requestInfo, + ULONG requestID, + ULONG auxDataMTU ); + + // Copy constructor + sProtocolReqRsp( const sProtocolReqRsp & reqRsp ); + + // (Inline) Reset for next transmission attempt + void Reset() + { + mEncodedSize = mRequest.GetSize(); + + mCurrentAuxTx = 0; + mbWaitingForResponse = 0; + }; + + /* Underlying protocol request */ + sProtocolRequest mRequest; + + /* Request ID */ + ULONG mID; + + /* Number of times this request has been attempted */ + ULONG mAttempts; + + /* Size of encoded data being transmitted */ + ULONG mEncodedSize; + + /* Number of required auxiliary data transmissions */ + ULONG mRequiredAuxTxs; + + /* Current auxiliary data transmission */ + ULONG mCurrentAuxTx; + + /* Are we currently waiting for a response? */ + bool mbWaitingForResponse; + }; + + // Handle the remove request + bool HandleRemoveRequest( ULONG reqID ); + + // Schedule a request for transmission + bool ScheduleRequest( + ULONG reqID, + ULONG schedule ); + + // (Inline) Get next request's time from mRequestSchedule + timespec GetNextRequestTime() + { + timespec outTime; + + std::set ::iterator pScheduleIter; + pScheduleIter = mRequestSchedule.begin(); + tSchedule entry = *pScheduleIter; + + outTime = entry.first; + return outTime; + } + + // (Inline) Validate a request that is about to be scheduled + virtual bool ValidateRequest( const sProtocolRequest & req ) + { + return req.IsValid(); + }; + + // Reschedule (or cleanup) the active request + void RescheduleActiveRequest(); + + // Process a single outgoing protocol request + void ProcessRequest(); + + // Check that system time hasn't moved backwards + bool CheckSystemTime(); + + // Perform protocol specific communications port initialization + virtual bool InitializeComm() = 0; + + // Perform protocol specific communications port cleanup + virtual bool CleanupComm() = 0; + + // Encode data for transmission + virtual sSharedBuffer * EncodeTxData( + sSharedBuffer * pBuffer, + bool & bEncoded ) = 0; + + // Decode incoming data into packets returning the last response + virtual bool DecodeRxData( + ULONG bytesReceived, + ULONG & rspIdx, + bool & bAbortTx ) = 0; + + // Handle completion of receive data operation + void RxComplete( + DWORD status, + DWORD bytesReceived ); + + // Handle the response timer expiring + void RxTimeout(); + + // Handle completion of transmit data operation + virtual void TxComplete(); + + // Handle a transmission error + void TxError(); + + /* Underlying communications object */ + cConnection * mpConnection; + + /* Underlying connection type */ + enum eConnectionType + { + eConnectionType_Begin = 0, + + eConnectionType_RmNet = 1, + eConnectionType_SMD = 2, + + eConnectionType_End + + } mConnectionType; + + /* Rx callback */ + cProtocolServerRxCallback mRxCallback; + + /* ID of Schedule thread */ + pthread_t mScheduleThreadID; + + // ScheduleThread signal event + cEvent mThreadScheduleEvent; + + // Schedule mutex + // Ensures exclusive access to mRequestSchedule + pthread_mutex_t mScheduleMutex; + + // Is the thread in the process of exiting? + // (no new commands will be accepted) + bool mbExiting; + + /* Client/server thread control object */ + sSharedBuffer * mpServerControl; + + /* Protocol request schedule (scheduled time/request ID) */ + typedef std::pair tSchedule; + std::set < tSchedule, std::less > mRequestSchedule; + + /* Last system time value (used to check for time changes) */ + timespec mLastTime; + + /* Protocol request map (request ID mapped to internal req/rsp struct) */ + std::map mRequestMap; + + /* Last assigned request ID */ + ULONG mLastRequestID; + + /* Current request being processed */ + sProtocolReqRsp * mpActiveRequest; + + /* Absolute timeout for mpActiveRequest + based on when write was completed */ + timespec mActiveRequestTimeout; + + /* Data buffer for incoming data */ + BYTE * mpRxBuffer; + + /* Size of above buffer (i.e. how much data to read in at once) */ + ULONG mRxBufferSize; + + /* Protocol type for incoming/outgoing data*/ + eProtocolType mRxType; + eProtocolType mTxType; + + /* Protocol log */ + cProtocolLog mLog; + + // Get a lock on ScheduleMutex + bool GetScheduleMutex(); + + // Release lock on ScheduleMutex + // Signal ScheduleThread if desired + bool ReleaseScheduleMutex( bool bSignalThread = true ); + + // Schedule Thread gets full access + friend void * ScheduleThread( PVOID pArg ); + + // Callback objects get full access + friend class cProtocolServerRxCallback; +}; + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIBuffers.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIBuffers.cpp new file mode 100644 index 0000000..0e9a7df --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIBuffers.cpp @@ -0,0 +1,365 @@ +/*=========================================================================== +FILE: + QMIBuffers.cpp + +DESCRIPTION: + QMI service protocol related structures and affliated methods + +PUBLIC CLASSES AND METHODS: + sQMIControlRawTransactionHeader + sQMIServiceRawTransactionHeader + sQMIRawMessageHeader + sQMIRawContentHeader + + sQMIServiceBuffer + +Copyright (c) 2013, 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 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 "QMIBuffers.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +/*=========================================================================*/ +// sQMIServiceBuffer Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + sQMIServiceBuffer (Public Method) + +DESCRIPTION: + Constructor + +PARAMETERS: + pBuffer [ I ] - Shareable buffer that contains the DIAG data + +RETURN VALUE: + None +===========================================================================*/ +sQMIServiceBuffer::sQMIServiceBuffer( sSharedBuffer * pBuffer ) + : sProtocolBuffer( pBuffer ) +{ + sQMIServiceBuffer::Validate(); +} + +/*=========================================================================== +METHOD: + ~sQMIServiceBuffer (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +sQMIServiceBuffer::~sQMIServiceBuffer() +{ + // Nothing to do +} + +/*=========================================================================== +METHOD: + GetResult (Public Method) + +DESCRIPTION: + Return contents of mandatory result content + +PARAMETERS: + returnCode [ I ] - The return code (should be eQMIResultCode) + errorCode [ I ] - The error code (should be eQMIErrorCode) + +RETURN VALUE: + bool +===========================================================================*/ +bool sQMIServiceBuffer::GetResult( + ULONG & returnCode, + ULONG & errorCode ) +{ + if (IsResponse() == false) + { + return false; + } + + std::map ::const_iterator pIter; + pIter = mContents.find( QMI_TLV_ID_RESULT ); + if (pIter == mContents.end()) + { + return false; + } + + const sQMIRawContentHeader * pContent = pIter->second; + if (pContent == 0) + { + ASSERT( 0 ); + return false; + } + + if (pContent->mLength != 4) + { + return false; + } + + const WORD * pData = (const WORD *)(++pContent); + + returnCode = (ULONG)*pData++; + errorCode = (ULONG)*pData; + + return true; +} + +/*=========================================================================== +METHOD: + BuildBuffer (Static Public Method) + +DESCRIPTION: + Build a QMI request + +PARAMETERS: + serviceType [ I ] - QMI service type + msgID [ I ] - The QMI message request ID + bResponse [ I ] - Build a response? + bIndication [ I ] - Build an indication? + pPayload [ I ] - Payload + payloadLen [ I ] - Size of above payload + +RETURN VALUE: + sSharedBuffer * : The request in an allocated buffer (0 on error) +===========================================================================*/ +sSharedBuffer * sQMIServiceBuffer::BuildBuffer( + eQMIService serviceType, + WORD msgID, + bool bResponse, + bool bIndication, + const BYTE * pPayload, + ULONG payloadLen ) +{ + const ULONG szTransHdr = (ULONG)sizeof(sQMIServiceRawTransactionHeader); + const ULONG szMsgHdr = (ULONG)sizeof(sQMIRawMessageHeader); + const ULONG totalHdrSz = szTransHdr + szMsgHdr; + + // Truncate payload? + if (payloadLen > (QMI_MAX_BUFFER_SIZE - totalHdrSz)) + { + payloadLen = QMI_MAX_BUFFER_SIZE - totalHdrSz; + } + + // Make sure length agrees with pointer + if (pPayload == 0) + { + payloadLen = 0; + } + + // Allocate buffer + PBYTE pBuffer = new BYTE[payloadLen + totalHdrSz]; + if (pBuffer == 0) + { + return 0; + } + + // Format header + sQMIServiceRawTransactionHeader * pHdr = 0; + pHdr = (sQMIServiceRawTransactionHeader *)&pBuffer[0]; + pHdr->mCompound = 0; + pHdr->mResponse = 0; + pHdr->mIndication = 0; + pHdr->mReserved = 0; + pHdr->mTransactionID = 1; + + bool bTX = true; + if (bResponse == true) + { + pHdr->mResponse = 1; + bTX = false; + } + else if (bIndication == true) + { + pHdr->mIndication = 1; + bTX = false; + } + + pHdr++; + + // Format message header + sQMIRawMessageHeader * pMsg = 0; + pMsg = (sQMIRawMessageHeader *)pHdr; + pMsg->mMessageID = msgID; + pMsg->mLength = (WORD)payloadLen; + + // Copy in payload? + if (payloadLen > 0 && pPayload != 0) + { + memcpy( (LPVOID)&pBuffer[totalHdrSz], + (LPCVOID)&pPayload[0], + (SIZE_T)payloadLen ); + } + + // Compute total size + ULONG sz = payloadLen + totalHdrSz; + + // Build and return the shared buffer + eProtocolType pt = MapQMIServiceToProtocol( serviceType, bTX ); + sSharedBuffer * pBuf = new sSharedBuffer( sz, pBuffer, pt ); + return pBuf; +} + +/*=========================================================================== +METHOD: + Validate (Internal Method) + +DESCRIPTION: + Is this open unframed request/response packet valid? + +RETURN VALUE: + bool +===========================================================================*/ +bool sQMIServiceBuffer::Validate() +{ + // Assume failure + bool bRC = false; + + // Sanity check protocol type + eProtocolType pt = GetType(); + if (IsQMIProtocol( pt ) == false) + { + mbValid = bRC; + return bRC; + } + + const ULONG szTransHdr = (ULONG)sizeof(sQMIServiceRawTransactionHeader); + const ULONG szMsgHdr = (ULONG)sizeof(sQMIRawMessageHeader); + const ULONG szContentHdr = (ULONG)sizeof(sQMIRawContentHeader); + + // Must be enough space for both headers + ULONG sz = GetSize(); + if (sz < szTransHdr + szMsgHdr) + { + mbValid = bRC; + return bRC; + } + + const BYTE * pBuffer = GetBuffer(); + + // Obtain transaction header + const sQMIServiceRawTransactionHeader * pTransHdr = 0; + pTransHdr = (const sQMIServiceRawTransactionHeader *)pBuffer; + pBuffer += szTransHdr; + + // This is required to be 0 + if (pTransHdr->mCompound != 0) + { + mbValid = bRC; + return bRC; + } + + // These are mutually exclusive + if (pTransHdr->mIndication == 1 && pTransHdr->mResponse == 1) + { + mbValid = bRC; + return bRC; + } + + // Requests/responses required valid transaction IDs + if ( (pTransHdr->mIndication == 0) + && (pTransHdr->mTransactionID == (WORD)INVALID_QMI_TRANSACTION_ID) ) + { + mbValid = bRC; + return bRC; + } + + if ( (pTransHdr->mResponse == 1 || pTransHdr->mIndication == 1) + && (IsQMIProtocolRX( pt ) == false) ) + { + mbValid = bRC; + return bRC; + } + + if ( (pTransHdr->mResponse == 0 && pTransHdr->mIndication == 0) + && (IsQMIProtocolTX( pt ) == false) ) + { + mbValid = bRC; + return bRC; + } + + // Obtain message header + const sQMIRawMessageHeader * pMsgHdr = 0; + pMsgHdr = (const sQMIRawMessageHeader *)pBuffer; + pBuffer += szMsgHdr; + + // Validate reported length + if (sz != ((ULONG)pMsgHdr->mLength + szTransHdr + szMsgHdr)) + { + mbValid = bRC; + return bRC; + } + + // Extract content TLV structures + ULONG contentProcessed = 0; + ULONG contentSz = (ULONG)pMsgHdr->mLength; + while (contentProcessed < contentSz) + { + const sQMIRawContentHeader * pContent = 0; + pContent = (const sQMIRawContentHeader *)pBuffer; + + ULONG tlvLen = szContentHdr + pContent->mLength; + + contentProcessed += tlvLen; + if (contentProcessed <= contentSz) + { + mContents[(ULONG)pContent->mTypeID] = pContent; + } + else + { + mContents.clear(); + + mbValid = bRC; + return bRC; + } + + pBuffer += tlvLen; + } + + // Validate TLV reported lengths + if (contentProcessed != contentSz) + { + mbValid = bRC; + return bRC; + } + + // Success! + bRC = true; + + mbValid = bRC; + return mbValid; +} + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIBuffers.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIBuffers.h new file mode 100644 index 0000000..5c9504e --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIBuffers.h @@ -0,0 +1,390 @@ +/*=========================================================================== +FILE: + QMIBuffers.h + +DESCRIPTION: + QMI service protocol related structures and affliated methods + +PUBLIC CLASSES AND METHODS: + sQMUXHeader + sQMIControlRawTransactionHeader + sQMIServiceRawTransactionHeader + sQMIRawMessageHeader + sQMIRawContentHeader + + sQMIServiceBuffer + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "ProtocolBuffer.h" +#include "QMIEnum.h" + +#include +#include + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// QMI maximum buffer size (cannot be larger than MAX_SHARED_BUFFER_SIZE) +const ULONG QMI_MAX_BUFFER_SIZE = MAX_SHARED_BUFFER_SIZE; + +// Content ID for mandatory result TLV +const ULONG QMI_TLV_ID_RESULT = 2; + +/*=========================================================================== +METHOD: + MapQMIServiceToProtocol (Inline Method) + +DESCRIPTION: + Map QMI service type (eQMIService) and direction to a protocol type + (eProtocolType) + +PARAMETERS: + serviceType [ I ] - Enum value being mapped + bTransmission [ I ] - Is this a transmission (TX vs. RX)? + +RETURN VALUE: + eProtocolType +===========================================================================*/ +inline eProtocolType MapQMIServiceToProtocol( + eQMIService serviceType, + bool bTransmission = true ) +{ + eProtocolType pt = ePROTOCOL_ENUM_BEGIN; + if (IsValid( serviceType ) == false) + { + return pt; + } + + DWORD tmp = ((DWORD)serviceType * 2) + (DWORD)ePROTOCOL_QMI_CTL_RX; + if (bTransmission == true) + { + tmp++; + } + + if (IsQMIProtocol( (eProtocolType)tmp ) == true) + { + pt = (eProtocolType)tmp; + } + + return pt; +}; + +/*=========================================================================== +METHOD: + MapProtocolToQMIService (Inline Method) + +DESCRIPTION: + Map protocol type (eProtocolType) to QMI service type (eQMIService) + +PARAMETERS: + protocolType [ I ] - Enum value being mapped + +RETURN VALUE: + bool +===========================================================================*/ +inline eQMIService MapProtocolToQMIService( eProtocolType protocolType ) +{ + eQMIService st = eQMI_SVC_ENUM_BEGIN; + if (IsQMIProtocol( protocolType ) == false) + { + return st; + } + + DWORD tmp = ((DWORD)protocolType - (DWORD)ePROTOCOL_QMI_CTL_RX) / 2; + if (IsValid( (eQMIService)tmp ) == true) + { + st = (eQMIService)tmp; + } + + return st; +}; + +//--------------------------------------------------------------------------- +// Pragmas (pack structs) +//--------------------------------------------------------------------------- +#pragma pack( push, 1 ) + +/*=========================================================================*/ +// Struct sQMUXHeader +// Struct to represent a QMUX transaction header (raw) +/*=========================================================================*/ +struct sQMUXHeader +{ + public: + WORD mLength; + BYTE mFlags; + BYTE mServiceType; + BYTE mClientID; +}; + +/*=========================================================================*/ +// Struct sQMIControlRawTransactionHeader +// Struct to represent a QMI control transaction header (raw) +/*=========================================================================*/ +struct sQMIControlRawTransactionHeader +{ + public: + BYTE mResponse : 1; // Is this a response transaction? + BYTE mIndication : 1; // Is this an indication transaction? + BYTE mReserved : 6; + + BYTE mTransactionID; // Transaction ID +}; + +/*=========================================================================*/ +// Struct sQMIServiceRawTransactionHeader +// Struct to represent a QMI service transaction header (raw) +/*=========================================================================*/ +struct sQMIServiceRawTransactionHeader +{ + public: + BYTE mCompound : 1; // Is this a compound transaction? + BYTE mResponse : 1; // Is this a response transaction? + BYTE mIndication : 1; // Is this an indication transaction? + BYTE mReserved : 5; + + WORD mTransactionID; // Transaction ID +}; + +/*=========================================================================*/ +// Struct sQMIRawMessageHeader +// Struct to represent a QMI (control/service) message header (raw) +/*=========================================================================*/ +struct sQMIRawMessageHeader +{ + public: + WORD mMessageID; // Message ID + WORD mLength; // Length of message (not including this header) +}; + +/*=========================================================================*/ +// Struct sQMIRawContentHeader +// Struct to represent a QMI (control/service) content +// (i.e Type/Length/Value, TLV) header (raw) +/*=========================================================================*/ +struct sQMIRawContentHeader +{ + public: + BYTE mTypeID; // Content type ID + WORD mLength; // Content length (not including this header) +}; + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma pack( pop ) + + +/*=========================================================================*/ +// Struct sQMIServiceBuffer +// Struct to represent a QMI service channel request/response/indication +// (shared buffer) +/*=========================================================================*/ +struct sQMIServiceBuffer : public sProtocolBuffer +{ + public: + // Constructor + sQMIServiceBuffer( sSharedBuffer * pBuffer ); + + // Destructor + virtual ~sQMIServiceBuffer(); + + // (Inline) Is this a request? + bool IsRequest() const + { + bool bRequest = false; + + const sQMIServiceRawTransactionHeader * pHdr = GetHeader(); + if (pHdr != 0) + { + bRequest = (pHdr->mResponse == 0 && pHdr->mIndication == 0); + } + + return bRequest; + }; + + // (Inline) Is this a response? + bool IsResponse() const + { + bool bResponse = false; + + const sQMIServiceRawTransactionHeader * pHdr = GetHeader(); + if (pHdr != 0) + { + bResponse = (pHdr->mResponse == 1); + } + + return bResponse; + }; + + // (Inline) Is this an indication? + bool IsIndication() const + { + bool bInd = false; + + const sQMIServiceRawTransactionHeader * pHdr = GetHeader(); + if (pHdr != 0) + { + bInd = (pHdr->mIndication == 1); + } + + return bInd; + }; + + // (Inline) Return raw header + const sQMIServiceRawTransactionHeader * GetHeader() const + { + const sQMIServiceRawTransactionHeader * pHdr = 0; + if (IsValid() == true) + { + pHdr = (const sQMIServiceRawTransactionHeader *)GetBuffer(); + } + + return pHdr; + }; + + // (Inline) Return the message ID + ULONG GetMessageID() const + { + ULONG id = (ULONG)0xffffffff; + + const sQMIServiceRawTransactionHeader * pHdr = GetHeader(); + if (pHdr != 0) + { + pHdr++; + const sQMIRawMessageHeader * pMsgHdr = 0; + pMsgHdr = (sQMIRawMessageHeader *)pHdr; + + id = pMsgHdr->mMessageID; + } + + return id; + }; + + // (Inline) Return the transaction ID + WORD GetTransactionID() const + { + WORD id = (WORD)INVALID_QMI_TRANSACTION_ID; + + const sQMIServiceRawTransactionHeader * pHdr = GetHeader(); + if (pHdr != 0) + { + id = pHdr->mTransactionID; + } + + return id; + }; + + // (Inline) Return raw content array + const sQMIRawContentHeader * GetRawContents( ULONG & contentLen ) const + { + // Assume failure + ULONG len = 0; + const sQMIRawContentHeader * pRaw = 0; + + const sQMIServiceRawTransactionHeader * pHdr = GetHeader(); + if (pHdr != 0) + { + pHdr++; + const sQMIRawMessageHeader * pMsgHdr = 0; + pMsgHdr = (sQMIRawMessageHeader *)pHdr; + + len = pMsgHdr->mLength; + pMsgHdr++; + if (len > 0) + { + pRaw = (const sQMIRawContentHeader *)pMsgHdr; + } + } + + contentLen = len; + return pRaw; + }; + + // (Inline) Return content structures + std::map GetContents() const + { + return mContents; + }; + + // Return contents of mandatory result content + bool GetResult( + ULONG & returnCode, + ULONG & errorCode ); + + // Build a QMI request/response/indication + static sSharedBuffer * BuildBuffer( + eQMIService serviceType, + WORD msgID, + bool bResponse = false, + bool bIndication = false, + const BYTE * pData = 0, + ULONG dataLen = 0 ); + + protected: + // QMI protocol server has to be able to set the transaction ID + friend class cQMIProtocolServer; + + // Set the transaction ID + void SetTransactionID( WORD tid ) const + { + if (tid == (WORD)INVALID_QMI_TRANSACTION_ID || IsValid() == false) + { + return; + } + + sQMIServiceRawTransactionHeader * pHdr = 0; + pHdr = (sQMIServiceRawTransactionHeader *)GetHeader(); + if (pHdr != 0) + { + pHdr->mTransactionID = tid; + } + }; + + // Is this QMI request/response/indication packet valid? + virtual bool Validate(); + + /* Content TLV structures (indexed by type ID) */ + std::map mContents; + + private: + // Prevent 'upcopying' + sQMIServiceBuffer( const sProtocolBuffer & ); + sQMIServiceBuffer & operator = ( const sProtocolBuffer & ); +}; + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIEnum.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIEnum.h new file mode 100644 index 0000000..615c382 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIEnum.h @@ -0,0 +1,2350 @@ +/*=========================================================================== +FILE: + QMIEnum.h + +DESCRIPTION: + QMI protocol enumerations and related methods + +PUBLIC ENUMERATIONS AND METHODS: + eQMIService + eQMIMessageCTL + eQMIMessageWDS + eQMIMessageDMS + eQMIMessageNAS + eQMIMessageWMS + eQMIMessagePDS + eQMIMessageAUTH + eQMIMessageAT + eQMIMessageVoice + eQMIMessageUIM + eQMIMessagePBM + eQMIMessageSAR + eQMIMessageRMTFS + eQMIMessageWDA + eQMIMessageQCMAP + eQMIMessageCOEX + eQMIMessagePDC + eQMIMessageSTX + eQMIMessageRFRPE + eQMIMessageCAT + eQMIMessageRMS + eQMIMessageOMA + eQMIResultCode + eQMIErrorCode + eQMICallEndReason + eIPAddressType + eSMSMessageMode + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// Invalid QMI transaction ID +const ULONG INVALID_QMI_TRANSACTION_ID = 0; + +// QMI DMS PRL size constants +const ULONG QMI_DMS_MAX_PRL_SIZE = 16384; +const ULONG QMI_DMS_MAX_PRL_BLOCK = 256; + +/*=========================================================================*/ +// eQMIService Enumeration +// QMI Service Type Enumeration +/*=========================================================================*/ +enum eQMIService +{ + eQMI_SVC_ENUM_BEGIN = -1, + + eQMI_SVC_CONTROL, // 000 Control service + eQMI_SVC_WDS, // 001 Wireless data service + eQMI_SVC_DMS, // 002 Device management service + eQMI_SVC_NAS, // 003 Network access service + eQMI_SVC_QOS, // 004 Quality of service, err, service + eQMI_SVC_WMS, // 005 Wireless messaging service + eQMI_SVC_PDS, // 006 Position determination service + eQMI_SVC_AUTH, // 007 Authentication service + eQMI_SVC_AT, // 008 AT command processor service + eQMI_SVC_VOICE, // 009 Voice service + eQMI_SVC_CAT2, // 010 Card application toolkit service (new) + eQMI_SVC_UIM, // 011 UIM service + eQMI_SVC_PBM, // 012 Phonebook service + eQMI_SVC_QCHAT, // 013 QCHAT Service + eQMI_SVC_RMTFS, // 014 Remote file system service + eQMI_SVC_TEST, // 015 Test service + eQMI_SVC_LOC, // 016 Location service + eQMI_SVC_SAR, // 017 Specific absorption rate service + eQMI_SVC_IMSS, // 018 IMS settings service + eQMI_SVC_ADC, // 019 Analog to digital converter driver service + eQMI_SVC_CSD, // 020 Core sound driver service + eQMI_SVC_MFS, // 021 Modem embedded file system service + eQMI_SVC_TIME, // 022 Time service + eQMI_SVC_TS, // 023 Thermal sensors service + eQMI_SVC_TMD, // 024 Thermal mitigation device service + eQMI_SVC_SAP, // 025 Service access proxy service + eQMI_SVC_WDA, // 026 Wireless data administrative service + eQMI_SVC_TSYNC, // 027 TSYNC control service + eQMI_SVC_RFSA, // 028 Remote file system access service + eQMI_SVC_CSVT, // 029 Circuit switched videotelephony service + eQMI_SVC_QCMAP, // 030 Qualcomm mobile access point service + eQMI_SVC_IMSP, // 031 IMS presence service + eQMI_SVC_IMSVT, // 032 IMS videotelephony service + eQMI_SVC_IMSA, // 033 IMS application service + eQMI_SVC_COEX, // 034 Coexistence service + eQMI_SVC_RESERVED_35, // 035 Reserved + eQMI_SVC_PDC, // 036 Persistent device configuration service + eQMI_SVC_RESERVED_37, // 037 Reserved + eQMI_SVC_STX, // 038 Simultaneous transmit service + eQMI_SVC_BIT, // 039 Bearer independent transport service + eQMI_SVC_IMSRTP, // 040 IMS RTP service + eQMI_SVC_RFRPE, // 041 RF radiated performance enhancement service + eQMI_SVC_DSD, // 042 Data system determination service + eQMI_SVC_SSCTL, // 043 Subsystem control service + + eQMI_SVC_CAT = 224, // 224 Card application toolkit service + eQMI_SVC_RMS, // 225 Remote management service + eQMI_SVC_OMA, // 226 Open mobile alliance dev mgmt service + + eQMI_SVC_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIService validity check + +PARAMETERS: + svc [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIService svc ) +{ + bool retVal = false; + if ( (svc > eQMI_SVC_ENUM_BEGIN && svc <= eQMI_SVC_SSCTL) + || (svc >= eQMI_SVC_CAT && svc < eQMI_SVC_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageCTL Enumeration +// QMI Control Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageCTL +{ + eQMI_CTL_ENUM_BEGIN = -1, + + eQMI_CTL_SET_INSTANCE_ID = 32, // 32 Set the unique link instance ID + eQMI_CTL_GET_VERSION_INFO, // 33 Get supported service version info + eQMI_CTL_GET_CLIENT_ID, // 34 Get a unique client ID + eQMI_CTL_RELEASE_CLIENT_ID, // 35 Release the unique client ID + eQMI_CTL_REVOKE_CLIENT_ID_IND, // 36 Indication of client ID revocation + eQMI_CTL_INVALID_CLIENT_ID, // 37 Indication of invalid client ID + eQMI_CTL_SET_DATA_FORMAT, // 38 Set host driver data format + eQMI_CTL_SYNC, // 39 Synchronize client/server + eQMI_CTL_SYNC_IND = 39, // 39 Synchronize indication + eQMI_CTL_SET_EVENT, // 40 Set event report conditions + eQMI_CTL_EVENT_IND = 40, // 40 Event report indication + eQMI_CTL_SET_POWER_SAVE_CFG, // 41 Set power save config + eQMI_CTL_SET_POWER_SAVE_MODE, // 42 Set power save mode + eQMI_CTL_GET_POWER_SAVE_MODE, // 43 Get power save mode + + eQMI_CTL_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageCTL validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageCTL msgID ) +{ + bool retVal = false; + if (msgID >= eQMI_CTL_SET_INSTANCE_ID && msgID < eQMI_CTL_ENUM_END) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageWDS Enumeration +// QMI WDS Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageWDS +{ + eQMI_WDS_ENUM_BEGIN = -1, + + eQMI_WDS_RESET, // 000 Reset WDS service state variables + eQMI_WDS_SET_EVENT, // 001 Set connection state report conditions + eQMI_WDS_EVENT_IND = 1, // 001 Connection state report indication + eQMI_WDS_ABORT, // 002 Abort previously issued WDS command + eQMI_WDS_SET_INDICATION, // 003 Set indication conditions + + eQMI_WDS_GET_MESSAGES = 30, // 030 Get supported messages + eQMI_WDS_GET_FIELDS, // 031 Get supported fields + eQMI_WDS_START_NET, // 032 Start WDS network interface + eQMI_WDS_STOP_NET, // 033 Stop WDS network interface + eQMI_WDS_GET_PKT_STATUS, // 034 Get packet data connection status + eQMI_WDS_PKT_STATUS_IND = 34, // 034 Packet data connection status indication + eQMI_WDS_GET_RATES, // 035 Get current bit rates of the connection + eQMI_WDS_GET_STATISTICS, // 036 Get the packet data transfer statistics + eQMI_WDS_G0_DORMANT, // 037 Go dormant + eQMI_WDS_G0_ACTIVE, // 038 Go active + eQMI_WDS_CREATE_PROFILE, // 039 Create profile with specified settings + eQMI_WDS_MODIFY_PROFILE, // 040 Modify profile with specified settings + eQMI_WDS_DELETE_PROFILE, // 041 Delete the specified profile + eQMI_WDS_GET_PROFILE_LIST, // 042 Get all profiles + eQMI_WDS_GET_PROFILE, // 043 Get the specified profile + eQMI_WDS_GET_DEFAULTS, // 044 Get the default data session settings + eQMI_WDS_GET_SETTINGS, // 045 Get the runtime data session settings + eQMI_WDS_SET_MIP, // 046 Get the mobile IP setting + eQMI_WDS_GET_MIP, // 047 Set the mobile IP setting + eQMI_WDS_GET_DORMANCY, // 048 Get the dormancy status + + eQMI_WDS_GET_AUTOCONNECT = 52, // 052 Get the NDIS autoconnect setting + eQMI_WDS_GET_DURATION, // 053 Get the duration of data session + eQMI_WDS_GET_MODEM_STATUS, // 054 Get the modem status + eQMI_WDS_MODEM_IND = 54, // 054 Modem status indication + eQMI_WDS_GET_DATA_BEARER, // 055 Get the data bearer type + eQMI_WDS_GET_MODEM_INFO, // 056 Get the modem info + eQMI_WDS_MODEM_INFO_IND = 56, // 056 Modem info indication + + eQMI_WDS_GET_ACTIVE_MIP = 60, // 060 Get the active mobile IP profile + eQMI_WDS_SET_ACTIVE_MIP, // 061 Set the active mobile IP profile + eQMI_WDS_GET_MIP_PROFILE, // 062 Get mobile IP profile settings + eQMI_WDS_SET_MIP_PROFILE, // 063 Set mobile IP profile settings + eQMI_WDS_GET_MIP_PARAMS, // 064 Get mobile IP parameters + eQMI_WDS_SET_MIP_PARAMS, // 065 Set mobile IP parameters + eQMI_WDS_GET_LAST_MIP_STATUS, // 066 Get last mobile IP status + eQMI_WDS_GET_AAA_AUTH_STATUS, // 067 Get AN-AAA authentication status + eQMI_WDS_GET_CUR_DATA_BEARER, // 068 Get current data bearer + eQMI_WDS_GET_CALL_LIST, // 069 Get the call history list + eQMI_WDS_GET_CALL_ENTRY, // 070 Get an entry from the call history list + eQMI_WDS_CLEAR_CALL_LIST, // 071 Clear the call history list + eQMI_WDS_GET_CALL_LIST_MAX, // 072 Get maximum size of call history list + eQMI_WDS_GET_DEFAULT_PROF_NUM, // 073 Get default profile number + eQMI_WDS_SET_DEFAULT_PROF_NUM, // 074 Set default profile number + eQMI_WDS_RESET_PROFILE, // 075 Reset profile + eQMI_WDS_RESET_PROF_PARAM, // 076 Reset profile param to invalid + eQMI_WDS_SET_IP_FAMILY, // 077 Set the client IP family preference + eQMI_WDS_SET_FMC_TUNNEL, // 078 Set FMC tunnel parameters + eQMI_WDS_CLEAR_FMC_TUNNEL, // 079 Clear FMC tunnel parameters + eQMI_WDS_GET_FMC_TUNNEL, // 080 Get FMC tunnel parameters + eQMI_WDS_SET_AUTOCONNECT, // 081 Set the NDIS autoconnect setting + eQMI_WDS_GET_DNS, // 082 Get the DNS setting + eQMI_WDS_SET_DNS, // 083 Set the DNS setting + eQMI_WDS_GET_PRE_DORMANCY, // 084 Get the CDMA pre-dormancy settings + eQMI_WDS_SET_CAM_TIMER, // 085 Set the CAM timer + eQMI_WDS_GET_CAM_TIMER, // 086 Get the CAM timer + eQMI_WDS_SET_SCRM, // 087 Set SCRM status + eQMI_WDS_GET_SCRM, // 088 Get SCRM status + eQMI_WDS_SET_RDUD, // 089 Set RDUD status + eQMI_WDS_GET_RDUD, // 090 Get RDUD status + eQMI_WDS_GET_SIPMIP_CALL_TYPE, // 091 Set SIP/MIP call type + eQMI_WDS_SET_PM_PERIOD, // 092 Set EV-DO page monitor period + eQMI_WDS_PM_PERIOD_IND = 92, // 092 EV-DO page monitor period indication + eQMI_WDS_SET_FORCE_LONG_SLEEP, // 093 Set EV-DO force long sleep feature + eQMI_WDS_GET_PM_PERIOD, // 094 Get EV-DO page monitor period + eQMI_WDS_GET_CALL_THROTTLE, // 095 Get call throttle info + eQMI_WDS_GET_NSAPI, // 096 Get NSAPI + eQMI_WDS_SET_DUN_CTRL_PREF, // 097 Set DUN control preference + eQMI_WDS_GET_DUN_CTRL_INFO, // 098 Set DUN control info + eQMI_WDS_SET_DUN_CTRL_EVENT, // 099 Set DUN control event preference + eQMI_WDS_DUN_CTRL_IND = 99, // 099 DUN control event report indication + eQMI_WDS_PENDING_DUN_CTRL, // 100 Control pending DUN call + eQMI_WDS_TMGI_ACTIVATE, // 101 Activate eMBMS TMGI + eQMI_WDS_TMGI_ACT_IND = 101, // 101 eMBMS TMGI activate indication + eQMI_WDS_TMGI_DEACTIVATE, // 102 Activate eMBMS TMGI + eQMI_WDS_TMGI_DEACT_IND = 102, // 102 eMBMS TMGI activate indication + eQMI_WDS_TMGI_LIST_QUERY, // 103 Query for eMBMS TMGI list + eQMI_WDS_TMGI_LIST_IND, // 104 eMBMS TMGI list query indication + eQMI_WDS_GET_PREF_DATA_SYS, // 105 Get preferred data system + eQMI_WDS_GET_LAST_DATA_STATUS, // 106 Get last data call status + eQMI_WDS_GET_CURR_DATA_SYS, // 107 Get current data systems status + eQMI_WDS_GET_PDN_THROTTLE, // 108 Get PDN throttle info + + eQMI_WDS_GET_LTE_ATTACH = 133, // 133 Get LTE attach parameters + eQMI_WDS_RESET_PKT_STATS, // 134 Reset packet statistics + eQMI_WDS_GET_FLOW_CTRL_STATUS, // 135 Get flow control status + eQMI_WDS_TMGI_SWITCH, // 136 Activate/deactivate eMBMS TMGI + eQMI_WDS_TMGI_SWITCH_IND = 136,// 136 eMBMS TMGI activate/deactivate ind + eQMI_WDS_BIND_DATA_PORT, // 137 Bind data port + eQMI_WDS_SET_PDN_FILTER, // 138 Set additional PDN filter + eQMI_WDS_REMOVE_PDN_FILTER, // 139 Remove PDN filter + eQMI_WDS_EX_IP_CFG_IND, // 140 Extend IP config indication + eQMI_WDS_CFG_REV_IP_CONN_EVT, // 141 Configure reverse IP connection event + eQMI_WDS_REV_IP_TRANSPORT_IND, // 142 Reverse IP transport connection ind + eQMI_WDS_GET_IPSEC_SA_CFG, // 143 Get IPSec static SA config + eQMI_WDS_REV_IP_TPORT_CFG_DONE,// 144 Reverse IP transport config complete + eQMI_WDS_GET_EX_DATA_BEARER, // 145 Get extended data bearer + eQMI_WDS_GET_LTE_MAX_ATTACH, // 146 Get LTE maximum attach PDN number + eQMI_WDS_SET_LTE_ATTACH_PDNS, // 147 Set LTE attach PDN list + eQMI_WDS_GET_LTE_ATTACH_PDNS, // 148 Set LTE attach PDN list + eQMI_WDS_LTE_ATTACH_PDNS_IND, // 149 LTE attach PDN list indication + eQMI_WDS_SET_LTE_DATA_RETRY, // 150 Set LTE data retry + eQMI_WDS_GET_LTE_DATA_RETRY, // 151 Get LTE data retry + eQMI_WDS_SET_LTE_ATTACH_TYPE, // 152 Set LTE attach type + eQMI_WDS_GET_LTE_ATTACH_TYPE, // 153 Get LTE attach type + eQMI_WDS_REV_IP_FILTER_IND, // 154 Reverse IP transport filter ind + eQMI_WDS_HANDOFF_INFO_IND, // 155 Handoff info indication + + eQMI_WDS_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageWDS validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageWDS msgID ) +{ + bool retVal = false; + if ( (msgID > eQMI_WDS_ENUM_BEGIN && msgID <= eQMI_WDS_SET_INDICATION) + || (msgID >= eQMI_WDS_GET_MESSAGES && msgID <= eQMI_WDS_GET_DORMANCY) + || (msgID >= eQMI_WDS_GET_AUTOCONNECT && msgID <= eQMI_WDS_MODEM_INFO_IND) + || (msgID >= eQMI_WDS_GET_ACTIVE_MIP && msgID <= eQMI_WDS_GET_PDN_THROTTLE) + || (msgID >= eQMI_WDS_GET_LTE_ATTACH && msgID < eQMI_WDS_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageDMS Enumeration +// QMI DMS Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageDMS +{ + eQMI_DMS_ENUM_BEGIN = -1, + + eQMI_DMS_RESET, // 00 Reset DMS service state variables + eQMI_DMS_SET_EVENT, // 01 Set connection state report conditions + eQMI_DMS_EVENT_IND = 1, // 01 Connection state report indication + + eQMI_DMS_GET_MESSAGES = 30, // 30 Get supported messages + eQMI_DMS_GET_FIELDS, // 31 Get supported fields + eQMI_DMS_GET_CAPS, // 32 Get the device capabilities + eQMI_DMS_GET_MANUFACTURER, // 33 Get the device manfacturer + eQMI_DMS_GET_MODEL_ID, // 34 Get the device model ID + eQMI_DMS_GET_REV_ID, // 35 Get the device revision ID + eQMI_DMS_GET_NUMBER, // 36 Get the assigned voice number + eQMI_DMS_GET_IDS, // 37 Get the ESN/IMEI/MEID + eQMI_DMS_GET_POWER_STATE, // 38 Get the get power state + eQMI_DMS_UIM_SET_PIN_PROT, // 39 UIM - Set PIN protection + eQMI_DMS_UIM_PIN_VERIFY, // 40 UIM - Verify PIN + eQMI_DMS_UIM_PIN_UNBLOCK, // 41 UIM - Unblock PIN + eQMI_DMS_UIM_PIN_CHANGE, // 42 UIM - Change PIN + eQMI_DMS_UIM_GET_PIN_STATUS, // 43 UIM - Get PIN status + eQMI_DMS_GET_MSM_ID = 44, // 44 Get MSM ID + eQMI_DMS_GET_OPERATING_MODE, // 45 Get the operating mode + eQMI_DMS_SET_OPERATING_MODE, // 46 Set the operating mode + eQMI_DMS_GET_TIME, // 47 Get timestamp from the device + eQMI_DMS_GET_PRL_VERSION, // 48 Get the PRL version + eQMI_DMS_GET_ACTIVATED_STATE, // 49 Get the activation state + eQMI_DMS_ACTIVATE_AUTOMATIC, // 50 Perform an automatic activation + eQMI_DMS_ACTIVATE_MANUAL, // 51 Perform a manual activation + eQMI_DMS_GET_USER_LOCK_STATE, // 52 Get the lock state + eQMI_DMS_SET_USER_LOCK_STATE, // 53 Set the lock state + eQMI_DMS_SET_USER_LOCK_CODE, // 54 Set the lock PIN + eQMI_DMS_READ_USER_DATA, // 55 Read user data + eQMI_DMS_WRITE_USER_DATA, // 56 Write user data + eQMI_DMS_READ_ERI_FILE, // 57 Read the enhanced roaming indicator file + eQMI_DMS_FACTORY_DEFAULTS, // 58 Reset to factory defaults + eQMI_DMS_VALIDATE_SPC, // 59 Validate service programming code + eQMI_DMS_UIM_GET_ICCID, // 60 Get UIM ICCID + eQMI_DMS_GET_FIRWARE_ID, // 61 Get firmware ID + eQMI_DMS_SET_FIRMWARE_ID, // 62 Set firmware ID + eQMI_DMS_GET_HOST_LOCK_ID, // 63 Get host lock ID + eQMI_DMS_UIM_GET_CK_STATUS, // 64 UIM - Get control key status + eQMI_DMS_UIM_SET_CK_PROT, // 65 UIM - Set control key protection + eQMI_DMS_UIM_UNBLOCK_CK, // 66 UIM - Unblock facility control key + eQMI_DMS_GET_IMSI, // 67 Get the IMSI + eQMI_DMS_UIM_GET_STATE, // 68 UIM - Get the UIM state + eQMI_DMS_GET_BAND_CAPS, // 69 Get the device band capabilities + eQMI_DMS_GET_FACTORY_ID, // 70 Get the device factory ID + eQMI_DMS_GET_FIRMWARE_PREF, // 71 Get firmware preference + eQMI_DMS_SET_FIRMWARE_PREF, // 72 Set firmware preference + eQMI_DMS_LIST_FIRMWARE, // 73 List all stored firmware + eQMI_DMS_DELETE_FIRMWARE, // 74 Delete specified stored firmware + eQMI_DMS_SET_TIME, // 75 Set device time + eQMI_DMS_GET_FIRMWARE_INFO, // 76 Get stored firmware info + eQMI_DMS_GET_ALT_NET_CFG, // 77 Get alternate network config + eQMI_DMS_SET_ALT_NET_CFG, // 78 Set alternate network config + eQMI_DMS_GET_IMG_DLOAD_MODE, // 79 Get next image download mode + eQMI_DMS_SET_IMG_DLOAD_MODE, // 80 Set next image download mode + eQMI_DMS_GET_SW_VERSION, // 81 Get software version + eQMI_DMS_SET_SPC, // 82 Set SPC + eQMI_DMS_GET_CURRENT_PRL_INFO,// 83 Get current PRL info + eQMI_DMS_BIND_SUBSCRIPTION, // 84 Bind subscription + eQMI_DMS_GET_SUBSCRIPTION, // 85 Get bound subscription + + eQMI_DMS_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageDMS validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageDMS msgID ) +{ + bool retVal = false; + if ( (msgID > eQMI_DMS_ENUM_BEGIN && msgID <= eQMI_DMS_EVENT_IND) + || (msgID >= eQMI_DMS_GET_MESSAGES && msgID < eQMI_DMS_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageNAS Enumeration +// QMI NAS Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageNAS +{ + eQMI_NAS_ENUM_BEGIN = -1, + + eQMI_NAS_RESET, // 000 Reset NAS service state variables + eQMI_NAS_ABORT, // 001 Abort previously issued NAS command + eQMI_NAS_SET_EVENT, // 002 Set NAS state report conditions + eQMI_NAS_EVENT_IND = 2, // 002 Connection state report indication + eQMI_NAS_SET_REG_EVENT, // 003 Set NAS registration report conditions + + eQMI_NAS_GET_MESSAGES = 30, // 030 Get supported messages + eQMI_NAS_GET_FIELDS, // 031 Get supported fields + eQMI_NAS_GET_RSSI, // 032 Get the signal strength + eQMI_NAS_SCAN_NETS, // 033 Scan for visible network + eQMI_NAS_REGISTER_NET, // 034 Initiate a network registration + eQMI_NAS_ATTACH_DETACH, // 035 Initiate an attach or detach action + eQMI_NAS_GET_SS_INFO, // 036 Get info about current serving system + eQMI_NAS_SS_INFO_IND = 36, // 036 Current serving system info indication + eQMI_NAS_GET_HOME_INFO, // 037 Get info about home network + eQMI_NAS_GET_NET_PREF_LIST, // 038 Get the list of preferred networks + eQMI_NAS_SET_NET_PREF_LIST, // 039 Set the list of preferred networks + eQMI_NAS_GET_NET_BAN_LIST, // 040 Get the list of forbidden networks + eQMI_NAS_SET_NET_BAN_LIST, // 041 Set the list of forbidden networks + eQMI_NAS_SET_TECH_PREF, // 042 Set the technology preference + eQMI_NAS_GET_TECH_PREF, // 043 Get the technology preference + eQMI_NAS_GET_ACCOLC, // 044 Get the Access Overload Class + eQMI_NAS_SET_ACCOLC, // 045 Set the Access Overload Class + eQMI_NAS_GET_SYSPREF, // 046 Get the CDMA system preference + eQMI_NAS_GET_NET_PARAMS, // 047 Get various network parameters + eQMI_NAS_SET_NET_PARAMS, // 048 Set various network parameters + eQMI_NAS_GET_RF_INFO, // 049 Get the SS radio/band channel info + eQMI_NAS_GET_AAA_AUTH_STATUS, // 050 Get AN-AAA authentication status + eQMI_NAS_SET_SYS_SELECT_PREF, // 051 Set system selection preference + eQMI_NAS_GET_SYS_SELECT_PREF, // 052 Get system selection preference + eQMI_NAS_SYS_SELECT_IND = 52, // 052 System selection pref indication + + eQMI_NAS_SET_DDTM_PREF = 55, // 055 Set DDTM preference + eQMI_NAS_GET_DDTM_PREF, // 056 Get DDTM preference + eQMI_NAS_DDTM_IND = 56, // 056 DDTM preference indication + eQMI_NAS_GET_OPERATER_NAME, // 057 Get operator name data + eQMI_NAS_OPERATER_NAME_IND, // 058 Operator name data indication + eQMI_NAS_GET_PLMN_MODE, // 059 Get PLMN mode bit from CSP + eQMI_NAS_PLMN_MODE_IND, // 060 CSP PLMN mode bit indication + eQMI_NAS_UPDATE_AKEY, // 061 Update the A-KEY + eQMI_NAS_GET_3GPP2_SUBS_INFO, // 062 Get 3GPP2 subscription info + eQMI_NAS_SET_3GPP2_SUBS_INFO, // 063 Set 3GPP2 subscription info + eQMI_NAS_MOB_CAI_REV, // 064 Get mobile CAI revision information + eQMI_NAS_GET_RTRE_CONFIG, // 065 Get RTRE configuration information + eQMI_NAS_SET_RTRE_CONFIG, // 066 Set RTRE configuration information + eQMI_NAS_GET_CELL_LOC_INFO, // 067 Get cell location information + eQMI_NAS_GET_PLMN_NAME, // 068 Get operator name for specified network + eQMI_NAS_BIND_SUBS, // 069 Bind client to a specific subscription + eQMI_NAS_MANAGED_ROAMING_IND, // 070 Managed roaming indication + eQMI_NAS_DSB_PREF_IND, // 071 Dual standby preference indication + eQMI_NAS_SUBS_INFO_IND, // 072 Subscription info indication + eQMI_NAS_GET_MODE_PREF, // 073 Get mode preference + + eQMI_NAS_SET_DSB_PREF = 75, // 075 Set dual standby preference + eQMI_NAS_NETWORK_TIME_IND, // 076 Network time indication + eQMI_NAS_GET_SYSTEM_INFO, // 077 Get system info + eQMI_NAS_SYSTEM_INFO_IND, // 078 System info indication + eQMI_NAS_GET_SIGNAL_INFO, // 079 Get signal info + eQMI_NAS_CFG_SIGNAL_INFO, // 080 Configure signal info report + eQMI_NAS_SIGNAL_INFO_IND, // 081 Signal info indication + eQMI_NAS_GET_ERROR_RATE, // 082 Get error rate info + eQMI_NAS_ERROR_RATE_IND, // 083 Error rate indication + eQMI_NAS_EVDO_SESSION_IND, // 084 CDMA 1xEV-DO session close indication + eQMI_NAS_EVDO_UATI_IND, // 085 CDMA 1xEV-DO UATI update indication + eQMI_NAS_GET_EVDO_SUBTYPE, // 086 Get CDMA 1xEV-DO protocol subtype + eQMI_NAS_GET_EVDO_COLOR_CODE, // 087 Get CDMA 1xEV-DO color code + eQMI_NAS_GET_ACQ_SYS_MODE, // 088 Get current acquisition system mode + eQMI_NAS_SET_RX_DIVERSITY, // 089 Set the RX diversity + eQMI_NAS_GET_RX_TX_INFO, // 090 Get detailed RX/TX information + eQMI_NAS_UPDATE_AKEY_EXT, // 091 Update the A-KEY (extended) + eQMI_NAS_GET_DSB_PREF, // 092 Get dual standby preference + eQMI_NAS_DETACH_LTE, // 093 Detach the current LTE system + eQMI_NAS_BLOCK_LTE_PLMN, // 094 Block LTE PLMN + eQMI_NAS_UNBLOCK_LTE_PLMN, // 095 Unblock LTE PLMN + eQMI_NAS_RESET_LTE_PLMN_BLK, // 096 Reset LTE PLMN blocking + eQMI_NAS_CUR_PLMN_NAME_IND, // 097 Current PLMN name indication + eQMI_NAS_CONFIG_EMBMS, // 098 Configure eMBMS + eQMI_NAS_GET_EMBMS_STATUS, // 099 Get eMBMS status + eQMI_NAS_EMBMS_STATUS_IND, // 100 eMBMS status indication + eQMI_NAS_GET_CDMA_POS_INFO, // 101 Get CDMA position info + eQMI_NAS_RF_BAND_INFO_IND, // 102 RF band info indication + eQMI_NAS_FORCE_NET_SEARCH, // 103 Force network search + eQMI_NAS_NET_REJECT_IND, // 104 Network reject indication + eQMI_NAS_GET_MANAGED_ROAM, // 105 Get managed roaming configuration + eQMI_NAS_RTRE_CONFIG_IND, // 106 RTRE configuration indication + eQMI_NAS_GET_CENTRALIZED_EOM, // 107 Get centralized EONS support + eQMI_NAS_CFG_SIGNAL_INFO2, // 108 Configure signal info report (V2) + eQMI_NAS_GET_TDS_CELL_INFO, // 109 Get TD-SCDMA cell/position info + eQMI_NAS_SET_HPLMN_IRAT_TIMER,// 110 Set HPLMN IRAT search timer + eQMI_NAS_GET_EMBMS_SIQ_QUAL, // 111 Get eMBMS signal quality + eQMI_NAS_LIMIT_SYS_INFO, // 112 Limit system info indications + eQMI_NAS_GET_SYS_INFO_LIMITS, // 113 Get system info indication limits + eQMI_NAS_UPDATE_IMS_STATUS, // 114 Update IMS status + eQMI_NAS_GET_IMS_PREFERENCE, // 115 Get IMS preference status + eQMI_NAS_IMS_PREFERENCE_IND, // 116 IMS preference status indication + eQMI_NAS_CFG_IND_PLMN_NAME, // 117 Configure indication for PLMN name + eQMI_NAS_CDMA_AVOID_SYSTEM, // 118 CDMA avoid system + eQMI_NAS_GET_AVOIDED_SYSTEMS, // 119 Get CDMA avoided system list + eQMI_NAS_SET_HPLMN_SRCH_TIMER,// 120 Set HPLMN search timer + eQMI_NAS_GET_HPLMN_SRCH_TIMER,// 121 Get HPLMN search timer + eQMI_NAS_SET_E911_STATE, // 122 Set E911 state + eQMI_NAS_E911_STATE_IND, // 123 E911 state ready indication + eQMI_NAS_GET_SUBS_INFO, // 124 Get subscription info + eQMI_NAS_GET_NET_TIME, // 125 Get network time + eQMI_NAS_GET_LTE_SIB16_TIME, // 126 Get LTE SIB16 network time + eQMI_NAS_LTE_SIB16_TIME_IND, // 127 LTE SIB16 network time indication + + eQMI_NAS_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageNAS validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageNAS msgID ) +{ + bool retVal = false; + if ( (msgID > eQMI_NAS_ENUM_BEGIN && msgID <= eQMI_NAS_SET_REG_EVENT) + || (msgID >= eQMI_NAS_GET_MESSAGES && msgID <= eQMI_NAS_SYS_SELECT_IND) + || (msgID >= eQMI_NAS_SET_DDTM_PREF && msgID <= eQMI_NAS_GET_MODE_PREF) + || (msgID >= eQMI_NAS_SET_DSB_PREF && msgID < eQMI_NAS_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageWMS Enumeration +// QMI WMS Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageWMS +{ + eQMI_WMS_ENUM_BEGIN = -1, + + eQMI_WMS_RESET, // 00 Reset WMS service state variables + eQMI_WMS_SET_EVENT, // 01 Set new message report conditions + eQMI_WMS_EVENT_IND = 1, // 01 New message report indication + + eQMI_WMS_GET_MESSAGES = 30, // 030 Get supported messages + eQMI_WMS_GET_FIELDS, // 031 Get supported fields + eQMI_WMS_RAW_SEND, // 32 Send a raw message + eQMI_WMS_RAW_WRITE, // 33 Write a raw message to the device + eQMI_WMS_RAW_READ, // 34 Read a raw message from the device + eQMI_WMS_MODIFY_TAG, // 35 Modify message tag on the device + eQMI_WMS_DELETE, // 36 Delete message by index/tag/memory + + eQMI_WMS_GET_MSG_PROTOCOL = 48, // 48 Get the current message protocol + eQMI_WMS_GET_MSG_LIST, // 49 Get list of messages from the device + eQMI_WMS_SET_ROUTES, // 50 Set routes for message memory storage + eQMI_WMS_GET_ROUTES, // 51 Get routes for message memory storage + eQMI_WMS_GET_SMSC_ADDR, // 52 Get SMSC address + eQMI_WMS_SET_SMSC_ADDR, // 53 Set SMSC address + eQMI_WMS_GET_MSG_LIST_MAX, // 54 Get maximum size of SMS storage + eQMI_WMS_SEND_ACK, // 55 Send ACK + eQMI_WMS_SET_RETRY_PERIOD, // 56 Set retry period + eQMI_WMS_SET_RETRY_INTERVAL, // 57 Set retry interval + eQMI_WMS_SET_DC_DISCO_TIMER, // 58 Set DC auto-disconnect timer + eQMI_WMS_SET_MEMORY_STATUS, // 59 Set memory storage status + eQMI_WMS_SET_BC_ACTIVATION, // 60 Set broadcast activation + eQMI_WMS_SET_BC_CONFIG, // 61 Set broadcast config + eQMI_WMS_GET_BC_CONFIG, // 62 Get broadcast config + eQMI_WMS_MEMORY_FULL_IND, // 63 Memory full indication + eQMI_WMS_GET_DOMAIN_PREF, // 64 Get domain preference + eQMI_WMS_SET_DOMAIN_PREF, // 65 Set domain preference + eQMI_WMS_MEMORY_SEND, // 66 Send message from memory store + eQMI_WMS_GET_MSG_WAITING, // 67 Get message waiting info + eQMI_WMS_MSG_WAITING_IND, // 68 Message waiting indication + eQMI_WMS_SET_PRIMARY_CLIENT, // 69 Set client as primary client + eQMI_WMS_SMSC_ADDR_IND, // 70 SMSC address indication + eQMI_WMS_INDICATOR_REG, // 71 Register for indicators + eQMI_WMS_GET_TRANSPORT_INFO, // 72 Get transport layer info + eQMI_WMS_TRANSPORT_INFO_IND, // 73 Transport layer info indication + eQMI_WMS_GET_NW_REG_INFO, // 74 Get network registration info + eQMI_WMS_NW_REG_INFO_IND, // 75 Network registration info indication + eQMI_WMS_BIND_SUBSCRIPTION, // 76 Bind client to a subscription + eQMI_WMS_GET_INDICATOR_REG, // 77 Get indicator registration + eQMI_WMS_GET_SMS_PARAMETERS, // 78 Get SMS EF-SMSP parameters + eQMI_WMS_SET_SMS_PARAMETERS, // 79 Set SMS EF-SMSP parameters + eQMI_WMS_CALL_STATUS_IND, // 80 Call status indication + eQMI_WMS_GET_DOMAIN_PREF_CFG, // 81 Get domain pref config + eQMI_WMS_SET_DOMAIN_PREF_CFG, // 82 Set domain pref config + eQMI_WMS_GET_RETRY_PERIOD, // 83 Get retry period + eQMI_WMS_GET_RETRY_INTERVAL, // 84 Get retry interval + eQMI_WMS_GET_DC_DISCO_TIMER, // 85 Get DC auto-disconnect timer + eQMI_WMS_GET_MEMORY_STATUS, // 86 Get memory storage status + eQMI_WMS_GET_PRIMARY_CLIENT, // 87 Get primary cleint + eQMI_WMS_GET_SUBSCR_BINDING, // 88 Get client subscription binding + eQMI_WMS_ASYNC_RAW_SEND, // 89 Asynchronously send a raw message + eQMI_WMS_ASYNC_RAW_SEND_IND = 89,// 89 Asynchronous send indication + eQMI_WMS_ASYNC_SEND_ACK, // 90 Asynchronously send ACK + eQMI_WMS_ASYNC_SEND_ACK_IND = 90,// 90 Asynchronou send ACK indication + eQMI_WMS_ASYNC_MEMORY_SEND, // 91 Async send msg from memory store + eQMI_WMS_ASYNC_MEM_SEND_IND = 91,// 91 Async memory store send indication + eQMI_WMS_GET_SERVICE_READY, // 92 Get service ready status + eQMI_WMS_SERVICE_READY_IND, // 93 Service ready status indication + eQMI_WMS_BC_CONFIG_IND, // 94 Broadcast config indication + eQMI_WMS_SET_MSG_WAITING, // 95 Set message waiting info + + eQMI_WMS_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageWMS validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageWMS msgID ) +{ + bool retVal = false; + if ( (msgID > eQMI_WMS_ENUM_BEGIN && msgID <= eQMI_WMS_EVENT_IND) + || (msgID >= eQMI_WMS_GET_MESSAGES && msgID <= eQMI_WMS_DELETE) + || (msgID >= eQMI_WMS_GET_MSG_PROTOCOL && msgID < eQMI_WMS_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessagePDS Enumeration +// QMI PDS Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessagePDS +{ + eQMI_PDS_ENUM_BEGIN = -1, + + eQMI_PDS_RESET, // 000 Reset PDS service state variables + eQMI_PDS_SET_EVENT, // 001 Set PDS report conditions + eQMI_PDS_EVENT_IND = 1, // 001 PDS report indication + + eQMI_PDS_GET_STATE = 32, // 032 Return PDS service state + eQMI_PDS_STATE_IND = 32, // 032 PDS service state indication + eQMI_PDS_SET_STATE, // 033 Set PDS service state + eQMI_PDS_START_SESSION, // 034 Start a PDS tracking session + eQMI_PDS_GET_SESSION_INFO, // 035 Get PDS tracking session info + eQMI_PDS_FIX_POSITION, // 036 Manual tracking session position + eQMI_PDS_END_SESSION, // 037 End a PDS tracking session + eQMI_PDS_GET_NMEA_CFG, // 038 Get NMEA sentence config + eQMI_PDS_SET_NMEA_CFG, // 039 Set NMEA sentence config + eQMI_PDS_INJECT_TIME, // 040 Inject a time reference + eQMI_PDS_GET_DEFAULTS, // 041 Get default tracking session config + eQMI_PDS_SET_DEFAULTS, // 042 Set default tracking session config + eQMI_PDS_GET_XTRA_PARAMS, // 043 Get the GPS XTRA parameters + eQMI_PDS_SET_XTRA_PARAMS, // 044 Set the GPS XTRA parameters + eQMI_PDS_FORCE_XTRA_DL, // 045 Force a GPS XTRA database download + eQMI_PDS_GET_AGPS_CONFIG, // 046 Get the AGPS mode configuration + eQMI_PDS_SET_AGPS_CONFIG, // 047 Set the AGPS mode configuration + eQMI_PDS_GET_SVC_AUTOTRACK, // 048 Get the service auto-tracking state + eQMI_PDS_SET_SVC_AUTOTRACK, // 049 Set the service auto-tracking state + eQMI_PDS_GET_COM_AUTOTRACK, // 050 Get COM port auto-tracking config + eQMI_PDS_SET_COM_AUTOTRACK, // 051 Set COM port auto-tracking config + eQMI_PDS_RESET_DATA, // 052 Reset PDS service data + eQMI_PDS_SINGLE_FIX, // 053 Request single position fix + eQMI_PDS_GET_VERSION, // 054 Get PDS service version + eQMI_PDS_INJECT_XTRA, // 055 Inject XTRA data + eQMI_PDS_INJECT_POSITION, // 056 Inject position data + eQMI_PDS_INJECT_WIFI, // 057 Inject Wi-Fi obtained data + eQMI_PDS_GET_SBAS_CONFIG, // 058 Get SBAS config + eQMI_PDS_SET_SBAS_CONFIG, // 059 Set SBAS config + eQMI_PDS_SEND_NI_RESPONSE, // 060 Send network initiated response + eQMI_PDS_INJECT_ABS_TIME, // 061 Inject absolute time + eQMI_PDS_INJECT_EFS, // 062 Inject EFS data + eQMI_PDS_GET_DPO_CONFIG, // 063 Get DPO config + eQMI_PDS_SET_DPO_CONFIG, // 064 Set DPO config + eQMI_PDS_GET_ODP_CONFIG, // 065 Get ODP config + eQMI_PDS_SET_ODP_CONFIG, // 066 Set ODP config + eQMI_PDS_CANCEL_SINGLE_FIX, // 067 Cancel single position fix + eQMI_PDS_GET_GPS_STATE, // 068 Get GPS state + eQMI_PDS_SET_PPM_EVT_REPORT, // 069 Set PPM event report + eQMI_PDS_SET_SPI_REPORT, // 070 Set SPI streaming reporting + eQMI_PDS_SET_SPI_RPT_IND = 70, // 070 Set SPI streaming indication + eQMI_PDS_SET_SPI_STATUS, // 071 Set SPI status + eQMI_PDS_SET_PPM_REPORT, // 072 Set PPM reporting state + eQMI_PDS_SET_PPM_RPT_IND = 72, // 072 Set PPM reporting state indication + eQMI_PDS_FORCE_RECEIVER_OFF, // 073 Force receiver off + + eQMI_PDS_GET_METHODS = 80, // 080 Get GPS position methods state + eQMI_PDS_SET_METHODS, // 081 Set GPS position methods state + eQMI_PDS_INJECT_SENSOR, // 082 Inject sensor data + eQMI_PDS_INJECT_TIME_SYNC, // 083 Inject time sync data + eQMI_PDS_GET_SENSOR_CFG, // 084 Get sensor config + eQMI_PDS_SET_SENSOR_CFG, // 085 Set sensor config + eQMI_PDS_GET_NAV_CFG, // 086 Get navigation config + eQMI_PDS_SET_NAV_CFG, // 087 Set navigation config + + eQMI_PDS_SET_WLAN_BLANK = 90, // 090 Set WLAN blanking + eQMI_PDS_SET_LBS_SC_RPT, // 091 Set LBS security challenge reporting + eQMI_PDS_LBS_SC_IND = 91, // 091 LBS security challenge indication + eQMI_PDS_SET_LBS_SC, // 092 Set LBS security challenge + eQMI_PDS_GET_LBS_ENCRYPT_CFG, // 093 Get LBS security encryption config + eQMI_PDS_SET_LBS_UPDATE_RATE, // 094 Set LBS security update rate + eQMI_PDS_SET_CELLDB_CONTROL, // 095 Set cell database control + eQMI_PDS_READY_IND, // 096 Ready indication + eQMI_PDS_INJECT_MOTION_DATA, // 097 Inject motion data + eQMI_PDS_SET_GNSS_ERR_REPORT, // 098 Set GNSS error recovery report + eQMI_PDS_GNSS_ERR_IND = 98, // 098 GNSS error recovery report indication + eQMI_PDS_RESET_SERVICE, // 099 Reset location service + eQMI_PDS_INJECT_TEST_DATA, // 100 Inject test data + eQMI_PDS_SET_GNSS_RF_CFG, // 101 Set GNSS RF config + eQMI_PDS_INJECT_COG_DATA, // 102 Inject course over ground data + eQMI_PDS_INJECT_SUPL_CERT, // 103 Inject SUPL certificate + eQMI_PDS_DELETE_SUPL_CERT , // 104 Delete SUPL certificate + eQMI_PDS_GET_IS801_OVER_SUPL, // 105 Get IS-801 Over SUPL indicator + eQMI_PDS_SET_IS801_OVER_SUPL, // 106 Set IS-801 Over SUPL indicator + eQMI_PDS_GET_SUPL_HASH_ALG, // 107 Get SUPL hash algorithm + eQMI_PDS_SET_SUPL_HASH_ALG, // 108 Set SUPL hash algorithm + eQMI_PDS_GET_SUPL_MAX_VERSION, // 109 Get SUPL maximum version + eQMI_PDS_SET_SUPL_MAX_VERSION, // 110 Set SUPL maximum version + eQMI_PDS_GET_SUPL_SECURITY, // 111 Get SUPL security + eQMI_PDS_SET_SUPL_SECURITY, // 112 Set SUPL security + eQMI_PDS_GET_SUPL_TLS_VERSION, // 113 Get SUPL TLS version + eQMI_PDS_SET_SUPL_TLS_VERSION, // 114 Set SUPL TLS version + eQMI_PDS_GET_AGNSS_POS_MODES, // 115 Get AGNSS positioning modes + eQMI_PDS_SET_AGNSS_POS_MODES, // 116 Set AGNSS positioning modes + eQMI_PDS_GET_EMERGENCY_PROTO, // 117 Get emergency protocol config + eQMI_PDS_SET_EMERGENCY_PROTO, // 118 Set emergency protocol config + eQMI_PDS_GET_APN_PROFILES, // 119 Get APN profiles + eQMI_PDS_SET_APN_PROFILES, // 120 Set APN profiles + eQMI_PDS_GET_HOME_SUPL_ADDR, // 121 Get home SUPL address + eQMI_PDS_SET_HOME_SUPL_ADDR, // 122 Set home SUPL address + eQMI_PDS_INJECT_VEHICLE_DATA, // 123 Inject vehicle sensor data + eQMI_PDS_INJECT_PEDO_DATA, // 124 Inject pedometer data + + eQMI_PDS_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessagePDS validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessagePDS msgID ) +{ + bool retVal = false; + if ( (msgID > eQMI_PDS_ENUM_BEGIN && msgID <= eQMI_PDS_EVENT_IND) + || (msgID >= eQMI_PDS_GET_STATE && msgID <= eQMI_PDS_FORCE_RECEIVER_OFF) + || (msgID >= eQMI_PDS_GET_METHODS && msgID <= eQMI_PDS_SET_NAV_CFG) + || (msgID >= eQMI_PDS_SET_WLAN_BLANK && msgID < eQMI_PDS_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageAUTH Enumeration +// QMI Authentication Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageAUTH +{ + eQMI_AUTH_ENUM_BEGIN = -1, + + eQMI_AUTH_START_EAP = 32, // 32 Start the EAP session + eQMI_AUTH_SEND_EAP, // 33 Send and receive EAP packets + eQMI_AUTH_EAP_RESULT_IND, // 34 EAP session result indication + eQMI_AUTH_GET_EAP_KEYS, // 35 Get the EAP session keys + eQMI_AUTH_END_EAP, // 36 End the EAP session + eQMI_AUTH_RUN_AKA, // 37 Runs the AKA algorithm + eQMI_AUTH_AKA_RESULT_IND, // 38 AKA algorithm result indication + + eQMI_AUTH_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageAUTH validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageAUTH msgID ) +{ + bool retVal = false; + if (msgID >= eQMI_AUTH_START_EAP && msgID < eQMI_AUTH_ENUM_END) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageAT Enumeration +// QMI AT Command Processor Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageAT +{ + eQMI_AT_ENUM_BEGIN = -1, + + eQMI_AT_RESET, // 00 Reset AT service state variables + + eQMI_AT_REG_COMMANDS = 32, // 32 Register AT commands to be forwarded + eQMI_AT_COMMAND_IND, // 33 AT command indication + eQMI_AT_SEND_RESPONSE, // 34 Send the response to an AT command + eQMI_AT_ABORT_IND, // 35 AT command abort indication + + eQMI_AT_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageAT validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageAT msgID ) +{ + bool retVal = false; + if ( (msgID == eQMI_AT_RESET) + || (msgID >= eQMI_AT_REG_COMMANDS && msgID < eQMI_AT_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + + +/*=========================================================================*/ +// eQMIMessageVoice Enumeration +// QMI Voice Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageVoice +{ + eQMI_VOICE_ENUM_BEGIN = -1, + + eQMI_VOICE_INDICATION_REG = 3, // 03 Set indication registration state + + eQMI_VOICE_GET_MESSAGES = 30, // 30 Get supported messages + eQMI_VOICE_GET_FIELDS, // 31 Get supported fields + eQMI_VOICE_CALL_ORIGINATE, // 32 Originate a voice call + eQMI_VOICE_CALL_END, // 33 End a voice call + eQMI_VOICE_CALL_ANSWER, // 34 Answer incoming voice call + + eQMI_VOICE_GET_CALL_INFO = 36, // 36 Get call information + eQMI_VOICE_OTASP_STATUS_IND, // 37 OTASP/OTAPA event indication + eQMI_VOICE_INFO_REC_IND, // 38 New info record indication + eQMI_VOICE_SEND_FLASH, // 39 Send a simple flash + eQMI_VOICE_BURST_DTMF, // 40 Send a burst DTMF + eQMI_VOICE_START_CONT_DTMF, // 41 Starts a continuous DTMF + eQMI_VOICE_STOP_CONT_DTMF, // 42 Stops a continuous DTMF + eQMI_VOICE_DTMF_IND, // 43 DTMF event indication + eQMI_VOICE_SET_PRIVACY_PREF, // 44 Set privacy preference + eQMI_VOICE_PRIVACY_IND, // 45 Privacy change indication + eQMI_VOICE_ALL_STATUS_IND, // 46 Voice all call status indication + eQMI_VOICE_GET_ALL_STATUS, // 47 Get voice all call status + + eQMI_VOICE_MANAGE_CALLS = 49, // 49 Manage calls + eQMI_VOICE_SUPS_NOTIFICATION_IND, // 50 Supplementary service notifications + eQMI_VOICE_SET_SUPS_SERVICE, // 51 Manage supplementary service + eQMI_VOICE_GET_CALL_WAITING, // 52 Query sup service call waiting + eQMI_VOICE_GET_CALL_BARRING, // 53 Query sup service call barring + eQMI_VOICE_GET_CLIP, // 54 Query sup service CLIP + eQMI_VOICE_GET_CLIR, // 55 Query sup service CLIR + eQMI_VOICE_GET_CALL_FWDING, // 56 Query sup service call forwarding + eQMI_VOICE_SET_CALL_BARRING_PWD, // 57 Set call barring password + eQMI_VOICE_ORIG_USSD, // 58 Initiate USSD operation then wait + eQMI_VOICE_ANSWER_USSD, // 59 Answer USSD request + eQMI_VOICE_CANCEL_USSD, // 60 Cancel USSD operation + eQMI_VOICE_USSD_RELEASE_IND, // 61 USSD release indication + eQMI_VOICE_USSD_IND, // 62 USSD request/notification indication + eQMI_VOICE_UUS_IND, // 63 UUS information indication + eQMI_VOICE_SET_CONFIG, // 64 Set config + eQMI_VOICE_GET_CONFIG, // 65 Get config + eQMI_VOICE_SUPS_IND, // 66 Sup service request indication + eQMI_VOICE_ASYNC_ORIG_USSD, // 67 Initiate USSD operation + eQMI_VOICE_ASYNC_USSD_IND = 67, // 67 USSD request/notification indication + eQMI_VOICE_BIND_SUBSCRIPTION, // 68 Bind subscription + eQMI_VOICE_ALS_SET_LINE_SW, // 69 ALS set line switching + eQMI_VOICE_ALS_SELECT_LINE, // 70 ALS select line + eQMI_VOICE_AOC_RESET_ACM, // 71 AOC reset ACM + eQMI_VOICE_AOC_SET_ACM_MAX, // 72 ACM set ACM maximum + eQMI_VOICE_AOC_GET_CM_INFO, // 73 AOC get call meter info + eQMI_VOICE_AOC_LOW_FUNDS_IND, // 74 AOC low funds indication + eQMI_VOICE_GET_COLP, // 75 Get COLP info + eQMI_VOICE_GET_COLR, // 76 Get COLR info + eQMI_VOICE_GET_CNAP, // 77 Get CNAP info + eQMI_VOICE_MANAGE_IP_CALLS, // 78 Manage VoIP calls + eQMI_VOICE_ALS_GET_LINE_SW, // 79 ALS get line switching + eQMI_VOICE_ALS_GET_LINE_SEL, // 80 ALS get selected line + eQMI_VOICE_MODIFIED_IND, // 81 Call modified indication + eQMI_VOICE_MODIFY_ACCEPT_IND, // 82 Call modify accept indication + eQMI_VOICE_SPEECH_CODEC_IND, // 83 Speech codec info indication + eQMI_VOICE_HANDOVER_IND, // 84 Handover indication + eQMI_VOICE_CONFERENCE_INFO_IND, // 85 Conference info indication + eQMI_VOICE_CONFERENCE_JOIN_IND, // 86 Conference join indication + eQMI_VOICE_CONFERENCE_UPDATE_IND, // 87 Conference update indication + eQMI_VOICE_EXT_BURST_TYPE_IND, // 88 Extended burst type indication + eQMI_VOICE_MT_PAGE_MISS_IND, // 89 MT page miss indication + eQMI_VOICE_CC_RESULT_INFO_IND, // 90 Call control result info indication + + eQMI_VOICE_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageVoice validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageVoice msgID ) +{ + bool retVal = false; + if ( (msgID == eQMI_VOICE_INDICATION_REG) + || (msgID >= eQMI_VOICE_GET_MESSAGES && msgID <= eQMI_VOICE_CALL_ANSWER) + || (msgID >= eQMI_VOICE_GET_CALL_INFO && msgID <= eQMI_VOICE_GET_ALL_STATUS) + || (msgID >= eQMI_VOICE_MANAGE_CALLS && msgID < eQMI_VOICE_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageUIM Enumeration +// QMI UIM Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageUIM +{ + eQMI_UIM_ENUM_BEGIN = -1, + + eQMI_UIM_RESET, // 00 Reset + + eQMI_UIM_GET_MESSAGES = 30, // 30 Get supported messages + eQMI_UIM_GET_FIELDS, // 31 Get supported fields + eQMI_UIM_READ_TRANSPARENT, // 32 Read data + eQMI_UIM_READ_TRANSPARENT_IND = 32, // 32 Read data indication + eQMI_UIM_READ_RECORD, // 33 Read one or more records + eQMI_UIM_READ_RECORD_IND = 33, // 33 Read records indication + eQMI_UIM_WRITE_TRANSPARENT, // 34 Write data + eQMI_UIM_WRITE_TRANSPARENT_IND = 34, // 34 Write data indication + eQMI_UIM_WRITE_RECORD, // 35 Write a record + eQMI_UIM_WRITE_RECORD_IND = 35, // 35 Write a record indication + eQMI_UIM_GET_FILE_ATTRIBUTES, // 36 Get file attributes + eQMI_UIM_GET_FILE_ATTRIBUTES_IND = 36, // 36 Get file attributes indication + eQMI_UIM_SET_PIN_PROTECTION, // 37 Set PIN protection + eQMI_UIM_SET_PIN_PROTECTION_IND = 37, // 37 Set PIN protection indication + eQMI_UIM_VERITFY_PIN, // 38 Verify PIN + eQMI_UIM_VERITFY_PIN_IND = 38, // 38 Verify PIN indication + eQMI_UIM_UNBLOCK_PIN, // 39 Unblock PIN + eQMI_UIM_UNBLOCK_PIN_IND = 39, // 39 Unblock PIN indication + eQMI_UIM_CHANGE_PIN, // 40 Change PIN + eQMI_UIM_CHANGE_PIN_IND = 40, // 40 Change PIN indication + eQMI_UIM_DEPERSONALIZATION, // 41 Depersonalization + eQMI_UIM_REFRESH_REGISTER, // 42 Refresh register + eQMI_UIM_REFRESH_OK, // 43 Validate refresh + eQMI_UIM_REFRESH_COMPLETE, // 44 Complete refresh + eQMI_UIM_GET_LAST_REFRESH_EVENT, // 45 Get last refresh event + eQMI_UIM_EVENT_REGISTRATION, // 46 Register for indications + eQMI_UIM_GET_CARD_STATUS, // 47 Get card status + eQMI_UIM_POWER_DOWN, // 48 Power down + eQMI_UIM_POWER_UP, // 49 Power up + eQMI_UIM_CARD_STATUS_IND, // 50 Card status indication + eQMI_UIM_REFRESH_IND, // 51 Refresh indication + eQMI_UIM_AUTHENTICATE, // 52 Authenticate + eQMI_UIM_AUTHENTICATE_IND = 52, // 52 Authenticate indication + eQMI_UIM_CLOSE_SESSION, // 53 Close session + eQMI_UIM_GET_SERVICE_STATUS, // 54 Get service status + eQMI_UIM_SET_SERVICE_STATUS, // 55 Set service status + eQMI_UIM_CHANGE_PROVISIONING, // 56 Change provisioning + eQMI_UIM_GET_LABEL, // 57 Get label + eQMI_UIM_GET_CONFIG, // 58 Get configuration + eQMI_UIM_SEND_ADPU, // 59 Send ADPU + eQMI_UIM_SEND_ADPU_IND = 59, // 59 Send ADPU indication + eQMI_UIM_SAP_CONNECTION, // 60 SAP connection + eQMI_UIM_SAP_REQUEST, // 61 SAP request + eQMI_UIM_SAP_CONNECTION_IND, // 62 SAP connection indication + eQMI_UIM_LOGICAL_CHANNEL, // 63 Logical channel + eQMI_UIM_SUBSCRIPTION_OK, // 64 OK to publish subscription? + eQMI_UIM_GET_ATR, // 65 Get ATR + eQMI_UIM_SESSION_CLOSED_IND, // 67 Session closed indication + eQMI_UIM_REGISTER_REFRESH_ALL, // 68 Register for all refresh + eQMI_UIM_SET_FILE_STATUS, // 69 Set file status + + eQMI_UIM_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageUIM validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageUIM msgID ) +{ + bool retVal = false; + if ( (msgID == eQMI_UIM_RESET) + || (msgID >= eQMI_UIM_GET_MESSAGES && msgID < eQMI_UIM_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessagePBM Enumeration +// QMI PBM Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessagePBM +{ + eQMI_PBM_ENUM_BEGIN = -1, + + eQMI_PBM_INDICATION_REG = 1, // 01 Set indication registration state + eQMI_PBM_GET_CAPABILITIES, // 02 Get phonebook capabilities by type + eQMI_PBM_GET_ALL_CAPABILITIES, // 03 Get all phonebook capabilities + eQMI_PBM_READ_RECORDS, // 04 Read phonebook records + eQMI_PBM_READ_RECORD_IND = 4, // 04 Read phonebook record indication + eQMI_PBM_WRITE_RECORD, // 05 Add/modify a phonebook record + eQMI_PBM_DELETE_RECORD, // 06 Delete a phonebook record + eQMI_PBM_DELETE_ALL_RECORDS, // 07 Delete all phonebook records + eQMI_PBM_SEARCH_RECORDS, // 08 Search phonebook records + eQMI_PBM_RECORD_UPDATE_IND, // 09 Phonebook record update indication + eQMI_PBM_REFRESH_IND, // 10 Phonebook refresh indication + eQMI_PBM_READY_IND, // 11 Phonebook ready indication + eQMI_PBM_EMERGENCY_LIST_IND, // 12 Phonebook emergency list indication + eQMI_PBM_ALL_READY_IND, // 13 All phonebooks ready indication + eQMI_PBM_GET_EMERGENCY_LIST, // 14 Get phonebook emergency list + eQMI_PBM_GET_ALL_GROUPS, // 15 Get all phonebook groups + eQMI_PBM_SET_GROUP_INFO, // 16 Set phonebook group info + eQMI_PBM_GET_STATE, // 17 Get phonebook state + eQMI_PBM_READ_ALL_HIDDEN_RECS, // 18 Read all hidden phonebook records + eQMI_PBM_HIDDEN_REC_STATUS_IND, // 19 Hidden record status indication + eQMI_PBM_GET_NEXT_EMPTY_REC_ID, // 20 Get next empty record ID + eQMI_PBM_GET_NEXT_REC_ID, // 21 Get next non-empty record ID + eQMI_PBM_GET_AAS_LIST, // 22 Get AAS list + eQMI_PBM_SET_AAS, // 23 Add/modify/delete AAS entry + eQMI_PBM_UPDATE_AAS_IND, // 24 AAS change indication + eQMI_PBM_UPDATE_GAS_IND, // 25 GAS change indication + eQMI_PBM_BIND_SUBSCRIPTION, // 26 Bind client to specific subscription + eQMI_PBM_GET_SUBSCRIPTION, // 27 Get subscription client is bound to + eQMI_PBM_SET_CAPS_READ_OP, // 28 ADN set capabilities read operation + eQMI_PBM_SET_CAPS_READ_IND = 28, // 28 ADN set caps read op indication + eQMI_PBM_EX_READ_RECORDS, // 29 Read phonebook records + eQMI_PBM_EX_READ_RECORD_IND = 29,// 29 Read phonebook record indication + eQMI_PBM_EX_WRITE_RECORD, // 30 Add/modify a phonebook record + eQMI_PBM_EX_SEARCH_RECORDS, // 31 Search phonebook records + eQMI_PBM_EX_READ_ALL_HIDDEN_RECS,// 32 Read all hidden phonebook records + eQMI_PBM_SIM_INIT_DONE_IND, // 33 SIM initialization done indication + eQMI_PBM_READ_UNDC_RECS, // 34 Read undecoded phonebook records + eQMI_PBM_READ_UNDC_RECS_IND = 34,// 34 Read undecoded phonebook record ind + + eQMI_PBM_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessagePBM validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessagePBM msgID ) +{ + bool retVal = false; + if (msgID >= eQMI_PBM_INDICATION_REG && msgID < eQMI_PBM_ENUM_END) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageLOC Enumeration +// QMI LOC Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageLOC +{ + eQMI_LOC_ENUM_BEGIN = -1, + + eQMI_LOC_GET_MESSAGES = 30, // 030 Get supported messages + eQMI_LOC_GET_FIELDS, // 031 Get supported fields + eQMI_LOC_CLIENT_REVISION, // 032 Send client revision to service + eQMI_LOC_REGISTER_EVENTS, // 033 Register for events/indications + eQMI_LOC_START, // 034 Start GPS session + eQMI_LOC_STOP, // 035 Start GPS session + eQMI_LOC_POSITION_REPORT_IND, // 036 Position report indication + eQMI_LOC_GNSS_SAT_INFO_IND, // 037 GNSS satellite info indication + eQMI_LOC_NMEA_IND, // 038 NMEA sentence indication + eQMI_LOC_NETWORK_REQ_IND, // 039 Network initiated request indication + eQMI_LOC_INJECT_TIME_REQ_IND, // 040 Inject time request indication + eQMI_LOC_INJECT_ORBITS_REQ_IND, // 041 Inject predicted orbits req ind + eQMI_LOC_INJECT_POS_REQ_IND, // 042 Inject position request indication + eQMI_LOC_ENGINE_STATE_IND, // 043 Engine state indication + eQMI_LOC_FIX_SESSION_STATE_IND, // 044 Fi session state indication + eQMI_LOC_WIFI_REQ_IND, // 045 Wi-Fi request indication + eQMI_LOC_SENSOR_DATA_IND, // 046 Sensor streaming ready status ind + eQMI_LOC_INJECT_TIME_SYNC_IND, // 047 Inject time sync data indication + eQMI_LOC_SPI_STREAM_REQ_IND, // 048 SPI streaming reports req indication + eQMI_LOC_SVR_CONNECTION_REQ_IND, // 049 Server connection req indication + eQMI_LOC_GET_REV_REQ, // 050 Get service revision + eQMI_LOC_GET_REV_REQ_IND = 50, // 050 Get service revision indication + eQMI_LOC_GET_FIX_CRIT, // 051 Get fix criteria + eQMI_LOC_GET_FIX_CRIT_IND = 51, // 051 Get fix criteria indication + eQMI_LOC_NI_USER_RSP, // 052 Network initiated user response + eQMI_LOC_NI_USER_RSP_IND = 52, // 052 Network initiated user response ind + eQMI_LOC_INJECT_ORBITS, // 053 Inject predicted orbits data + eQMI_LOC_INJECT_ORBITS_IND = 53, // 053 Inject predicted orbits indication + eQMI_LOC_GET_ORBIT_SRC, // 054 Get predicted orbits data source + eQMI_LOC_GET_ORBIT_SRC_IND = 54, // 054 Get predicted orbits data source ind + eQMI_LOC_GET_ORBIT_VLD, // 055 Get predicted orbits data validity + eQMI_LOC_GET_ORBIT_VLD_IND = 55, // 055 Get predicted orbits validity ind + eQMI_LOC_INJECT_UTC, // 056 Inject UTC time + eQMI_LOC_INJECT_UTC_IND = 56, // 056 Inject UTC time indication + eQMI_LOC_INJECT_POS, // 057 Inject position + eQMI_LOC_INJECT_POS_IND = 57, // 057 Inject position indication + eQMI_LOC_SET_ENG_LOCK, // 058 Set engine lock + eQMI_LOC_SET_ENG_LOCK_IND = 58, // 058 Set engine lock indication + eQMI_LOC_GET_ENG_LOCK, // 059 Get engine lock + eQMI_LOC_GET_ENG_LOCK_IND = 59, // 059 Get engine lock indication + eQMI_LOC_SET_SBAS_CFG, // 060 Set SBAS config + eQMI_LOC_SET_SBAS_CFG_IND = 60, // 060 Set SBAS config indication + eQMI_LOC_GET_SBAS_CFG, // 061 Get SBAS config + eQMI_LOC_GET_SBAS_CFG_IND = 61, // 061 Get SBAS config indication + eQMI_LOC_SET_NMEA_TYPS, // 062 Set NMEA sentence types + eQMI_LOC_SET_NMEA_TYPS_IND = 62, // 062 Set NMEA sentence types indication + eQMI_LOC_GET_NMEA_TYPS, // 063 Get NMEA sentence types + eQMI_LOC_GET_NMEA_TYPS_IND = 63, // 063 Get NMEA sentence types indication + eQMI_LOC_SET_LPM_CFG, // 064 Set low power mode config + eQMI_LOC_SET_LPM_CFG_IND = 64, // 064 Set low power mode config indication + eQMI_LOC_GET_LPM_CFG, // 065 Get low power mode config + eQMI_LOC_GET_LPM_CFG_IND = 65, // 065 Get low power mode config indication + eQMI_LOC_SET_SERVER, // 066 Set A-GPS server + eQMI_LOC_SET_SERVER_IND = 66, // 066 Set A-GPS server indication + eQMI_LOC_GET_SERVER, // 067 Set A-GPS server + eQMI_LOC_GET_SERVER_IND = 67, // 067 Set A-GPS server indication + eQMI_LOC_DEL_ASST_DATA, // 068 Delete assistance data + eQMI_LOC_DEL_ASST_DATA_IND = 68, // 068 Delete assistance data indication + eQMI_LOC_SET_XTRA_T, // 069 Set XTRA_T session control + eQMI_LOC_SET_XTRA_T_IND = 69, // 069 Set XTRA_T session control indication + eQMI_LOC_GET_XTRA_T, // 070 Get XTRA_T session control + eQMI_LOC_GET_XTRA_T_IND = 70, // 070 Get XTRA_T session control indication + eQMI_LOC_INJECT_WIFI, // 071 Inject Wi-Fi info + eQMI_LOC_INJECT_WIFI_IND = 71, // 071 Inject Wi-Fi info indication + eQMI_LOC_NOTIFY_WIFI, // 072 Notify server of Wi-Fi status + eQMI_LOC_NOTIFY_WIFI_IND = 72, // 072 Notify server of Wi-Fi status ind + eQMI_LOC_GET_REG_EVENTS, // 073 Get registered event status + eQMI_LOC_GET_REG_EVENTS_IND = 73,// 073 Get registered event status ind + eQMI_LOC_SET_OP_MODE, // 074 Set operation mode + eQMI_LOC_SET_OP_MODE_IND = 74, // 074 Set operation mode indication + eQMI_LOC_GET_OP_MODE, // 075 Get operation mode + eQMI_LOC_GET_OP_MODE_IND = 75, // 075 Get operation mode indication + eQMI_LOC_SET_SPI_STATUS, // 076 Set SPI status + eQMI_LOC_SET_SPI_STATUS_IND = 76,// 076 Set SPI status indication + eQMI_LOC_INJECT_SENSOR, // 077 Inject sensor data + eQMI_LOC_INJECT_SENSOR_IND = 77, // 077 Inject sensor data indication + eQMI_LOC_INJ_TIME_SYNC, // 078 Inject time sync data + eQMI_LOC_INJ_TIME_SYNC_IND = 78, // 078 Inject time sync data indication + eQMI_LOC_SET_CRADLE, // 079 Set cradle mount config + eQMI_LOC_SET_CRADLE_IND = 79, // 079 Set cradle mount config indication + eQMI_LOC_GET_CRADLE, // 080 Get cradle mount config + eQMI_LOC_GET_CRADLE_IND = 80, // 080 Get cradle mount config indication + eQMI_LOC_SET_EXT_POWER, // 081 Set external power config + eQMI_LOC_SET_EXT_POWER_IND = 81, // 081 Set external power config indication + eQMI_LOC_GET_EXT_POWER, // 082 Get external power config + eQMI_LOC_GET_EXT_POWER_IND = 82, // 082 Get external power config indication + eQMI_LOC_INFORM_CONN, // 083 Inform service of connection status + eQMI_LOC_INFORM_CONN_IND = 83, // 083 Inform connection status indication + eQMI_LOC_SET_PROTO_CFG, // 084 Set protocol config + eQMI_LOC_SET_PROTO_CFG_IND = 84, // 084 Set protocol config indication + eQMI_LOC_GET_PROTO_CFG, // 085 Get protocol config + eQMI_LOC_GET_PROTO_CFG_IND = 85, // 085 Get protocol config indication + eQMI_LOC_SET_SENSOR_CFG, // 086 Set sensor control config + eQMI_LOC_SET_SENSOR_CFG_IND = 86,// 086 Set sensor control config indication + eQMI_LOC_GET_SENSOR_CFG, // 087 Get sensor control config + eQMI_LOC_GET_SENSOR_CFG_IND = 87,// 087 Get sensor control config indication + eQMI_LOC_SET_SENSOR_PRP, // 088 Set sensor properties + eQMI_LOC_SET_SENSOR_PRP_IND = 88,// 088 Set sensor properties indication + eQMI_LOC_GET_SENSOR_PRP, // 089 Get sensor properties + eQMI_LOC_GET_SENSOR_PRP_IND = 89,// 089 Get sensor properties indication + eQMI_LOC_SET_SENSOR_PRF, // 090 Set sensor performance control + eQMI_LOC_SET_SENSOR_PRF_IND = 90,// 090 Set sensor performance control ind + eQMI_LOC_GET_SENSOR_PRF, // 091 Get sensor performance control + eQMI_LOC_GET_SENSOR_PRF_IND = 91,// 091 Get sensor performance control ind + eQMI_LOC_INJ_SUPL_CERT, // 092 Inject SUPL certificate + eQMI_LOC_INJ_SUPL_CERT_IND = 92, // 092 Inject SUPL certificate indication + eQMI_LOC_DEL_SUPL_CERT, // 093 Delete SUPL certificate + eQMI_LOC_DEL_SUPL_CERT_IND = 93, // 093 Delete SUPL certificate indication + eQMI_LOC_SET_ENGINE_CFG, // 094 Set position engine config + eQMI_LOC_SET_ENGINE_CFG_IND = 94,// 094 Set position engine config ind + eQMI_LOC_GET_ENGINE_CFG, // 095 Get position engine config + eQMI_LOC_GET_ENGINE_CFG_IND = 95,// 095 Get position engine config ind + eQMI_LOC_GEOFENCE_NOTIF_IND, // 096 Geofence notification indication + eQMI_LOC_GEOFENCE_ALERT_IND, // 097 Geofence alert indication + eQMI_LOC_GEOFENCE_BREACH_IND, // 098 Geofence breach indication + eQMI_LOC_ADD_GEOFENCE, // 099 Add circular geofence + eQMI_LOC_ADD_GEOFENCE_IND = 99, // 099 Add circular geofence indication + eQMI_LOC_DEL_GEOFENCE, // 100 Delete geofence + eQMI_LOC_DEL_GEOFENCE_IND = 100, // 100 Delete geofence indication + eQMI_LOC_QRY_GEOFENCE, // 101 Query geofence + eQMI_LOC_QRY_GEOFENCE_IND = 101, // 101 Query geofence indication + eQMI_LOC_EDIT_GEOFENCE, // 102 Edit geofence + eQMI_LOC_EDIT_GEOFENCE_IND = 102,// 102 Edit geofence indication + eQMI_LOC_GET_BEST_POS, // 103 Get best available position + eQMI_LOC_GET_BEST_POS_IND = 103, // 103 Get best available position ind + eQMI_LOC_INJ_MOTION, // 104 Inject motion data + eQMI_LOC_INJ_MOTION_IND = 104, // 104 Inject motion data indication + eQMI_LOC_GET_NI_GF_IDS, // 105 Get NI geofence ID list + eQMI_LOC_GET_NI_GF_IDS_IND = 105,// 105 Get NI geofence ID list indication + eQMI_LOC_INJ_GSM_CELL, // 106 Inject GSM cell info + eQMI_LOC_INJ_GSM_CELL_IND = 106, // 106 Inject GSM cell info indication + eQMI_LOC_INJ_NI_MSG, // 107 Inject network initiated message + eQMI_LOC_INJ_NI_MSG_IND = 107, // 107 Inject NI message indication + eQMI_LOC_WWAN_OOS, // 108 Notify WWAN is now OOS + eQMI_LOC_WWAN_OOS_IND = 108, // 108 Notify WWAN is now OOS indication + eQMI_PEDOMETER_CTRL_IND, // 109 Pedometer control indication + eQMI_MOTION_DATA_CTRL_IND, // 110 Motion data control indication + eQMI_LOC_INJ_PEDOMETER, // 111 Inject pedometer data + eQMI_LOC_INJ_PEDOMETER_IND = 111,// 111 Inject pedometer data indication + eQMI_LOC_INJ_WCDMA_CI, // 112 Inject WCDMA cell info + eQMI_LOC_INJ_WCDMA_CI_IND = 112, // 112 Inject WCDMA cell info indication + eQMI_LOC_INJ_TDSCDMA, // 113 Inject TD-SCDMA cell info + eQMI_LOC_INJ_TDSCDMA_IND = 113, // 113 Inject TD-SCDMA cell info indication + eQMI_LOC_INJ_SUBS_ID, // 114 Inject subscriber ID + eQMI_LOC_INJ_SUBS_ID_IND = 114, // 114 Inject subscriber ID indication + + eQMI_LOC_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageLOC validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageLOC msgID ) +{ + bool retVal = false; + if (msgID >= eQMI_LOC_GET_MESSAGES && msgID < eQMI_LOC_ENUM_END) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageSAR Enumeration +// QMI SAR Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageSAR +{ + eQMI_SAR_ENUM_BEGIN = -1, + + eQMI_SAR_SET_RF_SAR_STATE = 1, // 01 Set the RF SAR state + eQMI_SAR_GET_RF_SAR_STATE, // 02 Get the RF SAR state + + eQMI_SAR_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageSAR validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageSAR msgID ) +{ + bool retVal = false; + if (msgID >= eQMI_SAR_SET_RF_SAR_STATE && msgID < eQMI_SAR_ENUM_END) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageRMTFS Enumeration +// QMI Remote Filesystem Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageRMTFS +{ + eQMI_RMTFS_ENUM_BEGIN = -1, + + eQMI_RMTFS_OPEN = 1, // 01 Request an open + eQMI_RMTFS_CLOSE, // 02 Request a close + eQMI_RMTFS_IO_VECTOR, // 03 Request an I/O vector operation + eQMI_RMTFS_ALLOC_BUFFER, // 04 Allocate a buffer + eQMI_RMTFS_GET_DEV_ERROR, // 05 Return device error for last request + eQMI_RMTFS_FORCE_SYNC_IND, // 06 Force sync indication + + eQMI_RMTFS_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageRMTFS validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageRMTFS msgID ) +{ + bool retVal = false; + if (msgID >= eQMI_RMTFS_OPEN && msgID < eQMI_RMTFS_ENUM_END) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageWDA Enumeration +// QMI Qualcomm Wireless Data Addministrative Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageWDA +{ + eQMI_WDA_ENUM_BEGIN = -1, + + eQMI_WDA_GET_MESSAGES = 30, // 30 Get supported messages + eQMI_WDA_GET_FIELDS, // 31 Get supported fields + eQMI_WDA_SET_DATA_FORMAT, // 32 + eQMI_WDA_GET_DATA_FORMAT, // 33 + eQMI_WDA_ENABLE_PKT_FILTER, // 34 + eQMI_WDA_DISABLE_PKT_FILTER, // 35 + eQMI_WDA_GET_PKT_FILTER_STATE, // 36 + eQMI_WDA_ADD_PKT_FILTER_RULE, // 37 + eQMI_WDA_DELETE_PKT_FILTER_RULE, // 38 + eQMI_WDA_GET_PKT_FILTER_RULE_HANDLES, // 39 + eQMI_WDA_GET_PKT_FILTER_RULE, // 40 + eQMI_WDA_SET_LOOPBACK_STATE, // 41 + eQMI_WDA_GET_LOOPBACK_STATE, // 42 + + eQMI_WDA_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageWDA validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageWDA msgID ) +{ + bool retVal = false; + if (msgID >= eQMI_WDA_GET_MESSAGES && msgID < eQMI_WDA_ENUM_END) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageQCMAP Enumeration +// QMI Qualcomm Mobile Access Point Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageQCMAP +{ + eQMI_QCMAP_ENUM_BEGIN = -1, + + eQMI_QCMAP_ENABLE = 32, // 32 + eQMI_QCMAP_DISABLE, // 33 + eQMI_QCMAP_BRING_UP_WWAN, // 34 + eQMI_QCMAP_BRING_UP_WWAN_IND = 34, // 34 + eQMI_QCMAP_TEAR_DOWN_WWAN, // 35 + eQMI_QCMAP_TEAR_DOWN_WWAN_IND = 35, // 35 + eQMI_QCMAP_GET_WWAN_STATUS, // 36 + eQMI_QCMAP_GET_IPSEC_VPN_PASSTHROUGH, // 37 + eQMI_QCMAP_SET_IPSEC_VPN_PASSTHROUGH, // 38 + eQMI_QCMAP_GET_PPTP_VPN_PASSTHROUGH, // 39 + eQMI_QCMAP_SET_PPTP_VPN_PASSTHROUGH, // 40 + eQMI_QCMAP_GET_L2TP_VPN_PASSTHROUGH, // 41 + eQMI_QCMAP_SET_L2TP_VPN_PASSTHROUGH, // 42 + eQMI_QCMAP_GET_DYNAMIC_NAT_ENTRY_TO, // 43 + eQMI_QCMAP_SET_DYNAMIC_NAT_ENTRY_TO, // 44 + eQMI_QCMAP_ADD_SNAT_ENTRY, // 45 + eQMI_QCMAP_DELETE_SNAT_ENTRY, // 46 + eQMI_QCMAP_GET_SNAT_ENTRIES, // 47 + eQMI_QCMAP_SET_DMZ, // 48 + eQMI_QCMAP_DELETE_DMZ, // 49 + eQMI_QCMAP_GET_DMZ, // 50 + eQMI_QCMAP_GET_WWAN_CONFIG, // 51 + eQMI_QCMAP_ENABLE_FIREWALL_SETTING, // 52 + eQMI_QCMAP_GET_FIREWALL_SETTING, // 53 + eQMI_QCMAP_DISABLE_FIREWALL_SETTING, // 54 + eQMI_QCMAP_ADD_FIREWALL_CONFIG, // 55 + eQMI_QCMAP_GET_FIREWALL_CONFIG, // 56 + eQMI_QCMAP_DELETE_FIREWALL_CONFIG, // 57 + eQMI_QCMAP_WWAN_STATUS_IND_REG, // 58 + eQMI_QCMAP_STATION_MODE_ENABLE, // 59 + eQMI_QCMAP_STATION_MODE_DISABLE, // 60 + eQMI_QCMAP_GET_STATION_MODE, // 61 + eQMI_QCMAP_WWAN_STATUS_IND, // 62 + eQMI_QCMAP_ADD_EXT_FIREWALL_CONFIG, // 63 + eQMI_QCMAP_GET_EXT_FIREWALL_CONFIG, // 64 + eQMI_QCMAP_GET_FIREWALL_HANDLES, // 65 + eQMI_QCMAP_CHANGE_NAT_TYPE, // 66 + eQMI_QCMAP_GET_NAT_TYPE, // 67 + + eQMI_QCMAP_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageQCMAP validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageQCMAP msgID ) +{ + bool retVal = false; + if (msgID >= eQMI_QCMAP_ENABLE && msgID < eQMI_QCMAP_ENUM_END) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageCOEX Enumeration +// QMI COEX Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageCOEX +{ + eQMI_COEX_ENUM_BEGIN = -1, + + eQMI_COEX_RESET, // 00 Reset the PDC service + + eQMI_COEX_REG_INDICATIONS = 32, // 32 Register for indications + eQMI_COEX_WWAN_STATE_IND, // 33 WWAN state indication + eQMI_COEX_GET_WWAN_STATE, // 34 Get WWAN state + eQMI_COEX_SET_WLAN_STATE, // 35 Set WLAN state + eQMI_COEX_GET_WLAN_SCAN_STATE, // 36 Get WLAN scan state + eQMI_COEX_GET_WLAN_CONN_STATE, // 37 Get WLAN connection state + eQMI_COEX_SET_POLICY, // 38 Set policy + eQMI_COEX_GET_POLICY, // 39 Get policy + + eQMI_COEX_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageCOEX validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageCOEX msgID ) +{ + bool retVal = false; + if ( (msgID == eQMI_COEX_RESET) + || (msgID >= eQMI_COEX_REG_INDICATIONS && msgID < eQMI_COEX_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessagePDC Enumeration +// QMI PDC Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessagePDC +{ + eQMI_PDC_ENUM_BEGIN = -1, + + eQMI_PDC_RESET, // 00 Reset the PDC service + + eQMI_PDC_REG_INDICATIONS = 32, // 32 Register for indications + eQMI_PDC_CFG_CHANGE_IND, // 33 Config change indication + eQMI_PDC_GET_CFG, // 34 Get selected config + eQMI_PDC_GET_CFG_IND = 34, // 34 Get selected config indication + eQMI_PDC_SET_CFG, // 35 Set selected config + eQMI_PDC_SET_CFG_IND = 35, // 35 Set selected config indication + eQMI_PDC_LIST_CFGS, // 36 List configs + eQMI_PDC_LIST_CFGS_IND = 36, // 36 List configs indication + eQMI_PDC_DEL_CFG, // 37 Delete config + eQMI_PDC_DEL_CFG_IND = 37, // 37 Delete config indication + eQMI_PDC_LOAD_CFG, // 38 Load config + eQMI_PDC_LOAD_CFG_IND = 38, // 38 Load config indication + eQMI_PDC_ACTIVATE_CFG, // 39 Activate config + eQMI_PDC_ACTIVATE_CFG_IND = 39, // 39 Activate config indication + eQMI_PDC_GET_CFG_INFO, // 40 Get config info + eQMI_PDC_GET_CFG_INFO_IND = 40, // 40 Get config info indication + eQMI_PDC_GET_CFG_LIMITS, // 41 Get config limits + eQMI_PDC_GET_CFG_LIMITS_IND = 41, // 41 Get config limits indication + eQMI_PDC_GET_DEF_CFG_INFO, // 42 Get default config info + eQMI_PDC_GET_DEF_CFG_INFO_IND = 42, // 42 Get default config info indication + eQMI_PDC_DEACTIVATE_CFG, // 43 Deactivate active config + eQMI_PDC_DEACTIVATE_CFG_IND = 43, // 43 Deactivate active config ind + + eQMI_PDC_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessagePDC validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessagePDC msgID ) +{ + bool retVal = false; + if ( (msgID == eQMI_PDC_RESET) + || (msgID >= eQMI_PDC_REG_INDICATIONS && msgID < eQMI_PDC_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageSTX Enumeration +// QMI STX Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageSTX +{ + eQMI_STX_ENUM_BEGIN = -1, + + eQMI_STX_TECH_TX_STATUS = 32, // 32 Technology TX status + eQMI_STX_UPDATE_TX_POWER_LIMIT, // 33 Update TX power limit + eQMI_STX_TX_STATE_UPDATE_IND, // 34 TX state update indication + eQMI_STX_TX_STATE_CLEAR_IND, // 34 TX state clear indication + eQMI_STX_SET_TECH_POWER_LUT, // 36 Set technology power LUT + eQMI_STX_TX_POWER_LIMIT_IND, // 37 TX power limit state + + eQMI_STX_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageSTX validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageSTX msgID ) +{ + bool retVal = false; + if (msgID >= eQMI_STX_TECH_TX_STATUS && msgID < eQMI_STX_ENUM_END) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageRFRPE Enumeration +// QMI RFRPE Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageRFRPE +{ + eQMI_RFRPE_ENUM_BEGIN = -1, + + eQMI_RFRPE_SET_RFM_SCENARIO = 32, // 32 Set RFM scenario + eQMI_RFRPE_GET_RFM_SCENARIO, // 33 Get RFM scenario + eQMI_RFRPE_GET_TABLE_REVISION, // 34 Get provisioned table revision + + eQMI_RFRPE_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageRFRPE validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageRFRPE msgID ) +{ + bool retVal = false; + if (msgID >= eQMI_RFRPE_SET_RFM_SCENARIO && msgID < eQMI_RFRPE_ENUM_END) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageCAT Enumeration +// QMI CAT Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageCAT +{ + eQMI_CAT_ENUM_BEGIN = -1, + + eQMI_CAT_RESET, // 00 Reset CAT service state variables + eQMI_CAT_SET_EVENT, // 01 Set new message report conditions + eQMI_CAT_EVENT_IND = 1, // 01 New message report indication + + eQMI_CAT_GET_MESSAGES = 30, // 30 Get supported messages + eQMI_CAT_GET_FIELDS, // 31 Get supported fields + eQMI_CAT_GET_STATE, // 32 Get service state information + eQMI_CAT_SEND_TERMINAL, // 33 Send a terminal response + eQMI_CAT_SEND_ENVELOPE, // 34 Send an envelope command + eQMI_CAT_GET_EVENT, // 35 Get last message report + eQMI_CAT_SEND_DECODED_TERMINAL, // 36 Send a decoded terminal response + eQMI_CAT_SEND_DECODED_ENVELOPE, // 37 Send a decoded envelope command + eQMI_CAT_EVENT_CONFIRMATION, // 38 Event confirmation + eQMI_CAT_SCWS_OPEN_CHANNEL, // 39 Open a channel to a SCWS + eQMI_CAT_SCWS_OPEN_IND = 39, // 39 SCWS open channel indication + eQMI_CAT_SCWS_CLOSE_CHANNEL, // 40 Close a channel to a SCWS + eQMI_CAT_SCWS_CLOSE_IND = 40, // 40 SCWS close channel indication + eQMI_CAT_SCWS_SEND_DATA, // 41 Send data to a SCWS + eQMI_CAT_SCWS_SEND_IND = 41, // 41 SCWS send data indication + eQMI_CAT_SCWS_DATA_AVAILABLE, // 42 Indicate that data is available + eQMI_CAT_SCWS_CHANNEL_STATUS, // 43 Provide channel status + eQMI_CAT_GET_TERMINAL_PROFILE, // 44 Get current modem terminal profile + eQMI_CAT_SET_CONFIG, // 45 Set configuration + eQMI_CAT_GET_CONFIG, // 46 Get configuration + + eQMI_CAT_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageCAT validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageCAT msgID ) +{ + bool retVal = false; + if ( (msgID > eQMI_CAT_ENUM_BEGIN && msgID <= eQMI_CAT_EVENT_IND) + || (msgID >= eQMI_CAT_GET_MESSAGES && msgID < eQMI_CAT_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageRMS Enumeration +// QMI RMS Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageRMS +{ + eQMI_RMS_ENUM_BEGIN = -1, + + eQMI_RMS_RESET, // 00 Reset RMS service state variables + + eQMI_RMS_GET_SMS_WAKE = 32, // 32 Get SMS wake settings + eQMI_RMS_SET_SMS_WAKE, // 33 Set SMS wake settings + + eQMI_RMS_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageRMS validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageRMS msgID ) +{ + bool retVal = false; + if ( (msgID == eQMI_RMS_RESET) + || (msgID >= eQMI_RMS_GET_SMS_WAKE && msgID < eQMI_RMS_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIMessageOMA Enumeration +// QMI OMA-DM Service Type Message ID Enumeration +/*=========================================================================*/ +enum eQMIMessageOMA +{ + eQMI_OMA_ENUM_BEGIN = -1, + + eQMI_OMA_RESET, // 00 Reset OMA service state variables + eQMI_OMA_SET_EVENT, // 01 Set OMA report conditions + eQMI_OMA_EVENT_IND = 1, // 01 OMA report indication + + eQMI_OMA_START_SESSION = 32, // 32 Start client inititated session + eQMI_OMA_CANCEL_SESSION, // 33 Cancel session + eQMI_OMA_GET_SESSION_INFO, // 34 Get session information + eQMI_OMA_SEND_SELECTION, // 35 Send selection for net inititated msg + eQMI_OMA_GET_FEATURES, // 36 Get feature settings + eQMI_OMA_SET_FEATURES, // 37 Set feature settings + + eQMI_OMA_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIMessageOMA validity check + +PARAMETERS: + msgID [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIMessageOMA msgID ) +{ + bool retVal = false; + if ( (msgID > eQMI_OMA_ENUM_BEGIN && msgID <= eQMI_OMA_EVENT_IND) + || (msgID >= eQMI_OMA_START_SESSION && msgID < eQMI_OMA_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIResultCode Enumeration +// QMI Result Code Enumeration +/*=========================================================================*/ +enum eQMIResultCode +{ + eQMI_RC_ENUM_BEGIN = -1, + + eQMI_RC_SUCCESS, // 00 Success + eQMI_RC_ERROR, // 01 Error + + eQMI_RC_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIResultCode validity check + +PARAMETERS: + rc [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIResultCode rc ) +{ + bool retVal = false; + if (rc > eQMI_RC_ENUM_BEGIN && rc < eQMI_RC_ENUM_END) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMIErrorCode Enumeration +// QMI Error Code Enumeration +/*=========================================================================*/ +enum eQMIErrorCode +{ + eQMI_ERR_ENUM_BEGIN = -1, + + eQMI_ERR_NONE, // 00 + eQMI_ERR_MALFORMED_MSG, // 01 + eQMI_ERR_NO_MEMORY, // 02 + eQMI_ERR_INTERNAL, // 03 + eQMI_ERR_ABORTED, // 04 + eQMI_ERR_CLIENT_IDS_EXHAUSTED, // 05 + eQMI_ERR_UNABORTABLE_TRANSACTION, // 06 + eQMI_ERR_INVALID_CLIENT_ID, // 07 + eQMI_ERR_NO_THRESHOLDS, // 08 + eQMI_ERR_INVALID_HANDLE, // 09 + eQMI_ERR_INVALID_PROFILE, // 10 + eQMI_ERR_INVALID_PIN_ID, // 11 + eQMI_ERR_INCORRECT_PIN, // 12 + eQMI_ERR_NO_NETWORK_FOUND, // 13 + eQMI_ERR_CALL_FAILED, // 14 + eQMI_ERR_OUT_OF_CALL, // 15 + eQMI_ERR_NOT_PROVISIONED, // 16 + eQMI_ERR_MISSING_ARG, // 17 + eQMI_ERR_18, // 18 + eQMI_ERR_ARG_TOO_LONG, // 19 + eQMI_ERR_20, // 20 + eQMI_ERR_21, // 21 + eQMI_ERR_INVALID_TX_ID, // 22 + eQMI_ERR_DEVICE_IN_USE, // 23 + eQMI_ERR_OP_NETWORK_UNSUPPORTED, // 24 + eQMI_ERR_OP_DEVICE_UNSUPPORTED, // 25 + eQMI_ERR_NO_EFFECT, // 26 + eQMI_ERR_NO_FREE_PROFILE, // 27 + eQMI_ERR_INVALID_PDP_TYPE, // 28 + eQMI_ERR_INVALID_TECH_PREF, // 29 + eQMI_ERR_INVALID_PROFILE_TYPE, // 30 + eQMI_ERR_INVALID_SERVICE_TYPE, // 31 + eQMI_ERR_INVALID_REGISTER_ACTION, // 32 + eQMI_ERR_INVALID_PS_ATTACH_ACTION, // 33 + eQMI_ERR_AUTHENTICATION_FAILED, // 34 + eQMI_ERR_PIN_BLOCKED, // 35 + eQMI_ERR_PIN_ALWAYS_BLOCKED, // 36 + eQMI_ERR_UIM_UNINITIALIZED, // 37 + eQMI_ERR_MAX_QOS_REQUESTS_IN_USE, // 38 + eQMI_ERR_INCORRECT_FLOW_FILTER, // 39 + eQMI_ERR_NETWORK_QOS_UNAWARE, // 40 + eQMI_ERR_INVALID_QOS_ID, // 41 + eQMI_ERR_REQUESTED_NUM_UNSUPPORTED, // 42 + eQMI_ERR_INTERFACE_NOT_FOUND, // 43 + eQMI_ERR_FLOW_SUSPENDED, // 44 + eQMI_ERR_INVALID_DATA_FORMAT, // 45 + eQMI_ERR_GENERAL, // 46 + eQMI_ERR_UNKNOWN, // 47 + eQMI_ERR_INVALID_ARG, // 48 + eQMI_ERR_INVALID_INDEX, // 49 + eQMI_ERR_NO_ENTRY, // 50 + eQMI_ERR_DEVICE_STORAGE_FULL, // 51 + eQMI_ERR_DEVICE_NOT_READY, // 52 + eQMI_ERR_NETWORK_NOT_READY, // 53 + eQMI_ERR_WMS_CAUSE_CODE, // 54 + eQMI_ERR_WMS_MESSAGE_NOT_SENT, // 55 + eQMI_ERR_WMS_MESSAGE_DELIVERY_FAILURE, // 56 + eQMI_ERR_WMS_INVALID_MESSAGE_ID, // 57 + eQMI_ERR_WMS_ENCODING, // 58 + eQMI_ERR_AUTHENTICATION_LOCK, // 59 + eQMI_ERR_INVALID_TRANSITION, // 60 + eQMI_ERR_61, // 61 + eQMI_ERR_62, // 62 + eQMI_ERR_63, // 63 + eQMI_ERR_64, // 64 + eQMI_ERR_SESSION_INACTIVE, // 65 + eQMI_ERR_SESSION_INVALID, // 66 + eQMI_ERR_SESSION_OWNERSHIP, // 67 + eQMI_ERR_INSUFFICIENT_RESOURCES, // 68 + eQMI_ERR_DISABLED, // 69 + eQMI_ERR_INVALID_OPERATION, // 70 + eQMI_ERR_INVALID_QMI_CMD, // 71 + eQMI_ERR_WMS_TPDU_TYPE, // 72 + eQMI_ERR_WMS_SMSC_ADDR, // 73 + eQMI_ERR_INFO_UNAVAILABLE, // 74 + eQMI_ERR_SEGMENT_TOO_LONG, // 75 + eQMI_ERR_SEGMENT_ORDER, // 76 + eQMI_ERR_BUNDLING_NOT_SUPPORTED, // 77 + eQMI_ERR_78, // 78 + eQMI_ERR_POLICY_MISMATCH, // 79 + eQMI_ERR_SIM_FILE_NOT_FOUND, // 80 + eQMI_ERR_EXTENDED_EXTERNAL, // 81 + eQMI_ERR_ACCESS_DENIED, // 82 + eQMI_ERR_HARDWARE_RESTRICTED, // 83 + eQMI_ERR_ACK_NOT_SENT, // 84 + + eQMI_ERR_INCOMPATIBLE_STATE = 90, // 90 + eQMI_ERR_FDN_RESTRICT, // 91 + eQMI_ERR_SUPS_FAILURE_CAUSE, // 92 + eQMI_ERR_NO_RADIO, // 93 + eQMI_ERR_NOT_SUPPORTED, // 94 + + eQMI_ERR_CARD_CALL_CONTROL_FAILED = 96, // 96 + eQMI_ERR_NETWORK_ABORTED, // 97 + + eQMI_ERR_CAT_EVT_REG_FAILED, // 61441 + eQMI_ERR_CAT_INVALID_TR, // 61442 + eQMI_ERR_CAT_INVALID_ENV_CMD, // 61443 + eQMI_ERR_CAT_ENV_CMD_BUSY, // 61444 + eQMI_ERR_CAT_ENV_CMD_FAIL, // 61445 + + eQMI_ERR_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMIErrorCode validity check + +PARAMETERS: + ec [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMIErrorCode ec ) +{ + bool retVal = false; + if ( (ec > eQMI_ERR_ENUM_BEGIN && ec <= eQMI_ERR_ACK_NOT_SENT) + || (ec >= eQMI_ERR_INCOMPATIBLE_STATE && ec <= eQMI_ERR_NOT_SUPPORTED) + || (ec == eQMI_ERR_CARD_CALL_CONTROL_FAILED) + || (ec == eQMI_ERR_NETWORK_ABORTED) + || (ec >= eQMI_ERR_CAT_EVT_REG_FAILED && ec < eQMI_ERR_ENUM_END) ) + { + retVal = true; + } + + return retVal; +}; + +/*=========================================================================*/ +// eQMICallEndReason Enumeration +// QMI Call End Reason Enumeration +/*=========================================================================*/ +enum eQMICallEndReason +{ + eQMI_CALL_END_REASON_BEGIN = -1, + + // General + eQMI_CALL_END_REASON_UNSPECIFIED = 1, // 1 + eQMI_CALL_END_REASON_CLIENT_END, // 2 + eQMI_CALL_END_REASON_NO_SRV, // 3 + eQMI_CALL_END_REASON_FADE, // 4 + eQMI_CALL_END_REASON_REL_NORMAL, // 5 + eQMI_CALL_END_REASON_ACC_IN_PROG, // 6 + eQMI_CALL_END_REASON_ACC_FAIL, // 7 + eQMI_CALL_END_REASON_REDIR_OR_HANDOFF, // 8 + eQMI_CALL_END_REASON_CLOSE_IN_PROGRESS, // 9 + eQMI_CALL_END_REASON_AUTH_FAILED, // 10 + eQMI_CALL_END_REASON_INTERNAL, // 11 + + // CDMA + eQMI_CALL_END_REASON_CDMA_LOCK = 500, // 500 + eQMI_CALL_END_REASON_INTERCEPT, // 501 + eQMI_CALL_END_REASON_REORDER, // 502 + eQMI_CALL_END_REASON_REL_SO_REJ, // 503 + eQMI_CALL_END_REASON_INCOM_CALL, // 504 + eQMI_CALL_END_REASON_ALERT_STOP, // 505 + eQMI_CALL_END_REASON_ACTIVATION, // 506 + eQMI_CALL_END_REASON_MAX_ACCESS_PROBE, // 507 + eQMI_CALL_END_REASON_CCS_NOT_SUPPORTED_BY_BS, // 508 + eQMI_CALL_END_REASON_NO_RESPONSE_FROM_BS, // 509 + eQMI_CALL_END_REASON_REJECTED_BY_BS, // 510 + eQMI_CALL_END_REASON_INCOMPATIBLE, // 511 + eQMI_CALL_END_REASON_ALREADY_IN_TC, // 512 + eQMI_CALL_END_REASON_USER_CALL_ORIG_DURING_GPS, // 513 + eQMI_CALL_END_REASON_USER_CALL_ORIG_DURING_SMS, // 514 + eQMI_CALL_END_REASON_NO_CDMA_SRV, // 515 + + // GSM/WCDMA + eQMI_CALL_END_REASON_CONF_FAILED = 1000, // 1000 + eQMI_CALL_END_REASON_INCOM_REJ, // 1001 + eQMI_CALL_END_REASON_NO_GW_SRV, // 1002 + eQMI_CALL_END_REASON_NETWORK_END, // 1003 + eQMI_CALL_END_REASON_LLC_SNDCP_FAILURE, // 1004 + eQMI_CALL_END_REASON_INSUFFICIENT_RESOURCES, // 1005 + eQMI_CALL_END_REASON_OPTION_TEMP_OOO, // 1006 + eQMI_CALL_END_REASON_NSAPI_ALREADY_USED, // 1007 + eQMI_CALL_END_REASON_REGULAR_DEACTIVATION, // 1008 + eQMI_CALL_END_REASON_NETWORK_FAILURE, // 1009 + eQMI_CALL_END_REASON_UMTS_REATTACH_REQ, // 1010 + eQMI_CALL_END_REASON_UMTS_PROTOCOL_ERROR, // 1011 + eQMI_CALL_END_REASON_OPERATOR_BARRING, // 1012 + eQMI_CALL_END_REASON_UNKNOWN_APN, // 1013 + eQMI_CALL_END_REASON_UNKNOWN_PDP, // 1014 + eQMI_CALL_END_REASON_GGSN_REJECT, // 1015 + eQMI_CALL_END_REASON_ACTIVATION_REJECT, // 1016 + eQMI_CALL_END_REASON_OPTION_NOT_SUPPORTED, // 1017 + eQMI_CALL_END_REASON_OPTION_UNSUBSCRIBED, // 1018 + eQMI_CALL_END_REASON_QOS_NOT_ACCEPTED, // 1019 + eQMI_CALL_END_REASON_TFT_SEMANTIC_ERROR, // 1020 + eQMI_CALL_END_REASON_TFT_SYNTAX_ERROR, // 1021 + eQMI_CALL_END_REASON_UNKNOWN_PDP_CONTEXT, // 1022 + eQMI_CALL_END_REASON_FILTER_SEMANTIC_ERROR, // 1023 + eQMI_CALL_END_REASON_FILTER_SYNTAX_ERROR, // 1024 + eQMI_CALL_END_REASON_PDP_WITHOUT_ACTIVE_TFT, // 1025 + eQMI_CALL_END_REASON_INVALID_TRANSACTION_ID, // 1026 + eQMI_CALL_END_REASON_MESSAGE_SEMANTIC_ERROR, // 1027 + eQMI_CALL_END_REASON_INVALID_MANDATORY_INFO, // 1028 + eQMI_CALL_END_REASON_TYPE_UNSUPPORTED, // 1029 + eQMI_CALL_END_REASON_MSG_TYPE_WRONG_FOR_STATE, // 1030 + eQMI_CALL_END_REASON_UNKNOWN_INFO_ELEMENT, // 1031 + eQMI_CALL_END_REASON_CONDITIONAL_IE_ERROR, // 1032 + eQMI_CALL_END_REASON_MSG_WRONG_FOR_PROTOCOL, // 1033 + eQMI_CALL_END_REASON_APN_TYPE_CONFLICT, // 1034 + eQMI_CALL_END_REASON_NO_GPRS_CONTEXT, // 1035 + eQMI_CALL_END_REASON_FEATURE_NOT_SUPPORTED, // 1036 + + // CDMA 1xEV-DO (HDR) + eQMI_CALL_END_REASON_CD_GEN_OR_BUSY = 1500, // 1500 + eQMI_CALL_END_REASON_CD_BILL_OR_AUTH, // 1501 + eQMI_CALL_END_REASON_CHG_HDR, // 1502 + eQMI_CALL_END_REASON_EXIT_HDR, // 1503 + eQMI_CALL_END_REASON_HDR_NO_SESSION , // 1504 + eQMI_CALL_END_REASON_HDR_ORIG_DURING_GPS_FIX, // 1505 + eQMI_CALL_END_REASON_HDR_CS_TIMEOUT , // 1506 + eQMI_CALL_END_REASON_HDR_RELEASED_BY_CM, // 1507 + + eQMI_CALL_END_REASON_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eQMICallEndReason validity check + +PARAMETERS: + err [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eQMICallEndReason err ) +{ + if ( (err >= eQMI_CALL_END_REASON_UNSPECIFIED) + && (err <= eQMI_CALL_END_REASON_INTERNAL) ) + { + return true; + } + + if ( (err >= eQMI_CALL_END_REASON_CDMA_LOCK) + && (err <= eQMI_CALL_END_REASON_NO_CDMA_SRV) ) + { + return true; + } + + if ( (err >= eQMI_CALL_END_REASON_CONF_FAILED) + && (err <= eQMI_CALL_END_REASON_FEATURE_NOT_SUPPORTED) ) + { + return true; + } + + if ( (err >= eQMI_CALL_END_REASON_CD_GEN_OR_BUSY) + && (err <= eQMI_CALL_END_REASON_HDR_RELEASED_BY_CM) ) + { + return true; + } + + return false; +}; + +/*=========================================================================*/ +// eIPAddressType Enumeration +// IPv4 or IPv6 +/*=========================================================================*/ +enum eIPAddressType +{ + eIP_ADDRESS_ENUM_BEGIN = -1, + + eIP_ADDRESS_V4 = 4, // IPv4 + eIP_ADDRESS_V6 = 6, // IPv6 + + eIP_ADDRESS_ENUM_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eIPAddressType validity check + +PARAMETERS: + type [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eIPAddressType type ) +{ + if (type == eIP_ADDRESS_V4 || type == eIP_ADDRESS_V6) + { + return true; + } + + return false; +} + +/*=========================================================================*/ +// eSMSMessageMode Enumeration +// CDMA or GW +/*=========================================================================*/ +enum eSMSMessageMode +{ + eSMS_MESSAGE_MODE_BEGIN = -1, + + eSMS_MESSAGE_MODE_CDMA, // 0 CDMA + eSMS_MESSAGE_MODE_GW, // 1 GW + + eSMS_MESSAGE_MODE_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eSMSMessageMode validity check + +PARAMETERS: + mode [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eSMSMessageMode mode ) +{ + if (mode == eSMS_MESSAGE_MODE_CDMA || mode == eSMS_MESSAGE_MODE_GW) + { + return true; + } + + return false; +} + +/*=========================================================================*/ +// eNetworkMode Enumeration +// UMTS or CDMA +/*=========================================================================*/ +enum eNetworkMode +{ + eNETWORK_MODE_BEGIN = -1, + + eNETWORK_MODE_UMTS, // 0 UMTS + eNETWORK_MODE_CDMA, // 1 CDMA + + eNETWORK_MODE_UNSET = 0xff, // 0xff unknown/unset + + eNETWORK_MODE_END +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eNetworkMode validity check + +PARAMETERS: + mode [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eNetworkMode mode ) +{ + if (mode == eNETWORK_MODE_UMTS + || mode == eNETWORK_MODE_CDMA + || mode == eNETWORK_MODE_UNSET) + { + return true; + } + + return false; +} \ No newline at end of file diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIProtocolServer.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIProtocolServer.cpp new file mode 100644 index 0000000..9f6f12f --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIProtocolServer.cpp @@ -0,0 +1,434 @@ +/*=========================================================================== +FILE: + QMIProtocolServer.cpp + +DESCRIPTION: + QMI protocol server + +PUBLIC CLASSES AND METHODS: + cQMIProtocolServer + +Copyright (c) 2013, 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 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 "QMIProtocolServer.h" +#include "QMIBuffers.h" +#include "Comm.h" +#include "Socket.h" + +/*=========================================================================*/ +// cQMIProtocolServer Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cQMIProtocolServer (Public Method) + +DESCRIPTION: + Constructor + +PARAMETERS: + serviceType [ I ] - QMI service type requested + bufferSzRx [ I ] - Size of data buffer for incoming data + logSz [ I ] - Size of log (number of buffers) + +SEQUENCING: + None (constructs sequencing objects) + +RETURN VALUE: + None +===========================================================================*/ +cQMIProtocolServer::cQMIProtocolServer( + eQMIService serviceType, + ULONG bufferSzRx, + ULONG logSz ) + : cProtocolServer( MapQMIServiceToProtocol( serviceType, false ), + MapQMIServiceToProtocol( serviceType, true ), + bufferSzRx, + logSz ), + mLastTID( (WORD)INVALID_QMI_TRANSACTION_ID ), + mService( serviceType ) +{ + // Nothing to do +} + +/*=========================================================================== +METHOD: + ~cQMIProtocolServer (Public Method) + +DESCRIPTION: + Destructor + +SEQUENCING: + None (constructs sequencing objects) + +RETURN VALUE: + None +===========================================================================*/ +cQMIProtocolServer::~cQMIProtocolServer() +{ + // Nothing to do +} + +/*=========================================================================== +METHOD: + Connect (Public Method) + +DESCRIPTION: + Connect to the configured QMI service using the given QMI + control file + +PARAMETERS: + pControlFile [ I ] - QMI control file + +SEQUENCING: + This method is sequenced according to the command event, i.e. any + other thread that needs to send a command to the protocol server + thread will block until this method completes + +RETURN VALUE: + bool +===========================================================================*/ +bool cQMIProtocolServer::Connect( LPCSTR pControlFile ) +{ + // Assume failure + bool bRC = false; + if (IsValid( mService ) == false || mService == eQMI_SVC_CONTROL) + { + return bRC; + } + + std::string name = pControlFile; + if (name.find( "qcqmi" ) != std::string::npos) + { + mpConnection = new cComm(); + mConnectionType = eConnectionType_RmNet; + } + else + { + // SMD + std::string defaultPath = "/var/"; + + // Such as "SOCKET:/dev/socket/,0" + if (name.find( "SOCKET:" ) == 0) + { + // Remove qualifier + name = name.substr( 7 ); + } + // Such as "QMUXD:0" + else if (name.find( "QMUXD:" ) == 0) + { + name = name.substr( 6 ); + name = defaultPath + "," + name; + } + // Just channel ID, IE: "0" + else + { + name = defaultPath + "," + name; + } + + mpConnection = new cSocket(); + mConnectionType = eConnectionType_SMD; + } + + // Pass service file to base class for actual connection + bRC = cProtocolServer::Connect( name.c_str() ); + + if (bRC == false) + { + TRACE( "QMI connect %d failed\n", mService ); + } + + return bRC; +} + +/*=========================================================================== +METHOD: + ValidateRequest (Internal Method) + +DESCRIPTION: + Validate a request that is about to be scheduled + +SEQUENCING: + This method is sequenced according to the command event, i.e. any + other thread that needs to send a command to the protocol server + thread will block until this method completes + +RETURN VALUE: + bool +===========================================================================*/ +bool cQMIProtocolServer::ValidateRequest( const sProtocolRequest & req ) +{ + if (cProtocolServer::ValidateRequest( req ) == false) + { + return false; + } + + sQMIServiceBuffer qmiReq( req.GetSharedBuffer() ); + return qmiReq.IsValid(); +} + +/*=========================================================================== +METHOD: + InitializeComm (Internal Method) + +DESCRIPTION: + Perform protocol specific communications port initialization + +SEQUENCING: + None (must be called from protocol server thread) + +RETURN VALUE: + bool +===========================================================================*/ +bool cQMIProtocolServer::InitializeComm() +{ + bool bResult = false; + if (mpConnection == 0) + { + return bResult; + } + + if (mConnectionType == eConnectionType_RmNet) + { + // Setup the QMI Service type + int result = mpConnection->SendCtl( QMI_GET_SERVICE_FILE_IOCTL, + (void*)(unsigned long)mService ); + bResult = (result == 0); + } + else if (mConnectionType == eConnectionType_SMD) + { + // Setup the QMI Service type + int result = mpConnection->SendCtl( eQMUXD_MSG_ALLOC_QMI_CLIENT_ID, + (void*)&mService ); + bResult = (result == 0); + } + + return bResult; +} + +/*=========================================================================== +METHOD: + CleanupComm (Internal Method) + +DESCRIPTION: + Perform protocol specific communications port cleanup + +SEQUENCING: + None (must be called from protocol server thread) + +RETURN VALUE: + bool +===========================================================================*/ +bool cQMIProtocolServer::CleanupComm() +{ + bool bResult = true; + + if (mpConnection != 0 + && mConnectionType == eConnectionType_SMD) + { + // Delete the QMI client + + // NOTE: This is generally unnecessary, when you close the channel + // it is deleted + int result = mpConnection->SendCtl( eQMUXD_MSG_RELEASE_QMI_CLIENT_ID, + 0 ); + bResult = (result == 0); + } + + // Nothing to actually do here + return true; +} + +/*=========================================================================== +METHOD: + DecodeRxData (Internal Method) + +DESCRIPTION: + Decode incoming data into QMI indications/responses + +PARAMETERS: + bytesReceived [ I ] - Number of bytes to decoded + rspIdx [ O ] - Log index of last valid response (not used) + bAbortTx [ O ] - Response aborts current transmission? (not used) + +SEQUENCING: + None (must be called from protocol server thread) + +RETURN VALUE: + bool - Was a response received? +===========================================================================*/ +bool cQMIProtocolServer::DecodeRxData( + ULONG bytesReceived, + ULONG & rspIdx, + bool & bAbortTx ) +{ + // Assume failure + bool bRC = false; + + rspIdx = INVALID_LOG_INDEX; + bAbortTx = false; + + // Something to decode from? + if (bytesReceived == 0) + { + return bRC; + } + + // Set protocol type (we have to be dealing with a valid QMI service) + eProtocolType pt = MapQMIServiceToProtocol( mService, false ); + if (pt == ePROTOCOL_ENUM_BEGIN) + { + return bRC; + } + + sSharedBuffer * pTmp = 0; + pTmp = new sSharedBuffer( mpRxBuffer, bytesReceived, pt ); + if (pTmp != 0) + { + sQMIServiceBuffer tmpBuf( pTmp ); + if (tmpBuf.IsValid() == true) + { + rspIdx = mLog.AddBuffer( tmpBuf ); + if (IsResponse( tmpBuf ) == true) + { + bRC = true; + } + else + { + rspIdx = INVALID_LOG_INDEX; + } + } + } + + return bRC; +} + +/*=========================================================================== +METHOD: + EncodeTxData (Internal Method) + +DESCRIPTION: + Encode data for transmission + +PARAMETERS: + pBuffer [ I ] - Data to be encoded + bEncoded [ O ] - Do we even encode data? + +SEQUENCING: + None (must be called from protocol server thread) + +RETURN VALUE: + sSharedBuffer * - Encoded data (0 upon error when encoding is indicated) +===========================================================================*/ +sSharedBuffer * cQMIProtocolServer::EncodeTxData( + sSharedBuffer * pBuffer, + bool & bEncoded ) +{ + WORD tid = ++mLastTID; + if (tid == (WORD)INVALID_QMI_TRANSACTION_ID) + { + tid++; + } + + sQMIServiceBuffer tmpBuf( pBuffer ); + tmpBuf.SetTransactionID( tid ); + + // No actual encoding required as we alter the original request + bEncoded = false; + return 0; +}; + +/*=========================================================================== +METHOD: + IsResponse (Internal Method) + +DESCRIPTION: + Is the passed in data a response to the current request? + +PARAMETERS: + rsp [ I ] - Candidate response + +SEQUENCING: + None (must be called from protocol server thread) + +RETURN VALUE: + bool +===========================================================================*/ +bool cQMIProtocolServer::IsResponse( const sProtocolBuffer & rsp ) +{ + // Assume not + bool bRC = false; + if ( (mpActiveRequest == 0) + || (mpActiveRequest->mRequest.IsValid() == false) + || (mpActiveRequest->mbWaitingForResponse == false) + || (rsp.IsValid() == false) ) + { + return bRC; + } + + sQMIServiceBuffer qmiReq( mpActiveRequest->mRequest.GetSharedBuffer() ); + sQMIServiceBuffer qmiRsp( rsp.GetSharedBuffer() ); + + if (qmiReq.IsValid() == false || qmiRsp.IsValid() == false) + { + return bRC; + } + + if (qmiRsp.IsResponse() == false) + { + return bRC; + } + + WORD reqID = qmiReq.GetTransactionID(); + WORD rspID = qmiRsp.GetTransactionID(); + + if ( (reqID == (WORD)INVALID_QMI_TRANSACTION_ID) + || (rspID == (WORD)INVALID_QMI_TRANSACTION_ID) + || (reqID != rspID) ) + { + return bRC; + } + + // Sadly there are documentated cases of firmware returning responses + // with a matching transaction ID but a mismatching message ID. There + // is no reason for this to be considered valid behavior as of yet + ULONG reqMsgID = qmiReq.GetMessageID(); + ULONG rspMsgID = qmiRsp.GetMessageID(); + + if (reqMsgID != rspMsgID) + { + return bRC; + } + + bRC = true; + return bRC; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIProtocolServer.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIProtocolServer.h new file mode 100644 index 0000000..f3e648b --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/QMIProtocolServer.h @@ -0,0 +1,115 @@ +/*=========================================================================== +FILE: + QMIProtocolServer.h + +DESCRIPTION: + QMI protocol server + +PUBLIC CLASSES AND METHODS: + cQMIProtocolServer + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "ProtocolServer.h" +#include "QMIEnum.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +/*=========================================================================*/ +// Class cQMIProtocolServer +/*=========================================================================*/ +class cQMIProtocolServer : public cProtocolServer +{ + public: + // Constructor + cQMIProtocolServer( + eQMIService serviceType, + ULONG bufferSzRx, + ULONG logSz ); + + // Destructor + virtual ~cQMIProtocolServer(); + + // Connect to the given QMI service using the configured QMI + // control file + bool Connect( LPCSTR pControlFile ); + + // (Inline) Return the QMI service type + eQMIService GetServiceType() + { + return mService; + }; + + protected: + // Validate a request that is about to be scheduled + virtual bool ValidateRequest( const sProtocolRequest & req ); + + // Perform protocol specific communications port initialization + virtual bool InitializeComm(); + + // Perform protocol specific communications port cleanup + virtual bool CleanupComm(); + + // Decode incoming data into packets returning the last response + virtual bool DecodeRxData( + ULONG bytesReceived, + ULONG & rspIdx, + bool & bAbortTx ); + + // Encode data for transmission + virtual sSharedBuffer * EncodeTxData( + sSharedBuffer * pBuffer, + bool & bEncoded ); + + // Is the passed in data a response to the current request? + virtual bool IsResponse( const sProtocolBuffer & rsp ); + + // (Inline) Is the passed in data a response that aborts the + // current request? + virtual bool IsTxAbortResponse( const sProtocolBuffer & /* rsp */ ) + { + // QMI doesn't necessarily require this + return false; + }; + + /* Current transaction ID */ + SHORT mLastTID; + + /* Type of QMI service we are serving */ + eQMIService mService; +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/SharedBuffer.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Core/SharedBuffer.cpp new file mode 100644 index 0000000..8ac466b --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/SharedBuffer.cpp @@ -0,0 +1,374 @@ +/*=========================================================================== +FILE: + SharedBuffer.cpp + +DESCRIPTION: + Shareable protocol structures and affliated methods + +PUBLIC CLASSES AND METHODS: + + sSharedBuffer + Simple struct to represent a reference counted shareable (no copy) + buffer, as the basis for all buffer related classes + +Copyright (c) 2013, 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 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 "SharedBuffer.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// Synchronization object +struct sSharedBufferSync +{ + public: + // Constructor + sSharedBufferSync() + : mbInitialized( false ) + { + int nRet = pthread_mutex_init( &mSyncSection, NULL ); + if (nRet != 0) + { + TRACE( "SharedBuffer: Unable to init sync mutex." + " Error %d: %s\n", + nRet, + strerror( nRet ) ); + return; + } + + mbInitialized = true; + }; + + // Destructor + ~sSharedBufferSync() + { + mbInitialized = false; + int nRet = pthread_mutex_destroy( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SharedBuffer: Unable to destroy sync mutex." + " Error %d: %s\n", + nRet, + strerror( nRet ) ); + } + + }; + + // Lock sync object + void Lock() + { + if (mbInitialized == true) + { + int nRet = pthread_mutex_lock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SharedBuffer: Unable to lock sync mutex." + " Error %d: %s\n", + nRet, + strerror( nRet ) ); + return; + } + + } + }; + + // Unlock sync object + void Unlock() + { + if (mbInitialized == true) + { + int nRet = pthread_mutex_unlock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SharedBuffer: Unable to unlock sync mutex." + " Error %d: %s\n", + nRet, + strerror( nRet ) ); + return; + } + + } + }; + + protected: + /* DIAG buffer critical section */ + pthread_mutex_t mSyncSection; + + /* Has this object been initialized? */ + bool mbInitialized; +}; + +// Global (across all shared buffers) reference count guard +sSharedBufferSync gRefCount; + +/*=========================================================================*/ +// sSharedBuffer Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + sSharedBuffer (Public Method) + +DESCRIPTION: + Constructor (copy passed in buffer) + +PARAMETERS: + pDataToCopy [ I ] - The data buffer to copy (should be non-zero) + dataLen [ I ] - The length of the above buffer (should be > 1) + dataType [ I ] - Type of data (not used internal to class) + +RETURN VALUE: + None +===========================================================================*/ +sSharedBuffer::sSharedBuffer( + const BYTE * pDataToCopy, + ULONG dataLen, + ULONG dataType ) + : mpData( 0 ), + mSize( 0 ), + mType( dataType ), + mRefCount( 0 ) +{ + // Length not too small/not too big? + if (IsValidSize( dataLen ) == true) + { + // Yes, data actually exists? + if (pDataToCopy != 0) + { + // Yes, try to allocate memory + mpData = new BYTE[dataLen]; + if (mpData != 0) + { + // Now copy into our allocation + memcpy( (PVOID)mpData, + (LPCVOID)pDataToCopy, + (SIZE_T)dataLen ); + + // Now set the size, we do this last so that our double + // deletion logic is only applied if we had an allocation + // in the first place + mSize = dataLen; + } + } + } +} + +/*=========================================================================== +METHOD: + sSharedBuffer (Public Method) + +DESCRIPTION: + Constructor (assume ownership of passed in buffer) + +PARAMETERS: + dataLen [ I ] - The length of the above buffer (should be > 1) + pDataToOwn [ I ] - The data buffer to assume ownership of (should + be non-zero) + + dataType [ I ] - Type of data (not used internal to class) + + NOTE: The order is intentionally reversed from the previous constructor + to avoid any cases of mistaken identity (copy versus assume ownership) + +RETURN VALUE: + None +===========================================================================*/ +sSharedBuffer::sSharedBuffer( + ULONG dataLen, + PBYTE pDataToOwn, + ULONG dataType ) + : mpData( 0 ), + mSize( 0 ), + mType( dataType ), + mRefCount( 0 ) +{ + // Data actually exists? + if (pDataToOwn != 0) + { + // Yes, length not too small/not too big? + if (IsValidSize( dataLen ) == true) + { + // Yes, assume ownership of the passed in buffer + mpData = pDataToOwn; + mSize = dataLen; + } + else + { + // This data buffer is not acceptable to us, but we have assumed + // ownership of the memory which we will now free + delete [] pDataToOwn; + } + } +} + +/*=========================================================================== +METHOD: + ~sSharedBuffer (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +sSharedBuffer::~sSharedBuffer() +{ + ASSERT( mRefCount == 0 ); + + // Buffer data to free? + if (mpData != 0) + { + // Yes, zero first byte for caution and then delete it + mpData[0] = 0; + delete [] mpData; + + // Even more caution, zero out pointer + mpData = 0; + } + else if (mSize != 0) + { + ASSERT( (PVOID)("Double deletion detected in ~sSharedBuffer") == 0 ); + } +} + +/*=========================================================================== +METHOD: + operator == (Public Method) + +DESCRIPTION: + Equality operator + +RETURN VALUE: + bool +===========================================================================*/ +bool sSharedBuffer::operator == ( const sSharedBuffer & refBuf ) const +{ + // Assume they are not equal + bool bEq = false; + + // The buffers must be the same + if (mpData == refBuf.mpData) + { + if (mSize == refBuf.mSize) + { + if (mRefCount == refBuf.mRefCount) + { + if (mType == refBuf.mType) + { + // The shared buffers are the same + bEq = true; + } + } + else + { + // Very odd - the buffers are the same, but not the ref count?!? + ASSERT( 0 ); + } + } + else + { + // Very odd - the buffers are the same, but not the size?!? + ASSERT( 0 ); + } + } + + return bEq; +} + +/*=========================================================================== +METHOD: + operator != (Public Method) + +DESCRIPTION: + Inequality operator + +RETURN VALUE: + bool +===========================================================================*/ +bool sSharedBuffer::operator != ( const sSharedBuffer & refBuf ) const +{ + if (*this == refBuf) + { + return false; + } + + return true; +} + +/*=========================================================================== +METHOD: + AddRef (Internal Method) + +DESCRIPTION: + Increment reference count + +RETURN VALUE: + None +===========================================================================*/ +void sSharedBuffer::AddRef() +{ + gRefCount.Lock(); + mRefCount++; + gRefCount.Unlock(); +} + +/*=========================================================================== +METHOD: + Release (Internal Method) + +DESCRIPTION: + Release reference, delete if reference count zero + +RETURN VALUE: + None +===========================================================================*/ +void sSharedBuffer::Release() +{ + gRefCount.Lock(); + + ASSERT( mRefCount != 0 ); + + // Decrement reference count + if (mRefCount > 0) + { + mRefCount--; + } + + // ... and delete if reference count now 0 + if (mRefCount == 0) + { + delete this; + } + + gRefCount.Unlock(); +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/SharedBuffer.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/SharedBuffer.h new file mode 100644 index 0000000..b4acbc3 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/SharedBuffer.h @@ -0,0 +1,165 @@ +/*=========================================================================== +FILE: + SharedBuffer.h + +DESCRIPTION: + Shareable buffer structures and affliated methods + +PUBLIC CLASSES AND METHODS: + sSharedBuffer + Simple struct to represent a reference counted shareable (no copy) + buffer, as the basis for all buffer related classes + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Forward Declarations +//--------------------------------------------------------------------------- +struct sProtocolBuffer; + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// Maximum size of a shared buffer +const ULONG MAX_SHARED_BUFFER_SIZE = 1024 * 16 + 256; + +//--------------------------------------------------------------------------- +// Pragmas (pack structs) +//--------------------------------------------------------------------------- +#pragma pack( push, 1 ) + +/*=========================================================================*/ +// Struct sSharedBuffer +// +// Simple struct to represent a reference counted shareable (no copy) +// buffer, as the basis for all buffer related classes +// +// NOTE: Do *NOT* create instances of this structure on the stack, it +// must be dynamically allocated in order to function correctly +/*=========================================================================*/ +struct sSharedBuffer +{ + public: + // Constructor (copy passed in buffer) + sSharedBuffer( + const BYTE * pDataToCopy, + ULONG dataLen, + ULONG dataType ); + + // Constructor (assume ownership of passed in buffer) + sSharedBuffer( + ULONG dataLen, + PBYTE pDataToOwn, + ULONG dataType ); + + // Destructor + virtual ~sSharedBuffer(); + + // Equality operator + bool operator == ( const sSharedBuffer & ) const; + + // Inequality operator + bool operator != ( const sSharedBuffer & ) const; + + // (Inline) Get buffer + const BYTE * GetBuffer() const + { + return mpData; + }; + + // (Inline) Get buffer size + ULONG GetSize() const + { + return mSize; + }; + + // (Inline) Get buffer type + ULONG GetType() const + { + return mType; + }; + + // (Inline) Is this buffer valid? + bool IsValid() const + { + return (mpData != 0 && IsValidSize( mSize )); + }; + + // (Inline) Get reference count + ULONG GetRefCount() const + { + return mRefCount; + }; + + // (Static Inline) Is the passed in size within the allowable range + // a shared buffer? + static bool IsValidSize( ULONG sz ) + { + return (sz > 0 && sz <= MAX_SHARED_BUFFER_SIZE); + }; + + protected: + // Add reference + void AddRef(); + + // Release reference, delete if reference count zero + void Release(); + + /* Data */ + PBYTE mpData; + + /* Size of data */ + ULONG mSize; + + /* Type of data */ + ULONG mType; + + /* Reference count */ + ULONG mRefCount; + + private: + // Leave copy constructor and assignment operator unimplemented + // to prevent unintentional and unauthorized copying of the object + // (which would lead to bad reference counting) + sSharedBuffer( const sSharedBuffer & ); + sSharedBuffer & operator = ( const sSharedBuffer & ); + + friend struct sProtocolBuffer; +}; + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma pack( pop ) + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/Socket.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Core/Socket.cpp new file mode 100644 index 0000000..84331d2 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/Socket.cpp @@ -0,0 +1,836 @@ +/*=========================================================================== +FILE: + Socket.cpp + +DESCRIPTION: + Implementation of cSocket class + +PUBLIC CLASSES AND METHODS: + cSocket + This class wraps low level communication to qmuxd + +Copyright (c) 2013, 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 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 "Socket.h" +#include "ProtocolServer.h" +#include +#include + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- +// Thread commands +#define START_READ_CMD 0 +#define STOP_READ_CMD 1 +#define EXIT_CMD 2 + +// Size of the QMUXD command payload +// GET_CLIENT_ID and RELEASE_CLIENT_ID must pass in a buffer of this size +#define PAYLOAD_SIZE 808 + +/*=========================================================================*/ +// struct sQMUXDHeader +/*=========================================================================*/ +#pragma pack( push, 1 ) + +struct sQMUXDHeader +{ + /* Total size of header and following buffer */ + int mTotalSize; + + /* QMUXD client ID */ + int mQMUXDClientID; + + /* Message type */ + eQMUXDMessageTypes mQMUXDMsgID; + + /* Duplicate of mQMUXDClientID */ + int mQMUXDClientIDDuplicate; + + /* Transaction ID */ + unsigned long mTxID; + + /* System error code */ + int mSysErrCode; + + /* QMI error code (duplicate of TLV 0x02) */ + int mQmiErrCode; + + /* SMD channel. 0 = SMD_DATA_5 */ + int mQMUXDConnectionType; + + /* QMI service ID */ + int mQMUXServiceID; + + /* QMI client ID */ + unsigned char mQMUXClientID; + + /* QMI flags */ + unsigned char mRxFlags; + + /* In QMUXD this struct is not packed, so the compiler appends + these two bytes */ + unsigned short int mMissing2Bytes; +}; + +#pragma pack( pop ) + + +/*=========================================================================*/ +// Free Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + RxSocketThread (Free Method) + +DESCRIPTION: + Thread for simulating asynchronous reads to a socket + +PARAMETERS: + pData [ I ] cSocket pointer + +RETURN VALUE: + void * - thread exit value (always 0) +===========================================================================*/ +void * RxSocketThread( void * pData ) +{ + cSocket * pSocket = (cSocket*)pData; + if (pSocket == NULL || pSocket->IsValid() == false) + { + return 0; + } + + fd_set inputSet, outputSet; + FD_ZERO( &inputSet ); + FD_SET( pSocket->mCommandPipe[READING], &inputSet ); + int largestFD = pSocket->mCommandPipe[READING]; + + int status = 0; + while (true) + { + // No FD_COPY() available + memcpy( &outputSet, &inputSet, sizeof( fd_set ) ); + + // Wait until we recieve a command or data is available + status = select( largestFD + 1, &outputSet, NULL, NULL, NULL ); + if (status <= 0) + { + TRACE( "error %d in select, errno %d\n", status, errno ); + break; + } + + if (FD_ISSET( pSocket->mCommandPipe[READING], &outputSet ) == true) + { + // Read command value from the pipe + BYTE cmd; + status = read( pSocket->mCommandPipe[READING], &cmd, 1 ); + if (status != 1) + { + TRACE( "cmd error %d\n", status ); + break; + } + + if (cmd == START_READ_CMD) + { + FD_SET( pSocket->mSocket, &inputSet ); + largestFD = std::max( pSocket->mSocket, + pSocket->mCommandPipe[READING] ); + } + else if (cmd == STOP_READ_CMD) + { + FD_CLR( pSocket->mSocket, &inputSet ); + largestFD = pSocket->mCommandPipe[READING]; + } + else + { + // EXIT_CMD or anything else + pSocket->mpRxCallback = 0; + break; + } + } + else if (FD_ISSET( pSocket->mSocket, &outputSet ) == true) + { + // Stop watching for read data + FD_CLR( pSocket->mSocket, &inputSet ); + largestFD = pSocket->mCommandPipe[READING]; + + // Perform a recv for the header + sQMUXDHeader recvHdr; + status = recv( pSocket->mSocket, + &recvHdr, + sizeof( recvHdr ), + 0 ); + if (status != sizeof( recvHdr )) + { + TRACE( "recv error, bad size %d\n", status ); + break; + } + + // Calculate and read the remaining data + if ((recvHdr.mTotalSize < 0) + || ((ULONG)recvHdr.mTotalSize < sizeof( recvHdr )) + || ((ULONG)recvHdr.mTotalSize > sizeof( recvHdr ) + pSocket->mBuffSz)) + { + TRACE( "read too large for buffer\n" ); + break; + } + + status = recv( pSocket->mSocket, + pSocket->mpBuffer, + recvHdr.mTotalSize - sizeof( recvHdr ), + 0 ); + + // Is this one of our IOCTLS or a standard message? + if (recvHdr.mQMUXDMsgID == eQMUXD_MSG_WRITE_QMI_SDU) + { + cIOCallback * pCallback = pSocket->mpRxCallback; + pSocket->mpRxCallback = 0; + + if (pCallback == (cIOCallback *)1) + { + // We wanted to read, but not to be notified + } + else if (status >= 0) + { + pCallback->IOComplete( 0, status ); + } + else + { + pCallback->IOComplete( status, 0 ); + } + } + else + { + pSocket->mpRxCallback = 0; + // Notify SendCtl() that control message completed + + if (recvHdr.mQMUXDMsgID == eQMUXD_MSG_ALLOC_QMI_CLIENT_ID) + { + DWORD clientID; + memcpy( &clientID, &pSocket->mpBuffer[0], 4 ); + + pSocket->mCtrlMsgComplete.Set( clientID ); + } + else + { + // Just set the event + pSocket->mCtrlMsgComplete.Set( 0 ); + } + } + } + } + + return 0; +}; + +/*=========================================================================*/ +// cSocket Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cSocket (Public Method) + +DESCRIPTION: + Constructor + +RETURN VALUE: + None +===========================================================================*/ +cSocket::cSocket() + : mSocket( INVALID_HANDLE_VALUE ), + mbCancelWrite( false ), + mpBuffer( 0 ), + mBuffSz( 0 ), + mRxThreadID( 0 ), + mCtrlMsgComplete(), + mQMUXDClientID( 0 ), + mQMUXClientID( 0 ), + mQMUXServiceID( 0 ), + mChannelID( -1 ), + mQMUXDTxID( 0 ) +{ + mCommandPipe[READING] = INVALID_HANDLE_VALUE; + mCommandPipe[WRITING] = INVALID_HANDLE_VALUE; +} + +/*=========================================================================== +METHOD: + ~cSocket (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +cSocket::~cSocket() +{ + // Disconnect from current port + Disconnect(); + + mCommandPipe[READING] = INVALID_HANDLE_VALUE; + mCommandPipe[WRITING] = INVALID_HANDLE_VALUE; +} + +/*=========================================================================== +METHOD: + IsValid (Public Method) + +DESCRIPTION: + Is this object valid? + +RETURN VALUE: + Bool +===========================================================================*/ +bool cSocket::IsValid() +{ + // Nothing to do + return true; +} + +/*=========================================================================== +METHOD: + Connect (Public Method) + +DESCRIPTION: + Connect to the specified port + +PARAMETERS: + pPort [ I ] - String that consists of "Path,Channel" + Path is path to qmux_client_socket and qmux_connect_socket + Channel is used for connection type (IE: "0" = SMD_DATA_5 ) + +RETURN VALUE: + bool +===========================================================================*/ +bool cSocket::Connect( LPCSTR pPort ) +{ + if (IsValid() == false || pPort == 0 || pPort[0] == 0) + { + return false; + } + + if (mSocket != INVALID_HANDLE_VALUE) + { + Disconnect(); + } + + // Initialize command pipe for read thread + int nRet = pipe( mCommandPipe ); + if (nRet != 0) + { + TRACE( "cSocket:Connect() pipe creation failed %d\n", nRet ); + return false; + } + + // Start the read thread + nRet = pthread_create( &mRxThreadID, + 0, + RxSocketThread, + this ); + if (nRet != 0) + { + TRACE( "cSocket::Connect() pthread_create = %d\n", nRet ); + + Disconnect(); + return false; + } + + // Create a socket + mSocket = socket( AF_UNIX, SOCK_STREAM, 0 ); + if (mSocket == INVALID_HANDLE_VALUE) + { + TRACE( "unable to create socket %d\n", errno ); + + Disconnect(); + return false; + } + + // Get path and channel + std::string port = pPort; + size_t found = port.find( ',' ); + if (found == std::string::npos) + { + TRACE( "Invalid port specified" ); + + Disconnect(); + return false; + } + std::string path = port.substr( 0, found ); + std::string channel = port.substr( found + 1 ); + + struct sockaddr_un clientSockAddr; + memset( &clientSockAddr, 0, sizeof( clientSockAddr ) ); + clientSockAddr.sun_family = AF_UNIX; + + // Format the client path + snprintf( &clientSockAddr.sun_path[0], + sizeof( clientSockAddr.sun_path ), + "%sqmux_client_socket%7lu", + path.c_str(), + (unsigned long)getpid() ); + + // Delete if it exists already + unlink( clientSockAddr.sun_path ); + + // Bind to a client address + nRet = bind( mSocket, + (struct sockaddr *)&clientSockAddr, + sizeof( sockaddr_un ) ); + if (nRet == -1) + { + TRACE( "bad bind %d\n", errno ); + + Disconnect(); + return false; + } + + // Format the connection path + struct sockaddr_un connectSockAddr; + memset( &connectSockAddr, 0, sizeof( connectSockAddr ) ); + connectSockAddr.sun_family = AF_UNIX; + + snprintf( &connectSockAddr.sun_path[0], + sizeof( connectSockAddr.sun_path ), + "%sqmux_connect_socket", + path.c_str() ); + + // Connect to server address + nRet = connect( mSocket, + (struct sockaddr *)&connectSockAddr, + sizeof( sockaddr_un ) ); + if (nRet < 0) + { + TRACE( "bad connect %d\n", errno ); + + Disconnect(); + return false; + } + + int clientID; + nRet = recv( mSocket, &clientID, sizeof( clientID ), 0 ); + if (nRet != sizeof( clientID )) + { + TRACE( "bad client ID %d\n", errno ); + + Disconnect(); + return false; + } + + // Save QMUXD Client ID + mQMUXDClientID = clientID; + + // Save SMD channel + mChannelID = strtol( channel.c_str(), 0, 10 ); + if (mChannelID == -1) + { + Disconnect(); + return false; + } + + // Success! + return true; +} + +/*=========================================================================== +METHOD: + SendCtl (Public Method) + +DESCRIPTION: + Send a control message to the lower layer + +PARAMETERS: + msgType [ I ] - eQMUXDMessageType + pData [I/O] - input or output specific to ioctl request value + +RETURN VALUE: + int - control message return value (0 for success) +===========================================================================*/ +int cSocket::SendCtl( + UINT msgType, + void * pData ) +{ + if (mSocket == INVALID_HANDLE_VALUE) + { + TRACE( "Invalid file handle\n" ); + return -EBADFD; + } + + BYTE msg[sizeof( sQMUXDHeader ) + PAYLOAD_SIZE]; + memset( &msg[0], 0, sizeof( msg ) ); + + // The important QMUXD header values + sQMUXDHeader * pHdr = (sQMUXDHeader *)&msg[0]; + pHdr->mTotalSize = sizeof( msg ); + pHdr->mQMUXDClientID = mQMUXDClientID; + pHdr->mQMUXDMsgID = (eQMUXDMessageTypes)msgType; + pHdr->mQMUXDClientIDDuplicate = mQMUXDClientID; + pHdr->mQMUXDConnectionType = mChannelID; + + // mQMUXDTxID could go to INT_MAX, but rather than dealing with possible + // overflow in qmuxd or one of the lower layers, we'll stop early + mQMUXDTxID++; + if (mQMUXDTxID > 100000) + { + mQMUXDTxID = 1; + } + pHdr->mTxID = ++mQMUXDTxID; + + // The Payload + BYTE * pPayload = &msg[sizeof( sQMUXDHeader )]; + if (msgType == (int)eQMUXD_MSG_ALLOC_QMI_CLIENT_ID) + { + memcpy( &mQMUXServiceID, pData, 4 ); + memcpy( &pPayload[0], &mQMUXServiceID, 4 ); + } + else if (msgType == (int)eQMUXD_MSG_RELEASE_QMI_CLIENT_ID) + { + memcpy( &pPayload[0], &mQMUXServiceID, 4 ); + memcpy( &pPayload[4], &mQMUXClientID, 4 ); + } + + // Send the message + int rc = send( mSocket, &msg[0], sizeof( msg ), 0 ); + if (rc != sizeof( msg )) + { + TRACE( "bad write %d\n", rc ); + return rc; + } + + if (mpRxCallback == 0) + { + // No one is currently reading, need to trigger a read + // so our data can be recieved + RxData( &msg[0], sizeof( msg ), 0 ); + } + + // Wait for the response (10s timeout) + DWORD val; + rc = mCtrlMsgComplete.Wait( 10000, val ); + if (rc != 0) + { + TRACE( "bad SendCtl() wait %d\n", rc ); + return rc; + } + + if (msgType == (int)eQMUXD_MSG_ALLOC_QMI_CLIENT_ID) + { + // Grab the client ID + mQMUXClientID = val; + + // Verify client ID is valid + if (mQMUXClientID == 0) + { + return 1; + } + } + + return 0; +} + +/*=========================================================================== +METHOD: + Disconnect (Public Method) + +DESCRIPTION: + Disconnect from the current port + +RETURN VALUE: + bool +===========================================================================*/ +bool cSocket::Disconnect() +{ + // Assume success + bool bRC = true; + + if (mCommandPipe[WRITING] != INVALID_HANDLE_VALUE) + { + if (mRxThreadID != 0) + { + // Notify the thread to exit + BYTE byte = EXIT_CMD; + write( mCommandPipe[WRITING], &byte, 1 ); + + // And wait for it + int nRC = pthread_join( mRxThreadID, 0 ); + if (nRC != 0) + { + TRACE( "failed to join thread %d\n", nRC ); + bRC = false; + } + + mRxThreadID = 0; + } + + close( mCommandPipe[WRITING] ); + close( mCommandPipe[READING] ); + mCommandPipe[READING] = INVALID_HANDLE_VALUE; + mCommandPipe[WRITING] = INVALID_HANDLE_VALUE; + } + + if (mSocket != INVALID_HANDLE_VALUE) + { + close( mSocket ); + mSocket = INVALID_HANDLE_VALUE; + } + + // Double check + mpRxCallback = 0; + + mCtrlMsgComplete.Clear(); + mQMUXDClientID = 0; + mQMUXClientID = 0; + mQMUXServiceID = 0; + mQMUXDTxID = 0; + return bRC; +} + +/*=========================================================================== +METHOD: + CancelIO (Public Method) + +DESCRIPTION: + Cancel any in-progress I/O + +PARAMETERS: + +RETURN VALUE: + bool +===========================================================================*/ +bool cSocket::CancelIO() +{ + if (mSocket == INVALID_HANDLE_VALUE) + { + return false; + } + + bool bRxCancel = CancelRx(); + bool bTxCancel = CancelTx(); + + return (bRxCancel && bTxCancel); +} + +/*=========================================================================== +METHOD: + CancelRx (Public Method) + +DESCRIPTION: + Cancel any in-progress receive operation + +RETURN VALUE: + bool +===========================================================================*/ +bool cSocket::CancelRx() +{ + if (mSocket == INVALID_HANDLE_VALUE + || mCommandPipe[WRITING] == INVALID_HANDLE_VALUE + || mpRxCallback == 0 + || mRxThreadID == 0) + { + TRACE( "cannot cancel, thread not active\n" ); + mpRxCallback = 0; + return false; + } + + // Notify the thread to stop reading + BYTE byte = STOP_READ_CMD; + int nRC = write( mCommandPipe[WRITING], &byte, 1 ); + if (nRC != 1) + { + TRACE( "error %d canceling read\n", nRC ); + return false; + } + + // Remove the old callback + mpRxCallback = 0; + + return true; +} + +/*=========================================================================== +METHOD: + CancelTx (Public Method) + +DESCRIPTION: + Cancel any in-progress transmit operation + +RETURN VALUE: + bool +===========================================================================*/ +bool cSocket::CancelTx() +{ + if (mSocket == INVALID_HANDLE_VALUE) + { + return false; + } + + mbCancelWrite = true; + + return true; +} + +/*=========================================================================== +METHOD: + RxData (Public Method) + +DESCRIPTION: + Receive data + +PARAMETERS: + pBuf [ I ] - Buffer to contain received data + bufSz [ I ] - Amount of data to be received + pCallback [ I ] - Callback object to be exercised when the + operation completes + +RETURN VALUE: + bool +===========================================================================*/ +bool cSocket::RxData( + BYTE * pBuf, + ULONG bufSz, + cIOCallback * pCallback ) +{ + if (IsValid() == false || mpRxCallback != 0) + { + return false; + } + + if (pCallback == 0) + { + // Not interested in being notified, but we still need a value + // for this so that only one outstanding I/O operation is active + // at any given point in time + mpRxCallback = (cIOCallback * )1; + } + else + { + mpRxCallback = pCallback; + } + + mpBuffer = pBuf; + mBuffSz = bufSz; + + // Notify the thread to start reading + BYTE byte = START_READ_CMD; + int nRC = write( mCommandPipe[WRITING], &byte, 1 ); + if (nRC != 1) + { + TRACE( "error %d starting read\n", nRC ); + return false; + } + + return true; +} + +/*=========================================================================== +METHOD: + TxData (Public Method) + +DESCRIPTION: + Transmit data + +PARAMETERS: + pBuf [ I ] - Data to be transmitted + bufSz [ I ] - Amount of data to be transmitted + +RETURN VALUE: + bool +===========================================================================*/ +bool cSocket::TxData( + const BYTE * pBuf, + ULONG bufSz ) +{ + if (IsValid() == false) + { + return false; + } + +#ifdef DEBUG + ULONGLONG nStart = GetTickCount(); +#endif + + // Allow ourselves to be interupted + mbCancelWrite = false; + + // Format the header + int totalSz = sizeof( sQMUXDHeader ) + bufSz; + BYTE * pMsg = new BYTE[totalSz]; + if (pMsg == 0) + { + TRACE( "unable to allocate buffer\n" ); + return false; + } + memset( pMsg, 0, totalSz ); + + // The important QMUXD header values + sQMUXDHeader * pHdr = (sQMUXDHeader *)pMsg; + pHdr->mTotalSize = totalSz; + pHdr->mQMUXDClientID = mQMUXDClientID; + pHdr->mQMUXDMsgID = eQMUXD_MSG_WRITE_QMI_SDU; + pHdr->mQMUXDClientIDDuplicate = mQMUXDClientID; + + // mQMUXDTxID could go to INT_MAX, but rather than dealing with possible + // overflow in qmuxd or one of the lower layers, we'll stop early + mQMUXDTxID++; + if (mQMUXDTxID > 100000) + { + mQMUXDTxID = 1; + } + pHdr->mTxID = ++mQMUXDTxID; + + pHdr->mQMUXServiceID = mQMUXServiceID; + pHdr->mQMUXClientID = mQMUXClientID; + + // The data payload + memcpy( &pMsg[sizeof( sQMUXDHeader )], pBuf, bufSz ); + + // Send the message + int nRet = send( mSocket, pMsg, totalSz, 0 ); + delete [] pMsg; + if (nRet != totalSz) + { + TRACE( "cSocket::TxData() write returned %d instead of %d\n", + nRet, + totalSz ); + return false; + } + +#ifdef DEBUG + TRACE( "Write of %d bytes took %llu milliseconds\n", + totalSz, + GetTickCount() - nStart ); +#endif + + return true; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/Socket.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/Socket.h new file mode 100644 index 0000000..0c4e6be --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/Socket.h @@ -0,0 +1,163 @@ +/*=========================================================================== +FILE: + Socket.h + +DESCRIPTION: + Declaration of cSocket class + +PUBLIC CLASSES AND METHODS: + cSocket + This class wraps low level communication to qmuxd + +Copyright (c) 2013, 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 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 "Event.h" +#include "Connection.h" + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +/*=========================================================================*/ +// Enum eQMUXDMessageTypes +// Types to be passed into SendCtl() for cSocket +/*=========================================================================*/ +enum eQMUXDMessageTypes +{ + eQMUXD_MSG_WRITE_QMI_SDU = 0, + eQMUXD_MSG_ALLOC_QMI_CLIENT_ID = 1, + eQMUXD_MSG_RELEASE_QMI_CLIENT_ID = 2, +}; + +/*=========================================================================*/ +// Class cSocket +/*=========================================================================*/ +class cSocket : public cConnection +{ + public: + // Constructor + cSocket(); + + // Destructor + ~cSocket(); + + // Is this object valid? + bool IsValid(); + + // Connect to the specified port + bool Connect( LPCSTR pPort ); + + // Run an IOCTL on the open file handle + int SendCtl( + UINT ioctlReq, + void * pData ); + + // Disconnect from the current port + bool Disconnect(); + + // Configure the port with the passed in parameters + bool ConfigureSettings( termios * pSettings ); + + // Return the current port settings + bool GetSettings( termios * pSettings ); + + // Cancel any in-progress I/O + bool CancelIO(); + + // Cancel any in-progress receive operation + bool CancelRx(); + + // Cancel any in-progress transmit operation + bool CancelTx(); + + // Receive data + bool RxData( + BYTE * pBuf, + ULONG bufSz, + cIOCallback * pCallback ); + + // Transmit data + bool TxData( + const BYTE * pBuf, + ULONG bufSz ); + + // (Inline) Return current channel ID + int GetChannelID() const + { + return mChannelID; + }; + + // Are we currently connected to a port? + bool IsConnected() + { + return (mSocket != INVALID_HANDLE_VALUE); + }; + + protected: + + /* Handle to socket */ + int mSocket; + + // Cancel the write request? + bool mbCancelWrite; + + /* Buffer */ + BYTE * mpBuffer; + + /* Buffer size */ + ULONG mBuffSz; + + /* Pipe for comunication with thread */ + int mCommandPipe[2]; + + /* Thread ID of Rx Thread. */ + pthread_t mRxThreadID; + + /* Control message completion event */ + cEvent mCtrlMsgComplete; + + /* QMUXD client ID */ + int mQMUXDClientID; + + /* QMUX client and service IDs */ + int mQMUXClientID; + int mQMUXServiceID; + + /* SMD Channel ID. 0 = SMD_DATA_5 */ + int mChannelID; + + /* The SMD transaction ID */ + int mQMUXDTxID; + + // Rx thread is allowed complete access + friend void * RxSocketThread( void * pData ); +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/StdAfx.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/StdAfx.h new file mode 100644 index 0000000..39565be --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/StdAfx.h @@ -0,0 +1,199 @@ +/*=========================================================================== +FILE: + StdAfx.h + +DESCRIPTION: + Application Framework eXtenstions for Linux + +PUBLIC CLASSES AND FUNCTIONS: + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once +//--------------------------------------------------------------------------- +// Includes +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//--------------------------------------------------------------------------- +// Macro defination +//--------------------------------------------------------------------------- + +#define ASSERT( x ) assert( x ) + +#ifdef DEBUG + + #ifdef ANDROID + + #include + + // TRACE macro + #define TRACE( format, arg... ) \ + if (true) \ + { \ + __android_log_print( ANDROID_LOG_INFO, \ + "Gobi", "%s:%d: " format, \ + __FILE__, \ + __LINE__, \ + ##arg ); \ + } + + #else + + #define TRACE( format, arg... ) \ + printf( "%s:%d: " format, \ + __FILE__, \ + __LINE__, \ + ##arg ) + #endif + +#else + #define TRACE(...) +#endif + +//--------------------------------------------------------------------------- +// data type defination +//--------------------------------------------------------------------------- +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef CONST +#define CONST const +#endif + +typedef void VOID; +typedef unsigned long DWORD; +typedef int BOOL; +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef float FLOAT; +typedef long long LONGLONG; +typedef unsigned long long ULONGLONG; +typedef signed char INT8; +typedef double DOUBLE; + +typedef int INT; +typedef unsigned int UINT; +typedef unsigned int * PUINT; +typedef INT HANDLE; +typedef HANDLE HMODULE; + +typedef char CHAR; +typedef short SHORT; +typedef long LONG; + +typedef unsigned long ULONG; +typedef ULONG * PULONG; +typedef ULONG * ULONG_PTR; +typedef unsigned short USHORT; +typedef USHORT * PUSHORT; +typedef unsigned char UCHAR; +typedef UCHAR * PUCHAR; +typedef char * PSZ; + + +typedef CONST CHAR * LPCSTR; +typedef CHAR * LPSTR; + +typedef BYTE * PBYTE; +typedef BOOL * PBOOL; +typedef INT * PINT; +typedef UINT * LPINT; +typedef WORD * PWORD; +typedef PWORD LPWORD; +typedef LONG * LPLONG; +typedef DWORD * PDWORD; +typedef VOID * PVOID; +typedef PVOID LPVOID; +typedef const void * LPCVOID; + +typedef size_t SIZE_T; +typedef double DATE; + +// Error code +#define NO_ERROR 0L +#define ERROR_SUCCESS 0L +#define ERROR_NO_MORE_ITEMS 259L +#define ERROR_CRC 23L +#define ERROR_OUTOFMEMORY 14L +#define ERROR_CAN_NOT_COMPLETE 1003L +#define ERROR_REVISION_MISMATCH 1306L +#define ERROR_BAD_ARGUMENTS 160L +#define INVALID_SET_FILE_POINTER -1 +#define VALID_HANDLE_VALUE 0 +#define INVALID_HANDLE_VALUE -1 +#define INVALID_FILE_SZ -1 + +#define ERROR_GEN_FAILURE 31L +#define ERROR_FILE_NOT_FOUND 2L +#define ERROR_NOT_ENOUGH_MEMORY 8L +#define ERROR_INVALID_PARAMETER 87L +#define ERROR_BAD_FORMAT 11L + + +// Other Constant definitions +#define MAX_PATH 512 +#define INFINITE 0xffffffff + + +// SIOCIWFIRSTPRIV = 0x8BE0 + +// Device I/O control code for setting QMI service +#define QMI_GET_SERVICE_FILE_IOCTL 0x8BE0 + 1 + +// Device I/O control code for obtaining device VIDPID +#define QMI_GET_VIDPID_IOCTL 0x8BE0 + 2 + +// Device I/O control code for obtaining device MEID +#define QMI_GET_MEID_IOCTL 0x8BE0 + 3 + +// Define the directions for pipes +#define READING 0 +#define WRITING 1 diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Core/SyncQueue.h b/gobi-api/GobiAPI_2013-07-31-1347/Core/SyncQueue.h new file mode 100644 index 0000000..84dd0eb --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Core/SyncQueue.h @@ -0,0 +1,418 @@ +/*=========================================================================== +FILE: + SyncQueue.h + +DESCRIPTION: + Declaration/Implementation of cSyncQueue class + +PUBLIC CLASSES AND METHODS: + cSyncQueue + Synchronized shareable (across multiple threads) queue of + structures with event notifications + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include +#include "Event.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +/*=========================================================================*/ +// Class cSyncQueue +/*=========================================================================*/ +template class cSyncQueue +{ + public: + // (Inline) Constructor + cSyncQueue( + ULONG maxElements, + bool bSignalEvent = false ) + : mSignature( (ULONG)eSYNC_QUEUE_SIG ), + mSignalEvent(), + mbSignalEvent( bSignalEvent ), + mMaxElements( maxElements ), + mTotalElements( 0 ) + { + // Create sync CS + int nRet = pthread_mutex_init( &mSyncSection, NULL ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to init sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return; + } + }; + + // (Inline) Destructor + ~cSyncQueue() + { + if (IsValid() == false) + { + ASSERT( (PVOID)"Double deletion detected in ~cSyncQueue" == 0 ); + } + else + { + EmptyQueue(); + + mSignature = 0; + int nRet = pthread_mutex_destroy( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to destroy sync mutex." + " Error %d: %s\n", + nRet, + strerror( nRet ) ); + return; + } + } + + }; + + // (Inline) Add an element to the queue + bool AddElement( const tElementType & elem ) + { + // Assume failure + bool bRC = false; + if (IsValid() == false) + { + ASSERT( (PVOID)"Bad cSyncQueue object detected" == 0 ); + return bRC; + } + + int nRet = pthread_mutex_lock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to lock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + + // Are we out of space? + if ((ULONG)mElementDeque.size() >= mMaxElements) + { + // Yes, drop oldest element + mElementDeque.pop_front(); + } + + // Add new item to the queue + mElementDeque.push_back( elem ); + mTotalElements++; + + // Set event? + if (mbSignalEvent == true) + { + // Signal index of event + nRet = mSignalEvent.Set( mTotalElements - 1 ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to signal. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + } + + // Success! + bRC = true; + + nRet = pthread_mutex_unlock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to unlock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + + return bRC; + }; + + // (Inline) Add an element to the queue returning the index of + // the element + bool AddElement( + const tElementType & elem, + ULONG & idx ) + { + // Assume failure + bool bRC = false; + if (IsValid() == false) + { + ASSERT( (PVOID)"Bad cSyncQueue object detected" == 0 ); + return bRC; + } + + int nRet = pthread_mutex_lock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to lock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + + // Are we out of space? + if ((ULONG)mElementDeque.size() >= mMaxElements) + { + mElementDeque.pop_front(); + } + + // Add new item to the queue + mElementDeque.push_back( elem ); + idx = mTotalElements++; + + // Set event? + if (mbSignalEvent == true) + { + // Signal index of event + nRet = mSignalEvent.Set( mTotalElements - 1 ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to signal. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + } + + // Success! + bRC = true; + + nRet = pthread_mutex_unlock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to unlock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + + return bRC; + }; + + // (Inline) Return given element in the queue + bool GetElement( + ULONG idx, + tElementType & elem ) const + { + // Assume failure + bool bRC = false; + if (IsValid() == false) + { + ASSERT( (PVOID)"Bad cSyncQueue object detected" == 0 ); + return bRC; + } + + int nRet = pthread_mutex_lock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to lock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + + // Is this a current element index? + ULONG expiredIndices = mTotalElements - (ULONG)mElementDeque.size(); + if (idx >= expiredIndices) + { + // Yes, grab it from the deque + idx -= expiredIndices; + if (idx < (ULONG)mElementDeque.size()) + { + elem = mElementDeque[idx]; + bRC = true; + } + } + + nRet = pthread_mutex_unlock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to unlock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + + return bRC; + }; + + // (Inline) Empty element queue + bool EmptyQueue() + { + // Assume failure + bool bRC = false; + if (IsValid() == false) + { + ASSERT( (PVOID)"Bad cSyncQueue object detected" == 0 ); + return bRC; + } + + int nRet = pthread_mutex_lock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to lock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + + + mElementDeque.clear(); + mTotalElements = 0; + + nRet = pthread_mutex_unlock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to unlock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return false; + } + + bRC = true; + return bRC; + }; + + // (Inline) Return the number of queued elements + ULONG GetQueueCount() const + { + ULONG elems = 0; + if (IsValid() == false) + { + ASSERT( (PVOID)"Bad cSyncQueue object detected" == 0 ); + return elems; + } + + int nRet = pthread_mutex_lock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to lock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return 0; + } + + elems = (ULONG)mElementDeque.size(); + + nRet = pthread_mutex_unlock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to unlock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return 0; + } + + return elems; + }; + + // (Inline) Return the total number of elements added to queue + ULONG GetTotalCount() const + { + ULONG elems = 0; + if (IsValid() == false) + { + ASSERT( (PVOID)"Bad cSyncQueue object detected" == 0 ); + return elems; + } + + int nRet = pthread_mutex_lock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to lock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return 0; + } + + elems = mTotalElements; + + nRet = pthread_mutex_unlock( &mSyncSection ); + if (nRet != 0) + { + TRACE( "SyncQueue: Unable to unlock sync mutex. Error %d: %s\n", + nRet, + strerror( nRet ) ); + return 0; + } + + return elems; + }; + + // (Inline) Return the signal event + cEvent & GetSignalEvent() const + { + return mSignalEvent; + }; + + // (Inline) Is this sync queue valid? + bool IsValid() const + { + return (mSignature == (ULONG)eSYNC_QUEUE_SIG); + }; + + protected: + // Object signature + enum eClassConstants + { + eSYNC_QUEUE_SIG = 0x1799A2BC + }; + + /* Object signature */ + ULONG mSignature; + + /* Multithreaded mutex type */ + mutable pthread_mutex_t mSyncSection; + + /* Signal event, set everytime an element is added (if configured) */ + mutable cEvent mSignalEvent; + + /* Use above signal event? */ + bool mbSignalEvent; + + /* Maximum number of elements to add to the deque */ + ULONG mMaxElements; + + /* Total number of elements added to the deque */ + ULONG mTotalElements; + + /* Element queue */ + std::deque mElementDeque; +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000Translation.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000Translation.cpp new file mode 100644 index 0000000..325ec5f --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000Translation.cpp @@ -0,0 +1,100 @@ +/*=========================================================================== +FILE: + Gobi3000Translation.cpp + +DESCRIPTION: + QUALCOMM Translation for Gobi 3000 + +Copyright (c) 2013, 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 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 "Gobi3000Translation.h" + +/*=========================================================================*/ +// Free Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + GetTLV + +DESCRIPTION: + Return the starting location and size of TLV buffer. + + NOTE: does not include the TLV header + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + type [ I ] - Type ID + pOutLen [ O ] - Length of the output buffer + ppOut [ O ] - Pointer to output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG GetTLV( + ULONG inLen, + const BYTE * pIn, + BYTE typeID, + ULONG * pOutLen, + const BYTE ** ppOut ) +{ + if (pIn == 0 || pOutLen == 0 || ppOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + for (ULONG offset = 0; + offset + sizeof( sQMIRawContentHeader ) <= inLen; + offset += sizeof( sQMIRawContentHeader )) + { + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pIn + offset); + + // Is it big enough to contain this TLV? + if (offset + sizeof( sQMIRawContentHeader ) + pHeader->mLength > inLen) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + if (pHeader->mTypeID == typeID) + { + *pOutLen = pHeader->mLength; + *ppOut = pIn + offset + sizeof( sQMIRawContentHeader ); + + return eGOBI_ERR_NONE; + } + + offset += pHeader->mLength; + } + + // TLV not found + return eGOBI_ERR_INVALID_RSP; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000Translation.h b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000Translation.h new file mode 100644 index 0000000..46bd390 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000Translation.h @@ -0,0 +1,1027 @@ +/*=========================================================================== +FILE: + Gobi3000Translation.h + +DESCRIPTION: + QUALCOMM Tanslation for Gobi 3000 + +Copyright (c) 2013, 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 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. +==========================================================================*/ + +/*=========================================================================*/ +// Pragmas +/*=========================================================================*/ +#pragma once + +#ifndef GOBI_TYPEDEFS +#define GOBI_TYPEDEFS + +// Type Definitions +typedef unsigned long ULONG; +typedef unsigned long * ULONG_PTR; +typedef unsigned long long ULONGLONG; +typedef signed char INT8; +typedef unsigned char UINT8; +typedef signed short INT16; +typedef unsigned short UINT16; +typedef signed int INT32; +typedef unsigned int UINT32; +typedef unsigned char BYTE; +typedef char CHAR; +typedef unsigned short WORD; +typedef unsigned short USHORT; +typedef const char * LPCSTR; + +#ifdef WINDOWS + typedef signed __int64 INT64; + typedef unsigned __int64 UINT64; +#else + typedef signed long long INT64; + typedef unsigned long long UINT64; +#endif + +#endif + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include +#include +#include +#include "GobiConnectionMgmtAPIStructs.h" + +//--------------------------------------------------------------------------- +// Prototypes +//--------------------------------------------------------------------------- + +// Get a TLV +ULONG GetTLV( + ULONG inLen, + const BYTE * pIn, + BYTE typeID, + ULONG * pOutLen, + const BYTE ** ppOut ); + +// WDS + +ULONG ParseGetSessionState( + ULONG inLen, + const BYTE * pIn, + ULONG * pState ); + +ULONG ParseGetSessionDuration( + ULONG inLen, + const BYTE * pIn, + ULONGLONG * pDuration ); + +ULONG ParseGetDormancyState( + ULONG inLen, + const BYTE * pIn, + ULONG * pState ); + +ULONG ParseGetEnhancedAutoconnect( + ULONG inLen, + const BYTE * pIn, + ULONG * pSetting, + ULONG * pRoamSetting ); + +ULONG PackSetEnhancedAutoconnect( + ULONG * pOutLen, + BYTE * pOut, + ULONG setting, + ULONG * pRoamSetting ); + +ULONG PackSetDefaultProfile( + ULONG * pOutLen, + BYTE * pOut, + ULONG profileType, + ULONG * pPDPType, + ULONG * pIPAddress, + ULONG * pPrimaryDNS, + ULONG * pSecondaryDNS, + ULONG * pAuthentication, + CHAR * pName, + CHAR * pAPNName, + CHAR * pUsername, + CHAR * pPassword ); + +ULONG PackGetDefaultProfile( + ULONG * pOutLen, + BYTE * pOut, + ULONG profileType ); + +ULONG ParseGetDefaultProfile( + ULONG inLen, + const BYTE * pIn, + ULONG * pPDPType, + ULONG * pIPAddress, + ULONG * pPrimaryDNS, + ULONG * pSecondaryDNS, + ULONG * pAuthentication, + BYTE nameSize, + CHAR * pName, + BYTE apnSize, + CHAR * pAPNName, + BYTE userSize, + CHAR * pUsername ); + +ULONG PackStartDataSession( + ULONG * pOutLen, + BYTE * pOut, + ULONG * pTechnology, + ULONG * pPrimaryDNS, + ULONG * pSecondaryDNS, + ULONG * pPrimaryNBNS, + ULONG * pSecondaryNBNS, + CHAR * pAPNName, + ULONG * pIPAddress, + ULONG * pAuthentication, + CHAR * pUsername, + CHAR * pPassword ); + +ULONG ParseStartDataSession( + ULONG inLen, + const BYTE * pIn, + ULONG * pSessionId, + ULONG * pFailureReason ); + +ULONG PackStopDataSession( + ULONG * pOutLen, + BYTE * pOut, + ULONG sessionId ); + +ULONG PackGetIPAddress( + ULONG * pOutLen, + BYTE * pOut ); + +ULONG ParseGetIPAddress( + ULONG inLen, + const BYTE * pIn, + ULONG * pIPAddress ); + +ULONG ParseGetConnectionRate( + ULONG inLen, + const BYTE * pIn, + ULONG * pCurrentChannelTXRate, + ULONG * pCurrentChannelRXRate, + ULONG * pMaxChannelTXRate, + ULONG * pMaxChannelRXRate ); + +ULONG PackGetPacketStatus( + ULONG * pOutLen, + BYTE * pOut ); + +ULONG ParseGetPacketStatus( + ULONG inLen, + const BYTE * pIn, + ULONG * pTXPacketSuccesses, + ULONG * pRXPacketSuccesses, + ULONG * pTXPacketErrors, + ULONG * pRXPacketErrors, + ULONG * pTXPacketOverflows, + ULONG * pRXPacketOverflows ); + +ULONG PackGetByteTotals( + ULONG * pOutLen, + BYTE * pOut ); + +ULONG ParseGetByteTotals( + ULONG inLen, + const BYTE * pIn, + ULONGLONG * pTXTotalBytes, + ULONGLONG * pRXTotalBytes ); + +ULONG PackSetMobileIP( + ULONG * pOutLen, + BYTE * pOut, + ULONG mode ); + +ULONG ParseGetMobileIP( + ULONG inLen, + const BYTE * pIn, + ULONG * pMode ); + +ULONG PackSetActiveMobileIPProfile( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC, + BYTE index ); + +ULONG ParseGetActiveMobileIPProfile( + ULONG inLen, + const BYTE * pIn, + BYTE * pIndex ); + +ULONG PackSetMobileIPProfile( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC, + BYTE index, + BYTE * pEnabled, + ULONG * pAddress, + ULONG * pPrimaryHA, + ULONG * pSecondaryHA, + BYTE * pRevTunneling, + CHAR * pNAI, + ULONG * pHASPI, + ULONG * pAAASPI, + CHAR * pMNHA, + CHAR * pMNAAA ); + +ULONG PackGetMobileIPProfile( + ULONG * pOutLen, + BYTE * pOut, + BYTE index ); + +ULONG ParseGetMobileIPProfile( + ULONG inLen, + const BYTE * pIn, + BYTE * pEnabled, + ULONG * pAddress, + ULONG * pPrimaryHA, + ULONG * pSecondaryHA, + BYTE * pRevTunneling, + BYTE naiSize, + CHAR * pNAI, + ULONG * pHASPI, + ULONG * pAAASPI, + ULONG * pHAState, + ULONG * pAAAState ); + +ULONG PackSetMobileIPParameters( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC, + ULONG * pMode, + BYTE * pRetryLimit, + BYTE * pRetryInterval, + BYTE * pReRegPeriod, + BYTE * pReRegTraffic, + BYTE * pHAAuthenticator, + BYTE * pHA2002bis ); + +ULONG ParseGetMobileIPParameters( + ULONG inLen, + const BYTE * pIn, + ULONG * pMode, + BYTE * pRetryLimit, + BYTE * pRetryInterval, + BYTE * pReRegPeriod, + BYTE * pReRegTraffic, + BYTE * pHAAuthenticator, + BYTE * pHA2002bis ); + +ULONG ParseGetLastMobileIPError( + ULONG inLen, + const BYTE * pIn, + ULONG * pError ); + +ULONG PackSetDNSSettings( + ULONG * pOutLen, + BYTE * pOut, + ULONG * pPrimaryDNS, + ULONG * pSecondaryDNS ); + +ULONG ParseGetDNSSettings( + ULONG inLen, + const BYTE * pIn, + ULONG * pPrimaryDNS, + ULONG * pSecondaryDNS ); + +ULONG ParseGetDataBearerTechnology( + ULONG inLen, + const BYTE * pIn, + ULONG * pDataBearer ); + +// NAS + +ULONG ParseGetANAAAAuthenticationStatus( + ULONG inLen, + const BYTE * pIn, + ULONG * pStatus ); + +ULONG ParseGetSignalStrength( + ULONG inLen, + const BYTE * pIn, + INT8 * pSignalStrength, + ULONG * pRadioInterface ); + +ULONG ParseGetSignalStrengths( + ULONG inLen, + const BYTE * pIn, + ULONG * pArraySizes, + INT8 * pSignalStrengths, + ULONG * pRadioInterfaces ); + +ULONG ParseGetRFInfo( + ULONG inLen, + const BYTE * pIn, + BYTE * pInstanceSize, + BYTE * pInstances ); + +ULONG ParsePerformNetworkScan( + ULONG inLen, + const BYTE * pIn, + BYTE * pInstanceSize, + BYTE * pInstances ); + +ULONG ParsePerformNetworkRATScan( + ULONG inLen, + const BYTE * pIn, + BYTE * pInstanceSize, + BYTE * pInstances, + BYTE * pRATSize, + BYTE * pRATInstances ); + +ULONG PackInitiateNetworkRegistration( + ULONG * pOutLen, + BYTE * pOut, + ULONG regType, + WORD mcc, + WORD mnc, + ULONG rat ); + +ULONG PackInitiateDomainAttach( + ULONG * pOutLen, + BYTE * pOut, + ULONG action ); + +ULONG ParseGetServingNetwork( + ULONG inLen, + const BYTE * pIn, + ULONG * pRegistrationState, + ULONG * pCSDomain, + ULONG * pPSDomain, + ULONG * pRAN, + BYTE * pRadioIfacesSize, + BYTE * pRadioIfaces, + ULONG * pRoaming, + WORD * pMCC, + WORD * pMNC, + BYTE nameSize, + CHAR * pName ); + +ULONG ParseGetServingNetworkCapabilities( + ULONG inLen, + const BYTE * pIn, + BYTE * pDataCapsSize, + BYTE * pDataCaps ); + +ULONG ParseGetHomeNetwork( + ULONG inLen, + const BYTE * pIn, + WORD * pMCC, + WORD * pMNC, + BYTE nameSize, + CHAR * pName, + WORD * pSID, + WORD * pNID ); + +ULONG PackSetNetworkPreference( + ULONG * pOutLen, + BYTE * pOut, + ULONG technologyPref, + ULONG duration ); + +ULONG ParseGetNetworkPreference( + ULONG inLen, + const BYTE * pIn, + ULONG * pTechnologyPref, + ULONG * pDuration, + ULONG * pPersistentTechnologyPref ); + +ULONG PackSetCDMANetworkParameters( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC, + BYTE * pForceRev0, + BYTE * pCustomSCP, + ULONG * pProtocol, + ULONG * pBroadcast, + ULONG * pApplication, + ULONG * pRoaming ); + +ULONG ParseGetCDMANetworkParameters( + ULONG inLen, + const BYTE * pIn, + BYTE * pSCI, + BYTE * pSCM, + BYTE * pRegHomeSID, + BYTE * pRegForeignSID, + BYTE * pRegForeignNID, + BYTE * pForceRev0, + BYTE * pCustomSCP, + ULONG * pProtocol, + ULONG * pBroadcast, + ULONG * pApplication, + ULONG * pRoaming ); + +ULONG ParseGetACCOLC( + ULONG inLen, + const BYTE * pIn, + BYTE * pACCOLC ); + +ULONG PackSetACCOLC( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC, + BYTE accolc ); + +ULONG ParseGetPLMNMode( + ULONG inLen, + const BYTE * pIn, + ULONG * pMode ); + +ULONG PackGetPLMNName( + ULONG * pOutLen, + BYTE * pOut, + USHORT mcc, + USHORT mnc ); + +ULONG ParseGetPLMNName( + ULONG inLen, + const BYTE * pIn, + ULONG * pNamesSize, + BYTE * pNames ); + +// DMS + +ULONG ParseGetDeviceCapabilities( + ULONG inLen, + const BYTE * pIn, + ULONG * pMaxTXChannelRate, + ULONG * pMaxRXChannelRate, + ULONG * pDataServiceCapability, + ULONG * pSimCapability, + ULONG * pRadioIfacesSize, + BYTE * pRadioIfaces ); + +ULONG ParseGetManufacturer( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ); + +ULONG ParseGetModelID( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ); + +ULONG ParseGetFirmwareRevision( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ); + +ULONG ParseGetFirmwareRevisions( + ULONG inLen, + const BYTE * pIn, + BYTE amssSize, + CHAR * pAMSSString, + BYTE bootSize, + CHAR * pBootString, + BYTE priSize, + CHAR * pPRIString ); + +ULONG ParseGetVoiceNumber( + ULONG inLen, + const BYTE * pIn, + BYTE voiceNumberSize, + CHAR * pVoiceNumber, + BYTE minSize, + CHAR * pMIN ); + +ULONG ParseGetIMSI( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ); + +ULONG ParseGetSerialNumbers( + ULONG inLen, + const BYTE * pIn, + BYTE esnSize, + CHAR * pESNString, + BYTE imeiSize, + CHAR * pIMEIString, + BYTE meidSize, + CHAR * pMEIDString ); + +ULONG PackSetLock( + ULONG * pOutLen, + BYTE * pOut, + ULONG state, + CHAR * pCurrentPIN ); + +ULONG ParseQueryLock( + ULONG inLen, + const BYTE * pIn, + ULONG * pState ); + +ULONG PackChangeLockPIN( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pCurrentPIN, + CHAR * pDesiredPIN ); + +ULONG ParseGetHardwareRevision( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ); + +ULONG ParseGetPRLVersion( + ULONG inLen, + const BYTE * pIn, + WORD * pPRLVersion ); + +ULONG ParseGetERIFile( + ULONG inLen, + const BYTE * pIn, + ULONG * pFileSize, + BYTE * pFile ); + +ULONG PackActivateAutomatic( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pActivationCode ); + +ULONG PackResetToFactoryDefaults( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC ); + +ULONG ParseGetActivationState( + ULONG inLen, + const BYTE * pIn, + ULONG * pActivationState ); + +ULONG PackSetPower( + ULONG * pOutLen, + BYTE * pOut, + ULONG powerMode ); + +ULONG ParseGetPower( + ULONG inLen, + const BYTE * pIn, + ULONG * pPowerMode ); + +ULONG ParseGetOfflineReason( + ULONG inLen, + const BYTE * pIn, + ULONG * pReasonMask, + ULONG * pbPlatform ); + +ULONG ParseGetNetworkTime( + ULONG inLen, + const BYTE * pIn, + ULONGLONG * pTimeCount, + ULONG * pTimeSource ); + +ULONG PackValidateSPC( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC ); + +// SMS + +ULONG PackDeleteSMS( + ULONG * pOutLen, + BYTE * pOut, + ULONG storageType, + ULONG * pMessageIndex, + ULONG * pMessageTag ); + +ULONG PackGetSMSList( + ULONG * pOutLen, + BYTE * pOut, + ULONG storageType, + ULONG * pRequestedTag ); + +ULONG ParseGetSMSList( + ULONG inLen, + const BYTE * pIn, + ULONG * pMessageListSize, + BYTE * pMessageList ); + +ULONG PackGetSMS( + ULONG * pOutLen, + BYTE * pOut, + ULONG storageType, + ULONG messageIndex ); + +ULONG ParseGetSMS( + ULONG inLen, + const BYTE * pIn, + ULONG * pMessageTag, + ULONG * pMessageFormat, + ULONG * pMessageSize, + BYTE * pMessage ); + +ULONG PackModifySMSStatus( + ULONG * pOutLen, + BYTE * pOut, + ULONG storageType, + ULONG messageIndex, + ULONG messageTag ); + +ULONG PackSaveSMS( + ULONG * pOutLen, + BYTE * pOut, + ULONG storageType, + ULONG messageFormat, + ULONG messageSize, + BYTE * pMessage ); + +ULONG ParseSaveSMS( + ULONG inLen, + const BYTE * pIn, + ULONG * pMessageIndex ); + +ULONG PackSendSMS( + ULONG * pOutLen, + BYTE * pOut, + ULONG messageFormat, + ULONG messageSize, + BYTE * pMessage ); + +ULONG ParseSendSMS( + ULONG inLen, + const BYTE * pIn, + ULONG * pMessageFailureCode ); + +ULONG ParseGetSMSCAddress( + ULONG inLen, + const BYTE * pIn, + BYTE addressSize, + CHAR * pSMSCAddress, + BYTE typeSize, + CHAR * pSMSCType ); + +ULONG PackSetSMSCAddress( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSMSCAddress, + CHAR * pSMSCType ); + +ULONG ParseGetSMSRoutes( + ULONG inLen, + const BYTE * pIn, + BYTE * pRouteSize, + BYTE * pRoutes ); + +ULONG PackSetSMSRoutes( + ULONG * pOutLen, + BYTE * pOut, + BYTE * pRouteSize, + BYTE * pRoutes ); + +// DMS UIM + +ULONG PackUIMUnblockControlKey( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + CHAR * pValue ); + +ULONG ParseUIMUnblockControlKey( + ULONG inLen, + const BYTE * pIn, + ULONG * pUnblockRetriesLeft ); + +ULONG PackUIMSetControlKeyProtection( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + ULONG status, + CHAR * pValue ); + +ULONG ParseUIMSetControlKeyProtection( + ULONG inLen, + const BYTE * pIn, + ULONG * pVerifyRetriesLeft ); + +ULONG PackUIMGetControlKeyBlockingStatus( + ULONG * pOutLen, + BYTE * pOut, + ULONG id ); + +ULONG ParseUIMGetControlKeyBlockingStatus( + ULONG inLen, + const BYTE * pIn, + ULONG * pStatus, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft, + ULONG * pbBlocking ); + +ULONG ParseUIMGetControlKeyStatus( + ULONG inLen, + const BYTE * pIn, + ULONG * pStatus, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ); + +ULONG PackUIMGetControlKeyStatus( + ULONG * pOutLen, + BYTE * pOut, + ULONG id ); + +ULONG ParseUIMGetICCID( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ); + +ULONG ParseUIMGetPINStatus( + ULONG inLen, + const BYTE * pIn, + ULONG id, + ULONG * pStatus, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ); + +ULONG PackUIMChangePIN( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + CHAR * pOldValue, + CHAR * pNewValue ); + +ULONG ParseUIMChangePIN( + ULONG inLen, + const BYTE * pIn, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ); + +ULONG PackUIMUnblockPIN( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + CHAR * pOldValue, + CHAR * pNewValue ); + +ULONG ParseUIMUnblockPIN( + ULONG inLen, + const BYTE * pIn, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ); + +ULONG PackUIMVerifyPIN( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + CHAR * pValue ); + +ULONG ParseUIMVerifyPIN( + ULONG inLen, + const BYTE * pIn, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ); + +ULONG PackUIMSetPINProtection( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + ULONG bEnable, + CHAR * pValue ); + +ULONG ParseUIMSetPINProtection( + ULONG inLen, + const BYTE * pIn, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ); + +// PDS + +ULONG ParseGetPDSState( + ULONG inLen, + const BYTE * pIn, + ULONG * pEnabled, + ULONG * pTracking ); + +ULONG PackSetPDSState( + ULONG * pOutLen, + BYTE * pOut, + ULONG enable ); + +ULONG PackPDSInjectTimeReference( + ULONG * pOutLen, + BYTE * pOut, + ULONGLONG systemTime, + USHORT systemDiscontinuities ); + +ULONG ParseGetPDSDefaults( + ULONG inLen, + const BYTE * pIn, + ULONG * pOperation, + BYTE * pTimeout, + ULONG * pInterval, + ULONG * pAccuracy ); + +ULONG PackSetPDSDefaults( + ULONG * pOutLen, + BYTE * pOut, + ULONG operation, + BYTE timeout, + ULONG interval, + ULONG accuracy ); + +ULONG ParseGetXTRAAutomaticDownload( + ULONG inLen, + const BYTE * pIn, + ULONG * pbEnabled, + USHORT * pInterval ); + +ULONG PackSetXTRAAutomaticDownload( + ULONG * pOutLen, + BYTE * pOut, + ULONG bEnabled, + USHORT interval ); + +ULONG ParseGetXTRANetwork( + ULONG inLen, + const BYTE * pIn, + ULONG * pPreference ); + +ULONG PackSetXTRANetwork( + ULONG * pOutLen, + BYTE * pOut, + ULONG preference ); + +ULONG ParseGetXTRAValidity( + ULONG inLen, + const BYTE * pIn, + USHORT * pGPSWeek, + USHORT * pGPSWeekOffset, + USHORT * pDuration ); + +ULONG ParseGetXTRADataState( + ULONG inLen, + const BYTE * pIn, + ULONG * pState ); + +ULONG PackSetXTRADataState( + ULONG * pOutLen, + BYTE * pOut, + ULONG state ); + +ULONG ParseGetXTRATimeState( + ULONG inLen, + const BYTE * pIn, + ULONG * pState ); + +ULONG PackSetXTRATimeState( + ULONG * pOutLen, + BYTE * pOut, + ULONG state ); + +ULONG ParseGetAGPSConfig( + ULONG inLen, + const BYTE * pIn, + ULONG * pServerAddress, + ULONG * pServerPort ); + +ULONG PackSetAGPSConfig( + ULONG * pOutLen, + BYTE * pOut, + ULONG serverAddress, + ULONG serverPort ); + +ULONG ParseGetServiceAutomaticTracking( + ULONG inLen, + const BYTE * pIn, + ULONG * pbAuto ); + +ULONG PackSetServiceAutomaticTracking( + ULONG * pOutLen, + BYTE * pOut, + ULONG bAuto ); + +ULONG ParseGetPortAutomaticTracking( + ULONG inLen, + const BYTE * pIn, + ULONG * pbAuto ); + +ULONG PackSetPortAutomaticTracking( + ULONG * pOutLen, + BYTE * pOut, + ULONG bAuto ); + +ULONG PackResetPDSData( + ULONG * pOutLen, + BYTE * pOut, + ULONG * pGPSDataMask, + ULONG * pCellDataMask ); + +// CAT + +ULONG PackCATSendTerminalResponse( + ULONG * pOutLen, + BYTE * pOut, + ULONG refID, + ULONG dataLen, + BYTE * pData ); + +ULONG PackCATSendEnvelopeCommand( + ULONG * pOutLen, + BYTE * pOut, + ULONG cmdID, + ULONG dataLen, + BYTE * pData ); + +// RMS + +ULONG ParseGetSMSWake( + ULONG inLen, + const BYTE * pIn, + ULONG * pbEnabled, + ULONG * pWakeMask ); + +ULONG PackSetSMSWake( + ULONG * pOutLen, + BYTE * pOut, + ULONG bEnable, + ULONG wakeMask ); + +// OMADM + +ULONG PackOMADMStartSession( + ULONG * pOutLen, + BYTE * pOut, + ULONG sessionType ); + +ULONG ParseOMADMGetSessionInfo( + ULONG inLen, + const BYTE * pIn, + ULONG * pSessionState, + ULONG * pSessionType, + ULONG * pFailureReason, + BYTE * pRetryCount, + WORD * pSessionPause, + WORD * pTimeRemaining ); + +ULONG ParseOMADMGetPendingNIA( + ULONG inLen, + const BYTE * pIn, + ULONG * pSessionType, + USHORT * pSessionID ); + +ULONG PackOMADMSendSelection( + ULONG * pOutLen, + BYTE * pOut, + ULONG selection, + USHORT sessionID ); + +ULONG ParseOMADMGetFeatureSettings( + ULONG inLen, + const BYTE * pIn, + ULONG * pbProvisioning, + ULONG * pbPRLUpdate ); + +ULONG PackOMADMSetProvisioningFeature( + ULONG * pOutLen, + BYTE * pOut, + ULONG bProvisioning ); + +ULONG PackOMADMSetPRLUpdateFeature( + ULONG * pOutLen, + BYTE * pOut, + ULONG bPRLUpdate ); + +// Voice + +ULONG PackOriginateUSSD( + ULONG * pOutLen, + BYTE * pOut, + BYTE * pInfo ); + +ULONG PackAnswerUSSD( + ULONG * pOutLen, + BYTE * pOut, + BYTE * pInfo ); + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationCAT.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationCAT.cpp new file mode 100644 index 0000000..e20e19d --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationCAT.cpp @@ -0,0 +1,176 @@ +/*=========================================================================== +FILE: + Gobi3000TranslationCAT.cpp + +DESCRIPTION: + QUALCOMM Translation for Gobi 3000 (Card Application Toolkit Service) + +Copyright (c) 2013, 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 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 "Gobi3000Translation.h" + +/*=========================================================================== +METHOD: + PackCATSendTerminalResponse + +DESCRIPTION: + This function sends the terminal response to the device + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + refID [ I ] - UIM reference ID (from CAT event) + dataLen [ I ] - Terminal response data length + pData [ I ] - Terminal response data + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackCATSendTerminalResponse( + ULONG * pOutLen, + BYTE * pOut, + ULONG refID, + ULONG dataLen, + BYTE * pData ) +{ + // Validate arguments + if (pOut == 0 || pData == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + + // Check size + WORD tlvx01Sz = sizeof( sCATSendTerminalResponseRequest_TerminalResponseType ) + + (WORD)dataLen; + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sCATSendTerminalResponseRequest_TerminalResponseType * pTLVx01; + pTLVx01 = (sCATSendTerminalResponseRequest_TerminalResponseType*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the value + pTLVx01->mReferenceID = refID; + pTLVx01->mTerminalResponseLength = (UINT16)dataLen; + + offset += sizeof( sCATSendTerminalResponseRequest_TerminalResponseType ); + + if (dataLen > 0) + { + memcpy( pOut + offset, pData, dataLen ); + offset += dataLen; + } + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackCATSendEnvelopeCommand + +DESCRIPTION: + This function sends the envelope command to the device + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + cmdID [ I ] - Envelope command ID + dataLen [ I ] - Envelope command data length + pData [ I ] - Envelope command data + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackCATSendEnvelopeCommand( + ULONG * pOutLen, + BYTE * pOut, + ULONG cmdID, + ULONG dataLen, + BYTE * pData ) +{ + // Validate arguments + if (pOut == 0 || dataLen == 0 || pData == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + + // Check size + WORD tlvx01Sz = sizeof( sCATEnvelopeCommandRequest_EnvelopeCommand ) + + (WORD)dataLen; + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sCATEnvelopeCommandRequest_EnvelopeCommand * pTLVx01; + pTLVx01 = (sCATEnvelopeCommandRequest_EnvelopeCommand*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the value + pTLVx01->mEnvelopeCommandType = (eQMICATEnvelopeCommandType)cmdID; + pTLVx01->mEnvelopeLength = (UINT16)dataLen; + + offset += sizeof( sCATEnvelopeCommandRequest_EnvelopeCommand ); + + if (dataLen > 0) + { + memcpy( pOut + offset, pData, dataLen ); + offset += dataLen; + } + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationDMS.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationDMS.cpp new file mode 100644 index 0000000..a41d9cd --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationDMS.cpp @@ -0,0 +1,1482 @@ +/*=========================================================================== +FILE: + Gobi3000TranslationDMS.cpp + +DESCRIPTION: + QUALCOMM Translation for Gobi 3000 (DMS Service) + +Copyright (c) 2013, 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 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 "Gobi3000Translation.h" + +/*=========================================================================== +METHOD: + ParseGetDeviceCapabilities + +DESCRIPTION: + This function gets device capabilities + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pMaxTXChannelRate [ O ] - Maximum transmission rate (bps) + pMaxRXChannelRate [ O ] - Maximum reception rate (bps) + pDataServiceCapability [ O ] - CS/PS data service capability + pSimCapability [ O ] - Device SIM support + pRadioIfacesSize [I/O] - Upon input the maximum number of elements + that the radio interfaces can contain. + Upon successful output the actual number + of elements in the radio interface array + pRadioIfaces [ O ] - The radio interface array + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetDeviceCapabilities( + ULONG inLen, + const BYTE * pIn, + ULONG * pMaxTXChannelRate, + ULONG * pMaxRXChannelRate, + ULONG * pDataServiceCapability, + ULONG * pSimCapability, + ULONG * pRadioIfacesSize, + BYTE * pRadioIfaces ) +{ + // Validate arguments + if (pIn == 0 + || pMaxTXChannelRate == 0 + || pMaxRXChannelRate == 0 + || pDataServiceCapability == 0 + || pSimCapability == 0 + || pRadioIfacesSize == 0 + || *pRadioIfacesSize == 0 + || pRadioIfaces == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + ULONG maxRadioIfaces = (ULONG)*pRadioIfacesSize; + + // Assume failure + *pRadioIfacesSize = 0; + + const sDMSGetDeviceCapabilitiesResponse_Capabilities * pTLVx01; + ULONG structSzx01 = sizeof( sDMSGetDeviceCapabilitiesResponse_Capabilities ); + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < structSzx01) + { + return eGOBI_ERR_BUFFER_SZ; + } + + // Populate the variables + *pMaxTXChannelRate = pTLVx01->mMaxTXRatebps; + *pMaxRXChannelRate = pTLVx01->mMaxRXRatebps; + *pDataServiceCapability = pTLVx01->mDataServiceCapability; + + // SIM capability should be treated as a boolean, even though it's not + *pSimCapability = (pTLVx01->mSIMSupported == 0 ? 0 : 1); + + ULONG activeRadioIfaces = pTLVx01->mRadioInterfaceCount; + if (activeRadioIfaces > maxRadioIfaces) + { + activeRadioIfaces = maxRadioIfaces; + } + + const eQMIDMSRadioInterfaces * pInRadioInterfaces; + + // Verify there is room for the array in the TLV + if (outLenx01 < structSzx01 + + sizeof( eQMIDMSRadioInterfaces ) * activeRadioIfaces) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Align to the first array element + pInRadioInterfaces = (const eQMIDMSRadioInterfaces *) + ((const BYTE *)pTLVx01 + structSzx01); + + ULONG * pOutRadioIfaces = (ULONG *)pRadioIfaces; + for (ULONG r = 0; r < activeRadioIfaces; r++) + { + *pOutRadioIfaces = *pInRadioInterfaces; + pOutRadioIfaces++; + pInRadioInterfaces++; + } + + *pRadioIfacesSize = activeRadioIfaces; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetManufacturer + +DESCRIPTION: + This function returns the device manufacturer name + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + stringSize [ I ] - The maximum number of characters (including NULL + terminator) that the string array can contain + pString [ O ] - NULL terminated string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetManufacturer( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ) +{ + // Validate arguments + if (pIn == 0 || stringSize == 0 || pString == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + *pString = 0; + + // Find the manufacturer + // sDMSGetDeviceManfacturerResponse_Manfacturer only contains this + const CHAR * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Space to perform the copy? + if (stringSize < outLenx01 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pString, pTLVx01, outLenx01 ); + pString[outLenx01] = 0; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetModelID + +DESCRIPTION: + This function returns the device model ID + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + stringSize [ I ] - The maximum number of characters (including NULL + terminator) that the string array can contain + pString [ O ] - NULL terminated string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetModelID( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ) +{ + // Validate arguments + if (pIn == 0 || stringSize == 0 || pString == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + *pString = 0; + + // Find the model + // sDMSGetDeviceModelResponse_Model only contains the model + const CHAR * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Space to perform the copy? + if (stringSize < outLenx01 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pString, pTLVx01, outLenx01 ); + pString[outLenx01] = 0; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetFirmwareRevision + +DESCRIPTION: + This function returns the device firmware revision + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + stringSize [ I ] - The maximum number of characters (including NULL + terminator) that the string array can contain + pString [ O ] - NULL terminated string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetFirmwareRevision( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ) +{ + // Validate arguments + if (pIn == 0 || stringSize == 0 || pString == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + *pString = 0; + + // Find the PRI revision + // sDMSGetDeviceRevisionResponse_UQCNRevision only contains this + const CHAR * pTLVx11; + ULONG outLenx11; + ULONG rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Space to perform the copy? + if (stringSize < outLenx11 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pString, pTLVx11, outLenx11 ); + pString[outLenx11] = 0; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetFirmwareRevisions + +DESCRIPTION: + This function returns the device firmware (AMSS, boot, and PRI) + revisions + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + amssSize [ I ] - The maximum number of characters (including NULL + terminator) that the AMSS string array can contain + pAMSSString [ O ] - NULL terminated AMSS revision string + bootSize [ I ] - The maximum number of characters (including NULL + terminator) that the boot string array can contain + pBootString [ O ] - NULL terminated boot code revision string + priSize [ I ] - The maximum number of characters (including NULL + terminator) that the PRI string array can contain + pPRIString [ O ] - NULL terminated PRI revision string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetFirmwareRevisions( + ULONG inLen, + const BYTE * pIn, + BYTE amssSize, + CHAR * pAMSSString, + BYTE bootSize, + CHAR * pBootString, + BYTE priSize, + CHAR * pPRIString ) +{ + // Validate arguments + if (pIn == 0 + || amssSize == 0 || pAMSSString == 0 + || bootSize == 0 || pBootString == 0 + || priSize == 0 || pPRIString == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + *pAMSSString = 0; + *pBootString = 0; + *pPRIString = 0; + + // Find the AMSS version + // sDMSGetDeviceRevisionResponse_Revision only contains this + const CHAR * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Space to perform the copy? + if (amssSize < outLenx01 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pAMSSString, pTLVx01, outLenx01 ); + pAMSSString[outLenx01] = 0; + + // Find the Boot version + // sDMSGetDeviceRevisionResponse_BootCodeRevision only contains this + const CHAR * pTLVx10; + ULONG outLenx10; + rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Space to perform the copy? + if (bootSize < outLenx10 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pBootString, pTLVx10, outLenx10 ); + pBootString[outLenx10] = 0; + + // The PRI version is returned by ParseGetFirmwareRevision() + rc = ParseGetFirmwareRevision( inLen, pIn, priSize, pPRIString ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetVoiceNumber + +DESCRIPTION: + This function returns the voice number in use by the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + voiceNumberSize [ I ] - The maximum number of characters (including NULL + terminator) that the voice number array can + contain + pVoiceNumber [ O ] - Voice number (MDN or ISDN) string + minSize [ I ] - The maximum number of characters (including NULL + terminator) that the MIN array can contain + pMIN [ O ] - MIN string (empty string returned when MIN is + not supported/programmed) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetVoiceNumber( + ULONG inLen, + const BYTE * pIn, + BYTE voiceNumberSize, + CHAR * pVoiceNumber, + BYTE minSize, + CHAR * pMIN ) +{ + // Validate arguments + if (pIn == 0 + || voiceNumberSize == 0 || pVoiceNumber == 0 + || minSize == 0 || pMIN == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + *pVoiceNumber = 0; + *pMIN = 0; + + // Find the Voice number + // sDMSGetDeviceVoiceNumberResponse_VoiceNumber only contains this + const CHAR * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Space to perform the copy? + if (voiceNumberSize < outLenx01 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pVoiceNumber, pTLVx01, outLenx01 ); + pVoiceNumber[outLenx01] = 0; + + // Find the Mobile ID (optional) + // sDMSGetDeviceVoiceNumberResponse_MobileIDNumber only contains this + const CHAR * pTLVx10; + ULONG outLenx10; + rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + // Space to perform the copy? + if (minSize < outLenx10 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pMIN, pTLVx10, outLenx10 ); + pMIN[outLenx10] = 0; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetIMSI + +DESCRIPTION: + This function returns the device IMSI + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + stringSize [ I ] - The maximum number of characters (including NULL + terminator) that the string array can contain + pString [ O ] - NULL terminated string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetIMSI( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ) +{ + // Validate arguments + if (pIn == 0 || stringSize == 0 || pString == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + *pString = 0; + + // Find the IMSI + // sDMSGetDeviceVoiceNumberResponse_IMSI only contains this + const CHAR * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Space to perform the copy? + if (stringSize < outLenx01 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pString, pTLVx01, outLenx01 ); + pString[outLenx01] = 0; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetSerialNumbers + +DESCRIPTION: + This command returns all serial numbers assigned to the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + esnSize [ I ] - The maximum number of characters (including NULL + terminator) that the ESN array can contain + pESNString [ O ] - ESN string (empty string returned when ESN is + not supported/programmed) + imeiSize [ I ] - The maximum number of characters (including NULL + terminator) that the IMEI array can contain + pIMEIString [ O ] - IMEI string (empty string returned when IMEI is + not supported/programmed) + meidSize [ I ] - The maximum number of characters (including NULL + terminator) that the MEID array can contain + pMEIDString [ O ] - MEID string (empty string returned when MEID is + not supported/programmed) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetSerialNumbers( + ULONG inLen, + const BYTE * pIn, + BYTE esnSize, + CHAR * pESNString, + BYTE imeiSize, + CHAR * pIMEIString, + BYTE meidSize, + CHAR * pMEIDString ) +{ + // Validate arguments + if (pIn == 0 + || esnSize == 0 || pESNString == 0 + || imeiSize == 0 || pIMEIString == 0 + || meidSize == 0 || pMEIDString == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + *pESNString = 0; + *pIMEIString = 0; + *pMEIDString = 0; + + // Find the ESN + // sDMSGetDeviceSerialNumbersResponse_ESN only contains this + const CHAR * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Space to perform the copy? + if (esnSize < outLenx10 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pESNString, pTLVx10, outLenx10 ); + pESNString[outLenx10] = 0; + + // Find the IMEI + // sDMSGetDeviceSerialNumbersResponse_IMEI only contains this + const CHAR * pTLVx11; + ULONG outLenx11; + rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Space to perform the copy? + if (imeiSize < outLenx11 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pIMEIString, pTLVx11, outLenx11 ); + pIMEIString[outLenx11] = 0; + + // Find the MEID + // sDMSGetDeviceSerialNumbersResponse_MEID only contains this + const CHAR * pTLVx12; + ULONG outLenx12; + rc = GetTLV( inLen, pIn, 0x12, &outLenx12, (const BYTE **)&pTLVx12 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Space to perform the copy? + if (meidSize < outLenx12 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pMEIDString, pTLVx12, outLenx12 ); + pMEIDString[outLenx12] = 0; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetLock + +DESCRIPTION: + This function sets the user lock state maintained by the device + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + state [ I ] - Desired lock state + pCurrentPIN [ I ] - Current four digit PIN string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetLock( + ULONG * pOutLen, + BYTE * pOut, + ULONG state, + CHAR * pCurrentPIN ) +{ + // Validate arguments + if (pOut == 0 || pCurrentPIN == 0 || pCurrentPIN[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + std::string thePIN( pCurrentPIN ); + if (thePIN.size() > 4) + { + return eGOBI_ERR_INVALID_ARG; + } + + if (thePIN.find_first_not_of( "0123456789" ) != std::string::npos ) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sDMSSetLockStateRequest_LockState ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sDMSSetLockStateRequest_LockState * pTLVx01; + pTLVx01 = (sDMSSetLockStateRequest_LockState*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mLockState = (eQMIDMSLockStates)state; + memcpy( &pTLVx01->mLockCode[0], thePIN.c_str(), thePIN.size() ); + + offset += tlvx01Sz; + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseQueryLock + +DESCRIPTION: + This function sets the user lock state maintained by the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pState [ O ] - Current lock state + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseQueryLock( + ULONG inLen, + const BYTE * pIn, + ULONG * pState ) +{ + // Validate arguments + if (pIn == 0 || pState == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the state + const sDMSGetLockStateResponse_LockState * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sDMSGetLockStateResponse_LockState )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pState = pTLVx01->mLockState; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackChangeLockPIN + +DESCRIPTION: + This command sets the user lock code maintained by the device + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pCurrentPIN [ I ] - Current four digit PIN string + pDesiredPIN [ I ] - New four digit PIN string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackChangeLockPIN( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pCurrentPIN, + CHAR * pDesiredPIN ) +{ + // Validate arguments + if (pOut == 0 + || pCurrentPIN == 0 || pCurrentPIN[0] == 0 + || pDesiredPIN == 0 || pDesiredPIN[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + std::string theCurPIN( pCurrentPIN ); + if (theCurPIN.size() > 4) + { + return eGOBI_ERR_INVALID_ARG; + } + + if (theCurPIN.find_first_not_of( "0123456789" ) != std::string::npos ) + { + return eGOBI_ERR_INVALID_ARG; + } + + std::string theNewPIN( pDesiredPIN ); + if (theNewPIN.size() > 4) + { + return eGOBI_ERR_INVALID_ARG; + } + + if (theNewPIN.find_first_not_of( "0123456789" ) != std::string::npos ) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sDMSSetLockCodeRequest_LockCode ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sDMSSetLockCodeRequest_LockCode * pTLVx01; + pTLVx01 = (sDMSSetLockCodeRequest_LockCode*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + memcpy( &pTLVx01->mCurrentLockCode[0], + theCurPIN.c_str(), + theCurPIN.size() ); + + memcpy( &pTLVx01->mNewLockCode[0], + theNewPIN.c_str(), + theNewPIN.size() ); + + offset += tlvx01Sz; + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetHardwareRevision + +DESCRIPTION: + This function returns the device hardware revision + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + stringSize [ I ] - The maximum number of characters (including NULL + terminator) that the string array can contain + pString [ O ] - NULL terminated string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetHardwareRevision( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ) +{ + // Validate arguments + if (pIn == 0 || pString == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the hardware revision + // sDMSGetHardwareRevisionResponse_HardwareRevision only contains this + const CHAR * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Space to perform the copy? + if (stringSize < outLenx01 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pString, pTLVx01, outLenx01 ); + pString[outLenx01] = 0; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetPRLVersion + +DESCRIPTION: + This function returns the version of the active Preferred Roaming List + (PRL) in use by the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pPRLVersion [ O ] - The PRL version number + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetPRLVersion( + ULONG inLen, + const BYTE * pIn, + WORD * pPRLVersion ) +{ + // Validate arguments + if (pIn == 0 || pPRLVersion == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the state + const sDMSGetPRLVersionResponse_PRLVersion * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sDMSGetPRLVersionResponse_PRLVersion )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pPRLVersion = pTLVx01->mPRLVersion; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetERIFile + +DESCRIPTION: + This command returns the ERI file that is stored in EFS on the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pFileSize [I/O] - Upon input the maximum number of bytes that the file + contents array can contain. Upon successful output + the actual number of bytes written to the file contents + array + pFile [ O ] - The file contents + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetERIFile( + ULONG inLen, + const BYTE * pIn, + ULONG * pFileSize, + BYTE * pFile ) +{ + // Validate arguments + if (pIn == 0 || pFileSize == 0 || *pFileSize == 0 || pFile == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + ULONG maxFileSize = *pFileSize; + *pFileSize = 0; + + // Find the state + const sDMSReadERIDataResponse_UserData * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sDMSReadERIDataResponse_UserData )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG fileSz = pTLVx01->mDataLength; + const BYTE * pInFile; + + // Verify there is room for the array in the TLV + if (outLenx01 < sizeof( sDMSReadERIDataResponse_UserData ) + + sizeof( BYTE ) * fileSz) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Space to copy into? + if (fileSz > maxFileSize) + { + return eGOBI_ERR_BUFFER_SZ; + } + + // Align to the first array element + pInFile = (const BYTE *)pTLVx01 + + sizeof( sDMSReadERIDataResponse_UserData ); + + // Perform the copy + memcpy( pFile, pInFile, fileSz ); + *pFileSize = fileSz; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackActivateAutomatic + +DESCRIPTION: + This function requests the device to perform automatic service activation + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pActivationCode [ I ] - Activation code (maximum string length of 12) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackActivateAutomatic( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pActivationCode ) +{ + // Validate arguments + if (pOut == 0 || pActivationCode == 0 || pActivationCode[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + std::string ac( pActivationCode ); + if (ac.size() > 12) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sDMSActivateAutomaticRequest_ActivationCode ) + + (WORD)ac.size(); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sDMSActivateAutomaticRequest_ActivationCode * pTLVx01; + pTLVx01 = (sDMSActivateAutomaticRequest_ActivationCode*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mCodeLength = (UINT8)ac.size(); + + memcpy( (BYTE *)pTLVx01 + + sizeof( sDMSActivateAutomaticRequest_ActivationCode ), + ac.c_str(), + ac.size() ); + + offset += tlvx01Sz; + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackResetToFactoryDefaults + +DESCRIPTION: + This function requests the device reset configuration to factory defaults + + CHANGES: + * The client must manually reset the device after this request completes + using DMSSetOperatingMode() + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied to pOut + pOut [ O ] - Output buffer + pSPC [ I ] - NULL terminated string representing the six digit + service programming code + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackResetToFactoryDefaults( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC ) +{ + // Validate arguments + if (pOut == 0 || pSPC == 0 || pSPC[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + std::string spc( pSPC ); + if (spc.size() > 6) + { + return eGOBI_ERR_INVALID_ARG; + } + + if (spc.find_first_not_of( "0123456789" ) != std::string::npos ) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sDMSResetFactoryDefaultsRequest_SPC ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // The SPC + sDMSResetFactoryDefaultsRequest_SPC * pTLVx01; + pTLVx01 = (sDMSResetFactoryDefaultsRequest_SPC*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + memcpy( &pTLVx01->mSPC[0], spc.c_str(), spc.size() ); + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetActivationState + +DESCRIPTION: + This function returns the device activation state + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pActivationState [ O ] - Service activation state + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetActivationState( + ULONG inLen, + const BYTE * pIn, + ULONG * pActivationState ) +{ + // Validate arguments + if (pIn == 0 || pActivationState == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the state + const sDMSGetActivationStateResponse_ActivationState * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sDMSGetActivationStateResponse_ActivationState )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pActivationState = pTLVx01->mActivationState; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetPower + +DESCRIPTION: + This function sets the operating mode of the device + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied to pOut + pOut [ O ] - Output buffer + powerMode [ I ] - Selected operating mode + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetPower( + ULONG * pOutLen, + BYTE * pOut, + ULONG powerMode ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sDMSSetOperatingModeRequest_OperatingMode ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // Set the mode + sDMSSetOperatingModeRequest_OperatingMode * pTLVx01; + pTLVx01 = (sDMSSetOperatingModeRequest_OperatingMode*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mOperatingMode = (eQMIDMSOperatingModes)powerMode; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetPower + +DESCRIPTION: + This function returns the operating mode of the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pPowerMode [ O ] - Current operating mode + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetPower( + ULONG inLen, + const BYTE * pIn, + ULONG * pPowerMode ) +{ + // Validate arguments + if (pIn == 0 || pPowerMode == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + *pPowerMode = 0xffffffff; + + // Find the mode + const sDMSGetOperatingModeResponse_OperatingMode * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sDMSGetOperatingModeResponse_OperatingMode )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pPowerMode = pTLVx01->mOperatingMode; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetOfflineReason + +DESCRIPTION: + This function returns the reason why the operating mode of the device + is currently offline + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pReasonMask [ O ] - Bitmask of offline reasons + pbPlatform [ O ] - Offline due to being platform retricted? + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetOfflineReason( + ULONG inLen, + const BYTE * pIn, + ULONG * pReasonMask, + ULONG * pbPlatform ) +{ + // Validate arguments + if (pIn == 0 || pReasonMask == 0 || pbPlatform == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + *pReasonMask = 0; + *pbPlatform = 0; + + // Find the reason mask (optional) + const sDMSGetOperatingModeResponse_OfflineReason * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx10 < sizeof( sDMSGetOperatingModeResponse_OfflineReason )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Copy the bitmask to pReasonMask + *pReasonMask = *(WORD*)pTLVx10; + } + + // Find the platform restriction (optional) + const sDMSGetOperatingModeResponse_PlatformRestricted * pTLVx11; + ULONG outLenx11; + rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx11 < sizeof( sDMSGetOperatingModeResponse_PlatformRestricted )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Copy the value + *pbPlatform = pTLVx11->mPlatformRestricted; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetNetworkTime + +DESCRIPTION: + This function returns the current time of the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pTimeCount [ O ] - Count of 1.25ms that have elapsed from the start + of GPS time (Jan 6, 1980) + pTimeSource [ O ] - Source of the timestamp + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetNetworkTime( + ULONG inLen, + const BYTE * pIn, + ULONGLONG * pTimeCount, + ULONG * pTimeSource ) +{ + // Validate arguments + if (pIn == 0 || pTimeCount == 0 || pTimeSource == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the reason mask + const sDMSGetTimestampResponse_Timestamp * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sDMSGetTimestampResponse_Timestamp )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Get the values + *pTimeCount = pTLVx01->mTimestamp; + // mSource is of type eQMIDMSTimestampSources + *pTimeSource = pTLVx01->mSource; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackValidateSPC + +DESCRIPTION: + This function validates the service programming code + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied to pOut + pOut [ O ] - Output buffer + pSPC [ I ] - Six digit service programming code + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackValidateSPC( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC ) +{ + // Validate arguments + if (pOut == 0 || pSPC == 0 || pSPC[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + std::string spc( pSPC ); + if (spc.size() > 6) + { + return eGOBI_ERR_INVALID_ARG; + } + + if (spc.find_first_not_of( "0123456789" ) != std::string::npos ) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sDMSValidateSPCRequest_SPC ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // The SPC + sDMSValidateSPCRequest_SPC * pTLVx01; + pTLVx01 = (sDMSValidateSPCRequest_SPC*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + memcpy( &pTLVx01->mSPC[0], spc.c_str(), spc.size() ); + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationNAS.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationNAS.cpp new file mode 100644 index 0000000..836f41b --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationNAS.cpp @@ -0,0 +1,2021 @@ +/*=========================================================================== +FILE: + Gobi3000TranslationNAS.cpp + +DESCRIPTION: + QUALCOMM Translation for Gobi 3000 (NAS Service) + +Copyright (c) 2013, 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 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 "Gobi3000Translation.h" + +// Maximum length for a scanned network description +const ULONG MAX_SNI_DESCRIPTION_LEN = 255; + +//--------------------------------------------------------------------------- +// Pragmas (pack structs) +//--------------------------------------------------------------------------- +#pragma pack( push, 1 ) + +/*=========================================================================*/ +// Struct sEVDOCustomSCPConfig +// Struct to represent CDMA 1xEV-DO custom SCP config +/*=========================================================================*/ +struct sEVDOCustomSCPConfig +{ + public: + BYTE mbActive; + ULONG mProtocolMask; + ULONG mBroadcastMask; + ULONG mApplicationMask; +}; + +/*=========================================================================*/ +// Struct sScannedNetworkInfo +// Struct to represent scanned network information +/*=========================================================================*/ +struct sScannedNetworkInfo +{ + public: + USHORT mMCC; + USHORT mMNC; + ULONG mInUse; + ULONG mRoaming; + ULONG mForbidden; + ULONG mPreferred; + CHAR mDescription[MAX_SNI_DESCRIPTION_LEN]; +}; + +/*=========================================================================*/ +// Struct sScannedNetworkRATInfo +// Struct to represent scanned network RAT information +/*=========================================================================*/ +struct sScannedNetworkRATInfo +{ + public: + USHORT mMCC; + USHORT mMNC; + ULONG mRAT; +}; + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma pack( pop ) + +/*=========================================================================== +METHOD: + ParseGetANAAAAuthenticationStatus + +DESCRIPTION: + This function gets the AN-AAA authentication status + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pStatus [ O ] - AN-AAA authentication status + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetANAAAAuthenticationStatus( + ULONG inLen, + const BYTE * pIn, + ULONG * pStatus ) +{ + // Validate arguments + if (pIn == 0 || pStatus == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sNASGetANAAAAuthenticationStatusResponse_Status * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sNASGetANAAAAuthenticationStatusResponse_Status )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pStatus = pTLVx01->mANAAAAuthenticationStatus; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetSignalStrength + +DESCRIPTION: + This function gets the current signal strength (in dBm) as measured by + the device, the signal strength returned will be one of the currently + available technologies with preference CDMA 1xEV-DO, CDMA, AMPS, + WCDMA, GSM + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pSignalStrength [ O ] - Received signal strength (dBm) + pRadioInterface [ O ] - Radio interface technology + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetSignalStrength( + ULONG inLen, + const BYTE * pIn, + INT8 * pSignalStrength, + ULONG * pRadioInterface ) +{ + // Validate arguments + if (pSignalStrength == 0 || pRadioInterface == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + ULONG sigSz = 12; + INT8 sigs[12]; + ULONG radios[12]; + ULONG qcErr = ParseGetSignalStrengths( inLen, + pIn, + &sigSz, + &sigs[0], + &radios[0] ); + if (qcErr != eGOBI_ERR_NONE) + { + return qcErr; + } + + std::map sigMap; + for (ULONG s = 0; s < sigSz; s++) + { + sigMap[radios[s]] = sigs[s]; + } + + std::map ::const_iterator pIter; + + // HDR? + pIter = sigMap.find( 2 ); + if (pIter != sigMap.end()) + { + *pSignalStrength = pIter->second; + *pRadioInterface = pIter->first; + + return eGOBI_ERR_NONE; + } + + // CDMA? + pIter = sigMap.find( 1 ); + if (pIter != sigMap.end()) + { + *pSignalStrength = pIter->second; + *pRadioInterface = pIter->first; + + return eGOBI_ERR_NONE; + } + + // AMPS? + pIter = sigMap.find( 3 ); + if (pIter != sigMap.end()) + { + *pSignalStrength = pIter->second; + *pRadioInterface = pIter->first; + + return eGOBI_ERR_NONE; + } + + // WCDMA? + pIter = sigMap.find( 5 ); + if (pIter != sigMap.end()) + { + *pSignalStrength = pIter->second; + *pRadioInterface = pIter->first; + + return eGOBI_ERR_NONE; + } + + // GSM? + pIter = sigMap.find( 4 ); + if (pIter != sigMap.end()) + { + *pSignalStrength = pIter->second; + *pRadioInterface = pIter->first; + + return eGOBI_ERR_NONE; + } + + // Error values + *pSignalStrength = -128; + *pRadioInterface = 0; + + return eGOBI_ERR_NO_SIGNAL; +} + +/*=========================================================================== +METHOD: + ParseGetSignalStrengths + +DESCRIPTION: + This function gets the current available signal strengths (in dBm) + as measured by the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pArraySizes [I/O] - Upon input the maximum number of elements + that each array can contain can contain. + Upon successful output the actual number + of elements in each array + pSignalStrengths [ O ] - Received signal strength array (dBm) + pRadioInterfaces [ O ] - Radio interface technology array + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetSignalStrengths( + ULONG inLen, + const BYTE * pIn, + ULONG * pArraySizes, + INT8 * pSignalStrengths, + ULONG * pRadioInterfaces ) +{ + // Validate arguments + if (pIn == 0 + || pArraySizes == 0 + || *pArraySizes == 0 + || pSignalStrengths == 0 + || pRadioInterfaces == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + ULONG maxSignals = (ULONG)*pArraySizes; + + // Assume failure + *pArraySizes = 0; + + // Find the first signal strength value + const sNASGetSignalStrengthResponse_SignalStrength * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sNASGetSignalStrengthResponse_SignalStrength )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Weed out bogus values + std::map sigMap; + + INT8 sigVal = pTLVx01->mSignalStrengthdBm; + ULONG radioVal = pTLVx01->mRadioInterface; + if (sigVal <= -30 && sigVal > -125 && radioVal != 0) + { + sigMap[radioVal] = sigVal; + } + + // Handle list, if present + const sNASGetSignalStrengthResponse_SignalStrengthList * pTLVx10; + ULONG outLenx10; + rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx10 < sizeof( sNASGetSignalStrengthResponse_SignalStrengthList )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG auxSigs = pTLVx10->mNumberOfInfoInstances; + if (auxSigs > maxSignals) + { + auxSigs = maxSignals; + } + + const sNASGetSignalStrengthResponse_SignalStrengthList::sInfo * pInfo; + + // Verify there is room for the array in the TLV + if (outLenx10 < sizeof( sNASGetSignalStrengthResponse_SignalStrengthList ) + + sizeof( sNASGetSignalStrengthResponse_SignalStrengthList::sInfo ) + * auxSigs) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Align to the first array element + pInfo = (const sNASGetSignalStrengthResponse_SignalStrengthList::sInfo *) + ((const BYTE *)pTLVx10 + + sizeof( sNASGetSignalStrengthResponse_SignalStrengthList )); + + for (ULONG s = 0; s < auxSigs; s++) + { + sigVal = pInfo->mSignalStrengthdBm; + radioVal = pInfo->mRadioInterface; + if (sigVal <= -30 && sigVal > -125 && radioVal != 0) + { + sigMap[radioVal] = sigVal; + } + + // Move pInfo forward one element + pInfo++; + } + } + + ULONG sigCount = 0; + std::map ::const_iterator pIter; + for (pIter = sigMap.begin(); pIter != sigMap.end(); pIter++, sigCount++) + { + if (sigCount < maxSignals) + { + pSignalStrengths[sigCount] = pIter->second; + pRadioInterfaces[sigCount] = pIter->first; + *pArraySizes = sigCount + 1; + } + } + + // No valid signals? + if (sigCount == 0) + { + return eGOBI_ERR_NO_SIGNAL; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetRFInfo + +DESCRIPTION: + This function gets the current RF information + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pInstanceSize [I/O] - Upon input the maximum number of elements that the + RF info instance array can contain. Upon success + the actual number of elements in the RF info + instance array + pInstances [ O ] - The RF info instance array + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetRFInfo( + ULONG inLen, + const BYTE * pIn, + BYTE * pInstanceSize, + BYTE * pInstances ) +{ + // Validate arguments + if (pIn == 0 + || pInstanceSize == 0 + || *pInstanceSize == 0 + || pInstances == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + BYTE maxInstances = *pInstanceSize; + *pInstanceSize = 0; + + // Find the TLV + const sNASGetRFInfoResponse_RFInfo * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sNASGetRFInfoResponse_RFInfo )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + BYTE ifaceCount = pTLVx01->mNumberOfInstances; + if (ifaceCount > maxInstances) + { + ifaceCount = maxInstances; + } + + const sNASGetRFInfoResponse_RFInfo::sInstance * pInstance; + + // Verify there is room for the array in the TLV + if (outLenx01 < sizeof( sNASGetRFInfoResponse_RFInfo ) + + sizeof( sNASGetRFInfoResponse_RFInfo::sInstance ) + * ifaceCount) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Align to the first array element + pInstance = (const sNASGetRFInfoResponse_RFInfo::sInstance *) + ((const BYTE *)pTLVx01 + + sizeof( sNASGetRFInfoResponse_RFInfo )); + + ULONG * pOutput = (ULONG *)pInstances; + for (BYTE i = 0; i < ifaceCount; i++) + { + *pOutput++ = pInstance->mRadioInterface; + *pOutput++ = pInstance->mActiveBandClass; + *pOutput++ = pInstance->mActiveChannel; + + // Move pInstance forward one element + pInstance++; + } + + *pInstanceSize = ifaceCount; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParsePerformNetworkScan + +DESCRIPTION: + This function performs a scan for available networks + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pInstanceSize [I/O] - Upon input the maximum number of elements that the + network info instance array can contain. Upon + success the actual number of elements in the + network info instance array + pInstances [ O ] - The network info instance array + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParsePerformNetworkScan( + ULONG inLen, + const BYTE * pIn, + BYTE * pInstanceSize, + BYTE * pInstances ) +{ + // Validate arguments + if (pIn == 0 + || pInstanceSize == 0 + || *pInstanceSize == 0 + || pInstances == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + BYTE maxInstances = *pInstanceSize; + + // Assume failure + *pInstanceSize = 0; + + // Find the TLV + const sNASPerformNetworkScanResponse_NetworkInfo * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sNASPerformNetworkScanResponse_NetworkInfo )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + UINT16 netCount = pTLVx10->mNumberOfInfoInstances; + if (netCount > maxInstances) + { + netCount = maxInstances; + } + + const sNASPerformNetworkScanResponse_NetworkInfo::sNetworkInfo * pNetInfo; + + // Align to the first array element + pNetInfo = (const sNASPerformNetworkScanResponse_NetworkInfo::sNetworkInfo *) + ((const BYTE *)pTLVx10 + + sizeof( sNASPerformNetworkScanResponse_NetworkInfo )); + ULONG offset = sizeof( sNASPerformNetworkScanResponse_NetworkInfo ); + + sScannedNetworkInfo * pNet = (sScannedNetworkInfo *)pInstances; + for (BYTE i = 0; i < netCount; i++) + { + // Check TLV size + if (offset > outLenx10) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + pNet->mMCC = pNetInfo->mMobileCountryCode; + pNet->mMNC = pNetInfo->mMobileNetworkCode; + pNet->mInUse = pNetInfo->mInUseStatus; + pNet->mRoaming = pNetInfo->mRoamingStatus; + pNet->mForbidden = pNetInfo->mForbiddenStatus; + pNet->mPreferred = pNetInfo->mPreferredStatus; + + memset( &pNet->mDescription[0], 0, MAX_SNI_DESCRIPTION_LEN ); + + BYTE descLen = pNetInfo->mDescriptionLength; + if (descLen > 0) + { + // Move pNetInfo forward + pNetInfo++; + offset += sizeof( sNASPerformNetworkScanResponse_NetworkInfo::sNetworkInfo ); + + // Check TLV size + if (offset > outLenx10) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + std::string netDesc( (LPCSTR)pNetInfo ); + + ULONG actualLen = (ULONG)netDesc.size(); + if (actualLen >= MAX_SNI_DESCRIPTION_LEN) + { + actualLen = MAX_SNI_DESCRIPTION_LEN - 1; + } + + LPCSTR pNetDesc = netDesc.c_str(); + memcpy( &pNet->mDescription[0], pNetDesc, actualLen ); + + // Move pNetInfo past string + pNetInfo = (const sNASPerformNetworkScanResponse_NetworkInfo::sNetworkInfo *) + ((const BYTE *)pNetInfo + descLen); + offset += descLen; + } + + pNet++; + } + + *pInstanceSize = (BYTE)netCount; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParsePerformNetworkRATScan + +DESCRIPTION: + This function performs a scan for available networks (includes RAT) + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pInstanceSize [I/O] - Upon input the maximum number of elements that the + network info instance array can contain. Upon + success the actual number of elements in the + network info instance array + pInstances [ O ] - The network info instance array + pRATSize [I/O] - Upon input the maximum number of elements that the + RAT info instance array can contain. Upon success + the actual number of elements in the RAT info + instance array + pRATInstances [ O ] - The RAT info instance array + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParsePerformNetworkRATScan( + ULONG inLen, + const BYTE * pIn, + BYTE * pInstanceSize, + BYTE * pInstances, + BYTE * pRATSize, + BYTE * pRATInstances ) +{ + // Validate arguments + if (pIn == 0 + || pInstanceSize == 0 + || *pInstanceSize == 0 + || pInstances == 0 + || pRATSize == 0 + || *pRATSize == 0 + || pRATInstances == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + BYTE maxRATInstances = *pRATSize; + + // Assume failure + *pInstanceSize = 0; + *pRATSize = 0; + + // First, generate the instances using ParsePerformNetworkScan + ULONG rc = ParsePerformNetworkScan( inLen, pIn, pInstanceSize, pInstances ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Now find the RAT info too + + // Find the TLV + const sNASPerformNetworkScanResponse_NetworkRAT * pTLVx11; + ULONG outLenx11; + rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx11 < sizeof( sNASPerformNetworkScanResponse_NetworkRAT )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + UINT16 ratCount = pTLVx11->mNumberOfInfoInstances; + if (ratCount > maxRATInstances) + { + ratCount = maxRATInstances; + } + + const sNASPerformNetworkScanResponse_NetworkRAT::sInfo * pRatInfo; + + // Verify there is room for the array in the TLV + if (outLenx11 < sizeof( sNASPerformNetworkScanResponse_NetworkRAT ) + + sizeof( sNASPerformNetworkScanResponse_NetworkRAT::sInfo ) + * ratCount) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Align to the first array element + pRatInfo = (const sNASPerformNetworkScanResponse_NetworkRAT::sInfo *) + ((const BYTE *)pTLVx11 + + sizeof( sNASPerformNetworkScanResponse_NetworkRAT )); + + sScannedNetworkRATInfo * pRAT = (sScannedNetworkRATInfo *)pRATInstances; + for (BYTE r = 0; r < ratCount; r++) + { + pRAT->mMCC = pRatInfo->mMobileCountryCode; + pRAT->mMNC = pRatInfo->mMobileNetworkCode; + pRAT->mRAT = pRatInfo->mRadioAccessTechnology; + + pRAT++; + pRatInfo++; + } + + *pRATSize = (BYTE)ratCount; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackInitiateNetworkRegistration + +DESCRIPTION: + This function initiates a network registration + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + regType [ I ] - Registration type + mcc [ I ] - Mobile country code (ignored for auto registration) + mnc [ I ] - Mobile network code (ignored for auto registration) + rat [ I ] - Radio access type (ignored for auto registration) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackInitiateNetworkRegistration( + ULONG * pOutLen, + BYTE * pOut, + ULONG regType, + WORD mcc, + WORD mnc, + ULONG rat ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Set the action + + // Check size + WORD tlvx01Sz = sizeof( sNASInitiateNetworkRegisterRequest_Action ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sNASInitiateNetworkRegisterRequest_Action * pTLVx01; + pTLVx01 = (sNASInitiateNetworkRegisterRequest_Action*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the value + pTLVx01->mRegisterAction = (eQMINASRegisterActions)regType; + + offset += tlvx01Sz; + + // Set the info + + // Check size + WORD tlvx10Sz = sizeof( sNASInitiateNetworkRegisterRequest_ManualInfo ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + offset = sizeof( sQMIRawContentHeader ); + + sNASInitiateNetworkRegisterRequest_ManualInfo * pTLVx10; + pTLVx10 = (sNASInitiateNetworkRegisterRequest_ManualInfo*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mMobileCountryCode = mcc; + pTLVx10->mMobileNetworkCode = mnc; + pTLVx10->mRadioAccessTechnology = (eQMINASRadioAccessTechnologies)rat; + + offset += tlvx10Sz; + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackInitiateDomainAttach + +DESCRIPTION: + This function initiates a domain attach (or detach) + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + action [ I ] - PS attach action (attach or detach) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackInitiateDomainAttach( + ULONG * pOutLen, + BYTE * pOut, + ULONG action ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx10Sz = sizeof( sNASInitiateAttachRequest_Action ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sNASInitiateAttachRequest_Action * pTLVx10; + pTLVx10 = (sNASInitiateAttachRequest_Action*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mPSAttachAction = (eQMINASPSAttachActions)action; + + offset += tlvx10Sz; + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetServingNetwork + +DESCRIPTION: + Gets information regarding the system that currently provides service + to the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pRegistrationState [ O ] - Registration state + pCSDomain [ O ] - Circuit switch domain status + pPSDomain [ O ] - Packet switch domain status + pRAN [ O ] - Radio access network + pRadioIfacesSize [I/O] - Upon input the maximum number of elements + that the radio interfaces can contain. Upon + successful output the actual number of elements + in the radio interface array + pRadioIfaces [ O ] - The radio interface array + pRoaming [ O ] - Roaming indicator (0xFFFFFFFF - Unknown) + pMCC [ O ] - Mobile country code (0xFFFF - Unknown) + pMNC [ O ] - Mobile network code (0xFFFF - Unknown) + nameSize [ I ] - The maximum number of characters (including + NULL terminator) that the network name array + can contain + pName [ O ] - The network name or description represented + as a NULL terminated string (empty string + returned when unknown) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetServingNetwork( + ULONG inLen, + const BYTE * pIn, + ULONG * pRegistrationState, + ULONG * pCSDomain, + ULONG * pPSDomain, + ULONG * pRAN, + BYTE * pRadioIfacesSize, + BYTE * pRadioIfaces, + ULONG * pRoaming, + WORD * pMCC, + WORD * pMNC, + BYTE nameSize, + CHAR * pName ) +{ + // Validate arguments + if (pIn == 0 + || pRegistrationState == 0 + || pCSDomain == 0 + || pPSDomain == 0 + || pRAN == 0 + || pRadioIfacesSize == 0 + || *pRadioIfacesSize == 0 + || pRadioIfaces == 0 + || pRoaming == 0 + || pMCC == 0 + || pMNC == 0 + || nameSize == 0 + || pName == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + BYTE maxRadioIfaces = *pRadioIfacesSize; + + // Assume failure + *pRadioIfacesSize = 0; + *pRoaming = 0xffffffff; + *pMCC = 0xffff; + *pMNC = 0xffff; + *pName = 0; + + // Parse the serving system (mandatory) + + // Find the TLV + const sNASGetServingSystemResponse_ServingSystem * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sNASGetServingSystemResponse_ServingSystem )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Populate the variables + *pRegistrationState = pTLVx01->mRegistrationState; + *pCSDomain = pTLVx01->mCSAttachState; + *pPSDomain = pTLVx01->mPSAttachState; + *pRAN = pTLVx01->mRegisteredNetwork; + + BYTE activeRadioIfaces = pTLVx01->mNumberOfRadioInterfacesInUse; + if (activeRadioIfaces > maxRadioIfaces) + { + activeRadioIfaces = maxRadioIfaces; + } + + const eQMINASRadioInterfaces * pRadioInfo; + + // Verify there is room for the array in the TLV + if (outLenx01 < sizeof( sNASGetServingSystemResponse_ServingSystem ) + + sizeof( eQMINASRadioInterfaces ) * activeRadioIfaces) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Align to the first array element + pRadioInfo = (const eQMINASRadioInterfaces *) + ((const BYTE *)pTLVx01 + + sizeof( sNASGetServingSystemResponse_ServingSystem )); + + ULONG * pOutRadioIfaces = (ULONG *)pRadioIfaces; + for (ULONG r = 0; r < activeRadioIfaces; r++) + { + *pOutRadioIfaces = *pRadioInfo; + pOutRadioIfaces++; + pRadioInfo++; + } + + *pRadioIfacesSize = activeRadioIfaces; + + // Find the roaming indicator (optional) + const sNASGetServingSystemResponse_RoamingIndicator * pTLVx10; + ULONG outLenx10; + rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx10 < sizeof( sNASGetServingSystemResponse_RoamingIndicator )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Get the values + *pRoaming = (eQMINASRoamingIndicators)pTLVx10->mRoamingIndicator; + } + + // Find the PLMN (optional) + const sNASGetServingSystemResponse_CurrentPLMN * pTLVx12; + ULONG outLenx12; + rc = GetTLV( inLen, pIn, 0x12, &outLenx12, (const BYTE **)&pTLVx12 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx12 < sizeof( sNASGetServingSystemResponse_CurrentPLMN )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pMCC = pTLVx12->mMobileCountryCode; + *pMNC = pTLVx12->mMobileNetworkCode; + + ULONG descLen = pTLVx12->mDescriptionLength; + const CHAR * pDesc; + + // Verify there is room for the array in the TLV + if (outLenx12 < sizeof( sNASGetServingSystemResponse_CurrentPLMN ) + + sizeof( CHAR ) * descLen) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Space to perform the copy? + if (nameSize < descLen + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + // Align to the first array element + pDesc = (const CHAR *)((const BYTE *)pTLVx12 + + sizeof( sNASGetServingSystemResponse_CurrentPLMN )); + + memcpy( pName, pDesc, descLen ); + pName[descLen] = 0; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetServingNetworkCapabilities + +DESCRIPTION: + Gets information regarding the data capabilities of the system that + currently provides service to the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pDataCapsSize [I/O] - Upon input the maximum number of elements that the + data capabilities array can contain. Upon success + the actual number of elements in the data + capabilities array + pDataCaps [ O ] - The data capabilities array + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetServingNetworkCapabilities( + ULONG inLen, + const BYTE * pIn, + BYTE * pDataCapsSize, + BYTE * pDataCaps ) +{ + // Validate arguments + if (pIn == 0 + || pDataCapsSize == 0 + || *pDataCapsSize == 0 + || pDataCaps == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + BYTE maxDataCaps = *pDataCapsSize; + + // Assume failure + *pDataCapsSize = 0; + + // Find the TLV + const sNASGetServingSystemResponse_DataServices * pTLVx11; + ULONG outLenx11; + ULONG rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx11 < sizeof( sNASGetServingSystemResponse_DataServices )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + BYTE activeDataCaps = pTLVx11->mNumberOfDataCapabilities; + if (activeDataCaps > maxDataCaps) + { + activeDataCaps = maxDataCaps; + } + + const eQMINASDataServiceCapabilities2 * pInDataCaps; + + // Verify there is room for the array in the TLV + if (outLenx11 < sizeof( sNASGetServingSystemResponse_DataServices ) + + sizeof( eQMINASDataServiceCapabilities2 ) * activeDataCaps) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Align to the first array element + pInDataCaps = (const eQMINASDataServiceCapabilities2 *) + ((const BYTE *)pTLVx11 + + sizeof( sNASGetServingSystemResponse_DataServices )); + + ULONG * pOutDataCaps = (ULONG *)pDataCaps; + for (ULONG d = 0; d < activeDataCaps; d++) + { + *pOutDataCaps = *pInDataCaps; + pOutDataCaps++; + pInDataCaps++; + } + + *pDataCapsSize = activeDataCaps; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetHomeNetwork + +DESCRIPTION: + This function retrieves information about the home network of the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pMCC [ O ] - Mobile country code + pMNC [ O ] - Mobile network code + nameSize [ I ] - The maximum number of characters (including NULL + terminator) that the network name array can contain + pName [ O ] - The network name or description represented as a NULL + terminated string (empty string returned when unknown) + pSID [ O ] - Home network system ID (0xFFFF - Unknown) + pNID [ O ] - Home network ID (0xFFFF - Unknown) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetHomeNetwork( + ULONG inLen, + const BYTE * pIn, + WORD * pMCC, + WORD * pMNC, + BYTE nameSize, + CHAR * pName, + WORD * pSID, + WORD * pNID ) +{ + // Validate arguments + if (pIn == 0 + || pMCC == 0 + || pMNC == 0 + || nameSize == 0 + || pName == 0 + || pSID == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + *pName = 0; + *pSID = 0xffff; + *pNID = 0xffff; + + // Find the name (mandatory) + const sNASGetHomeNetworkResponse_HomeNetwork * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sNASGetHomeNetworkResponse_HomeNetwork )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Populate the variables + *pMCC = pTLVx01->mMobileCountryCode; + *pMNC = pTLVx01->mMobileNetworkCode; + + ULONG descLen = pTLVx01->mDescriptionLength; + const CHAR * pDesc; + + // Verify there is room for the array in the TLV + if (outLenx01 < sizeof( sNASGetHomeNetworkResponse_HomeNetwork ) + + sizeof( CHAR ) * descLen) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Space to perform the copy? + if (nameSize < descLen + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + // Align to the first array element + pDesc = (const CHAR *)((const BYTE *)pTLVx01 + + sizeof( sNASGetHomeNetworkResponse_HomeNetwork )); + + memcpy( pName, pDesc, descLen ); + pName[descLen] = 0; + + + // Find the SID/NID (optional) + const sNASGetHomeNetworkResponse_HomeIDs * pTLVx10; + ULONG outLenx10; + rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx10 < sizeof( sNASGetHomeNetworkResponse_HomeIDs )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pSID = pTLVx10->mSystemID; + *pNID = pTLVx10->mNetworkID; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetNetworkPreference + +DESCRIPTION: + This function sets the network registration preference + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + technologyPref [ I ] - Technology preference bitmap + duration [ I ] - Duration of active preference + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetNetworkPreference( + ULONG * pOutLen, + BYTE * pOut, + ULONG technologyPref, + ULONG duration ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sNASSetTechnologyPreferenceRequest_Preference ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sNASSetTechnologyPreferenceRequest_Preference * pTLVx01; + pTLVx01 = (sNASSetTechnologyPreferenceRequest_Preference*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Copy technology preference WORD as-is + memcpy( &pTLVx01->mValOfTechnology, &technologyPref, 2 ); + + pTLVx01->mDuration = (eQMINASTechPrefDurations)duration; + + offset += tlvx01Sz; + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetNetworkPreference + +DESCRIPTION: + This function returns the network registration preference + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pTechnologyPref [ O ] - Technology preference bitmap + pDuration [ O ] - Duration of active preference + pPersistentTechnologyPref [ O ] - Persistent technology preference bitmap + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetNetworkPreference( + ULONG inLen, + const BYTE * pIn, + ULONG * pTechnologyPref, + ULONG * pDuration, + ULONG * pPersistentTechnologyPref ) +{ + // Validate arguments + if (pIn == 0 + || pTechnologyPref == 0 + || pDuration == 0 + || pPersistentTechnologyPref == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the preference (mandatory) + const sNASGetTechnologyPreferenceResponse_ActivePreference * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sNASGetTechnologyPreferenceResponse_ActivePreference )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Copy technology preference WORD as-is + *pTechnologyPref = 0; + memcpy( pTechnologyPref, &pTLVx01->mValOfTechnology, 2 ); + + *pDuration = pTLVx01->mDuration; + + + // Until we know any better the persistent setting is the current setting + *pPersistentTechnologyPref = *pTechnologyPref; + + // Find the persistant technology preference (optional) + const sNASGetTechnologyPreferenceResponse_PersistentPreference * pTLVx10; + ULONG outLenx10; + rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx10 < sizeof( sNASGetTechnologyPreferenceResponse_PersistentPreference )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Copy technology preference WORD as-is + *pTechnologyPref = 0; + memcpy( pPersistentTechnologyPref, &pTLVx10->mValOfTechnology, 2 ); + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetCDMANetworkParameters + +DESCRIPTION: + This function sets the desired CDMA network parameters + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pSPC [ I ] - Six digit service programming code + pForceRev0 [ I ] - (Optional) Force CDMA 1x-EV-DO Rev. 0 mode? + pCustomSCP [ I ] - (Optional) Use a custom config for CDMA 1x-EV-DO SCP? + pProtocol [ I ] - (Optional) Protocol mask for custom SCP config + pBroadcast [ I ] - (Optional) Broadcast mask for custom SCP config + pApplication [ I ] - (Optional) Application mask for custom SCP config + pRoaming [ I ] - (Optional) Roaming preference + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetCDMANetworkParameters( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC, + BYTE * pForceRev0, + BYTE * pCustomSCP, + ULONG * pProtocol, + ULONG * pBroadcast, + ULONG * pApplication, + ULONG * pRoaming ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // If you specify one of the custom SCP config fields then you must + // specify them all + ULONG scpCount = 0; + if (pCustomSCP != 0) + { + scpCount++; + } + + if (pProtocol != 0) + { + scpCount++; + } + + if (pBroadcast != 0) + { + scpCount++; + } + + if (pApplication != 0) + { + scpCount++; + } + + if (scpCount != 0 && scpCount != 4) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Rev. 0 and SCP custom config are mutually exclusive + if (pForceRev0 != 0 && scpCount == 4) + { + if (*pForceRev0 != 0 && *pCustomSCP != 0) + { + return eGOBI_ERR_INVALID_ARG; + } + } + + sQMIRawContentHeader * pHeader; + ULONG offset = 0; + + // Need to start with SPC? + if (pForceRev0 != 0 || scpCount == 4) + { + // Validate arguments + if (pSPC == 0 || pSPC[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + std::string spc( pSPC ); + if (spc.size() > 6) + { + return eGOBI_ERR_INVALID_ARG; + } + + if (spc.find_first_not_of( "0123456789" ) != std::string::npos ) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx10Sz = sizeof( sNASSetNetworkParametersRequest_SPC ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sNASSetNetworkParametersRequest_SPC * pTLVx10; + pTLVx10 = (sNASSetNetworkParametersRequest_SPC*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the values + memcpy( &pTLVx10->mSPC[0], spc.c_str(), spc.size() ); + + offset += tlvx10Sz; + } + + // Force Rev. 0? + if (pForceRev0 != 0) + { + // Check size + WORD tlvx14Sz = sizeof( sNASSetNetworkParametersRequest_CDMA1xEVDORevision ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx14Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x14; + pHeader->mLength = tlvx14Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sNASSetNetworkParametersRequest_CDMA1xEVDORevision * pTLVx14; + pTLVx14 = (sNASSetNetworkParametersRequest_CDMA1xEVDORevision*)(pOut + offset); + memset( pTLVx14, 0, tlvx14Sz ); + + // Set the value + pTLVx14->mForceCDMA1xEVDORev0 = (*pForceRev0 == 0 ? 0 : 1); + + offset += tlvx14Sz; + } + + if (scpCount == 4) + { + // Check size + WORD tlvx15Sz = sizeof( sNASSetNetworkParametersRequest_CDMA1xEVDOSCPCustom ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx15Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x15; + pHeader->mLength = tlvx15Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sNASSetNetworkParametersRequest_CDMA1xEVDOSCPCustom * pTLVx15; + pTLVx15 = (sNASSetNetworkParametersRequest_CDMA1xEVDOSCPCustom*)(pOut + offset); + memset( pTLVx15, 0, tlvx15Sz ); + + // Set the values + pTLVx15->mCDMA1xEVDOSCPCustomConfig = (*pCustomSCP == 0 ? 0 : 1); + + // The pProtocol bitmask + pTLVx15->mSubtype2PhysicalLayer = (*pProtocol & 0x00000001 ? 1 : 0); + pTLVx15->mEnhancedCCMAC = (*pProtocol & 0x00000002 ? 1 : 0); + pTLVx15->mEnhancedACMAC = (*pProtocol & 0x00000004 ? 1 : 0); + pTLVx15->mEnhancedFTCMAC = (*pProtocol & 0x00000008 ? 1 : 0); + pTLVx15->mSubtype3RTCMAC = (*pProtocol & 0x00000010 ? 1 : 0); + pTLVx15->mSubtype1RTCMAC = (*pProtocol & 0x00000020 ? 1 : 0); + pTLVx15->mEnhancedIdle = (*pProtocol & 0x00000040 ? 1 : 0); + pTLVx15->mGenericMultimodeCapableDiscPort + = (*pProtocol & 0x00000080 ? 1 : 0); + + pTLVx15->mGenericBroadcast = (*pBroadcast & 0x00000001 ? 1 : 0); + + pTLVx15->mSNMultiflowPacketApplication + = (*pApplication & 0x00000001 ? 1 : 0); + + pTLVx15->mSNEnhancedMultiflowPacketApplication + = (*pApplication & 0x00000002 ? 1 : 0); + + offset += tlvx15Sz; + } + + if (pRoaming != 0) + { + // Check size + WORD tlvx16Sz = sizeof( sNASSetNetworkParametersRequest_Roaming ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx16Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x16; + pHeader->mLength = tlvx16Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sNASSetNetworkParametersRequest_Roaming * pTLVx16; + pTLVx16 = (sNASSetNetworkParametersRequest_Roaming*)(pOut + offset); + memset( pTLVx16, 0, tlvx16Sz ); + + // Set the values + pTLVx16->mRoamPreference = (eQMINASRoamingPreferences)*pRoaming; + + offset += tlvx16Sz; + } + + // At least one of the optional parameters must have been set + if (offset == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetCDMANetworkParameters + +DESCRIPTION: + This function gets the current CDMA network parameters + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pSCI [ O ] - Slot cycle index + pSCM [ O ] - Station class mark + pRegHomeSID [ O ] - Register on home SID? + pRegForeignSID [ O ] - Register on foreign SID? + pRegForeignNID [ O ] - Register on foreign NID? + pForceRev0 [ O ] - Force CDMA 1x-EV-DO Rev. 0 mode? + pCustomSCP [ O ] - Use a custom config for CDMA 1x-EV-DO SCP? + pProtocol [ O ] - Protocol mask for custom SCP config + pBroadcast [ O ] - Broadcast mask for custom SCP config + pApplication [ O ] - Application mask for custom SCP config + pRoaming [ O ] - Roaming preference + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetCDMANetworkParameters( + ULONG inLen, + const BYTE * pIn, + BYTE * pSCI, + BYTE * pSCM, + BYTE * pRegHomeSID, + BYTE * pRegForeignSID, + BYTE * pRegForeignNID, + BYTE * pForceRev0, + BYTE * pCustomSCP, + ULONG * pProtocol, + ULONG * pBroadcast, + ULONG * pApplication, + ULONG * pRoaming ) +{ + // Validate arguments + if (pIn == 0 + || pSCI == 0 + || pSCM == 0 + || pRegHomeSID == 0 + || pRegForeignSID == 0 + || pRegForeignNID == 0 + || pForceRev0 == 0 + || pCustomSCP == 0 + || pProtocol == 0 + || pBroadcast == 0 + || pApplication == 0 + || pRoaming == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + *pSCI = 0xff; + *pSCM = 0xff; + *pRegHomeSID = 0xff; + *pRegForeignSID = 0xff; + *pRegForeignNID = 0xff; + *pForceRev0 = 0xff; + *pCustomSCP = 0xff; + *pProtocol = 0xffffffff; + *pBroadcast = 0xffffffff; + *pApplication = 0xffffffff; + *pRoaming = 0xff; + + // Find the SCI + const sNASGetNetworkParametersResponse_SCI * pTLVx11; + ULONG outLenx11; + ULONG rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx11 < sizeof( sNASGetNetworkParametersResponse_SCI )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pSCI = pTLVx11->mSlotCycleIndex; + } + + // Find the SCM + const sNASGetNetworkParametersResponse_SCM * pTLVx12; + ULONG outLenx12; + rc = GetTLV( inLen, pIn, 0x12, &outLenx12, (const BYTE **)&pTLVx12 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx12 < sizeof( sNASGetNetworkParametersResponse_SCM )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pSCM = pTLVx12->mStationClassMark; + } + + // Find the Registration + const sNASGetNetworkParametersResponse_Registration * pTLVx13; + ULONG outLenx13; + rc = GetTLV( inLen, pIn, 0x13, &outLenx13, (const BYTE **)&pTLVx13 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx13 < sizeof( sNASGetNetworkParametersResponse_Registration )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pRegHomeSID = pTLVx13->mRegisterOnHomeSystem; + *pRegForeignSID = pTLVx13->mRegisterOnForeignSystem; + *pRegForeignNID = pTLVx13->mRegisterOnForeignNetwork; + } + + // Rev. 0? + const sNASGetNetworkParametersResponse_CDMA1xEVDORevision * pTLVx14; + ULONG outLenx14; + rc = GetTLV( inLen, pIn, 0x14, &outLenx14, (const BYTE **)&pTLVx14 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx14 < sizeof( sNASGetNetworkParametersResponse_CDMA1xEVDORevision )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pRegHomeSID = pTLVx14->mForceCDMA1xEVDORev0; + } + + // We're lazy, so we'll just typecast all the bitmask members from + // sNASGetNetworkParametersResponse_CDMA1xEVDOSCPCustom into their + // respective container parameters + const sEVDOCustomSCPConfig * pTLVx15; + ULONG outLenx15; + rc = GetTLV( inLen, pIn, 0x15, &outLenx15, (const BYTE **)&pTLVx15 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx15 < sizeof( sEVDOCustomSCPConfig )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pCustomSCP = pTLVx15->mbActive; + *pProtocol = pTLVx15->mProtocolMask; + *pBroadcast = pTLVx15->mBroadcastMask; + *pApplication = pTLVx15->mApplicationMask; + } + + // Roaming? + const sNASGetNetworkParametersResponse_Roaming * pTLVx16; + ULONG outLenx16; + rc = GetTLV( inLen, pIn, 0x16, &outLenx16, (const BYTE **)&pTLVx16 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx16 < sizeof( sNASGetNetworkParametersResponse_Roaming )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pRoaming = (eQMINASRoamingPreferences)pTLVx16->mRoamPreference; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetACCOLC + +DESCRIPTION: + This function returns the Access Overload Class (ACCOLC) of the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pACCOLC [ O ] - The ACCOLC + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetACCOLC( + ULONG inLen, + const BYTE * pIn, + BYTE * pACCOLC ) +{ + // Validate arguments + if (pIn == 0 || pACCOLC == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the ACCOLC (mandatory) + const sNASGetACCOLCResponse_ACCOLC * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sNASGetACCOLCResponse_ACCOLC )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pACCOLC = pTLVx01->mACCOLC; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetACCOLC + +DESCRIPTION: + This function sets the Access Overload Class (ACCOLC) of the device + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pSPC [ I ] - NULL terminated string representing the six digit + service programming code + accolc [ I ] - The ACCOLC + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetACCOLC( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC, + BYTE accolc ) +{ + // Validate arguments + if (pOut == 0 || pSPC == 0 || pSPC[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + std::string spc( pSPC ); + if (spc.size() > 6) + { + return eGOBI_ERR_INVALID_ARG; + } + + if (spc.find_first_not_of( "0123456789" ) != std::string::npos ) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sNASSetACCOLCRequest_ACCOLC ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sNASSetACCOLCRequest_ACCOLC * pTLVx01; + pTLVx01 = (sNASSetACCOLCRequest_ACCOLC*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + memcpy( &pTLVx01->mSPC[0], spc.c_str(), spc.size() ); + pTLVx01->mACCOLC = accolc; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetPLMNMode + +DESCRIPTION: + This function returns the PLMN mode from the CSP + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pMode [ O ] - PLMN mode + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetPLMNMode( + ULONG inLen, + const BYTE * pIn, + ULONG * pMode ) +{ + // Validate arguments + if (pIn == 0 || pMode == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the mode (mandatory) + const sNASGetCSPPLMNModeResponse_Mode * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx10 < sizeof( sNASGetCSPPLMNModeResponse_Mode )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pMode = pTLVx10->mRestrictManualPLMNSelection; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackGetPLMNName + +DESCRIPTION: + This function returns PLMN name information for the given MCC/MNC + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + mcc [ I ] - Mobile country code + mnc [ I ] - Mobile network code + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackGetPLMNName( + ULONG * pOutLen, + BYTE * pOut, + USHORT mcc, + USHORT mnc ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sNASGetPLMNNameRequest_PLMN ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sNASGetPLMNNameRequest_PLMN * pTLVx01; + pTLVx01 = (sNASGetPLMNNameRequest_PLMN*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mMobileCountryCode = mcc; + pTLVx01->mMobileNetworkCode = mnc; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetPLMNName + +DESCRIPTION: + This function returns PLMN name information for the given MCC/MNC + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pNamesSize [I/O] - Upon input the size in BYTEs of the name structure + array. Upon success the actual number of BYTEs + copied to the name structure array + pNames [ O ] - The name structure array + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetPLMNName( + ULONG inLen, + const BYTE * pIn, + ULONG * pNamesSize, + BYTE * pNames ) +{ + // Validate arguments + if (pIn == 0 || *pNamesSize == 0 || pNames == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + const BYTE * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // The output format just happens to be the same as + // sNASGetPLMNNameResponse_Name. Copy the full TLV to pNames + if (outLenx10 > *pNamesSize) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pNames, pTLVx10, outLenx10 ); + *pNamesSize = outLenx10; + + return eGOBI_ERR_NONE; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationOMA.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationOMA.cpp new file mode 100644 index 0000000..eba68c3 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationOMA.cpp @@ -0,0 +1,480 @@ +/*=========================================================================== +FILE: + Gobi3000TranslationOMA.cpp + +DESCRIPTION: + QUALCOMM Translation for Gobi 3000 (OMADM Service) + +Copyright (c) 2013, 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 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 "Gobi3000Translation.h" + +/*=========================================================================== +METHOD: + PackOMADMStartSession + +DESCRIPTION: + This function starts an OMA-DM session + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + sessionType [ I ] - Type of session to initiate + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackOMADMStartSession( + ULONG * pOutLen, + BYTE * pOut, + ULONG sessionType ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add sessionType + + // Check size + WORD tlvx10Sz = sizeof( sOMAStartSessionRequest_Type ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sOMAStartSessionRequest_Type * pTLVx10; + pTLVx10 = (sOMAStartSessionRequest_Type*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mSessionType = (eQMIOMASessionTypes)sessionType; + + offset += tlvx10Sz; + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseOMADMGetSessionInfo + +DESCRIPTION: + This function returns information related to the current (or previous + if no session is active) OMA-DM session + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + 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: + ULONG - Return code +===========================================================================*/ +ULONG ParseOMADMGetSessionInfo( + ULONG inLen, + const BYTE * pIn, + ULONG * pSessionState, + ULONG * pSessionType, + ULONG * pFailureReason, + BYTE * pRetryCount, + WORD * pSessionPause, + WORD * pTimeRemaining ) +{ + // Validate arguments + if (pIn == 0 || pSessionState == 0 || pSessionType == 0 + || pFailureReason == 0 || pRetryCount == 0 || pSessionPause == 0 + || pTimeRemaining == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the first TLV + const sOMAGetSessionInfoResponse_Info * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sOMAGetSessionInfoResponse_Info )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pSessionState = pTLVx10->mSessionState; + *pSessionType = pTLVx10->mSessionType; + + // Find the second TLV + const sOMAGetSessionInfoResponse_Failure * pTLVx11; + ULONG outLenx11; + rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx11 < sizeof( sOMAGetSessionInfoResponse_Failure )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pFailureReason = pTLVx11->mSessionFailure; + + // Find the third TLV + const sOMAGetSessionInfoResponse_Retry * pTLVx12; + ULONG outLenx12; + rc = GetTLV( inLen, pIn, 0x12, &outLenx12, (const BYTE **)&pTLVx12 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx12 < sizeof( sOMAGetSessionInfoResponse_Retry )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pRetryCount = pTLVx12->mRetryCount; + *pSessionPause = pTLVx12->mRetryPauseTimer; + *pTimeRemaining = pTLVx12->mRemainingTime; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseOMADMGetPendingNIA + +DESCRIPTION: + This function returns information about the pending network initiated + alert + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pSessionType [ O ] - Type of session + pSessionID [ O ] - Unique session ID + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseOMADMGetPendingNIA( + ULONG inLen, + const BYTE * pIn, + ULONG * pSessionType, + USHORT * pSessionID ) +{ + // Validate arguments + if (pIn == 0 || pSessionType == 0 || pSessionID == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sOMAGetSessionInfoResponse_NIA * pTLVx13; + ULONG outLenx13; + ULONG rc = GetTLV( inLen, pIn, 0x13, &outLenx13, (const BYTE **)&pTLVx13 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx13 < sizeof( sOMAGetSessionInfoResponse_NIA )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pSessionID = pTLVx13->mSessionID; + *pSessionType = pTLVx13->mSessionType; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackOMADMSendSelection + +DESCRIPTION: + This function sends the specified OMA-DM selection for the current + network initiated session + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + selection [ I ] - Selection + sessionID [ I ] - Unique session ID + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackOMADMSendSelection( + ULONG * pOutLen, + BYTE * pOut, + ULONG selection, + USHORT sessionID ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add selection and session ID + + // Check size + WORD tlvx10Sz = sizeof( sOMASendSelectionRequest_Type ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sOMASendSelectionRequest_Type * pTLVx10; + pTLVx10 = (sOMASendSelectionRequest_Type*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the values + pTLVx10->mSelection = (eQMIOMASelections)selection; + pTLVx10->mSessionID = sessionID; + + offset += tlvx10Sz; + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseOMADMGetFeatureSettings + +DESCRIPTION: + This function returns the OMA-DM feature settings + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pbProvisioning [ O ] - Device provisioning service update enabled + pbPRLUpdate [ O ] - PRL service update enabled + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseOMADMGetFeatureSettings( + ULONG inLen, + const BYTE * pIn, + ULONG * pbProvisioning, + ULONG * pbPRLUpdate ) +{ + // Validate arguments + if (pIn == 0 || pbProvisioning == 0 || pbPRLUpdate == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the first TLV + const sOMAGetFeaturesResponse_Provisioning * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sOMAGetFeaturesResponse_Provisioning )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pbProvisioning = pTLVx10->mDeviceProvisioningServiceUpdateEnabled; + + // Find the second TLV + const sOMAGetFeaturesResponse_PRLUpdate * pTLVx11; + ULONG outLenx11; + rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sOMAGetFeaturesResponse_PRLUpdate )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pbPRLUpdate = pTLVx11->mPRLServiceUpdateEnabled; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackOMADMSetProvisioningFeature + +DESCRIPTION: + This function sets the OMA-DM device provisioning service + update feature setting + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + bProvisioning [ I ] - Device provisioning service update enabled + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackOMADMSetProvisioningFeature( + ULONG * pOutLen, + BYTE * pOut, + ULONG bProvisioning ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add bProvisioning + + // Check size + WORD tlvx10Sz = sizeof( sOMASetFeaturesRequest_Provisioning ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sOMASetFeaturesRequest_Provisioning * pTLVx10; + pTLVx10 = (sOMASetFeaturesRequest_Provisioning*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mDeviceProvisioningServiceUpdateEnabled = (INT8)bProvisioning; + + offset += tlvx10Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackOMADMSetPRLUpdateFeature + +DESCRIPTION: + This function sets the OMA-DM PRL service update feature setting + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + bPRLUpdate [ I ] - PRL service update enabled + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackOMADMSetPRLUpdateFeature( + ULONG * pOutLen, + BYTE * pOut, + ULONG bPRLUpdate ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add bPRLUpdate + + // Check size + WORD tlvx11Sz = sizeof( sOMASetFeaturesRequest_PRLUpdate ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx11Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x11; + pHeader->mLength = tlvx11Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sOMASetFeaturesRequest_PRLUpdate * pTLVx11; + pTLVx11 = (sOMASetFeaturesRequest_PRLUpdate*)(pOut + offset); + memset( pTLVx11, 0, tlvx11Sz ); + + // Set the value + pTLVx11->mPRLServiceUpdateEnabled = (INT8)bPRLUpdate; + + offset += tlvx11Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationPDS.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationPDS.cpp new file mode 100644 index 0000000..e35e956 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationPDS.cpp @@ -0,0 +1,1206 @@ +/*=========================================================================== +FILE: + Gobi3000TranslationPDS.cpp + +DESCRIPTION: + QUALCOMM Translation for Gobi 3000 (Position Determination Service) + +Copyright (c) 2013, 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 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 "Gobi3000Translation.h" + +/*=========================================================================== +METHOD: + PackResetPDSData + +DESCRIPTION: + This function resets the specified PDS data + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pGPSDataMask [ I ] - Bitmask of GPS data to clear (optional) + pCellDataMask [ I ] - Bitmask of cell data to clear (optional) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackResetPDSData( + ULONG * pOutLen, + BYTE * pOut, + ULONG * pGPSDataMask, + ULONG * pCellDataMask ) +{ + // Validate arguments (at least one mask must be present) + if (pOut == 0 || (pGPSDataMask == 0 && pCellDataMask == 0)) + { + return eGOBI_ERR_INVALID_ARG; + } + + sQMIRawContentHeader * pHeader; + ULONG offset = 0; + + // Optionally add pGPSDataMask + if (pGPSDataMask != 0) + { + // Check size + WORD tlvx10Sz = sizeof( sPDSResetPDSDataRequest_GPSData ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + offset += sizeof( sQMIRawContentHeader ); + + sPDSResetPDSDataRequest_GPSData * pTLVx10; + pTLVx10 = (sPDSResetPDSDataRequest_GPSData*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Typecast the input over the bitmask + *(ULONG *)pTLVx10 = *pGPSDataMask; + offset += tlvx10Sz; + } + + // Optionally add pCellDataMask + if (pCellDataMask != 0) + { + // Check size + WORD tlvx11Sz = sizeof( sPDSResetPDSDataRequest_CellData ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx11Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x11; + pHeader->mLength = tlvx11Sz; + offset += sizeof( sQMIRawContentHeader ); + + sPDSResetPDSDataRequest_CellData * pTLVx11; + pTLVx11 = (sPDSResetPDSDataRequest_CellData*)(pOut + offset); + memset( pTLVx11, 0, tlvx11Sz ); + + // Typecast the input over the bitmask + *(ULONG *)pTLVx11 = *pCellDataMask; + offset += tlvx11Sz; + } + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetPortAutomaticTracking + +DESCRIPTION: + This function sets the automatic tracking configuration for the NMEA + COM port + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + bAuto [ I ] - Enable automatic tracking for NMEA COM port? + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetPortAutomaticTracking( + ULONG * pOutLen, + BYTE * pOut, + ULONG bAuto ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add bAuto + + // Check size + WORD tlvx01Sz = sizeof( sPDSSetCOMPortAutoTrackingConfigRequest_Config ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sPDSSetCOMPortAutoTrackingConfigRequest_Config * pTLVx01; + pTLVx01 = (sPDSSetCOMPortAutoTrackingConfigRequest_Config*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the value + pTLVx01->mAutoTrackingEnabled = (bAuto == 0 ? 0 : 1); + + offset += tlvx01Sz; + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetPortAutomaticTracking + +DESCRIPTION: + This function returns the automatic tracking configuration for the NMEA + COM port + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pbAuto [ O ] - Automatic tracking enabled for NMEA COM port? + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetPortAutomaticTracking( + ULONG inLen, + const BYTE * pIn, + ULONG * pbAuto ) +{ + // Validate arguments + if (pIn == 0 || pbAuto == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find pbAuto + const sPDSGetCOMPortAutoTrackingConfigResponse_Config * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sPDSGetCOMPortAutoTrackingConfigResponse_Config )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pbAuto = pTLVx01->mAutoTrackingEnabled; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetServiceAutomaticTracking + +DESCRIPTION: + This function sets the automatic tracking state for the service + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pbAuto [ I ] - Start automatic tracking session for service? + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetServiceAutomaticTracking( + ULONG * pOutLen, + BYTE * pOut, + ULONG bAuto ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add bAuto + + // Check size + WORD tlvx01Sz = sizeof( sPDSSetServiceAutoTrackingStateRequest_State ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sPDSSetServiceAutoTrackingStateRequest_State * pTLVx01; + pTLVx01 = (sPDSSetServiceAutoTrackingStateRequest_State*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the value + pTLVx01->mAutoTrackingEnabled = (bAuto == 0 ? 0 : 1); + + offset += tlvx01Sz; + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} +/*=========================================================================== +METHOD: + ParseGetServiceAutomaticTracking + +DESCRIPTION: + This function returns the automatic tracking state for the service + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pbAuto [ O ] - Automatic tracking session started for service? + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetServiceAutomaticTracking( + ULONG inLen, + const BYTE * pIn, + ULONG * pbAuto ) +{ + // Validate arguments + if (pIn == 0 || pbAuto == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find pbAuto + const sPDSGetServiceAutoTrackingStateResponse_State * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sPDSGetServiceAutoTrackingStateResponse_State )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pbAuto = pTLVx01->mAutoTrackingEnabled; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetAGPSConfig + +DESCRIPTION: + This function sets the PDS AGPS configuration + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + serverAddress [ I ] - IPv4 address of AGPS server + serverPort [ I ] - Port number of AGPS server + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetAGPSConfig( + ULONG * pOutLen, + BYTE * pOut, + ULONG serverAddress, + ULONG serverPort ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + + // Check size + WORD tlvx10Sz = sizeof( sPDSSetAGPSConfigRequest_Server ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sPDSSetAGPSConfigRequest_Server * pTLVx10; + pTLVx10 = (sPDSSetAGPSConfigRequest_Server*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + ULONG ip0 = (serverAddress & 0x000000FF); + ULONG ip1 = (serverAddress & 0x0000FF00) >> 8; + ULONG ip2 = (serverAddress & 0x00FF0000) >> 16; + ULONG ip3 = (serverAddress & 0xFF000000) >> 24; + + // Set the values + pTLVx10->mServerAddress[0] = (INT8)ip0; + pTLVx10->mServerAddress[1] = (INT8)ip1; + pTLVx10->mServerAddress[2] = (INT8)ip2; + pTLVx10->mServerAddress[3] = (INT8)ip3; + pTLVx10->mServerPort = serverPort; + + offset += tlvx10Sz; + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetAGPSConfig + +DESCRIPTION: + This function returns the PDS AGPS configuration + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pServerAddress [ O ] - IPv4 address of AGPS server + pServerPort [ O ] - Port number of AGPS server + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetAGPSConfig( + ULONG inLen, + const BYTE * pIn, + ULONG * pServerAddress, + ULONG * pServerPort ) +{ + // Validate arguments + if (pIn == 0 || pServerAddress == 0 || pServerPort == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find arguments + const sPDSGetAGPSConfigResponse_ServerAddress * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sPDSGetAGPSConfigResponse_ServerAddress )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pServerPort = pTLVx01->mServerPort; + + ULONG ip0 = (ULONG)pTLVx01->mServerAddress[0]; + ULONG ip1 = (ULONG)pTLVx01->mServerAddress[1] << 8; + ULONG ip2 = (ULONG)pTLVx01->mServerAddress[2] << 16; + ULONG ip3 = (ULONG)pTLVx01->mServerAddress[3] << 24; + *pServerAddress = (ip0 | ip1 | ip2 | ip3); + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetXTRATimeState + +DESCRIPTION: + This function sets the XTRA time positioning state + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + state [ I ] - XTRA time positioning state + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetXTRATimeState( + ULONG * pOutLen, + BYTE * pOut, + ULONG state ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add state + + // Check size + WORD tlvx10Sz = sizeof( sPDSSetPositionMethodsStateRequest_XTRATime ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sPDSSetPositionMethodsStateRequest_XTRATime * pTLVx10; + pTLVx10 = (sPDSSetPositionMethodsStateRequest_XTRATime*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mMethodState = (eQMIPDSMethodStates)state; + + offset += tlvx10Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetXTRATimeState + +DESCRIPTION: + This function returns the XTRA time positioning state + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pState [ O ] - XTRA time positioning state + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetXTRATimeState( + ULONG inLen, + const BYTE * pIn, + ULONG * pState ) +{ + // Validate arguments + if (pIn == 0 || pState == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find pState + const sPDSGetPositionMethodsStateResponse_XTRATime * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sPDSGetPositionMethodsStateResponse_XTRATime )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pState = pTLVx10->mMethodState; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetXTRADataState + +DESCRIPTION: + This function sets the XTRA data positioning state + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + state [ I ] - XTRA data positioning state + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetXTRADataState( + ULONG * pOutLen, + BYTE * pOut, + ULONG state ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add state + + // Check size + WORD tlvx10Sz = sizeof( sPDSSetPositionMethodsStateRequest_XTRAData ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sPDSSetPositionMethodsStateRequest_XTRAData * pTLVx10; + pTLVx10 = (sPDSSetPositionMethodsStateRequest_XTRAData*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mMethodState = (eQMIPDSMethodStates)state; + + offset += tlvx10Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetXTRADataState + +DESCRIPTION: + This function returns the XTRA data positioning state + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pState [ O ] - XTRA data positioning state + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetXTRADataState( + ULONG inLen, + const BYTE * pIn, + ULONG * pState ) +{ + // Validate arguments + if (pIn == 0 || pState == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find pState + const sPDSGetPositionMethodsStateResponse_XTRAData * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sPDSGetPositionMethodsStateResponse_XTRAData )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pState = pTLVx10->mMethodState; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetXTRAValidity + +DESCRIPTION: + This function returns the XTRA database validity period + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pGPSWeek [ O ] - Starting GPS week of validity period + pGPSWeekOffset [ O ] - Starting GPS week offset (minutes) of validity period + pDuration [ O ] - Length of validity period (hours) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetXTRAValidity( + ULONG inLen, + const BYTE * pIn, + USHORT * pGPSWeek, + USHORT * pGPSWeekOffset, + USHORT * pDuration ) +{ + // Validate arguments + if (pIn == 0 || pGPSWeek == 0 || pGPSWeekOffset == 0 || pDuration == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find arguments + const sPDSGetXTRAParametersResponse_Validity * pTLVx13; + ULONG outLenx13; + ULONG rc = GetTLV( inLen, pIn, 0x13, &outLenx13, (const BYTE **)&pTLVx13 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx13 < sizeof( sPDSGetXTRAParametersResponse_Validity )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pDuration = pTLVx13->mValidPeriodDurationInHours; + *pGPSWeek = pTLVx13->mValidPeriodGPSStartWeek; + *pGPSWeekOffset = pTLVx13->mValidPeriodGPSStartWeekOffsetInMinutes; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetXTRANetwork + +DESCRIPTION: + This function sets the XTRA WWAN network preference + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + preference [ I ] - XTRA WWAN network preference + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetXTRANetwork( + ULONG * pOutLen, + BYTE * pOut, + ULONG preference ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add preference + + // Check size + WORD tlvx12Sz = sizeof( sPDSSetXTRAParametersRequest_Network ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx12Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x12; + pHeader->mLength = tlvx12Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sPDSSetXTRAParametersRequest_Network * pTLVx12; + pTLVx12 = (sPDSSetXTRAParametersRequest_Network*)(pOut + offset); + memset( pTLVx12, 0, tlvx12Sz ); + + // Set the value + pTLVx12->mWWANNetworkPreference = (eQMIPDSWWANNetworkPreferences)preference; + + offset += tlvx12Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetXTRANetwork + +DESCRIPTION: + This function returns the XTRA WWAN network preference + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pPreference [ O ] - XTRA WWAN network preference + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetXTRANetwork( + ULONG inLen, + const BYTE * pIn, + ULONG * pPreference ) +{ + // Validate arguments + if (pIn == 0 || pPreference == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find pPreference + const sPDSGetXTRAParametersResponse_Network * pTLVx12; + ULONG outLenx12; + ULONG rc = GetTLV( inLen, pIn, 0x12, &outLenx12, (const BYTE **)&pTLVx12 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx12 < sizeof( sPDSGetXTRAParametersResponse_Network )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pPreference = pTLVx12->mWWANNetworkPreference; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetXTRAAutomaticDownload + +DESCRIPTION: + This function sets the XTRA automatic download configuration + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + bEnabled [ I ] - Automatic download enabled? + interval [ I ] - Interval (hours) between XTRA downloads + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetXTRAAutomaticDownload( + ULONG * pOutLen, + BYTE * pOut, + ULONG bEnabled, + USHORT interval ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + + // Check size + WORD tlvx10Sz = sizeof( sPDSSetXTRAParametersRequest_Automatic ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sPDSSetXTRAParametersRequest_Automatic * pTLVx10; + pTLVx10 = (sPDSSetXTRAParametersRequest_Automatic*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mAutomaticDownloadEnabled = (bEnabled == 0 ? 0 : 1); + pTLVx10->mDownloadIntervalInHours = interval; + + offset += tlvx10Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetXTRAAutomaticDownload + +DESCRIPTION: + This function returns the XTRA automatic download configuration + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pbEnabled [ O ] - Automatic download enabled? + pInterval [ O ] - Interval (hours) between XTRA downloads + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetXTRAAutomaticDownload( + ULONG inLen, + const BYTE * pIn, + ULONG * pbEnabled, + USHORT * pInterval ) +{ + // Validate arguments + if (pIn == 0 || pbEnabled == 0 || pInterval == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find arguments + const sPDSGetXTRAParametersResponse_Automatic * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sPDSGetXTRAParametersResponse_Automatic )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pbEnabled = pTLVx10->mAutomaticDownloadEnabled; + *pInterval = pTLVx10->mDownloadIntervalInHours; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetPDSState + +DESCRIPTION: + This function returns the current PDS state + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pEnabled [ O ] - Current PDS state (0 = disabled) + pTracking [ O ] - Current PDS tracking session state + + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetPDSState( + ULONG inLen, + const BYTE * pIn, + ULONG * pEnabled, + ULONG * pTracking ) +{ + // Validate arguments + if (pIn == 0 || pEnabled == 0 || pTracking == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find arguments + const sPDSGetServiceStateResponse_State * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sPDSGetServiceStateResponse_State )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pEnabled = pTLVx01->mServiceEnabled; + *pTracking = pTLVx01->mTrackingSessionState; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetPDSState + +DESCRIPTION: + This function sets the PDS state + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + enable [ I ] - Desired PDS state (0 = disable) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetPDSState( + ULONG * pOutLen, + BYTE * pOut, + ULONG enable ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add enable + + // Check size + WORD tlvx01Sz = sizeof( sPDSSetServiceStateRequest_State ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sPDSSetServiceStateRequest_State * pTLVx01; + pTLVx01 = (sPDSSetServiceStateRequest_State*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the value + pTLVx01->mServiceEnabled = (enable == 0 ? 0 : 1); + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackPDSInjectTimeReference + +DESCRIPTION: + This function injects a system time into the PDS engine + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + sysTime [ I ] - System time + sysDiscontinuities [ I ] - Number of system time discontinuities + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackPDSInjectTimeReference( + ULONG * pOutLen, + BYTE * pOut, + ULONGLONG systemTime, + USHORT systemDiscontinuities ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + + // Check size + WORD tlvx01Sz = sizeof( sPDSInjectTimeReferenceRequest_Time ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sPDSInjectTimeReferenceRequest_Time * pTLVx01; + pTLVx01 = (sPDSInjectTimeReferenceRequest_Time*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mSystemTimeMilliseconds = systemTime; + pTLVx01->mSystemDiscontinuties = systemDiscontinuities; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetPDSDefaults + +DESCRIPTION: + This function returns the default tracking session configuration + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOperation [ O ] - Current session operating mode + pTimeout [ O ] - Maximum amount of time (seconds) to work on each fix + pInterval [ O ] - Interval (milliseconds) between fix requests + pAccuracy [ O ] - Current accuracy threshold (meters) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetPDSDefaults( + ULONG inLen, + const BYTE * pIn, + ULONG * pOperation, + BYTE * pTimeout, + ULONG * pInterval, + ULONG * pAccuracy ) +{ + // Validate arguments + if (pIn == 0 || pOperation == 0 || pTimeout == 0 + || pInterval == 0 || pAccuracy == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find arguments + const sPDSGetDefaultsResponse_Defaults * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sPDSGetDefaultsResponse_Defaults )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pOperation = pTLVx01->mSessionOperation; + *pTimeout = pTLVx01->mTimeoutSeconds; + *pInterval = pTLVx01->mFixRequestIntervalSeconds; + *pAccuracy = pTLVx01->mDesiredAccuracyMeters; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetPDSDefaults + +DESCRIPTION: + This function sets the default tracking session configuration + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + operation [ I ] - Desired session operating mode + timeout [ I ] - Maximum amount of time (seconds) to work on each fix + interval [ I ] - Interval (milliseconds) between fix requests + accuracy [ I ] - Desired accuracy threshold (meters) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetPDSDefaults( + ULONG * pOutLen, + BYTE * pOut, + ULONG operation, + BYTE timeout, + ULONG interval, + ULONG accuracy ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + + // Check size + WORD tlvx01Sz = sizeof( sPDSSetDefaultsRequest_Defaults ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sPDSSetDefaultsRequest_Defaults * pTLVx01; + pTLVx01 = (sPDSSetDefaultsRequest_Defaults*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mDesiredAccuracyMeters = accuracy; + pTLVx01->mFixRequestIntervalSeconds = interval; + pTLVx01->mSessionOperation = (eQMIPDSOperationTypes)operation; + pTLVx01->mTimeoutSeconds = timeout; + + offset += tlvx01Sz; + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationRMS.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationRMS.cpp new file mode 100644 index 0000000..816521f --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationRMS.cpp @@ -0,0 +1,187 @@ +/*=========================================================================== +FILE: + Gobi3000TranslationRMS.cpp + +DESCRIPTION: + QUALCOMM Translation for Gobi 3000 (Remote Management Service) + +Copyright (c) 2013, 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 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 "Gobi3000Translation.h" + +/*=========================================================================== +METHOD: + ParseGetSMSWake + +DESCRIPTION: + This function queries the state of the SMS wake functionality + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pbEnabled [ O ] - SMS wake functionality enabled? + pWakeMask [ O ] - SMS wake mask (only relevant when enabled) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetSMSWake( + ULONG inLen, + const BYTE * pIn, + ULONG * pbEnabled, + ULONG * pWakeMask ) +{ + // Validate arguments + if (pIn == 0 || pbEnabled == 0 || pWakeMask == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the first TLV + const sRMSGetSMSWakeResponse_State * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sRMSGetSMSWakeResponse_State )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Find the second TLV + const sRMSGetSMSWakeRequest_Mask * pTLVx11; + ULONG outLenx11; + rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx11 < sizeof( sRMSGetSMSWakeRequest_Mask )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pbEnabled = pTLVx10->mSMSWakeEnabled; + *pWakeMask = pTLVx11->mMask; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetSMSWake + +DESCRIPTION: + This function enables/disables the SMS wake functionality + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + bEnable [ I ] - Enable SMS wake functionality? + wakeMask [ I ] - SMS wake mask (only relevant when enabling) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetSMSWake( + ULONG * pOutLen, + BYTE * pOut, + ULONG bEnable, + ULONG wakeMask ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add bEnable + + // Check size + WORD tlvx10Sz = sizeof( sRMSSetSMSWakeRequest_State ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sRMSSetSMSWakeRequest_State * pTLVx10; + pTLVx10 = (sRMSSetSMSWakeRequest_State*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mSMSWakeEnabled = (INT8)bEnable; + + offset += tlvx10Sz; + + // Add wakeMask if enabled + if (bEnable != 0) + { + // Check size + WORD tlvx11Sz = sizeof( sRMSSetSMSWakeRequest_Mask ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx11Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x11; + pHeader->mLength = tlvx11Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sRMSSetSMSWakeRequest_Mask * pTLVx11; + pTLVx11 = (sRMSSetSMSWakeRequest_Mask*)(pOut + offset); + memset( pTLVx11, 0, tlvx11Sz ); + + // Set the value + pTLVx11->mMask = wakeMask; + + offset += tlvx11Sz; + } + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationUIM.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationUIM.cpp new file mode 100644 index 0000000..6bce7ce --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationUIM.cpp @@ -0,0 +1,1169 @@ +/*=========================================================================== +FILE: + Gobi3000TranslationUIM.cpp + +DESCRIPTION: + QUALCOMM Translation for Gobi 3000 (DMS_UIM Service) + +Copyright (c) 2013, 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 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 "Gobi3000Translation.h" + +/*=========================================================================== +METHOD: + ParseUIMUnblockControlKey + +DESCRIPTION: + This function unblocks the specified facility control key + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pUnblockRetriesLeft [ O ] - The number of unblock retries left, after + which the control key will be permanently + blocked + (0xFFFFFFFF = unknown) +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseUIMUnblockControlKey( + ULONG inLen, + const BYTE * pIn, + ULONG * pUnblockRetriesLeft ) +{ + // Validate arguments + if (pIn == 0 || pUnblockRetriesLeft == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sDMSUIMUnblockControlKeyResponse_Status * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sDMSUIMUnblockControlKeyResponse_Status )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pUnblockRetriesLeft = pTLVx10->mRemainingUnblockRetries; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackUIMUnblockControlKey + +DESCRIPTION: + This function unblocks the specified facility control key + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + id [ I ] - Facility ID + pValue [ I ] - Control key de-personalization string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackUIMUnblockControlKey( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + CHAR * pValue ) +{ + // Validate arguments + if (pOut == 0 + || pValue == 0 + || pValue[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + std::string val( pValue ); + UINT8 valSz = (UINT8)val.size(); + + // Check size + WORD tlvx01Sz = sizeof( sDMSUIMUnblockControlKeyRequest_Facility ) + valSz; + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sDMSUIMUnblockControlKeyRequest_Facility * pTLVx01; + pTLVx01 = (sDMSUIMUnblockControlKeyRequest_Facility*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mFacility = (eQMIDMSUIMFacility)id; + pTLVx01->mControlKeyLength = valSz; + + offset += sizeof( sDMSUIMUnblockControlKeyRequest_Facility ); + + memcpy( (pOut + offset), (LPCSTR)val.c_str(), valSz ); + offset += valSz; + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseUIMSetControlKeyProtection + +DESCRIPTION: + This function changes the specified facility control key + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pVerifyRetriesLeft [ O ] - Upon operational failure this will indicate + the number of retries left, after which the + control key will be blocked + (0xFFFFFFFF = unknown) +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseUIMSetControlKeyProtection( + ULONG inLen, + const BYTE * pIn, + ULONG * pVerifyRetriesLeft ) +{ + // Validate arguments + if (pIn == 0 || pVerifyRetriesLeft == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sDMSUIMSetControlKeyProtectionResponse_Status * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sDMSUIMSetControlKeyProtectionResponse_Status )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pVerifyRetriesLeft = pTLVx10->mRemainingVerifyRetries; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackUIMSetControlKeyProtection + +DESCRIPTION: + This function changes the specified facility control key + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + id [ I ] - Facility ID + status [ I ] - Control key status + pValue [ I ] - Control key de-personalization string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackUIMSetControlKeyProtection( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + ULONG status, + CHAR * pValue ) +{ + // Validate arguments + if (pOut == 0 + || pValue == 0 + || pValue[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + std::string val( pValue ); + UINT8 valSz = (UINT8)val.size(); + + // Check size + WORD tlvx01Sz = sizeof( sDMSUIMSetControlKeyProtectionRequest_Facility ) + valSz; + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sDMSUIMSetControlKeyProtectionRequest_Facility * pTLVx01; + pTLVx01 = (sDMSUIMSetControlKeyProtectionRequest_Facility*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mFacility = (eQMIDMSUIMFacility)id; + pTLVx01->mFacilityState = (eQMIDMSUIMFacilityStates)status; + pTLVx01->mControlKeyLength = (UINT8)valSz; + + offset += sizeof( sDMSUIMSetControlKeyProtectionRequest_Facility ); + + memcpy( (pOut + offset), val.c_str(), valSz ); + offset += valSz; + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseUIMGetControlKeyBlockingStatus + +DESCRIPTION: + This function returns the status of the specified facility control key + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pStatus [ O ] - Control key status + pVerifyRetriesLeft [ O ] - The number of retries left, after which the + control key will be blocked + pUnblockRetriesLeft [ O ] - The number of unblock retries left, after + which the control key will be permanently + blocked + pbBlocking [ O ] - (Optional) Is the facility blocking? + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseUIMGetControlKeyBlockingStatus( + ULONG inLen, + const BYTE * pIn, + ULONG * pStatus, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft, + ULONG * pbBlocking ) +{ + // Validate arguments + if (pIn == 0 + || pStatus == 0 + || pVerifyRetriesLeft == 0 + || pUnblockRetriesLeft == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the first arguments + const sDMSUIMGetControlKeyStatusResponse_Status * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sDMSUIMGetControlKeyStatusResponse_Status )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pVerifyRetriesLeft = pTLVx01->mRemainingVerifyRetries; + *pUnblockRetriesLeft = pTLVx01->mRemainingUnblockRetries; + *pStatus = pTLVx01->mFacilityState; + + // Find the last (optional) argument + if (pbBlocking != 0) + { + const sDMSUIMGetControlKeyStatusResponse_Blocking * pTLVx10; + ULONG tlvLenx10; + rc = GetTLV( inLen, pIn, 0x10, &tlvLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (tlvLenx10 < sizeof( sDMSUIMGetControlKeyStatusResponse_Blocking )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pbBlocking = pTLVx10->mOperationBlocking; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackUIMGetControlKeyBlockingStatus + +DESCRIPTION: + This function returns the status of the specified facility control key + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + id [ I ] - Facility ID + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackUIMGetControlKeyBlockingStatus( + ULONG * pOutLen, + BYTE * pOut, + ULONG id ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add id + + // Check size + WORD tlvx01Sz = sizeof( sDMSUIMGetControlKeyStatusRequest_Facility ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sDMSUIMGetControlKeyStatusRequest_Facility * pTLVx01; + pTLVx01 = (sDMSUIMGetControlKeyStatusRequest_Facility*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mFacility = (eQMIDMSUIMFacility)id; + + offset += tlvx01Sz; + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseUIMGetControlKeyStatus + +DESCRIPTION: + This function returns the status of the specified facility control key + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pStatus [ O ] - Control key status + pVerifyRetriesLeft [ O ] - The number of retries left, after which the + control key will be blocked + pUnblockRetriesLeft [ O ] - The number of unblock retries left, after + which the control key will be permanently + blocked + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseUIMGetControlKeyStatus( + ULONG inLen, + const BYTE * pIn, + ULONG * pStatus, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ) +{ + // Validate arguments + if (pIn == 0 + || pStatus == 0 + || pVerifyRetriesLeft == 0 + || pUnblockRetriesLeft == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the arguments + const sDMSUIMGetControlKeyStatusResponse_Status * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sDMSUIMGetControlKeyStatusResponse_Status )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pVerifyRetriesLeft = pTLVx01->mRemainingVerifyRetries; + *pUnblockRetriesLeft = pTLVx01->mRemainingUnblockRetries; + *pStatus = pTLVx01->mFacilityState; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackUIMGetControlKeyStatus + +DESCRIPTION: + This function requests the status of the specified facility control key + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + id [ I ] - Facility ID + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackUIMGetControlKeyStatus( + ULONG * pOutLen, + BYTE * pOut, + ULONG id ) +{ + // Request is the same as PackUIMGetControlKeyBlockingStatus + return PackUIMGetControlKeyBlockingStatus( pOutLen, + pOut, + id ); +} + +/*=========================================================================== +METHOD: + ParseUIMGetICCID + +DESCRIPTION: + This function returns the UIM ICCID + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + stringSize [ I ] - The maximum number of characters (including NULL + terminator) that the string array can contain + pString [ O ] - NULL terminated string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseUIMGetICCID( + ULONG inLen, + const BYTE * pIn, + BYTE stringSize, + CHAR * pString ) +{ + // Validate arguments + if (pIn == 0 || stringSize == 0 || pString == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sDMSUIMGetICCIDResponse_ICCID * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sDMSUIMGetICCIDResponse_ICCID )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // The TLV only contains the string + + // Space to perform the copy? + if (stringSize < outLenx01 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pString, (const CHAR*)pTLVx01, outLenx01 ); + pString[outLenx01] = 0; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseUIMGetPINStatus + +DESCRIPTION: + This function returns the status of the pin + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + id [ I ] - PIN ID (1/2) + pStatus [ O ] - PIN status (0xFFFFFFFF = unknown) + pVerifyRetriesLeft [ O ] - The number of retries left, after which the + PIN will be blocked (0xFFFFFFFF = unknown) + pUnblockRetriesLeft [ O ] - The number of unblock retries left, after + which the PIN will be permanently blocked, + i.e. UIM is unusable (0xFFFFFFFF = unknown) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseUIMGetPINStatus( + ULONG inLen, + const BYTE * pIn, + ULONG id, + ULONG * pStatus, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ) +{ + // Validate arguments + if (pIn == 0 + || id < 1 + || id > 2 + || pStatus == 0 + || pVerifyRetriesLeft == 0 + || pUnblockRetriesLeft == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + ULONG tlvLen; + + // The typeID is either 0x11 or 0x12 + if (id == 1) + { + const sDMSUIMGetPINStatusResponse_PIN1Status * pTLV11; + ULONG rc = GetTLV( inLen, pIn, 0x11, &tlvLen, (const BYTE **)&pTLV11 ); + + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (tlvLen < sizeof( sDMSUIMGetPINStatusResponse_PIN1Status )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pVerifyRetriesLeft = pTLV11->mRemainingVerifyRetries; + *pUnblockRetriesLeft = pTLV11->mRemainingUnblockRetries; + *pStatus = pTLV11->mPINStatus; + } + else if (id == 2) + { + const sDMSUIMGetPINStatusResponse_PIN2Status * pTLV12; + ULONG rc = GetTLV( inLen, pIn, 0x12, &tlvLen, (const BYTE **)&pTLV12 ); + + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (tlvLen < sizeof( sDMSUIMGetPINStatusResponse_PIN2Status )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pVerifyRetriesLeft = pTLV12->mRemainingVerifyRetries; + *pUnblockRetriesLeft = pTLV12->mRemainingUnblockRetries; + *pStatus = pTLV12->mPINStatus; + } + else + { + return eGOBI_ERR_INVALID_ARG; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseUIMChangePIN + +DESCRIPTION: + This function changes the PIN value + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pVerifyRetriesLeft [ O ] - Upon operational failure this will indicate + the number of retries left, after which the + PIN will be blocked (0xFFFFFFFF = unknown) + pUnblockRetriesLeft [ O ] - Upon operational failure this will indicate + the number of unblock retries left, after + which the PIN will be permanently blocked, + i.e. UIM is unusable (0xFFFFFFFF = unknown) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseUIMChangePIN( + ULONG inLen, + const BYTE * pIn, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ) +{ + // Validate arguments + if (pIn == 0 || pVerifyRetriesLeft == 0 || pUnblockRetriesLeft == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sDMSUIMChangePINResponse_RetryInfo * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sDMSUIMChangePINResponse_RetryInfo )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pVerifyRetriesLeft = pTLVx10->mRemainingVerifyRetries; + *pUnblockRetriesLeft = pTLVx10->mRemainingUnblockRetries; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackUIMChangePIN + +DESCRIPTION: + This function changes the PIN value + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + id [ I ] - PIN ID (1/2) + pOldValue [ I ] - Old PIN value of the PIN to change + pNewValue [ I ] - New PIN value of the PIN to change + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackUIMChangePIN( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + CHAR * pOldValue, + CHAR * pNewValue ) +{ + // Validate arguments + if (pOut == 0 + || id < 1 + || id > 2 + || pOldValue == 0 + || pOldValue[0] == 0 + || pNewValue == 0 + || pNewValue[0] == 0 ) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + std::string oldVal( pOldValue ); + ULONG oldValSz = (ULONG)oldVal.size(); + std::string newVal( pNewValue ); + ULONG newValSz = (ULONG)newVal.size(); + + // Check size + WORD tlvx01Sz = sizeof( sDMSUIMChangePINRequest_Info ) + + (WORD)oldValSz + (WORD)newValSz; + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // First part of the TLV + sDMSUIMChangePINRequest_Info1 * pTLVx01_1; + pTLVx01_1 = (sDMSUIMChangePINRequest_Info1*)(pOut + offset); + memset( pTLVx01_1, 0, tlvx01Sz ); + + pTLVx01_1->mPINID = (UINT8)id; + pTLVx01_1->mOldPINLength = (UINT8)oldValSz; + offset += sizeof( sDMSUIMChangePINRequest_Info1 ); + + // mOldPINValue string + memcpy( (pOut + offset), oldVal.c_str(), oldValSz ); + offset += oldValSz; + + // Second part of the TLV + sDMSUIMChangePINRequest_Info2 * pTLVx01_2; + pTLVx01_2 = (sDMSUIMChangePINRequest_Info2*)(pOut + offset); + + pTLVx01_2->mNewPINLength = (UINT8)newValSz; + offset += sizeof( sDMSUIMChangePINRequest_Info2 ); + + // mNewPINValue string + memcpy( (pOut + offset), newVal.c_str(), newValSz ); + offset += newValSz; + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseUIMUnblockPIN + +DESCRIPTION: + This function unblocks a blocked PIN + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pVerifyRetriesLeft [ O ] - Upon operational failure this will indicate + the number of retries left, after which the + PIN will be blocked (0xFFFFFFFF = unknown) + pUnblockRetriesLeft [ O ] - Upon operational failure this will indicate + the number of unblock retries left, after + which the PIN will be permanently blocked, + i.e. UIM is unusable (0xFFFFFFFF = unknown) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseUIMUnblockPIN( + ULONG inLen, + const BYTE * pIn, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ) +{ + // Validate arguments + if (pIn == 0 || pVerifyRetriesLeft == 0 || pUnblockRetriesLeft == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sDMSUIMUnblockPINResponse_RetryInfo * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sDMSUIMUnblockPINResponse_RetryInfo )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pVerifyRetriesLeft = pTLVx10->mRemainingVerifyRetries; + *pUnblockRetriesLeft = pTLVx10->mRemainingUnblockRetries; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackUIMUnblockPIN + +DESCRIPTION: + This function unblocks a blocked PIN + +PARAMETERS: + id [ I ] - PIN ID (1/2) + pPUKValue [ I ] - PUK value of the PIN to unblock + pNewValue [ I ] - New PIN value of the PIN to unblock + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackUIMUnblockPIN( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + CHAR * pPUKValue, + CHAR * pNewValue ) +{ + // Validate arguments + if (pOut == 0 + || id < 1 + || id > 2 + || pPUKValue == 0 + || pPUKValue[0] == 0 + || pNewValue == 0 + || pNewValue[0] == 0 ) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + std::string oldVal( pPUKValue ); + ULONG oldValSz = (ULONG)oldVal.size(); + std::string newVal( pNewValue ); + ULONG newValSz = (ULONG)newVal.size(); + + // Check size + WORD tlvx01Sz = sizeof( sDMSUIMUnblockPINRequest_Info ) + + (WORD)oldValSz + (WORD)newValSz; + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // First part of the TLV + sDMSUIMUnblockPINRequest_Info1 * pTLVx01_1; + pTLVx01_1 = (sDMSUIMUnblockPINRequest_Info1*)(pOut + offset); + memset( pTLVx01_1, 0, tlvx01Sz ); + + pTLVx01_1->mPINID = (UINT8)id; + pTLVx01_1->mPUKLength = (UINT8)oldValSz; + offset += sizeof( sDMSUIMUnblockPINRequest_Info1 ); + + // mPUKValue string + memcpy( (pOut + offset), oldVal.c_str(), oldValSz ); + offset += oldValSz; + + // Second part of the TLV + sDMSUIMUnblockPINRequest_Info2 * pTLVx01_2; + pTLVx01_2 = (sDMSUIMUnblockPINRequest_Info2*)(pOut + offset); + + pTLVx01_2->mNewPINLength = (UINT8)newValSz; + offset += sizeof( sDMSUIMUnblockPINRequest_Info2 ); + + // mNewPINValue string + memcpy( (pOut + offset), newVal.c_str(), newValSz ); + offset += newValSz; + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseUIMVerifyPIN + +DESCRIPTION: + This function verifies the PIN before accessing the UIM contents + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pVerifyRetriesLeft [ O ] - Upon operational failure this will indicate + the number of retries left, after which the + PIN will be blocked (0xFFFFFFFF = unknown) + pUnblockRetriesLeft [ O ] - Upon operational failure this will indicate + the number of unblock retries left, after + which the PIN will be permanently blocked, + i.e. UIM is unusable (0xFFFFFFFF = unknown) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseUIMVerifyPIN( + ULONG inLen, + const BYTE * pIn, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ) +{ + // Validate arguments + if (pIn == 0 || pVerifyRetriesLeft == 0 || pUnblockRetriesLeft == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sDMSUIMVerifyPINResponse_RetryInfo * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sDMSUIMVerifyPINResponse_RetryInfo )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pVerifyRetriesLeft = pTLVx10->mRemainingVerifyRetries; + *pUnblockRetriesLeft = pTLVx10->mRemainingUnblockRetries; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackUIMVerifyPIN + +DESCRIPTION: + This function verifies the PIN before accessing the UIM contents + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + id [ I ] - PIN ID (1/2) + pValue [ I ] - PIN value of the PIN to verify + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackUIMVerifyPIN( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + CHAR * pValue ) +{ + // Validate arguments + if (pOut == 0 + || id < 1 + || id > 2 + || pValue == 0 + || pValue[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + std::string val( pValue ); + UINT8 valSz = (UINT8)val.size(); + + // Check size + WORD tlvx01Sz = sizeof( sDMSUIMVerifyPINRequest_Info ) + valSz; + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sDMSUIMVerifyPINRequest_Info * pTLVx01; + pTLVx01 = (sDMSUIMVerifyPINRequest_Info*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mPINID = (UINT8)id; + pTLVx01->mPINLength = valSz; + offset += sizeof( sDMSUIMVerifyPINRequest_Info ); + + // Add mPINValue + memcpy( (pOut + offset), val.c_str(), valSz ); + offset += valSz; + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseUIMSetPINProtection + +DESCRIPTION: + This function enables or disables protection of UIM contents by a + given PIN + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pVerifyRetriesLeft [ O ] - Upon operational failure this will indicate + the number of retries left, after which the + PIN will be blocked (0xFFFFFFFF = unknown) + pUnblockRetriesLeft [ O ] - Upon operational failure this will indicate + the number of unblock retries left, after + which the PIN will be permanently blocked, + i.e. UIM is unusable (0xFFFFFFFF = unknown) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseUIMSetPINProtection( + ULONG inLen, + const BYTE * pIn, + ULONG * pVerifyRetriesLeft, + ULONG * pUnblockRetriesLeft ) +{ + // Validate arguments + if (pIn == 0 || pVerifyRetriesLeft == 0 || pUnblockRetriesLeft == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sDMSUIMSetPINProtectionResponse_RetryInfo * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx10 < sizeof( sDMSUIMSetPINProtectionResponse_RetryInfo )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pVerifyRetriesLeft = pTLVx10->mRemainingVerifyRetries; + *pUnblockRetriesLeft = pTLVx10->mRemainingUnblockRetries; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackUIMSetPINProtection + +DESCRIPTION: + This function enables or disables protection of UIM contents by a + given PIN + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + id [ I ] - PIN ID (1/2) + bEnable [ I ] - Enable/disable PIN protection (0 = disable)? + pValue [ I ] - PIN value of the PIN to be enabled/disabled + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackUIMSetPINProtection( + ULONG * pOutLen, + BYTE * pOut, + ULONG id, + ULONG bEnable, + CHAR * pValue ) +{ + // Validate arguments + if (pOut == 0 + || id < 1 + || id > 2 + || pValue == 0 + || pValue[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add arguments + std::string val( pValue ); + ULONG valSz = (ULONG)val.size(); + + // Check size + WORD tlvx01Sz = sizeof( sDMSUIMSetPINProtectionRequest_Info ) + (WORD)valSz; + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sDMSUIMSetPINProtectionRequest_Info * pTLVx01; + pTLVx01 = (sDMSUIMSetPINProtectionRequest_Info*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mPINID = (UINT8)id; + pTLVx01->mPINEnabled = (bEnable == 0 ? 0 : 1); + pTLVx01->mPINLength = (UINT8)valSz; + + offset += sizeof( sDMSUIMSetPINProtectionRequest_Info ); + + // Add mPINValue + memcpy( (pOut + offset), val.c_str(), valSz ); + offset += valSz; + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationVoice.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationVoice.cpp new file mode 100644 index 0000000..866e168 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationVoice.cpp @@ -0,0 +1,173 @@ +/*=========================================================================== +FILE: + Gobi3000TranslationVoice.cpp + +DESCRIPTION: + QUALCOMM Translation for Gobi 3000 (Voice Service for USSD) + +Copyright (c) 2013, 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 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 "Gobi3000Translation.h" + +//--------------------------------------------------------------------------- +// Pragmas (pack structs) +//--------------------------------------------------------------------------- +#pragma pack( push, 1 ) + +/*=========================================================================*/ +// Struct sUSSDInfo +// Struct to represent USSD/Alpha information header +/*=========================================================================*/ +struct sUSSDInfoHdr +{ + public: + BYTE mDCS; + BYTE mLength; + + // Data of 'mLength' follows +}; + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma pack( pop ) + +/*=========================================================================== +METHOD: + PackOriginateUSSD + +DESCRIPTION: + This function initiates a USSD operation + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pInfo [ I ] - USSD information + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackOriginateUSSD( + ULONG * pOutLen, + BYTE * pOut, + BYTE * pInfo ) +{ + // Validate arguments + if (pOut == 0 || pInfo == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + const WORD INFO_HDR_SZ = sizeof( sUSSDInfoHdr ); + + // This assumes that pInfo is at least 2 bytes long + sUSSDInfoHdr * pInInfo = (sUSSDInfoHdr *)pInfo; + WORD infoLen = pInInfo->mLength + INFO_HDR_SZ; + + // Check size + if (*pOutLen < sizeof( sQMIRawContentHeader ) + infoLen) + { + return eGOBI_ERR_BUFFER_SZ; + } + + // Add pInfo + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = infoLen; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // No pTLVx01 since pInfo is our TLV + memcpy( (pOut + offset), pInfo, infoLen ); + + offset += infoLen; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackAnswerUSSD + +DESCRIPTION: + This function responds to a USSD request from the network + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pInfo [ I ] - USSD information + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackAnswerUSSD( + ULONG * pOutLen, + BYTE * pOut, + BYTE * pInfo ) +{ + // Validate arguments + if (pOut == 0 || pInfo == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + const WORD INFO_HDR_SZ = sizeof( sUSSDInfoHdr ); + + // This assumes that pInfo is at least 2 bytes long + sUSSDInfoHdr * pInInfo = (sUSSDInfoHdr *)pInfo; + WORD infoLen = pInInfo->mLength + INFO_HDR_SZ; + + // Check size + if (*pOutLen < sizeof( sQMIRawContentHeader ) + infoLen) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = infoLen; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // No pTLVx01 since pInfo is our TLV + memcpy( (pOut + offset), pInfo, infoLen ); + + offset += infoLen; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationWDS.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationWDS.cpp new file mode 100644 index 0000000..e6c7cd2 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationWDS.cpp @@ -0,0 +1,3485 @@ +/*=========================================================================== +FILE: + Gobi3000TranslationWDS.cpp + +DESCRIPTION: + QUALCOMM Translation for Gobi 3000 (WDS Service) + +Copyright (c) 2013, 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 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 "Gobi3000Translation.h" + +/*=========================================================================== +METHOD: + ParseGetSessionState + +DESCRIPTION: + This function returns the state of the current packet data session + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pState [ O ] - State of the current packet session + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetSessionState( + ULONG inLen, + const BYTE * pIn, + ULONG * pState ) +{ + // Validate arguments + if (pIn == 0 || pState == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sWDSGetPacketServiceStatusResponse_Status * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sWDSGetPacketServiceStatusResponse_Status )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pState = pTLVx01->mConnectionStatus; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetSessionDuration + +DESCRIPTION: + This function returns the duration of the current packet data session + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pDuration [ O ] - Duration of the current packet session + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetSessionDuration( + ULONG inLen, + const BYTE * pIn, + ULONGLONG * pDuration ) +{ + // Validate arguments + if (pIn == 0 || pDuration == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sWDSGetDataSessionDurationResponse_Duration * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sWDSGetDataSessionDurationResponse_Duration )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pDuration = pTLVx01->mDataSessionDuration; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetDormancyState + +DESCRIPTION: + This function returns the dormancy state of the current packet + data session (when connected) + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pState [ O ] - Dormancy state of the current packet session + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetDormancyState( + ULONG inLen, + const BYTE * pIn, + ULONG * pState ) +{ + // Validate arguments + if (pIn == 0 || pState == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sWDSGetDormancyResponse_DormancyStatus * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sWDSGetDormancyResponse_DormancyStatus )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pState = pTLVx01->mDormancyStatus; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetEnhancedAutoconnect + +DESCRIPTION: + This function returns the current autoconnect data session setting + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pSetting [ O ] - NDIS autoconnect setting + pRoamSetting [ O ] - NDIS autoconnect roam setting + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetEnhancedAutoconnect( + ULONG inLen, + const BYTE * pIn, + ULONG * pSetting, + ULONG * pRoamSetting ) +{ + // Validate arguments + if (pIn == 0 || pSetting == 0 || pRoamSetting == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + *pSetting = 0xffffffff; + *pRoamSetting = 0xffffffff; + + // Find the first TLV + const sWDSGetAutoconnectSettingResponse_Autoconnect * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sWDSGetAutoconnectSettingResponse_Autoconnect )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pSetting = pTLVx01->mAutoconnectSetting; + + // Find the second TLV (optional) + const sWDSGetAutoconnectSettingResponse_Roam * pTLVx10; + ULONG outLenx10; + rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + // Is the TLV large enough? + if (outLenx10 < sizeof( sWDSGetAutoconnectSettingResponse_Roam )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pRoamSetting = pTLVx10->mAutoconnectRoamSetting; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetEnhancedAutoconnect + +DESCRIPTION: + This function sets the autoconnect data session setting + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + setting [ I ] - NDIS autoconnect setting + pRoamSetting [ I ] - (Optional) NDIS autoconnect roam setting + + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetEnhancedAutoconnect( + ULONG * pOutLen, + BYTE * pOut, + ULONG setting, + ULONG * pRoamSetting ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add setting + + // Check size + WORD tlvx01Sz = sizeof( sWDSSetAutoconnectSettingRequest_Autoconnect ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSSetAutoconnectSettingRequest_Autoconnect * pTLVx01; + pTLVx01 = (sWDSSetAutoconnectSettingRequest_Autoconnect*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the value + pTLVx01->mAutoconnectSetting = (eQMIWDSAutoconnectSettings)setting; + + offset += tlvx01Sz; + + // Add roam setting, if specified + if (pRoamSetting != 0) + { + // Check size + WORD tlvx10Sz = sizeof( sWDSSetAutoconnectSettingRequest_Roam ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetAutoconnectSettingRequest_Roam * pTLVx10; + pTLVx10 = (sWDSSetAutoconnectSettingRequest_Roam*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mAutoconnectRoamSetting = (eQMIWDSAutoconnectRoamSettings)*pRoamSetting; + + offset += tlvx10Sz; + } + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetDefaultProfile + +DESCRIPTION: + This function writes the default profile settings to the device, the + default profile is used during autoconnect + + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + profileType [ I ] - Profile type being written + pPDPType [ I ] - (Optional) PDP type + pIPAddress [ I ] - (Optional) Preferred assigned IPv4 address + pPrimaryDNS [ I ] - (Optional) Primary DNS IPv4 address + pSecondaryDNS [ I ] - (Optional) Secondary DNS IPv4 address + pAuthentication [ I ] - (Optional) Authentication algorithm bitmap + pName [ I ] - (Optional) The profile name or description + pAPNName [ I ] - (Optional) Access point name + pUsername [ I ] - (Optional) Username used during authentication + pPassword [ I ] - (Optional) Password used during authentication + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetDefaultProfile( + ULONG * pOutLen, + BYTE * pOut, + ULONG profileType, + ULONG * pPDPType, + ULONG * pIPAddress, + ULONG * pPrimaryDNS, + ULONG * pSecondaryDNS, + ULONG * pAuthentication, + CHAR * pName, + CHAR * pAPNName, + CHAR * pUsername, + CHAR * pPassword ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add profileType + + // Check size + WORD tlvx01Sz = sizeof( sWDSModifyProfileRequest_ProfileIdentifier ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSModifyProfileRequest_ProfileIdentifier * pTLVx01; + pTLVx01 = (sWDSModifyProfileRequest_ProfileIdentifier*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the value + pTLVx01->mProfileType = (eQMIProfileTypes)profileType; + pTLVx01->mProfileIndex = 1; + + offset += tlvx01Sz; + + // Add name, if specified + if (pName != 0) + { + std::string name( pName ); + + // Check size + WORD tlvx10Sz = (WORD)name.size(); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + offset += sizeof( sQMIRawContentHeader ); + + // Set the value + memcpy( pOut + offset, name.c_str(), name.size() ); + + offset += tlvx10Sz; + } + + // Add PDP type, if specified + if (pPDPType != 0) + { + // Check size + WORD tlvx11Sz = sizeof( sWDSModifyProfileRequest_PDPType ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx11Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x11; + pHeader->mLength = tlvx11Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSModifyProfileRequest_PDPType * pTLVx11; + pTLVx11 = (sWDSModifyProfileRequest_PDPType*)(pOut + offset); + memset( pTLVx11, 0, tlvx11Sz ); + + // Set the value + pTLVx11->mPDPType = (eQMIPDPTypes)*pPDPType; + + offset += tlvx11Sz; + } + + // Add APN Name, if specified + if (pAPNName != 0) + { + std::string apnName( pAPNName ); + + // Check size + WORD tlvx14Sz = (WORD)apnName.size(); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx14Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x14; + pHeader->mLength = tlvx14Sz; + + offset += sizeof( sQMIRawContentHeader ); + + // Set the value + memcpy( (pOut + offset), apnName.c_str(), apnName.size() ); + + offset += tlvx14Sz; + } + + // Add Primary DNS, if specified + if (pPrimaryDNS != 0) + { + // Check size + WORD tlvx15Sz = sizeof( sWDSModifyProfileRequest_PrimaryDNS ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx15Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x15; + pHeader->mLength = tlvx15Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSModifyProfileRequest_PrimaryDNS * pTLVx15; + pTLVx15 = (sWDSModifyProfileRequest_PrimaryDNS*)(pOut + offset); + memset( pTLVx15, 0, tlvx15Sz ); + + ULONG ip0 = (*pPrimaryDNS & 0x000000FF); + ULONG ip1 = (*pPrimaryDNS & 0x0000FF00) >> 8; + ULONG ip2 = (*pPrimaryDNS & 0x00FF0000) >> 16; + ULONG ip3 = (*pPrimaryDNS & 0xFF000000) >> 24; + + // Set the value + pTLVx15->mIPV4Address[0] = (INT8)ip0; + pTLVx15->mIPV4Address[1] = (INT8)ip1; + pTLVx15->mIPV4Address[2] = (INT8)ip2; + pTLVx15->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx15Sz; + } + + // Add Secondary DNS, if specified + if (pSecondaryDNS != 0) + { + // Check size + WORD tlvx16Sz = sizeof( sWDSModifyProfileRequest_SecondaryDNS ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx16Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x16; + pHeader->mLength = tlvx16Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSModifyProfileRequest_SecondaryDNS * pTLVx16; + pTLVx16 = (sWDSModifyProfileRequest_SecondaryDNS*)(pOut + offset); + memset( pTLVx16, 0, tlvx16Sz ); + + ULONG ip0 = (*pSecondaryDNS & 0x000000FF); + ULONG ip1 = (*pSecondaryDNS & 0x0000FF00) >> 8; + ULONG ip2 = (*pSecondaryDNS & 0x00FF0000) >> 16; + ULONG ip3 = (*pSecondaryDNS & 0xFF000000) >> 24; + + // Set the value + pTLVx16->mIPV4Address[0] = (INT8)ip0; + pTLVx16->mIPV4Address[1] = (INT8)ip1; + pTLVx16->mIPV4Address[2] = (INT8)ip2; + pTLVx16->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx16Sz; + } + + // Add Username, if specified + if (pUsername != 0) + { + std::string username( pUsername ); + + // Check size + WORD tlvx1BSz = (WORD)username.size(); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx1BSz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x1B; + pHeader->mLength = tlvx1BSz; + + offset += sizeof( sQMIRawContentHeader ); + + // Set the value + memcpy( (pOut + offset), username.c_str(), username.size() ); + + offset += tlvx1BSz; + } + + // Add Password, if specified + if (pPassword != 0) + { + std::string password( pPassword ); + + // Check size + WORD tlvx1CSz = (WORD)password.size(); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx1CSz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x1C; + pHeader->mLength = tlvx1CSz; + + offset += sizeof( sQMIRawContentHeader ); + + // Set the value + memcpy( (pOut + offset), password.c_str(), password.size() ); + + offset += tlvx1CSz; + } + + // Add Authentication, if specified + if (pAuthentication != 0) + { + // Check size + WORD tlvx1DSz = sizeof( sWDSModifyProfileRequest_Authentication ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx1DSz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x1D; + pHeader->mLength = tlvx1DSz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSModifyProfileRequest_Authentication * pTLVx1D; + pTLVx1D = (sWDSModifyProfileRequest_Authentication*)(pOut + offset); + memset( pTLVx1D, 0, tlvx1DSz ); + + // Set the value + pTLVx1D->mEnablePAP = ((*pAuthentication & 0x00000001) != 0); + pTLVx1D->mEnableCHAP = ((*pAuthentication & 0x00000002) != 0); + + offset += tlvx1DSz; + } + + // Add IP Address, if specified + if (pIPAddress != 0) + { + // Check size + WORD tlvx1ESz = sizeof( sWDSModifyProfileRequest_IPAddress ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx1ESz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x1E; + pHeader->mLength = tlvx1ESz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSModifyProfileRequest_IPAddress * pTLVx1E; + pTLVx1E = (sWDSModifyProfileRequest_IPAddress*)(pOut + offset); + memset( pTLVx1E, 0, tlvx1ESz ); + + ULONG ip0 = (*pIPAddress & 0x000000FF); + ULONG ip1 = (*pIPAddress & 0x0000FF00) >> 8; + ULONG ip2 = (*pIPAddress & 0x00FF0000) >> 16; + ULONG ip3 = (*pIPAddress & 0xFF000000) >> 24; + + // Set the value + pTLVx1E->mIPV4Address[0] = (INT8)ip0; + pTLVx1E->mIPV4Address[1] = (INT8)ip1; + pTLVx1E->mIPV4Address[2] = (INT8)ip2; + pTLVx1E->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx1ESz; + } + + // At least one of the optional parameters must have been set + if (offset <= sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_INVALID_ARG; + } + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackGetDefaultProfile + +DESCRIPTION: + This function reads the default profile settings from the device, the + default profile is used during autoconnect + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + profileType [ I ] - Profile type being read + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackGetDefaultProfile( + ULONG * pOutLen, + BYTE * pOut, + ULONG profileType ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add profileType + + // Check size + WORD tlvx01Sz = sizeof( sWDSGetDefaultSettingsRequest_ProfileType ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSGetDefaultSettingsRequest_ProfileType * pTLVx01; + pTLVx01 = (sWDSGetDefaultSettingsRequest_ProfileType*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the value + pTLVx01->mProfileType = (eQMIProfileTypes)profileType; + + offset += tlvx01Sz; + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetDefaultProfile + +DESCRIPTION: + This function reads the default profile settings from the device, the + default profile is used during autoconnect + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pPDPType [ O ] - PDP type + pIPAddress [ O ] - Preferred assigned IPv4 address + pPrimaryDNS [ O ] - Primary DNS IPv4 address + pSecondaryDNS [ O ] - Secondary DNS IPv4 address + pAuthentication [ O ] - Authentication algorithm bitmap + nameSize [ I ] - The maximum number of characters (including + NULL terminator) that the profile name array + can contain + pName [ O ] - The profile name or description + apnSize [ I ] - The maximum number of characters (including + NULL terminator) that the APN name array + can contain + pAPNName [ O ] - Access point name represented as a NULL + terminated string (empty string returned when + unknown) + userSize [ I ] - The maximum number of characters (including + NULL terminator) that the username array + can contain + pUsername [ O ] - Username used during authentication + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetDefaultProfile( + ULONG inLen, + const BYTE * pIn, + ULONG * pPDPType, + ULONG * pIPAddress, + ULONG * pPrimaryDNS, + ULONG * pSecondaryDNS, + ULONG * pAuthentication, + BYTE nameSize, + CHAR * pName, + BYTE apnSize, + CHAR * pAPNName, + BYTE userSize, + CHAR * pUsername ) +{ + // Validate arguments + if (pIn == 0 + || pPDPType == 0 + || pIPAddress == 0 + || pPrimaryDNS == 0 + || pSecondaryDNS == 0 + || pAuthentication == 0 + || nameSize == 0 + || pName == 0 + || apnSize == 0 + || pAPNName == 0 + || userSize == 0 + || pUsername == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Set defaults + *pPDPType = 0xffffffff; + *pIPAddress = 0xffffffff; + *pPrimaryDNS = 0xffffffff; + *pSecondaryDNS = 0xffffffff; + *pAuthentication = 0xffffffff; + pName[0] = 0; + pAPNName[0] = 0; + pUsername[0] = 0; + + // Find the name + const sWDSGetDefaultSettingsResponse_ProfileName * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + if (nameSize < outLenx10 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pName, (const BYTE *)pTLVx10, outLenx10 ); + + // Null terminate + pName[outLenx10] = 0; + } + + // Find the PDP type + const sWDSGetDefaultSettingsResponse_PDPType * pTLVx11; + ULONG outLenx11; + rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx11 < sizeof( sWDSGetDefaultSettingsResponse_PDPType )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pPDPType = pTLVx11->mPDPType; + } + + // Find the APN name + const sWDSGetDefaultSettingsResponse_APNName * pTLVx14; + ULONG outLenx14; + rc = GetTLV( inLen, pIn, 0x14, &outLenx14, (const BYTE **)&pTLVx14 ); + if (rc == eGOBI_ERR_NONE) + { + if (apnSize < outLenx14 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pAPNName, (const BYTE *)pTLVx14, outLenx14 ); + + // Null terminate + pAPNName[outLenx14] = 0; + } + + // Find the Primary DNS + const sWDSGetDefaultSettingsResponse_PrimaryDNS * pTLVx15; + ULONG outLenx15; + rc = GetTLV( inLen, pIn, 0x15, &outLenx15, (const BYTE **)&pTLVx15 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx15 < sizeof( sWDSGetDefaultSettingsResponse_PrimaryDNS )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG ip0 = pTLVx15->mIPV4Address[0]; + ULONG ip1 = pTLVx15->mIPV4Address[1] << 8; + ULONG ip2 = pTLVx15->mIPV4Address[2] << 16; + ULONG ip3 = pTLVx15->mIPV4Address[3] << 24; + + *pPrimaryDNS = (ip0 | ip1 | ip2 | ip3); + } + + // Find the Secondary DNS + const sWDSGetDefaultSettingsResponse_SecondaryDNS * pTLVx16; + ULONG outLenx16; + rc = GetTLV( inLen, pIn, 0x16, &outLenx16, (const BYTE **)&pTLVx16 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx16 < sizeof( sWDSGetDefaultSettingsResponse_SecondaryDNS )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG ip0 = pTLVx16->mIPV4Address[0]; + ULONG ip1 = pTLVx16->mIPV4Address[1] << 8; + ULONG ip2 = pTLVx16->mIPV4Address[2] << 16; + ULONG ip3 = pTLVx16->mIPV4Address[3] << 24; + + *pSecondaryDNS = (ip0 | ip1 | ip2 | ip3); + } + + // Find the Username + const sWDSGetDefaultSettingsResponse_APNName * pTLVx1B; + ULONG outLenx1B; + rc = GetTLV( inLen, pIn, 0x1B, &outLenx1B, (const BYTE **)&pTLVx1B ); + if (rc == eGOBI_ERR_NONE) + { + if (userSize < outLenx1B + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pAPNName, (const BYTE *)pTLVx1B, outLenx1B ); + + // Null terminate + pAPNName[outLenx1B] = 0; + } + + // Find the Authentication + const sWDSGetDefaultSettingsResponse_Authentication * pTLVx1D; + ULONG outLenx1D; + rc = GetTLV( inLen, pIn, 0x1D, &outLenx1D, (const BYTE **)&pTLVx1D ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx1D < sizeof( sWDSGetDefaultSettingsResponse_Authentication )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG pap = pTLVx1D->mEnablePAP; + ULONG chap = pTLVx1D->mEnableCHAP << 1; + + *pAuthentication = (pap | chap); + } + + // Find the IP Address + const sWDSGetDefaultSettingsResponse_IPAddress * pTLVx1E; + ULONG outLenx1E; + rc = GetTLV( inLen, pIn, 0x1E, &outLenx1E, (const BYTE **)&pTLVx1E ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx1E < sizeof( sWDSGetDefaultSettingsResponse_IPAddress )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG ip0 = pTLVx1E->mIPV4Address[0]; + ULONG ip1 = pTLVx1E->mIPV4Address[1] << 8; + ULONG ip2 = pTLVx1E->mIPV4Address[2] << 16; + ULONG ip3 = pTLVx1E->mIPV4Address[3] << 24; + + *pIPAddress = (ip0 | ip1 | ip2 | ip3); + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackStartDataSession + +DESCRIPTION: + This function activates a packet data session + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pTechnology [ I ] - (Optional) Technology bitmap + pPrimaryDNS [ I ] - (Optional) Primary DNS IPv4 address + pSecondaryDNS [ I ] - (Optional) Secondary DNS IPv4 address + pPrimaryNBNS [ I ] - (Optional) Primary NetBIOS NS IPv4 address + pSecondaryNBNS [ I ] - (Optional) Secondary NetBIOS NS IPv4 address + pAPNName [ I ] - (Optional) Access point name + pIPAddress [ I ] - (Optional) Preferred assigned IPv4 address + pAuthentication [ I ] - (Optional) Authentication algorithm bitmap + pUsername [ I ] - (Optional) Username used during authentication + pPassword [ I ] - (Optional) Password used during authentication + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackStartDataSession( + ULONG * pOutLen, + BYTE * pOut, + ULONG * pTechnology, + ULONG * pPrimaryDNS, + ULONG * pSecondaryDNS, + ULONG * pPrimaryNBNS, + ULONG * pSecondaryNBNS, + CHAR * pAPNName, + ULONG * pIPAddress, + ULONG * pAuthentication, + CHAR * pUsername, + CHAR * pPassword ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + sQMIRawContentHeader * pHeader; + ULONG offset = 0; + + // Add technology, if specified + if (pTechnology != 0) + { + // Check size + WORD tlvx30Sz = sizeof( sWDSStartNetworkInterfaceRequest_TechnologyPreference ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx30Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x30; + pHeader->mLength = tlvx30Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSStartNetworkInterfaceRequest_TechnologyPreference * pTLVx30; + pTLVx30 = (sWDSStartNetworkInterfaceRequest_TechnologyPreference*)(pOut + offset); + memset( pTLVx30, 0, tlvx30Sz ); + + // Set the value + pTLVx30->mEnable3GPP = ((*pTechnology & 0x00000001) != 0); + pTLVx30->mEnable3GPP2 = ((*pTechnology & 0x00000002) != 0); + + offset += tlvx30Sz; + } + + // Add Primary DNS, if specified + if (pPrimaryDNS != 0) + { + // Check size + WORD tlvx10Sz = sizeof( sWDSStartNetworkInterfaceRequest_PrimaryDNS ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSStartNetworkInterfaceRequest_PrimaryDNS * pTLVx10; + pTLVx10 = (sWDSStartNetworkInterfaceRequest_PrimaryDNS*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + ULONG ip0 = (*pPrimaryDNS & 0x000000FF); + ULONG ip1 = (*pPrimaryDNS & 0x0000FF00) >> 8; + ULONG ip2 = (*pPrimaryDNS & 0x00FF0000) >> 16; + ULONG ip3 = (*pPrimaryDNS & 0xFF000000) >> 24; + + // Set the value + pTLVx10->mIPV4Address[0] = (INT8)ip0; + pTLVx10->mIPV4Address[1] = (INT8)ip1; + pTLVx10->mIPV4Address[2] = (INT8)ip2; + pTLVx10->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx10Sz; + } + + // Add Secondary DNS, if specified + if (pSecondaryDNS != 0) + { + // Check size + WORD tlvx11Sz = sizeof( sWDSStartNetworkInterfaceRequest_SecondaryDNS ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx11Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x11; + pHeader->mLength = tlvx11Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSStartNetworkInterfaceRequest_SecondaryDNS * pTLVx11; + pTLVx11 = (sWDSStartNetworkInterfaceRequest_SecondaryDNS*)(pOut + offset); + memset( pTLVx11, 0, tlvx11Sz ); + + ULONG ip0 = (*pSecondaryDNS & 0x000000FF); + ULONG ip1 = (*pSecondaryDNS & 0x0000FF00) >> 8; + ULONG ip2 = (*pSecondaryDNS & 0x00FF0000) >> 16; + ULONG ip3 = (*pSecondaryDNS & 0xFF000000) >> 24; + + // Set the value + pTLVx11->mIPV4Address[0] = (INT8)ip0; + pTLVx11->mIPV4Address[1] = (INT8)ip1; + pTLVx11->mIPV4Address[2] = (INT8)ip2; + pTLVx11->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx11Sz; + } + + // Add Primary NBNS, if specified + if (pPrimaryNBNS != 0) + { + // Check size + WORD tlvx12Sz = sizeof( sWDSStartNetworkInterfaceRequest_PrimaryNBNS ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx12Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x12; + pHeader->mLength = tlvx12Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSStartNetworkInterfaceRequest_PrimaryNBNS * pTLVx12; + pTLVx12 = (sWDSStartNetworkInterfaceRequest_PrimaryNBNS*)(pOut + offset); + memset( pTLVx12, 0, tlvx12Sz ); + + ULONG ip0 = (*pPrimaryNBNS & 0x000000FF); + ULONG ip1 = (*pPrimaryNBNS & 0x0000FF00) >> 8; + ULONG ip2 = (*pPrimaryNBNS & 0x00FF0000) >> 16; + ULONG ip3 = (*pPrimaryNBNS & 0xFF000000) >> 24; + + // Set the value + pTLVx12->mIPV4Address[0] = (INT8)ip0; + pTLVx12->mIPV4Address[1] = (INT8)ip1; + pTLVx12->mIPV4Address[2] = (INT8)ip2; + pTLVx12->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx12Sz; + } + + // Add Secondary NBNS, if specified + if (pSecondaryNBNS != 0) + { + // Check size + WORD tlvx13Sz = sizeof( sWDSStartNetworkInterfaceRequest_SecondaryNBNS ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx13Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x13; + pHeader->mLength = tlvx13Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSStartNetworkInterfaceRequest_SecondaryNBNS * pTLVx13; + pTLVx13 = (sWDSStartNetworkInterfaceRequest_SecondaryNBNS*)(pOut + offset); + memset( pTLVx13, 0, tlvx13Sz ); + + ULONG ip0 = (*pSecondaryNBNS & 0x000000FF); + ULONG ip1 = (*pSecondaryNBNS & 0x0000FF00) >> 8; + ULONG ip2 = (*pSecondaryNBNS & 0x00FF0000) >> 16; + ULONG ip3 = (*pSecondaryNBNS & 0xFF000000) >> 24; + + // Set the value + pTLVx13->mIPV4Address[0] = (INT8)ip0; + pTLVx13->mIPV4Address[1] = (INT8)ip1; + pTLVx13->mIPV4Address[2] = (INT8)ip2; + pTLVx13->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx13Sz; + } + + // Add APN Name, if specified + if (pAPNName != 0) + { + std::string apnName( pAPNName ); + + // Check size + WORD tlvx14Sz = (WORD)apnName.size(); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx14Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x14; + pHeader->mLength = tlvx14Sz; + + offset += sizeof( sQMIRawContentHeader ); + + // Set the value + memcpy( (pOut + offset), apnName.c_str(), apnName.size() ); + + offset += tlvx14Sz; + } + + // Add IP Address, if specified + if (pIPAddress != 0) + { + // Check size + WORD tlvx15Sz = sizeof( sWDSStartNetworkInterfaceRequest_IPAddress ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx15Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x15; + pHeader->mLength = tlvx15Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSStartNetworkInterfaceRequest_IPAddress * pTLVx15; + pTLVx15 = (sWDSStartNetworkInterfaceRequest_IPAddress*)(pOut + offset); + memset( pTLVx15, 0, tlvx15Sz ); + + ULONG ip0 = (*pIPAddress & 0x000000FF); + ULONG ip1 = (*pIPAddress & 0x0000FF00) >> 8; + ULONG ip2 = (*pIPAddress & 0x00FF0000) >> 16; + ULONG ip3 = (*pIPAddress & 0xFF000000) >> 24; + + // Set the value + pTLVx15->mIPV4Address[0] = (INT8)ip0; + pTLVx15->mIPV4Address[1] = (INT8)ip1; + pTLVx15->mIPV4Address[2] = (INT8)ip2; + pTLVx15->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx15Sz; + } + + // Add Authentication, if specified + if (pAuthentication != 0) + { + // Check size + WORD tlvx16Sz = sizeof( sWDSStartNetworkInterfaceRequest_Authentication ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx16Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x16; + pHeader->mLength = tlvx16Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSStartNetworkInterfaceRequest_Authentication * pTLVx16; + pTLVx16 = (sWDSStartNetworkInterfaceRequest_Authentication*)(pOut + offset); + memset( pTLVx16, 0, tlvx16Sz ); + + // Set the value + pTLVx16->mEnablePAP = ((*pAuthentication & 0x00000001) != 0); + pTLVx16->mEnableCHAP = ((*pAuthentication & 0x00000002) != 0); + + offset += tlvx16Sz; + } + + // Add Username, if specified + if (pUsername != 0) + { + std::string username( pUsername ); + + // Check size + WORD tlvx17Sz = (WORD)username.size(); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx17Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x17; + pHeader->mLength = tlvx17Sz; + + offset += sizeof( sQMIRawContentHeader ); + + // Set the value + memcpy( (pOut + offset), username.c_str(), username.size() ); + + offset += tlvx17Sz; + } + + // Add Password, if specified + if (pPassword != 0) + { + std::string password( pPassword ); + + // Check size + WORD tlvx18Sz = (WORD)password.size(); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx18Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x18; + pHeader->mLength = tlvx18Sz; + + offset += sizeof( sQMIRawContentHeader ); + + // Set the value + memcpy( (pOut + offset), password.c_str(), password.size() ); + + offset += tlvx18Sz; + } + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseStartDataSession + +DESCRIPTION: + This function activates a packet data session + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pSessionId [ O ] - The assigned session ID + pFailureReason [ O ] - Upon call failure the failure reason provided + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseStartDataSession( + ULONG inLen, + const BYTE * pIn, + ULONG * pSessionId, + ULONG * pFailureReason ) +{ + // Validate arguments + if (pIn == 0 + || pSessionId == 0 + || pFailureReason == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check mandatory response + const sResultCode * pTLVx02; + ULONG outLenx02; + ULONG rc = GetTLV( inLen, pIn, 0x02, &outLenx02, (const BYTE **)&pTLVx02 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx02 < sizeof( sResultCode )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + if (pTLVx02->mQMIResult != eQMIResults_Success) + { + rc = pTLVx02->mQMIError + eGOBI_ERR_QMI_OFFSET; + } + + if (rc != eGOBI_ERR_NONE) + { + // Still parse call end reason, if present + const sWDSStartNetworkInterfaceResponse_CallEndReason * pTLVx10; + ULONG outLenx10; + ULONG rc2 = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc2 == eGOBI_ERR_NONE) + { + if (outLenx10 >= sizeof( sWDSStartNetworkInterfaceResponse_CallEndReason )) + { + *pFailureReason = pTLVx10->mCallEnd; + } + } + + return rc; + } + + // Find the Session ID + const sWDSStartNetworkInterfaceResponse_PacketDataHandle * pTLVx01; + ULONG outLenx01; + rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx01 < sizeof( sWDSStartNetworkInterfaceResponse_PacketDataHandle )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pSessionId = pTLVx01->mPacketDataHandle; + } + + // Session ID is mandatory, if it failed return that error + return rc; +} + +/*=========================================================================== +METHOD: + PackStopDataSession + +DESCRIPTION: + This function stops the current data session + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + sessionId [ I ] - The ID of the session to terminate + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackStopDataSession( + ULONG * pOutLen, + BYTE * pOut, + ULONG sessionId ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Add session ID + + // Check size + WORD tlvx01Sz = sizeof( sWDSStopNetworkInterfaceRequest_PacketDataHandle ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSStopNetworkInterfaceRequest_PacketDataHandle * pTLVx01; + pTLVx01 = (sWDSStopNetworkInterfaceRequest_PacketDataHandle*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the value + pTLVx01->mPacketDataHandle = sessionId; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackGetIPAddress + +DESCRIPTION: + This function returns the current packet data session IP address + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackGetIPAddress( + ULONG * pOutLen, + BYTE * pOut ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Request the settings + + // Check size + WORD tlvx10Sz = sizeof( sWDSGetCurrentSettingsRequest_RequestedSettings ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSGetCurrentSettingsRequest_RequestedSettings * pTLVx10; + pTLVx10 = (sWDSGetCurrentSettingsRequest_RequestedSettings*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mIPAddress = true; + + offset += tlvx10Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetIPAddress + +DESCRIPTION: + This function returns the current packet data session IP address + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pIPAddress [ O ] - Assigned IPv4 address + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetIPAddress( + ULONG inLen, + const BYTE * pIn, + ULONG * pIPAddress ) +{ + // Validate arguments + if (pIn == 0 || pIPAddress == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the IP Address + const sWDSGetDefaultSettingsResponse_IPAddress * pTLVx1E; + ULONG outLenx1E; + ULONG rc = GetTLV( inLen, pIn, 0x1E, &outLenx1E, (const BYTE **)&pTLVx1E ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx1E < sizeof( sWDSGetDefaultSettingsResponse_IPAddress )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG ip0 = pTLVx1E->mIPV4Address[0]; + ULONG ip1 = pTLVx1E->mIPV4Address[1] << 8; + ULONG ip2 = pTLVx1E->mIPV4Address[2] << 16; + ULONG ip3 = pTLVx1E->mIPV4Address[3] << 24; + + *pIPAddress = (ip0 | ip1 | ip2 | ip3); + } + + // If no IP address is found, fail + return rc; +} + +/*=========================================================================== +METHOD: + ParseGetConnectionRate + +DESCRIPTION: + This function returns connection rate information for the packet data + connection + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pCurrentChannelTXRate [ O ] - Current channel TX rate (bps) + pCurrentChannelRXRate [ O ] - Current channel RX rate (bps) + pMaxChannelTXRate [ O ] - Maximum channel TX rate (bps) + pMaxChannelRXRate [ O ] - Maximum channel RX rate (bps) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetConnectionRate( + ULONG inLen, + const BYTE * pIn, + ULONG * pCurrentChannelTXRate, + ULONG * pCurrentChannelRXRate, + ULONG * pMaxChannelTXRate, + ULONG * pMaxChannelRXRate ) +{ + // Validate arguments + if (pIn == 0 + || pCurrentChannelTXRate == 0 + || pCurrentChannelRXRate == 0 + || pMaxChannelTXRate == 0 + || pMaxChannelRXRate == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the rates + const sWDSGetChannelRatesResponse_ChannelRates * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx01 < sizeof( sWDSGetChannelRatesResponse_ChannelRates )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Get the values + *pCurrentChannelTXRate = pTLVx01->mChannelTXRatebps; + *pCurrentChannelRXRate = pTLVx01->mChannelRXRatebps; + *pMaxChannelTXRate = pTLVx01->mMaxChannelTXRatebps; + *pMaxChannelRXRate = pTLVx01->mMaxChannelRXRatebps; + } + + // If no rates are found, fail + return rc; +} + +/*=========================================================================== +METHOD: + PackGetPacketStatus + +DESCRIPTION: + This function returns the packet data transfer statistics since the start + of the current packet data session + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackGetPacketStatus( + ULONG * pOutLen, + BYTE * pOut ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Request the settings + + // Check size + WORD tlvx01Sz = sizeof( sWDSGetPacketStatisticsRequest_PacketStatsMask ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSGetPacketStatisticsRequest_PacketStatsMask * pTLVx01; + pTLVx01 = (sWDSGetPacketStatisticsRequest_PacketStatsMask*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mReportTXPacketSuccesses = true; + pTLVx01->mReportRXPacketSuccesses = true; + pTLVx01->mReportTXPacketErrors = true; + pTLVx01->mReportRXPacketErrors = true; + pTLVx01->mReportTXOverflows = true; + pTLVx01->mReportRXOverflows = true; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetPacketStatus + +DESCRIPTION: + This function returns the packet data transfer statistics since the start + of the current packet data session + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pTXPacketSuccesses [ O ] - Packets transmitted without error + pRXPacketSuccesses [ O ] - Packets received without error + pTXPacketErrors [ O ] - Outgoing packets with framing errors + pRXPacketErrors [ O ] - Incoming packets with framing errors + pTXPacketOverflows [ O ] - Packets dropped because TX buffer overflowed + pRXPacketOverflows [ O ] - Packets dropped because RX buffer overflowed + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetPacketStatus( + ULONG inLen, + const BYTE * pIn, + ULONG * pTXPacketSuccesses, + ULONG * pRXPacketSuccesses, + ULONG * pTXPacketErrors, + ULONG * pRXPacketErrors, + ULONG * pTXPacketOverflows, + ULONG * pRXPacketOverflows ) +{ + // Validate arguments + if (pIn == 0 + || pTXPacketSuccesses == 0 + || pRXPacketSuccesses == 0 + || pTXPacketErrors == 0 + || pRXPacketErrors == 0 + || pTXPacketOverflows == 0 + || pRXPacketOverflows == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // NOTE: All TLVs are required. If any fail then all fail + + // Find the TX packet sucesses + const sWDSGetPacketStatisticsResponse_TXPacketSuccesses * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx10 < sizeof( sWDSGetPacketStatisticsResponse_TXPacketSuccesses )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + } + else + { + return rc; + } + + // Find the RX packet sucesses + const sWDSGetPacketStatisticsResponse_RXPacketSuccesses * pTLVx11; + ULONG outLenx11; + rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx11 < sizeof( sWDSGetPacketStatisticsResponse_RXPacketSuccesses )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + } + else + { + return rc; + } + + // Find the TX packet errors + const sWDSGetPacketStatisticsResponse_TXPacketErrors * pTLVx12; + ULONG outLenx12; + rc = GetTLV( inLen, pIn, 0x12, &outLenx12, (const BYTE **)&pTLVx12 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx12 < sizeof( sWDSGetPacketStatisticsResponse_TXPacketErrors )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + } + else + { + return rc; + } + + // Find the RX packet errors + const sWDSGetPacketStatisticsResponse_RXPacketErrors * pTLVx13; + ULONG outLenx13; + rc = GetTLV( inLen, pIn, 0x13, &outLenx13, (const BYTE **)&pTLVx13 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx13 < sizeof( sWDSGetPacketStatisticsResponse_RXPacketErrors )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + } + else + { + return rc; + } + + // Find the TX packet overflows + const sWDSGetPacketStatisticsResponse_TXOverflows * pTLVx14; + ULONG outLenx14; + rc = GetTLV( inLen, pIn, 0x14, &outLenx14, (const BYTE **)&pTLVx14 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx14 < sizeof( sWDSGetPacketStatisticsResponse_TXOverflows )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + } + else + { + return rc; + } + + // Find the RX packet overflows + const sWDSGetPacketStatisticsResponse_RXOverflows * pTLVx15; + ULONG outLenx15; + rc = GetTLV( inLen, pIn, 0x15, &outLenx15, (const BYTE **)&pTLVx15 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx15 < sizeof( sWDSGetPacketStatisticsResponse_RXOverflows )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + } + else + { + return rc; + } + + // Populate the statistics + *pTXPacketSuccesses = pTLVx10->mTXPacketSuccesses; + *pRXPacketSuccesses = pTLVx11->mRXPacketSuccesses; + *pTXPacketErrors = pTLVx12->mTXPacketErrors; + *pRXPacketErrors = pTLVx13->mRXPacketErrors; + *pTXPacketOverflows = pTLVx14->mTXOverflows; + *pRXPacketOverflows = pTLVx15->mRXOverflows; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackGetByteTotals + +DESCRIPTION: + This function returns the RX/TX byte counts since the start of the + current packet data session + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackGetByteTotals( + ULONG * pOutLen, + BYTE * pOut ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Request the settings + + // Check size + WORD tlvx01Sz = sizeof( sWDSGetPacketStatisticsRequest_PacketStatsMask ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSGetPacketStatisticsRequest_PacketStatsMask * pTLVx01; + pTLVx01 = (sWDSGetPacketStatisticsRequest_PacketStatsMask*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mTXByteTotal = true; + pTLVx01->mRXByteTotal = true; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetByteTotals + +DESCRIPTION: + This function returns the RX/TX byte counts since the start of the + current packet data session + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pTXTotalBytes [ O ] - Bytes transmitted without error + pRXTotalBytes [ O ] - Bytes received without error + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetByteTotals( + ULONG inLen, + const BYTE * pIn, + ULONGLONG * pTXTotalBytes, + ULONGLONG * pRXTotalBytes ) +{ + // Validate arguments + if (pIn == 0 + || pTXTotalBytes == 0 + || pRXTotalBytes == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // NOTE: All TLVs are required. If any fail then all fail + + // Find the TX bytes + const sWDSGetPacketStatisticsResponse_TXBytes * pTLVx19; + ULONG outLenx19; + ULONG rc = GetTLV( inLen, pIn, 0x19, &outLenx19, (const BYTE **)&pTLVx19 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx19 < sizeof( sWDSGetPacketStatisticsResponse_TXBytes )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + } + else + { + return rc; + } + + // Find the RX bytes + const sWDSGetPacketStatisticsResponse_RXBytes * pTLVx1A; + ULONG outLenx1A; + rc = GetTLV( inLen, pIn, 0x1A, &outLenx1A, (const BYTE **)&pTLVx1A ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx1A < sizeof( sWDSGetPacketStatisticsResponse_RXBytes )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + } + else + { + return rc; + } + + // Populate the statistics + *pTXTotalBytes = pTLVx19->mTXByteTotal; + *pRXTotalBytes = pTLVx1A->mRXByteTotal; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetMobileIP + +DESCRIPTION: + This function sets the current mobile IP setting + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + mode [ I ] - Desired mobile IP setting + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetMobileIP( + ULONG * pOutLen, + BYTE * pOut, + ULONG mode ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Set the mode + + // Check size + WORD tlvx01Sz = sizeof( sWDSSetMIPModeRequest_MobileIPMode ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSSetMIPModeRequest_MobileIPMode * pTLVx01; + pTLVx01 = (sWDSSetMIPModeRequest_MobileIPMode*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mMIPMode = (eQMIMobileIPModes)mode; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetMobileIP + +DESCRIPTION: + This function gets the current mobile IP setting + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pMode [ O ] - Current mobile IP setting + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetMobileIP( + ULONG inLen, + const BYTE * pIn, + ULONG * pMode ) +{ + // Validate arguments + if (pIn == 0 || pMode == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the mode + const sWDSGetMIPModeResponse_MobileIPMode * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx01 < sizeof( sWDSGetMIPModeResponse_MobileIPMode )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pMode = pTLVx01->mMIPMode; + } + + return rc; +} + +/*=========================================================================== +METHOD: + PackSetActiveMobileIPProfile + +DESCRIPTION: + This function sets the active mobile IP profile index + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pSPC [ I ] - Six digit service programming code + index [ I ] - Desired mobile IP profile index + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetActiveMobileIPProfile( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC, + BYTE index ) +{ + // Validate arguments + if (pOut == 0 || pSPC == 0 || pSPC[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + std::string spc( pSPC ); + if (spc.size() > 6) + { + return eGOBI_ERR_INVALID_ARG; + } + + if (spc.find_first_not_of( "0123456789" ) != std::string::npos ) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sWDSSetActiveMIPProfileRequest_Index ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSSetActiveMIPProfileRequest_Index * pTLVx01; + pTLVx01 = (sWDSSetActiveMIPProfileRequest_Index*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + memcpy( &pTLVx01->mSPC[0], spc.c_str(), spc.size() ); + pTLVx01->mProfileIndex = index; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetActiveMobileIPProfile + +DESCRIPTION: + This function gets the the active mobile IP profile index + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pIndex [ O ] - Active mobile IP profile index + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetActiveMobileIPProfile( + ULONG inLen, + const BYTE * pIn, + BYTE * pIndex ) +{ + // Validate arguments + if (pIn == 0 || pIndex == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the mode + const sWDSGetActiveMIPProfileResponse_Index * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx01 < sizeof( sWDSGetActiveMIPProfileResponse_Index )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pIndex = pTLVx01->mProfileIndex; + } + + return rc; +} + +/*=========================================================================== +METHOD: + PackSetMobileIPProfile + +DESCRIPTION: + This function sets the specified mobile IP profile settings + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pSPC [ I ] - Six digit service programming code + index [ I ] - Mobile IP profile ID + pEnabled [ I ] - (Optional) Enable MIP profile? + pAddress [ I ] - (Optional) Home IPv4 address + pPrimaryHA [ I ] - (Optional) Primary home agent IPv4 address + pSecondaryHA [ I ] - (Optional) Secondary home agent IPv4 address + bRevTunneling [ I ] - (Optional) Enable reverse tunneling? + pNAI [ I ] - (Optional) Network access identifier string + pHASPI [ I ] - (Optional) HA security parameter index + pAAASPI [ I ] - (Optional) AAA security parameter index + pMNHA [ I ] - (Optional) MN-HA string + pMNAAA [ I ] - (Optional) MN-AAA string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetMobileIPProfile( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC, + BYTE index, + BYTE * pEnabled, + ULONG * pAddress, + ULONG * pPrimaryHA, + ULONG * pSecondaryHA, + BYTE * pRevTunneling, + CHAR * pNAI, + ULONG * pHASPI, + ULONG * pAAASPI, + CHAR * pMNHA, + CHAR * pMNAAA ) +{ + // Validate arguments + if (pOut == 0 || pSPC == 0 || pSPC[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + std::string spc( pSPC ); + if (spc.size() > 6) + { + return eGOBI_ERR_INVALID_ARG; + } + + if (spc.find_first_not_of( "0123456789" ) != std::string::npos ) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sWDSSetMIPProfileRequest_Index ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSSetMIPProfileRequest_Index * pTLVx01; + pTLVx01 = (sWDSSetMIPProfileRequest_Index*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + memcpy( &pTLVx01->mSPC[0], spc.c_str(), spc.size() ); + pTLVx01->mProfileIndex = index; + + offset += tlvx01Sz; + + // Add Enabled, if specified + if (pEnabled != 0) + { + // Check size + WORD tlvx10Sz = sizeof( sWDSSetMIPProfileRequest_State ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPProfileRequest_State * pTLVx10; + pTLVx10 = (sWDSSetMIPProfileRequest_State*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mEnabled = (*pEnabled == 0 ? 0 : 1); + + offset += tlvx10Sz; + } + + // Add Home Address, if specified + if (pAddress != 0) + { + // Check size + WORD tlvx11Sz = sizeof( sWDSSetMIPProfileRequest_HomeAddress ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx11Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x11; + pHeader->mLength = tlvx11Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPProfileRequest_HomeAddress * pTLVx11; + pTLVx11 = (sWDSSetMIPProfileRequest_HomeAddress*)(pOut + offset); + memset( pTLVx11, 0, tlvx11Sz ); + + ULONG ip0 = (*pAddress & 0x000000FF); + ULONG ip1 = (*pAddress & 0x0000FF00) >> 8; + ULONG ip2 = (*pAddress & 0x00FF0000) >> 16; + ULONG ip3 = (*pAddress & 0xFF000000) >> 24; + + // Set the value + pTLVx11->mIPV4Address[0] = (INT8)ip0; + pTLVx11->mIPV4Address[1] = (INT8)ip1; + pTLVx11->mIPV4Address[2] = (INT8)ip2; + pTLVx11->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx11Sz; + } + + // Add Primary Home Agent Address, if specified + if (pPrimaryHA != 0) + { + // Check size + WORD tlvx12Sz = sizeof( sWDSSetMIPProfileRequest_PrimaryHomeAgentAddress ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx12Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x12; + pHeader->mLength = tlvx12Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPProfileRequest_PrimaryHomeAgentAddress * pTLVx12; + pTLVx12 = (sWDSSetMIPProfileRequest_PrimaryHomeAgentAddress*)(pOut + offset); + memset( pTLVx12, 0, tlvx12Sz ); + + ULONG ip0 = (*pPrimaryHA & 0x000000FF); + ULONG ip1 = (*pPrimaryHA & 0x0000FF00) >> 8; + ULONG ip2 = (*pPrimaryHA & 0x00FF0000) >> 16; + ULONG ip3 = (*pPrimaryHA & 0xFF000000) >> 24; + + // Set the value + pTLVx12->mIPV4Address[0] = (INT8)ip0; + pTLVx12->mIPV4Address[1] = (INT8)ip1; + pTLVx12->mIPV4Address[2] = (INT8)ip2; + pTLVx12->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx12Sz; + } + + // Add Secondary Home Agent Address, if specified + if (pSecondaryHA != 0) + { + // Check size + WORD tlvx13Sz = sizeof( sWDSSetMIPProfileRequest_SecondaryHomeAgentAddress ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx13Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x13; + pHeader->mLength = tlvx13Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPProfileRequest_SecondaryHomeAgentAddress * pTLVx13; + pTLVx13 = (sWDSSetMIPProfileRequest_SecondaryHomeAgentAddress*)(pOut + offset); + memset( pTLVx13, 0, tlvx13Sz ); + + ULONG ip0 = (*pSecondaryHA & 0x000000FF); + ULONG ip1 = (*pSecondaryHA & 0x0000FF00) >> 8; + ULONG ip2 = (*pSecondaryHA & 0x00FF0000) >> 16; + ULONG ip3 = (*pSecondaryHA & 0xFF000000) >> 24; + + // Set the value + pTLVx13->mIPV4Address[0] = (INT8)ip0; + pTLVx13->mIPV4Address[1] = (INT8)ip1; + pTLVx13->mIPV4Address[2] = (INT8)ip2; + pTLVx13->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx13Sz; + } + + // Add reverse tunneling, if specified + if (pRevTunneling != 0) + { + // Check size + WORD tlvx14Sz = sizeof( sWDSSetMIPProfileRequest_ReverseTunneling ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx14Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x14; + pHeader->mLength = tlvx14Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPProfileRequest_ReverseTunneling * pTLVx14; + pTLVx14 = (sWDSSetMIPProfileRequest_ReverseTunneling*)(pOut + offset); + memset( pTLVx14, 0, tlvx14Sz ); + + // Set the value + pTLVx14->mReverseTunneling = (*pRevTunneling == 0 ? 0 : 1); + + offset += tlvx14Sz; + } + + // Add NAI, if specified + if (pNAI != 0) + { + std::string nai( pNAI ); + + // Check size + WORD tlvx15Sz = (WORD)nai.size(); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx15Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x15; + pHeader->mLength = tlvx15Sz; + + offset += sizeof( sQMIRawContentHeader ); + + // Set the value + memcpy( (pOut + offset), nai.c_str(), nai.size() ); + + offset += tlvx15Sz; + } + + // Add HA SPI, if specified + if (pHASPI != 0) + { + // Check size + WORD tlvx16Sz = sizeof( sWDSSetMIPProfileRequest_HASPI ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx16Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x16; + pHeader->mLength = tlvx16Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPProfileRequest_HASPI * pTLVx16; + pTLVx16 = (sWDSSetMIPProfileRequest_HASPI*)(pOut + offset); + memset( pTLVx16, 0, tlvx16Sz ); + + // Set the value + pTLVx16->mHASPI = *pHASPI; + + offset += tlvx16Sz; + } + + // Add AAA SPI, if specified + if (pAAASPI != 0) + { + // Check size + WORD tlvx17Sz = sizeof( sWDSSetMIPProfileRequeste_AAASPI ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx17Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x17; + pHeader->mLength = tlvx17Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPProfileRequeste_AAASPI * pTLVx17; + pTLVx17 = (sWDSSetMIPProfileRequeste_AAASPI*)(pOut + offset); + memset( pTLVx17, 0, tlvx17Sz ); + + // Set the value + pTLVx17->mAAASPI = *pAAASPI; + + offset += tlvx17Sz; + } + + // Add MN-HA key, if specified + if (pMNHA != 0) + { + std::string mnha( pMNHA ); + + // Check size + WORD tlvx18Sz = (WORD)mnha.size(); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx18Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x18; + pHeader->mLength = tlvx18Sz; + + offset += sizeof( sQMIRawContentHeader ); + + // Set the value + memcpy( (pOut + offset), mnha.c_str(), mnha.size() ); + + offset += tlvx18Sz; + } + + // Add MN-AAA key, if specified + if (pMNHA != 0) + { + std::string mnaaa( pMNAAA ); + + // Check size + WORD tlvx19Sz = (WORD)mnaaa.size(); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx19Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x19; + pHeader->mLength = tlvx19Sz; + + offset += sizeof( sQMIRawContentHeader ); + + // Set the value + memcpy( (pOut + offset), mnaaa.c_str(), mnaaa.size() ); + + offset += tlvx19Sz; + } + + // At least one of the optional parameters must have been set + if (offset <= sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_INVALID_ARG; + } + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackGetMobileIPProfile + +DESCRIPTION: + This function gets the specified mobile IP profile settings + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + index [ I ] - Mobile IP profile ID + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackGetMobileIPProfile( + ULONG * pOutLen, + BYTE * pOut, + BYTE index ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sWDSGetMIPProfileRequest_Index ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSGetMIPProfileRequest_Index * pTLVx01; + pTLVx01 = (sWDSGetMIPProfileRequest_Index*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mProfileIndex = index; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetMobileIPProfile + +DESCRIPTION: + This function gets the specified mobile IP profile settings + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pEnabled [ O ] - Mobile IP profile enabled? + pAddress [ O ] - Home IPv4 address + pPrimaryHA [ O ] - Primary home agent IPv4 address + pSecondaryHA [ O ] - Secondary home agent IPv4 address + pRevTunneling [ O ] - Reverse tunneling enabled? + naiSize [ I ] - The maximum number of characters (including NULL + terminator) that the NAI array can contain + pNAI [ O ] - Network access identifier string + pHASPI [ O ] - HA security parameter index + pAAASPI [ O ] - AAA security parameter index + pHAState [ O ] - HA key state + pAAAState [ O ] - AAA key state + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetMobileIPProfile( + ULONG inLen, + const BYTE * pIn, + BYTE * pEnabled, + ULONG * pAddress, + ULONG * pPrimaryHA, + ULONG * pSecondaryHA, + BYTE * pRevTunneling, + BYTE naiSize, + CHAR * pNAI, + ULONG * pHASPI, + ULONG * pAAASPI, + ULONG * pHAState, + ULONG * pAAAState ) +{ + // Validate arguments + if (pIn == 0 + || pEnabled == 0 + || pAddress == 0 + || pPrimaryHA == 0 + || pSecondaryHA == 0 + || pRevTunneling == 0 + || naiSize == 0 + || pNAI == 0 + || pHASPI == 0 + || pAAASPI == 0 + || pHAState == 0 + || pAAAState == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume errors + *pEnabled = 0xff; + *pAddress = 0xffffffff; + *pPrimaryHA = 0xffffffff; + *pSecondaryHA = 0xffffffff; + *pRevTunneling = 0xff; + *pHASPI = 0xffffffff; + *pAAASPI = 0xffffffff; + *pHAState = 0xffffffff; + *pAAAState = 0xffffffff; + + // Find the State + const sWDSGetMIPProfileResponse_State * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx10 < sizeof( sWDSGetMIPProfileResponse_State )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pEnabled = pTLVx10->mEnabled; + } + + // Find the Home Address + const sWDSGetMIPProfileResponse_HomeAddress * pTLVx11; + ULONG outLenx11; + rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx11 < sizeof( sWDSGetMIPProfileResponse_HomeAddress )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG ip0 = pTLVx11->mIPV4Address[0]; + ULONG ip1 = pTLVx11->mIPV4Address[1] << 8; + ULONG ip2 = pTLVx11->mIPV4Address[2] << 16; + ULONG ip3 = pTLVx11->mIPV4Address[3] << 24; + + *pAddress = (ip0 | ip1 | ip2 | ip3); + } + + // Find the Primary Home Agent Address + const sWDSGetMIPProfileResponse_PrimaryHomeAgentAddress * pTLVx12; + ULONG outLenx12; + rc = GetTLV( inLen, pIn, 0x12, &outLenx12, (const BYTE **)&pTLVx12 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx12 < sizeof( sWDSGetMIPProfileResponse_PrimaryHomeAgentAddress )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG ip0 = pTLVx12->mIPV4Address[0]; + ULONG ip1 = pTLVx12->mIPV4Address[1] << 8; + ULONG ip2 = pTLVx12->mIPV4Address[2] << 16; + ULONG ip3 = pTLVx12->mIPV4Address[3] << 24; + + *pPrimaryHA = (ip0 | ip1 | ip2 | ip3); + } + + // Find the Secondary Home Agent Address + const sWDSGetMIPProfileResponse_SecondaryHomeAgentAddress * pTLVx13; + ULONG outLenx13; + rc = GetTLV( inLen, pIn, 0x13, &outLenx13, (const BYTE **)&pTLVx13 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx13 < sizeof( sWDSGetMIPProfileResponse_SecondaryHomeAgentAddress )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG ip0 = pTLVx13->mIPV4Address[0]; + ULONG ip1 = pTLVx13->mIPV4Address[1] << 8; + ULONG ip2 = pTLVx13->mIPV4Address[2] << 16; + ULONG ip3 = pTLVx13->mIPV4Address[3] << 24; + + *pSecondaryHA = (ip0 | ip1 | ip2 | ip3); + } + + // Find the Reverse tunneling, if enabled + const sWDSGetMIPProfileResponse_ReverseTunneling * pTLVx14; + ULONG outLenx14; + rc = GetTLV( inLen, pIn, 0x14, &outLenx14, (const BYTE **)&pTLVx14 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx10 < sizeof( sWDSGetMIPProfileResponse_ReverseTunneling )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pRevTunneling = pTLVx14->mReverseTunneling; + } + + // Find the NAI, if enabled + const sWDSGetMIPProfileResponse_NAI * pTLVx15; + ULONG outLenx15; + rc = GetTLV( inLen, pIn, 0x15, &outLenx15, (const BYTE **)&pTLVx15 ); + if (rc == eGOBI_ERR_NONE) + { + if (naiSize < outLenx15 + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pNAI, (const BYTE *)pTLVx15, outLenx15 ); + + // Null terminate + pNAI[outLenx15] = 0; + } + + // Find the HA SPI + const sWDSGetMIPProfileResponse_HASPI * pTLVx16; + ULONG outLenx16; + rc = GetTLV( inLen, pIn, 0x16, &outLenx16, (const BYTE **)&pTLVx16 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx16 < sizeof( sWDSGetMIPProfileResponse_HASPI )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pHASPI = pTLVx16->mHASPI; + } + + // Find the AAA SPI + const sWDSGetMIPProfileResponse_AAASPI * pTLVx17; + ULONG outLenx17; + rc = GetTLV( inLen, pIn, 0x17, &outLenx17, (const BYTE **)&pTLVx17 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx17 < sizeof( sWDSGetMIPProfileResponse_AAASPI )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pAAASPI = pTLVx17->mAAASPI; + } + + // Find the HA state + const sWDSGetMIPProfileResponse_HAState * pTLVx1A; + ULONG outLenx1A; + rc = GetTLV( inLen, pIn, 0x1A, &outLenx1A, (const BYTE **)&pTLVx1A ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx1A < sizeof( sWDSGetMIPProfileResponse_HAState )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pHAState = pTLVx1A->mKeyState; + } + + // Find the AAA state + const sWDSGetMIPProfileResponse_AAAState * pTLVx1B; + ULONG outLenx1B; + rc = GetTLV( inLen, pIn, 0x1B, &outLenx1B, (const BYTE **)&pTLVx1B ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx1B < sizeof( sWDSGetMIPProfileResponse_AAAState )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pAAAState = pTLVx1B->mKeyState; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetMobileIPParameters + +DESCRIPTION: + This function sets the specified mobile IP parameters + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pSPC [ I ] - Six digit service programming code + pMode [ I ] - (Optional) Desired mobile IP setting + pRetryLimit [ I ] - (Optional) Retry attempt limit + pRetryInterval [ I ] - (Optional) Retry attempt interval + pReRegPeriod [ I ] - (Optional) Re-registration period + pReRegTraffic [ I ] - (Optional) Re-registration only with traffic? + pHAAuthenticator [ I ] - (Optional) MH-HA authenticator calculator? + pHA2002bis [ I ] - (Optional) MH-HA RFC 2002bis authentication? + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetMobileIPParameters( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSPC, + ULONG * pMode, + BYTE * pRetryLimit, + BYTE * pRetryInterval, + BYTE * pReRegPeriod, + BYTE * pReRegTraffic, + BYTE * pHAAuthenticator, + BYTE * pHA2002bis ) +{ + // Validate arguments + if (pOut == 0 || pSPC == 0 || pSPC[0] == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + std::string spc( pSPC ); + if (spc.size() > 6) + { + return eGOBI_ERR_INVALID_ARG; + } + + if (spc.find_first_not_of( "0123456789" ) != std::string::npos ) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sWDSSetMIPParametersRequest_SPC ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)pOut; + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + sWDSSetMIPParametersRequest_SPC * pTLVx01; + pTLVx01 = (sWDSSetMIPParametersRequest_SPC*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + memcpy( &pTLVx01->mSPC[0], spc.c_str(), spc.size() ); + + offset += tlvx01Sz; + + // Add Mode, if specified + if (pMode != 0) + { + // Check size + WORD tlvx10Sz = sizeof( sWDSSetMIPParametersRequest_MobileIPMode ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPParametersRequest_MobileIPMode * pTLVx10; + pTLVx10 = (sWDSSetMIPParametersRequest_MobileIPMode*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the value + pTLVx10->mMIPMode = (eQMIMobileIPModes)*pMode; + + offset += tlvx10Sz; + } + + // Add Retry Limit, if specified + if (pRetryLimit != 0) + { + // Check size + WORD tlvx11Sz = sizeof( sWDSSetMIPParametersRequest_RetryAttemptLimit ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx11Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x11; + pHeader->mLength = tlvx11Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPParametersRequest_RetryAttemptLimit * pTLVx11; + pTLVx11 = (sWDSSetMIPParametersRequest_RetryAttemptLimit*)(pOut + offset); + memset( pTLVx11, 0, tlvx11Sz ); + + // Set the value + pTLVx11->mRetryAttemptLimit = *pRetryLimit; + + offset += tlvx11Sz; + } + + // Add Retry interval, if specified + if (pRetryInterval != 0) + { + // Check size + WORD tlvx12Sz = sizeof( sWDSSetMIPParametersRequest_RetryAttemptInterval ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx12Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x12; + pHeader->mLength = tlvx12Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPParametersRequest_RetryAttemptInterval * pTLVx12; + pTLVx12 = (sWDSSetMIPParametersRequest_RetryAttemptInterval*)(pOut + offset); + memset( pTLVx12, 0, tlvx12Sz ); + + // Set the value + pTLVx12->mRetryAttemptInterval = *pRetryInterval; + + offset += tlvx12Sz; + } + + // Add Re-registration period, if specified + if (pReRegPeriod != 0) + { + // Check size + WORD tlvx13Sz = sizeof( sWDSSetMIPParametersRequest_ReRegistrationPeriod ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx13Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x13; + pHeader->mLength = tlvx13Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPParametersRequest_ReRegistrationPeriod * pTLVx13; + pTLVx13 = (sWDSSetMIPParametersRequest_ReRegistrationPeriod*)(pOut + offset); + memset( pTLVx13, 0, tlvx13Sz ); + + // Set the value + pTLVx13->mReRegistrationPeriod = *pReRegPeriod; + + offset += tlvx13Sz; + } + + // Add Re-registration on traffic flag, if specified + if (pReRegTraffic != 0) + { + // Check size + WORD tlvx14Sz = sizeof( sWDSSetMIPParametersRequest_ReRegistrationOnlyWithTraffic ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx14Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x14; + pHeader->mLength = tlvx14Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPParametersRequest_ReRegistrationOnlyWithTraffic * pTLVx14; + pTLVx14 = (sWDSSetMIPParametersRequest_ReRegistrationOnlyWithTraffic*)(pOut + offset); + memset( pTLVx14, 0, tlvx14Sz ); + + // Set the value + pTLVx14->mReRegistrationOnlyWithTraffic = (*pReRegTraffic == 0 ? 0 : 1); + + offset += tlvx14Sz; + } + + // Add HA authenticator flag, if specified + if (pHAAuthenticator != 0) + { + // Check size + WORD tlvx15Sz = sizeof( sWDSSetMIPParametersRequest_MNHAAuthenticatorCalculator ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx15Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x15; + pHeader->mLength = tlvx15Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPParametersRequest_MNHAAuthenticatorCalculator * pTLVx15; + pTLVx15 = (sWDSSetMIPParametersRequest_MNHAAuthenticatorCalculator*)(pOut + offset); + memset( pTLVx15, 0, tlvx15Sz ); + + // Set the value + pTLVx15->mMNHAAuthenticatorCalculator = (*pHAAuthenticator == 0 ? 0 : 1); + + offset += tlvx15Sz; + } + + // Add HA RFC2002bis authentication flag, if specified + if (pHA2002bis != 0) + { + // Check size + WORD tlvx16Sz = sizeof( sWDSSetMIPParametersRequest_MNHARFC2002BISAuthentication ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx16Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x16; + pHeader->mLength = tlvx16Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetMIPParametersRequest_MNHARFC2002BISAuthentication * pTLVx16; + pTLVx16 = (sWDSSetMIPParametersRequest_MNHARFC2002BISAuthentication*)(pOut + offset); + memset( pTLVx16, 0, tlvx16Sz ); + + // Set the value + pTLVx16->mMNHARFC2002BISAuthentication = (*pHA2002bis == 0 ? 0 : 1); + + offset += tlvx16Sz; + } + + // At least one of the optional parameters must have been set + if (offset <= sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_INVALID_ARG; + } + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetMobileIPParameters + +DESCRIPTION: + This function gets the mobile IP parameters + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pMode [ O ] - Current mobile IP setting + pRetryLimit [ O ] - Retry attempt limit + pRetryInterval [ O ] - Retry attempt interval + pReRegPeriod [ O ] - Re-registration period + pReRegTraffic [ O ] - Re-registration only with traffic? + pHAAuthenticator [ O ] - MH-HA authenticator calculator? + pHA2002bis [ O ] - MH-HA RFC 2002bis authentication? + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetMobileIPParameters( + ULONG inLen, + const BYTE * pIn, + ULONG * pMode, + BYTE * pRetryLimit, + BYTE * pRetryInterval, + BYTE * pReRegPeriod, + BYTE * pReRegTraffic, + BYTE * pHAAuthenticator, + BYTE * pHA2002bis ) +{ + // Validate arguments + if (pIn == 0 + || pMode == 0 + || pRetryLimit == 0 + || pRetryInterval == 0 + || pReRegPeriod == 0 + || pReRegTraffic == 0 + || pHAAuthenticator == 0 + || pHA2002bis == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + *pMode = 0xffffffff; + *pRetryLimit = 0xff; + *pRetryInterval = 0xff; + *pReRegPeriod = 0xff; + *pReRegTraffic = 0xff; + *pHAAuthenticator = 0xff; + *pHA2002bis = 0xff; + + // Find the mode + const sWDSGetMIPParametersResponse_MobileIPMode * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx10 < sizeof( sWDSGetMIPParametersResponse_MobileIPMode )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pMode = pTLVx10->mMIPMode; + } + + // Find the Retry limit + const sWDSGetMIPParametersResponse_RetryAttemptLimit * pTLVx11; + ULONG outLenx11; + rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx11 < sizeof( sWDSGetMIPParametersResponse_RetryAttemptLimit )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pRetryLimit = pTLVx11->mRetryAttemptLimit; + } + + // Find the Retry Interval + const sWDSGetMIPParametersResponse_RetryAttemptInterval * pTLVx12; + ULONG outLenx12; + rc = GetTLV( inLen, pIn, 0x12, &outLenx12, (const BYTE **)&pTLVx12 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx12 < sizeof( sWDSGetMIPParametersResponse_RetryAttemptInterval )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pRetryInterval = pTLVx12->mRetryAttemptInterval; + } + + // Find the Re-registration period + const sWDSGetMIPParametersResponse_ReRegistrationPeriod * pTLVx13; + ULONG outLenx13; + rc = GetTLV( inLen, pIn, 0x13, &outLenx13, (const BYTE **)&pTLVx13 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx13 < sizeof( sWDSGetMIPParametersResponse_ReRegistrationPeriod )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pReRegPeriod = pTLVx13->mReRegistrationPeriod; + } + + // Find the Re-register on traffic flag + const sWDSGetMIPParametersResponse_ReRegistrationOnlyWithTraffic * pTLVx14; + ULONG outLenx14; + rc = GetTLV( inLen, pIn, 0x14, &outLenx14, (const BYTE **)&pTLVx14 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx14 < sizeof( sWDSGetMIPParametersResponse_ReRegistrationOnlyWithTraffic )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pReRegTraffic = pTLVx14->mReRegistrationOnlyWithTraffic; + } + + // Find the HA authenticator + const sWDSGetMIPParametersResponse_MNHAAuthenticatorCalculator * pTLVx15; + ULONG outLenx15; + rc = GetTLV( inLen, pIn, 0x15, &outLenx15, (const BYTE **)&pTLVx15 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx15 < sizeof( sWDSGetMIPParametersResponse_MNHAAuthenticatorCalculator )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pHAAuthenticator = pTLVx15->mMNHAAuthenticatorCalculator; + } + + // Find the HA RFC2002bis authentication flag + const sWDSGetMIPParametersResponse_MNHARFC2002BISAuthentication * pTLVx16; + ULONG outLenx16; + rc = GetTLV( inLen, pIn, 0x16, &outLenx16, (const BYTE **)&pTLVx16 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx16 < sizeof( sWDSGetMIPParametersResponse_MNHARFC2002BISAuthentication )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pHA2002bis = pTLVx16->mMNHARFC2002BISAuthentication; + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetLastMobileIPError + +DESCRIPTION: + This function gets the last mobile IP error + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pError [ O ] - Last mobile IP error + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetLastMobileIPError( + ULONG inLen, + const BYTE * pIn, + ULONG * pError ) +{ + // Validate arguments + if (pIn == 0 || pError == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sWDSGetLastMIPStatusResponse_Status * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sWDSGetLastMIPStatusResponse_Status )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pError = pTLVx01->mLastMIPStatus; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSetDNSSettings + +DESCRIPTION: + This function sets the DNS settings for the device + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pPrimaryDNS [ I ] - (Optional) Primary DNS IPv4 address + pSecondaryDNS [ I ] - (Optional) Secondary DNS IPv4 address + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetDNSSettings( + ULONG * pOutLen, + BYTE * pOut, + ULONG * pPrimaryDNS, + ULONG * pSecondaryDNS ) +{ + // Validate arguments + // At least one must be specified + if (pOut == 0 || (pPrimaryDNS == 0 && pSecondaryDNS == 0)) + { + return eGOBI_ERR_INVALID_ARG; + } + + sQMIRawContentHeader * pHeader; + ULONG offset = 0; + + // Add Primary DNS, if specified + if (pPrimaryDNS != 0) + { + // Check size + WORD tlvx10Sz = sizeof( sWDSSetDNSSettingRequest_PrimaryDNS ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetDNSSettingRequest_PrimaryDNS * pTLVx10; + pTLVx10 = (sWDSSetDNSSettingRequest_PrimaryDNS*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + ULONG ip0 = (*pPrimaryDNS & 0x000000FF); + ULONG ip1 = (*pPrimaryDNS & 0x0000FF00) >> 8; + ULONG ip2 = (*pPrimaryDNS & 0x00FF0000) >> 16; + ULONG ip3 = (*pPrimaryDNS & 0xFF000000) >> 24; + + // Set the value + pTLVx10->mIPV4Address[0] = (INT8)ip0; + pTLVx10->mIPV4Address[1] = (INT8)ip1; + pTLVx10->mIPV4Address[2] = (INT8)ip2; + pTLVx10->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx10Sz; + } + + // Add Secondary DNS, if specified + if (pSecondaryDNS != 0) + { + // Check size + WORD tlvx11Sz = sizeof( sWDSSetDNSSettingRequest_SecondaryDNS ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx11Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x11; + pHeader->mLength = tlvx11Sz; + + offset += sizeof( sQMIRawContentHeader ); + + sWDSSetDNSSettingRequest_SecondaryDNS * pTLVx11; + pTLVx11 = (sWDSSetDNSSettingRequest_SecondaryDNS*)(pOut + offset); + memset( pTLVx11, 0, tlvx11Sz ); + + ULONG ip0 = (*pSecondaryDNS & 0x000000FF); + ULONG ip1 = (*pSecondaryDNS & 0x0000FF00) >> 8; + ULONG ip2 = (*pSecondaryDNS & 0x00FF0000) >> 16; + ULONG ip3 = (*pSecondaryDNS & 0xFF000000) >> 24; + + // Set the value + pTLVx11->mIPV4Address[0] = (INT8)ip0; + pTLVx11->mIPV4Address[1] = (INT8)ip1; + pTLVx11->mIPV4Address[2] = (INT8)ip2; + pTLVx11->mIPV4Address[3] = (INT8)ip3; + + offset += tlvx11Sz; + } + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetDNSSettings + +DESCRIPTION: + This function gets the DNS settings for the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pPrimaryDNS [ O ] - Primary DNS IPv4 address + pSecondaryDNS [ O ] - Secondary DNS IPv4 address + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetDNSSettings( + ULONG inLen, + const BYTE * pIn, + ULONG * pPrimaryDNS, + ULONG * pSecondaryDNS ) +{ + // Validate arguments + if (pIn == 0 || pPrimaryDNS == 0 || pSecondaryDNS == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the Primary DNS + const sWDSGetDNSSettingResponse_PrimaryDNS * pTLVx10; + ULONG outLenx10; + ULONG rc = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx10 < sizeof( sWDSGetDNSSettingResponse_PrimaryDNS )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG ip0 = pTLVx10->mIPV4Address[0]; + ULONG ip1 = pTLVx10->mIPV4Address[1] << 8; + ULONG ip2 = pTLVx10->mIPV4Address[2] << 16; + ULONG ip3 = pTLVx10->mIPV4Address[3] << 24; + + *pPrimaryDNS = (ip0 | ip1 | ip2 | ip3); + } + + // Find the Secondary DNS + const sWDSGetDNSSettingResponse_SecondaryDNS * pTLVx11; + ULONG outLenx11; + rc = GetTLV( inLen, pIn, 0x11, &outLenx11, (const BYTE **)&pTLVx11 ); + if (rc == eGOBI_ERR_NONE) + { + if (outLenx11 < sizeof( sWDSGetDNSSettingResponse_SecondaryDNS )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG ip0 = pTLVx11->mIPV4Address[0]; + ULONG ip1 = pTLVx11->mIPV4Address[1] << 8; + ULONG ip2 = pTLVx11->mIPV4Address[2] << 16; + ULONG ip3 = pTLVx11->mIPV4Address[3] << 24; + + *pSecondaryDNS = (ip0 | ip1 | ip2 | ip3); + } + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetDataBearerTechnology + +DESCRIPTION: + This function retrieves the current data bearer technology (only + valid when connected) + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pDataCaps [ O ] - The data bearer technology + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetDataBearerTechnology( + ULONG inLen, + const BYTE * pIn, + ULONG * pDataBearer ) +{ + // Validate arguments + if (pIn == 0 || pDataBearer == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the TLV + const sWDSGetDataBearerTechnologyResponse_Technology * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + // Is the TLV large enough? + if (outLenx01 < sizeof( sWDSGetDataBearerTechnologyResponse_Technology )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pDataBearer = pTLVx01->mDataBearerTechnology; + + return eGOBI_ERR_NONE; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationWMS.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationWMS.cpp new file mode 100644 index 0000000..9178d11 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Gobi3000Translation/Gobi3000TranslationWMS.cpp @@ -0,0 +1,1120 @@ +/*=========================================================================== +FILE: + Gobi3000TranslationWMS.cpp + +DESCRIPTION: + QUALCOMM Translation for Gobi 3000 (WMS Service) + +Copyright (c) 2013, 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 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 "Gobi3000Translation.h" + +/*=========================================================================== +METHOD: + PackDeleteSMS + +DESCRIPTION: + This function deletes one or more SMS messages from device memory + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + storageType [ I ] - SMS message storage type + pMessageIndex [ I ] - (Optional) message index + pMessageTag [ I ] - (Optional) message tag + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackDeleteSMS( + ULONG * pOutLen, + BYTE * pOut, + ULONG storageType, + ULONG * pMessageIndex, + ULONG * pMessageTag ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sWMSDeleteRequest_MemoryStorage ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // The SPC + sWMSDeleteRequest_MemoryStorage * pTLVx01; + pTLVx01 = (sWMSDeleteRequest_MemoryStorage*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mStorageType = (eQMIWMSStorageTypes)storageType; + + offset += tlvx01Sz; + + // Add the Message index, if specified + if (pMessageIndex != 0) + { + // Check size + WORD tlvx10Sz = sizeof( sWMSDeleteRequest_MessageIndex ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + offset += sizeof( sQMIRawContentHeader ); + + // The SPC + sWMSDeleteRequest_MessageIndex * pTLVx10; + pTLVx10 = (sWMSDeleteRequest_MessageIndex*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the values + pTLVx10->mStorageIndex = *pMessageIndex; + + offset += tlvx10Sz; + } + + // Add the Message tag, if specified + if (pMessageTag != 0) + { + // Check size + WORD tlvx11Sz = sizeof( sWMSDeleteRequest_MessageTag ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx11Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x11; + pHeader->mLength = tlvx11Sz; + + offset += sizeof( sQMIRawContentHeader ); + + // The SPC + sWMSDeleteRequest_MessageTag * pTLVx11; + pTLVx11 = (sWMSDeleteRequest_MessageTag*)(pOut + offset); + memset( pTLVx11, 0, tlvx11Sz ); + + // Set the values + pTLVx11->mMessageTag = (eQMIWMSMessageTags)*pMessageTag; + + offset += tlvx11Sz; + } + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackGetSMSList + +DESCRIPTION: + This function returns the list of SMS messages stored on the device + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + storageType [ I ] - SMS message storage type + pRequestedTag [ I ] - Message index + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackGetSMSList( + ULONG * pOutLen, + BYTE * pOut, + ULONG storageType, + ULONG * pRequestedTag ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sWMSListMessagesRequest_MemoryStorage ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // The storage type + sWMSListMessagesRequest_MemoryStorage * pTLVx01; + pTLVx01 = (sWMSListMessagesRequest_MemoryStorage*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mStorageType = (eQMIWMSStorageTypes)storageType; + + offset += tlvx01Sz; + + // Add the Message tag, if specified + if (pRequestedTag != 0) + { + // Check size + WORD tlvx10Sz = sizeof( sWMSListMessagesRequest_MessageTag ); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + pHeader = (sQMIRawContentHeader*)(pOut + offset); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + offset += sizeof( sQMIRawContentHeader ); + + // The SPC + sWMSListMessagesRequest_MessageTag * pTLVx10; + pTLVx10 = (sWMSListMessagesRequest_MessageTag*)(pOut + offset); + memset( pTLVx10, 0, tlvx10Sz ); + + // Set the values + pTLVx10->mMessageTag = (eQMIWMSMessageTags)*pRequestedTag; + + offset += tlvx10Sz; + } + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetSMSList + +DESCRIPTION: + This function returns the list of SMS messages stored on the device + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pMessageListSize [I/O] - Upon input the maximum number of elements that the + message list array can contain. Upon successful + output the actual number of elements in the message + list array + pMessageList [ O ] - The message list array + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetSMSList( + ULONG inLen, + const BYTE * pIn, + ULONG * pMessageListSize, + BYTE * pMessageList ) +{ + // Validate arguments + if (pIn == 0 || pMessageListSize == 0 + || *pMessageListSize == 0 || pMessageList == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + ULONG maxMessageListSz = *pMessageListSize; + + // Assume failure + *pMessageListSize = 0; + + // Find the messages + const sWMSListMessagesResponse_MessageList * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sWMSListMessagesResponse_MessageList )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG messageListSz = pTLVx01->mNumberOfMessages; + if (messageListSz == 0) + { + // No stored messages, but not necessarily a failure + return eGOBI_ERR_NONE; + } + + if (maxMessageListSz < messageListSz) + { + messageListSz = maxMessageListSz; + } + + const sWMSListMessagesResponse_MessageList::sMessage * pMessages; + + // Verify there is room for the array in the TLV + if (outLenx01 < sizeof( sWMSListMessagesResponse_MessageList ) + + sizeof( sWMSListMessagesResponse_MessageList::sMessage ) + * messageListSz) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Align to the first array element + pMessages = (const sWMSListMessagesResponse_MessageList::sMessage *) + ((const BYTE *)pTLVx01 + + sizeof( sWMSListMessagesResponse_MessageList )); + + ULONG * pData = (ULONG *)pMessageList; + for (ULONG m = 0; m < messageListSz; m++) + { + *pData++ = pMessages->mStorageIndex; + *pData++ = pMessages->mMessageTag; + pMessages++; + } + + *pMessageListSize = messageListSz; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackGetSMS + +DESCRIPTION: + This function returns an SMS message from device memory + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + storageType [ I ] - SMS message storage type + messageIndex [ I ] - Message index + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackGetSMS( + ULONG * pOutLen, + BYTE * pOut, + ULONG storageType, + ULONG messageIndex ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sWMSRawReadRequest_MessageIndex ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // The index + sWMSRawReadRequest_MessageIndex * pTLVx01; + pTLVx01 = (sWMSRawReadRequest_MessageIndex*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mStorageType = (eQMIWMSStorageTypes)storageType; + pTLVx01->mStorageIndex = messageIndex; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetSMS + +DESCRIPTION: + This function returns an SMS message from device memory + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pMessageTag [ O ] - Message tag + pMessageFormat [ O ] - Message format + pMessageSize [I/O] - Upon input the maximum number of bytes that can be + written to the message array. Upon successful + output the actual number of bytes written to the + message array + pMessage [ O ] - The message contents array + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetSMS( + ULONG inLen, + const BYTE * pIn, + ULONG * pMessageTag, + ULONG * pMessageFormat, + ULONG * pMessageSize, + BYTE * pMessage ) +{ + // Validate arguments + if (pIn == 0 + || pMessageTag == 0 + || pMessageFormat == 0 + || pMessageSize == 0 + || *pMessageSize == 0 + || pMessage == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + ULONG maxMessageSz = *pMessageSize; + + // Assume failure + *pMessageSize = 0; + + // Find the messages + const sWMSRawReadResponse_MessageData * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sWMSRawReadResponse_MessageData )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pMessageTag = pTLVx01->mMessageTag; + *pMessageFormat = pTLVx01->mMessageFormat; + + ULONG messageSz = pTLVx01->mRawMessageLength; + if (messageSz == 0) + { + // No stored messages, but not necessarily a failure + return eGOBI_ERR_NONE; + } + + if (messageSz > maxMessageSz) + { + messageSz = maxMessageSz; + } + + // Verify there is room for the array in the TLV + if (outLenx01 < sizeof( sWMSRawReadResponse_MessageData ) + messageSz) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + memcpy( pMessage, + pTLVx01 + sizeof( sWMSRawReadResponse_MessageData ), + messageSz ); + + *pMessageSize = messageSz; + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackModifySMSStatus + +DESCRIPTION: + This function modifies the status of an SMS message saved in storage on + the device + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + storageType [ I ] - SMS message storage type + messageIndex [ I ] - Message index + messageTag [ I ] - Message tag + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackModifySMSStatus( + ULONG * pOutLen, + BYTE * pOut, + ULONG storageType, + ULONG messageIndex, + ULONG messageTag ) +{ + // Validate arguments + if (pOut == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sWMSModifyTagRequest_MessageTag ); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // The index + sWMSModifyTagRequest_MessageTag * pTLVx01; + pTLVx01 = (sWMSModifyTagRequest_MessageTag*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mStorageType = (eQMIWMSStorageTypes)storageType; + pTLVx01->mStorageIndex = messageIndex; + pTLVx01->mMessageTag = (eQMIWMSMessageTags)messageTag; + + offset += tlvx01Sz; + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSaveSMS + +DESCRIPTION: + This function saves an SMS message to device memory + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + storageType [ I ] - SMS message storage type + messageFormat [ I ] - Message format + messageSize [ I ] - The length of the message contents in bytes + pMessage [ I ] - The message contents + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSaveSMS( + ULONG * pOutLen, + BYTE * pOut, + ULONG storageType, + ULONG messageFormat, + ULONG messageSize, + BYTE * pMessage ) +{ + // Validate arguments + if (pOut == 0 || messageSize == 0 || pMessage == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sWMSRawWriteRequest_MessageData ) + + (WORD)messageSize; + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // The index + sWMSRawWriteRequest_MessageData * pTLVx01; + pTLVx01 = (sWMSRawWriteRequest_MessageData*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mStorageType = (eQMIWMSStorageTypes)storageType; + pTLVx01->mMessageFormat = (eQMIWMSMessageFormats)messageFormat; + pTLVx01->mRawMessageLength = (UINT16)messageSize; + + offset += sizeof( sWMSRawWriteRequest_MessageData ); + + // Add the message + memcpy( (pOut + offset), pMessage, messageSize ); + + offset += messageSize; + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseSaveSMS + +DESCRIPTION: + This function saves an SMS message to device memory + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pMessageIndex [ O ] - The message index assigned by the device + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseSaveSMS( + ULONG inLen, + const BYTE * pIn, + ULONG * pMessageIndex ) +{ + // Validate arguments + if (pIn == 0 || pMessageIndex == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Find the messages + const sWMSRawWriteResponse_MessageIndex * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sWMSRawWriteResponse_MessageIndex )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pMessageIndex = pTLVx01->mStorageIndex; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + PackSendSMS + +DESCRIPTION: + This function sends an SMS message for immediate over the air transmission + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + messageFormat [ I ] - Message format + messageSize [ I ] - The length of the message contents in bytes + pMessage [ I ] - The message contents + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSendSMS( + ULONG * pOutLen, + BYTE * pOut, + ULONG messageFormat, + ULONG messageSize, + BYTE * pMessage ) +{ + // Validate arguments + if (pOut == 0 || messageSize == 0 || pMessage == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Check size + WORD tlvx01Sz = sizeof( sWMSRawSendRequest_MessageData ) + + (WORD)messageSize; + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // The index + sWMSRawSendRequest_MessageData * pTLVx01; + pTLVx01 = (sWMSRawSendRequest_MessageData*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mMessageFormat = (eQMIWMSMessageFormats)messageFormat; + pTLVx01->mRawMessageLength = (UINT16)messageSize; + + offset += sizeof( sWMSRawSendRequest_MessageData ); + + // Add the message + memcpy( (pOut + offset), pMessage, messageSize ); + + offset += messageSize; + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseSendSMS + +DESCRIPTION: + This function sends an SMS message for immediate over the air transmission + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pMessageFailureCode [ O ] - When the function fails due to an error sending + the message this parameter may contain the + message failure cause code (see 3GPP2 N.S0005 + Section 6.5.2.125). If the cause code is not + provided then the value will be 0xFFFFFFFF + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseSendSMS( + ULONG inLen, + const BYTE * pIn, + ULONG * pMessageFailureCode ) +{ + // Validate arguments + if (pIn == 0 || pMessageFailureCode == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume we have no message failure cause code + *pMessageFailureCode = 0xffffffff; + + // Check mandatory response + const sResultCode * pTLVx02; + ULONG outLenx02; + ULONG rc = GetTLV( inLen, pIn, 0x02, &outLenx02, (const BYTE **)&pTLVx02 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx02 < sizeof( sResultCode )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + if (pTLVx02->mQMIResult != eQMIResults_Success) + { + rc = pTLVx02->mQMIError + eGOBI_ERR_QMI_OFFSET; + } + + if (rc != eGOBI_ERR_NONE) + { + // Check for the failure code (optional) + const sWMSRawSendResponse_CauseCode * pTLVx10; + ULONG outLenx10; + ULONG rc2 = GetTLV( inLen, pIn, 0x10, &outLenx10, (const BYTE **)&pTLVx10 ); + if (rc2 == eGOBI_ERR_NONE) + { + if (outLenx10 < sizeof( sWMSRawSendResponse_CauseCode )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + *pMessageFailureCode = pTLVx10->mCauseCode; + } + } + + return rc; +} + +/*=========================================================================== +METHOD: + ParseGetSMSCAddress + +DESCRIPTION: + This function returns the SMS center address + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + addressSize [ I ] - The maximum number of characters (including NULL + terminator) that the SMS center address array + can contain + pSMSCAddress [ O ] - The SMS center address represented as a NULL + terminated string + typeSize [ I ] - The maximum number of characters (including NULL + terminator) that the SMS center address type array + can contain + pSMSCType [ O ] - The SMS center address type represented as a NULL + terminated string + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetSMSCAddress( + ULONG inLen, + const BYTE * pIn, + BYTE addressSize, + CHAR * pSMSCAddress, + BYTE typeSize, + CHAR * pSMSCType ) +{ + // Validate arguments + if (pIn == 0 + || addressSize == 0 || pSMSCAddress == 0 + || typeSize == 0 || pSMSCType == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume empty + pSMSCAddress[0] = 0; + pSMSCType[0] = 0; + + // Get the address (mandatory) + const sWMSGetSMSCAddressResponse_Address * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sWMSRawSendResponse_CauseCode )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Handle the type as a string (maximum 3 chars) + std::string smscType( &pTLVx01->mSMSCAddressType[0], 3 ); + + // Is the SMSC type present? (optional) + ULONG smscTypeLen = (ULONG)smscType.size(); + if (smscTypeLen > 0) + { + // Space to perform copy? + if (typeSize < smscTypeLen + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pSMSCType, &pTLVx01->mSMSCAddressType[0], smscTypeLen ); + pSMSCType[smscTypeLen] = 0; + } + + // Treat the address as a null terminated string + std::string smscAddr( (const CHAR *)pTLVx01 + + sizeof( sWMSGetSMSCAddressResponse_Address ), + pTLVx01->mSMSCAddressLength ); + + ULONG smscAddrLen = (ULONG)smscAddr.size(); + if (addressSize < smscAddrLen + 1) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pSMSCAddress, smscAddr.c_str(), addressSize ); + pSMSCAddress[addressSize] = 0; + + return rc; +} + +/*=========================================================================== +METHOD: + PackSetSMSCAddress + +DESCRIPTION: + This function sets the SMS center address + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + pSMSCAddress [ I ] - The SMS center address represented as a NULL + terminated string + pSMSCType [ I ] - The SMS center address type represented as a NULL + terminated string (optional) + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetSMSCAddress( + ULONG * pOutLen, + BYTE * pOut, + CHAR * pSMSCAddress, + CHAR * pSMSCType ) +{ + // Validate arguments + if (pOut == 0 || pSMSCAddress == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // The TLV contains only the address + std::string smscAddr( pSMSCAddress ); + + // Check size + WORD tlvx01Sz = (WORD)smscAddr.size(); + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + memcpy( (pOut + offset), smscAddr.c_str(), tlvx01Sz ); + offset += tlvx01Sz; + + // smscType is optional + if (pSMSCType != 0) + { + // The TLV contains only the type + std::string smscType( pSMSCType ); + + if (smscType.size() != 0) + { + // Check size + WORD tlvx10Sz = (WORD)smscType.size(); + if (*pOutLen < offset + sizeof( sQMIRawContentHeader ) + tlvx10Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x10; + pHeader->mLength = tlvx10Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + memcpy( (pOut + offset), smscType.c_str(), tlvx10Sz ); + offset += tlvx10Sz; + } + } + + + *pOutLen = offset; + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + ParseGetSMSRoutes + +DESCRIPTION: + This function gets the current incoming SMS routing information + +PARAMETERS: + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pRouteSize [I/O] - Upon input the maximum number of elements that the + SMS route array can contain. Upon succes the actual + number of elements in the SMS route array + pRoutes [ O ] - The SMS route array + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG ParseGetSMSRoutes( + ULONG inLen, + const BYTE * pIn, + BYTE * pRouteSize, + BYTE * pRoutes ) +{ + // Validate arguments + if (pIn == 0 || pRouteSize == 0 || *pRouteSize == 0 || pRoutes == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + // Assume failure + BYTE maxRoutes = *pRouteSize; + *pRouteSize = 0; + + // Get the route list + const sWMSGetRoutesResponse_RouteList * pTLVx01; + ULONG outLenx01; + ULONG rc = GetTLV( inLen, pIn, 0x01, &outLenx01, (const BYTE **)&pTLVx01 ); + if (rc != eGOBI_ERR_NONE) + { + return rc; + } + + if (outLenx01 < sizeof( sWMSGetRoutesResponse_RouteList )) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + ULONG routeCount = pTLVx01->mNumberOfRoutes; + if (routeCount > (ULONG)maxRoutes) + { + routeCount = (ULONG)maxRoutes; + } + + const sWMSGetRoutesResponse_RouteList::sRoute * pInRoute; + + // Verify there is room for the array in the TLV + if (outLenx01 < sizeof( sWMSGetRoutesResponse_RouteList ) + + sizeof( sWMSGetRoutesResponse_RouteList::sRoute ) + * routeCount) + { + return eGOBI_ERR_MALFORMED_RSP; + } + + // Align to the first array element + pInRoute = (const sWMSGetRoutesResponse_RouteList::sRoute *) + ((const BYTE *)pTLVx01 + + sizeof( sWMSGetRoutesResponse_RouteList )); + + ULONG * pRouteArray = (ULONG *)pRoutes; + for (ULONG r = 0; r < routeCount; r++) + { + *pRouteArray++ = pInRoute->mMessageType; + *pRouteArray++ = pInRoute->mMessageClass; + *pRouteArray++ = pInRoute->mStorageType; + *pRouteArray++ = pInRoute->mRouteValue; + pInRoute++; + } + + *pRouteSize = (BYTE)routeCount; + return rc; +} + +/*=========================================================================== +METHOD: + PackSetSMSRoutes + +DESCRIPTION: + This function sets the desired incoming SMS routing information + +PARAMETERS: + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied to pOut + pOut [ O ] - Output buffer + pRouteSize [ I ] - The number of elements in the SMS route array + pRoutes [ I ] - The SMS route array + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PackSetSMSRoutes( + ULONG * pOutLen, + BYTE * pOut, + BYTE * pRouteSize, + BYTE * pRoutes ) +{ + // Validate arguments + if (pOut == 0 || pRouteSize == 0 || *pRouteSize == 0 || pRoutes == 0) + { + return eGOBI_ERR_INVALID_ARG; + } + + UINT16 routeCount = (ULONG)*pRouteSize; + + // Check size + WORD tlvx01Sz = sizeof( sWMSSetRoutesRequest_RouteList ) + + sizeof( sWMSSetRoutesRequest_RouteList::sRoute ) * routeCount; + if (*pOutLen < sizeof( sQMIRawContentHeader ) + tlvx01Sz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + sQMIRawContentHeader * pHeader = (sQMIRawContentHeader*)(pOut); + pHeader->mTypeID = 0x01; + pHeader->mLength = tlvx01Sz; + + ULONG offset = sizeof( sQMIRawContentHeader ); + + // Add route count + sWMSSetRoutesRequest_RouteList * pTLVx01; + pTLVx01 = (sWMSSetRoutesRequest_RouteList*)(pOut + offset); + memset( pTLVx01, 0, tlvx01Sz ); + + // Set the values + pTLVx01->mNumberOfRoutes = routeCount; + offset += sizeof( sWMSSetRoutesRequest_RouteList ); + + sWMSSetRoutesRequest_RouteList::sRoute * pOutRoute; + + // Align to the first array element + pOutRoute = (sWMSSetRoutesRequest_RouteList::sRoute *)(pOut + offset); + + // Add the routes + ULONG * pRouteArray = (ULONG *)pRoutes; + for (ULONG r = 0; r < routeCount; r++) + { + pOutRoute->mMessageType = (eQMIWMSMessageTypes)*pRouteArray++; + pOutRoute->mMessageClass = (eQMIWMSMessageClasses)*pRouteArray++; + pOutRoute->mStorageType = (eQMIWMSStorageTypes)*pRouteArray++; + pOutRoute->mReceiptAction = (eQMIWMSReceiptActions)*pRouteArray++; + pOutRoute++; + offset += sizeof( sWMSSetRoutesRequest_RouteList::sRoute ); + } + + *pOutLen = offset; + return eGOBI_ERR_NONE; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmt.cpp b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmt.cpp new file mode 100644 index 0000000..d956779 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmt.cpp @@ -0,0 +1,605 @@ +/*=========================================================================== +FILE: + GobiConnectionMgmt.cpp + +DESCRIPTION: + QUALCOMM Connection Management API for Gobi + +PUBLIC CLASSES AND FUNCTIONS: + CGobiConnectionMgmtDLL + cGobiConnectionMgmt + +Copyright (c) 2013, 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 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 "GobiConnectionMgmt.h" +#include "QMIBuffers.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// Global object +CGobiConnectionMgmtDLL gDLL; + +// Interval between traffic processing loop iterations (milliseconds) +const ULONG TRAFFIC_INTERVAL_MS = 300000; + +// Maximum amount of time to wait for the traffic thread to exit +const ULONG THREAD_EXIT_TIME = 2000; + +/*=========================================================================== +METHOD: + TrafficProcessThread (Free Method) + +DESCRIPTION: + QMI traffic process thread - processes all traffic in order to fire + off QMI traffic related callbacks + +PARAMETERS: + pArg [ I ] - Object to interface to + +RETURN VALUE: + void * - thread exit value (always 0) +===========================================================================*/ +void * TrafficProcessThread( PVOID pArg ) +{ + // Keep running? + bool bRun = false; + + // Create a vector of the objects to wait on + std::vector events; + + // Store the index to service type for use later + std::map services; + + // Grab API object + cGobiConnectionMgmt * pAPI = (cGobiConnectionMgmt *)pArg; + if (pAPI != 0) + { + // Time to go to work + bRun = true; + + // Add the thread exit event + events.push_back( &pAPI->mExitEvent ); + + // Grab signal events for our protocol servers + std::map ::const_iterator pIter; + pIter = pAPI->mServers.begin(); + while (pIter != pAPI->mServers.end()) + { + eQMIService svc = pIter->first; + cQMIProtocolServer * pServer = pAPI->GetServer( svc ); + if (pServer != 0) + { + // Grab the log from the server + const cProtocolLog & log = pServer->GetLog(); + + // Grab the Signal event, if it exists + cEvent & sigEvent = log.GetSignalEvent(); + + services[events.size()] = svc; + events.push_back( &sigEvent ); + } + + pIter++; + } + } + + TRACE( "GobiConnectionMgmt traffic thread [%u] started\n", + (UINT)pthread_self() ); + + // Loop waiting for exit event + while (bRun == true) + { + // Wait for activity + DWORD ignoredVal, index; + int nRet = WaitOnMultipleEvents( events, + TRAFFIC_INTERVAL_MS, + ignoredVal, + index ); + + // Timeout + if (nRet == -ETIME) + { + // Do nothing + } + // Error? + else if (nRet <= 0) + { + TRACE( "GobiConnectionMgmt traffic thread wait error %d\n", nRet ); + bRun = false; + } + // Exit event? + else if (index == 0) + { + bRun = false; + } + else if (index < events.size()) + { + // Run ProcessTraffic() for this service type + if (services.find( index ) != services.end()) + { + pAPI->ProcessTraffic( services[index] ); + } + } + else + { + // Fatal error + bRun = false; + } + } + + TRACE( "GobiConnectionMgmt traffic thread [%u] exited\n", + (UINT)pthread_self() ); + + if (pAPI != 0) + { + pAPI->mThreadCleanupFinished = true; + } + + return 0; +} + +/*=========================================================================== +METHOD: + CallbackThread (Free Method) + +DESCRIPTION: + Thread to execute a callback asynchronously + +PARAMETERS: + pArg [ I ] - The cGobiCMCallback object + +RETURN VALUE: + void * - thread exit value (always 0) +===========================================================================*/ +void * CallbackThread( PVOID pArg ) +{ + cGobiCMCallback * pCB = (cGobiCMCallback *)pArg; + if (pCB == 0) + { + ASSERT( 0 ); + return 0; + } + + pCB->Call(); + + delete pCB; + pCB = 0; + + return 0; +} + +/*=========================================================================*/ +// CGobiConnectionMgmtDLL Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + CGobiConnectionMgmtDLL (Public Method) + +DESCRIPTION: + Constructor + +RETURN VALUE: + None +===========================================================================*/ +CGobiConnectionMgmtDLL::CGobiConnectionMgmtDLL() +{ + // Create sync CS + pthread_mutex_init( &mSyncSection, NULL ); +} + +/*=========================================================================== +METHOD: + ~CGobiConnectionMgmtDLL (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +CGobiConnectionMgmtDLL::~CGobiConnectionMgmtDLL() +{ + std::map tmpAPI = mAPI; + std::map ::const_iterator pIter; + pIter = tmpAPI.begin(); + + while (pIter != tmpAPI.end()) + { + cGobiConnectionMgmt * pAPI = pIter->second; + if (pAPI != 0) + { + pAPI->Cleanup(); + delete pAPI; + } + + pIter++; + } + + mAPI.clear(); + + pthread_mutex_destroy( &mSyncSection ); +} + +/*=========================================================================== +METHOD: + CreateAPI (Public Method) + +DESCRIPTION: + Create a new API object + +RETURN VALUE: + GOBIHANDLE - Handle to new API object (0 upon failure) +===========================================================================*/ +GOBIHANDLE CGobiConnectionMgmtDLL::CreateAPI() +{ + pthread_mutex_lock( &mSyncSection ); + + cGobiConnectionMgmt * pAPI = new cGobiConnectionMgmt; + if (pAPI != 0) + { + bool bInit = pAPI->Initialize(); + if (bInit == true) + { + mAPI[(GOBIHANDLE)pAPI] = pAPI; + } + } + + pthread_mutex_unlock( &mSyncSection ); + + return (GOBIHANDLE)pAPI; +} + +/*=========================================================================== +METHOD: + DeleteAPI (Public Method) + +DESCRIPTION: + Delete an existing API object + +PARAMETERS: + handle [ I ] - Handle to API object to return + +RETURN VALUE: + None +===========================================================================*/ +void CGobiConnectionMgmtDLL::DeleteAPI( GOBIHANDLE handle ) +{ + pthread_mutex_lock( &mSyncSection ); + + std::map ::iterator pIter; + pIter = mAPI.find( handle ); + if (pIter != mAPI.end()) + { + cGobiConnectionMgmt * pAPI = pIter->second; + delete pAPI; + + mAPI.erase( pIter ); + } + + pthread_mutex_unlock( &mSyncSection ); +} + +/*=========================================================================== +METHOD: + GetAPI (Public Method) + +DESCRIPTION: + Return the requested API object + +PARAMETERS: + handle [ I ] - Handle to API object to return + +RETURN VALUE: + cGobiConnectionMgmt * +===========================================================================*/ +cGobiConnectionMgmt * CGobiConnectionMgmtDLL::GetAPI( GOBIHANDLE handle ) +{ + cGobiConnectionMgmt * pAPI = 0; + + pthread_mutex_lock( &mSyncSection ); + + std::map ::const_iterator pIter; + pIter = mAPI.find( handle ); + if (pIter != mAPI.end()) + { + pAPI = pIter->second; + } + + pthread_mutex_unlock( &mSyncSection ); + + return pAPI; +} + +/*=========================================================================*/ +// cGobiConnectionMgmt Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cGobiConnectionMgmt (Public Method) + +DESCRIPTION: + Constructor + +RETURN VALUE: + None +===========================================================================*/ +cGobiConnectionMgmt::cGobiConnectionMgmt() + : cGobiQMICore(), + mbThreadStarted( false ), + mThreadID( 0 ), + mThreadCleanupFinished( false ) +{ + // Nothing to do but init those variables +} + +/*=========================================================================== +METHOD: + ~cGobiConnectionMgmt (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +cGobiConnectionMgmt::~cGobiConnectionMgmt() +{ + Disconnect(); +} + +/*=========================================================================== +METHOD: + ProcessTraffic (Internal Method) + +DESCRIPTION: + Process traffic in a QMI server protocol log, this is done to + exercise QMI indication related callbacks + +PARAMETERS: + svc [ I ] - QMI Service type + +RETURN VALUE: + None +===========================================================================*/ +void cGobiConnectionMgmt::ProcessTraffic( eQMIService svc ) +{ + ULONG count = 0; + + std::map ::iterator pIter; + pIter = mServers.find( svc ); + if (pIter == mServers.end()) + { + return; + } + + sServerInfo & si = pIter->second; + cQMIProtocolServer * pSvr = si.mpServer; + if (pSvr == 0) + { + return; + } + + // Grab the service ID from the service + eQMIService svcID = pSvr->GetServiceType(); + if (svcID == eQMI_SVC_ENUM_BEGIN) + { + return; + } + + // Grab the log from the server + const cProtocolLog & logSvr = pSvr->GetLog(); + + // New items to process? + count = logSvr.GetCount(); + if (count != INVALID_LOG_INDEX && count > si.mLogsProcessed) + { + for (ULONG i = si.mLogsProcessed; i < count; i++) + { + sProtocolBuffer buf = logSvr.GetBuffer( i ); + if (buf.IsValid() == false) + { + continue; + } + + eProtocolType pt = buf.GetType(); + if (IsQMIProtocolRX( pt ) == false) + { + continue; + } + + sQMIServiceBuffer qmiBuf( buf.GetSharedBuffer() ); + if (qmiBuf.IsIndication() == false) + { + continue; + } + + ULONG msgID = qmiBuf.GetMessageID(); + + tCallbackKey ck( svcID, msgID ); + std::map ::iterator pIter; + pIter = mCallbacks.find( ck ); + if (pIter == mCallbacks.end()) + { + continue; + } + + ULONG outLen = 0; + const BYTE * pOutput = (const BYTE *)qmiBuf.GetRawContents( outLen ); + tCallbackValue cv = pIter->second; + + cGenericCallback * pCB = 0; + pCB = new cGenericCallback( cv.first, + svcID, + msgID, + cv.second, + outLen, + pOutput ); + + if (pCB != 0) + { + if (pCB->Initialize() == false) + { + delete pCB; + } + } + } + + si.mLogsProcessed = count; + } +} + +/*=========================================================================== +METHOD: + Connect (Public Method) + +DESCRIPTION: + Connect to the specified Gobi device + +PARAMETERS: + pQMIFile [ I ] - QMI control file to connect to + services [ I ] - QMI services to connect to + +RETURN VALUE: + std::set - Services successfuly configured +===========================================================================*/ +std::set cGobiConnectionMgmt::Connect( + LPCSTR pQMIFile, + std::set & services ) +{ + std::set svcs = cGobiQMICore::Connect( pQMIFile, services ); + if (svcs.size() > 0) + { + // Start the traffic processing thread? + if (mbThreadStarted == false) + { + // Clear mExitEvent; + mExitEvent.Clear(); + + pthread_create( &mThreadID, + NULL, + TrafficProcessThread, + this ); + + mbThreadStarted = true; + } + } + + return svcs; +} + +/*=========================================================================== +METHOD: + Disconnect (Public Method) + +DESCRIPTION: + Disconnect from the currently connected Gobi device + +RETURN VALUE: + bool +===========================================================================*/ +bool cGobiConnectionMgmt::Disconnect() +{ + // Clear all callback function pointers + mCallbacks.clear(); + + // Exit traffic processing thread + if (mbThreadStarted == true) + { + // Signal thread to exit + mExitEvent.Set( 0 ); + + // If we are not being called from the thread itself then wait for + // it to exit, if not then it will have to exit automatically + if (pthread_self() != mThreadID) + { + if (mThreadID != 0) + { + pthread_join( mThreadID, NULL ); + } + } + } + + // Clear out thread handle/ID + mbThreadStarted = false; + mThreadID = 0; + + return cGobiQMICore::Disconnect(); +} + +/*=========================================================================== +METHOD: + SetGenericCallback (Public Method) + +DESCRIPTION: + Enable/disable generic callback function + +PARAMETERS: + svcID [ I ] - Service ID to monitor + msgID [ I ] - Message ID to look for + pCallback [ I ] - Generic callback pointer + userValue [ I ] - User value to pass back to callback + +RETURN VALUE: + eGobiError - Return code +===========================================================================*/ +eGobiError cGobiConnectionMgmt::SetGenericCallback( + ULONG svcID, + ULONG msgID, + tFNGenericCallback pCallback, + ULONG_PTR userValue ) +{ + // Assume success + eGobiError rc = eGOBI_ERR_NONE; + + tCallbackKey ck( svcID, msgID ); + std::map ::iterator pIter; + pIter = mCallbacks.find( ck ); + + bool bOn = (pCallback != 0 && pIter == mCallbacks.end()); + bool bOff = (pCallback == 0 && pIter != mCallbacks.end()); + bool bReplace = (pCallback != 0 && pIter != mCallbacks.end()); + if (bOn == true || bReplace == true) + { + tCallbackValue cv( pCallback, userValue ); + mCallbacks[ck] = cv; + } + else if (bOff == true) + { + mCallbacks.erase( pIter ); + } + + return rc; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmt.h b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmt.h new file mode 100644 index 0000000..2e03121 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmt.h @@ -0,0 +1,269 @@ +/*=========================================================================== +FILE: + GobiConnectionMgmt.h + +DESCRIPTION: + QUALCOMM Connection Management API for Gobi + +PUBLIC CLASSES AND FUNCTIONS: + CGobiConnectionMgmtDLL + cGobiConnectionMgmt + +Copyright (c) 2013, 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 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. +==========================================================================*/ + +/*=========================================================================*/ +// Pragmas +/*=========================================================================*/ +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "GobiQMICore.h" + +#include "QMIBuffers.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// Handle to Gobi API +typedef ULONG_PTR GOBIHANDLE; + +extern "C" +{ + // Generic callback function pointer + typedef void (* tFNGenericCallback)( + ULONG svcID, + ULONG msgID, + ULONG_PTR userValue, + ULONG outLen, + const BYTE * pOut ); + +}; + +// CallbackThread prototype +// Thread to execute a callback asynchronously +void * CallbackThread( PVOID pArg ); + +/*=========================================================================*/ +// Class cGobiCMCallback +/*=========================================================================*/ +class cGobiCMCallback +{ + public: + // (Inline) Constructor + cGobiCMCallback() + { }; + + // (Inline) Destructor + virtual ~cGobiCMCallback() + { }; + + // (Inline) Initialize the callback object by starting the thread + bool Initialize() + { + // Start the thread + pthread_t threadID; + pthread_attr_t attributes; + pthread_attr_init( &attributes ); + pthread_attr_setdetachstate( &attributes, PTHREAD_CREATE_DETACHED ); + + int nRC = pthread_create( &threadID, + &attributes, + CallbackThread, + this ); + + if (nRC == 0) + { + // Success! + return true; + } + + return false; + }; + + protected: + // Call the function + virtual void Call() = 0; + + // Function thread gets full access + friend void * CallbackThread( PVOID pArg ); +}; + +/*=========================================================================*/ +// Class cGenericCallback +/*=========================================================================*/ +class cGenericCallback : public cGobiCMCallback +{ + public: + // (Inline) Constructor + cGenericCallback( + tFNGenericCallback pCallback, + ULONG svcID, + ULONG msgID, + ULONG_PTR userValue, + ULONG outLen, + const BYTE * pOut ) + : mServiceID( svcID ), + mMessageID( msgID ), + mUserValue( userValue ), + mOutputLen( 0 ), + mpCallback( pCallback ) + { + memset( &mOutput[0], 0, QMI_MAX_BUFFER_SIZE ); + if (outLen <= QMI_MAX_BUFFER_SIZE && pOut != 0) + { + mOutputLen = outLen; + memcpy( &mOutput[0], pOut, outLen ); + } + }; + + // (Inline) Destructor + virtual ~cGenericCallback() + { + mpCallback = 0; + }; + + protected: + /* Service ID */ + ULONG mServiceID; + + /* Message ID */ + ULONG mMessageID; + + /* User value */ + ULONG_PTR mUserValue; + + /* Actual size of output content */ + ULONG mOutputLen; + + /* Output content buffer */ + BYTE mOutput[QMI_MAX_BUFFER_SIZE]; + + /* Callback function */ + tFNGenericCallback mpCallback; + + // Call the function + virtual void Call() + { + if (mpCallback != 0) + { + mpCallback( mServiceID, + mMessageID, + mUserValue, + mOutputLen, + (const BYTE *)&mOutput[0] ); + } + }; +}; + +/*=========================================================================*/ +// Class cGobiConnectionMgmt +/*=========================================================================*/ +class cGobiConnectionMgmt : public cGobiQMICore +{ + public: + // Constructor + cGobiConnectionMgmt(); + + // Destructor + virtual ~cGobiConnectionMgmt(); + + // Connect to the specified Gobi device interface + virtual std::set Connect( + LPCSTR pInterface, + std::set & services ); + + // Disconnect from the currently connected device interface + virtual bool Disconnect(); + + // Enable/disable generic callback function + eGobiError SetGenericCallback( + ULONG svcID, + ULONG msgID, + tFNGenericCallback pCallback, + ULONG_PTR userValue ); + + protected: + // Process new traffic + void ProcessTraffic( eQMIService svc ); + + /* Is there an active thread? */ + bool mbThreadStarted; + + /* ID of traffic processing thread */ + pthread_t mThreadID; + + /* Traffic processing thread exit event */ + cEvent mExitEvent; + + /* Has the protocol server thread finished cleanup? */ + bool mThreadCleanupFinished; + + /* Generic callback function key/value */ + typedef std::pair tCallbackKey; + typedef std::pair tCallbackValue; + + /* Callback functions */ + std::map mCallbacks; + + // Traffic process thread gets full access + friend VOID * TrafficProcessThread( PVOID pArg ); +}; + +/*=========================================================================*/ +// Class CGobiConnectionMgmtDLL +/*=========================================================================*/ +class CGobiConnectionMgmtDLL +{ + public: + // Constructor + CGobiConnectionMgmtDLL(); + + // Destructor + virtual ~CGobiConnectionMgmtDLL(); + + // Create a new API object + GOBIHANDLE CreateAPI(); + + // Delete an existing API object + void DeleteAPI( GOBIHANDLE handle ); + + // Return the requested API object + cGobiConnectionMgmt * GetAPI( GOBIHANDLE handle ); + + protected: + /* API interface object */ + std::map mAPI; + + /* Synchronization object */ + mutable pthread_mutex_t mSyncSection; +}; + +extern CGobiConnectionMgmtDLL gDLL; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPI.h b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPI.h new file mode 100644 index 0000000..bbf40e2 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPI.h @@ -0,0 +1,18734 @@ +/*=========================================================================== +FILE: + GobiConnectionMgmtAPI.h + +DESCRIPTION: + QUALCOMM Connection Management API for Gobi 5000 + +Copyright (c) 2013, 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 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. +==========================================================================*/ + +/*=========================================================================*/ +// Definitions +/*=========================================================================*/ +#ifndef GOBI_TYPEDEFS +#define GOBI_TYPEDEFS + +// Type Definitions +typedef unsigned long ULONG; +typedef unsigned long * ULONG_PTR; +typedef unsigned long long ULONGLONG; +typedef signed char INT8; +typedef unsigned char UINT8; +typedef signed short INT16; +typedef unsigned short UINT16; +typedef signed int INT32; +typedef unsigned int UINT32; +typedef unsigned char BYTE; +typedef char CHAR; +typedef unsigned short WORD; +typedef unsigned short USHORT; +typedef const char * LPCSTR; + +#ifdef WINDOWS + typedef signed __int64 INT64; + typedef unsigned __int64 UINT64; +#else + typedef signed long long INT64; + typedef unsigned long long UINT64; +#endif + +#endif + +// Handle to Gobi API +typedef ULONG_PTR GOBIHANDLE; + +#ifdef __cplusplus + extern "C" { +#endif + +// Geeneric callback function pointer +typedef void (* tFNGenericCallback)( + ULONG svcID, + ULONG msgID, + GOBIHANDLE handle, + ULONG outLen, + const BYTE * pOut ); + +#ifdef __cplusplus + }; +#endif + +/*=========================================================================*/ +// Prototypes +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + GobiConnect + +DESCRIPTION: + This function connects the CM API library to the specified Gobi + device interface + +PARAMETERS: + pQMIFile [ I ] - Device interface to connect to + pServicesCount [I/O] - Upon input the number of QMI services to connect to, + upon output the number of QMI services successfully + connected to + pServices [I/O] - Upon input the array of QMI service IDs to connect + to, upon output the array of QMI service IDs + successfully connected to + pHandle [ O ] - The returned Gobi interface handle + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG GobiConnect( + LPCSTR pInterface, + ULONG * pServicesCount, + ULONG * pServices, + GOBIHANDLE * pHandle ); + +/*=========================================================================== +METHOD: + GobiCancel + +DESCRIPTION: + This function cancels the most recent outstanding request for the + specified QMI service + +PARAMETERS: + handle [ I ] - Gobi interface handle + svcID [ I ] - Service whose outstanding request is to be cancelled + pTXID [ O ] - QMI transaction ID of outstanding request + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG GobiCancel( + GOBIHANDLE handle, + ULONG svcID, + ULONG * pTXID ); + +/*=========================================================================== +METHOD: + GobiDisconnect + +DESCRIPTION: + This function disconnects the CM API library from the currently + connected Gobi device + +PARAMETERS: + handle [ I ] - Gobi interface handle + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG GobiDisconnect( GOBIHANDLE handle ); + +/*=========================================================================== +METHOD: + SetGenericCallback + +DESCRIPTION: + This function enables/disables a generic callback + +PARAMETERS: + handle [ I ] - Gobi interface handle + svcID [ I ] - Service ID to monitor + msgID [ I ] - Message ID to look for + pCallback [ I ] - Callback function + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG SetGenericCallback( + GOBIHANDLE handle, + ULONG svcID, + ULONG msgID, + tFNGenericCallback pCallback ); + +/*=========================================================================== +METHOD: + WDSReset + +DESCRIPTION: + The function sends 'WDS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetEventReport + +DESCRIPTION: + The function sends 'WDS/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSAbort + +DESCRIPTION: + The function sends 'WDS/Abort Request' (0x0002) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSAbort( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetIndication + +DESCRIPTION: + The function sends 'WDS/Set Indication Request' (0x0003) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetIndication( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetSupportedMessages + +DESCRIPTION: + The function sends 'WDS/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetSupportedFields + +DESCRIPTION: + The function sends 'WDS/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSStartNetworkInterface + +DESCRIPTION: + The function sends 'WDS/Start Network Interface Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSStartNetworkInterface( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSStopNetworkInterface + +DESCRIPTION: + The function sends 'WDS/Stop Network Interface Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSStopNetworkInterface( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetPacketServiceStatus + +DESCRIPTION: + The function sends 'WDS/Get Packet Service Status Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetPacketServiceStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetChannelRates + +DESCRIPTION: + The function sends 'WDS/Get Channel Rates Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetChannelRates( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetPacketStatistics + +DESCRIPTION: + The function sends 'WDS/Get Packet Statistics Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetPacketStatistics( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGoDormant + +DESCRIPTION: + The function sends 'WDS/Go Dormant Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGoDormant( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGoActive + +DESCRIPTION: + The function sends 'WDS/Go Active Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGoActive( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSCreateProfile + +DESCRIPTION: + The function sends 'WDS/Create Profile Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSCreateProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSModifyProfile + +DESCRIPTION: + The function sends 'WDS/Modify Profile Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSModifyProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSDeleteProfile + +DESCRIPTION: + The function sends 'WDS/Delete Profile Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSDeleteProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetProfileList + +DESCRIPTION: + The function sends 'WDS/Get Profile List Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetProfileList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetProfileSettings + +DESCRIPTION: + The function sends 'WDS/Get Profile Settings Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetProfileSettings( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetDefaultSettings + +DESCRIPTION: + The function sends 'WDS/Get Default Settings Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDefaultSettings( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetCurrentSettings + +DESCRIPTION: + The function sends 'WDS/Get Current Settings Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCurrentSettings( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetMIPMode + +DESCRIPTION: + The function sends 'WDS/Set MIP Mode Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetMIPMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetMIPMode + +DESCRIPTION: + The function sends 'WDS/Get MIP Mode Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetMIPMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetDormancy + +DESCRIPTION: + The function sends 'WDS/Get Dormancy Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDormancy( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetAutoconnectSetting + +DESCRIPTION: + The function sends 'WDS/Get Autoconnect Setting Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetAutoconnectSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetDataSessionDuration + +DESCRIPTION: + The function sends 'WDS/Get Data Session Duration Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDataSessionDuration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetModemStatus + +DESCRIPTION: + The function sends 'WDS/Get Modem Status Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetModemStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetDataBearerTechnology + +DESCRIPTION: + The function sends 'WDS/Get Data Bearer Technology Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDataBearerTechnology( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetModemInfo + +DESCRIPTION: + The function sends 'WDS/Get Modem Info Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetModemInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetActiveMIPProfile + +DESCRIPTION: + The function sends 'WDS/Get Active MIP Profile Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetActiveMIPProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetActiveMIPProfile + +DESCRIPTION: + The function sends 'WDS/Set Active MIP Profile Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetActiveMIPProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetMIPProfile + +DESCRIPTION: + The function sends 'WDS/Get MIP Profile Request' (0x003E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetMIPProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetMIPProfile + +DESCRIPTION: + The function sends 'WDS/Set MIP Profile Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetMIPProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetMIPParameters + +DESCRIPTION: + The function sends 'WDS/Get MIP Parameters Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetMIPParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetMIPParameters + +DESCRIPTION: + The function sends 'WDS/Set MIP Parameters Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetMIPParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetLastMIPStatus + +DESCRIPTION: + The function sends 'WDS/Get Last MIP Status Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLastMIPStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetANAAAAuthenticationStatus + +DESCRIPTION: + The function sends 'WDS/Get AN-AAA Authentication Status Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetANAAAAuthenticationStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetCurrentDataBearerTechnology + +DESCRIPTION: + The function sends 'WDS/Get Current Data Bearer Technology Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCurrentDataBearerTechnology( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetCallList + +DESCRIPTION: + The function sends 'WDS/Get Call List Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCallList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetCallRecord + +DESCRIPTION: + The function sends 'WDS/Get Call Record Request' (0x0046) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCallRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSClearCallList + +DESCRIPTION: + The function sends 'WDS/Clear Call List Request' (0x0047) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSClearCallList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetCallListMaxSize + +DESCRIPTION: + The function sends 'WDS/Get Call List Max Size Request' (0x0048) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCallListMaxSize( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetDefaultProfileNumber + +DESCRIPTION: + The function sends 'WDS/Get Default Profile Number Request' (0x0049) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDefaultProfileNumber( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetDefaultProfileNumber + +DESCRIPTION: + The function sends 'WDS/Set Default Profile Number Request' (0x004A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetDefaultProfileNumber( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSResetProfile + +DESCRIPTION: + The function sends 'WDS/Reset Profile Request' (0x004B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSResetProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSResetProfileParamToInvalid + +DESCRIPTION: + The function sends 'WDS/Reset Profile Param To Invalid Request' (0x004C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSResetProfileParamToInvalid( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetIPFamilyPreference + +DESCRIPTION: + The function sends 'WDS/Set IP Family Preference Request' (0x004D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetIPFamilyPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetFMCTunnelParameters + +DESCRIPTION: + The function sends 'WDS/Set FMC Tunnel Parameters Request' (0x004E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetFMCTunnelParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSClearFMCTunnelParameters + +DESCRIPTION: + The function sends 'WDS/Clear FMC Tunnel Parameters Request' (0x004F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSClearFMCTunnelParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetFMCTunnelParameters + +DESCRIPTION: + The function sends 'WDS/Get FMC Tunnel Parameters Request' (0x0050) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetFMCTunnelParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetAutoconnectSetting + +DESCRIPTION: + The function sends 'WDS/Set Autoconnect Setting Request' (0x0051) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetAutoconnectSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetDNSSetting + +DESCRIPTION: + The function sends 'WDS/Get DNS Setting Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDNSSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetDNSSetting + +DESCRIPTION: + The function sends 'WDS/Set DNS Setting Request' (0x0053) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetDNSSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetCDMAPreDormancySettings + +DESCRIPTION: + The function sends 'WDS/Get CDMA Pre-Dormancy Settings Request' (0x0054) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCDMAPreDormancySettings( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetCAMTimer + +DESCRIPTION: + The function sends 'WDS/Set CAM Timer Request' (0x0055) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetCAMTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetCAMTimer + +DESCRIPTION: + The function sends 'WDS/Get CAM Timer Request' (0x0056) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCAMTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetSCRM + +DESCRIPTION: + The function sends 'WDS/Set SCRM Request' (0x0057) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetSCRM( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetSCRM + +DESCRIPTION: + The function sends 'WDS/Get SCRM Request' (0x0058) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetSCRM( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetRDUD + +DESCRIPTION: + The function sends 'WDS/Set RDUD Request' (0x0059) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetRDUD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetRDUD + +DESCRIPTION: + The function sends 'WDS/Get RDUD Request' (0x005A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetRDUD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetSIPMIPCallType + +DESCRIPTION: + The function sends 'WDS/Get SIP/MIP Call Type Request' (0x005B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetSIPMIPCallType( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetEVDOPageMonitorPeriod + +DESCRIPTION: + The function sends 'WDS/Set EV-DO Page Monitor Period Request' (0x005C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetEVDOPageMonitorPeriod( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetEVDOLongSleep + +DESCRIPTION: + The function sends 'WDS/Set EV-DO Long Sleep Request' (0x005D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetEVDOLongSleep( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetEVDOPageMonitorPeriod + +DESCRIPTION: + The function sends 'WDS/Get EV-DO Page Monitor Period Request' (0x005E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetEVDOPageMonitorPeriod( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetCallThrottleInfo + +DESCRIPTION: + The function sends 'WDS/Get Call Throttle Info Request' (0x005F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCallThrottleInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetNSAPI + +DESCRIPTION: + The function sends 'WDS/Get NSAPI Request' (0x0060) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetNSAPI( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetDUNCallControlPreference + +DESCRIPTION: + The function sends 'WDS/Set DUN Call Control Preference Request' (0x0061) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetDUNCallControlPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetDUNCallControlInfo + +DESCRIPTION: + The function sends 'WDS/Get DUN Call Control Info Request' (0x0062) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDUNCallControlInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetDUNCallControlEventReport + +DESCRIPTION: + The function sends 'WDS/Set DUN Call Control Event Report Request' (0x0063) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetDUNCallControlEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSPendingDUNCallControl + +DESCRIPTION: + The function sends 'WDS/Pending DUN Call Control Request' (0x0064) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSPendingDUNCallControl( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSEMBMSTMGIActivate + +DESCRIPTION: + The function sends 'WDS/EMBMS TMGI Activate Request' (0x0065) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSEMBMSTMGIActivate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSEMBMSTMGIDeactivate + +DESCRIPTION: + The function sends 'WDS/EMBMS TMGI Deactivate Request' (0x0066) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSEMBMSTMGIDeactivate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSEMBMSTMGIListQuery + +DESCRIPTION: + The function sends 'WDS/EMBMS TMGI List Query Request' (0x0067) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSEMBMSTMGIListQuery( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetPreferredDataSystem + +DESCRIPTION: + The function sends 'WDS/Get Preferred Data System Request' (0x0069) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetPreferredDataSystem( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetLastDataCallStatus + +DESCRIPTION: + The function sends 'WDS/Get Last Data Call Status Request' (0x006A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLastDataCallStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetCurrentDataSystems + +DESCRIPTION: + The function sends 'WDS/Get Current Data Systems Request' (0x006B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCurrentDataSystems( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetPDNThrottleInfo + +DESCRIPTION: + The function sends 'WDS/Get PDN Throttle Info Request' (0x006C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetPDNThrottleInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetLTEAttachParameters + +DESCRIPTION: + The function sends 'WDS/Get LTE Attach Parameters Request' (0x0085) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLTEAttachParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSResetPacketStatistics + +DESCRIPTION: + The function sends 'WDS/Reset Packet Statistics Request' (0x0086) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSResetPacketStatistics( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetFlowControlStatus + +DESCRIPTION: + The function sends 'WDS/Get Flow Control Status Request' (0x0087) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetFlowControlStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSEMBMSTMGISwitch + +DESCRIPTION: + The function sends 'WDS/EMBMS TMGI Switch Request' (0x0088) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSEMBMSTMGISwitch( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSBindDataPort + +DESCRIPTION: + The function sends 'WDS/Bind Data Port Request' (0x0089) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSBindDataPort( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetPDNFilter + +DESCRIPTION: + The function sends 'WDS/Set PDN Filter Request' (0x008A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetPDNFilter( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSRemovePDNFilter + +DESCRIPTION: + The function sends 'WDS/Remove PDN Filter Request' (0x008B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSRemovePDNFilter( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSReverseIPTransportConnectionIndication + +DESCRIPTION: + The function sends 'WDS/Reverse IP Transport Connection Indication Request' (0x008D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSReverseIPTransportConnectionIndication( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetIPSecStaticSAConfig + +DESCRIPTION: + The function sends 'WDS/Get IPSec Static SA Config Request' (0x008F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetIPSecStaticSAConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSReverseIPTransportConfigComplete + +DESCRIPTION: + The function sends 'WDS/Reverse IP Transport Config Complete Request' (0x0090) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSReverseIPTransportConfigComplete( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetExtendedDataBearerTechnology + +DESCRIPTION: + The function sends 'WDS/Get Extended Data Bearer Technology Request' (0x0091) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetExtendedDataBearerTechnology( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetLTEMaximumAttachPDNNumber + +DESCRIPTION: + The function sends 'WDS/Get LTE Maximum Attach PDN Number Request' (0x0092) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLTEMaximumAttachPDNNumber( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetLTEAttachPDNList + +DESCRIPTION: + The function sends 'WDS/Set LTE Attach PDN List Request' (0x0093) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetLTEAttachPDNList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetLTEAttachPDNList + +DESCRIPTION: + The function sends 'WDS/Get LTE Attach PDN List Request' (0x0094) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLTEAttachPDNList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetLTEDataRetry + +DESCRIPTION: + The function sends 'WDS/Set LTE Data Retry Request' (0x0096) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetLTEDataRetry( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetLTEDataRetry + +DESCRIPTION: + The function sends 'WDS/Get LTE Data Retry Request' (0x0097) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLTEDataRetry( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSSetLTEAttachType + +DESCRIPTION: + The function sends 'WDS/Set LTE Attach Type Request' (0x0098) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetLTEAttachType( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDSGetLTEAttachType + +DESCRIPTION: + The function sends 'WDS/Get LTE Attach Type Request' (0x0099) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLTEAttachType( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSReset + +DESCRIPTION: + The function sends 'DMS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSSetEventReport + +DESCRIPTION: + The function sends 'DMS/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetSupportedMessages + +DESCRIPTION: + The function sends 'DMS/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetSupportedFields + +DESCRIPTION: + The function sends 'DMS/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetDeviceCapabilities + +DESCRIPTION: + The function sends 'DMS/Get Device Capabilities Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceCapabilities( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetDeviceManfacturer + +DESCRIPTION: + The function sends 'DMS/Get Device Manfacturer Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceManfacturer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetDeviceModel + +DESCRIPTION: + The function sends 'DMS/Get Device Model Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceModel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetDeviceRevision + +DESCRIPTION: + The function sends 'DMS/Get Device Revision Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetDeviceVoiceNumber + +DESCRIPTION: + The function sends 'DMS/Get Device Voice Number Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceVoiceNumber( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetDeviceSerialNumbers + +DESCRIPTION: + The function sends 'DMS/Get Device Serial Numbers Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceSerialNumbers( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetPowerState + +DESCRIPTION: + The function sends 'DMS/Get Power State Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetPowerState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSUIMSetPINProtection + +DESCRIPTION: + The function sends 'DMS/UIM Set PIN Protection Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMSetPINProtection( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSUIMVerifyPIN + +DESCRIPTION: + The function sends 'DMS/UIM Verify PIN Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMVerifyPIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSUIMUnblockPIN + +DESCRIPTION: + The function sends 'DMS/UIM Unblock PIN Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMUnblockPIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSUIMChangePIN + +DESCRIPTION: + The function sends 'DMS/UIM Change PIN Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMChangePIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSUIMGetPINStatus + +DESCRIPTION: + The function sends 'DMS/UIM Get PIN Status Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMGetPINStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetHardwareRevision + +DESCRIPTION: + The function sends 'DMS/Get Hardware Revision Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetHardwareRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetOperatingMode + +DESCRIPTION: + The function sends 'DMS/Get Operating Mode Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetOperatingMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSSetOperatingMode + +DESCRIPTION: + The function sends 'DMS/Set Operating Mode Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetOperatingMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetTimestamp + +DESCRIPTION: + The function sends 'DMS/Get Timestamp Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetTimestamp( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetPRLVersion + +DESCRIPTION: + The function sends 'DMS/Get PRL Version Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetPRLVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetActivationState + +DESCRIPTION: + The function sends 'DMS/Get Activation State Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetActivationState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSActivateAutomatic + +DESCRIPTION: + The function sends 'DMS/Activate Automatic Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSActivateAutomatic( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSActivateManual + +DESCRIPTION: + The function sends 'DMS/Activate Manual Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSActivateManual( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetLockState + +DESCRIPTION: + The function sends 'DMS/Get Lock State Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetLockState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSSetLockState + +DESCRIPTION: + The function sends 'DMS/Set Lock State Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetLockState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSSetLockCode + +DESCRIPTION: + The function sends 'DMS/Set Lock Code Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetLockCode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSReadUserData + +DESCRIPTION: + The function sends 'DMS/Read User Data Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSReadUserData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSWriteUserData + +DESCRIPTION: + The function sends 'DMS/Write User Data Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSWriteUserData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSReadERIData + +DESCRIPTION: + The function sends 'DMS/Read ERI Data Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSReadERIData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSResetFactoryDefaults + +DESCRIPTION: + The function sends 'DMS/Reset Factory Defaults Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSResetFactoryDefaults( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSValidateSPC + +DESCRIPTION: + The function sends 'DMS/Validate SPC Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSValidateSPC( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSUIMGetICCID + +DESCRIPTION: + The function sends 'DMS/UIM Get ICCID Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMGetICCID( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSUIMGetHostLockID + +DESCRIPTION: + The function sends 'DMS/UIM Get Host Lock ID Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMGetHostLockID( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSUIMGetControlKeyStatus + +DESCRIPTION: + The function sends 'DMS/UIM Get Control Key Status Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMGetControlKeyStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSUIMSetControlKeyProtection + +DESCRIPTION: + The function sends 'DMS/UIM Set Control Key Protection Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMSetControlKeyProtection( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSUIMUnblockControlKey + +DESCRIPTION: + The function sends 'DMS/UIM Unblock Control Key Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMUnblockControlKey( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetIMSI + +DESCRIPTION: + The function sends 'DMS/Get IMSI Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetIMSI( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetUIMState + +DESCRIPTION: + The function sends 'DMS/Get UIM State Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetUIMState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetBandCapabilities + +DESCRIPTION: + The function sends 'DMS/Get Band Capabilities Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetBandCapabilities( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetFactorySerialNumber + +DESCRIPTION: + The function sends 'DMS/Get Factory Serial Number Request' (0x0046) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetFactorySerialNumber( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSSetDeviceTime + +DESCRIPTION: + The function sends 'DMS/Set Device Time Request' (0x004B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetDeviceTime( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetSoftwareVersion + +DESCRIPTION: + The function sends 'DMS/Get Software Version Request' (0x0051) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetSoftwareVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSSetSPC + +DESCRIPTION: + The function sends 'DMS/Set SPC Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetSPC( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetCurrentPRLInfo + +DESCRIPTION: + The function sends 'DMS/Get Current PRL Info Request' (0x0053) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetCurrentPRLInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSBindSubscription + +DESCRIPTION: + The function sends 'DMS/Bind Subscription Request' (0x0054) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSBindSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + DMSGetSubscription + +DESCRIPTION: + The function sends 'DMS/Get Subscription Request' (0x0055) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASReset + +DESCRIPTION: + The function sends 'NAS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASAbort + +DESCRIPTION: + The function sends 'NAS/Abort Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASAbort( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetEventReport + +DESCRIPTION: + The function sends 'NAS/Set Event Report Request' (0x0002) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetRegistrationEventReport + +DESCRIPTION: + The function sends 'NAS/Set Registration Event Report Request' (0x0003) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetRegistrationEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetSupportedMessages + +DESCRIPTION: + The function sends 'NAS/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetSupportedFields + +DESCRIPTION: + The function sends 'NAS/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetSignalStrength + +DESCRIPTION: + The function sends 'NAS/Get Signal Strength Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSignalStrength( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASPerformNetworkScan + +DESCRIPTION: + The function sends 'NAS/Perform Network Scan Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASPerformNetworkScan( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASInitiateNetworkRegister + +DESCRIPTION: + The function sends 'NAS/Initiate Network Register Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASInitiateNetworkRegister( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASInitiateAttach + +DESCRIPTION: + The function sends 'NAS/Initiate Attach Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASInitiateAttach( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetServingSystem + +DESCRIPTION: + The function sends 'NAS/Get Serving System Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetServingSystem( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetHomeNetwork + +DESCRIPTION: + The function sends 'NAS/Get Home Network Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetHomeNetwork( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetPreferredNetworks + +DESCRIPTION: + The function sends 'NAS/Get Preferred Networks Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetPreferredNetworks( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetPreferredNetworks + +DESCRIPTION: + The function sends 'NAS/Set Preferred Networks Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetPreferredNetworks( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetForbiddenNetworks + +DESCRIPTION: + The function sends 'NAS/Get Forbidden Networks Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetForbiddenNetworks( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetForbiddenNetworks + +DESCRIPTION: + The function sends 'NAS/Set Forbidden Networks Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetForbiddenNetworks( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetTechnologyPreference + +DESCRIPTION: + The function sends 'NAS/Set Technology Preference Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetTechnologyPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetTechnologyPreference + +DESCRIPTION: + The function sends 'NAS/Get Technology Preference Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetTechnologyPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetACCOLC + +DESCRIPTION: + The function sends 'NAS/Get ACCOLC Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetACCOLC( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetACCOLC + +DESCRIPTION: + The function sends 'NAS/Set ACCOLC Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetACCOLC( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetSystemPreference + +DESCRIPTION: + The function sends 'NAS/Get System Preference' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSystemPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetNetworkParameters + +DESCRIPTION: + The function sends 'NAS/Get Network Parameters Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetNetworkParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetNetworkParameters + +DESCRIPTION: + The function sends 'NAS/Set Network Parameters Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetNetworkParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetRFInfo + +DESCRIPTION: + The function sends 'NAS/Get RF Info Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetRFInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetANAAAAuthenticationStatus + +DESCRIPTION: + The function sends 'NAS/Get AN-AAA Authentication Status Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetANAAAAuthenticationStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetSystemSelectionPref + +DESCRIPTION: + The function sends 'NAS/Set System Selection Pref Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetSystemSelectionPref( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetSystemSelectionPref + +DESCRIPTION: + The function sends 'NAS/Get System Selection Pref Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSystemSelectionPref( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetDDTMPreference + +DESCRIPTION: + The function sends 'NAS/Set DDTM Preference Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetDDTMPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetDDTMPreference + +DESCRIPTION: + The function sends 'NAS/Get DDTM Preference Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetDDTMPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetOperatorNameData + +DESCRIPTION: + The function sends 'NAS/Get Operator Name Data Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetOperatorNameData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetCSPPLMNMode + +DESCRIPTION: + The function sends 'NAS/Get CSP PLMN Mode Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetCSPPLMNMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASUpdateAKEY + +DESCRIPTION: + The function sends 'NAS/Update AKEY Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASUpdateAKEY( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGet3GPP2SubscriptionInfo + +DESCRIPTION: + The function sends 'NAS/Get 3GPP2 Subscription Info Request' (0x003E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGet3GPP2SubscriptionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSet3GPP2SubscriptionInfo + +DESCRIPTION: + The function sends 'NAS/Set 3GPP2 Subscription Info Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSet3GPP2SubscriptionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetMobileCAIRevision + +DESCRIPTION: + The function sends 'NAS/Get Mobile CAI Revision Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetMobileCAIRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetRTREConfig + +DESCRIPTION: + The function sends 'NAS/Get RTRE Config Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetRTREConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetRTREConfig + +DESCRIPTION: + The function sends 'NAS/Set RTRE Config Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetRTREConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetCellLocationInfo + +DESCRIPTION: + The function sends 'NAS/Get Cell Location Info Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetCellLocationInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetPLMNName + +DESCRIPTION: + The function sends 'NAS/Get PLMN Name Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetPLMNName( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASBindSubscription + +DESCRIPTION: + The function sends 'NAS/Bind Subscription Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASBindSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetModePref + +DESCRIPTION: + The function sends 'NAS/Get Mode Pref Request' (0x0049) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetModePref( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetDualStandbyPreference + +DESCRIPTION: + The function sends 'NAS/Set Dual Standby Preference Request' (0x004B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetDualStandbyPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetSystemInfo + +DESCRIPTION: + The function sends 'NAS/Get System Info Request' (0x004D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSystemInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetSignalInfo + +DESCRIPTION: + The function sends 'NAS/Get Signal Info Request' (0x004F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSignalInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASConfigureSignalInfo + +DESCRIPTION: + The function sends 'NAS/Configure Signal Info Request' (0x0050) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASConfigureSignalInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetErrorRate + +DESCRIPTION: + The function sends 'NAS/Get Error Rate Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetErrorRate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetEVDOProtocolSubtype + +DESCRIPTION: + The function sends 'NAS/Get EV-DO Protocol Subtype Request' (0x0056) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetEVDOProtocolSubtype( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetEVDOColorCode + +DESCRIPTION: + The function sends 'NAS/Get EV-DO Color Code Request' (0x0057) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetEVDOColorCode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetAcquisitionSystemMode + +DESCRIPTION: + The function sends 'NAS/Get Acquisition System Mode Request' (0x0058) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetAcquisitionSystemMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetRXDiversity + +DESCRIPTION: + The function sends 'NAS/Set RX Diversity Request' (0x0059) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetRXDiversity( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetRXTXInfo + +DESCRIPTION: + The function sends 'NAS/Get RX/TX Info Request' (0x005A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetRXTXInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASUpdateAKEYExtended + +DESCRIPTION: + The function sends 'NAS/Update A-KEY Extended Request' (0x005B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASUpdateAKEYExtended( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetDualStandbyPreference + +DESCRIPTION: + The function sends 'NAS/Get Dual Standby Preference Request' (0x005C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetDualStandbyPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASDetachLTE + +DESCRIPTION: + The function sends 'NAS/Detach LTE Request' (0x005D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASDetachLTE( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASBlockLTEPLMN + +DESCRIPTION: + The function sends 'NAS/Block LTE PLMN Request' (0x005E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASBlockLTEPLMN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASUnblockLTEPLMN + +DESCRIPTION: + The function sends 'NAS/Unblock LTE PLMN Request' (0x005F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASUnblockLTEPLMN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASResetLTEPLMNBlock + +DESCRIPTION: + The function sends 'NAS/Reset LTE PLMN Block Request' (0x0060) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASResetLTEPLMNBlock( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASConfigureEMBMS + +DESCRIPTION: + The function sends 'NAS/Configure EMBMS Request' (0x0062) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASConfigureEMBMS( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetEMBMSStatus + +DESCRIPTION: + The function sends 'NAS/Get EMBMS Status Request' (0x0063) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetEMBMSStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetCDMAPositionInfo + +DESCRIPTION: + The function sends 'NAS/Get CDMA Position Info Request' (0x0065) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetCDMAPositionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASForceNetworkSearch + +DESCRIPTION: + The function sends 'NAS/Force Network Search Request' (0x0067) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASForceNetworkSearch( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetManagedRoamingConfig + +DESCRIPTION: + The function sends 'NAS/Get Managed Roaming Config Request' (0x0069) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetManagedRoamingConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetCentralizedEONSSupport + +DESCRIPTION: + The function sends 'NAS/Get Centralized EONS Support Request' (0x006B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetCentralizedEONSSupport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASConfigureSignalInfo2 + +DESCRIPTION: + The function sends 'NAS/Configure Signal Info 2 Request' (0x006C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASConfigureSignalInfo2( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetTDSCDMACellInfo + +DESCRIPTION: + The function sends 'NAS/Get TD-SCDMA Cell Info Request' (0x006D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetTDSCDMACellInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetHPLMNIRATSearchTimer + +DESCRIPTION: + The function sends 'NAS/Set HPLMN IRAT Search Timer Request' (0x006E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetHPLMNIRATSearchTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetEMBMSSignalQuality + +DESCRIPTION: + The function sends 'NAS/Get EMBMS Signal Quality Request' (0x006F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetEMBMSSignalQuality( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASLimitSystemInfoIndications + +DESCRIPTION: + The function sends 'NAS/Limit System Info Indications Request' (0x0070) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASLimitSystemInfoIndications( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetSystemInfoIndicationLimits + +DESCRIPTION: + The function sends 'NAS/Get System Info Indication Limits Request' (0x0071) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSystemInfoIndicationLimits( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASUpdateIMSStatus + +DESCRIPTION: + The function sends 'NAS/Update IMS Status Request' (0x0072) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASUpdateIMSStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetIMSPreference + +DESCRIPTION: + The function sends 'NAS/Get IMS Preference Request' (0x0073) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetIMSPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASConfigurePLMNNameIndication + +DESCRIPTION: + The function sends 'NAS/Configure PLMN Name Indication Request' (0x0075) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASConfigurePLMNNameIndication( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASCDMAAvoidSystem + +DESCRIPTION: + The function sends 'NAS/CDMA Avoid System Request' (0x0076) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASCDMAAvoidSystem( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetCDMAAvoidSystemList + +DESCRIPTION: + The function sends 'NAS/Get CDMA Avoid System List Request' (0x0077) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetCDMAAvoidSystemList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetHPLMNSearchTimer + +DESCRIPTION: + The function sends 'NAS/Set HPLMN Search Timer Request' (0x0078) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetHPLMNSearchTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetHPLMNSearchTimer + +DESCRIPTION: + The function sends 'NAS/Get HPLMN Search Timer Request' (0x0079) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetHPLMNSearchTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASSetE911State + +DESCRIPTION: + The function sends 'NAS/Set E911 State Request' (0x007A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetE911State( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetSubscriptionInfo + +DESCRIPTION: + The function sends 'NAS/Get Subscription Info Request' (0x007C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSubscriptionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetNetworkTime + +DESCRIPTION: + The function sends 'NAS/Get Network Time Request' (0x007D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetNetworkTime( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + NASGetLTESIB16NetworkTime + +DESCRIPTION: + The function sends 'NAS/Get LTE SIB16 Network Time Request' (0x007E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetLTESIB16NetworkTime( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSReset + +DESCRIPTION: + The function sends 'WMS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetEventReport + +DESCRIPTION: + The function sends 'WMS/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetSupportedMessages + +DESCRIPTION: + The function sends 'WMS/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetSupportedFields + +DESCRIPTION: + The function sends 'WMS/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSRawSend + +DESCRIPTION: + The function sends 'WMS/Raw Send Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSRawSend( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSRawWrite + +DESCRIPTION: + The function sends 'WMS/Raw Write Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSRawWrite( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSRawRead + +DESCRIPTION: + The function sends 'WMS/Raw Read Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSRawRead( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSModifyTag + +DESCRIPTION: + The function sends 'WMS/Modify Tag Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSModifyTag( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSDelete + +DESCRIPTION: + The function sends 'WMS/Delete Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSDelete( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetMessageProtocol + +DESCRIPTION: + The function sends 'WMS/Get Message Protocol Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetMessageProtocol( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSListMessages + +DESCRIPTION: + The function sends 'WMS/List Messages Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSListMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetRoutes + +DESCRIPTION: + The function sends 'WMS/Set Routes Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetRoutes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetRoutes + +DESCRIPTION: + The function sends 'WMS/Get Routes Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetRoutes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetSMSCAddress + +DESCRIPTION: + The function sends 'WMS/Get SMSC Address Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetSMSCAddress( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetSMSCAddress + +DESCRIPTION: + The function sends 'WMS/Set SMSC Address Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetSMSCAddress( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetStorageMaxSize + +DESCRIPTION: + The function sends 'WMS/Get Storage Max Size Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetStorageMaxSize( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSendACK + +DESCRIPTION: + The function sends 'WMS/Send ACK Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSendACK( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetRetryPeriod + +DESCRIPTION: + The function sends 'WMS/Set Retry Period Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetRetryPeriod( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetRetryInterval + +DESCRIPTION: + The function sends 'WMS/Set Retry Interval Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetRetryInterval( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetDCDisconnectTimer + +DESCRIPTION: + The function sends 'WMS/Set DC Disconnect Timer Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetDCDisconnectTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetMemoryStatus + +DESCRIPTION: + The function sends 'WMS/Set Memory Status Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetMemoryStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetBroadcastActivation + +DESCRIPTION: + The function sends 'WMS/Set Broadcast Activation Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetBroadcastActivation( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetBroadcastConfig + +DESCRIPTION: + The function sends 'WMS/Set Broadcast Config Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetBroadcastConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetBroadcastConfig + +DESCRIPTION: + The function sends 'WMS/Get Broadcast Config Request' (0x003E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetBroadcastConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetDomainPreference + +DESCRIPTION: + The function sends 'WMS/Get Domain Preference Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetDomainPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetDomainPreference + +DESCRIPTION: + The function sends 'WMS/Set Domain Preference Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetDomainPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSendFromMemoryStore + +DESCRIPTION: + The function sends 'WMS/Send From Memory Store Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSendFromMemoryStore( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetWaitingMessage + +DESCRIPTION: + The function sends 'WMS/Get Waiting Message Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetWaitingMessage( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetPrimaryClient + +DESCRIPTION: + The function sends 'WMS/Set Primary Client Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetPrimaryClient( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSIndicatorRegistration + +DESCRIPTION: + The function sends 'WMS/Indicator Registration Request' (0x0047) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSIndicatorRegistration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetTransportLayerInfo + +DESCRIPTION: + The function sends 'WMS/Get Transport Layer Info Request' (0x0048) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetTransportLayerInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetNetworkRegistrationInfo + +DESCRIPTION: + The function sends 'WMS/Get Network Registration Info Request' (0x004A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetNetworkRegistrationInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSBindSubscription + +DESCRIPTION: + The function sends 'WMS/Bind Subscription Request' (0x004C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSBindSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetIndicatorRegistration + +DESCRIPTION: + The function sends 'WMS/Get Indicator Registration Request' (0x004D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetIndicatorRegistration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetSMSParameters + +DESCRIPTION: + The function sends 'WMS/Get SMS Parameters Request' (0x004E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetSMSParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetSMSParameters + +DESCRIPTION: + The function sends 'WMS/Set SMS Parameters Request' (0x004F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetSMSParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetDomainPreferenceConfig + +DESCRIPTION: + The function sends 'WMS/Get Domain Preference Config Request' (0x0051) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetDomainPreferenceConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetDomainPreferenceConfig + +DESCRIPTION: + The function sends 'WMS/Set Domain Preference Config Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetDomainPreferenceConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetRetryPeriod + +DESCRIPTION: + The function sends 'WMS/Get Retry Period Request' (0x0053) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetRetryPeriod( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetRetryInterval + +DESCRIPTION: + The function sends 'WMS/Get Retry Interval Request' (0x0054) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetRetryInterval( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetDCDisconnectTimer + +DESCRIPTION: + The function sends 'WMS/Get DC Disconnect Timer Request' (0x0055) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetDCDisconnectTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetMemoryStatus + +DESCRIPTION: + The function sends 'WMS/Get Memory Status Request' (0x0056) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetMemoryStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetPrimaryClient + +DESCRIPTION: + The function sends 'WMS/Get Primary Client Request' (0x0057) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetPrimaryClient( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetSubscriptionBinding + +DESCRIPTION: + The function sends 'WMS/Get Subscription Binding Request' (0x0058) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetSubscriptionBinding( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSAsyncRawSend + +DESCRIPTION: + The function sends 'WMS/Async Raw Send Request' (0x0059) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSAsyncRawSend( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSAsyncSendACK + +DESCRIPTION: + The function sends 'WMS/Async Send ACK Request' (0x005A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSAsyncSendACK( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSAsyncSendFromMemoryStore + +DESCRIPTION: + The function sends 'WMS/Async Send From Memory Store Request' (0x005B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSAsyncSendFromMemoryStore( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSGetServiceReadyStatus + +DESCRIPTION: + The function sends 'WMS/Get Service Ready Status Request' (0x005C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetServiceReadyStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WMSSetWaitingMessage + +DESCRIPTION: + The function sends 'WMS/Set Waiting Message Request' (0x005F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetWaitingMessage( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSReset + +DESCRIPTION: + The function sends 'PDS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetEventReport + +DESCRIPTION: + The function sends 'PDS/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetServiceState + +DESCRIPTION: + The function sends 'PDS/Get Service State Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetServiceState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetServiceState + +DESCRIPTION: + The function sends 'PDS/Set Service State Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetServiceState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSStartTrackingSession + +DESCRIPTION: + The function sends 'PDS/Start Tracking Session Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSStartTrackingSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetTrackingSessionInfo + +DESCRIPTION: + The function sends 'PDS/Get Tracking Session Info Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetTrackingSessionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSFixPosition + +DESCRIPTION: + The function sends 'PDS/Fix Position Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSFixPosition( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSEndTrackingSession + +DESCRIPTION: + The function sends 'PDS/End Tracking Session Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSEndTrackingSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetNMEAConfig + +DESCRIPTION: + The function sends 'PDS/Get NMEA Config Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetNMEAConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetNMEAConfig + +DESCRIPTION: + The function sends 'PDS/Set NMEA Config Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetNMEAConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectTimeReference + +DESCRIPTION: + The function sends 'PDS/Inject Time Reference Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectTimeReference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetDefaults + +DESCRIPTION: + The function sends 'PDS/Get Defaults Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetDefaults( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetDefaults + +DESCRIPTION: + The function sends 'PDS/Set Defaults Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetDefaults( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetXTRAParameters + +DESCRIPTION: + The function sends 'PDS/Get XTRA Parameters Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetXTRAParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetXTRAParameters + +DESCRIPTION: + The function sends 'PDS/Set XTRA Parameters Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetXTRAParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSForceXTRADownload + +DESCRIPTION: + The function sends 'PDS/Force XTRA Download Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSForceXTRADownload( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetAGPSConfig + +DESCRIPTION: + The function sends 'PDS/Get AGPS Config Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetAGPSConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetAGPSConfig + +DESCRIPTION: + The function sends 'PDS/Set AGPS Config Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetAGPSConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetServiceAutoTrackingState + +DESCRIPTION: + The function sends 'PDS/Get Service Auto-Tracking State Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetServiceAutoTrackingState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetServiceAutoTrackingState + +DESCRIPTION: + The function sends 'PDS/Set Service Auto-Tracking State Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetServiceAutoTrackingState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetCOMPortAutoTrackingConfig + +DESCRIPTION: + The function sends 'PDS/Get COM Port Auto-Tracking Config Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetCOMPortAutoTrackingConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetCOMPortAutoTrackingConfig + +DESCRIPTION: + The function sends 'PDS/Set COM Port Auto-Tracking Config Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetCOMPortAutoTrackingConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSResetPDSData + +DESCRIPTION: + The function sends 'PDS/Reset PDS Data Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSResetPDSData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSinglePositionFix + +DESCRIPTION: + The function sends 'PDS/Single Position Fix Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSinglePositionFix( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetServiceVersion + +DESCRIPTION: + The function sends 'PDS/Get Service Version Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetServiceVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectXTRAData + +DESCRIPTION: + The function sends 'PDS/Inject XTRA Data Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectXTRAData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectPositionData + +DESCRIPTION: + The function sends 'PDS/Inject Position Data Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectPositionData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectWiFiPositionData + +DESCRIPTION: + The function sends 'PDS/Inject Wi-Fi Position Data Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectWiFiPositionData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetSBASConfig + +DESCRIPTION: + The function sends 'PDS/Get SBAS Config Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSBASConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetSBASConfig + +DESCRIPTION: + The function sends 'PDS/Set SBAS Config Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSBASConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSendNetworkInitiatedResponse + +DESCRIPTION: + The function sends 'PDS/Send Network Initiated Response Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSendNetworkInitiatedResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectAbsoluteTime + +DESCRIPTION: + The function sends 'PDS/Inject Absolute Time Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectAbsoluteTime( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectEFSData + +DESCRIPTION: + The function sends 'PDS/Inject EFS Data Request' (0x003E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectEFSData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetDPOConfig + +DESCRIPTION: + The function sends 'PDS/Get DPO Config Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetDPOConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetDPOConfig + +DESCRIPTION: + The function sends 'PDS/Set DPO Config Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetDPOConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetODPConfig + +DESCRIPTION: + The function sends 'PDS/Get ODP Config Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetODPConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetODPConfig + +DESCRIPTION: + The function sends 'PDS/Set ODP Config Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetODPConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSCancelSinglePositionFix + +DESCRIPTION: + The function sends 'PDS/Cancel Single Position Fix Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSCancelSinglePositionFix( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetGPSState + +DESCRIPTION: + The function sends 'PDS/Get GPS State Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetGPSState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetPPMEventReport + +DESCRIPTION: + The function sends 'PDS/Set PPM Event Report Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetPPMEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetSPIStreamingReport + +DESCRIPTION: + The function sends 'PDS/Set SPI Streaming Report Request' (0x0046) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSPIStreamingReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetSPIStatus + +DESCRIPTION: + The function sends 'PDS/Set SPI Status Request' (0x0047) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSPIStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetPPMReportingState + +DESCRIPTION: + The function sends 'PDS/Set PPM Reporting State Request' (0x0048) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetPPMReportingState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSForceReceiverOff + +DESCRIPTION: + The function sends 'PDS/Force Receiver Off Request' (0x0049) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSForceReceiverOff( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetPositionMethodsState + +DESCRIPTION: + The function sends 'PDS/Get Position Methods State Request' (0x0050) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetPositionMethodsState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetPositionMethodsState + +DESCRIPTION: + The function sends 'PDS/Set Position Methods State Request' (0x0051) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetPositionMethodsState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectSensorData + +DESCRIPTION: + The function sends 'PDS/Inject Sensor Data Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectSensorData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectTimeSyncData + +DESCRIPTION: + The function sends 'PDS/Inject Time Sync Data Request' (0x0053) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectTimeSyncData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetSensorConfig + +DESCRIPTION: + The function sends 'PDS/Get Sensor Config Request' (0x0054) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSensorConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetSensorConfig + +DESCRIPTION: + The function sends 'PDS/Set Sensor Config Request' (0x0055) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSensorConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetSensorNavigation + +DESCRIPTION: + The function sends 'PDS/Get Sensor Navigation Request' (0x0056) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSensorNavigation( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetNavigationConfig + +DESCRIPTION: + The function sends 'PDS/Set Navigation Config Request' (0x0057) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetNavigationConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetWLANBlanking + +DESCRIPTION: + The function sends 'PDS/Set WLAN Blanking Request' (0x005A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetWLANBlanking( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetSecurityChallengeReport + +DESCRIPTION: + The function sends 'PDS/Set Security Challenge Report Request' (0x005B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSecurityChallengeReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetSecurityChallenge + +DESCRIPTION: + The function sends 'PDS/Set Security Challenge Request' (0x005C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSecurityChallenge( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetSecurityEncryptionConfig + +DESCRIPTION: + The function sends 'PDS/Get Security Encryption Config Request' (0x005D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSecurityEncryptionConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetSecurityUpdateRate + +DESCRIPTION: + The function sends 'PDS/Set Security Update Rate Request' (0x005E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSecurityUpdateRate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetCellDatabaseControl + +DESCRIPTION: + The function sends 'PDS/Set Cell Database Control Request' (0x005F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetCellDatabaseControl( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectMotionData + +DESCRIPTION: + The function sends 'PDS/Inject Motion Data Request' (0x0061) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectMotionData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetGNSSEngineErrorRecoveryReport + +DESCRIPTION: + The function sends 'PDS/Set GNSS Engine Error Recovery Report Request' (0x0062) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetGNSSEngineErrorRecoveryReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSResetLocationService + +DESCRIPTION: + The function sends 'PDS/Reset Location Service Request' (0x0063) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSResetLocationService( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectTestData + +DESCRIPTION: + The function sends 'PDS/Inject Test Data Request' (0x0064) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectTestData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetGNSSRFConfig + +DESCRIPTION: + The function sends 'PDS/Set GNSS RF Config Request' (0x0065) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetGNSSRFConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectCourseOverGroundData + +DESCRIPTION: + The function sends 'PDS/Inject Course Over Ground Data Request' (0x0066) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectCourseOverGroundData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectSUPLCertificate + +DESCRIPTION: + The function sends 'PDS/Inject SUPL Certificate Request' (0x0067) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectSUPLCertificate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSDeleteSUPLCertificate + +DESCRIPTION: + The function sends 'PDS/Delete SUPL Certificate Request' (0x0068) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSDeleteSUPLCertificate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetIS801OverSUPLIndicator + +DESCRIPTION: + The function sends 'PDS/Get IS-801 Over SUPL Indicator Request' (0x0069) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetIS801OverSUPLIndicator( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetIS801OverSUPLIndicator + +DESCRIPTION: + The function sends 'PDS/Set IS-801 Over SUPL Indicator Request' (0x006A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetIS801OverSUPLIndicator( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetSUPLHashAlgorithm + +DESCRIPTION: + The function sends 'PDS/Get SUPL Hash Algorithm Request' (0x006B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSUPLHashAlgorithm( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetSUPLHashAlgorithm + +DESCRIPTION: + The function sends 'PDS/Set SUPL Hash Algorithm Request' (0x006C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSUPLHashAlgorithm( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetSUPLMaximumVersion + +DESCRIPTION: + The function sends 'PDS/Get SUPL Maximum Version Request' (0x006D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSUPLMaximumVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetSUPLMaximumVersion + +DESCRIPTION: + The function sends 'PDS/Set SUPL Maximum Version Request' (0x006E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSUPLMaximumVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetSUPLSecurity + +DESCRIPTION: + The function sends 'PDS/Get SUPL Security Request' (0x006F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSUPLSecurity( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetSUPLSecurity + +DESCRIPTION: + The function sends 'PDS/Set SUPL Security Request' (0x0070) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSUPLSecurity( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetSUPLTLSVersion + +DESCRIPTION: + The function sends 'PDS/Get SUPL TLS Version Request' (0x0071) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSUPLTLSVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetSUPLTLSVersion + +DESCRIPTION: + The function sends 'PDS/Set SUPL TLS Version Request' (0x0072) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSUPLTLSVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetAGNSSPositioningModes + +DESCRIPTION: + The function sends 'PDS/Get AGNSS Positioning Modes Request' (0x0073) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetAGNSSPositioningModes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetAGNSSPositioningModes + +DESCRIPTION: + The function sends 'PDS/Set AGNSS Positioning Modes Request' (0x0074) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetAGNSSPositioningModes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetEmergencyProtocolConfig + +DESCRIPTION: + The function sends 'PDS/Get Emergency Protocol Config Request' (0x0075) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetEmergencyProtocolConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetEmergencyProtocolConfig + +DESCRIPTION: + The function sends 'PDS/Set Emergency Protocol Config Request' (0x0076) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetEmergencyProtocolConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetAPNProfiles + +DESCRIPTION: + The function sends 'PDS/Get APN Profiles Request' (0x0077) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetAPNProfiles( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetAPNProfiles + +DESCRIPTION: + The function sends 'PDS/Set APN Profiles Request' (0x0078) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetAPNProfiles( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSGetHomeSUPLAddress + +DESCRIPTION: + The function sends 'PDS/Get Home SUPL Address Request' (0x0079) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetHomeSUPLAddress( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSSetHomeSUPLAddress + +DESCRIPTION: + The function sends 'PDS/Set Home SUPL Address Request' (0x007A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetHomeSUPLAddress( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectVehicleSensorData + +DESCRIPTION: + The function sends 'PDS/Inject Vehicle Sensor Data Request' (0x007B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectVehicleSensorData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDSInjectPedometerData + +DESCRIPTION: + The function sends 'PDS/Inject Pedometer Data Request' (0x007C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectPedometerData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + AUTHStartEAPSession + +DESCRIPTION: + The function sends 'AUTH/Start EAP Session Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG AUTHStartEAPSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + AUTHSendEAPPacket + +DESCRIPTION: + The function sends 'AUTH/Send EAP Packet Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG AUTHSendEAPPacket( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + AUTHGetEAPSessionKeys + +DESCRIPTION: + The function sends 'AUTH/Get EAP Session Keys Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG AUTHGetEAPSessionKeys( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + AUTHEndEAPSession + +DESCRIPTION: + The function sends 'AUTH/End EAP Session Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG AUTHEndEAPSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + AUTHRunAKA + +DESCRIPTION: + The function sends 'AUTH/Run AKA Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG AUTHRunAKA( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceIndicationRegistration + +DESCRIPTION: + The function sends 'Voice/Indication Registration Request' (0x0003) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceIndicationRegistration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetSupportedMessages + +DESCRIPTION: + The function sends 'Voice/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetSupportedFields + +DESCRIPTION: + The function sends 'Voice/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceCallOriginate + +DESCRIPTION: + The function sends 'Voice/Call Originate Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceCallOriginate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceCallEnd + +DESCRIPTION: + The function sends 'Voice/Call End Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceCallEnd( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceCallAnswer + +DESCRIPTION: + The function sends 'Voice/Call Answer Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceCallAnswer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetCallInfo + +DESCRIPTION: + The function sends 'Voice/Get Call Info Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCallInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceSendFlash + +DESCRIPTION: + The function sends 'Voice/Send Flash Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceSendFlash( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceBurstDTMF + +DESCRIPTION: + The function sends 'Voice/Burst DTMF Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceBurstDTMF( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceStartContinuousDTMF + +DESCRIPTION: + The function sends 'Voice/Start Continuous DTMF Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceStartContinuousDTMF( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceStopContinuousDTMF + +DESCRIPTION: + The function sends 'Voice/Stop Continuous DTMF Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceStopContinuousDTMF( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceSetPreferredPrivacy + +DESCRIPTION: + The function sends 'Voice/Set Preferred Privacy Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceSetPreferredPrivacy( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetAllCallInfo + +DESCRIPTION: + The function sends 'Voice/Get All Call Info Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetAllCallInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceManageCalls + +DESCRIPTION: + The function sends 'Voice/Manage Calls Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceManageCalls( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceSetSupplementaryService + +DESCRIPTION: + The function sends 'Voice/Set Supplementary Service Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceSetSupplementaryService( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetCallWaiting + +DESCRIPTION: + The function sends 'Voice/Get Call Waiting Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCallWaiting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetCallBarring + +DESCRIPTION: + The function sends 'Voice/Get Call Barring Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCallBarring( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetCLIP + +DESCRIPTION: + The function sends 'Voice/Get CLIP Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCLIP( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetCLIR + +DESCRIPTION: + The function sends 'Voice/Get CLIR Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCLIR( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetCallForwarding + +DESCRIPTION: + The function sends 'Voice/Get Call Forwarding Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCallForwarding( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceSetCallBarringPassword + +DESCRIPTION: + The function sends 'Voice/Set Call Barring Password Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceSetCallBarringPassword( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceInitiateUSSD + +DESCRIPTION: + The function sends 'Voice/Initiate USSD Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceInitiateUSSD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceAnswerUSSD + +DESCRIPTION: + The function sends 'Voice/Answer USSD Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceAnswerUSSD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceCancelUSSD + +DESCRIPTION: + The function sends 'Voice/Cancel USSD Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceCancelUSSD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceSetConfig + +DESCRIPTION: + The function sends 'Voice/Set Config Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceSetConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetConfig + +DESCRIPTION: + The function sends 'Voice/Get Config Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceAsyncInitiateUSSD + +DESCRIPTION: + The function sends 'Voice/Async Initiate USSD Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceAsyncInitiateUSSD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceBindSubscription + +DESCRIPTION: + The function sends 'Voice/Bind Subscription Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceBindSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceALSSetLineSwitching + +DESCRIPTION: + The function sends 'Voice/ALS Set Line Switching Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceALSSetLineSwitching( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceALSSelectLine + +DESCRIPTION: + The function sends 'Voice/ALS Select Line Request' (0x0046) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceALSSelectLine( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceAOCResetACM + +DESCRIPTION: + The function sends 'Voice/AOC Reset ACM Request' (0x0047) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceAOCResetACM( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceAOCSetACMMaximum + +DESCRIPTION: + The function sends 'Voice/AOC Set ACM Maximum Request' (0x0048) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceAOCSetACMMaximum( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceAOCGetCallMeterInfo + +DESCRIPTION: + The function sends 'Voice/AOC Get Call Meter Info Request' (0x0049) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceAOCGetCallMeterInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetCOLP + +DESCRIPTION: + The function sends 'Voice/Get COLP Request' (0x004B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCOLP( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetCOLR + +DESCRIPTION: + The function sends 'Voice/Get COLR Request' (0x004C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCOLR( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceGetCNAP + +DESCRIPTION: + The function sends 'Voice/Get CNAP Request' (0x004D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCNAP( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceManageIPCalls + +DESCRIPTION: + The function sends 'Voice/Manage IP Calls Request' (0x004E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceManageIPCalls( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceALSGetLineSwitchingStatus + +DESCRIPTION: + The function sends 'Voice/ALS Get Line Switching Status Request' (0x004F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceALSGetLineSwitchingStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + VoiceALSGetSelectedLine + +DESCRIPTION: + The function sends 'Voice/ALS Get Selected Line Request' (0x0050) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceALSGetSelectedLine( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2Reset + +DESCRIPTION: + The function sends 'CAT2/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2Reset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2SetEventReport + +DESCRIPTION: + The function sends 'CAT2/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2GetSupportedMessages + +DESCRIPTION: + The function sends 'CAT2/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2GetSupportedFields + +DESCRIPTION: + The function sends 'CAT2/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2GetServiceState + +DESCRIPTION: + The function sends 'CAT2/Get Service State Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetServiceState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2SendTerminalResponse + +DESCRIPTION: + The function sends 'CAT2/Send Terminal Response Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SendTerminalResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2EnvelopeCommand + +DESCRIPTION: + The function sends 'CAT2/Envelope Command Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2EnvelopeCommand( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2GetEventReport + +DESCRIPTION: + The function sends 'CAT2/Get Event Report Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2SendDecodedTerminalResponse + +DESCRIPTION: + The function sends 'CAT2/Send Decoded Terminal Response Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SendDecodedTerminalResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2SendDecodedEnvelopeCommand + +DESCRIPTION: + The function sends 'CAT2/Send Decoded Envelope Command Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SendDecodedEnvelopeCommand( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2EventConfirmation + +DESCRIPTION: + The function sends 'CAT2/Event Confirmation Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2EventConfirmation( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2SCWSOpenChannel + +DESCRIPTION: + The function sends 'CAT2/SCWS Open Channel Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SCWSOpenChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2SCWSCloseChannel + +DESCRIPTION: + The function sends 'CAT2/SCWS Close Channel Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SCWSCloseChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2SCWSSendData + +DESCRIPTION: + The function sends 'CAT2/SCWS Send Data Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SCWSSendData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2SCWSDataAvailable + +DESCRIPTION: + The function sends 'CAT2/SCWS Data Available Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SCWSDataAvailable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2SCWSChannelStatus + +DESCRIPTION: + The function sends 'CAT2/SCWS Channel Status Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SCWSChannelStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2GetTerminalProfile + +DESCRIPTION: + The function sends 'CAT2/Get Terminal Profile Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetTerminalProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2SetConfiguration + +DESCRIPTION: + The function sends 'CAT2/Set Configuration Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SetConfiguration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CAT2GetConfiguration + +DESCRIPTION: + The function sends 'CAT2/Get Configuration Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetConfiguration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMReset + +DESCRIPTION: + The function sends 'UIM/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMGetSupportedMessages + +DESCRIPTION: + The function sends 'UIM/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMGetSupportedFields + +DESCRIPTION: + The function sends 'UIM/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMReadTransparent + +DESCRIPTION: + The function sends 'UIM/Read Transparent Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMReadTransparent( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMReadRecord + +DESCRIPTION: + The function sends 'UIM/Read Record Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMReadRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMWriteTransparent + +DESCRIPTION: + The function sends 'UIM/Write Transparent Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMWriteTransparent( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMWriteRecord + +DESCRIPTION: + The function sends 'UIM/Write Record Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMWriteRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMGetFileAttributes + +DESCRIPTION: + The function sends 'UIM/Get File Attributes Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetFileAttributes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMSetPINProtection + +DESCRIPTION: + The function sends 'UIM/Set PIN Protection Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSetPINProtection( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMVerifyPIN + +DESCRIPTION: + The function sends 'UIM/Verify PIN Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMVerifyPIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMUnblockPIN + +DESCRIPTION: + The function sends 'UIM/Unblock PIN Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMUnblockPIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMChangePIN + +DESCRIPTION: + The function sends 'UIM/Change PIN Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMChangePIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMDepersonalization + +DESCRIPTION: + The function sends 'UIM/Depersonalization Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMDepersonalization( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMRefreshRegister + +DESCRIPTION: + The function sends 'UIM/Refresh Register Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMRefreshRegister( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMRefreshOK + +DESCRIPTION: + The function sends 'UIM/Refresh OK Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMRefreshOK( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMRefreshComplete + +DESCRIPTION: + The function sends 'UIM/Refresh Complete Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMRefreshComplete( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMGetLastRefreshEvent + +DESCRIPTION: + The function sends 'UIM/Get Last Refresh Event Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetLastRefreshEvent( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMEventRegistration + +DESCRIPTION: + The function sends 'UIM/Event Registration Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMEventRegistration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMGetCardStatus + +DESCRIPTION: + The function sends 'UIM/Get Card Status Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetCardStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMPowerDown + +DESCRIPTION: + The function sends 'UIM/Power Down Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMPowerDown( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMPowerUp + +DESCRIPTION: + The function sends 'UIM/Power Up Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMPowerUp( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMAuthenticate + +DESCRIPTION: + The function sends 'UIM/Authenticate Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMAuthenticate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMCloseSession + +DESCRIPTION: + The function sends 'UIM/Close Session Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMCloseSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMGetServiceStatus + +DESCRIPTION: + The function sends 'UIM/Get Service Status Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetServiceStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMSetServiceStatus + +DESCRIPTION: + The function sends 'UIM/Set Service Status Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSetServiceStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMChangeProvisioningSession + +DESCRIPTION: + The function sends 'UIM/Change Provisioning Session Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMChangeProvisioningSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMGetLabel + +DESCRIPTION: + The function sends 'UIM/Get Label Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetLabel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMGetConfiguration + +DESCRIPTION: + The function sends 'UIM/Get Configuration Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetConfiguration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMSendADPU + +DESCRIPTION: + The function sends 'UIM/Send ADPU Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSendADPU( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMSAPConnection + +DESCRIPTION: + The function sends 'UIM/SAP Connection Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSAPConnection( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMSAPRequest + +DESCRIPTION: + The function sends 'UIM/SAP Request Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSAPRequest( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMLogicalChannel + +DESCRIPTION: + The function sends 'UIM/Logical Channel Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMLogicalChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMSubscriptionOK + +DESCRIPTION: + The function sends 'UIM/Subscription OK Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSubscriptionOK( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMGetATR + +DESCRIPTION: + The function sends 'UIM/Get ATR Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetATR( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMOpenLogicalChannel + +DESCRIPTION: + The function sends 'UIM/Open Logical Channel Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMOpenLogicalChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMRefreshRegisterAll + +DESCRIPTION: + The function sends 'UIM/Refresh Register All Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMRefreshRegisterAll( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + UIMSetFileStatus + +DESCRIPTION: + The function sends 'UIM/Set File Status Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSetFileStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMSetIndicationRegistrationState + +DESCRIPTION: + The function sends 'PBM/Set Indication Registration State Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMSetIndicationRegistrationState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMGetCapabilities + +DESCRIPTION: + The function sends 'PBM/Get Capabilities Request' (0x0002) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetCapabilities( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMGetAllCapabilities + +DESCRIPTION: + The function sends 'PBM/Get All Capabilities Request' (0x0003) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetAllCapabilities( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMReadRecords + +DESCRIPTION: + The function sends 'PBM/Read Records Request' (0x0004) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMReadRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMWriteRecord + +DESCRIPTION: + The function sends 'PBM/Write Record Request' (0x0005) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMWriteRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMDeleteRecord + +DESCRIPTION: + The function sends 'PBM/Delete Record Request' (0x0006) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMDeleteRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMDeleteAllRecords + +DESCRIPTION: + The function sends 'PBM/Delete All Records Request' (0x0007) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMDeleteAllRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMSearchRecords + +DESCRIPTION: + The function sends 'PBM/Search Records Request' (0x0008) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMSearchRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMGetEmergencyList + +DESCRIPTION: + The function sends 'PBM/Get Emergency List Request' (0x000E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetEmergencyList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMGetAllGroups + +DESCRIPTION: + The function sends 'PBM/Get All Groups Request' (0x000F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetAllGroups( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMSetGroupInfo + +DESCRIPTION: + The function sends 'PBM/Set Group Info Request' (0x0010) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMSetGroupInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMGetState + +DESCRIPTION: + The function sends 'PBM/Get State Request' (0x0011) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMReadAllHiddenRecords + +DESCRIPTION: + The function sends 'PBM/Read All Hidden Records Request' (0x0012) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMReadAllHiddenRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMGetNextEmptyRecordID + +DESCRIPTION: + The function sends 'PBM/Get Next Empty Record ID Request' (0x0014) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetNextEmptyRecordID( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMGetNextRecordID + +DESCRIPTION: + The function sends 'PBM/Get Next Record ID Request' (0x0015) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetNextRecordID( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMGetAASList + +DESCRIPTION: + The function sends 'PBM/Get AAS List Request' (0x0016) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetAASList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMSetAAS + +DESCRIPTION: + The function sends 'PBM/Set AAS Request' (0x0017) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMSetAAS( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMBindSubscription + +DESCRIPTION: + The function sends 'PBM/Bind Subscription Request' (0x001A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMBindSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMGetSubscription + +DESCRIPTION: + The function sends 'PBM/Get Subscription Request' (0x001B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMSetCapabilitiesReadOperation + +DESCRIPTION: + The function sends 'PBM/Set Capabilities Read Operation Request' (0x001C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMSetCapabilitiesReadOperation( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMExtendedReadRecords + +DESCRIPTION: + The function sends 'PBM/Extended Read Records Request' (0x001D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMExtendedReadRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMExtendedWriteRecord + +DESCRIPTION: + The function sends 'PBM/Extended Write Record Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMExtendedWriteRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMExtendedSearchRecords + +DESCRIPTION: + The function sends 'PBM/Extended Search Records Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMExtendedSearchRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMExtendedReadAllHiddenRecords + +DESCRIPTION: + The function sends 'PBM/Extended Read All Hidden Records Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMExtendedReadAllHiddenRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PBMReadUndecodedRecords + +DESCRIPTION: + The function sends 'PBM/Read Undecoded Records Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMReadUndecodedRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetSupportedMessages + +DESCRIPTION: + The function sends 'LOC/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetSupportedFields + +DESCRIPTION: + The function sends 'LOC/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCClientRevision + +DESCRIPTION: + The function sends 'LOC/Client Revision Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCClientRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCRegisterEvents + +DESCRIPTION: + The function sends 'LOC/Register Events Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCRegisterEvents( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCStart + +DESCRIPTION: + The function sends 'LOC/Start Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCStart( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCStop + +DESCRIPTION: + The function sends 'LOC/Stop Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCStop( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetServiceRevision + +DESCRIPTION: + The function sends 'LOC/Get Service Revision Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetServiceRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetFixCriteria + +DESCRIPTION: + The function sends 'LOC/Get Fix Criteria Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetFixCriteria( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCProvideNIUserResponse + +DESCRIPTION: + The function sends 'LOC/Provide NI User Response Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCProvideNIUserResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectPredictedOrbitsData + +DESCRIPTION: + The function sends 'LOC/Inject Predicted Orbits Data Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectPredictedOrbitsData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetPredictedOrbitsDataSource + +DESCRIPTION: + The function sends 'LOC/Get Predicted Orbits Data Source Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetPredictedOrbitsDataSource( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetPredictedOrbitsDataValidity + +DESCRIPTION: + The function sends 'LOC/Get Predicted Orbits Data Validity Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetPredictedOrbitsDataValidity( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectUTCTime + +DESCRIPTION: + The function sends 'LOC/Inject UTC Time Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectUTCTime( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectPosition + +DESCRIPTION: + The function sends 'LOC/Inject Position Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectPosition( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetEngineLock + +DESCRIPTION: + The function sends 'LOC/Set Engine Lock Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetEngineLock( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetEngineLock + +DESCRIPTION: + The function sends 'LOC/Get Engine Lock Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetEngineLock( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetSBASConfig + +DESCRIPTION: + The function sends 'LOC/Set SBAS Config Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetSBASConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetSBASConfig + +DESCRIPTION: + The function sends 'LOC/Get SBAS Config Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSBASConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetNMEATypes + +DESCRIPTION: + The function sends 'LOC/Set NMEA Types Request' (0x003E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetNMEATypes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetNMEATypes + +DESCRIPTION: + The function sends 'LOC/Get NMEA Types Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetNMEATypes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetLowPowerMode + +DESCRIPTION: + The function sends 'LOC/Set Low Power Mode Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetLowPowerMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetLowPowerMode + +DESCRIPTION: + The function sends 'LOC/Get Low Power Mode Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetLowPowerMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetLocationServer + +DESCRIPTION: + The function sends 'LOC/Set Location Server Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetLocationServer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetLocationServer + +DESCRIPTION: + The function sends 'LOC/Get Location Server Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetLocationServer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCDeleteAssistData + +DESCRIPTION: + The function sends 'LOC/Delete Assist Data Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCDeleteAssistData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetXTRATSessionControl + +DESCRIPTION: + The function sends 'LOC/Set XTRA-T Session Control Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetXTRATSessionControl( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOC + +DESCRIPTION: + The function sends 'LOC' (0x0046) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOC( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectWiFiPosition + +DESCRIPTION: + The function sends 'LOC/Inject Wi-Fi Position Request' (0x0047) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectWiFiPosition( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCProvideWiFiStatus + +DESCRIPTION: + The function sends 'LOC/Provide Wi-Fi Status Request' (0x0048) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCProvideWiFiStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetRegisteredEvents + +DESCRIPTION: + The function sends 'LOC/Get Registered Events Request' (0x0049) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetRegisteredEvents( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetOperationMode + +DESCRIPTION: + The function sends 'LOC/Set Operation Mode Request' (0x004A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetOperationMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetOperationMode + +DESCRIPTION: + The function sends 'LOC/Get Operation Mode Request' (0x004B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetOperationMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetSPIStatus + +DESCRIPTION: + The function sends 'LOC/Set SPI Status Request' (0x004C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetSPIStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectSensorData + +DESCRIPTION: + The function sends 'LOC/Inject Sensor Data Request' (0x004D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectSensorData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectTimeSyncData + +DESCRIPTION: + The function sends 'LOC/Inject Time Sync Data Request' (0x004E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectTimeSyncData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetCradleMountConfig + +DESCRIPTION: + The function sends 'LOC/Set Cradle Mount Config Request' (0x004F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetCradleMountConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetCradleMountConfig + +DESCRIPTION: + The function sends 'LOC/Get Cradle Mount Config Request' (0x0050) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetCradleMountConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetExternalPowerConfig + +DESCRIPTION: + The function sends 'LOC/Set External Power Config Request' (0x0051) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetExternalPowerConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetExternalPowerConfig + +DESCRIPTION: + The function sends 'LOC/Get External Power Config Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetExternalPowerConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCProvideConnectionStatus + +DESCRIPTION: + The function sends 'LOC/Provide Connection Status Request' (0x0053) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCProvideConnectionStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetProtocolConfigParameters + +DESCRIPTION: + The function sends 'LOC/Set Protocol Config Parameters Request' (0x0054) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetProtocolConfigParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetProtocolConfigParameters + +DESCRIPTION: + The function sends 'LOC/Get Protocol Config Parameters Request' (0x0055) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetProtocolConfigParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetSensorControlConfig + +DESCRIPTION: + The function sends 'LOC/Set Sensor Control Config Request' (0x0056) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetSensorControlConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetSensorControlConfig + +DESCRIPTION: + The function sends 'LOC/Get Sensor Control Config Request' (0x0057) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSensorControlConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetSensorProperties + +DESCRIPTION: + The function sends 'LOC/Set Sensor Properties Request' (0x0058) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetSensorProperties( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetSensorProperties + +DESCRIPTION: + The function sends 'LOC/Get Sensor Properties Request' (0x0059) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSensorProperties( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetSensorPerformanceConfig + +DESCRIPTION: + The function sends 'LOC/Set Sensor Performance Config Request' (0x005A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetSensorPerformanceConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetSensorPerformanceConfig + +DESCRIPTION: + The function sends 'LOC/Get Sensor Performance Config Request' (0x005B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSensorPerformanceConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectSUPLCertificate + +DESCRIPTION: + The function sends 'LOC/Inject SUPL Certificate Request' (0x005C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectSUPLCertificate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCDeleteSUPLCertificate + +DESCRIPTION: + The function sends 'LOC/Delete SUPL Certificate Request' (0x005D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCDeleteSUPLCertificate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCSetPositionEngineConfig + +DESCRIPTION: + The function sends 'LOC/Set Position Engine Config Request' (0x005E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetPositionEngineConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetPositionEngineConfig + +DESCRIPTION: + The function sends 'LOC/Get Position Engine Config Request' (0x005F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetPositionEngineConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCAddCircularGeofence + +DESCRIPTION: + The function sends 'LOC/Add Circular Geofence Request' (0x0063) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCAddCircularGeofence( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCDeleteGeofence + +DESCRIPTION: + The function sends 'LOC/Delete Geofence Request' (0x0064) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCDeleteGeofence( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCQueryGeofence + +DESCRIPTION: + The function sends 'LOC/Query Geofence Request' (0x0065) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCQueryGeofence( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCEditGeofence + +DESCRIPTION: + The function sends 'LOC/Edit Geofence Request' (0x0066) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCEditGeofence( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetBestAvailablePosition + +DESCRIPTION: + The function sends 'LOC/Get Best Available Position Request' (0x0067) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetBestAvailablePosition( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectMotionData + +DESCRIPTION: + The function sends 'LOC/Inject Motion Data Request' (0x0068) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectMotionData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCGetNIGeofenceIDList + +DESCRIPTION: + The function sends 'LOC/Get NI Geofence ID List Request' (0x0069) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetNIGeofenceIDList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectGSMCellInfo + +DESCRIPTION: + The function sends 'LOC/Inject GSM Cell Info Request' (0x006A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectGSMCellInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectNetworkInitiatedMessage + +DESCRIPTION: + The function sends 'LOC/Inject Network Initiated Message Request' (0x006B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectNetworkInitiatedMessage( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCNotifyWWANOutOfService + +DESCRIPTION: + The function sends 'LOC/Notify WWAN Out Of Service Request' (0x006C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCNotifyWWANOutOfService( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectPedometerData + +DESCRIPTION: + The function sends 'LOC/Inject Pedometer Data Request' (0x006F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectPedometerData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectWCDMACellInfo + +DESCRIPTION: + The function sends 'LOC/Inject WCDMA Cell Info Request' (0x0070) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectWCDMACellInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectTDSCDMACellInfo + +DESCRIPTION: + The function sends 'LOC/Inject TD-SCDMA Cell Info Request' (0x0071) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectTDSCDMACellInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + LOCInjectSubscriberID + +DESCRIPTION: + The function sends 'LOC/Inject Subscriber ID Request' (0x0072) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectSubscriberID( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDAGetSupportedMessages + +DESCRIPTION: + The function sends 'WDA/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDAGetSupportedFields + +DESCRIPTION: + The function sends 'WDA/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDASetDataFormat + +DESCRIPTION: + The function sends 'WDA/Set Data Format Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDASetDataFormat( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDAGetDataFormat + +DESCRIPTION: + The function sends 'WDA/Get Data Format Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetDataFormat( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDAEnablePacketFilter + +DESCRIPTION: + The function sends 'WDA/Enable Packet Filter Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAEnablePacketFilter( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDADisablePacketFilter + +DESCRIPTION: + The function sends 'WDA/Disable Packet Filter Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDADisablePacketFilter( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDAGetPacketFilterState + +DESCRIPTION: + The function sends 'WDA/Get Packet Filter State Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetPacketFilterState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDAAddPacketFilterRule + +DESCRIPTION: + The function sends 'WDA/Add Packet Filter Rule Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAAddPacketFilterRule( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDADeletePacketFilterRule + +DESCRIPTION: + The function sends 'WDA/Delete Packet Filter Rule Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDADeletePacketFilterRule( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDAGetPacketFilterRuleHandles + +DESCRIPTION: + The function sends 'WDA/Get Packet Filter Rule Handles Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetPacketFilterRuleHandles( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDAGetPacketFilterRule + +DESCRIPTION: + The function sends 'WDA/Get Packet Filter Rule Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetPacketFilterRule( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDASetLoopbackState + +DESCRIPTION: + The function sends 'WDA/Set Loopback State Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDASetLoopbackState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + WDAGetLoopbackState + +DESCRIPTION: + The function sends 'WDA/Get Loopback State Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetLoopbackState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPEnable + +DESCRIPTION: + The function sends 'QCMAP/Enable Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPEnable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPDisable + +DESCRIPTION: + The function sends 'QCMAP/Disable Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPDisable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPBringUpWWAN + +DESCRIPTION: + The function sends 'QCMAP/Bring Up WWAN Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPBringUpWWAN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPTearDownWWAN + +DESCRIPTION: + The function sends 'QCMAP/Tear Down WWAN Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPTearDownWWAN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetWWANStatus + +DESCRIPTION: + The function sends 'QCMAP/Get WWAN Status Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetWWANStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetIPSecVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Get IPSec VPN Passthrough Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetIPSecVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPSetIPSecVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Set IPSec VPN Passthrough Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPSetIPSecVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetPPTPVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Get PPTP VPN Passthrough Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetPPTPVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPSetPPTPVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Set PPTP VPN Passthrough Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPSetPPTPVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetL2TPVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Get L2TP VPN Passthrough Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetL2TPVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPSetL2TPVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Set L2TP VPN Passthrough Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPSetL2TPVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetDynamicNATEntryTimeout + +DESCRIPTION: + The function sends 'QCMAP/Get Dynamic NAT Entry Timeout Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetDynamicNATEntryTimeout( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPSetDynamicNATEntryTimeout + +DESCRIPTION: + The function sends 'QCMAP/Set Dynamic NAT Entry Timeout Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPSetDynamicNATEntryTimeout( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPAddStaticNATEntry + +DESCRIPTION: + The function sends 'QCMAP/Add Static NAT Entry Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPAddStaticNATEntry( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPDeleteStaticNATEntry + +DESCRIPTION: + The function sends 'QCMAP/Delete Static NAT Entry Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPDeleteStaticNATEntry( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetStaticNATEntries + +DESCRIPTION: + The function sends 'QCMAP/Get Static NAT Entries Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetStaticNATEntries( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPSetDMZ + +DESCRIPTION: + The function sends 'QCMAP/Set DMZ Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPSetDMZ( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPDeleteDMZ + +DESCRIPTION: + The function sends 'QCMAP/Delete DMZ Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPDeleteDMZ( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetDMZ + +DESCRIPTION: + The function sends 'QCMAP/Get DMZ Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetDMZ( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetWWANConfig + +DESCRIPTION: + The function sends 'QCMAP/Get WWAN Config Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetWWANConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPEnableFirewallSetting + +DESCRIPTION: + The function sends 'QCMAP/Enable Firewall Setting Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPEnableFirewallSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetFirewallSetting + +DESCRIPTION: + The function sends 'QCMAP/Get Firewall Setting Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetFirewallSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPDisableFirewallSetting + +DESCRIPTION: + The function sends 'QCMAP/Disable Firewall Setting Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPDisableFirewallSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPAddFirewallConfig + +DESCRIPTION: + The function sends 'QCMAP/Add Firewall Config Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPAddFirewallConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetFirewallConfig + +DESCRIPTION: + The function sends 'QCMAP/Get Firewall Config Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetFirewallConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPDeleteFirewallConfig + +DESCRIPTION: + The function sends 'QCMAP/Delete Firewall Config Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPDeleteFirewallConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPWWANStatusIndicationRegister + +DESCRIPTION: + The function sends 'QCMAP/WWAN Status Indication Register Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPWWANStatusIndicationRegister( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPStationModeEnable + +DESCRIPTION: + The function sends 'QCMAP/Station Mode Enable Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPStationModeEnable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPStationModeDisable + +DESCRIPTION: + The function sends 'QCMAP/Station Mode Disable Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPStationModeDisable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetStationMode + +DESCRIPTION: + The function sends 'QCMAP/Get Station Mode Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetStationMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPAddExtendedFirewallConfig + +DESCRIPTION: + The function sends 'QCMAP/Add Extended Firewall Config Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPAddExtendedFirewallConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetExtendedFirewallConfig + +DESCRIPTION: + The function sends 'QCMAP/Get Extended Firewall Config Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetExtendedFirewallConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetFirewallHandles + +DESCRIPTION: + The function sends 'QCMAP/Get Firewall Handles Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetFirewallHandles( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPChangeNATType + +DESCRIPTION: + The function sends 'QCMAP/Change NAT Type Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPChangeNATType( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + QCMAPGetNATType + +DESCRIPTION: + The function sends 'QCMAP/Get NAT Type Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetNATType( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCReset + +DESCRIPTION: + The function sends 'PDC/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCRegisterForIndications + +DESCRIPTION: + The function sends 'PDC/Register For Indications Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCRegisterForIndications( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCGetSelectedConfig + +DESCRIPTION: + The function sends 'PDC/Get Selected Config Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCGetSelectedConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCSetSelectedConfig + +DESCRIPTION: + The function sends 'PDC/Set Selected Config Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCSetSelectedConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCListConfigs + +DESCRIPTION: + The function sends 'PDC/List Configs Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCListConfigs( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCDeleteConfig + +DESCRIPTION: + The function sends 'PDC/Delete Config Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCDeleteConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCLoadConfig + +DESCRIPTION: + The function sends 'PDC/Load Config Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCLoadConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCActivateConfig + +DESCRIPTION: + The function sends 'PDC/Activate Config Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCActivateConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCGetConfigInfo + +DESCRIPTION: + The function sends 'PDC/Get Config Info Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCGetConfigInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCGetConfigLimits + +DESCRIPTION: + The function sends 'PDC/Get Config Limits Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCGetConfigLimits( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCGetDefaultConfigInfo + +DESCRIPTION: + The function sends 'PDC/Get Default Config Info Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCGetDefaultConfigInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + PDCDeactivateConfig + +DESCRIPTION: + The function sends 'PDC/Deactivate Config Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCDeactivateConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + RFRPESetRFMScenario + +DESCRIPTION: + The function sends 'RFRPE/Set RFM Scenario Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RFRPESetRFMScenario( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + RFRPEGetRFMScenario + +DESCRIPTION: + The function sends 'RFRPE/Get RFM Scenario Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RFRPEGetRFMScenario( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + RFRPEGetProvisionedTableRevision + +DESCRIPTION: + The function sends 'RFRPE/Get Provisioned Table Revision Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RFRPEGetProvisionedTableRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATReset + +DESCRIPTION: + The function sends 'CAT/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATSetEventReport + +DESCRIPTION: + The function sends 'CAT/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATGetSupportedMessages + +DESCRIPTION: + The function sends 'CAT/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATGetSupportedFields + +DESCRIPTION: + The function sends 'CAT/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATGetServiceState + +DESCRIPTION: + The function sends 'CAT/Get Service State Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetServiceState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATSendTerminalResponse + +DESCRIPTION: + The function sends 'CAT/Send Terminal Response Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSendTerminalResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATEnvelopeCommand + +DESCRIPTION: + The function sends 'CAT/Envelope Command Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATEnvelopeCommand( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATGetEventReport + +DESCRIPTION: + The function sends 'CAT/Get Event Report Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATSendDecodedTerminalResponse + +DESCRIPTION: + The function sends 'CAT/Send Decoded Terminal Response Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSendDecodedTerminalResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATSendDecodedEnvelopeCommand + +DESCRIPTION: + The function sends 'CAT/Send Decoded Envelope Command Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSendDecodedEnvelopeCommand( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATEventConfirmation + +DESCRIPTION: + The function sends 'CAT/Event Confirmation Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATEventConfirmation( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATSCWSOpenChannel + +DESCRIPTION: + The function sends 'CAT/SCWS Open Channel Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSCWSOpenChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATSCWSCloseChannel + +DESCRIPTION: + The function sends 'CAT/SCWS Close Channel Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSCWSCloseChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATSCWSSendData + +DESCRIPTION: + The function sends 'CAT/SCWS Send Data Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSCWSSendData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATSCWSDataAvailable + +DESCRIPTION: + The function sends 'CAT/SCWS Data Available Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSCWSDataAvailable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATSCWSChannelStatus + +DESCRIPTION: + The function sends 'CAT/SCWS Channel Status Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSCWSChannelStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATGetTerminalProfile + +DESCRIPTION: + The function sends 'CAT/Get Terminal Profile Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetTerminalProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATSetConfiguration + +DESCRIPTION: + The function sends 'CAT/Set Configuration Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSetConfiguration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + CATGetConfiguration + +DESCRIPTION: + The function sends 'CAT/Get Configuration Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetConfiguration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + RMSReset + +DESCRIPTION: + The function sends 'RMS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RMSReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + RMSGetSMSWake + +DESCRIPTION: + The function sends 'RMS/Get SMS Wake Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RMSGetSMSWake( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + RMSSetSMSWake + +DESCRIPTION: + The function sends 'RMS/Set SMS Wake Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RMSSetSMSWake( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + OMAReset + +DESCRIPTION: + The function sends 'OMA/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMAReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + OMASetEventReport + +DESCRIPTION: + The function sends 'OMA/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMASetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + OMAStartSession + +DESCRIPTION: + The function sends 'OMA/Start Session Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMAStartSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + OMACancelSession + +DESCRIPTION: + The function sends 'OMA/Cancel Session Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMACancelSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + OMAGetSessionInfo + +DESCRIPTION: + The function sends 'OMA/Get Session Info Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMAGetSessionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + OMASendSelection + +DESCRIPTION: + The function sends 'OMA/Send Selection Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMASendSelection( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + OMAGetFeatures + +DESCRIPTION: + The function sends 'OMA/Get Features Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMAGetFeatures( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================== +METHOD: + OMASetFeatures + +DESCRIPTION: + The function sends 'OMA/Set Features Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMASetFeatures( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPIEnums.h b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPIEnums.h new file mode 100644 index 0000000..8f799a3 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPIEnums.h @@ -0,0 +1,7083 @@ +/*=========================================================================== +FILE: + GobiConnectionMgmtAPIEnums.h + +DESCRIPTION: + Declaration of the Gobi API enumerations + +Copyright (c) 2013, 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 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. +==========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// Gobi API error code +enum eGobiError +{ + eGOBI_ERR_ENUM_BEGIN = -1, + + eGOBI_ERR_NONE, // 00 Success + eGOBI_ERR_GENERAL, // 01 General error + eGOBI_ERR_INTERNAL, // 02 Internal error + eGOBI_ERR_MEMORY, // 03 Memory error + eGOBI_ERR_INVALID_ARG, // 04 Invalid argument + eGOBI_ERR_BUFFER_SZ, // 05 Buffer too small + eGOBI_ERR_NO_DEVICE, // 06 Unable to detect device + eGOBI_ERR_INVALID_DEVID, // 07 Invalid device ID + eGOBI_ERR_NO_CONNECTION, // 08 No connection to device + eGOBI_ERR_IFACE, // 09 Unable to obtain required interace + eGOBI_ERR_CONNECT, // 10 Unable to connect to interface + eGOBI_ERR_REQ_SCHEDULE, // 11 Unable to schedule request + eGOBI_ERR_REQUEST, // 12 Error sending request + eGOBI_ERR_RESPONSE, // 13 Error receiving response + eGOBI_ERR_REQUEST_TO, // 14 Timeout while sending request + eGOBI_ERR_RESPONSE_TO, // 15 Timeout while receiving response + eGOBI_ERR_MALFORMED_RSP, // 16 Malformed response received + eGOBI_ERR_INVALID_RSP, // 17 Invalid/error response received + eGOBI_ERR_INVALID_FILE, // 18 Invalid file path + eGOBI_ERR_FILE_OPEN, // 19 Unable to open file + eGOBI_ERR_FILE_COPY, // 20 Unable to copy file + eGOBI_ERR_QDL_SCM, // 21 Unable to open service control mgr + eGOBI_ERR_NO_QDL_SVC, // 22 Unable to detect QDL service + eGOBI_ERR_NO_QDL_SVC_INFO, // 23 Unable to obtain QDL service info + eGOBI_ERR_NO_QDL_SVC_PATH, // 24 Unable to locate QSL service + eGOBI_ERR_QDL_SVC_CFG, // 25 Unable to reconfigure QDL service + eGOBI_ERR_QDL_SVC_IFACE, // 26 Unable to interface to QDL service + eGOBI_ERR_OFFLINE, // 27 Unable to set device offline + eGOBI_ERR_RESET, // 28 Unable to reset device + eGOBI_ERR_NO_SIGNAL, // 29 No available signal + eGOBI_ERR_MULTIPLE_DEVICES, // 30 Multiple devices detected + eGOBI_ERR_DRIVER, // 31 Error interfacing to driver + eGOBI_ERR_NO_CANCELABLE_OP, // 32 No cancelable operation is pending + eGOBI_ERR_CANCEL_OP, // 33 Error canceling outstanding operation + eGOBI_ERR_QDL_CRC, // 34 QDL image data CRC error + eGOBI_ERR_QDL_PARSING, // 35 QDL image data parsing error + eGOBI_ERR_QDL_AUTH, // 36 QDL image authentication error + eGOBI_ERR_QDL_WRITE, // 37 QDL image write error + eGOBI_ERR_QDL_OPEN_SIZE, // 38 QDL image size error + eGOBI_ERR_QDL_OPEN_TYPE, // 39 QDL image type error + eGOBI_ERR_QDL_OPEN_PROT, // 40 QDL memory protection error + eGOBI_ERR_QDL_OPEN_SKIP, // 41 QDL image not required + eGOBI_ERR_QDL_ERR_GENERAL, // 42 QDL general error + eGOBI_ERR_QDL_BAR_MODE, // 43 QDL BAR mode error + + eGOBI_ERR_ENUM_END, + + // Offset from which mapped QMI error codes start from (see eQMIErrors) + eGOBI_ERR_QMI_OFFSET = 1000 +}; + +// Enum to describe possible QMI services +enum eQMIService:BYTE +{ + eQMI_SVC_CONTROL, // 000 Control service + eQMI_SVC_WDS, // 001 Wireless data service + eQMI_SVC_DMS, // 002 Device management service + eQMI_SVC_NAS, // 003 Network access service + eQMI_SVC_QOS, // 004 Quality of service, err, service + eQMI_SVC_WMS, // 005 Wireless messaging service + eQMI_SVC_PDS, // 006 Position determination service + eQMI_SVC_AUTH, // 007 Authentication service + eQMI_SVC_AT, // 008 AT command processor service + eQMI_SVC_VOICE, // 009 Voice service + eQMI_SVC_CAT2, // 010 Card application toolkit service (new) + eQMI_SVC_UIM, // 011 UIM service + eQMI_SVC_PBM, // 012 Phonebook service + eQMI_SVC_QCHAT, // 013 QCHAT Service + eQMI_SVC_RMTFS, // 014 Remote file system service + eQMI_SVC_TEST, // 015 Test service + eQMI_SVC_LOC, // 016 Location service + eQMI_SVC_SAR, // 017 Specific absorption rate service + eQMI_SVC_IMSS, // 018 IMS settings service + eQMI_SVC_ADC, // 019 Analog to digital converter driver service + eQMI_SVC_CSD, // 020 Core sound driver service + eQMI_SVC_MFS, // 021 Modem embedded file system service + eQMI_SVC_TIME, // 022 Time service + eQMI_SVC_TS, // 023 Thermal sensors service + eQMI_SVC_TMD, // 024 Thermal mitigation device service + eQMI_SVC_SAP, // 025 Service access proxy service + eQMI_SVC_WDA, // 026 Wireless data administrative service + eQMI_SVC_TSYNC, // 027 TSYNC control service + eQMI_SVC_RFSA, // 028 Remote file system access service + eQMI_SVC_CSVT, // 029 Circuit switched videotelephony service + eQMI_SVC_QCMAP, // 030 Qualcomm mobile access point service + eQMI_SVC_IMSP, // 031 IMS presence service + eQMI_SVC_IMSVT, // 032 IMS videotelephony service + eQMI_SVC_IMSA, // 033 IMS application service + eQMI_SVC_COEX, // 034 Coexistence service + eQMI_SVC_RESERVED_35, // 035 Reserved + eQMI_SVC_PDC, // 036 Persistent device configuration service + eQMI_SVC_RESERVED_37, // 037 Reserved + eQMI_SVC_STX, // 038 Simultaneous transmit service + eQMI_SVC_BIT, // 039 Bearer independent transport service + eQMI_SVC_IMSRTP, // 040 IMS RTP service + eQMI_SVC_RFRPE, // 041 RF radiated performance enhancement service + eQMI_SVC_DSD, // 042 Data system determination service + eQMI_SVC_SSCTL, // 043 Subsystem control service + + eQMI_SVC_CAT = 224, // 224 Card application toolkit service + eQMI_SVC_RMS, // 225 Remote management service + eQMI_SVC_OMA // 226 Open mobile alliance dev mgmt service +}; + +// Enum to describe QMI CTL Message types +enum eQMIMessageCTL:WORD +{ + eQMI_CTL_SET_INSTANCE_ID = 32, // 32 Set the unique link instance ID + eQMI_CTL_GET_VERSION_INFO, // 33 Get supported service version info + eQMI_CTL_GET_CLIENT_ID, // 34 Get a unique client ID + eQMI_CTL_RELEASE_CLIENT_ID, // 35 Release the unique client ID + eQMI_CTL_REVOKE_CLIENT_ID_IND, // 36 Indication of client ID revocation + eQMI_CTL_INVALID_CLIENT_ID, // 37 Indication of invalid client ID + eQMI_CTL_SET_DATA_FORMAT, // 38 Set host driver data format + eQMI_CTL_SYNC, // 39 Synchronize client/server + eQMI_CTL_SYNC_IND = 39, // 39 Synchronize indication + eQMI_CTL_SET_EVENT, // 40 Set event report conditions + eQMI_CTL_EVENT_IND = 40, // 40 Event report indication + eQMI_CTL_SET_POWER_SAVE_CFG, // 41 Set power save config + eQMI_CTL_SET_POWER_SAVE_MODE, // 42 Set power save mode + eQMI_CTL_GET_POWER_SAVE_MODE // 43 Get power save mode +}; + +// Enum to describe QMI WDS Message types +enum eQMIMessageWDS:WORD +{ + eQMI_WDS_RESET, // 000 Reset WDS service state variables + eQMI_WDS_SET_EVENT, // 001 Set connection state report conditions + eQMI_WDS_EVENT_IND = 1, // 001 Connection state report indication + eQMI_WDS_ABORT, // 002 Abort previously issued WDS command + eQMI_WDS_SET_INDICATION, // 003 Set indication conditions + + eQMI_WDS_GET_MESSAGES = 30, // 030 Get supported messages + eQMI_WDS_GET_FIELDS, // 031 Get supported fields + eQMI_WDS_START_NET, // 032 Start WDS network interface + eQMI_WDS_STOP_NET, // 033 Stop WDS network interface + eQMI_WDS_GET_PKT_STATUS, // 034 Get packet data connection status + eQMI_WDS_PKT_STATUS_IND = 34, // 034 Packet data connection status indication + eQMI_WDS_GET_RATES, // 035 Get current bit rates of the connection + eQMI_WDS_GET_STATISTICS, // 036 Get the packet data transfer statistics + eQMI_WDS_G0_DORMANT, // 037 Go dormant + eQMI_WDS_G0_ACTIVE, // 038 Go active + eQMI_WDS_CREATE_PROFILE, // 039 Create profile with specified settings + eQMI_WDS_MODIFY_PROFILE, // 040 Modify profile with specified settings + eQMI_WDS_DELETE_PROFILE, // 041 Delete the specified profile + eQMI_WDS_GET_PROFILE_LIST, // 042 Get all profiles + eQMI_WDS_GET_PROFILE, // 043 Get the specified profile + eQMI_WDS_GET_DEFAULTS, // 044 Get the default data session settings + eQMI_WDS_GET_SETTINGS, // 045 Get the runtime data session settings + eQMI_WDS_SET_MIP, // 046 Get the mobile IP setting + eQMI_WDS_GET_MIP, // 047 Set the mobile IP setting + eQMI_WDS_GET_DORMANCY, // 048 Get the dormancy status + + eQMI_WDS_GET_AUTOCONNECT = 52, // 052 Get the NDIS autoconnect setting + eQMI_WDS_GET_DURATION, // 053 Get the duration of data session + eQMI_WDS_GET_MODEM_STATUS, // 054 Get the modem status + eQMI_WDS_MODEM_IND = 54, // 054 Modem status indication + eQMI_WDS_GET_DATA_BEARER, // 055 Get the data bearer type + eQMI_WDS_GET_MODEM_INFO, // 056 Get the modem info + eQMI_WDS_MODEM_INFO_IND = 56, // 056 Modem info indication + + eQMI_WDS_GET_ACTIVE_MIP = 60, // 060 Get the active mobile IP profile + eQMI_WDS_SET_ACTIVE_MIP, // 061 Set the active mobile IP profile + eQMI_WDS_GET_MIP_PROFILE, // 062 Get mobile IP profile settings + eQMI_WDS_SET_MIP_PROFILE, // 063 Set mobile IP profile settings + eQMI_WDS_GET_MIP_PARAMS, // 064 Get mobile IP parameters + eQMI_WDS_SET_MIP_PARAMS, // 065 Set mobile IP parameters + eQMI_WDS_GET_LAST_MIP_STATUS, // 066 Get last mobile IP status + eQMI_WDS_GET_AAA_AUTH_STATUS, // 067 Get AN-AAA authentication status + eQMI_WDS_GET_CUR_DATA_BEARER, // 068 Get current data bearer + eQMI_WDS_GET_CALL_LIST, // 069 Get the call history list + eQMI_WDS_GET_CALL_ENTRY, // 070 Get an entry from the call history list + eQMI_WDS_CLEAR_CALL_LIST, // 071 Clear the call history list + eQMI_WDS_GET_CALL_LIST_MAX, // 072 Get maximum size of call history list + eQMI_WDS_GET_DEFAULT_PROF_NUM, // 073 Get default profile number + eQMI_WDS_SET_DEFAULT_PROF_NUM, // 074 Set default profile number + eQMI_WDS_RESET_PROFILE, // 075 Reset profile + eQMI_WDS_RESET_PROF_PARAM, // 076 Reset profile param to invalid + eQMI_WDS_SET_IP_FAMILY, // 077 Set the client IP family preference + eQMI_WDS_SET_FMC_TUNNEL, // 078 Set FMC tunnel parameters + eQMI_WDS_CLEAR_FMC_TUNNEL, // 079 Clear FMC tunnel parameters + eQMI_WDS_GET_FMC_TUNNEL, // 080 Get FMC tunnel parameters + eQMI_WDS_SET_AUTOCONNECT, // 081 Set the NDIS autoconnect setting + eQMI_WDS_GET_DNS, // 082 Get the DNS setting + eQMI_WDS_SET_DNS, // 083 Set the DNS setting + eQMI_WDS_GET_PRE_DORMANCY, // 084 Get the CDMA pre-dormancy settings + eQMI_WDS_SET_CAM_TIMER, // 085 Set the CAM timer + eQMI_WDS_GET_CAM_TIMER, // 086 Get the CAM timer + eQMI_WDS_SET_SCRM, // 087 Set SCRM status + eQMI_WDS_GET_SCRM, // 088 Get SCRM status + eQMI_WDS_SET_RDUD, // 089 Set RDUD status + eQMI_WDS_GET_RDUD, // 090 Get RDUD status + eQMI_WDS_GET_SIPMIP_CALL_TYPE, // 091 Set SIP/MIP call type + eQMI_WDS_SET_PM_PERIOD, // 092 Set EV-DO page monitor period + eQMI_WDS_PM_PERIOD_IND = 92, // 092 EV-DO page monitor period indication + eQMI_WDS_SET_FORCE_LONG_SLEEP, // 093 Set EV-DO force long sleep feature + eQMI_WDS_GET_PM_PERIOD, // 094 Get EV-DO page monitor period + eQMI_WDS_GET_CALL_THROTTLE, // 095 Get call throttle info + eQMI_WDS_GET_NSAPI, // 096 Get NSAPI + eQMI_WDS_SET_DUN_CTRL_PREF, // 097 Set DUN control preference + eQMI_WDS_GET_DUN_CTRL_INFO, // 098 Set DUN control info + eQMI_WDS_SET_DUN_CTRL_EVENT, // 099 Set DUN control event preference + eQMI_WDS_DUN_CTRL_IND = 99, // 099 DUN control event report indication + eQMI_WDS_PENDING_DUN_CTRL, // 100 Control pending DUN call + eQMI_WDS_TMGI_ACTIVATE, // 101 Activate eMBMS TMGI + eQMI_WDS_TMGI_ACT_IND = 101, // 101 eMBMS TMGI activate indication + eQMI_WDS_TMGI_DEACTIVATE, // 102 Activate eMBMS TMGI + eQMI_WDS_TMGI_DEACT_IND = 102, // 102 eMBMS TMGI activate indication + eQMI_WDS_TMGI_LIST_QUERY, // 103 Query for eMBMS TMGI list + eQMI_WDS_TMGI_LIST_IND, // 104 eMBMS TMGI list query indication + eQMI_WDS_GET_PREF_DATA_SYS, // 105 Get preferred data system + eQMI_WDS_GET_LAST_DATA_STATUS, // 106 Get last data call status + eQMI_WDS_GET_CURR_DATA_SYS, // 107 Get current data systems status + eQMI_WDS_GET_PDN_THROTTLE, // 108 Get PDN throttle info + + eQMI_WDS_GET_LTE_ATTACH = 133, // 133 Get LTE attach parameters + eQMI_WDS_RESET_PKT_STATS, // 134 Reset packet statistics + eQMI_WDS_GET_FLOW_CTRL_STATUS, // 135 Get flow control status + eQMI_WDS_TMGI_SWITCH, // 136 Activate/deactivate eMBMS TMGI + eQMI_WDS_TMGI_SWITCH_IND = 136,// 136 eMBMS TMGI activate/deactivate ind + eQMI_WDS_BIND_DATA_PORT, // 137 Bind data port + eQMI_WDS_SET_PDN_FILTER, // 138 Set additional PDN filter + eQMI_WDS_REMOVE_PDN_FILTER, // 139 Remove PDN filter + eQMI_WDS_EX_IP_CFG_IND, // 140 Extend IP config indication + eQMI_WDS_CFG_REV_IP_CONN_EVT, // 141 Configure reverse IP connection event + eQMI_WDS_REV_IP_TRANSPORT_IND, // 142 Reverse IP transport connection ind + eQMI_WDS_GET_IPSEC_SA_CFG, // 143 Get IPSec static SA config + eQMI_WDS_REV_IP_TPORT_CFG_DONE,// 144 Reverse IP transport config complete + eQMI_WDS_GET_EX_DATA_BEARER, // 145 Get extended data bearer + eQMI_WDS_GET_LTE_MAX_ATTACH, // 146 Get LTE maximum attach PDN number + eQMI_WDS_SET_LTE_ATTACH_PDNS, // 147 Set LTE attach PDN list + eQMI_WDS_GET_LTE_ATTACH_PDNS, // 148 Set LTE attach PDN list + eQMI_WDS_LTE_ATTACH_PDNS_IND, // 149 LTE attach PDN list indication + eQMI_WDS_SET_LTE_DATA_RETRY, // 150 Set LTE data retry + eQMI_WDS_GET_LTE_DATA_RETRY, // 151 Get LTE data retry + eQMI_WDS_SET_LTE_ATTACH_TYPE, // 152 Set LTE attach type + eQMI_WDS_GET_LTE_ATTACH_TYPE, // 153 Get LTE attach type + eQMI_WDS_REV_IP_FILTER_IND, // 154 Reverse IP transport filter ind + eQMI_WDS_HANDOFF_INFO_IND // 155 Handoff info indication +}; + +// Enum to describe QMI DMS Message types +enum eQMIMessageDMS:WORD +{ + eQMI_DMS_RESET, // 00 Reset DMS service state variables + eQMI_DMS_SET_EVENT, // 01 Set connection state report conditions + eQMI_DMS_EVENT_IND = 1, // 01 Connection state report indication + + eQMI_DMS_GET_MESSAGES = 30, // 30 Get supported messages + eQMI_DMS_GET_FIELDS, // 31 Get supported fields + eQMI_DMS_GET_CAPS, // 32 Get the device capabilities + eQMI_DMS_GET_MANUFACTURER, // 33 Get the device manfacturer + eQMI_DMS_GET_MODEL_ID, // 34 Get the device model ID + eQMI_DMS_GET_REV_ID, // 35 Get the device revision ID + eQMI_DMS_GET_NUMBER, // 36 Get the assigned voice number + eQMI_DMS_GET_IDS, // 37 Get the ESN/IMEI/MEID + eQMI_DMS_GET_POWER_STATE, // 38 Get the get power state + eQMI_DMS_UIM_SET_PIN_PROT, // 39 UIM - Set PIN protection + eQMI_DMS_UIM_PIN_VERIFY, // 40 UIM - Verify PIN + eQMI_DMS_UIM_PIN_UNBLOCK, // 41 UIM - Unblock PIN + eQMI_DMS_UIM_PIN_CHANGE, // 42 UIM - Change PIN + eQMI_DMS_UIM_GET_PIN_STATUS, // 43 UIM - Get PIN status + eQMI_DMS_GET_MSM_ID = 44, // 44 Get MSM ID + eQMI_DMS_GET_OPERATING_MODE, // 45 Get the operating mode + eQMI_DMS_SET_OPERATING_MODE, // 46 Set the operating mode + eQMI_DMS_GET_TIME, // 47 Get timestamp from the device + eQMI_DMS_GET_PRL_VERSION, // 48 Get the PRL version + eQMI_DMS_GET_ACTIVATED_STATE, // 49 Get the activation state + eQMI_DMS_ACTIVATE_AUTOMATIC, // 50 Perform an automatic activation + eQMI_DMS_ACTIVATE_MANUAL, // 51 Perform a manual activation + eQMI_DMS_GET_USER_LOCK_STATE, // 52 Get the lock state + eQMI_DMS_SET_USER_LOCK_STATE, // 53 Set the lock state + eQMI_DMS_SET_USER_LOCK_CODE, // 54 Set the lock PIN + eQMI_DMS_READ_USER_DATA, // 55 Read user data + eQMI_DMS_WRITE_USER_DATA, // 56 Write user data + eQMI_DMS_READ_ERI_FILE, // 57 Read the enhanced roaming indicator file + eQMI_DMS_FACTORY_DEFAULTS, // 58 Reset to factory defaults + eQMI_DMS_VALIDATE_SPC, // 59 Validate service programming code + eQMI_DMS_UIM_GET_ICCID, // 60 Get UIM ICCID + eQMI_DMS_GET_FIRWARE_ID, // 61 Get firmware ID + eQMI_DMS_SET_FIRMWARE_ID, // 62 Set firmware ID + eQMI_DMS_GET_HOST_LOCK_ID, // 63 Get host lock ID + eQMI_DMS_UIM_GET_CK_STATUS, // 64 UIM - Get control key status + eQMI_DMS_UIM_SET_CK_PROT, // 65 UIM - Set control key protection + eQMI_DMS_UIM_UNBLOCK_CK, // 66 UIM - Unblock facility control key + eQMI_DMS_GET_IMSI, // 67 Get the IMSI + eQMI_DMS_UIM_GET_STATE, // 68 UIM - Get the UIM state + eQMI_DMS_GET_BAND_CAPS, // 69 Get the device band capabilities + eQMI_DMS_GET_FACTORY_ID, // 70 Get the device factory ID + eQMI_DMS_GET_FIRMWARE_PREF, // 71 Get firmware preference + eQMI_DMS_SET_FIRMWARE_PREF, // 72 Set firmware preference + eQMI_DMS_LIST_FIRMWARE, // 73 List all stored firmware + eQMI_DMS_DELETE_FIRMWARE, // 74 Delete specified stored firmware + eQMI_DMS_SET_TIME, // 75 Set device time + eQMI_DMS_GET_FIRMWARE_INFO, // 76 Get stored firmware info + eQMI_DMS_GET_ALT_NET_CFG, // 77 Get alternate network config + eQMI_DMS_SET_ALT_NET_CFG, // 78 Set alternate network config + eQMI_DMS_GET_IMG_DLOAD_MODE, // 79 Get next image download mode + eQMI_DMS_SET_IMG_DLOAD_MODE, // 80 Set next image download mode + eQMI_DMS_GET_SW_VERSION, // 81 Get software version + eQMI_DMS_SET_SPC, // 82 Set SPC + eQMI_DMS_GET_CURRENT_PRL_INFO,// 83 Get current PRL info + eQMI_DMS_BIND_SUBSCRIPTION, // 84 Bind subscription + eQMI_DMS_GET_SUBSCRIPTION // 85 Get bound subscription +}; + +// Enum to describe QMI NAS Message types +enum eQMIMessageNAS:WORD +{ + eQMI_NAS_RESET, // 000 Reset NAS service state variables + eQMI_NAS_ABORT, // 001 Abort previously issued NAS command + eQMI_NAS_SET_EVENT, // 002 Set NAS state report conditions + eQMI_NAS_EVENT_IND = 2, // 002 Connection state report indication + eQMI_NAS_SET_REG_EVENT, // 003 Set NAS registration report conditions + + eQMI_NAS_GET_MESSAGES = 30, // 030 Get supported messages + eQMI_NAS_GET_FIELDS, // 031 Get supported fields + eQMI_NAS_GET_RSSI, // 032 Get the signal strength + eQMI_NAS_SCAN_NETS, // 033 Scan for visible network + eQMI_NAS_REGISTER_NET, // 034 Initiate a network registration + eQMI_NAS_ATTACH_DETACH, // 035 Initiate an attach or detach action + eQMI_NAS_GET_SS_INFO, // 036 Get info about current serving system + eQMI_NAS_SS_INFO_IND = 36, // 036 Current serving system info indication + eQMI_NAS_GET_HOME_INFO, // 037 Get info about home network + eQMI_NAS_GET_NET_PREF_LIST, // 038 Get the list of preferred networks + eQMI_NAS_SET_NET_PREF_LIST, // 039 Set the list of preferred networks + eQMI_NAS_GET_NET_BAN_LIST, // 040 Get the list of forbidden networks + eQMI_NAS_SET_NET_BAN_LIST, // 041 Set the list of forbidden networks + eQMI_NAS_SET_TECH_PREF, // 042 Set the technology preference + eQMI_NAS_GET_TECH_PREF, // 043 Get the technology preference + eQMI_NAS_GET_ACCOLC, // 044 Get the Access Overload Class + eQMI_NAS_SET_ACCOLC, // 045 Set the Access Overload Class + eQMI_NAS_GET_SYSPREF, // 046 Get the CDMA system preference + eQMI_NAS_GET_NET_PARAMS, // 047 Get various network parameters + eQMI_NAS_SET_NET_PARAMS, // 048 Set various network parameters + eQMI_NAS_GET_RF_INFO, // 049 Get the SS radio/band channel info + eQMI_NAS_GET_AAA_AUTH_STATUS, // 050 Get AN-AAA authentication status + eQMI_NAS_SET_SYS_SELECT_PREF, // 051 Set system selection preference + eQMI_NAS_GET_SYS_SELECT_PREF, // 052 Get system selection preference + eQMI_NAS_SYS_SELECT_IND = 52, // 052 System selection pref indication + + eQMI_NAS_SET_DDTM_PREF = 55, // 055 Set DDTM preference + eQMI_NAS_GET_DDTM_PREF, // 056 Get DDTM preference + eQMI_NAS_DDTM_IND = 56, // 056 DDTM preference indication + eQMI_NAS_GET_OPERATER_NAME, // 057 Get operator name data + eQMI_NAS_OPERATER_NAME_IND, // 058 Operator name data indication + eQMI_NAS_GET_PLMN_MODE, // 059 Get PLMN mode bit from CSP + eQMI_NAS_PLMN_MODE_IND, // 060 CSP PLMN mode bit indication + eQMI_NAS_UPDATE_AKEY, // 061 Update the A-KEY + eQMI_NAS_GET_3GPP2_SUBS_INFO, // 062 Get 3GPP2 subscription info + eQMI_NAS_SET_3GPP2_SUBS_INFO, // 063 Set 3GPP2 subscription info + eQMI_NAS_MOB_CAI_REV, // 064 Get mobile CAI revision information + eQMI_NAS_GET_RTRE_CONFIG, // 065 Get RTRE configuration information + eQMI_NAS_SET_RTRE_CONFIG, // 066 Set RTRE configuration information + eQMI_NAS_GET_CELL_LOC_INFO, // 067 Get cell location information + eQMI_NAS_GET_PLMN_NAME, // 068 Get operator name for specified network + eQMI_NAS_BIND_SUBS, // 069 Bind client to a specific subscription + eQMI_NAS_MANAGED_ROAMING_IND, // 070 Managed roaming indication + eQMI_NAS_DSB_PREF_IND, // 071 Dual standby preference indication + eQMI_NAS_SUBS_INFO_IND, // 072 Subscription info indication + eQMI_NAS_GET_MODE_PREF, // 073 Get mode preference + + eQMI_NAS_SET_DSB_PREF = 75, // 075 Set dual standby preference + eQMI_NAS_NETWORK_TIME_IND, // 076 Network time indication + eQMI_NAS_GET_SYSTEM_INFO, // 077 Get system info + eQMI_NAS_SYSTEM_INFO_IND, // 078 System info indication + eQMI_NAS_GET_SIGNAL_INFO, // 079 Get signal info + eQMI_NAS_CFG_SIGNAL_INFO, // 080 Configure signal info report + eQMI_NAS_SIGNAL_INFO_IND, // 081 Signal info indication + eQMI_NAS_GET_ERROR_RATE, // 082 Get error rate info + eQMI_NAS_ERROR_RATE_IND, // 083 Error rate indication + eQMI_NAS_EVDO_SESSION_IND, // 084 CDMA 1xEV-DO session close indication + eQMI_NAS_EVDO_UATI_IND, // 085 CDMA 1xEV-DO UATI update indication + eQMI_NAS_GET_EVDO_SUBTYPE, // 086 Get CDMA 1xEV-DO protocol subtype + eQMI_NAS_GET_EVDO_COLOR_CODE, // 087 Get CDMA 1xEV-DO color code + eQMI_NAS_GET_ACQ_SYS_MODE, // 088 Get current acquisition system mode + eQMI_NAS_SET_RX_DIVERSITY, // 089 Set the RX diversity + eQMI_NAS_GET_RX_TX_INFO, // 090 Get detailed RX/TX information + eQMI_NAS_UPDATE_AKEY_EXT, // 091 Update the A-KEY (extended) + eQMI_NAS_GET_DSB_PREF, // 092 Get dual standby preference + eQMI_NAS_DETACH_LTE, // 093 Detach the current LTE system + eQMI_NAS_BLOCK_LTE_PLMN, // 094 Block LTE PLMN + eQMI_NAS_UNBLOCK_LTE_PLMN, // 095 Unblock LTE PLMN + eQMI_NAS_RESET_LTE_PLMN_BLK, // 096 Reset LTE PLMN blocking + eQMI_NAS_CUR_PLMN_NAME_IND, // 097 Current PLMN name indication + eQMI_NAS_CONFIG_EMBMS, // 098 Configure eMBMS + eQMI_NAS_GET_EMBMS_STATUS, // 099 Get eMBMS status + eQMI_NAS_EMBMS_STATUS_IND, // 100 eMBMS status indication + eQMI_NAS_GET_CDMA_POS_INFO, // 101 Get CDMA position info + eQMI_NAS_RF_BAND_INFO_IND, // 102 RF band info indication + eQMI_NAS_FORCE_NET_SEARCH, // 103 Force network search + eQMI_NAS_NET_REJECT_IND, // 104 Network reject indication + eQMI_NAS_GET_MANAGED_ROAM, // 105 Get managed roaming configuration + eQMI_NAS_RTRE_CONFIG_IND, // 106 RTRE configuration indication + eQMI_NAS_GET_CENTRALIZED_EOM, // 107 Get centralized EONS support + eQMI_NAS_CFG_SIGNAL_INFO2, // 108 Configure signal info report (V2) + eQMI_NAS_GET_TDS_CELL_INFO, // 109 Get TD-SCDMA cell/position info + eQMI_NAS_SET_HPLMN_IRAT_TIMER,// 110 Set HPLMN IRAT search timer + eQMI_NAS_GET_EMBMS_SIQ_QUAL, // 111 Get eMBMS signal quality + eQMI_NAS_LIMIT_SYS_INFO, // 112 Limit system info indications + eQMI_NAS_GET_SYS_INFO_LIMITS, // 113 Get system info indication limits + eQMI_NAS_UPDATE_IMS_STATUS, // 114 Update IMS status + eQMI_NAS_GET_IMS_PREFERENCE, // 115 Get IMS preference status + eQMI_NAS_IMS_PREFERENCE_IND, // 116 IMS preference status indication + eQMI_NAS_CFG_IND_PLMN_NAME, // 117 Configure indication for PLMN name + eQMI_NAS_CDMA_AVOID_SYSTEM, // 118 CDMA avoid system + eQMI_NAS_GET_AVOIDED_SYSTEMS, // 119 Get CDMA avoided system list + eQMI_NAS_SET_HPLMN_SRCH_TIMER,// 120 Set HPLMN search timer + eQMI_NAS_GET_HPLMN_SRCH_TIMER,// 121 Get HPLMN search timer + eQMI_NAS_SET_E911_STATE, // 122 Set E911 state + eQMI_NAS_E911_STATE_IND, // 123 E911 state ready indication + eQMI_NAS_GET_SUBS_INFO, // 124 Get subscription info + eQMI_NAS_GET_NET_TIME, // 125 Get network time + eQMI_NAS_GET_LTE_SIB16_TIME, // 126 Get LTE SIB16 network time + eQMI_NAS_LTE_SIB16_TIME_IND // 127 LTE SIB16 network time indication +}; + +// Enum to describe QMI WMS Message types +enum eQMIMessageWMS:WORD +{ + eQMI_WMS_RESET, // 00 Reset WMS service state variables + eQMI_WMS_SET_EVENT, // 01 Set new message report conditions + eQMI_WMS_EVENT_IND = 1, // 01 New message report indication + + eQMI_WMS_GET_MESSAGES = 30, // 030 Get supported messages + eQMI_WMS_GET_FIELDS, // 031 Get supported fields + eQMI_WMS_RAW_SEND, // 32 Send a raw message + eQMI_WMS_RAW_WRITE, // 33 Write a raw message to the device + eQMI_WMS_RAW_READ, // 34 Read a raw message from the device + eQMI_WMS_MODIFY_TAG, // 35 Modify message tag on the device + eQMI_WMS_DELETE, // 36 Delete message by index/tag/memory + + eQMI_WMS_GET_MSG_PROTOCOL = 48, // 48 Get the current message protocol + eQMI_WMS_GET_MSG_LIST, // 49 Get list of messages from the device + eQMI_WMS_SET_ROUTES, // 50 Set routes for message memory storage + eQMI_WMS_GET_ROUTES, // 51 Get routes for message memory storage + eQMI_WMS_GET_SMSC_ADDR, // 52 Get SMSC address + eQMI_WMS_SET_SMSC_ADDR, // 53 Set SMSC address + eQMI_WMS_GET_MSG_LIST_MAX, // 54 Get maximum size of SMS storage + eQMI_WMS_SEND_ACK, // 55 Send ACK + eQMI_WMS_SET_RETRY_PERIOD, // 56 Set retry period + eQMI_WMS_SET_RETRY_INTERVAL, // 57 Set retry interval + eQMI_WMS_SET_DC_DISCO_TIMER, // 58 Set DC auto-disconnect timer + eQMI_WMS_SET_MEMORY_STATUS, // 59 Set memory storage status + eQMI_WMS_SET_BC_ACTIVATION, // 60 Set broadcast activation + eQMI_WMS_SET_BC_CONFIG, // 61 Set broadcast config + eQMI_WMS_GET_BC_CONFIG, // 62 Get broadcast config + eQMI_WMS_MEMORY_FULL_IND, // 63 Memory full indication + eQMI_WMS_GET_DOMAIN_PREF, // 64 Get domain preference + eQMI_WMS_SET_DOMAIN_PREF, // 65 Set domain preference + eQMI_WMS_MEMORY_SEND, // 66 Send message from memory store + eQMI_WMS_GET_MSG_WAITING, // 67 Get message waiting info + eQMI_WMS_MSG_WAITING_IND, // 68 Message waiting indication + eQMI_WMS_SET_PRIMARY_CLIENT, // 69 Set client as primary client + eQMI_WMS_SMSC_ADDR_IND, // 70 SMSC address indication + eQMI_WMS_INDICATOR_REG, // 71 Register for indicators + eQMI_WMS_GET_TRANSPORT_INFO, // 72 Get transport layer info + eQMI_WMS_TRANSPORT_INFO_IND, // 73 Transport layer info indication + eQMI_WMS_GET_NW_REG_INFO, // 74 Get network registration info + eQMI_WMS_NW_REG_INFO_IND, // 75 Network registration info indication + eQMI_WMS_BIND_SUBSCRIPTION, // 76 Bind client to a subscription + eQMI_WMS_GET_INDICATOR_REG, // 77 Get indicator registration + eQMI_WMS_GET_SMS_PARAMETERS, // 78 Get SMS EF-SMSP parameters + eQMI_WMS_SET_SMS_PARAMETERS, // 79 Set SMS EF-SMSP parameters + eQMI_WMS_CALL_STATUS_IND, // 80 Call status indication + eQMI_WMS_GET_DOMAIN_PREF_CFG, // 81 Get domain pref config + eQMI_WMS_SET_DOMAIN_PREF_CFG, // 82 Set domain pref config + eQMI_WMS_GET_RETRY_PERIOD, // 83 Get retry period + eQMI_WMS_GET_RETRY_INTERVAL, // 84 Get retry interval + eQMI_WMS_GET_DC_DISCO_TIMER, // 85 Get DC auto-disconnect timer + eQMI_WMS_GET_MEMORY_STATUS, // 86 Get memory storage status + eQMI_WMS_GET_PRIMARY_CLIENT, // 87 Get primary cleint + eQMI_WMS_GET_SUBSCR_BINDING, // 88 Get client subscription binding + eQMI_WMS_ASYNC_RAW_SEND, // 89 Asynchronously send a raw message + eQMI_WMS_ASYNC_RAW_SEND_IND = 89,// 89 Asynchronous send indication + eQMI_WMS_ASYNC_SEND_ACK, // 90 Asynchronously send ACK + eQMI_WMS_ASYNC_SEND_ACK_IND = 90,// 90 Asynchronou send ACK indication + eQMI_WMS_ASYNC_MEMORY_SEND, // 91 Async send msg from memory store + eQMI_WMS_ASYNC_MEM_SEND_IND = 91,// 91 Async memory store send indication + eQMI_WMS_GET_SERVICE_READY, // 92 Get service ready status + eQMI_WMS_SERVICE_READY_IND, // 93 Service ready status indication + eQMI_WMS_BC_CONFIG_IND, // 94 Broadcast config indication + eQMI_WMS_SET_MSG_WAITING // 95 Set message waiting info +}; + +// Enum to describe QMI PDS Message types +enum eQMIMessagePDS:WORD +{ + eQMI_PDS_RESET, // 000 Reset PDS service state variables + eQMI_PDS_SET_EVENT, // 001 Set PDS report conditions + eQMI_PDS_EVENT_IND = 1, // 001 PDS report indication + + eQMI_PDS_GET_STATE = 32, // 032 Return PDS service state + eQMI_PDS_STATE_IND = 32, // 032 PDS service state indication + eQMI_PDS_SET_STATE, // 033 Set PDS service state + eQMI_PDS_START_SESSION, // 034 Start a PDS tracking session + eQMI_PDS_GET_SESSION_INFO, // 035 Get PDS tracking session info + eQMI_PDS_FIX_POSITION, // 036 Manual tracking session position + eQMI_PDS_END_SESSION, // 037 End a PDS tracking session + eQMI_PDS_GET_NMEA_CFG, // 038 Get NMEA sentence config + eQMI_PDS_SET_NMEA_CFG, // 039 Set NMEA sentence config + eQMI_PDS_INJECT_TIME, // 040 Inject a time reference + eQMI_PDS_GET_DEFAULTS, // 041 Get default tracking session config + eQMI_PDS_SET_DEFAULTS, // 042 Set default tracking session config + eQMI_PDS_GET_XTRA_PARAMS, // 043 Get the GPS XTRA parameters + eQMI_PDS_SET_XTRA_PARAMS, // 044 Set the GPS XTRA parameters + eQMI_PDS_FORCE_XTRA_DL, // 045 Force a GPS XTRA database download + eQMI_PDS_GET_AGPS_CONFIG, // 046 Get the AGPS mode configuration + eQMI_PDS_SET_AGPS_CONFIG, // 047 Set the AGPS mode configuration + eQMI_PDS_GET_SVC_AUTOTRACK, // 048 Get the service auto-tracking state + eQMI_PDS_SET_SVC_AUTOTRACK, // 049 Set the service auto-tracking state + eQMI_PDS_GET_COM_AUTOTRACK, // 050 Get COM port auto-tracking config + eQMI_PDS_SET_COM_AUTOTRACK, // 051 Set COM port auto-tracking config + eQMI_PDS_RESET_DATA, // 052 Reset PDS service data + eQMI_PDS_SINGLE_FIX, // 053 Request single position fix + eQMI_PDS_GET_VERSION, // 054 Get PDS service version + eQMI_PDS_INJECT_XTRA, // 055 Inject XTRA data + eQMI_PDS_INJECT_POSITION, // 056 Inject position data + eQMI_PDS_INJECT_WIFI, // 057 Inject Wi-Fi obtained data + eQMI_PDS_GET_SBAS_CONFIG, // 058 Get SBAS config + eQMI_PDS_SET_SBAS_CONFIG, // 059 Set SBAS config + eQMI_PDS_SEND_NI_RESPONSE, // 060 Send network initiated response + eQMI_PDS_INJECT_ABS_TIME, // 061 Inject absolute time + eQMI_PDS_INJECT_EFS, // 062 Inject EFS data + eQMI_PDS_GET_DPO_CONFIG, // 063 Get DPO config + eQMI_PDS_SET_DPO_CONFIG, // 064 Set DPO config + eQMI_PDS_GET_ODP_CONFIG, // 065 Get ODP config + eQMI_PDS_SET_ODP_CONFIG, // 066 Set ODP config + eQMI_PDS_CANCEL_SINGLE_FIX, // 067 Cancel single position fix + eQMI_PDS_GET_GPS_STATE, // 068 Get GPS state + eQMI_PDS_SET_PPM_EVT_REPORT, // 069 Set PPM event report + eQMI_PDS_SET_SPI_REPORT, // 070 Set SPI streaming reporting + eQMI_PDS_SET_SPI_RPT_IND = 70, // 070 Set SPI streaming indication + eQMI_PDS_SET_SPI_STATUS, // 071 Set SPI status + eQMI_PDS_SET_PPM_REPORT, // 072 Set PPM reporting state + eQMI_PDS_SET_PPM_RPT_IND = 72, // 072 Set PPM reporting state indication + eQMI_PDS_FORCE_RECEIVER_OFF, // 073 Force receiver off + + eQMI_PDS_GET_METHODS = 80, // 080 Get GPS position methods state + eQMI_PDS_SET_METHODS, // 081 Set GPS position methods state + eQMI_PDS_INJECT_SENSOR, // 082 Inject sensor data + eQMI_PDS_INJECT_TIME_SYNC, // 083 Inject time sync data + eQMI_PDS_GET_SENSOR_CFG, // 084 Get sensor config + eQMI_PDS_SET_SENSOR_CFG, // 085 Set sensor config + eQMI_PDS_GET_NAV_CFG, // 086 Get navigation config + eQMI_PDS_SET_NAV_CFG, // 087 Set navigation config + + eQMI_PDS_SET_WLAN_BLANK = 90, // 090 Set WLAN blanking + eQMI_PDS_SET_LBS_SC_RPT, // 091 Set LBS security challenge reporting + eQMI_PDS_LBS_SC_IND = 91, // 091 LBS security challenge indication + eQMI_PDS_SET_LBS_SC, // 092 Set LBS security challenge + eQMI_PDS_GET_LBS_ENCRYPT_CFG, // 093 Get LBS security encryption config + eQMI_PDS_SET_LBS_UPDATE_RATE, // 094 Set LBS security update rate + eQMI_PDS_SET_CELLDB_CONTROL, // 095 Set cell database control + eQMI_PDS_READY_IND, // 096 Ready indication + eQMI_PDS_INJECT_MOTION_DATA, // 097 Inject motion data + eQMI_PDS_SET_GNSS_ERR_REPORT, // 098 Set GNSS error recovery report + eQMI_PDS_GNSS_ERR_IND = 98, // 098 GNSS error recovery report indication + eQMI_PDS_RESET_SERVICE, // 099 Reset location service + eQMI_PDS_INJECT_TEST_DATA, // 100 Inject test data + eQMI_PDS_SET_GNSS_RF_CFG, // 101 Set GNSS RF config + eQMI_PDS_INJECT_COG_DATA, // 102 Inject course over ground data + eQMI_PDS_INJECT_SUPL_CERT, // 103 Inject SUPL certificate + eQMI_PDS_DELETE_SUPL_CERT , // 104 Delete SUPL certificate + eQMI_PDS_GET_IS801_OVER_SUPL, // 105 Get IS-801 Over SUPL indicator + eQMI_PDS_SET_IS801_OVER_SUPL, // 106 Set IS-801 Over SUPL indicator + eQMI_PDS_GET_SUPL_HASH_ALG, // 107 Get SUPL hash algorithm + eQMI_PDS_SET_SUPL_HASH_ALG, // 108 Set SUPL hash algorithm + eQMI_PDS_GET_SUPL_MAX_VERSION, // 109 Get SUPL maximum version + eQMI_PDS_SET_SUPL_MAX_VERSION, // 110 Set SUPL maximum version + eQMI_PDS_GET_SUPL_SECURITY, // 111 Get SUPL security + eQMI_PDS_SET_SUPL_SECURITY, // 112 Set SUPL security + eQMI_PDS_GET_SUPL_TLS_VERSION, // 113 Get SUPL TLS version + eQMI_PDS_SET_SUPL_TLS_VERSION, // 114 Set SUPL TLS version + eQMI_PDS_GET_AGNSS_POS_MODES, // 115 Get AGNSS positioning modes + eQMI_PDS_SET_AGNSS_POS_MODES, // 116 Set AGNSS positioning modes + eQMI_PDS_GET_EMERGENCY_PROTO, // 117 Get emergency protocol config + eQMI_PDS_SET_EMERGENCY_PROTO, // 118 Set emergency protocol config + eQMI_PDS_GET_APN_PROFILES, // 119 Get APN profiles + eQMI_PDS_SET_APN_PROFILES, // 120 Set APN profiles + eQMI_PDS_GET_HOME_SUPL_ADDR, // 121 Get home SUPL address + eQMI_PDS_SET_HOME_SUPL_ADDR, // 122 Set home SUPL address + eQMI_PDS_INJECT_VEHICLE_DATA, // 123 Inject vehicle sensor data +}; + +// Enum to describe QMI AUTH Message types +enum eQMIMessageAUTH:WORD +{ + eQMI_AUTH_START_EAP = 32, // 32 Start the EAP session + eQMI_AUTH_SEND_EAP, // 33 Send and receive EAP packets + eQMI_AUTH_EAP_RESULT_IND, // 34 EAP session result indication + eQMI_AUTH_GET_EAP_KEYS, // 35 Get the EAP session keys + eQMI_AUTH_END_EAP, // 36 End the EAP session + eQMI_AUTH_RUN_AKA, // 37 Runs the AKA algorithm + eQMI_AUTH_AKA_RESULT_IND // 38 AKA algorithm result indication +}; + +// Enum to describe QMI VOICE Message types +enum eQMIMessageVoice:WORD +{ + eQMI_VOICE_INDICATION_REG = 3, // 03 Set indication registration state + + eQMI_VOICE_GET_MESSAGES = 30, // 30 Get supported messages + eQMI_VOICE_GET_FIELDS, // 31 Get supported fields + eQMI_VOICE_CALL_ORIGINATE, // 32 Originate a voice call + eQMI_VOICE_CALL_END, // 33 End a voice call + eQMI_VOICE_CALL_ANSWER, // 34 Answer incoming voice call + + eQMI_VOICE_GET_CALL_INFO = 36, // 36 Get call information + eQMI_VOICE_OTASP_STATUS_IND, // 37 OTASP/OTAPA event indication + eQMI_VOICE_INFO_REC_IND, // 38 New info record indication + eQMI_VOICE_SEND_FLASH, // 39 Send a simple flash + eQMI_VOICE_BURST_DTMF, // 40 Send a burst DTMF + eQMI_VOICE_START_CONT_DTMF, // 41 Starts a continuous DTMF + eQMI_VOICE_STOP_CONT_DTMF, // 42 Stops a continuous DTMF + eQMI_VOICE_DTMF_IND, // 43 DTMF event indication + eQMI_VOICE_SET_PRIVACY_PREF, // 44 Set privacy preference + eQMI_VOICE_PRIVACY_IND, // 45 Privacy change indication + eQMI_VOICE_ALL_STATUS_IND, // 46 Voice all call status indication + eQMI_VOICE_GET_ALL_STATUS, // 47 Get voice all call status + + eQMI_VOICE_MANAGE_CALLS = 49, // 49 Manage calls + eQMI_VOICE_SUPS_NOTIFICATION_IND, // 50 Supplementary service notifications + eQMI_VOICE_SET_SUPS_SERVICE, // 51 Manage supplementary service + eQMI_VOICE_GET_CALL_WAITING, // 52 Query sup service call waiting + eQMI_VOICE_GET_CALL_BARRING, // 53 Query sup service call barring + eQMI_VOICE_GET_CLIP, // 54 Query sup service CLIP + eQMI_VOICE_GET_CLIR, // 55 Query sup service CLIR + eQMI_VOICE_GET_CALL_FWDING, // 56 Query sup service call forwarding + eQMI_VOICE_SET_CALL_BARRING_PWD, // 57 Set call barring password + eQMI_VOICE_ORIG_USSD, // 58 Initiate USSD operation then wait + eQMI_VOICE_ANSWER_USSD, // 59 Answer USSD request + eQMI_VOICE_CANCEL_USSD, // 60 Cancel USSD operation + eQMI_VOICE_USSD_RELEASE_IND, // 61 USSD release indication + eQMI_VOICE_USSD_IND, // 62 USSD request/notification indication + eQMI_VOICE_UUS_IND, // 63 UUS information indication + eQMI_VOICE_SET_CONFIG, // 64 Set config + eQMI_VOICE_GET_CONFIG, // 65 Get config + eQMI_VOICE_SUPS_IND, // 66 Sup service request indication + eQMI_VOICE_ASYNC_ORIG_USSD, // 67 Initiate USSD operation + eQMI_VOICE_ASYNC_USSD_IND = 67, // 67 USSD request/notification indication + eQMI_VOICE_BIND_SUBSCRIPTION, // 68 Bind subscription + eQMI_VOICE_ALS_SET_LINE_SW, // 69 ALS set line switching + eQMI_VOICE_ALS_SELECT_LINE, // 70 ALS select line + eQMI_VOICE_AOC_RESET_ACM, // 71 AOC reset ACM + eQMI_VOICE_AOC_SET_ACM_MAX, // 72 ACM set ACM maximum + eQMI_VOICE_AOC_GET_CM_INFO, // 73 AOC get call meter info + eQMI_VOICE_AOC_LOW_FUNDS_IND, // 74 AOC low funds indication + eQMI_VOICE_GET_COLP, // 75 Get COLP info + eQMI_VOICE_GET_COLR, // 76 Get COLR info + eQMI_VOICE_GET_CNAP, // 77 Get CNAP info + eQMI_VOICE_MANAGE_IP_CALLS, // 78 Manage VoIP calls + eQMI_VOICE_ALS_GET_LINE_SW, // 79 ALS get line switching + eQMI_VOICE_ALS_GET_LINE_SEL, // 80 ALS get selected line + eQMI_VOICE_MODIFIED_IND, // 81 Call modified indication + eQMI_VOICE_MODIFY_ACCEPT_IND, // 82 Call modify accept indication + eQMI_VOICE_SPEECH_CODEC_IND, // 83 Speech codec info indication + eQMI_VOICE_HANDOVER_IND, // 84 Handover indication + eQMI_VOICE_CONFERENCE_INFO_IND, // 85 Conference info indication + eQMI_VOICE_CONFERENCE_JOIN_IND, // 86 Conference join indication + eQMI_VOICE_CONFERENCE_UPDATE_IND, // 87 Conference update indication + eQMI_VOICE_EXT_BURST_TYPE_IND, // 88 Extended burst type indication + eQMI_VOICE_MT_PAGE_MISS_IND, // 89 MT page miss indication + eQMI_VOICE_CC_RESULT_INFO_IND // 90 Call control result info indication +}; + +// Enum to describe QMI UIM Message types +enum eQMIMessageUIM:WORD +{ + eQMI_UIM_RESET, // 00 Reset + + eQMI_UIM_GET_MESSAGES = 30, // 30 Get supported messages + eQMI_UIM_GET_FIELDS, // 31 Get supported fields + eQMI_UIM_READ_TRANSPARENT, // 32 Read data + eQMI_UIM_READ_TRANSPARENT_IND = 32, // 32 Read data indication + eQMI_UIM_READ_RECORD, // 33 Read one or more records + eQMI_UIM_READ_RECORD_IND = 33, // 33 Read records indication + eQMI_UIM_WRITE_TRANSPARENT, // 34 Write data + eQMI_UIM_WRITE_TRANSPARENT_IND = 34, // 34 Write data indication + eQMI_UIM_WRITE_RECORD, // 35 Write a record + eQMI_UIM_WRITE_RECORD_IND = 35, // 35 Write a record indication + eQMI_UIM_GET_FILE_ATTRIBUTES, // 36 Get file attributes + eQMI_UIM_GET_FILE_ATTRIBUTES_IND = 36, // 36 Get file attributes indication + eQMI_UIM_SET_PIN_PROTECTION, // 37 Set PIN protection + eQMI_UIM_SET_PIN_PROTECTION_IND = 37, // 37 Set PIN protection indication + eQMI_UIM_VERITFY_PIN, // 38 Verify PIN + eQMI_UIM_VERITFY_PIN_IND = 38, // 38 Verify PIN indication + eQMI_UIM_UNBLOCK_PIN, // 39 Unblock PIN + eQMI_UIM_UNBLOCK_PIN_IND = 39, // 39 Unblock PIN indication + eQMI_UIM_CHANGE_PIN, // 40 Change PIN + eQMI_UIM_CHANGE_PIN_IND = 40, // 40 Change PIN indication + eQMI_UIM_DEPERSONALIZATION, // 41 Depersonalization + eQMI_UIM_REFRESH_REGISTER, // 42 Refresh register + eQMI_UIM_REFRESH_OK, // 43 Validate refresh + eQMI_UIM_REFRESH_COMPLETE, // 44 Complete refresh + eQMI_UIM_GET_LAST_REFRESH_EVENT, // 45 Get last refresh event + eQMI_UIM_EVENT_REGISTRATION, // 46 Register for indications + eQMI_UIM_GET_CARD_STATUS, // 47 Get card status + eQMI_UIM_POWER_DOWN, // 48 Power down + eQMI_UIM_POWER_UP, // 49 Power up + eQMI_UIM_CARD_STATUS_IND, // 50 Card status indication + eQMI_UIM_REFRESH_IND, // 51 Refresh indication + eQMI_UIM_AUTHENTICATE, // 52 Authenticate + eQMI_UIM_AUTHENTICATE_IND = 52, // 52 Authenticate indication + eQMI_UIM_CLOSE_SESSION, // 53 Close session + eQMI_UIM_GET_SERVICE_STATUS, // 54 Get service status + eQMI_UIM_SET_SERVICE_STATUS, // 55 Set service status + eQMI_UIM_CHANGE_PROVISIONING, // 56 Change provisioning + eQMI_UIM_GET_LABEL, // 57 Get label + eQMI_UIM_GET_CONFIG, // 58 Get configuration + eQMI_UIM_SEND_ADPU, // 59 Send ADPU + eQMI_UIM_SEND_ADPU_IND = 59, // 59 Send ADPU indication + eQMI_UIM_SAP_CONNECTION, // 60 SAP connection + eQMI_UIM_SAP_REQUEST, // 61 SAP request + eQMI_UIM_SAP_CONNECTION_IND, // 62 SAP connection indication + eQMI_UIM_LOGICAL_CHANNEL, // 63 Logical channel + eQMI_UIM_SUBSCRIPTION_OK, // 64 OK to publish subscription? + eQMI_UIM_GET_ATR, // 65 Get ATR + eQMI_UIM_SESSION_CLOSED_IND, // 67 Session closed indication + eQMI_UIM_REGISTER_REFRESH_ALL, // 68 Register for all refresh + eQMI_UIM_SET_FILE_STATUS // 69 Set file status +}; + +// Enum to describe QMI PBM Message types +enum eQMIMessagePBM:WORD +{ + eQMI_PBM_INDICATION_REG = 1, // 01 Set indication registration state + eQMI_PBM_GET_CAPABILITIES, // 02 Get phonebook capabilities by type + eQMI_PBM_GET_ALL_CAPABILITIES, // 03 Get all phonebook capabilities + eQMI_PBM_READ_RECORDS, // 04 Read phonebook records + eQMI_PBM_READ_RECORD_IND = 4, // 04 Read phonebook record indication + eQMI_PBM_WRITE_RECORD, // 05 Add/modify a phonebook record + eQMI_PBM_DELETE_RECORD, // 06 Delete a phonebook record + eQMI_PBM_DELETE_ALL_RECORDS, // 07 Delete all phonebook records + eQMI_PBM_SEARCH_RECORDS, // 08 Search phonebook records + eQMI_PBM_RECORD_UPDATE_IND, // 09 Phonebook record update indication + eQMI_PBM_REFRESH_IND, // 10 Phonebook refresh indication + eQMI_PBM_READY_IND, // 11 Phonebook ready indication + eQMI_PBM_EMERGENCY_LIST_IND, // 12 Phonebook emergency list indication + eQMI_PBM_ALL_READY_IND, // 13 All phonebooks ready indication + eQMI_PBM_GET_EMERGENCY_LIST, // 14 Get phonebook emergency list + eQMI_PBM_GET_ALL_GROUPS, // 15 Get all phonebook groups + eQMI_PBM_SET_GROUP_INFO, // 16 Set phonebook group info + eQMI_PBM_GET_STATE, // 17 Get phonebook state + eQMI_PBM_READ_ALL_HIDDEN_RECS, // 18 Read all hidden phonebook records + eQMI_PBM_HIDDEN_REC_STATUS_IND, // 19 Hidden record status indication + eQMI_PBM_GET_NEXT_EMPTY_REC_ID, // 20 Get next empty record ID + eQMI_PBM_GET_NEXT_REC_ID, // 21 Get next non-empty record ID + eQMI_PBM_GET_AAS_LIST, // 22 Get AAS list + eQMI_PBM_SET_AAS, // 23 Add/modify/delete AAS entry + eQMI_PBM_UPDATE_AAS_IND, // 24 AAS change indication + eQMI_PBM_UPDATE_GAS_IND, // 25 GAS change indication + eQMI_PBM_BIND_SUBSCRIPTION, // 26 Bind client to specific subscription + eQMI_PBM_GET_SUBSCRIPTION, // 27 Get subscription client is bound to + eQMI_PBM_SET_CAPS_READ_OP, // 28 ADN set capabilities read operation + eQMI_PBM_SET_CAPS_READ_IND = 28, // 28 ADN set caps read op indication + eQMI_PBM_EX_READ_RECORDS, // 29 Read phonebook records + eQMI_PBM_EX_READ_RECORD_IND = 29,// 29 Read phonebook record indication + eQMI_PBM_EX_WRITE_RECORD, // 30 Add/modify a phonebook record + eQMI_PBM_EX_SEARCH_RECORDS, // 31 Search phonebook records + eQMI_PBM_EX_READ_ALL_HIDDEN_RECS,// 32 Read all hidden phonebook records + eQMI_PBM_SIM_INIT_DONE_IND, // 33 SIM initialization done indication + eQMI_PBM_READ_UNDC_RECS, // 34 Read undecoded phonebook records + eQMI_PBM_READ_UNDC_RECS_IND = 34 // 34 Read undecoded phonebook record ind +}; + +// Enum to describe QMI LOC Message types +enum eQMIMessageLOC:WORD +{ + eQMI_LOC_GET_MESSAGES = 30, // 030 Get supported messages + eQMI_LOC_GET_FIELDS, // 031 Get supported fields + eQMI_LOC_CLIENT_REVISION, // 032 Send client revision to service + eQMI_LOC_REGISTER_EVENTS, // 033 Register for events/indications + eQMI_LOC_START, // 034 Start GPS session + eQMI_LOC_STOP, // 035 Start GPS session + eQMI_LOC_POSITION_REPORT_IND, // 036 Position report indication + eQMI_LOC_GNSS_SAT_INFO_IND, // 037 GNSS satellite info indication + eQMI_LOC_NMEA_IND, // 038 NMEA sentence indication + eQMI_LOC_NETWORK_REQ_IND, // 039 Network initiated request indication + eQMI_LOC_INJECT_TIME_REQ_IND, // 040 Inject time request indication + eQMI_LOC_INJECT_ORBITS_REQ_IND, // 041 Inject predicted orbits req ind + eQMI_LOC_INJECT_POS_REQ_IND, // 042 Inject position request indication + eQMI_LOC_ENGINE_STATE_IND, // 043 Engine state indication + eQMI_LOC_FIX_SESSION_STATE_IND, // 044 Fi session state indication + eQMI_LOC_WIFI_REQ_IND, // 045 Wi-Fi request indication + eQMI_LOC_SENSOR_DATA_IND, // 046 Sensor streaming ready status ind + eQMI_LOC_INJECT_TIME_SYNC_IND, // 047 Inject time sync data indication + eQMI_LOC_SPI_STREAM_REQ_IND, // 048 SPI streaming reports req indication + eQMI_LOC_SVR_CONNECTION_REQ_IND, // 049 Server connection req indication + eQMI_LOC_GET_REV_REQ, // 050 Get service revision + eQMI_LOC_GET_REV_REQ_IND = 50, // 050 Get service revision indication + eQMI_LOC_GET_FIX_CRIT, // 051 Get fix criteria + eQMI_LOC_GET_FIX_CRIT_IND = 51, // 051 Get fix criteria indication + eQMI_LOC_NI_USER_RSP, // 052 Network initiated user response + eQMI_LOC_NI_USER_RSP_IND = 52, // 052 Network initiated user response ind + eQMI_LOC_INJECT_ORBITS, // 053 Inject predicted orbits data + eQMI_LOC_INJECT_ORBITS_IND = 53, // 053 Inject predicted orbits indication + eQMI_LOC_GET_ORBIT_SRC, // 054 Get predicted orbits data source + eQMI_LOC_GET_ORBIT_SRC_IND = 54, // 054 Get predicted orbits data source ind + eQMI_LOC_GET_ORBIT_VLD, // 055 Get predicted orbits data validity + eQMI_LOC_GET_ORBIT_VLD_IND = 55, // 055 Get predicted orbits validity ind + eQMI_LOC_INJECT_UTC, // 056 Inject UTC time + eQMI_LOC_INJECT_UTC_IND = 56, // 056 Inject UTC time indication + eQMI_LOC_INJECT_POS, // 057 Inject position + eQMI_LOC_INJECT_POS_IND = 57, // 057 Inject position indication + eQMI_LOC_SET_ENG_LOCK, // 058 Set engine lock + eQMI_LOC_SET_ENG_LOCK_IND = 58, // 058 Set engine lock indication + eQMI_LOC_GET_ENG_LOCK, // 059 Get engine lock + eQMI_LOC_GET_ENG_LOCK_IND = 59, // 059 Get engine lock indication + eQMI_LOC_SET_SBAS_CFG, // 060 Set SBAS config + eQMI_LOC_SET_SBAS_CFG_IND = 60, // 060 Set SBAS config indication + eQMI_LOC_GET_SBAS_CFG, // 061 Get SBAS config + eQMI_LOC_GET_SBAS_CFG_IND = 61, // 061 Get SBAS config indication + eQMI_LOC_SET_NMEA_TYPS, // 062 Set NMEA sentence types + eQMI_LOC_SET_NMEA_TYPS_IND = 62, // 062 Set NMEA sentence types indication + eQMI_LOC_GET_NMEA_TYPS, // 063 Get NMEA sentence types + eQMI_LOC_GET_NMEA_TYPS_IND = 63, // 063 Get NMEA sentence types indication + eQMI_LOC_SET_LPM_CFG, // 064 Set low power mode config + eQMI_LOC_SET_LPM_CFG_IND = 64, // 064 Set low power mode config indication + eQMI_LOC_GET_LPM_CFG, // 065 Get low power mode config + eQMI_LOC_GET_LPM_CFG_IND = 65, // 065 Get low power mode config indication + eQMI_LOC_SET_SERVER, // 066 Set A-GPS server + eQMI_LOC_SET_SERVER_IND = 66, // 066 Set A-GPS server indication + eQMI_LOC_GET_SERVER, // 067 Set A-GPS server + eQMI_LOC_GET_SERVER_IND = 67, // 067 Set A-GPS server indication + eQMI_LOC_DEL_ASST_DATA, // 068 Delete assistance data + eQMI_LOC_DEL_ASST_DATA_IND = 68, // 068 Delete assistance data indication + eQMI_LOC_SET_XTRA_T, // 069 Set XTRA_T session control + eQMI_LOC_SET_XTRA_T_IND = 69, // 069 Set XTRA_T session control indication + eQMI_LOC_GET_XTRA_T, // 070 Get XTRA_T session control + eQMI_LOC_GET_XTRA_T_IND = 70, // 070 Get XTRA_T session control indication + eQMI_LOC_INJECT_WIFI, // 071 Inject Wi-Fi info + eQMI_LOC_INJECT_WIFI_IND = 71, // 071 Inject Wi-Fi info indication + eQMI_LOC_NOTIFY_WIFI, // 072 Notify server of Wi-Fi status + eQMI_LOC_NOTIFY_WIFI_IND = 72, // 072 Notify server of Wi-Fi status ind + eQMI_LOC_GET_REG_EVENTS, // 073 Get registered event status + eQMI_LOC_GET_REG_EVENTS_IND = 73,// 073 Get registered event status ind + eQMI_LOC_SET_OP_MODE, // 074 Set operation mode + eQMI_LOC_SET_OP_MODE_IND = 74, // 074 Set operation mode indication + eQMI_LOC_GET_OP_MODE, // 075 Get operation mode + eQMI_LOC_GET_OP_MODE_IND = 75, // 075 Get operation mode indication + eQMI_LOC_SET_SPI_STATUS, // 076 Set SPI status + eQMI_LOC_SET_SPI_STATUS_IND = 76,// 076 Set SPI status indication + eQMI_LOC_INJECT_SENSOR, // 077 Inject sensor data + eQMI_LOC_INJECT_SENSOR_IND = 77, // 077 Inject sensor data indication + eQMI_LOC_INJ_TIME_SYNC, // 078 Inject time sync data + eQMI_LOC_INJ_TIME_SYNC_IND = 78, // 078 Inject time sync data indication + eQMI_LOC_SET_CRADLE, // 079 Set cradle mount config + eQMI_LOC_SET_CRADLE_IND = 79, // 079 Set cradle mount config indication + eQMI_LOC_GET_CRADLE, // 080 Get cradle mount config + eQMI_LOC_GET_CRADLE_IND = 80, // 080 Get cradle mount config indication + eQMI_LOC_SET_EXT_POWER, // 081 Set external power config + eQMI_LOC_SET_EXT_POWER_IND = 81, // 081 Set external power config indication + eQMI_LOC_GET_EXT_POWER, // 082 Get external power config + eQMI_LOC_GET_EXT_POWER_IND = 82, // 082 Get external power config indication + eQMI_LOC_INFORM_CONN, // 083 Inform service of connection status + eQMI_LOC_INFORM_CONN_IND = 83, // 083 Inform connection status indication + eQMI_LOC_SET_PROTO_CFG, // 084 Set protocol config + eQMI_LOC_SET_PROTO_CFG_IND = 84, // 084 Set protocol config indication + eQMI_LOC_GET_PROTO_CFG, // 085 Get protocol config + eQMI_LOC_GET_PROTO_CFG_IND = 85, // 085 Get protocol config indication + eQMI_LOC_SET_SENSOR_CFG, // 086 Set sensor control config + eQMI_LOC_SET_SENSOR_CFG_IND = 86,// 086 Set sensor control config indication + eQMI_LOC_GET_SENSOR_CFG, // 087 Get sensor control config + eQMI_LOC_GET_SENSOR_CFG_IND = 87,// 087 Get sensor control config indication + eQMI_LOC_SET_SENSOR_PRP, // 088 Set sensor properties + eQMI_LOC_SET_SENSOR_PRP_IND = 88,// 088 Set sensor properties indication + eQMI_LOC_GET_SENSOR_PRP, // 089 Get sensor properties + eQMI_LOC_GET_SENSOR_PRP_IND = 89,// 089 Get sensor properties indication + eQMI_LOC_SET_SENSOR_PRF, // 090 Set sensor performance control + eQMI_LOC_SET_SENSOR_PRF_IND = 90,// 090 Set sensor performance control ind + eQMI_LOC_GET_SENSOR_PRF, // 091 Get sensor performance control + eQMI_LOC_GET_SENSOR_PRF_IND = 91,// 091 Get sensor performance control ind + eQMI_LOC_INJ_SUPL_CERT, // 092 Inject SUPL certificate + eQMI_LOC_INJ_SUPL_CERT_IND = 92, // 092 Inject SUPL certificate indication + eQMI_LOC_DEL_SUPL_CERT, // 093 Delete SUPL certificate + eQMI_LOC_DEL_SUPL_CERT_IND = 93, // 093 Delete SUPL certificate indication + eQMI_LOC_SET_ENGINE_CFG, // 094 Set position engine config + eQMI_LOC_SET_ENGINE_CFG_IND = 94,// 094 Set position engine config ind + eQMI_LOC_GET_ENGINE_CFG, // 095 Get position engine config + eQMI_LOC_GET_ENGINE_CFG_IND = 95,// 095 Get position engine config ind + eQMI_LOC_GEOFENCE_NOTIF_IND, // 096 Geofence notification indication + eQMI_LOC_GEOFENCE_ALERT_IND, // 097 Geofence alert indication + eQMI_LOC_GEOFENCE_BREACH_IND, // 098 Geofence breach indication + eQMI_LOC_ADD_GEOFENCE, // 099 Add circular geofence + eQMI_LOC_ADD_GEOFENCE_IND = 99, // 099 Add circular geofence indication + eQMI_LOC_DEL_GEOFENCE, // 100 Delete geofence + eQMI_LOC_DEL_GEOFENCE_IND = 100, // 100 Delete geofence indication + eQMI_LOC_QRY_GEOFENCE, // 101 Query geofence + eQMI_LOC_QRY_GEOFENCE_IND = 101, // 101 Query geofence indication + eQMI_LOC_EDIT_GEOFENCE, // 102 Edit geofence + eQMI_LOC_EDIT_GEOFENCE_IND = 102,// 102 Edit geofence indication + eQMI_LOC_GET_BEST_POS, // 103 Get best available position + eQMI_LOC_GET_BEST_POS_IND = 103, // 103 Get best available position ind + eQMI_LOC_INJ_MOTION, // 104 Inject motion data + eQMI_LOC_INJ_MOTION_IND = 104, // 104 Inject motion data indication + eQMI_LOC_GET_NI_GF_IDS, // 105 Get NI geofence ID list + eQMI_LOC_GET_NI_GF_IDS_IND = 105,// 105 Get NI geofence ID list indication + eQMI_LOC_INJ_GSM_CELL, // 106 Inject GSM cell info + eQMI_LOC_INJ_GSM_CELL_IND = 106, // 106 Inject GSM cell info indication + eQMI_LOC_INJ_NI_MSG, // 107 Inject network initiated message + eQMI_LOC_INJ_NI_MSG_IND = 107, // 107 Inject NI message indication + eQMI_LOC_WWAN_OOS, // 108 Notify WWAN is now OOS + eQMI_LOC_WWAN_OOS_IND = 108, // 108 Notify WWAN is now OOS indication + eQMI_PEDOMETER_CTRL_IND, // 109 Pedometer control indication + eQMI_MOTION_DATA_CTRL_IND, // 110 Motion data control indication + eQMI_LOC_INJ_PEDOMETER, // 111 Inject pedometer data + eQMI_LOC_INJ_PEDOMETER_IND = 111,// 111 Inject pedometer data indication + eQMI_LOC_INJ_WCDMA_CI, // 112 Inject WCDMA cell info + eQMI_LOC_INJ_WCDMA_CI_IND = 112, // 112 Inject WCDMA cell info indication + eQMI_LOC_INJ_TDSCDMA, // 113 Inject TD-SCDMA cell info + eQMI_LOC_INJ_TDSCDMA_IND = 113, // 113 Inject TD-SCDMA cell info indication + eQMI_LOC_INJ_SUBS_ID, // 114 Inject subscriber ID + eQMI_LOC_INJ_SUBS_ID_IND = 114 // 114 Inject subscriber ID indication +}; + +// Enum to describe QMI WDA Message types +enum eQMIMessageWDA:WORD +{ + eQMI_WDA_GET_MESSAGES = 30, // 30 Get supported messages + eQMI_WDA_GET_FIELDS, // 31 Get supported fields + eQMI_WDA_SET_DATA_FORMAT, // 32 + eQMI_WDA_GET_DATA_FORMAT, // 33 + eQMI_WDA_ENABLE_PKT_FILTER, // 34 + eQMI_WDA_DISABLE_PKT_FILTER, // 35 + eQMI_WDA_GET_PKT_FILTER_STATE, // 36 + eQMI_WDA_ADD_PKT_FILTER_RULE, // 37 + eQMI_WDA_DELETE_PKT_FILTER_RULE, // 38 + eQMI_WDA_GET_PKT_FILTER_RULE_HANDLES, // 39 + eQMI_WDA_GET_PKT_FILTER_RULE, // 40 + eQMI_WDA_SET_LOOPBACK_STATE, // 41 + eQMI_WDA_GET_LOOPBACK_STATE, // 42 +}; + +// Enum to describe QMI QCMAP Message types +enum eQMIMessageQCMAP:WORD +{ + eQMI_QCMAP_ENABLE = 32, // 32 + eQMI_QCMAP_DISABLE, // 33 + eQMI_QCMAP_BRING_UP_WWAN, // 34 + eQMI_QCMAP_BRING_UP_WWAN_IND = 34, // 34 + eQMI_QCMAP_TEAR_DOWN_WWAN, // 35 + eQMI_QCMAP_TEAR_DOWN_WWAN_IND = 35, // 35 + eQMI_QCMAP_GET_WWAN_STATUS, // 36 + eQMI_QCMAP_GET_IPSEC_VPN_PASSTHROUGH, // 37 + eQMI_QCMAP_SET_IPSEC_VPN_PASSTHROUGH, // 38 + eQMI_QCMAP_GET_PPTP_VPN_PASSTHROUGH, // 39 + eQMI_QCMAP_SET_PPTP_VPN_PASSTHROUGH, // 40 + eQMI_QCMAP_GET_L2TP_VPN_PASSTHROUGH, // 41 + eQMI_QCMAP_SET_L2TP_VPN_PASSTHROUGH, // 42 + eQMI_QCMAP_GET_DYNAMIC_NAT_ENTRY_TO, // 43 + eQMI_QCMAP_SET_DYNAMIC_NAT_ENTRY_TO, // 44 + eQMI_QCMAP_ADD_SNAT_ENTRY, // 45 + eQMI_QCMAP_DELETE_SNAT_ENTRY, // 46 + eQMI_QCMAP_GET_SNAT_ENTRIES, // 47 + eQMI_QCMAP_SET_DMZ, // 48 + eQMI_QCMAP_DELETE_DMZ, // 49 + eQMI_QCMAP_GET_DMZ, // 50 + eQMI_QCMAP_GET_WWAN_CONFIG, // 51 + eQMI_QCMAP_ENABLE_FIREWALL_SETTING, // 52 + eQMI_QCMAP_GET_FIREWALL_SETTING, // 53 + eQMI_QCMAP_DISABLE_FIREWALL_SETTING, // 54 + eQMI_QCMAP_ADD_FIREWALL_CONFIG, // 55 + eQMI_QCMAP_GET_FIREWALL_CONFIG, // 56 + eQMI_QCMAP_DELETE_FIREWALL_CONFIG, // 57 + eQMI_QCMAP_WWAN_STATUS_IND_REG, // 58 + eQMI_QCMAP_STATION_MODE_ENABLE, // 59 + eQMI_QCMAP_STATION_MODE_DISABLE, // 60 + eQMI_QCMAP_GET_STATION_MODE, // 61 + eQMI_QCMAP_WWAN_STATUS_IND, // 62 + eQMI_QCMAP_ADD_EXT_FIREWALL_CONFIG, // 63 + eQMI_QCMAP_GET_EXT_FIREWALL_CONFIG, // 64 + eQMI_QCMAP_GET_FIREWALL_HANDLES, // 65 + eQMI_QCMAP_CHANGE_NAT_TYPE, // 66 + eQMI_QCMAP_GET_NAT_TYPE // 67 +}; + +// Enum to describe QMI PDC Message types +enum eQMIMessagePDC:WORD +{ + eQMI_PDC_RESET = 0, // 00 Reset the PDC service + + eQMI_PDC_REG_INDICATIONS = 32, // 32 Register for indications + eQMI_PDC_CFG_CHANGE_IND, // 33 Config change indication + eQMI_PDC_GET_CFG, // 34 Get selected config + eQMI_PDC_GET_CFG_IND = 34, // 34 Get selected config indication + eQMI_PDC_SET_CFG, // 35 Set selected config + eQMI_PDC_SET_CFG_IND = 35, // 35 Set selected config indication + eQMI_PDC_LIST_CFGS, // 36 List configs + eQMI_PDC_LIST_CFGS_IND = 36, // 36 List configs indication + eQMI_PDC_DEL_CFG, // 37 Delete config + eQMI_PDC_DEL_CFG_IND = 37, // 37 Delete config indication + eQMI_PDC_LOAD_CFG, // 38 Load config + eQMI_PDC_LOAD_CFG_IND = 38, // 38 Load config indication + eQMI_PDC_ACTIVATE_CFG, // 39 Activate config + eQMI_PDC_ACTIVATE_CFG_IND = 39, // 39 Activate config indication + eQMI_PDC_GET_CFG_INFO, // 40 Get config info + eQMI_PDC_GET_CFG_INFO_IND = 40, // 40 Get config info indication + eQMI_PDC_GET_CFG_LIMITS, // 41 Get config limits + eQMI_PDC_GET_CFG_LIMITS_IND = 41, // 41 Get config limits indication + eQMI_PDC_GET_DEF_CFG_INFO, // 42 Get default config info + eQMI_PDC_GET_DEF_CFG_INFO_IND = 42, // 42 Get default config info indication + eQMI_PDC_DEACTIVATE_CFG, // 43 Deactivate active config + eQMI_PDC_DEACTIVATE_CFG_IND = 43, // 43 Deactivate active config ind +}; + +// Enum to describe QMI RFRPE Message types +enum eQMIMessageRFRPE:WORD +{ + eQMI_RFRPE_SET_RFM_SCENARIO = 32, // 32 Set RFM scenario + eQMI_RFRPE_GET_RFM_SCENARIO, // 33 Get RFM scenario + eQMI_RFRPE_GET_TABLE_REVISION, // 34 Get provisioned table revision +}; + +// Enum to describe QMI CAT Message types +enum eQMIMessageCAT:WORD +{ + eQMI_CAT_RESET, // 00 Reset CAT service state variables + eQMI_CAT_SET_EVENT, // 01 Set new message report conditions + eQMI_CAT_EVENT_IND = 1, // 01 New message report indication + + eQMI_CAT_GET_MESSAGES = 30, // 30 Get supported messages + eQMI_CAT_GET_FIELDS, // 31 Get supported fields + eQMI_CAT_GET_STATE, // 32 Get service state information + eQMI_CAT_SEND_TERMINAL, // 33 Send a terminal response + eQMI_CAT_SEND_ENVELOPE, // 34 Send an envelope command + eQMI_CAT_GET_EVENT, // 35 Get last message report + eQMI_CAT_SEND_DECODED_TERMINAL, // 36 Send a decoded terminal response + eQMI_CAT_SEND_DECODED_ENVELOPE, // 37 Send a decoded envelope command + eQMI_CAT_EVENT_CONFIRMATION, // 38 Event confirmation + eQMI_CAT_SCWS_OPEN_CHANNEL, // 39 Open a channel to a SCWS + eQMI_CAT_SCWS_OPEN_IND = 39, // 39 SCWS open channel indication + eQMI_CAT_SCWS_CLOSE_CHANNEL, // 40 Close a channel to a SCWS + eQMI_CAT_SCWS_CLOSE_IND = 40, // 40 SCWS close channel indication + eQMI_CAT_SCWS_SEND_DATA, // 41 Send data to a SCWS + eQMI_CAT_SCWS_SEND_IND = 41, // 41 SCWS send data indication + eQMI_CAT_SCWS_DATA_AVAILABLE, // 42 Indicate that data is available + eQMI_CAT_SCWS_CHANNEL_STATUS, // 43 Provide channel status + eQMI_CAT_GET_TERMINAL_PROFILE, // 44 Get current modem terminal profile + eQMI_CAT_SET_CONFIG, // 45 Set configuration + eQMI_CAT_GET_CONFIG // 46 Get configuration +}; + +// Enum to describe QMI RMS Message types +enum eQMIMessageRMS:WORD +{ + eQMI_RMS_RESET, // 00 Reset RMS service state variables + + eQMI_RMS_GET_SMS_WAKE = 32, // 32 Get SMS wake settings + eQMI_RMS_SET_SMS_WAKE // 33 Set SMS wake settings +}; + +// Enum to describe QMI OMA Message types +enum eQMIMessageOMA:WORD +{ + eQMI_OMA_RESET, // 00 Reset OMA service state variables + eQMI_OMA_SET_EVENT, // 01 Set OMA report conditions + eQMI_OMA_EVENT_IND = 1, // 01 OMA report indication + + eQMI_OMA_START_SESSION = 32, // 32 Start client inititated session + eQMI_OMA_CANCEL_SESSION, // 33 Cancel session + eQMI_OMA_GET_SESSION_INFO, // 34 Get session information + eQMI_OMA_SEND_SELECTION, // 35 Send selection for net inititated msg + eQMI_OMA_GET_FEATURES, // 36 Get feature settings + eQMI_OMA_SET_FEATURES // 37 Set feature settings +}; + +// Enum to describe QMI AUTH AKA Result +enum eQMIAUTHAKAResult:UINT8 +{ + eQMIAUTHAKAResult_Success = 0, + eQMIAUTHAKAResult_SyncFailure = 1, + eQMIAUTHAKAResult_Failure = 2, +}; + +// Enum to describe QMI AUTH AKA Version +enum eQMIAUTHAKAVersion:UINT8 +{ + eQMIAUTHAKAVersion_Version1 = 0, + eQMIAUTHAKAVersion_Version2 = 1, +}; + +// Enum to describe QMI AUTH EAP Result +enum eQMIAUTHEAPResult:UINT8 +{ + eQMIAUTHEAPResult_Success = 0, + eQMIAUTHEAPResult_Failure = 1, +}; + +// Enum to describe QMI AUTH SIM AKA Algorithm +enum eQMIAUTHSIMAKAAlgorithm:UINT32 +{ + eQMIAUTHSIMAKAAlgorithm_None = 0, + eQMIAUTHSIMAKAAlgorithm_SHA1 = 1, + eQMIAUTHSIMAKAAlgorithm_MILENAGE = 2, + eQMIAUTHSIMAKAAlgorithm_CAVE = 3, + eQMIAUTHSIMAKAAlgorithm_GSM = 4, + eQMIAUTHSIMAKAAlgorithm_USIMGSM = 5, +}; + +// Enum to describe QMI CAT Activate Targets +enum eQMICATActivateTargets:UINT8 +{ + eQMICATActivateTargets_UICCCLFInterface = 1, +}; + +// Enum to describe QMI CAT Address NPI +enum eQMICATAddressNPI:UINT8 +{ + eQMICATAddressNPI_Unknown = 0, + eQMICATAddressNPI_ISDNTelephony = 1, + eQMICATAddressNPI_DataNPI = 2, + eQMICATAddressNPI_TelexNPI = 3, + eQMICATAddressNPI_PrivateNPI = 4, + eQMICATAddressNPI_ExtensionIsReserved = 15, +}; + +// Enum to describe QMI CAT Address TON +enum eQMICATAddressTON:UINT8 +{ + eQMICATAddressTON_Unknown = 0, + eQMICATAddressTON_InternationalNumber = 1, + eQMICATAddressTON_NationalNumber = 2, + eQMICATAddressTON_NetworkSpecificNumber = 3, +}; + +// Enum to describe QMI CAT Address Type +enum eQMICATAddressType:UINT8 +{ + eQMICATAddressType_NoAddressGiven = 1, + eQMICATAddressType_Dynamic = 2, + eQMICATAddressType_IPv4 = 3, + eQMICATAddressType_IPv6 = 4, +}; + +// Enum to describe QMI CAT Alpha ID Command Type +enum eQMICATAlphaIDCommandType:UINT8 +{ + eQMICATAlphaIDCommandType_SendSMSProactiveCommand = 1, +}; + +// Enum to describe QMI CAT Bearer +enum eQMICATBearer:UINT8 +{ + eQMICATBearer_SMS = 0, + eQMICATBearer_CSD = 1, + eQMICATBearer_USSD = 2, + eQMICATBearer_GPRS = 3, + eQMICATBearer_Default = 4, +}; + +// Enum to describe QMI CAT Bearer Capability Repeat Indicator +enum eQMICATBearerCapabilityRepeatIndicator:UINT8 +{ + eQMICATBearerCapabilityRepeatIndicator_AlternateMode = 0, + eQMICATBearerCapabilityRepeatIndicator_SequentialMode = 1, +}; + +// Enum to describe QMI CAT Bearer Independent Protocol Status +enum eQMICATBearerIndependentProtocolStatus:UINT32 +{ + eQMICATBearerIndependentProtocolStatus_InProgress = 0, + eQMICATBearerIndependentProtocolStatus_End = 1, +}; + +// Enum to describe QMI CAT Browser Termination Causes +enum eQMICATBrowserTerminationCauses:UINT32 +{ + eQMICATBrowserTerminationCauses_UserTerminated = 0, + eQMICATBrowserTerminationCauses_ErrorTerminated = 1, +}; + +// Enum to describe QMI CAT CSD Bearer Name +enum eQMICATCSDBearerName:UINT8 +{ + eQMICATCSDBearerName_DataCircuitAsyncUDIOr31kHzModem = 0, + eQMICATCSDBearerName_DataCircuitSyncUDIOr31kHzModem = 1, + eQMICATCSDBearerName_PADAccessAsyncUDI = 2, + eQMICATCSDBearerName_PacketAccessSyncUDI = 3, + eQMICATCSDBearerName_DataCircuitAsyncRDI = 4, + eQMICATCSDBearerName_DataCircuitSyncRDI = 5, + eQMICATCSDBearerName_PADAccessAsyncRDI = 6, + eQMICATCSDBearerName_PacketAccessSyncRDI = 7, +}; + +// Enum to describe QMI CAT Call Control Result +enum eQMICATCallControlResult:UINT8 +{ + eQMICATCallControlResult_AllowedWithNoModification = 0, + eQMICATCallControlResult_NotAllowed = 1, + eQMICATCallControlResult_AllowedWithModification = 2, +}; + +// Enum to describe QMI CAT Call Setup Requirement +enum eQMICATCallSetupRequirement:UINT8 +{ + eQMICATCallSetupRequirement_NoOtherCalls = 0, + eQMICATCallSetupRequirement_HoldActiveCalls = 1, + eQMICATCallSetupRequirement_DisconnectActiveCalls = 2, +}; + +// Enum to describe QMI CAT Call Types +enum eQMICATCallTypes:UINT32 +{ + eQMICATCallTypes_Voice = 0, + eQMICATCallTypes_SS = 1, + eQMICATCallTypes_USSD = 2, + eQMICATCallTypes_SMS = 3, +}; + +// Enum to describe QMI CAT Channel State +enum eQMICATChannelState:UINT8 +{ + eQMICATChannelState_ClosedState = 0, + eQMICATChannelState_ListenState = 1, + eQMICATChannelState_EstablishedState = 2, +}; + +// Enum to describe QMI CAT Command Format +enum eQMICATCommandFormat:UINT8 +{ + eQMICATCommandFormat_Raw = 1, + eQMICATCommandFormat_Decoded = 2, +}; + +// Enum to describe QMI CAT Command ID +enum eQMICATCommandID:UINT8 +{ + eQMICATCommandID_DisplayText = 1, + eQMICATCommandID_GetInkey = 2, + eQMICATCommandID_GetInput = 3, + eQMICATCommandID_LaunchBrowser = 4, + eQMICATCommandID_PlayTone = 5, + eQMICATCommandID_SelectItem = 6, + eQMICATCommandID_SendSMS = 7, + eQMICATCommandID_SendSS = 8, + eQMICATCommandID_SendUSSD = 9, + eQMICATCommandID_SetupCallUserConfiguration = 10, + eQMICATCommandID_SetupCallAlphaDisplay = 11, + eQMICATCommandID_SetupMenu = 12, + eQMICATCommandID_SetupIdleText = 13, + eQMICATCommandID_ProvideLocalInformationLanguage = 14, + eQMICATCommandID_SendDTMF = 15, + eQMICATCommandID_LanguageNotification = 16, + eQMICATCommandID_SetupEventUserActivity = 17, + eQMICATCommandID_SetupEventIdleScreenNotify = 18, + eQMICATCommandID_SetupEventLanguageSelectionNotify = 19, + eQMICATCommandID_OpenChannel = 20, + eQMICATCommandID_CloseChannel = 21, + eQMICATCommandID_ReceiveData = 22, + eQMICATCommandID_SendData = 23, + eQMICATCommandID_Activate = 24, + eQMICATCommandID_SetupEventHCIConnectivity = 25, + eQMICATCommandID_SetupEventBrowserTermination = 32, +}; + +// Enum to describe QMI CAT Config Modes +enum eQMICATConfigModes:UINT8 +{ + eQMICATConfigModes_DisabledMode = 0, + eQMICATConfigModes_GobiMode = 1, + eQMICATConfigModes_AndroidMode = 2, + eQMICATConfigModes_DecodedMode = 3, + eQMICATConfigModes_DecodedPullOnlyMode = 4, + eQMICATConfigModes_CustomRawMode = 5, + eQMICATConfigModes_CustomDecodedMode = 6, +}; + +// Enum to describe QMI CAT Connection Element +enum eQMICATConnectionElement:UINT8 +{ + eQMICATConnectionElement_Transparent = 0, + eQMICATConnectionElement_Nontransparent = 1, + eQMICATConnectionElement_BothTransparentPreferred = 2, + eQMICATConnectionElement_BothNontransparentPreferred = 3, +}; + +// Enum to describe QMI CAT Data Coding Scheme +enum eQMICATDataCodingScheme:UINT8 +{ + eQMICATDataCodingScheme_7BitGSM = 0, + eQMICATDataCodingScheme_8BitGSM = 1, + eQMICATDataCodingScheme_UCS2 = 2, +}; + +// Enum to describe QMI CAT Decoded Envelope Command +enum eQMICATDecodedEnvelopeCommand:UINT16 +{ + eQMICATDecodedEnvelopeCommand_MenuSelection = 1, + eQMICATDecodedEnvelopeCommand_EventDownloadLanguageSelection = 2, + eQMICATDecodedEnvelopeCommand_EventDownloadUserActivity = 3, + eQMICATDecodedEnvelopeCommand_EventDownloadIdleScreenAvailable = 4, + eQMICATDecodedEnvelopeCommand_SendCallControl = 5, + eQMICATDecodedEnvelopeCommand_EventDownloadHCIConnectivity = 6, + eQMICATDecodedEnvelopeCommand_EventBrowserTermination = 7, + eQMICATDecodedEnvelopeCommand_SMSPPDataDownload = 8, + eQMICATDecodedEnvelopeCommand_EventDownloadMTCall = 9, + eQMICATDecodedEnvelopeCommand_EventDownloadMTCallConnected = 10, + eQMICATDecodedEnvelopeCommand_EventDownloadMOCallConnected = 11, + eQMICATDecodedEnvelopeCommand_EventDownloadCallDisconnectedNearEnd = 12, + eQMICATDecodedEnvelopeCommand_EventDownloadCallDisconnectedFarEnd = 13, +}; + +// Enum to describe QMI CAT Deliver Error SDU +enum eQMICATDeliverErrorSDU:UINT8 +{ + eQMICATDeliverErrorSDU_No = 0, + eQMICATDeliverErrorSDU_Yes = 1, + eQMICATDeliverErrorSDU_NoDetect = 2, + eQMICATDeliverErrorSDU_SubscribedValue = 3, +}; + +// Enum to describe QMI CAT Delivery Order +enum eQMICATDeliveryOrder:UINT8 +{ + eQMICATDeliveryOrder_No = 0, + eQMICATDeliveryOrder_Yes = 1, + eQMICATDeliveryOrder_SubscribedValue = 2, +}; + +// Enum to describe QMI CAT Display Icon Only +enum eQMICATDisplayIconOnly:UINT8 +{ + eQMICATDisplayIconOnly_DoNotDisplayTheIcon = 0, + eQMICATDisplayIconOnly_DisplayOnlyTheIcon = 1, +}; + +// Enum to describe QMI CAT Envelope Command Type +enum eQMICATEnvelopeCommandType:UINT16 +{ + eQMICATEnvelopeCommandType_MenuSelection = 1, + eQMICATEnvelopeCommandType_EventDownloadUserActivity = 2, + eQMICATEnvelopeCommandType_EventDownloadIdleScreenAvailable = 3, + eQMICATEnvelopeCommandType_EventDownloadLanguageSelection = 4, + eQMICATEnvelopeCommandType_UnknownType = 5, + eQMICATEnvelopeCommandType_EventDownloadBrowserTermination = 6, + eQMICATEnvelopeCommandType_SendCallControl = 7, + eQMICATEnvelopeCommandType_EventDownloadHCIConnectivity = 8, + eQMICATEnvelopeCommandType_SMSPPDataDownload = 9, + eQMICATEnvelopeCommandType_EventDownloadMTCall = 10, + eQMICATEnvelopeCommandType_EventDownloadCallConnected = 11, + eQMICATEnvelopeCommandType_EventDownloadCallDisconnected = 12, +}; + +// Enum to describe QMI CAT Help Available +enum eQMICATHelpAvailable:UINT8 +{ + eQMICATHelpAvailable_NoHelpIsAvailable = 0, + eQMICATHelpAvailable_HelpIsAvailable = 1, +}; + +// Enum to describe QMI CAT Help Request +enum eQMICATHelpRequest:UINT8 +{ + eQMICATHelpRequest_NoHelpIsRequested = 0, + eQMICATHelpRequest_HelpIsRequested = 1, +}; + +// Enum to describe QMI CAT High Priority +enum eQMICATHighPriority:UINT8 +{ + eQMICATHighPriority_DoNotClearTheScreen = 0, + eQMICATHighPriority_ClearAnythingThatIsOnTheScreen = 1, +}; + +// Enum to describe QMI CAT Icon Is Displayed +enum eQMICATIconIsDisplayed:UINT8 +{ + eQMICATIconIsDisplayed_No = 0, + eQMICATIconIsDisplayed_Yes = 1, +}; + +// Enum to describe QMI CAT Icon Qualifier +enum eQMICATIconQualifier:UINT8 +{ + eQMICATIconQualifier_IconIsSelfExplanatory = 0, + eQMICATIconQualifier_IconIsNotSelfExplanatory = 1, +}; + +// Enum to describe QMI CAT Image Coding Scheme +enum eQMICATImageCodingScheme:UINT8 +{ + eQMICATImageCodingScheme_Unknown = 0, + eQMICATImageCodingScheme_Basic = 1, + eQMICATImageCodingScheme_Color = 2, +}; + +// Enum to describe QMI CAT Immediate Response +enum eQMICATImmediateResponse:UINT8 +{ + eQMICATImmediateResponse_No = 0, + eQMICATImmediateResponse_Yes = 1, +}; + +// Enum to describe QMI CAT Is CDMA SMS +enum eQMICATIsCDMASMS:UINT8 +{ + eQMICATIsCDMASMS_NotCDMASMS = 0, + eQMICATIsCDMASMS_CDMASMS = 1, +}; + +// Enum to describe QMI CAT Launch Mode +enum eQMICATLaunchMode:UINT8 +{ + eQMICATLaunchMode_LaunchIfNotAlreadyLaunched = 0, + eQMICATLaunchMode_UseTheExistingBrowser = 1, + eQMICATLaunchMode_CloseTheExistingBroswer = 2, +}; + +// Enum to describe QMI CAT Next Action +enum eQMICATNextAction:UINT8 +{ + eQMICATNextAction_SetupCall = 0, + eQMICATNextAction_SendSS = 1, + eQMICATNextAction_SendUSSD = 2, + eQMICATNextAction_SendShortMessage = 3, + eQMICATNextAction_LaunchBrowser = 4, + eQMICATNextAction_PlayTone = 5, + eQMICATNextAction_DisplayText = 6, + eQMICATNextAction_GetInkey = 7, + eQMICATNextAction_GetInput = 8, + eQMICATNextAction_SelectItem = 9, + eQMICATNextAction_SetupMenu = 10, + eQMICATNextAction_SetupIdleModeText = 11, + eQMICATNextAction_EndOfTheProactiveSession = 12, + eQMICATNextAction_ProvideLocalInformation = 13, +}; + +// Enum to describe QMI CAT Notification Required +enum eQMICATNotificationRequired:UINT8 +{ + eQMICATNotificationRequired_NotificationIsNotRequired = 0, + eQMICATNotificationRequired_NotificationIsRequired = 1, +}; + +// Enum to describe QMI CAT On Demand Link Establish +enum eQMICATOnDemandLinkEstablish:UINT8 +{ + eQMICATOnDemandLinkEstablish_LinkIsNotRequired = 0, + eQMICATOnDemandLinkEstablish_LinkIsRequired = 1, +}; + +// Enum to describe QMI CAT PDP Type +enum eQMICATPDPType:UINT8 +{ + eQMICATPDPType_IP = 2, +}; + +// Enum to describe QMI CAT Packet Data Protocol +enum eQMICATPacketDataProtocol:UINT8 +{ + eQMICATPacketDataProtocol_IP = 2, +}; + +// Enum to describe QMI CAT Packing Required +enum eQMICATPackingRequired:UINT8 +{ + eQMICATPackingRequired_PackingIsNotRequired = 0, + eQMICATPackingRequired_PackingIsRequired = 1, +}; + +// Enum to describe QMI CAT Presentation +enum eQMICATPresentation:UINT8 +{ + eQMICATPresentation_NotSpecified = 0, + eQMICATPresentation_DataValuePresentation = 1, + eQMICATPresentation_NavigationPresentation = 2, +}; + +// Enum to describe QMI CAT Proactive Session End Type +enum eQMICATProactiveSessionEndType:UINT8 +{ + eQMICATProactiveSessionEndType_EndProactiveSessionCommandReceivedFromTheCard = 1, + eQMICATProactiveSessionEndType_EndProactiveSessionInternalToME = 2, +}; + +// Enum to describe QMI CAT Radio Access Technologies +enum eQMICATRadioAccessTechnologies:UINT32 +{ + eQMICATRadioAccessTechnologies_Unknown = 0, + eQMICATRadioAccessTechnologies_GSM = 1, + eQMICATRadioAccessTechnologies_UTRAN = 2, + eQMICATRadioAccessTechnologies_CDMA = 3, + eQMICATRadioAccessTechnologies_LTE = 4, +}; + +// Enum to describe QMI CAT Redial Necessary +enum eQMICATRedialNecessary:UINT8 +{ + eQMICATRedialNecessary_RedialIsNotNecessary = 0, + eQMICATRedialNecessary_RedialIsNecessary = 1, +}; + +// Enum to describe QMI CAT Refresh Stage +enum eQMICATRefreshStage:UINT16 +{ + eQMICATRefreshStage_RefreshStart = 1, + eQMICATRefreshStage_RefreshSuccess = 2, + eQMICATRefreshStage_RefreshFailed = 3, +}; + +// Enum to describe QMI CAT Response Command +enum eQMICATResponseCommand:UINT8 +{ + eQMICATResponseCommand_DisplayText = 1, + eQMICATResponseCommand_GetInkey = 2, + eQMICATResponseCommand_GetInput = 3, + eQMICATResponseCommand_LaunchBrowser = 4, + eQMICATResponseCommand_PlayTone = 5, + eQMICATResponseCommand_SelectItemRequest = 6, + eQMICATResponseCommand_SetupMenu = 7, + eQMICATResponseCommand_SetupIdleText = 8, + eQMICATResponseCommand_ProvideLocalInformationLanguage = 9, + eQMICATResponseCommand_SetupEventUserActivity = 10, + eQMICATResponseCommand_SetupEventIdleScreenActivity = 11, + eQMICATResponseCommand_SetupEventLanguageSelectNotify = 12, + eQMICATResponseCommand_LanguageNotification = 13, + eQMICATResponseCommand_Activate = 14, + eQMICATResponseCommand_SetupEventHCIConnectivity = 15, + eQMICATResponseCommand_SetupEventBrowserTermination = 16, + eQMICATResponseCommand_SendSMS = 17, + eQMICATResponseCommand_SetupCall = 18, + eQMICATResponseCommand_SendDTMF = 19, + eQMICATResponseCommand_SendSS = 20, + eQMICATResponseCommand_SendUSSD = 21, +}; + +// Enum to describe QMI CAT Response Format +enum eQMICATResponseFormat:UINT8 +{ + eQMICATResponseFormat_SMSDefaultAlphabet = 0, + eQMICATResponseFormat_YesOrNo = 1, + eQMICATResponseFormat_NumericalOnly = 2, + eQMICATResponseFormat_UCS2 = 3, + eQMICATResponseFormat_ImmediateDigitResponse = 4, + eQMICATResponseFormat_YesOrNoOrImmediateDigitalResponse = 5, +}; + +// Enum to describe QMI CAT Response Packing Format +enum eQMICATResponsePackingFormat:UINT8 +{ + eQMICATResponsePackingFormat_UnpacketFormat = 0, + eQMICATResponsePackingFormat_PacketFormat = 1, +}; + +// Enum to describe QMI CAT Response Types +enum eQMICATResponseTypes:UINT32 +{ + eQMICATResponseTypes_TerminalResponse = 0, + eQMICATResponseTypes_EventConfirmation = 1, +}; + +// Enum to describe QMI CAT Send Data Immediately +enum eQMICATSendDataImmediately:UINT8 +{ + eQMICATSendDataImmediately_NoStoreInTXBuffer = 0, + eQMICATSendDataImmediately_Yes = 1, +}; + +// Enum to describe QMI CAT Send Data Result +enum eQMICATSendDataResult:UINT8 +{ + eQMICATSendDataResult_Failed = 0, + eQMICATSendDataResult_Success = 1, +}; + +// Enum to describe QMI CAT Show User Input +enum eQMICATShowUserInput:UINT8 +{ + eQMICATShowUserInput_DeviceCanShowAllCharacters = 0, + eQMICATShowUserInput_DeviceCanShowUserInput = 1, +}; + +// Enum to describe QMI CAT Slot +enum eQMICATSlot:UINT8 +{ + eQMICATSlot_Slot1 = 1, + eQMICATSlot_Slot2 = 2, + eQMICATSlot_Slot3 = 3, + eQMICATSlot_Slot4 = 4, + eQMICATSlot_Slot5 = 5, +}; + +// Enum to describe QMI CAT Softkey Selection +enum eQMICATSoftkeySelection:UINT8 +{ + eQMICATSoftkeySelection_SoftkeyIsNotSelected = 0, + eQMICATSoftkeySelection_SoftkeyIsSelected = 1, +}; + +// Enum to describe QMI CAT Specific Language Notfication +enum eQMICATSpecificLanguageNotfication:UINT8 +{ + eQMICATSpecificLanguageNotfication_No = 0, + eQMICATSpecificLanguageNotfication_Yes = 1, +}; + +// Enum to describe QMI CAT Time Units +enum eQMICATTimeUnits:UINT8 +{ + eQMICATTimeUnits_Minutes = 0, + eQMICATTimeUnits_Seconds = 1, + eQMICATTimeUnits_TenthsOfSeconds = 2, + eQMICATTimeUnits_DurationIsNotPresent = 255, +}; + +// Enum to describe QMI CAT Tone +enum eQMICATTone:UINT8 +{ + eQMICATTone_DialTone = 1, + eQMICATTone_CalledSubscriberBusy = 2, + eQMICATTone_Congestion = 3, + eQMICATTone_RadioPathAck = 4, + eQMICATTone_RadioPathNotAvailableCallDrop = 5, + eQMICATTone_ErrorTone = 6, + eQMICATTone_CallWaitingTone = 7, + eQMICATTone_RingingTone = 8, + eQMICATTone_GeneralBeep = 9, + eQMICATTone_PositiveAckTone = 10, + eQMICATTone_NegativeAckTone = 11, + eQMICATTone_RingingToneSelectedByUser = 12, + eQMICATTone_SMSAlertToneSelectedByUser = 13, + eQMICATTone_NotInUse = 255, +}; + +// Enum to describe QMI CAT Traffic Class +enum eQMICATTrafficClass:UINT8 +{ + eQMICATTrafficClass_Conversational = 0, + eQMICATTrafficClass_Streaming = 1, + eQMICATTrafficClass_Interactive = 2, + eQMICATTrafficClass_Background = 3, + eQMICATTrafficClass_SubscribedValue = 4, +}; + +// Enum to describe QMI CAT Transport Protocol +enum eQMICATTransportProtocol:UINT8 +{ + eQMICATTransportProtocol_NotPresent = 0, + eQMICATTransportProtocol_UDP = 1, + eQMICATTransportProtocol_TCP = 2, +}; + +// Enum to describe QMI CAT USSD Data Coding Scheme +enum eQMICATUSSDDataCodingScheme:UINT8 +{ + eQMICATUSSDDataCodingScheme_7BitGSM = 0, + eQMICATUSSDDataCodingScheme_8BitGSM = 1, + eQMICATUSSDDataCodingScheme_8BitUCS2 = 2, + eQMICATUSSDDataCodingScheme_7BitUCS2 = 3, +}; + +// Enum to describe QMI CAT User Confirmed +enum eQMICATUserConfirmed:UINT8 +{ + eQMICATUserConfirmed_No = 0, + eQMICATUserConfirmed_Yes = 1, +}; + +// Enum to describe QMI CAT User Control +enum eQMICATUserControl:UINT8 +{ + eQMICATUserControl_DoNotAllowUserToClearTheScreen = 0, + eQMICATUserControl_AllowUserToClearTheScreen = 1, +}; + +// Enum to describe QMI CTL Service Types +enum eQMICTLServiceTypes:UINT8 +{ + eQMICTLServiceTypes_Control = 0, + eQMICTLServiceTypes_WDS = 1, + eQMICTLServiceTypes_DMS = 2, + eQMICTLServiceTypes_NAS = 3, + eQMICTLServiceTypes_QOS = 4, + eQMICTLServiceTypes_WMS = 5, + eQMICTLServiceTypes_PDS = 6, + eQMICTLServiceTypes_AUTH = 7, + eQMICTLServiceTypes_AT = 8, + eQMICTLServiceTypes_Voice = 9, + eQMICTLServiceTypes_CAT2 = 10, + eQMICTLServiceTypes_UIM = 11, + eQMICTLServiceTypes_PBM = 12, + eQMICTLServiceTypes_QCHAT = 13, + eQMICTLServiceTypes_RMTFS = 14, + eQMICTLServiceTypes_TEST = 15, + eQMICTLServiceTypes_LOC = 16, + eQMICTLServiceTypes_SAR = 17, + eQMICTLServiceTypes_IMSS = 18, + eQMICTLServiceTypes_ADC = 19, + eQMICTLServiceTypes_CSD = 20, + eQMICTLServiceTypes_MFS = 21, + eQMICTLServiceTypes_TIME = 22, + eQMICTLServiceTypes_TS = 23, + eQMICTLServiceTypes_TMD = 24, + eQMICTLServiceTypes_SAP = 25, + eQMICTLServiceTypes_WDA = 26, + eQMICTLServiceTypes_TSYNC = 27, + eQMICTLServiceTypes_RFSA = 28, + eQMICTLServiceTypes_CSVT = 29, + eQMICTLServiceTypes_QCMAP = 30, + eQMICTLServiceTypes_IMSP = 31, + eQMICTLServiceTypes_IMSVT = 32, + eQMICTLServiceTypes_IMSA = 33, + eQMICTLServiceTypes_COEX = 34, + eQMICTLServiceTypes_PDC = 36, + eQMICTLServiceTypes_STX = 38, + eQMICTLServiceTypes_BIT = 39, + eQMICTLServiceTypes_IMSRTP = 40, + eQMICTLServiceTypes_RFRPE = 41, + eQMICTLServiceTypes_DSD = 42, + eQMICTLServiceTypes_SSCTL = 43, + eQMICTLServiceTypes_CAT = 224, + eQMICTLServiceTypes_RMS = 225, + eQMICTLServiceTypes_OMA = 226, +}; + +// Enum to describe QMI Call End Reasons +enum eQMICallEndReasons:UINT16 +{ + eQMICallEndReasons_Unknown = 0, + eQMICallEndReasons_Unspecified = 1, + eQMICallEndReasons_ClientEnd = 2, + eQMICallEndReasons_NoService = 3, + eQMICallEndReasons_Fade = 4, + eQMICallEndReasons_ReleaseNormal = 5, + eQMICallEndReasons_AccInProgress = 6, + eQMICallEndReasons_AccFailed = 7, + eQMICallEndReasons_RedirectOrHandoff = 8, + eQMICallEndReasons_CloseInProgress = 9, + eQMICallEndReasons_AuthenticationFailed = 10, + eQMICallEndReasons_InternalError = 11, + eQMICallEndReasons_CDMALock = 500, + eQMICallEndReasons_Intercept = 501, + eQMICallEndReasons_Reorder = 502, + eQMICallEndReasons_ReleaseServiceOptionRejected = 503, + eQMICallEndReasons_IncomingCall = 504, + eQMICallEndReasons_AlertStop = 505, + eQMICallEndReasons_Activation = 506, + eQMICallEndReasons_MaxAccessProbe = 507, + eQMICallEndReasons_CCSNotSupportedByBS = 508, + eQMICallEndReasons_NoResponseFromBS = 509, + eQMICallEndReasons_RejectedByBS = 510, + eQMICallEndReasons_Incompatible = 511, + eQMICallEndReasons_AlreadyInTC = 512, + eQMICallEndReasons_UserCallOrigDuringGPS = 513, + eQMICallEndReasons_UserCallOrigDuringSMS = 514, + eQMICallEndReasons_NoCDMAService = 515, + eQMICallEndReasons_ConfFailed = 1000, + eQMICallEndReasons_IncomingRejected = 1001, + eQMICallEndReasons_NoGWService = 1002, + eQMICallEndReasons_NetworkEnd = 1003, + eQMICallEndReasons_LLCOrSNDCPFailure = 1004, + eQMICallEndReasons_InsufficientResources = 1005, + eQMICallEndReasons_ServiceOptionOutOfOrder = 1006, + eQMICallEndReasons_NSAPIAlreadyUsed = 1007, + eQMICallEndReasons_RegularPDPContextDeactivation = 1008, + eQMICallEndReasons_NetworkFailure = 1009, + eQMICallEndReasons_ReactivationRequested = 1010, + eQMICallEndReasons_ProtocolError = 1011, + eQMICallEndReasons_OperatorDeterminedBarring = 1012, + eQMICallEndReasons_UnknownOrMissingAPN = 1013, + eQMICallEndReasons_UnknownPDPAddressOrPDPType = 1014, + eQMICallEndReasons_ActivationRejectedByGGSN = 1015, + eQMICallEndReasons_ActivationRejectedUnspecified = 1016, + eQMICallEndReasons_ServiceOptionNotSupported = 1017, + eQMICallEndReasons_RequestedServiceOptionNotSubscribed = 1018, + eQMICallEndReasons_QoSNotAccepted = 1019, + eQMICallEndReasons_SemanticErrorInTheTFTOperation = 1020, + eQMICallEndReasons_SyntacticalErrorInTheTFTOperation = 1021, + eQMICallEndReasons_UnknownPDPContext = 1022, + eQMICallEndReasons_SemanticErrorsInPacketFilters = 1023, + eQMICallEndReasons_SyntacticalErrorsInPacketFilters = 1024, + eQMICallEndReasons_PDPContextWithoutTFTAlreadyActivated = 1025, + eQMICallEndReasons_InvalidTransactionIdentifierValue = 1026, + eQMICallEndReasons_SemanticallyIncorrectMessage = 1027, + eQMICallEndReasons_InvalidMandatoryInformation = 1028, + eQMICallEndReasons_MessageTypeNonExistent = 1029, + eQMICallEndReasons_MessageNotCompatibleWithState = 1030, + eQMICallEndReasons_InformationElementNonexistent = 1031, + eQMICallEndReasons_ConditionalInformationElementError = 1032, + eQMICallEndReasons_MessageNotCompatibleWithProtocolState = 1033, + eQMICallEndReasons_APNRestrictionValueIncompatibleWithActivePDPContext = 1034, + eQMICallEndReasons_NoGPRSContextPresent = 1035, + eQMICallEndReasons_RequestedFeatureNotSupported = 1036, + eQMICallEndReasons_CDGenOrBusy = 1500, + eQMICallEndReasons_CDBillOrAuth = 1501, + eQMICallEndReasons_ChangeHDR = 1502, + eQMICallEndReasons_ExitHDR = 1503, + eQMICallEndReasons_HDRNoSession = 1504, + eQMICallEndReasons_HDROrigDuringGPSFix = 1505, + eQMICallEndReasons_HDRCSTimeout = 1506, + eQMICallEndReasons_HDRReleasedByCM = 1507, +}; + +// Enum to describe QMI Call History Types +enum eQMICallHistoryTypes:UINT8 +{ + eQMICallHistoryTypes_Full = 0, + eQMICallHistoryTypes_IDsOnly = 1, +}; + +// Enum to describe QMI Call Types +enum eQMICallTypes:UINT8 +{ + eQMICallTypes_NDIS = 0, + eQMICallTypes_DUN = 1, +}; + +// Enum to describe QMI Connection Status +enum eQMIConnectionStatus:UINT8 +{ + eQMIConnectionStatus_Disconnected = 1, + eQMIConnectionStatus_Connected = 2, + eQMIConnectionStatus_Suspended = 3, + eQMIConnectionStatus_Authenticating = 4, +}; + +// Enum to describe QMI DMS Activation States +enum eQMIDMSActivationStates:UINT16 +{ + eQMIDMSActivationStates_ServiceNotActivated = 0, + eQMIDMSActivationStates_SerivceActivated = 1, + eQMIDMSActivationStates_ActivationConnecting = 2, + eQMIDMSActivationStates_ActivationInProgress = 3, + eQMIDMSActivationStates_OTASPSecurityAuthenticated = 4, + eQMIDMSActivationStates_OTASPNAMDownloaded = 5, + eQMIDMSActivationStates_OTASPMDNDownloaded = 6, + eQMIDMSActivationStates_OTASPIMSIDownloaded = 7, + eQMIDMSActivationStates_OTASPPRLDownloaded = 8, + eQMIDMSActivationStates_OTASPSPCDownloaded = 9, + eQMIDMSActivationStates_OTASPSettingsCommitted = 10, +}; + +// Enum to describe QMI DMS Data Service Capabilities 1 +enum eQMIDMSDataServiceCapabilities1:UINT8 +{ + eQMIDMSDataServiceCapabilities1_NoDataServicesSupported = 0, + eQMIDMSDataServiceCapabilities1_OnlyCircuitSwitched = 1, + eQMIDMSDataServiceCapabilities1_OnlyPacketSwitched = 2, + eQMIDMSDataServiceCapabilities1_SimultaneousCircuitPacketSwitched = 3, + eQMIDMSDataServiceCapabilities1_NonsimultaneousCircuitPacketSwitched = 4, +}; + +// Enum to describe QMI DMS Lock States +enum eQMIDMSLockStates:UINT8 +{ + eQMIDMSLockStates_LockDisabled = 0, + eQMIDMSLockStates_LockEnabled = 1, +}; + +// Enum to describe QMI DMS Operating Modes +enum eQMIDMSOperatingModes:UINT8 +{ + eQMIDMSOperatingModes_Online = 0, + eQMIDMSOperatingModes_LowPower = 1, + eQMIDMSOperatingModes_FactoryTestMode = 2, + eQMIDMSOperatingModes_Offline = 3, + eQMIDMSOperatingModes_Reset = 4, + eQMIDMSOperatingModes_Shutdown = 5, + eQMIDMSOperatingModes_PersistentLowPower = 6, + eQMIDMSOperatingModes_ModeOnlyLowPower = 7, + eQMIDMSOperatingModes_GWNetworkTest = 8, +}; + +// Enum to describe QMI DMS PIN Status +enum eQMIDMSPINStatus:UINT8 +{ + eQMIDMSPINStatus_PINUninitialized = 0, + eQMIDMSPINStatus_PINEnabledUnverified = 1, + eQMIDMSPINStatus_PINEnabledVerified = 2, + eQMIDMSPINStatus_PINDisabled = 3, + eQMIDMSPINStatus_PINBlocked = 4, + eQMIDMSPINStatus_PINBlockedPermanently = 5, + eQMIDMSPINStatus_PINUnblocked = 6, + eQMIDMSPINStatus_PINChanged = 7, +}; + +// Enum to describe QMI DMS Power Sources +enum eQMIDMSPowerSources:UINT8 +{ + eQMIDMSPowerSources_Battery = 0, + eQMIDMSPowerSources_External = 1, +}; + +// Enum to describe QMI DMS Radio Interfaces +enum eQMIDMSRadioInterfaces:UINT8 +{ + eQMIDMSRadioInterfaces_CDMA20001x = 1, + eQMIDMSRadioInterfaces_CDMA2000HRPD = 2, + eQMIDMSRadioInterfaces_GSM = 4, + eQMIDMSRadioInterfaces_UMTS = 5, + eQMIDMSRadioInterfaces_LTE = 8, + eQMIDMSRadioInterfaces_TDS = 9, +}; + +// Enum to describe QMI DMS Service Capabilities +enum eQMIDMSServiceCapabilities:UINT32 +{ + eQMIDMSServiceCapabilities_DataOnly = 1, + eQMIDMSServiceCapabilities_VoiceOnly = 2, + eQMIDMSServiceCapabilities_SimultaneousVoiceAndData = 3, + eQMIDMSServiceCapabilities_NonsimultaneousVoiceAndData = 4, +}; + +// Enum to describe QMI DMS Subscriptions +enum eQMIDMSSubscriptions:UINT32 +{ + eQMIDMSSubscriptions_Primary = 1, + eQMIDMSSubscriptions_Secondary = 2, +}; + +// Enum to describe QMI DMS Time References +enum eQMIDMSTimeReferences:UINT32 +{ + eQMIDMSTimeReferences_User = 0, +}; + +// Enum to describe QMI DMS Timestamp Sources +enum eQMIDMSTimestampSources:UINT16 +{ + eQMIDMSTimestampSources_Device = 0, + eQMIDMSTimestampSources_CDMANetwork = 1, + eQMIDMSTimestampSources_CDMA1xEVDONetwork = 2, + eQMIDMSTimestampSources_GSMNetwork = 3, + eQMIDMSTimestampSources_WCDMANetwork = 4, + eQMIDMSTimestampSources_GPSNetwork = 5, + eQMIDMSTimestampSources_MFLONetwork = 6, +}; + +// Enum to describe QMI DMS UIM Facility +enum eQMIDMSUIMFacility:UINT8 +{ + eQMIDMSUIMFacility_PNNetworkPersonalization = 0, + eQMIDMSUIMFacility_PUNetworkSubsetPersonalization = 1, + eQMIDMSUIMFacility_PPServiceProviderPersonalization = 2, + eQMIDMSUIMFacility_PCCorporatePersonalization = 3, + eQMIDMSUIMFacility_PFUIMPersonalization = 4, +}; + +// Enum to describe QMI DMS UIM Facility States +enum eQMIDMSUIMFacilityStates:UINT8 +{ + eQMIDMSUIMFacilityStates_Deactivated = 0, + eQMIDMSUIMFacilityStates_Activated = 1, + eQMIDMSUIMFacilityStates_Block = 2, +}; + +// Enum to describe QMI DMS UIM States +enum eQMIDMSUIMStates:UINT8 +{ + eQMIDMSUIMStates_InitializationCompleted = 0, + eQMIDMSUIMStates_InitializationFailed = 1, + eQMIDMSUIMStates_NotPresent = 2, + eQMIDMSUIMStates_StateUnavailable = 255, +}; + +// Enum to describe QMI Data Bearer Technologies +enum eQMIDataBearerTechnologies:UINT8 +{ + eQMIDataBearerTechnologies_CDMA20001x = 1, + eQMIDataBearerTechnologies_CDMA20001xEVDORev0 = 2, + eQMIDataBearerTechnologies_GPRS = 3, + eQMIDataBearerTechnologies_WCDMA = 4, + eQMIDataBearerTechnologies_CDMA20001xEVDORevA = 5, + eQMIDataBearerTechnologies_EGPRS = 6, + eQMIDataBearerTechnologies_HSDPAWCDMA = 7, + eQMIDataBearerTechnologies_WCDMAHSUPA = 8, + eQMIDataBearerTechnologies_HSDPAHSUPA = 9, + eQMIDataBearerTechnologies_LTE = 10, + eQMIDataBearerTechnologies_CDMA2000EHRPD = 11, + eQMIDataBearerTechnologies_HSDPAPlusWCDMA = 12, + eQMIDataBearerTechnologies_HSDPAPlusHSUPA = 13, + eQMIDataBearerTechnologies_DualCellHSDPAPlusWCDMA = 14, + eQMIDataBearerTechnologies_DualCellHSDPAPlusHSUPA = 15, + eQMIDataBearerTechnologies_HSDPAPlus64QAM = 16, + eQMIDataBearerTechnologies_HSDPAPlus64QAMHSUPA = 17, + eQMIDataBearerTechnologies_TDSCDMA = 18, + eQMIDataBearerTechnologies_TDSCDMAHSDPA = 19, + eQMIDataBearerTechnologies_TDSCDMAHSUPA = 20, + eQMIDataBearerTechnologies_Unknown = 255, +}; + +// Enum to describe QMI Dormancy Status +enum eQMIDormancyStatus:UINT8 +{ + eQMIDormancyStatus_TrafficChannelDormant = 1, + eQMIDormancyStatus_TrafficChannelActive = 2, +}; + +// Enum to describe QMI Erroneous SDU Deliveries +enum eQMIErroneousSDUDeliveries:UINT8 +{ + eQMIErroneousSDUDeliveries_Subscribe = 0, + eQMIErroneousSDUDeliveries_NoDetection = 1, + eQMIErroneousSDUDeliveries_ErroneousSDUIsDelivered = 2, + eQMIErroneousSDUDeliveries_ErroneousSDUIsNotDelivered = 3, +}; + +// Enum to describe QMI Errors +enum eQMIErrors:UINT16 +{ + eQMIErrors_None = 0, + eQMIErrors_MalformedMessage = 1, + eQMIErrors_NoMemory = 2, + eQMIErrors_Internal = 3, + eQMIErrors_Aborted = 4, + eQMIErrors_ClientIDsExhausted = 5, + eQMIErrors_UnabortableTransaction = 6, + eQMIErrors_InvalidClientID = 7, + eQMIErrors_NoThresholdsProvided = 8, + eQMIErrors_InvalidHandle = 9, + eQMIErrors_InvalidProfile = 10, + eQMIErrors_InvalidPINID = 11, + eQMIErrors_IncorrectPIN = 12, + eQMIErrors_NoNetworkFound = 13, + eQMIErrors_CallFailed = 14, + eQMIErrors_OutOfCall = 15, + eQMIErrors_NotProvisioned = 16, + eQMIErrors_MissingArgument = 17, + eQMIErrors_ArgumentTooLong = 19, + eQMIErrors_InvalidTransactionID = 22, + eQMIErrors_DeviceInUse = 23, + eQMIErrors_NetworkUnsupported = 24, + eQMIErrors_DeviceUnsupported = 25, + eQMIErrors_NoEffect = 26, + eQMIErrors_NoFreeProfile = 27, + eQMIErrors_InvalidPDPType = 28, + eQMIErrors_InvalidTechnologyPreference = 29, + eQMIErrors_InvalidProfileType = 30, + eQMIErrors_InvalidServiceType = 31, + eQMIErrors_InvalidRegisterAction = 32, + eQMIErrors_InvalidPSAttachAction = 33, + eQMIErrors_AuthenticationFailed = 34, + eQMIErrors_PINBlocked = 35, + eQMIErrors_PINAlwaysBlocked = 36, + eQMIErrors_UIMUninitialized = 37, + eQMIErrors_MaximumQoSRequestsInUse = 38, + eQMIErrors_IncorrectFlowFilter = 39, + eQMIErrors_NetworkQoSUnaware = 40, + eQMIErrors_InvalidQoSID = 41, + eQMIErrors_RequestedNumberUnsupported = 42, + eQMIErrors_InterfaceNotFound = 43, + eQMIErrors_FlowSuspended = 44, + eQMIErrors_InvalidDataFormat = 45, + eQMIErrors_GeneralError = 46, + eQMIErrors_UnknownError = 47, + eQMIErrors_InvalidArgument = 48, + eQMIErrors_InvalidIndex = 49, + eQMIErrors_NoEntry = 50, + eQMIErrors_DeviceStorageFull = 51, + eQMIErrors_DeviceNotReady = 52, + eQMIErrors_NetworkNotReady = 53, + eQMIErrors_WMSCauseCode = 54, + eQMIErrors_WMSMessageNotSent = 55, + eQMIErrors_WMSMessageDeliveryFailure = 56, + eQMIErrors_WMSInvalidMessageID = 57, + eQMIErrors_WMSEncoding = 58, + eQMIErrors_AuthenticationLock = 59, + eQMIErrors_InvalidTransition = 60, + eQMIErrors_NotMCASTInterface = 61, + eQMIErrors_MaximumMCASTRequestsInUse = 62, + eQMIErrors_InvalidMCASTHandle = 63, + eQMIErrors_InvalidIPFamilyPreference = 64, + eQMIErrors_SessionInactive = 65, + eQMIErrors_SessionInvalid = 66, + eQMIErrors_SessionOwnership = 67, + eQMIErrors_InsufficientResources = 68, + eQMIErrors_Disabled = 69, + eQMIErrors_InvalidOperation = 70, + eQMIErrors_InvalidQMICommand = 71, + eQMIErrors_WMSTPDUType = 72, + eQMIErrors_WMSSMSCAddress = 73, + eQMIErrors_InformationUnavailable = 74, + eQMIErrors_SegmentTooLong = 75, + eQMIErrors_SegmentOrder = 76, + eQMIErrors_BundlingNotSupported = 77, + eQMIErrors_OperationPartialFailure = 78, + eQMIErrors_PolicyMismatch = 79, + eQMIErrors_SIMFileNotFound = 80, + eQMIErrors_ExtendedInternal = 81, + eQMIErrors_AccessDenied = 82, + eQMIErrors_HardwareRestricted = 83, + eQMIErrors_AckNotSent = 84, + eQMIErrors_InjectTimeout = 85, + eQMIErrors_IncompatibleState = 90, + eQMIErrors_FDNRestrict = 91, + eQMIErrors_SUPSFailureCause = 92, + eQMIErrors_NoRadio = 93, + eQMIErrors_NotSupported = 94, + eQMIErrors_NoSubscription = 95, + eQMIErrors_CardCallControlFailed = 96, + eQMIErrors_NetworkAborted = 97, + eQMIErrors_MSGBlocked = 98, + eQMIErrors_InvalidSessionType = 100, + eQMIErrors_InvalidPBType = 101, + eQMIErrors_NoSIM = 102, + eQMIErrors_PBNotReady = 103, + eQMIErrors_PINRestriction = 104, + eQMIErrors_PIN2Restriction = 105, + eQMIErrors_PUKRestriction = 106, + eQMIErrors_PUK2Restriction = 107, + eQMIErrors_PBAccessRestricted = 108, + eQMIErrors_PBDeleteInProgress = 109, + eQMIErrors_PBTextTooLong = 110, + eQMIErrors_PBNumberTooLong = 111, + eQMIErrors_PBHiddenKeyRestriction = 112, + eQMIErrors_PBNotAvailable = 113, + eQMIErrors_CATEventRegistrationFailed = 61441, + eQMIErrors_CATInvalidTerminalResponse = 61442, + eQMIErrors_CATInvalidEnvelopeCommand = 61443, + eQMIErrors_CATEnvelopeCommandBusy = 61444, + eQMIErrors_CATEnvelopeCommandFailed = 61445, +}; + +// Enum to describe QMI HA/AAA Key States +enum eQMIHAAAAKeyStates:UINT8 +{ + eQMIHAAAAKeyStates_Unset = 0, + eQMIHAAAAKeyStates_SetDefault = 1, + eQMIHAAAAKeyStates_SetModified = 2, +}; + +// Enum to describe QMI LOC Altitude Assumed +enum eQMILOCAltitudeAssumed:UINT32 +{ + eQMILOCAltitudeAssumed_AltitudeIsCalculated = 0, + eQMILOCAltitudeAssumed_AltitudeIsAssumed = 1, +}; + +// Enum to describe QMI LOC Altitude Source +enum eQMILOCAltitudeSource:UINT32 +{ + eQMILOCAltitudeSource_Unknown = 0, + eQMILOCAltitudeSource_GPS = 1, + eQMILOCAltitudeSource_CellID = 2, + eQMILOCAltitudeSource_EnhancedCellID = 3, + eQMILOCAltitudeSource_WiFi = 4, + eQMILOCAltitudeSource_Terrestrial = 5, + eQMILOCAltitudeSource_TerrestrialHybrid = 6, + eQMILOCAltitudeSource_AltitudeDatabase = 7, + eQMILOCAltitudeSource_BarometricAltimeter = 8, + eQMILOCAltitudeSource_Other = 9, +}; + +// Enum to describe QMI LOC Confidence +enum eQMILOCConfidence:UINT32 +{ + eQMILOCConfidence_Low = 1, + eQMILOCConfidence_Medium = 2, + eQMILOCConfidence_High = 3, +}; + +// Enum to describe QMI LOC Connection Request Type +enum eQMILOCConnectionRequestType:UINT32 +{ + eQMILOCConnectionRequestType_Open = 1, + eQMILOCConnectionRequestType_Close = 2, +}; + +// Enum to describe QMI LOC Connection Status +enum eQMILOCConnectionStatus:UINT32 +{ + eQMILOCConnectionStatus_Success = 1, + eQMILOCConnectionStatus_Failure = 2, +}; + +// Enum to describe QMI LOC Control Mode +enum eQMILOCControlMode:UINT32 +{ + eQMILOCControlMode_Automatic = 0, + eQMILOCControlMode_Forced = 1, +}; + +// Enum to describe QMI LOC Coverage +enum eQMILOCCoverage:UINT32 +{ + eQMILOCCoverage_NotSpecified = 0, + eQMILOCCoverage_Point = 1, + eQMILOCCoverage_Full = 2, +}; + +// Enum to describe QMI LOC Cradle Mount State +enum eQMILOCCradleMountState:UINT32 +{ + eQMILOCCradleMountState_NotMounted = 0, + eQMILOCCradleMountState_Mounted = 1, + eQMILOCCradleMountState_Unknown = 2, +}; + +// Enum to describe QMI LOC Data Coding Scheme +enum eQMILOCDataCodingScheme:UINT32 +{ + eQMILOCDataCodingScheme_German = 12, + eQMILOCDataCodingScheme_English = 13, + eQMILOCDataCodingScheme_Italian = 14, + eQMILOCDataCodingScheme_French = 15, + eQMILOCDataCodingScheme_Spanish = 16, + eQMILOCDataCodingScheme_Dutch = 17, + eQMILOCDataCodingScheme_Swedish = 18, + eQMILOCDataCodingScheme_Danish = 19, + eQMILOCDataCodingScheme_Portuguese = 20, + eQMILOCDataCodingScheme_Finnish = 21, + eQMILOCDataCodingScheme_Norwegian = 22, + eQMILOCDataCodingScheme_Greek = 23, + eQMILOCDataCodingScheme_Turkish = 24, + eQMILOCDataCodingScheme_Hungarian = 25, + eQMILOCDataCodingScheme_Polish = 26, + eQMILOCDataCodingScheme_Unspecified = 27, + eQMILOCDataCodingScheme_UTF8 = 28, + eQMILOCDataCodingScheme_UCS2 = 29, + eQMILOCDataCodingScheme_GSMDefault = 30, +}; + +// Enum to describe QMI LOC Emergency Protocols +enum eQMILOCEmergencyProtocols:UINT32 +{ + eQMILOCEmergencyProtocols_WCDMACP = 0, + eQMILOCEmergencyProtocols_WCDMAUP = 1, +}; + +// Enum to describe QMI LOC Encoding Scheme +enum eQMILOCEncodingScheme:UINT32 +{ + eQMILOCEncodingScheme_Octet = 0, + eQMILOCEncodingScheme_EXNProtocolMessage = 1, + eQMILOCEncodingScheme_ASCII = 2, + eQMILOCEncodingScheme_IA5 = 3, + eQMILOCEncodingScheme_Unicode = 4, + eQMILOCEncodingScheme_ShiftJIS = 5, + eQMILOCEncodingScheme_Korean = 6, + eQMILOCEncodingScheme_LatinHebrew = 7, + eQMILOCEncodingScheme_Latin = 8, + eQMILOCEncodingScheme_GSM = 9, +}; + +// Enum to describe QMI LOC Engine State +enum eQMILOCEngineState +{ + eQMILOCEngineState_On = 1, + eQMILOCEngineState_Off = 2, +}; + +// Enum to describe QMI LOC Fix Recurrence Type +enum eQMILOCFixRecurrenceType:UINT32 +{ + eQMILOCFixRecurrenceType_RequestPeriodicFixes = 1, + eQMILOCFixRecurrenceType_RequestSingleFix = 2, +}; + +// Enum to describe QMI LOC Format Type +enum eQMILOCFormatType:UINT32 +{ + eQMILOCFormatType_LogicalName = 0, + eQMILOCFormatType_EmailAddress = 1, + eQMILOCFormatType_MSISDN = 2, + eQMILOCFormatType_URL = 3, + eQMILOCFormatType_SIPURL = 4, + eQMILOCFormatType_MIN = 5, + eQMILOCFormatType_MDN = 6, + eQMILOCFormatType_IMSPublicIdentity = 7, + eQMILOCFormatType_OSSUnknown = 2147483647, +}; + +// Enum to describe QMI LOC Geofence Breach Type +enum eQMILOCGeofenceBreachType:UINT8 +{ + eQMILOCGeofenceBreachType_Entering = 1, + eQMILOCGeofenceBreachType_Leaving = 2, +}; + +// Enum to describe QMI LOC Geofence General Alert +enum eQMILOCGeofenceGeneralAlert:UINT32 +{ + eQMILOCGeofenceGeneralAlert_GNSSUnavailable = 1, + eQMILOCGeofenceGeneralAlert_GNSSAvailable = 2, + eQMILOCGeofenceGeneralAlert_OOS = 3, + eQMILOCGeofenceGeneralAlert_TimeInvalid = 4, +}; + +// Enum to describe QMI LOC Geofence Operation Mode +enum eQMILOCGeofenceOperationMode:UINT32 +{ + eQMILOCGeofenceOperationMode_Added = 1, + eQMILOCGeofenceOperationMode_Deleted = 2, + eQMILOCGeofenceOperationMode_Edited = 3, +}; + +// Enum to describe QMI LOC Geofence Origin +enum eQMILOCGeofenceOrigin:UINT32 +{ + eQMILOCGeofenceOrigin_Network = 1, + eQMILOCGeofenceOrigin_Device = 2, +}; + +// Enum to describe QMI LOC Geofence State +enum eQMILOCGeofenceState:UINT32 +{ + eQMILOCGeofenceState_Active = 1, + eQMILOCGeofenceState_Suspended = 2, +}; + +// Enum to describe QMI LOC Geofence Status +enum eQMILOCGeofenceStatus:UINT32 +{ + eQMILOCGeofenceStatus_Success = 0, + eQMILOCGeofenceStatus_GeneralFailure = 1, + eQMILOCGeofenceStatus_Unsupported = 2, + eQMILOCGeofenceStatus_InvalidParameters = 3, + eQMILOCGeofenceStatus_EngineBusy = 4, + eQMILOCGeofenceStatus_PhoneOffline = 5, + eQMILOCGeofenceStatus_Timeout = 6, + eQMILOCGeofenceStatus_InsufficientMemory = 8, +}; + +// Enum to describe QMI LOC Health Status +enum eQMILOCHealthStatus:UINT8 +{ + eQMILOCHealthStatus_Unhealthy = 0, + eQMILOCHealthStatus_Healthy = 1, +}; + +// Enum to describe QMI LOC Horizontal Accuracy +enum eQMILOCHorizontalAccuracy:UINT32 +{ + eQMILOCHorizontalAccuracy_Low = 1, + eQMILOCHorizontalAccuracy_Medium = 2, + eQMILOCHorizontalAccuracy_High = 3, +}; + +// Enum to describe QMI LOC Intermediate Report State +enum eQMILOCIntermediateReportState:UINT32 +{ + eQMILOCIntermediateReportState_Enable = 1, + eQMILOCIntermediateReportState_Disable = 2, +}; + +// Enum to describe QMI LOC Linkage +enum eQMILOCLinkage:UINT32 +{ + eQMILOCLinkage_NotSpecified = 0, + eQMILOCLinkage_FullyInterdependent = 1, + eQMILOCLinkage_DependsOnLatLong = 2, + eQMILOCLinkage_FullyIndependent = 3, +}; + +// Enum to describe QMI LOC Location Server Type +enum eQMILOCLocationServerType:UINT32 +{ + eQMILOCLocationServerType_CDMAPDE = 1, + eQMILOCLocationServerType_CDMAMPC = 2, + eQMILOCLocationServerType_UMTSSLP = 3, + eQMILOCLocationServerType_CustomPDE = 4, +}; + +// Enum to describe QMI LOC Location Type +enum eQMILOCLocationType:UINT32 +{ + eQMILOCLocationType_CurrentLocation = 1, + eQMILOCLocationType_CurrentOrLastKnownLocation = 2, + eQMILOCLocationType_InitialLocation = 4, +}; + +// Enum to describe QMI LOC Lock Type +enum eQMILOCLockType:UINT32 +{ + eQMILOCLockType_LockNone = 1, + eQMILOCLockType_LockMI = 2, + eQMILOCLockType_LockMT = 3, + eQMILOCLockType_LockAll = 4, +}; + +// Enum to describe QMI LOC Motion Modes +enum eQMILOCMotionModes:UINT32 +{ + eQMILOCMotionModes_Unknown = 0, + eQMILOCMotionModes_Stationary = 1, + eQMILOCMotionModes_PedestrianUnknown = 200, + eQMILOCMotionModes_PedestrianWalking = 201, + eQMILOCMotionModes_PedestrianRunning = 202, + eQMILOCMotionModes_VehicleUnknown = 300, +}; + +// Enum to describe QMI LOC Motion States +enum eQMILOCMotionStates:UINT32 +{ + eQMILOCMotionStates_Unknown = 0, + eQMILOCMotionStates_Stationary = 1, + eQMILOCMotionStates_InMotion = 2, +}; + +// Enum to describe QMI LOC Network Initiated Message Types +enum eQMILOCNetworkInitiatedMessageTypes:UINT32 +{ + eQMILOCNetworkInitiatedMessageTypes_SUPL = 0, +}; + +// Enum to describe QMI LOC Notification Type +enum eQMILOCNotificationType:UINT32 +{ + eQMILOCNotificationType_NoNotifyOrVerify = 1, + eQMILOCNotificationType_NotifyOnly = 2, + eQMILOCNotificationType_AllowNoResponse = 3, + eQMILOCNotificationType_ResponseRequired = 4, + eQMILOCNotificationType_PrivacyOverride = 5, +}; + +// Enum to describe QMI LOC Operation Mode +enum eQMILOCOperationMode:UINT32 +{ + eQMILOCOperationMode_Default = 1, + eQMILOCOperationMode_MSB = 2, + eQMILOCOperationMode_MSA = 3, + eQMILOCOperationMode_StandAlone = 4, + eQMILOCOperationMode_CellID = 5, + eQMILOCOperationMode_WWAN = 6, +}; + +// Enum to describe QMI LOC Orbits Format Type +enum eQMILOCOrbitsFormatType:UINT32 +{ + eQMILOCOrbitsFormatType_PredictedOrbitsXTRA = 0, +}; + +// Enum to describe QMI LOC PDN Type +enum eQMILOCPDNType:UINT32 +{ + eQMILOCPDNType_IPv4 = 1, + eQMILOCPDNType_IPv6 = 2, + eQMILOCPDNType_IPv4OrIPv6 = 3, + eQMILOCPDNType_PPP = 4, +}; + +// Enum to describe QMI LOC Position +enum eQMILOCPosition:UINT32 +{ + eQMILOCPosition_AGPSSetAssisted = 1, + eQMILOCPosition_AGPSSetBased = 2, + eQMILOCPosition_AGPSSetAssistedPreference = 3, + eQMILOCPosition_AGPSSetBasedPreference = 4, + eQMILOCPosition_AutonomousGPS = 5, + eQMILOCPosition_AFLT = 6, + eQMILOCPosition_ECID = 7, + eQMILOCPosition_EOTD = 8, + eQMILOCPosition_OTDOA = 9, + eQMILOCPosition_NoPosition = 10, +}; + +// Enum to describe QMI LOC Position From Geofence +enum eQMILOCPositionFromGeofence:UINT32 +{ + eQMILOCPositionFromGeofence_Inside = 1, + eQMILOCPositionFromGeofence_Outside = 2, +}; + +// Enum to describe QMI LOC Position Mode +enum eQMILOCPositionMode:UINT32 +{ + eQMILOCPositionMode_AssistedOnly = 1, + eQMILOCPositionMode_BasedOnly = 2, + eQMILOCPositionMode_AssistedPreferredBasedAllowed = 3, + eQMILOCPositionMode_BasedPreferredAssistedAllowed = 4, +}; + +// Enum to describe QMI LOC Position Source +enum eQMILOCPositionSource:UINT32 +{ + eQMILOCPositionSource_GNSS = 0, + eQMILOCPositionSource_CellID = 1, + eQMILOCPositionSource_EnhancedCellID = 2, + eQMILOCPositionSource_WiFi = 3, + eQMILOCPositionSource_Terrestrial = 4, + eQMILOCPositionSource_TerrestrialHybrid = 5, + eQMILOCPositionSource_Other = 6, +}; + +// Enum to describe QMI LOC Power State +enum eQMILOCPowerState:UINT32 +{ + eQMILOCPowerState_NotConnected = 0, + eQMILOCPowerState_Connected = 1, + eQMILOCPowerState_Unknown = 2, +}; + +// Enum to describe QMI LOC Reliability +enum eQMILOCReliability:UINT32 +{ + eQMILOCReliability_NotSet = 0, + eQMILOCReliability_VeryLow = 1, + eQMILOCReliability_Low = 2, + eQMILOCReliability_Medium = 3, + eQMILOCReliability_High = 4, +}; + +// Enum to describe QMI LOC Request Type +enum eQMILOCRequestType:UINT32 +{ + eQMILOCRequestType_StartPeriodicHighFrequencyFixes = 0, + eQMILOCRequestType_StartPeriodicKeepWarmFixes = 1, + eQMILOCRequestType_StopPeriodicFixes = 2, +}; + +// Enum to describe QMI LOC Responsiveness +enum eQMILOCResponsiveness:UINT32 +{ + eQMILOCResponsiveness_Low = 1, + eQMILOCResponsiveness_Medium = 2, + eQMILOCResponsiveness_High = 3, +}; + +// Enum to describe QMI LOC SUPL Hash Algorithms +enum eQMILOCSUPLHashAlgorithms:UINT32 +{ + eQMILOCSUPLHashAlgorithms_SHA1 = 0, + eQMILOCSUPLHashAlgorithms_SHA256 = 1, +}; + +// Enum to describe QMI LOC SUPL TLS Versions +enum eQMILOCSUPLTLSVersions:UINT32 +{ + eQMILOCSUPLTLSVersions_TLSVersion10 = 0, + eQMILOCSUPLTLSVersions_TLSVersion11 = 1, +}; + +// Enum to describe QMI LOC SUPL Version +enum eQMILOCSUPLVersion:UINT32 +{ + eQMILOCSUPLVersion_10 = 1, + eQMILOCSUPLVersion_20 = 2, +}; + +// Enum to describe QMI LOC Satellite Status +enum eQMILOCSatelliteStatus:UINT32 +{ + eQMILOCSatelliteStatus_Idle = 1, + eQMILOCSatelliteStatus_Searching = 2, + eQMILOCSatelliteStatus_Tracking = 3, +}; + +// Enum to describe QMI LOC Sensor Time Sources +enum eQMILOCSensorTimeSources:UINT32 +{ + eQMILOCSensorTimeSources_Unspecified = 0, + eQMILOCSensorTimeSources_Common = 1, +}; + +// Enum to describe QMI LOC Sensor Usage +enum eQMILOCSensorUsage:UINT32 +{ + eQMILOCSensorUsage_SensorUseEnabled = 0, + eQMILOCSensorUsage_SensorUseDisabled = 1, +}; + +// Enum to describe QMI LOC Service Interaction Type +enum eQMILOCServiceInteractionType:UINT32 +{ + eQMILOCServiceInteractionType_OngoingNIIncomingMO = 1, +}; + +// Enum to describe QMI LOC Session State +enum eQMILOCSessionState:UINT32 +{ + eQMILOCSessionState_Started = 1, + eQMILOCSessionState_Finished = 2, +}; + +// Enum to describe QMI LOC Session Status +enum eQMILOCSessionStatus:UINT32 +{ + eQMILOCSessionStatus_Success = 0, + eQMILOCSessionStatus_InProgress = 1, + eQMILOCSessionStatus_GeneralFailure = 2, + eQMILOCSessionStatus_Timeout = 3, + eQMILOCSessionStatus_UserEnded = 4, + eQMILOCSessionStatus_BadParameter = 5, + eQMILOCSessionStatus_PhoneOffline = 6, + eQMILOCSessionStatus_EngineLocked = 7, +}; + +// Enum to describe QMI LOC Status +enum eQMILOCStatus:UINT32 +{ + eQMILOCStatus_Success = 0, + eQMILOCStatus_GeneralFailure = 1, + eQMILOCStatus_Unsupported = 2, + eQMILOCStatus_InvalidParameter = 3, + eQMILOCStatus_EngineBusy = 4, + eQMILOCStatus_PhoneOffline = 5, + eQMILOCStatus_Timeout = 6, +}; + +// Enum to describe QMI LOC System +enum eQMILOCSystem:UINT32 +{ + eQMILOCSystem_GlobalPositioningSystem = 1, + eQMILOCSystem_Galileo = 2, + eQMILOCSystem_SatelliteBasedAugmentationSystem = 3, + eQMILOCSystem_COMPASS = 4, + eQMILOCSystem_GLONASS = 5, +}; + +// Enum to describe QMI LOC Time Source +enum eQMILOCTimeSource:UINT32 +{ + eQMILOCTimeSource_Invalid = 0, + eQMILOCTimeSource_NetworkTimeTransfer = 1, + eQMILOCTimeSource_NetworkTimeTagging = 2, + eQMILOCTimeSource_ExternalInput = 3, + eQMILOCTimeSource_TOWDecode = 4, + eQMILOCTimeSource_TOWConfirmed = 5, + eQMILOCTimeSource_TOWAndWeekConfirmed = 6, + eQMILOCTimeSource_NavigationSolution = 7, + eQMILOCTimeSource_SolveForTime = 8, + eQMILOCTimeSource_GLOTOWDecode = 9, + eQMILOCTimeSource_Transform = 10, + eQMILOCTimeSource_WCDMASleepTimeTag = 11, + eQMILOCTimeSource_GSMSleepTimeTag = 12, +}; + +// Enum to describe QMI LOC Trigger Type +enum eQMILOCTriggerType:UINT32 +{ + eQMILOCTriggerType_SingleShot = 4294967295u, + eQMILOCTriggerType_Periodic = 0, + eQMILOCTriggerType_AreaEvent = 1, +}; + +// Enum to describe QMI LOC User Response +enum eQMILOCUserResponse:UINT32 +{ + eQMILOCUserResponse_Accept = 1, + eQMILOCUserResponse_Deny = 2, + eQMILOCUserResponse_NoResponse = 3, +}; + +// Enum to describe QMI LOC VX Version +enum eQMILOCVXVersion:UINT32 +{ + eQMILOCVXVersion_V1Only = 1, + eQMILOCVXVersion_V2Only = 2, +}; + +// Enum to describe QMI LOC WWAN Type +enum eQMILOCWWANType:UINT32 +{ + eQMILOCWWANType_Internet = 0, + eQMILOCWWANType_AGNSS = 1, + eQMILOCWWANType_AGNSSEmergency = 2, +}; + +// Enum to describe QMI LOC Wi-Fi Fix Error Code +enum eQMILOCWiFiFixErrorCode:UINT32 +{ + eQMILOCWiFiFixErrorCode_Success = 0, + eQMILOCWiFiFixErrorCode_WiFiNotAvailable = 1, + eQMILOCWiFiFixErrorCode_NoAccessPointsFound = 2, + eQMILOCWiFiFixErrorCode_Unauthorized = 3, + eQMILOCWiFiFixErrorCode_ServerUnavailable = 4, + eQMILOCWiFiFixErrorCode_LocationCannotBeDetermined = 5, + eQMILOCWiFiFixErrorCode_Unknown = 6, +}; + +// Enum to describe QMI LOC Wi-Fi Status +enum eQMILOCWiFiStatus:UINT32 +{ + eQMILOCWiFiStatus_Available = 1, + eQMILOCWiFiStatus_Unavailable = 2, +}; + +// Enum to describe QMI Mobile IP Modes +enum eQMIMobileIPModes:UINT8 +{ + eQMIMobileIPModes_MIPOffSimpleIPOnly = 0, + eQMIMobileIPModes_MIPPreferred = 1, + eQMIMobileIPModes_MIPOnly = 2, +}; + +// Enum to describe QMI NAS AN-AAA Authentication Status +enum eQMINASANAAAAuthenticationStatus:UINT8 +{ + eQMINASANAAAAuthenticationStatus_AuthenticationFailed = 0, + eQMINASANAAAAuthenticationStatus_AuthenticationSuccess = 1, + eQMINASANAAAAuthenticationStatus_NoAuthenticationRequested = 2, +}; + +// Enum to describe QMI NAS Acquisition Order +enum eQMINASAcquisitionOrder:UINT32 +{ + eQMINASAcquisitionOrder_Automatic = 0, + eQMINASAcquisitionOrder_GSMThenWCDMA = 1, + eQMINASAcquisitionOrder_WCDMAThenGSM = 2, +}; + +// Enum to describe QMI NAS Active Subscription +enum eQMINASActiveSubscription:UINT8 +{ + eQMINASActiveSubscription_NotActive = 0, + eQMINASActiveSubscription_Active = 1, +}; + +// Enum to describe QMI NAS Average Period +enum eQMINASAveragePeriod:UINT8 +{ + eQMINASAveragePeriod_AverageUsingDefaultConfiguration = 0, + eQMINASAveragePeriod_AverageOver1Second = 1, + eQMINASAveragePeriod_AverageOver2Second = 2, + eQMINASAveragePeriod_AverageOver3Second = 3, + eQMINASAveragePeriod_AverageOver4Second = 4, + eQMINASAveragePeriod_AverageOver5Second = 5, + eQMINASAveragePeriod_AverageOver6Second = 6, + eQMINASAveragePeriod_AverageOver7Second = 7, + eQMINASAveragePeriod_AverageOver8Second = 8, + eQMINASAveragePeriod_AverageOver9Second = 9, + eQMINASAveragePeriod_AverageOver10Second = 10, +}; + +// Enum to describe QMI NAS Avoid System Types +enum eQMINASAvoidSystemTypes:UINT32 +{ + eQMINASAvoidSystemTypes_AvoidIdleWhenUserZoneSelected = 0, + eQMINASAvoidSystemTypes_AvoidIdle = 1, + eQMINASAvoidSystemTypes_ClearAllAvoidSystemLists = 2, +}; + +// Enum to describe QMI NAS Band Classes +enum eQMINASBandClasses:UINT16 +{ + eQMINASBandClasses_CDMABandClass0 = 0, + eQMINASBandClasses_CDMABandClass1 = 1, + eQMINASBandClasses_CDMABandClass3 = 3, + eQMINASBandClasses_CDMABandClass4 = 4, + eQMINASBandClasses_CDMABandClass5 = 5, + eQMINASBandClasses_CDMABandClass6 = 6, + eQMINASBandClasses_CDMABandClass7 = 7, + eQMINASBandClasses_CDMABandClass8 = 8, + eQMINASBandClasses_CDMABandClass9 = 9, + eQMINASBandClasses_CDMABandClass10 = 10, + eQMINASBandClasses_CDMABandClass11 = 11, + eQMINASBandClasses_CDMABandClass12 = 12, + eQMINASBandClasses_CDMABandClass13 = 13, + eQMINASBandClasses_CDMABandClass14 = 14, + eQMINASBandClasses_CDMABandClass15 = 15, + eQMINASBandClasses_CDMABandClass16 = 16, + eQMINASBandClasses_CDMABandClass17 = 17, + eQMINASBandClasses_CDMABandClass18 = 18, + eQMINASBandClasses_CDMABandClass19 = 19, + eQMINASBandClasses_GSM450 = 40, + eQMINASBandClasses_GSM480 = 41, + eQMINASBandClasses_GSM750 = 42, + eQMINASBandClasses_GSM850 = 43, + eQMINASBandClasses_GSM900Extended = 44, + eQMINASBandClasses_GSM900Primary = 45, + eQMINASBandClasses_GSM900Railways = 46, + eQMINASBandClasses_GSM1800 = 47, + eQMINASBandClasses_GSM1900 = 48, + eQMINASBandClasses_WCDMA2100 = 80, + eQMINASBandClasses_WCDMAPCS1900 = 81, + eQMINASBandClasses_WCDMADCS1800 = 82, + eQMINASBandClasses_WCDMA1700US = 83, + eQMINASBandClasses_WCDMA850 = 84, + eQMINASBandClasses_WCDMA800 = 85, + eQMINASBandClasses_WCDMA2600 = 86, + eQMINASBandClasses_WCDMA900 = 87, + eQMINASBandClasses_WCDMA1700Japan = 88, + eQMINASBandClasses_WCDMA1500Japan = 90, + eQMINASBandClasses_WCDMA850Japan = 91, + eQMINASBandClasses_EUTRABand1 = 120, + eQMINASBandClasses_EUTRABand2 = 121, + eQMINASBandClasses_EUTRABand3 = 122, + eQMINASBandClasses_EUTRABand4 = 123, + eQMINASBandClasses_EUTRABand5 = 124, + eQMINASBandClasses_EUTRABand6 = 125, + eQMINASBandClasses_EUTRABand7 = 126, + eQMINASBandClasses_EUTRABand8 = 127, + eQMINASBandClasses_EUTRABand9 = 128, + eQMINASBandClasses_EUTRABand10 = 129, + eQMINASBandClasses_EUTRABand11 = 130, + eQMINASBandClasses_EUTRABand12 = 131, + eQMINASBandClasses_EUTRABand13 = 132, + eQMINASBandClasses_EUTRABand14 = 133, + eQMINASBandClasses_EUTRABand17 = 134, + eQMINASBandClasses_EUTRABand33 = 135, + eQMINASBandClasses_EUTRABand34 = 136, + eQMINASBandClasses_EUTRABand35 = 137, + eQMINASBandClasses_EUTRABand36 = 138, + eQMINASBandClasses_EUTRABand37 = 139, + eQMINASBandClasses_EUTRABand38 = 140, + eQMINASBandClasses_EUTRABand39 = 141, + eQMINASBandClasses_EUTRABand40 = 142, + eQMINASBandClasses_EUTRABand18 = 143, + eQMINASBandClasses_EUTRABand19 = 144, + eQMINASBandClasses_EUTRABand20 = 145, + eQMINASBandClasses_EUTRABand21 = 146, + eQMINASBandClasses_EUTRABand24 = 147, + eQMINASBandClasses_EUTRABand25 = 148, + eQMINASBandClasses_EUTRABand41 = 149, + eQMINASBandClasses_EUTRABand42 = 150, + eQMINASBandClasses_EUTRABand43 = 151, + eQMINASBandClasses_TDSCDMABandA = 200, + eQMINASBandClasses_TDSCDMABandB = 201, + eQMINASBandClasses_TDSCDMABandC = 202, + eQMINASBandClasses_TDSCDMABandD = 203, + eQMINASBandClasses_TDSCDMABandE = 204, + eQMINASBandClasses_TDSCDMABandF = 205, +}; + +// Enum to describe QMI NAS CDMA 1xEV-DO Active Protocol +enum eQMINASCDMA1xEVDOActiveProtocol:UINT8 +{ + eQMINASCDMA1xEVDOActiveProtocol_None = 0, + eQMINASCDMA1xEVDOActiveProtocol_CDMA1xEVDORel0 = 2, + eQMINASCDMA1xEVDOActiveProtocol_CDMA1xEVDORelA = 3, + eQMINASCDMA1xEVDOActiveProtocol_CDMA1xEVDORelB = 4, +}; + +// Enum to describe QMI NAS CDMA 1xEV-DO Hybrid Information +enum eQMINASCDMA1xEVDOHybridInformation:UINT8 +{ + eQMINASCDMA1xEVDOHybridInformation_SystemIsNotHybrid = 0, + eQMINASCDMA1xEVDOHybridInformation_SystemIsHybrid = 1, +}; + +// Enum to describe QMI NAS CDMA 1xEV-DO Personality +enum eQMINASCDMA1xEVDOPersonality:UINT8 +{ + eQMINASCDMA1xEVDOPersonality_Unknown = 0, + eQMINASCDMA1xEVDOPersonality_HRPD = 1, + eQMINASCDMA1xEVDOPersonality_EHRPD = 2, +}; + +// Enum to describe QMI NAS CDMA Pilot Types +enum eQMINASCDMAPilotTypes:UINT32 +{ + eQMINASCDMAPilotTypes_Active = 0, + eQMINASCDMAPilotTypes_Neighbor = 1, +}; + +// Enum to describe QMI NAS CS/PS Attach States +enum eQMINASCSPSAttachStates:UINT8 +{ + eQMINASCSPSAttachStates_UnknownNotApplicable = 0, + eQMINASCSPSAttachStates_Attached = 1, + eQMINASCSPSAttachStates_Detached = 2, +}; + +// Enum to describe QMI NAS Call Barring Status +enum eQMINASCallBarringStatus:UINT32 +{ + eQMINASCallBarringStatus_Unknown = 4294967295u, + eQMINASCallBarringStatus_NormalCallsOnly = 0, + eQMINASCallBarringStatus_EmergencyCallsOnly = 1, + eQMINASCallBarringStatus_NoCalls = 2, + eQMINASCallBarringStatus_AllCalls = 3, +}; + +// Enum to describe QMI NAS Call Types +enum eQMINASCallTypes:UINT32 +{ + eQMINASCallTypes_Voice = 0, + eQMINASCallTypes_SMS = 1, +}; + +// Enum to describe QMI NAS Cell Broadcast Caps +enum eQMINASCellBroadcastCaps:UINT32 +{ + eQMINASCellBroadcastCaps_Unknown = 0, + eQMINASCellBroadcastCaps_NotSupported = 1, + eQMINASCellBroadcastCaps_Supported = 2, +}; + +// Enum to describe QMI NAS Cell Broadcast Caps 2 +enum eQMINASCellBroadcastCaps2:UINT32 +{ + eQMINASCellBroadcastCaps2_Unknown = 0, + eQMINASCellBroadcastCaps2_NotSupported = 1, + eQMINASCellBroadcastCaps2_Supported = 2, +}; + +// Enum to describe QMI NAS Change Duration +enum eQMINASChangeDuration:UINT8 +{ + eQMINASChangeDuration_PowerCycle = 0, + eQMINASChangeDuration_Permanent = 1, +}; + +// Enum to describe QMI NAS Closed Subscriber Group Categories +enum eQMINASClosedSubscriberGroupCategories:UINT32 +{ + eQMINASClosedSubscriberGroupCategories_Unknown = 0, + eQMINASClosedSubscriberGroupCategories_Allowed = 1, + eQMINASClosedSubscriberGroupCategories_Operator = 2, +}; + +// Enum to describe QMI NAS Concurrent Service +enum eQMINASConcurrentService:UINT8 +{ + eQMINASConcurrentService_NotAvailable = 0, + eQMINASConcurrentService_Available = 1, +}; + +// Enum to describe QMI NAS Concurrent Service Supported +enum eQMINASConcurrentServiceSupported:UINT8 +{ + eQMINASConcurrentServiceSupported_NotSupported = 0, + eQMINASConcurrentServiceSupported_Supported = 1, +}; + +// Enum to describe QMI NAS DDTM Preferences +enum eQMINASDDTMPreferences:UINT8 +{ + eQMINASDDTMPreferences_Off = 0, + eQMINASDDTMPreferences_On = 1, + eQMINASDDTMPreferences_NoChange = 2, +}; + +// Enum to describe QMI NAS DTM Support +enum eQMINASDTMSupport:UINT8 +{ + eQMINASDTMSupport_NotAvailable = 0, + eQMINASDTMSupport_Available = 1, +}; + +// Enum to describe QMI NAS Data Service Capabilities 2 +enum eQMINASDataServiceCapabilities2:UINT8 +{ + eQMINASDataServiceCapabilities2_GPRS = 1, + eQMINASDataServiceCapabilities2_EGPRS = 2, + eQMINASDataServiceCapabilities2_HSDPA = 3, + eQMINASDataServiceCapabilities2_HSUPA = 4, + eQMINASDataServiceCapabilities2_WCDMA = 5, + eQMINASDataServiceCapabilities2_CDMA = 6, + eQMINASDataServiceCapabilities2_CDMA1xEVDORev0 = 7, + eQMINASDataServiceCapabilities2_CDMA1xEVDORevA = 8, + eQMINASDataServiceCapabilities2_GSM = 9, + eQMINASDataServiceCapabilities2_CDMA1xEVDORevB = 10, + eQMINASDataServiceCapabilities2_LTE = 11, + eQMINASDataServiceCapabilities2_HSDPAPlus = 12, + eQMINASDataServiceCapabilities2_DCHSDPAPlus = 13, +}; + +// Enum to describe QMI NAS Day Of Week +enum eQMINASDayOfWeek:UINT8 +{ + eQMINASDayOfWeek_Monday = 0, + eQMINASDayOfWeek_Tuesday = 1, + eQMINASDayOfWeek_Wednesday = 2, + eQMINASDayOfWeek_Thursday = 3, + eQMINASDayOfWeek_Friday = 4, + eQMINASDayOfWeek_Saturday = 5, + eQMINASDayOfWeek_Sunday = 6, +}; + +// Enum to describe QMI NAS Daylight Savings Adjustment +enum eQMINASDaylightSavingsAdjustment:UINT8 +{ + eQMINASDaylightSavingsAdjustment_NoAdjustment = 0, + eQMINASDaylightSavingsAdjustment_1HourAdjustment = 1, + eQMINASDaylightSavingsAdjustment_2HourAdjustment = 2, +}; + +// Enum to describe QMI NAS Dual Transfer Mode +enum eQMINASDualTransferMode:UINT8 +{ + eQMINASDualTransferMode_DTMNotSupported = 0, + eQMINASDualTransferMode_DTMSupported = 1, +}; + +// Enum to describe QMI NAS E-UTRA Status +enum eQMINASEUTRAStatus:UINT8 +{ + eQMINASEUTRAStatus_EUTRACellDetected = 0, + eQMINASEUTRAStatus_EUTRACellNotDetected = 1, + eQMINASEUTRAStatus_EUTRADetectionUnknown = 2, + eQMINASEUTRAStatus_EUTRADetectionUnsupported = 3, +}; + +// Enum to describe QMI NAS E911 States +enum eQMINASE911States:UINT32 +{ + eQMINASE911States_Enter = 0, + eQMINASE911States_ExitWithECB = 1, + eQMINASE911States_Exit = 2, + eQMINASE911States_EnterWithECB = 3, +}; + +// Enum to describe QMI NAS EGPRS Support +enum eQMINASEGPRSSupport:UINT8 +{ + eQMINASEGPRSSupport_NotAvailable = 0, + eQMINASEGPRSSupport_Available = 1, +}; + +// Enum to describe QMI NAS EV-DO Session Close Reasons +enum eQMINASEVDOSessionCloseReasons:UINT32 +{ + eQMINASEVDOSessionCloseReasons_ReacquiredNewNetwork = 0, + eQMINASEVDOSessionCloseReasons_UATIResponseTimeout = 1, + eQMINASEVDOSessionCloseReasons_KeepAliveTimerExpired = 2, + eQMINASEVDOSessionCloseReasons_InternalDeactivation = 3, + eQMINASEVDOSessionCloseReasons_ReceivedSessionCloseFromAN = 4, + eQMINASEVDOSessionCloseReasons_ConnectionOpenFailure = 5, + eQMINASEVDOSessionCloseReasons_ConfigurationRequestFailure = 6, + eQMINASEVDOSessionCloseReasons_ConfigurationResponseFailure = 7, + eQMINASEVDOSessionCloseReasons_ProtocolNegotiationFailure = 8, + eQMINASEVDOSessionCloseReasons_ANInitSetupTimerExpired = 9, + eQMINASEVDOSessionCloseReasons_ANInitConnectionClosed = 10, + eQMINASEVDOSessionCloseReasons_ConnectionDenyReceived = 11, + eQMINASEVDOSessionCloseReasons_SilentDeactivation = 12, + eQMINASEVDOSessionCloseReasons_NewESN = 13, + eQMINASEVDOSessionCloseReasons_ANGUAP = 14, + eQMINASEVDOSessionCloseReasons_InvalidPersonalityIndex = 15, + eQMINASEVDOSessionCloseReasons_UATINotMaintained = 16, + eQMINASEVDOSessionCloseReasons_NewNAI = 17, + eQMINASEVDOSessionCloseReasons_EHRPDCredentialsChanged = 18, +}; + +// Enum to describe QMI NAS Forbidden States +enum eQMINASForbiddenStates:UINT8 +{ + eQMINASForbiddenStates_Unknown = 0, + eQMINASForbiddenStates_Forbidden = 1, + eQMINASForbiddenStates_NotForbidden = 2, +}; + +// Enum to describe QMI NAS Force CDMA 1xEV-DO SCP +enum eQMINASForceCDMA1xEVDOSCP:UINT8 +{ + eQMINASForceCDMA1xEVDOSCP_CDMA1xEVDORev0Only = 0, + eQMINASForceCDMA1xEVDOSCP_CDMA1xEVDORevAWithMFPA = 1, + eQMINASForceCDMA1xEVDOSCP_CDMA1xEVDORevAWithMFPAAndEMPA = 2, + eQMINASForceCDMA1xEVDOSCP_CDMA1xEVDORevBWithMMPA = 3, + eQMINASForceCDMA1xEVDOSCP_CDMA1xEVDORevAWithEHRPD = 4, + eQMINASForceCDMA1xEVDOSCP_CDMA1xEVDORevBWithEHRPD = 5, +}; + +// Enum to describe QMI NAS High Speed Call Status +enum eQMINASHighSpeedCallStatus:UINT8 +{ + eQMINASHighSpeedCallStatus_HSDPAAndHSUPANotSupported = 0, + eQMINASHighSpeedCallStatus_HSDPASupported = 1, + eQMINASHighSpeedCallStatus_HSUPASupported = 2, + eQMINASHighSpeedCallStatus_HSDPAAndHSUPASupported = 3, + eQMINASHighSpeedCallStatus_HSDPAPlusSupported = 4, + eQMINASHighSpeedCallStatus_HSDPAPlusAndHSUPASupported = 5, + eQMINASHighSpeedCallStatus_DualCellHSDPAPlusSupported = 6, + eQMINASHighSpeedCallStatus_DualCellHSDPAPlusAndHSUPASupported = 7, + eQMINASHighSpeedCallStatus_DualCellHSDPAPlusAnd64QAMAndHSUPASupported = 8, + eQMINASHighSpeedCallStatus_DualCellHSDPAPlusAnd64QAMSupported = 9, +}; + +// Enum to describe QMI NAS In Use States +enum eQMINASInUseStates:UINT8 +{ + eQMINASInUseStates_Unknown = 0, + eQMINASInUseStates_CurrentServing = 1, + eQMINASInUseStates_Available = 2, +}; + +// Enum to describe QMI NAS LTE Signal Rates +enum eQMINASLTESignalRates:UINT8 +{ + eQMINASLTESignalRates_Default = 0, + eQMINASLTESignalRates_EverySecond = 1, + eQMINASLTESignalRates_Every2Seconds = 2, + eQMINASLTESignalRates_Every3Seconds = 3, + eQMINASLTESignalRates_Every4Seconds = 4, + eQMINASLTESignalRates_Every5Seconds = 5, + eQMINASLTESignalRates_Every6Seconds = 6, + eQMINASLTESignalRates_Every7Seconds = 7, + eQMINASLTESignalRates_Every8Seconds = 8, + eQMINASLTESignalRates_Every9Seconds = 9, + eQMINASLTESignalRates_Every10Seconds = 10, +}; + +// Enum to describe QMI NAS Modem Usage Preferences +enum eQMINASModemUsagePreferences:UINT32 +{ + eQMINASModemUsagePreferences_VoiceCentric = 1, + eQMINASModemUsagePreferences_DataCentric = 2, +}; + +// Enum to describe QMI NAS Network Description Displays +enum eQMINASNetworkDescriptionDisplays:UINT8 +{ + eQMINASNetworkDescriptionDisplays_DoNotDisplay = 0, + eQMINASNetworkDescriptionDisplays_Display = 1, + eQMINASNetworkDescriptionDisplays_Unknown = 255, +}; + +// Enum to describe QMI NAS Network Description Encodings +enum eQMINASNetworkDescriptionEncodings:UINT8 +{ + eQMINASNetworkDescriptionEncodings_UnspecifiedOctet = 0, + eQMINASNetworkDescriptionEncodings_ExtendedProtocolMessage = 1, + eQMINASNetworkDescriptionEncodings_7BitASCII = 2, + eQMINASNetworkDescriptionEncodings_IA5 = 3, + eQMINASNetworkDescriptionEncodings_UNICODE = 4, + eQMINASNetworkDescriptionEncodings_ShiftJIS = 5, + eQMINASNetworkDescriptionEncodings_Korean = 6, + eQMINASNetworkDescriptionEncodings_LatinHebrew = 7, + eQMINASNetworkDescriptionEncodings_Latin = 8, + eQMINASNetworkDescriptionEncodings_GSM7Bit = 9, + eQMINASNetworkDescriptionEncodings_GSMDCS = 10, +}; + +// Enum to describe QMI NAS Network Scan Result +enum eQMINASNetworkScanResult:UINT32 +{ + eQMINASNetworkScanResult_Success = 0, + eQMINASNetworkScanResult_Abort = 1, + eQMINASNetworkScanResult_RadioLinkFailure = 2, +}; + +// Enum to describe QMI NAS Network Scan Types +enum eQMINASNetworkScanTypes:UINT32 +{ + eQMINASNetworkScanTypes_PLMN = 0, + eQMINASNetworkScanTypes_ClosedSubscriberGroup = 1, +}; + +// Enum to describe QMI NAS Network Selection +enum eQMINASNetworkSelection:INT8 +{ + eQMINASNetworkSelection_AutomaticRegistration = 0, + eQMINASNetworkSelection_ManualRegistration = 1, +}; + +// Enum to describe QMI NAS PLMN Name Country Initials +enum eQMINASPLMNNameCountryInitials:UINT8 +{ + eQMINASPLMNNameCountryInitials_DoNotAddCountryInitials = 0, + eQMINASPLMNNameCountryInitials_AddCountryInitials = 1, + eQMINASPLMNNameCountryInitials_Unspecified = 255, +}; + +// Enum to describe QMI NAS PLMN Name Encoding Schemes +enum eQMINASPLMNNameEncodingSchemes:UINT8 +{ + eQMINASPLMNNameEncodingSchemes_ASCII = 0, + eQMINASPLMNNameEncodingSchemes_UCS2LE = 1, +}; + +// Enum to describe QMI NAS PLMN Name Spare Bits +enum eQMINASPLMNNameSpareBits:UINT8 +{ + eQMINASPLMNNameSpareBits_Unknown = 0, + eQMINASPLMNNameSpareBits_Bit8 = 1, + eQMINASPLMNNameSpareBits_Bits78 = 2, + eQMINASPLMNNameSpareBits_Bits68 = 3, + eQMINASPLMNNameSpareBits_Bits58 = 4, + eQMINASPLMNNameSpareBits_Bits48 = 5, + eQMINASPLMNNameSpareBits_Bits38 = 6, + eQMINASPLMNNameSpareBits_Bits28 = 7, +}; + +// Enum to describe QMI NAS PRL Indicator +enum eQMINASPRLIndicator:UINT8 +{ + eQMINASPRLIndicator_SystemNotInPRL = 0, + eQMINASPRLIndicator_SystemIsInPRL = 1, +}; + +// Enum to describe QMI NAS PRL Preferences +enum eQMINASPRLPreferences:UINT16 +{ + eQMINASPRLPreferences_AcquireASideOnly = 1, + eQMINASPRLPreferences_AcquireBSideOnly = 2, + eQMINASPRLPreferences_AcquireAny = 16383, +}; + +// Enum to describe QMI NAS PS Attach Actions +enum eQMINASPSAttachActions:UINT8 +{ + eQMINASPSAttachActions_Attach = 1, + eQMINASPSAttachActions_Detach = 2, +}; + +// Enum to describe QMI NAS Preferred Data Bath +enum eQMINASPreferredDataBath:UINT8 +{ + eQMINASPreferredDataBath_NotPreferred = 0, + eQMINASPreferredDataBath_Preferred = 1, +}; + +// Enum to describe QMI NAS Preferred States +enum eQMINASPreferredStates:UINT8 +{ + eQMINASPreferredStates_Unknown = 0, + eQMINASPreferredStates_Preferred = 1, + eQMINASPreferredStates_NotPreferred = 2, +}; + +// Enum to describe QMI NAS RTRE Configuration +enum eQMINASRTREConfiguration:UINT8 +{ + eQMINASRTREConfiguration_RUIMOnly = 1, + eQMINASRTREConfiguration_InternalSettingsOnly = 2, + eQMINASRTREConfiguration_UseRUIMIfAvailable = 3, + eQMINASRTREConfiguration_GSMOn1X = 4, +}; + +// Enum to describe QMI NAS RX Level +enum eQMINASRXLevel:UINT16 +{ + eQMINASRXLevel_LessThan110dBm = 0, + eQMINASRXLevel_110dBmto109dBm = 1, + eQMINASRXLevel_109dBmto108dBm = 2, + eQMINASRXLevel_108dBmto107dBm = 3, + eQMINASRXLevel_107dBmto106dBm = 4, + eQMINASRXLevel_106dBmto105dBm = 5, + eQMINASRXLevel_105dBmto104dBm = 6, + eQMINASRXLevel_104dBmto103dBm = 7, + eQMINASRXLevel_103dBmto102dBm = 8, + eQMINASRXLevel_102dBmto101dBm = 9, + eQMINASRXLevel_101dBmto100dBm = 10, + eQMINASRXLevel_100dBmto99dBm = 11, + eQMINASRXLevel_99dBmto98dBm = 12, + eQMINASRXLevel_98dBmto97dBm = 13, + eQMINASRXLevel_97dBmto96dBm = 14, + eQMINASRXLevel_96dBmto95dBm = 15, + eQMINASRXLevel_95dBmto94dBm = 16, + eQMINASRXLevel_94dBmto93dBm = 17, + eQMINASRXLevel_93dBmto92dBm = 18, + eQMINASRXLevel_92dBmto91dBm = 19, + eQMINASRXLevel_91dBmto90dBm = 20, + eQMINASRXLevel_90dBmto89dBm = 21, + eQMINASRXLevel_89dBmto88dBm = 22, + eQMINASRXLevel_88dBmto87dBm = 23, + eQMINASRXLevel_87dBmto86dBm = 24, + eQMINASRXLevel_86dBmto85dBm = 25, + eQMINASRXLevel_85dBmto84dBm = 26, + eQMINASRXLevel_84dBmto83dBm = 27, + eQMINASRXLevel_83dBmto82dBm = 28, + eQMINASRXLevel_82dBmto81dBm = 29, + eQMINASRXLevel_81dBmto80dBm = 30, + eQMINASRXLevel_80dBmto79dBm = 31, + eQMINASRXLevel_79dBmto78dBm = 32, + eQMINASRXLevel_78dBmto77dBm = 33, + eQMINASRXLevel_77dBmto76dBm = 34, + eQMINASRXLevel_76dBmto75dBm = 35, + eQMINASRXLevel_75dBmto74dBm = 36, + eQMINASRXLevel_74dBmto73dBm = 37, + eQMINASRXLevel_73dBmto72dBm = 38, + eQMINASRXLevel_72dBmto71dBm = 39, + eQMINASRXLevel_71dBmto70dBm = 40, + eQMINASRXLevel_70dBmto69dBm = 41, + eQMINASRXLevel_69dBmto68dBm = 42, + eQMINASRXLevel_68dBmto67dBm = 43, + eQMINASRXLevel_67dBmto66dBm = 44, + eQMINASRXLevel_66dBmto65dBm = 45, + eQMINASRXLevel_65dBmto64dBm = 46, + eQMINASRXLevel_64dBmto63dBm = 47, + eQMINASRXLevel_63dBmto62dBm = 48, + eQMINASRXLevel_62dBmto61dBm = 49, + eQMINASRXLevel_61dBmto60dBm = 50, + eQMINASRXLevel_60dBmto59dBm = 51, + eQMINASRXLevel_59dBmto58dBm = 52, + eQMINASRXLevel_58dBmto57dBm = 53, + eQMINASRXLevel_57dBmto56dBm = 54, + eQMINASRXLevel_56dBmto55dBm = 55, + eQMINASRXLevel_55dBmto54dBm = 56, + eQMINASRXLevel_54dBmto53dBm = 57, + eQMINASRXLevel_53dBmto52dBm = 58, + eQMINASRXLevel_52dBmto51dBm = 59, + eQMINASRXLevel_51dBmto50dBm = 60, + eQMINASRXLevel_50dBmto49dBm = 61, + eQMINASRXLevel_49dBmto48dBm = 62, + eQMINASRXLevel_GreaterThan48dBm = 63, +}; + +// Enum to describe QMI NAS Radio Access Technologies +enum eQMINASRadioAccessTechnologies:UINT8 +{ + eQMINASRadioAccessTechnologies_GSM = 4, + eQMINASRadioAccessTechnologies_UMTS = 5, + eQMINASRadioAccessTechnologies_LTE = 8, + eQMINASRadioAccessTechnologies_TDSCDMA = 9, + eQMINASRadioAccessTechnologies_NoChange = 255, +}; + +// Enum to describe QMI NAS Radio Interfaces +enum eQMINASRadioInterfaces:UINT8 +{ + eQMINASRadioInterfaces_NoneNoService = 0, + eQMINASRadioInterfaces_CDMA20001x = 1, + eQMINASRadioInterfaces_CDMA2000HRPD = 2, + eQMINASRadioInterfaces_AMPS = 3, + eQMINASRadioInterfaces_GSM = 4, + eQMINASRadioInterfaces_UMTS = 5, + eQMINASRadioInterfaces_LTE = 8, + eQMINASRadioInterfaces_TDSCDMA = 9, +}; + +// Enum to describe QMI NAS Radio System Modes +enum eQMINASRadioSystemModes:UINT32 +{ + eQMINASRadioSystemModes_NoService = 0, + eQMINASRadioSystemModes_Acquiring = 1, + eQMINASRadioSystemModes_InService = 2, +}; + +// Enum to describe QMI NAS Register Actions +enum eQMINASRegisterActions:UINT8 +{ + eQMINASRegisterActions_Automatic = 1, + eQMINASRegisterActions_Manual = 2, +}; + +// Enum to describe QMI NAS Registered Networks +enum eQMINASRegisteredNetworks:UINT8 +{ + eQMINASRegisteredNetworks_Unknown = 0, + eQMINASRegisteredNetworks_3GPP2 = 1, + eQMINASRegisteredNetworks_3GPP = 2, +}; + +// Enum to describe QMI NAS Registration Domains +enum eQMINASRegistrationDomains:UINT32 +{ + eQMINASRegistrationDomains_NotApplicable = 0, + eQMINASRegistrationDomains_CSOnly = 1, + eQMINASRegistrationDomains_PSOnly = 2, + eQMINASRegistrationDomains_CSAndPS = 3, + eQMINASRegistrationDomains_LimitedService = 4, +}; + +// Enum to describe QMI NAS Registration Restrictions +enum eQMINASRegistrationRestrictions:UINT32 +{ + eQMINASRegistrationRestrictions_Unrestricted = 0, + eQMINASRegistrationRestrictions_CampedOnly = 1, + eQMINASRegistrationRestrictions_Limited = 2, +}; + +// Enum to describe QMI NAS Registration States +enum eQMINASRegistrationStates:UINT8 +{ + eQMINASRegistrationStates_NASNotRegistered = 0, + eQMINASRegistrationStates_NASRegistered = 1, + eQMINASRegistrationStates_NASNotRegisteredSearching = 2, + eQMINASRegistrationStates_NASRegistrationDenied = 3, + eQMINASRegistrationStates_RegistrationStateUnknown = 4, +}; + +// Enum to describe QMI NAS Report Rate +enum eQMINASReportRate:UINT8 +{ + eQMINASReportRate_ReportUsingDefaultConfig = 0, + eQMINASReportRate_ReportEvery1Second = 1, + eQMINASReportRate_ReportEvery2Second = 2, + eQMINASReportRate_ReportEvery3Second = 3, + eQMINASReportRate_ReportEvery4Second = 4, + eQMINASReportRate_ReportEvery5Second = 5, +}; + +// Enum to describe QMI NAS Revision +enum eQMINASRevision:UINT8 +{ + eQMINASRevision_JSTD088 = 1, + eQMINASRevision_IS95RevA = 3, + eQMINASRevision_IS95RevB = 4, + eQMINASRevision_IS2000 = 6, + eQMINASRevision_IS2000RelA = 7, + eQMINASRevision_IS2000RelB = 8, + eQMINASRevision_IS2000RelC = 9, + eQMINASRevision_IS2000RelCMI = 10, + eQMINASRevision_IS2000RelD = 11, +}; + +// Enum to describe QMI NAS Roam Status +enum eQMINASRoamStatus:UINT8 +{ + eQMINASRoamStatus_Off = 0, + eQMINASRoamStatus_On = 1, + eQMINASRoamStatus_Blinking = 2, + eQMINASRoamStatus_OutOfNeighborhood = 3, + eQMINASRoamStatus_OutOfBuilding = 4, + eQMINASRoamStatus_PreferredSystem = 5, + eQMINASRoamStatus_AvailableSystem = 6, + eQMINASRoamStatus_AlliancePartner = 7, + eQMINASRoamStatus_PremiumPartner = 8, + eQMINASRoamStatus_FullService = 9, + eQMINASRoamStatus_PartialService = 10, + eQMINASRoamStatus_BannerIsOn = 11, + eQMINASRoamStatus_BannerIsOff = 12, +}; + +// Enum to describe QMI NAS Roaming Indicators +enum eQMINASRoamingIndicators:UINT8 +{ + eQMINASRoamingIndicators_Roaming = 0, + eQMINASRoamingIndicators_Home = 1, + eQMINASRoamingIndicators_RoamingPartner = 2, +}; + +// Enum to describe QMI NAS Roaming Preferences +enum eQMINASRoamingPreferences:UINT8 +{ + eQMINASRoamingPreferences_Automatic = 0, + eQMINASRoamingPreferences_HomeOnly = 1, + eQMINASRoamingPreferences_RoamingOnly = 2, + eQMINASRoamingPreferences_HomeRoaming = 3, +}; + +// Enum to describe QMI NAS Roaming Preferences 2 +enum eQMINASRoamingPreferences2:UINT16 +{ + eQMINASRoamingPreferences2_AcquireWhenRoamingIndicatorOff = 1, + eQMINASRoamingPreferences2_AcquireWhenRoamingIndicatorNotOff = 2, + eQMINASRoamingPreferences2_AcquireWhenRoamingIndicatorNotFlashing = 3, + eQMINASRoamingPreferences2_AcquireAny = 255, +}; + +// Enum to describe QMI NAS Roaming States +enum eQMINASRoamingStates:UINT8 +{ + eQMINASRoamingStates_Unknown = 0, + eQMINASRoamingStates_Home = 1, + eQMINASRoamingStates_Roam = 2, +}; + +// Enum to describe QMI NAS SIM Reject States +enum eQMINASSIMRejectStates:UINT32 +{ + eQMINASSIMRejectStates_NotAvailable = 0, + eQMINASSIMRejectStates_Available = 1, + eQMINASSIMRejectStates_CSInvalid = 2, + eQMINASSIMRejectStates_PSInvalid = 3, + eQMINASSIMRejectStates_CSAndPSInvalid = 4, +}; + +// Enum to describe QMI NAS SINR Levels +enum eQMINASSINRLevels:UINT8 +{ + eQMINASSINRLevels_Negative9dB = 0, + eQMINASSINRLevels_Negative6dB = 1, + eQMINASSINRLevels_Negative45dB = 2, + eQMINASSINRLevels_Negative3dB = 3, + eQMINASSINRLevels_Negative2dB = 4, + eQMINASSINRLevels_1dB = 5, + eQMINASSINRLevels_3dB = 6, + eQMINASSINRLevels_6dB = 7, + eQMINASSINRLevels_9dB = 8, +}; + +// Enum to describe QMI NAS SMS Domains +enum eQMINASSMSDomains:UINT32 +{ + eQMINASSMSDomains_NoSMSSupport = 0, + eQMINASSMSDomains_SMSSupportedOverIMS = 1, + eQMINASSMSDomains_SMSSupportedOver1X = 2, + eQMINASSMSDomains_SMSSupportedOver3GPP = 3, +}; + +// Enum to describe QMI NAS Service Domain Prefs +enum eQMINASServiceDomainPrefs:UINT32 +{ + eQMINASServiceDomainPrefs_CircuitSwitched = 0, + eQMINASServiceDomainPrefs_PacketSwitched = 1, + eQMINASServiceDomainPrefs_CircuitPacketSwitched = 2, + eQMINASServiceDomainPrefs_PacketSwitchedAttach = 3, + eQMINASServiceDomainPrefs_PacketSwitchedDetach = 4, + eQMINASServiceDomainPrefs_PacketSwitchedDetachWithNoChange = 5, +}; + +// Enum to describe QMI NAS Service Domains +enum eQMINASServiceDomains:UINT8 +{ + eQMINASServiceDomains_NoService = 0, + eQMINASServiceDomains_CircuitSwitched = 1, +}; + +// Enum to describe QMI NAS Service Option Actions +enum eQMINASServiceOptionActions:UINT8 +{ + eQMINASServiceOptionActions_Add = 0, + eQMINASServiceOptionActions_Replace = 1, + eQMINASServiceOptionActions_Delete = 2, + eQMINASServiceOptionActions_NoChange = 3, +}; + +// Enum to describe QMI NAS Service Status +enum eQMINASServiceStatus:UINT8 +{ + eQMINASServiceStatus_NoService = 0, + eQMINASServiceStatus_LimitedService = 1, + eQMINASServiceStatus_ServiceAvailable = 2, + eQMINASServiceStatus_LimitedRegionalService = 3, + eQMINASServiceStatus_PowerSaveOrDeepSleep = 4, +}; + +// Enum to describe QMI NAS Standby Preference +enum eQMINASStandbyPreference:UINT8 +{ + eQMINASStandbyPreference_SingleStandby = 1, + eQMINASStandbyPreference_DualStandbyWithTuneAway = 2, + eQMINASStandbyPreference_DualStandbyWithoutTuneAway = 4, + eQMINASStandbyPreference_AutomaticModeWithTuneAway = 5, + eQMINASStandbyPreference_AutomaticModeWithoutTuneAway = 6, + eQMINASStandbyPreference_TripleStandby = 7, +}; + +// Enum to describe QMI NAS Subscription Type +enum eQMINASSubscriptionType:UINT8 +{ + eQMINASSubscriptionType_PrimarySubscription = 0, + eQMINASSubscriptionType_SecondarySubscription = 1, + eQMINASSubscriptionType_TertiarySubscription = 2, +}; + +// Enum to describe QMI NAS System Forbidden +enum eQMINASSystemForbidden:UINT8 +{ + eQMINASSystemForbidden_SystemIsNotForbidden = 0, + eQMINASSystemForbidden_SystemIsForbidden = 1, +}; + +// Enum to describe QMI NAS System Preferences +enum eQMINASSystemPreferences:UINT8 +{ + eQMINASSystemPreferences_Automatic = 0, + eQMINASSystemPreferences_AutomaticA = 1, + eQMINASSystemPreferences_AutomaticB = 2, +}; + +// Enum to describe QMI NAS System Service Capabilities +enum eQMINASSystemServiceCapabilities:UINT8 +{ + eQMINASSystemServiceCapabilities_NoService = 0, + eQMINASSystemServiceCapabilities_CircuitSwitchedOnly = 1, + eQMINASSystemServiceCapabilities_PacketSwitchedOnly = 2, + eQMINASSystemServiceCapabilities_CircuitSwitchedAndPacketSwitched = 3, + eQMINASSystemServiceCapabilities_Camped = 4, +}; + +// Enum to describe QMI NAS Tech Pref Durations +enum eQMINASTechPrefDurations:UINT8 +{ + eQMINASTechPrefDurations_Permanent = 0, + eQMINASTechPrefDurations_PowerCycle = 1, +}; + +// Enum to describe QMI NAS Tech Prefs +enum eQMINASTechPrefs:UINT8 +{ + eQMINASTechPrefs_Automatic = 0, + eQMINASTechPrefs_3GPP2 = 1, + eQMINASTechPrefs_3GPP = 2, + eQMINASTechPrefs_Invalid = 3, +}; + +// Enum to describe QMI NAS Tri-Status +enum eQMINASTriStatus:UINT32 +{ + eQMINASTriStatus_False = 0, + eQMINASTriStatus_True = 1, + eQMINASTriStatus_Unknown = 2, +}; + +// Enum to describe QMI NAS Voice Domains +enum eQMINASVoiceDomains:UINT32 +{ + eQMINASVoiceDomains_NoVoiceSupport = 0, + eQMINASVoiceDomains_VoiceSupportedOverIMS = 1, + eQMINASVoiceDomains_VoiceSupportedOver1X = 2, + eQMINASVoiceDomains_VoiceSupportedOver3GPP = 3, +}; + +// Enum to describe QMI NAS WCDMA RRC States +enum eQMINASWCDMARRCStates:UINT32 +{ + eQMINASWCDMARRCStates_Disconnected = 0, + eQMINASWCDMARRCStates_CellPCH = 1, + eQMINASWCDMARRCStates_URAPCH = 2, + eQMINASWCDMARRCStates_CellFACH = 3, + eQMINASWCDMARRCStates_CellDCH = 4, +}; + +// Enum to describe QMI OMA HFA Done States +enum eQMIOMAHFADoneStates:UINT8 +{ + eQMIOMAHFADoneStates_None = 0, + eQMIOMAHFADoneStates_Succeeded = 1, + eQMIOMAHFADoneStates_Failed = 2, +}; + +// Enum to describe QMI OMA Selections +enum eQMIOMASelections:UINT8 +{ + eQMIOMASelections_Reject = 0, + eQMIOMASelections_Accept = 1, +}; + +// Enum to describe QMI OMA Session Failure Reasons +enum eQMIOMASessionFailureReasons:UINT8 +{ + eQMIOMASessionFailureReasons_Unknown = 0, + eQMIOMASessionFailureReasons_NetworkUnavailable = 1, + eQMIOMASessionFailureReasons_ServerUnavailable = 2, + eQMIOMASessionFailureReasons_AuthenticationFailed = 3, + eQMIOMASessionFailureReasons_MaxRetryExceeded = 4, + eQMIOMASessionFailureReasons_SessionCancelled = 5, +}; + +// Enum to describe QMI OMA Session States +enum eQMIOMASessionStates:UINT8 +{ + eQMIOMASessionStates_CompleteInfoUpdated = 0, + eQMIOMASessionStates_CompleteInfoUnavailable = 1, + eQMIOMASessionStates_Failed = 2, + eQMIOMASessionStates_Retrying = 3, + eQMIOMASessionStates_Connecting = 4, + eQMIOMASessionStates_Connected = 5, + eQMIOMASessionStates_Authenticated = 6, + eQMIOMASessionStates_MDNDownloaded = 7, + eQMIOMASessionStates_MSIDDownloaded = 8, + eQMIOMASessionStates_PRLDownloaded = 9, + eQMIOMASessionStates_MIPProfileDownloaded = 10, +}; + +// Enum to describe QMI OMA Session Types +enum eQMIOMASessionTypes:UINT8 +{ + eQMIOMASessionTypes_ClientInitiatedDeviceConfigure = 0, + eQMIOMASessionTypes_ClientInitiatedPRLUpdate = 1, + eQMIOMASessionTypes_ClientInitiatedHandsFreeActivation = 2, + eQMIOMASessionTypes_DeviceInitiatedHandsFreeActivation = 3, + eQMIOMASessionTypes_NetworkInitiatedPRLUpdate = 4, + eQMIOMASessionTypes_NetworkInitiatedDeviceConfigure = 5, +}; + +// Enum to describe QMI PBM AAS Operations +enum eQMIPBMAASOperations:UINT8 +{ + eQMIPBMAASOperations_Add = 0, + eQMIPBMAASOperations_Modify = 1, + eQMIPBMAASOperations_Delete = 2, +}; + +// Enum to describe QMI PBM Field Types +enum eQMIPBMFieldTypes:UINT32 +{ + eQMIPBMFieldTypes_Email = 0, + eQMIPBMFieldTypes_AdditionalNumber = 1, + eQMIPBMFieldTypes_SecondName = 2, + eQMIPBMFieldTypes_Group = 3, +}; + +// Enum to describe QMI PBM Mapping Types +enum eQMIPBMMappingTypes:UINT32 +{ + eQMIPBMMappingTypes_Linear = 0, + eQMIPBMMappingTypes_Nonlinear = 1, +}; + +// Enum to describe QMI PBM Number Plans +enum eQMIPBMNumberPlans:UINT8 +{ + eQMIPBMNumberPlans_Unknown = 0, + eQMIPBMNumberPlans_ISDN = 1, + eQMIPBMNumberPlans_Data = 2, + eQMIPBMNumberPlans_Telex = 3, + eQMIPBMNumberPlans_National = 4, + eQMIPBMNumberPlans_Private = 5, +}; + +// Enum to describe QMI PBM Number Types +enum eQMIPBMNumberTypes:UINT8 +{ + eQMIPBMNumberTypes_Unknown = 0, + eQMIPBMNumberTypes_International = 1, + eQMIPBMNumberTypes_National = 2, + eQMIPBMNumberTypes_NetworkSpecific = 3, + eQMIPBMNumberTypes_DedicatedAccess = 4, +}; + +// Enum to describe QMI PBM Operations +enum eQMIPBMOperations:UINT8 +{ + eQMIPBMOperations_Add = 1, + eQMIPBMOperations_Modify = 2, + eQMIPBMOperations_Delete = 3, +}; + +// Enum to describe QMI PBM Phonebook Types +enum eQMIPBMPhonebookTypes:UINT16 +{ + eQMIPBMPhonebookTypes_AbbreviatedDialingNumber = 1, + eQMIPBMPhonebookTypes_FixedDialingNumber = 2, + eQMIPBMPhonebookTypes_MobileSubscriberIntegratedServicesDigitalNetwork = 4, + eQMIPBMPhonebookTypes_MailBoxDialingNumber = 8, + eQMIPBMPhonebookTypes_ServiceDialingNumber = 16, + eQMIPBMPhonebookTypes_BarredDialingNumber = 32, + eQMIPBMPhonebookTypes_LastNumberDialed = 64, + eQMIPBMPhonebookTypes_MailBoxNumber = 128, + eQMIPBMPhonebookTypes_GroupingInformationAlphaString = 256, + eQMIPBMPhonebookTypes_AdditionalNumberAlphaString = 512, +}; + +// Enum to describe QMI PBM Protection Methods +enum eQMIPBMProtectionMethods:UINT32 +{ + eQMIPBMProtectionMethods_AlwaysAllowed = 0, + eQMIPBMProtectionMethods_NeverAllowed = 1, + eQMIPBMProtectionMethods_AllowedOnAllPINsVerified = 2, + eQMIPBMProtectionMethods_AllowedOnAnyPINVerified = 3, + eQMIPBMProtectionMethods_AllowedOnOnePINVerified = 4, +}; + +// Enum to describe QMI PBM Refresh Status +enum eQMIPBMRefreshStatus:UINT8 +{ + eQMIPBMRefreshStatus_RefreshStart = 1, + eQMIPBMRefreshStatus_RefreshEnd = 2, +}; + +// Enum to describe QMI PBM Session Types +enum eQMIPBMSessionTypes:UINT8 +{ + eQMIPBMSessionTypes_GWPrimary = 0, + eQMIPBMSessionTypes_1xPrimary = 1, + eQMIPBMSessionTypes_GWSecondary = 2, + eQMIPBMSessionTypes_1xSecondary = 3, + eQMIPBMSessionTypes_NonProvisioningOnSlot1 = 4, + eQMIPBMSessionTypes_NonProvisioningOnSlot2 = 5, + eQMIPBMSessionTypes_GlobalPhonebookOnSlot1 = 6, + eQMIPBMSessionTypes_GlobalPhonebookOnSlot2 = 7, + eQMIPBMSessionTypes_GWTertiary = 8, + eQMIPBMSessionTypes_1xTertiary = 9, + eQMIPBMSessionTypes_GlobalPhonebookOnSlot3 = 10, +}; + +// Enum to describe QMI PBM States +enum eQMIPBMStates:UINT8 +{ + eQMIPBMStates_Ready = 0, + eQMIPBMStates_NotReady = 1, + eQMIPBMStates_NotAvailable = 2, + eQMIPBMStates_PINRestriction = 3, + eQMIPBMStates_PUKRestriction = 4, + eQMIPBMStates_Invalidated = 5, + eQMIPBMStates_Sync = 6, +}; + +// Enum to describe QMI PBM Subscription Types +enum eQMIPBMSubscriptionTypes:UINT8 +{ + eQMIPBMSubscriptionTypes_Primary = 0, + eQMIPBMSubscriptionTypes_Secondary = 1, + eQMIPBMSubscriptionTypes_Tertiary = 2, +}; + +// Enum to describe QMI PDC Configurations +enum eQMIPDCConfigurations:UINT32 +{ + eQMIPDCConfigurations_Platform = 0, + eQMIPDCConfigurations_Software = 1, +}; + +// Enum to describe QMI PDP Types +enum eQMIPDPTypes:UINT8 +{ + eQMIPDPTypes_PDPIPv4 = 0, + eQMIPDPTypes_PDPPPP = 1, + eQMIPDPTypes_PDPIPv6 = 2, + eQMIPDPTypes_PDPIPv4OrIPv6 = 3, +}; + +// Enum to describe QMI PDS APN Types +enum eQMIPDSAPNTypes:UINT32 +{ + eQMIPDSAPNTypes_EmergencySUPL = 0, + eQMIPDSAPNTypes_HomeSUPL = 1, +}; + +// Enum to describe QMI PDS Altitude Source +enum eQMIPDSAltitudeSource:UINT8 +{ + eQMIPDSAltitudeSource_Unknown = 0, + eQMIPDSAltitudeSource_GPS = 1, + eQMIPDSAltitudeSource_CellID = 2, + eQMIPDSAltitudeSource_EnhancedCellID = 3, + eQMIPDSAltitudeSource_WiFi = 4, + eQMIPDSAltitudeSource_Terrestrial = 5, + eQMIPDSAltitudeSource_TerrestrialHybrid = 6, + eQMIPDSAltitudeSource_AltitudeDatabase = 7, + eQMIPDSAltitudeSource_BarometricAltimeter = 8, + eQMIPDSAltitudeSource_Other = 9, +}; + +// Enum to describe QMI PDS Blanking Enable +enum eQMIPDSBlankingEnable:UINT8 +{ + eQMIPDSBlankingEnable_DisableBlanking = 0, + eQMIPDSBlankingEnable_EnableBlankingUnconditionally = 1, + eQMIPDSBlankingEnable_EnableBlankingConditionally = 2, + eQMIPDSBlankingEnable_SimulateIMDJamming = 3, +}; + +// Enum to describe QMI PDS COG Time Types +enum eQMIPDSCOGTimeTypes:UINT32 +{ + eQMIPDSCOGTimeTypes_UTCTime = 0, + eQMIPDSCOGTimeTypes_GPSTime = 1, +}; + +// Enum to describe QMI PDS Calendar Days +enum eQMIPDSCalendarDays:UINT8 +{ + eQMIPDSCalendarDays_Sunday = 0, + eQMIPDSCalendarDays_Monday = 1, + eQMIPDSCalendarDays_Tuesday = 2, + eQMIPDSCalendarDays_Wednesday = 3, + eQMIPDSCalendarDays_Thursday = 4, + eQMIPDSCalendarDays_Friday = 5, + eQMIPDSCalendarDays_Saturday = 6, +}; + +// Enum to describe QMI PDS Calendar Months +enum eQMIPDSCalendarMonths:UINT8 +{ + eQMIPDSCalendarMonths_January = 0, + eQMIPDSCalendarMonths_February = 1, + eQMIPDSCalendarMonths_March = 2, + eQMIPDSCalendarMonths_April = 3, + eQMIPDSCalendarMonths_May = 4, + eQMIPDSCalendarMonths_June = 5, + eQMIPDSCalendarMonths_July = 6, + eQMIPDSCalendarMonths_August = 7, + eQMIPDSCalendarMonths_September = 8, + eQMIPDSCalendarMonths_October = 9, + eQMIPDSCalendarMonths_November = 10, + eQMIPDSCalendarMonths_December = 11, +}; + +// Enum to describe QMI PDS Comm Event Protocols +enum eQMIPDSCommEventProtocols:UINT8 +{ + eQMIPDSCommEventProtocols_UMTSUserPlaneSUPL = 0, + eQMIPDSCommEventProtocols_1X = 1, + eQMIPDSCommEventProtocols_UMTSControlPlaneWCDMA = 2, + eQMIPDSCommEventProtocols_UMTSControlPlaneGSM = 3, + eQMIPDSCommEventProtocols_V1V2 = 4, + eQMIPDSCommEventProtocols_KDDI = 5, + eQMIPDSCommEventProtocols_XTRADataDownload = 6, + eQMIPDSCommEventProtocols_SNTPTimeDownload = 7, + eQMIPDSCommEventProtocols_1XControlPlane = 8, + eQMIPDSCommEventProtocols_Unknown = 255, +}; + +// Enum to describe QMI PDS Comm Event Types +enum eQMIPDSCommEventTypes:UINT8 +{ + eQMIPDSCommEventTypes_Begin = 0, + eQMIPDSCommEventTypes_Connected = 1, + eQMIPDSCommEventTypes_Failure = 2, + eQMIPDSCommEventTypes_Done = 3, + eQMIPDSCommEventTypes_OtherFailure = 4, +}; + +// Enum to describe QMI PDS Config +enum eQMIPDSConfig:UINT8 +{ + eQMIPDSConfig_PersistentDisabled = 0, + eQMIPDSConfig_PersistentEnabled = 1, + eQMIPDSConfig_NotPersistentDisabled = 240, + eQMIPDSConfig_NotPersistentEnabled = 241, +}; + +// Enum to describe QMI PDS Cradle Mount State +enum eQMIPDSCradleMountState:UINT8 +{ + eQMIPDSCradleMountState_NotMounted = 0, + eQMIPDSCradleMountState_Mounted = 1, + eQMIPDSCradleMountState_Unknown = 2, +}; + +// Enum to describe QMI PDS EFS File Operations +enum eQMIPDSEFSFileOperations:UINT8 +{ + eQMIPDSEFSFileOperations_Write = 0, + eQMIPDSEFSFileOperations_Delete = 1, +}; + +// Enum to describe QMI PDS Emergency Position Session Events +enum eQMIPDSEmergencyPositionSessionEvents:UINT32 +{ + eQMIPDSEmergencyPositionSessionEvents_EarlyStart = 0, + eQMIPDSEmergencyPositionSessionEvents_GSMNetworkInitiatedCP = 1, + eQMIPDSEmergencyPositionSessionEvents_WCDMANetworkInitiatedCP = 2, + eQMIPDSEmergencyPositionSessionEvents_WCDMANetworkInitiatedSUPL = 3, +}; + +// Enum to describe QMI PDS Emergency Protocol Configs +enum eQMIPDSEmergencyProtocolConfigs:UINT32 +{ + eQMIPDSEmergencyProtocolConfigs_UserControlPlaneProtocol = 0, + eQMIPDSEmergencyProtocolConfigs_SUPL20EmergencyServices = 1, +}; + +// Enum to describe QMI PDS Encryption Algorithm +enum eQMIPDSEncryptionAlgorithm:UINT8 +{ + eQMIPDSEncryptionAlgorithm_PDSMPDHashAlgorithmSHA1 = 0, + eQMIPDSEncryptionAlgorithm_PDSMPDHashAlgorithmMax = 1, + eQMIPDSEncryptionAlgorithm_PDSMPDHashAlgorithmNone = 255, +}; + +// Enum to describe QMI PDS Extended Position Failures +enum eQMIPDSExtendedPositionFailures:UINT32 +{ + eQMIPDSExtendedPositionFailures_NoService = 0, + eQMIPDSExtendedPositionFailures_NoConnection = 1, + eQMIPDSExtendedPositionFailures_ConnectionFailure = 2, + eQMIPDSExtendedPositionFailures_PDEReject = 3, + eQMIPDSExtendedPositionFailures_StaleBaseStationInfo = 4, + eQMIPDSExtendedPositionFailures_NormalSessionEnd = 5, + eQMIPDSExtendedPositionFailures_LocationServiceReset = 6, + eQMIPDSExtendedPositionFailures_PPMPostFixCalculationTimeout = 7, + eQMIPDSExtendedPositionFailures_PPMPreFixCalculationTimeout = 8, + eQMIPDSExtendedPositionFailures_IS801ServerTimeout = 9, + eQMIPDSExtendedPositionFailures_IS801PayloadError = 10, + eQMIPDSExtendedPositionFailures_VXLCSAgentAuthenticationFailure = 11, + eQMIPDSExtendedPositionFailures_PreferredFixMethodFailure = 12, +}; + +// Enum to describe QMI PDS External Power State +enum eQMIPDSExternalPowerState:UINT8 +{ + eQMIPDSExternalPowerState_NotConnected = 0, + eQMIPDSExternalPowerState_Connected = 1, + eQMIPDSExternalPowerState_Unknown = 2, +}; + +// Enum to describe QMI PDS Force Receiver Off +enum eQMIPDSForceReceiverOff:UINT8 +{ + eQMIPDSForceReceiverOff_Disable = 0, + eQMIPDSForceReceiverOff_Enable = 1, +}; + +// Enum to describe QMI PDS IMD Jamming Bands +enum eQMIPDSIMDJammingBands:UINT32 +{ + eQMIPDSIMDJammingBands_GPS = 0, + eQMIPDSIMDJammingBands_GLONASS = 1, +}; + +// Enum to describe QMI PDS IMD Jamming States +enum eQMIPDSIMDJammingStates:UINT8 +{ + eQMIPDSIMDJammingStates_Terminate = 0, + eQMIPDSIMDJammingStates_Initiate = 1, +}; + +// Enum to describe QMI PDS IS801 CP NI Reject Reasons +enum eQMIPDSIS801CPNIRejectReasons:UINT32 +{ + eQMIPDSIS801CPNIRejectReasons_DecodeError = 0, + eQMIPDSIS801CPNIRejectReasons_NoResources = 1, + eQMIPDSIS801CPNIRejectReasons_EngineLocked = 2, + eQMIPDSIS801CPNIRejectReasons_ResetInProgress = 3, + eQMIPDSIS801CPNIRejectReasons_MOSessionInProgress = 4, + eQMIPDSIS801CPNIRejectReasons_InternalError = 5, +}; + +// Enum to describe QMI PDS Inject Time Types +enum eQMIPDSInjectTimeTypes:UINT32 +{ + eQMIPDSInjectTimeTypes_UTCTime = 0, + eQMIPDSInjectTimeTypes_GPSTime = 1, +}; + +// Enum to describe QMI PDS Injected Position Sources +enum eQMIPDSInjectedPositionSources:UINT8 +{ + eQMIPDSInjectedPositionSources_Unknown = 0, + eQMIPDSInjectedPositionSources_GPS = 1, + eQMIPDSInjectedPositionSources_CellID = 2, + eQMIPDSInjectedPositionSources_EnhancedCellID = 3, + eQMIPDSInjectedPositionSources_WiFi = 4, + eQMIPDSInjectedPositionSources_Terrestial = 5, + eQMIPDSInjectedPositionSources_TerrestialHybrid = 6, + eQMIPDSInjectedPositionSources_Other = 7, +}; + +// Enum to describe QMI PDS Mediums +enum eQMIPDSMediums:UINT8 +{ + eQMIPDSMediums_WWAN = 0, +}; + +// Enum to describe QMI PDS Method States +enum eQMIPDSMethodStates:UINT8 +{ + eQMIPDSMethodStates_Disabled = 0, + eQMIPDSMethodStates_Enabled = 1, + eQMIPDSMethodStates_NotSupported = 255, +}; + +// Enum to describe QMI PDS Motion Modes +enum eQMIPDSMotionModes:UINT8 +{ + eQMIPDSMotionModes_Unknown = 0, + eQMIPDSMotionModes_Pedestrian = 1, + eQMIPDSMotionModes_Vehicle = 2, +}; + +// Enum to describe QMI PDS Motion States +enum eQMIPDSMotionStates:UINT8 +{ + eQMIPDSMotionStates_Unknown = 0, + eQMIPDSMotionStates_Stationary = 1, + eQMIPDSMotionStates_InMotion = 2, +}; + +// Enum to describe QMI PDS Motion Submodes +enum eQMIPDSMotionSubmodes:UINT8 +{ + eQMIPDSMotionSubmodes_Unknown = 0, + eQMIPDSMotionSubmodes_Walking = 1, + eQMIPDSMotionSubmodes_Running = 2, +}; + +// Enum to describe QMI PDS NMEA Reporting Options +enum eQMIPDSNMEAReportingOptions:UINT8 +{ + eQMIPDSNMEAReportingOptions_1HzFromTimeRequestedUntilFinalPositionDetermination = 0, + eQMIPDSNMEAReportingOptions_FinalPositionDeterminationOnly = 1, +}; + +// Enum to describe QMI PDS NMEA Sentence Operating Modes +enum eQMIPDSNMEASentenceOperatingModes:UINT8 +{ + eQMIPDSNMEASentenceOperatingModes_Standalone = 0, + eQMIPDSNMEASentenceOperatingModes_MSBased = 1, + eQMIPDSNMEASentenceOperatingModes_MSAssisted = 2, + eQMIPDSNMEASentenceOperatingModes_Unknown = 255, +}; + +// Enum to describe QMI PDS Network Mode +enum eQMIPDSNetworkMode:UINT8 +{ + eQMIPDSNetworkMode_UMTS = 0, + eQMIPDSNetworkMode_CDMA = 1, +}; + +// Enum to describe QMI PDS ODP States +enum eQMIPDSODPStates:UINT8 +{ + eQMIPDSODPStates_Disables = 0, + eQMIPDSODPStates_EnabledLowPowerMode = 1, + eQMIPDSODPStates_EnabledReadyMode = 2, +}; + +// Enum to describe QMI PDS Operation Types +enum eQMIPDSOperationTypes:UINT8 +{ + eQMIPDSOperationTypes_Standalone = 0, + eQMIPDSOperationTypes_MSBased = 1, + eQMIPDSOperationTypes_MSAssisted = 2, +}; + +// Enum to describe QMI PDS Output Devices +enum eQMIPDSOutputDevices:UINT8 +{ + eQMIPDSOutputDevices_NoneDisabled = 0, + eQMIPDSOutputDevices_USB = 1, + eQMIPDSOutputDevices_UART1 = 2, + eQMIPDSOutputDevices_UART2 = 3, + eQMIPDSOutputDevices_SharedMemory = 4, +}; + +// Enum to describe QMI PDS PDN Types +enum eQMIPDSPDNTypes:UINT32 +{ + eQMIPDSPDNTypes_IPv4 = 0, + eQMIPDSPDNTypes_IPv6 = 1, + eQMIPDSPDNTypes_IPv4AndIPv6 = 2, +}; + +// Enum to describe QMI PDS Privacy Modes +enum eQMIPDSPrivacyModes:UINT8 +{ + eQMIPDSPrivacyModes_NoNotifyVerify = 0, + eQMIPDSPrivacyModes_Notify = 1, + eQMIPDSPrivacyModes_NotifyVerifyAllowNoResponse = 2, + eQMIPDSPrivacyModes_NotifyVerifyRequireResponse = 3, + eQMIPDSPrivacyModes_PrivacyOverride = 4, +}; + +// Enum to describe QMI PDS Reliability Indicator +enum eQMIPDSReliabilityIndicator:UINT8 +{ + eQMIPDSReliabilityIndicator_NotSet = 0, + eQMIPDSReliabilityIndicator_VeryLow = 1, + eQMIPDSReliabilityIndicator_Low = 2, + eQMIPDSReliabilityIndicator_Medium = 3, + eQMIPDSReliabilityIndicator_High = 4, +}; + +// Enum to describe QMI PDS Report Security Challenge +enum eQMIPDSReportSecurityChallenge:UINT8 +{ + eQMIPDSReportSecurityChallenge_Disable = 0, + eQMIPDSReportSecurityChallenge_Enable = 1, +}; + +// Enum to describe QMI PDS Reporting State +enum eQMIPDSReportingState:UINT8 +{ + eQMIPDSReportingState_StopReporting = 0, + eQMIPDSReportingState_StartReporting = 1, +}; + +// Enum to describe QMI PDS Reset Reasons +enum eQMIPDSResetReasons:UINT32 +{ + eQMIPDSResetReasons_PositionEngine = 0, + eQMIPDSResetReasons_GNSSBackgroundSCan = 1, + eQMIPDSResetReasons_InjectClockInconsistency = 2, + eQMIPDSResetReasons_GPSSubframeMisalignment = 3, + eQMIPDSResetReasons_DecodedTimeInconsistency = 4, + eQMIPDSResetReasons_CodeConsistencyError = 5, + eQMIPDSResetReasons_SoftResetFromINTMSError = 6, + eQMIPDSResetReasons_SoftResetFromRFFailure = 7, + eQMIPDSResetReasons_ChannelControllerSoftError = 8, + eQMIPDSResetReasons_ChannelControllerHardError = 9, +}; + +// Enum to describe QMI PDS Reset States +enum eQMIPDSResetStates:UINT32 +{ + eQMIPDSResetStates_InProgress = 0, + eQMIPDSResetStates_Completed = 1, + eQMIPDSResetStates_UnableToInitialize = 2, + eQMIPDSResetStates_E911CallInProgress = 3, +}; + +// Enum to describe QMI PDS SBAS States +enum eQMIPDSSBASStates:UINT8 +{ + eQMIPDSSBASStates_Disabled = 0, + eQMIPDSSBASStates_Enabled = 1, + eQMIPDSSBASStates_Unknown = 255, +}; + +// Enum to describe QMI PDS SPI State +enum eQMIPDSSPIState:UINT8 +{ + eQMIPDSSPIState_DeviceIsNonstationary = 0, + eQMIPDSSPIState_DeviceIsStationary = 1, +}; + +// Enum to describe QMI PDS SUPL Data Coding Schemes +enum eQMIPDSSUPLDataCodingSchemes:UINT8 +{ + eQMIPDSSUPLDataCodingSchemes_UTF8 = 0, + eQMIPDSSUPLDataCodingSchemes_UCS2 = 1, + eQMIPDSSUPLDataCodingSchemes_GSM = 2, + eQMIPDSSUPLDataCodingSchemes_Unknown = 255, +}; + +// Enum to describe QMI PDS SUPL Hash Algorithms +enum eQMIPDSSUPLHashAlgorithms:UINT32 +{ + eQMIPDSSUPLHashAlgorithms_SHA1 = 0, + eQMIPDSSUPLHashAlgorithms_SHA256 = 1, +}; + +// Enum to describe QMI PDS SUPL ID/Name Data Coding Schemes +enum eQMIPDSSUPLIDNameDataCodingSchemes:UINT8 +{ + eQMIPDSSUPLIDNameDataCodingSchemes_LogicalName = 0, + eQMIPDSSUPLIDNameDataCodingSchemes_EmailAddress = 1, + eQMIPDSSUPLIDNameDataCodingSchemes_MSISDN = 2, + eQMIPDSSUPLIDNameDataCodingSchemes_URL = 3, + eQMIPDSSUPLIDNameDataCodingSchemes_SIPURL = 4, + eQMIPDSSUPLIDNameDataCodingSchemes_MIN = 5, + eQMIPDSSUPLIDNameDataCodingSchemes_MDN = 6, + eQMIPDSSUPLIDNameDataCodingSchemes_Unknown = 255, +}; + +// Enum to describe QMI PDS SUPL INIT Sources +enum eQMIPDSSUPLINITSources:UINT32 +{ + eQMIPDSSUPLINITSources_1XSMS = 0, + eQMIPDSSUPLINITSources_GSMSMS = 1, + eQMIPDSSUPLINITSources_WAPPush = 2, + eQMIPDSSUPLINITSources_UDP = 3, +}; + +// Enum to describe QMI PDS SUPL Modes +enum eQMIPDSSUPLModes:UINT8 +{ + eQMIPDSSUPLModes_MSAssisted = 0, + eQMIPDSSUPLModes_MSBased = 1, + eQMIPDSSUPLModes_MSAssistedPreferred = 2, + eQMIPDSSUPLModes_MSBasedPreferred = 3, + eQMIPDSSUPLModes_Standalone = 4, + eQMIPDSSUPLModes_AFLT = 5, + eQMIPDSSUPLModes_ECID = 6, + eQMIPDSSUPLModes_EOTD = 7, + eQMIPDSSUPLModes_OTDOA = 8, + eQMIPDSSUPLModes_NoPosition = 9, +}; + +// Enum to describe QMI PDS SUPL Session End Status +enum eQMIPDSSUPLSessionEndStatus:UINT32 +{ + eQMIPDSSUPLSessionEndStatus_Success = 0, + eQMIPDSSUPLSessionEndStatus_Failure = 1, +}; + +// Enum to describe QMI PDS SUPL TLS Versions +enum eQMIPDSSUPLTLSVersions:UINT32 +{ + eQMIPDSSUPLTLSVersions_10 = 0, + eQMIPDSSUPLTLSVersions_11 = 1, +}; + +// Enum to describe QMI PDS SUPL Trigger Types +enum eQMIPDSSUPLTriggerTypes:UINT32 +{ + eQMIPDSSUPLTriggerTypes_SingleShot = 4294967295u, + eQMIPDSSUPLTriggerTypes_Periodic = 0, + eQMIPDSSUPLTriggerTypes_AreaEvent = 1, +}; + +// Enum to describe QMI PDS SUPL Versions +enum eQMIPDSSUPLVersions:UINT32 +{ + eQMIPDSSUPLVersions_100 = 1, + eQMIPDSSUPLVersions_200 = 2, + eQMIPDSSUPLVersions_Unsupported = 3, +}; + +// Enum to describe QMI PDS SV Almanac Status +enum eQMIPDSSVAlmanacStatus:UINT8 +{ + eQMIPDSSVAlmanacStatus_Unavailable = 0, + eQMIPDSSVAlmanacStatus_Available = 1, +}; + +// Enum to describe QMI PDS SV Ephemeris Status +enum eQMIPDSSVEphemerisStatus:UINT8 +{ + eQMIPDSSVEphemerisStatus_Unavailable = 0, + eQMIPDSSVEphemerisStatus_Available = 1, +}; + +// Enum to describe QMI PDS SV Health Status +enum eQMIPDSSVHealthStatus:UINT8 +{ + eQMIPDSSVHealthStatus_Unhealthy = 0, + eQMIPDSSVHealthStatus_Healthy = 1, +}; + +// Enum to describe QMI PDS SV Processing Status +enum eQMIPDSSVProcessingStatus:UINT8 +{ + eQMIPDSSVProcessingStatus_Idle = 1, + eQMIPDSSVProcessingStatus_Search = 2, + eQMIPDSSVProcessingStatus_SearchVerify = 3, + eQMIPDSSVProcessingStatus_BitEdge = 4, + eQMIPDSSVProcessingStatus_Track = 5, +}; + +// Enum to describe QMI PDS SV Systems +enum eQMIPDSSVSystems:UINT8 +{ + eQMIPDSSVSystems_GPS = 1, + eQMIPDSSVSystems_Galileo = 2, + eQMIPDSSVSystems_SBAS = 3, + eQMIPDSSVSystems_Compass = 4, + eQMIPDSSVSystems_Glonass = 5, +}; + +// Enum to describe QMI PDS Server Options +enum eQMIPDSServerOptions:UINT8 +{ + eQMIPDSServerOptions_Default = 0, +}; + +// Enum to describe QMI PDS Session Control Types +enum eQMIPDSSessionControlTypes:UINT8 +{ + eQMIPDSSessionControlTypes_Automatic = 0, +}; + +// Enum to describe QMI PDS Session Status +enum eQMIPDSSessionStatus:UINT8 +{ + eQMIPDSSessionStatus_Success = 0, + eQMIPDSSessionStatus_InProgress = 1, + eQMIPDSSessionStatus_GeneralFailure = 2, + eQMIPDSSessionStatus_Timeout = 3, + eQMIPDSSessionStatus_UserEnded = 4, + eQMIPDSSessionStatus_BadParameter = 5, + eQMIPDSSessionStatus_PhoneOffline = 6, + eQMIPDSSessionStatus_EngineLocked = 7, + eQMIPDSSessionStatus_E911SessionInProgress = 8, +}; + +// Enum to describe QMI PDS Session Types +enum eQMIPDSSessionTypes:UINT8 +{ + eQMIPDSSessionTypes_New = 0, +}; + +// Enum to describe QMI PDS Source Linkage +enum eQMIPDSSourceLinkage:UINT8 +{ + eQMIPDSSourceLinkage_NotSpecified = 0, + eQMIPDSSourceLinkage_FullyInterDependent = 1, + eQMIPDSSourceLinkage_AltitudeDependsOnLatitudeAndLongitude = 2, + eQMIPDSSourceLinkage_FullyIndependent = 3, +}; + +// Enum to describe QMI PDS Stop Reason +enum eQMIPDSStopReason:UINT8 +{ + eQMIPDSStopReason_UserTerminated = 0, + eQMIPDSStopReason_Other = 1, +}; + +// Enum to describe QMI PDS Streaming Status +enum eQMIPDSStreamingStatus:UINT8 +{ + eQMIPDSStreamingStatus_NotReadyForStreaming = 0, + eQMIPDSStreamingStatus_ReadyForStreaming = 1, +}; + +// Enum to describe QMI PDS Suspend Reason +enum eQMIPDSSuspendReason:UINT8 +{ + eQMIPDSSuspendReason_OoS = 0, + eQMIPDSSuspendReason_LPM = 1, + eQMIPDSSuspendReason_Other = 2, +}; + +// Enum to describe QMI PDS Time Bases +enum eQMIPDSTimeBases:UINT8 +{ + eQMIPDSTimeBases_GPS = 0, + eQMIPDSTimeBases_UTC = 1, +}; + +// Enum to describe QMI PDS Time Source +enum eQMIPDSTimeSource:UINT8 +{ + eQMIPDSTimeSource_Invalid = 0, + eQMIPDSTimeSource_NetworkTimeTransfer = 1, + eQMIPDSTimeSource_NetworkTimeTagging = 2, + eQMIPDSTimeSource_ExternalInput = 3, + eQMIPDSTimeSource_TOWDecode = 4, + eQMIPDSTimeSource_TOWConfirmed = 5, + eQMIPDSTimeSource_TOWAndWeekConfirmed = 6, + eQMIPDSTimeSource_TimeAlignment = 7, + eQMIPDSTimeSource_NavSolution = 8, + eQMIPDSTimeSource_SolveForTime = 9, +}; + +// Enum to describe QMI PDS Time Type +enum eQMIPDSTimeType:UINT8 +{ + eQMIPDSTimeType_UTCTime = 0, + eQMIPDSTimeType_GPSTime = 1, + eQMIPDSTimeType_Age = 2, +}; + +// Enum to describe QMI PDS Tracking Session States +enum eQMIPDSTrackingSessionStates:UINT8 +{ + eQMIPDSTrackingSessionStates_Unknown = 0, + eQMIPDSTrackingSessionStates_Inactive = 1, + eQMIPDSTrackingSessionStates_Active = 2, +}; + +// Enum to describe QMI PDS UMTS CP Data Coding Schemes +enum eQMIPDSUMTSCPDataCodingSchemes:UINT8 +{ + eQMIPDSUMTSCPDataCodingSchemes_German = 0, + eQMIPDSUMTSCPDataCodingSchemes_English = 1, + eQMIPDSUMTSCPDataCodingSchemes_Italian = 2, + eQMIPDSUMTSCPDataCodingSchemes_French = 3, + eQMIPDSUMTSCPDataCodingSchemes_Spanish = 4, + eQMIPDSUMTSCPDataCodingSchemes_Dutch = 5, + eQMIPDSUMTSCPDataCodingSchemes_Swedish = 6, + eQMIPDSUMTSCPDataCodingSchemes_Danish = 7, + eQMIPDSUMTSCPDataCodingSchemes_Portuguese = 8, + eQMIPDSUMTSCPDataCodingSchemes_Finnish = 9, + eQMIPDSUMTSCPDataCodingSchemes_Norwegian = 10, + eQMIPDSUMTSCPDataCodingSchemes_Greek = 11, + eQMIPDSUMTSCPDataCodingSchemes_Turkish = 12, + eQMIPDSUMTSCPDataCodingSchemes_Hungarian = 13, + eQMIPDSUMTSCPDataCodingSchemes_Polish = 14, + eQMIPDSUMTSCPDataCodingSchemes_Unknown = 255, +}; + +// Enum to describe QMI PDS UMTS CP Location Types +enum eQMIPDSUMTSCPLocationTypes:UINT8 +{ + eQMIPDSUMTSCPLocationTypes_Current = 0, + eQMIPDSUMTSCPLocationTypes_CurrentOrLastKnown = 1, + eQMIPDSUMTSCPLocationTypes_Initial = 2, +}; + +// Enum to describe QMI PDS Uncertainty Coverage +enum eQMIPDSUncertaintyCoverage:UINT8 +{ + eQMIPDSUncertaintyCoverage_NotSpecified = 0, + eQMIPDSUncertaintyCoverage_PointUncertainty = 1, + eQMIPDSUncertaintyCoverage_FullyUncertainty = 2, +}; + +// Enum to describe QMI PDS VX Data Coding Schemes +enum eQMIPDSVXDataCodingSchemes:UINT8 +{ + eQMIPDSVXDataCodingSchemes_Octet = 0, + eQMIPDSVXDataCodingSchemes_EXNProtocolMessage = 1, + eQMIPDSVXDataCodingSchemes_ASCII = 2, + eQMIPDSVXDataCodingSchemes_IA5 = 3, + eQMIPDSVXDataCodingSchemes_Unicode = 4, + eQMIPDSVXDataCodingSchemes_ShiftJIS = 5, + eQMIPDSVXDataCodingSchemes_Korean = 6, + eQMIPDSVXDataCodingSchemes_LatinHebrew = 7, + eQMIPDSVXDataCodingSchemes_Latin = 8, + eQMIPDSVXDataCodingSchemes_GSM = 9, +}; + +// Enum to describe QMI PDS VX Modes +enum eQMIPDSVXModes:UINT8 +{ + eQMIPDSVXModes_MSAssisted = 0, + eQMIPDSVXModes_MSBased = 1, + eQMIPDSVXModes_MSAssistedPreferred = 2, + eQMIPDSVXModes_MSBasedPreferred = 3, +}; + +// Enum to describe QMI PDS WWAN Network Preferences +enum eQMIPDSWWANNetworkPreferences:UINT8 +{ + eQMIPDSWWANNetworkPreferences_AnyAvailable = 0, + eQMIPDSWWANNetworkPreferences_HomeOnly = 1, + eQMIPDSWWANNetworkPreferences_RoamOnly = 2, +}; + +// Enum to describe QMI PDS Wi-Fi Request Types +enum eQMIPDSWiFiRequestTypes:UINT8 +{ + eQMIPDSWiFiRequestTypes_StartPeriodicFixesHighFrequency = 0, + eQMIPDSWiFiRequestTypes_StartPeriodicFixesKeepWarm = 1, + eQMIPDSWiFiRequestTypes_StopPeriodicFixes = 2, + eQMIPDSWiFiRequestTypes_Suspend = 4, +}; + +// Enum to describe QMI Profile Types +enum eQMIProfileTypes:UINT8 +{ + eQMIProfileTypes_3GPP = 0, + eQMIProfileTypes_3GPP2 = 1, +}; + +// Enum to describe QMI QCMAP Call End Reasons +enum eQMIQCMAPCallEndReasons:UINT32 +{ + eQMIQCMAPCallEndReasons_Unknown = 0, + eQMIQCMAPCallEndReasons_Unspecified = 1, + eQMIQCMAPCallEndReasons_ClientEnd = 2, + eQMIQCMAPCallEndReasons_NoService = 3, + eQMIQCMAPCallEndReasons_Fade = 4, + eQMIQCMAPCallEndReasons_ReleaseNormal = 5, + eQMIQCMAPCallEndReasons_AccInProgress = 6, + eQMIQCMAPCallEndReasons_AccFailed = 7, + eQMIQCMAPCallEndReasons_RedirectOrHandoff = 8, + eQMIQCMAPCallEndReasons_CloseInProgress = 9, + eQMIQCMAPCallEndReasons_AuthenticationFailed = 10, + eQMIQCMAPCallEndReasons_InternalError = 11, + eQMIQCMAPCallEndReasons_CDMALock = 500, + eQMIQCMAPCallEndReasons_Intercept = 501, + eQMIQCMAPCallEndReasons_Reorder = 502, + eQMIQCMAPCallEndReasons_ReleaseServiceOptionRejected = 503, + eQMIQCMAPCallEndReasons_IncomingCall = 504, + eQMIQCMAPCallEndReasons_AlertStop = 505, + eQMIQCMAPCallEndReasons_Activation = 506, + eQMIQCMAPCallEndReasons_MaxAccessProbe = 507, + eQMIQCMAPCallEndReasons_CCSNotSupportedByBS = 508, + eQMIQCMAPCallEndReasons_NoResponseFromBS = 509, + eQMIQCMAPCallEndReasons_RejectedByBS = 510, + eQMIQCMAPCallEndReasons_Incompatible = 511, + eQMIQCMAPCallEndReasons_AlreadyInTC = 512, + eQMIQCMAPCallEndReasons_UserCallOrigDuringGPS = 513, + eQMIQCMAPCallEndReasons_UserCallOrigDuringSMS = 514, + eQMIQCMAPCallEndReasons_NoCDMAService = 515, + eQMIQCMAPCallEndReasons_ConfFailed = 1000, + eQMIQCMAPCallEndReasons_IncomingRejected = 1001, + eQMIQCMAPCallEndReasons_NoGWService = 1002, + eQMIQCMAPCallEndReasons_NetworkEnd = 1003, + eQMIQCMAPCallEndReasons_LLCOrSNDCPFailure = 1004, + eQMIQCMAPCallEndReasons_InsufficientResources = 1005, + eQMIQCMAPCallEndReasons_ServiceOptionOutOfOrder = 1006, + eQMIQCMAPCallEndReasons_NSAPIAlreadyUsed = 1007, + eQMIQCMAPCallEndReasons_RegularPDPContextDeactivation = 1008, + eQMIQCMAPCallEndReasons_NetworkFailure = 1009, + eQMIQCMAPCallEndReasons_ReactivationRequested = 1010, + eQMIQCMAPCallEndReasons_ProtocolError = 1011, + eQMIQCMAPCallEndReasons_OperatorDeterminedBarring = 1012, + eQMIQCMAPCallEndReasons_UnknownOrMissingAPN = 1013, + eQMIQCMAPCallEndReasons_UnknownPDPAddressOrPDPType = 1014, + eQMIQCMAPCallEndReasons_ActivationRejectedByGGSN = 1015, + eQMIQCMAPCallEndReasons_ActivationRejectedUnspecified = 1016, + eQMIQCMAPCallEndReasons_ServiceOptionNotSupported = 1017, + eQMIQCMAPCallEndReasons_RequestedServiceOptionNotSubscribed = 1018, + eQMIQCMAPCallEndReasons_QoSNotAccepted = 1019, + eQMIQCMAPCallEndReasons_SemanticErrorInTheTFTOperation = 1020, + eQMIQCMAPCallEndReasons_SyntacticalErrorInTheTFTOperation = 1021, + eQMIQCMAPCallEndReasons_UnknownPDPContext = 1022, + eQMIQCMAPCallEndReasons_SemanticErrorsInPacketFilters = 1023, + eQMIQCMAPCallEndReasons_SyntacticalErrorsInPacketFilters = 1024, + eQMIQCMAPCallEndReasons_PDPContextWithoutTFTAlreadyActivated = 1025, + eQMIQCMAPCallEndReasons_InvalidTransactionIdentifierValue = 1026, + eQMIQCMAPCallEndReasons_SemanticallyIncorrectMessage = 1027, + eQMIQCMAPCallEndReasons_InvalidMandatoryInformation = 1028, + eQMIQCMAPCallEndReasons_MessageTypeNonExistent = 1029, + eQMIQCMAPCallEndReasons_MessageNotCompatibleWithState = 1030, + eQMIQCMAPCallEndReasons_InformationElementNonexistent = 1031, + eQMIQCMAPCallEndReasons_ConditionalInformationElementError = 1032, + eQMIQCMAPCallEndReasons_MessageNotCompatibleWithProtocolState = 1033, + eQMIQCMAPCallEndReasons_APNRestrictionValueIncompatibleWithActivePDPContext = 1034, + eQMIQCMAPCallEndReasons_NoGPRSContextPresent = 1035, + eQMIQCMAPCallEndReasons_RequestedFeatureNotSupported = 1036, + eQMIQCMAPCallEndReasons_CDGenOrBusy = 1500, + eQMIQCMAPCallEndReasons_CDBillOrAuth = 1501, + eQMIQCMAPCallEndReasons_ChangeHDR = 1502, + eQMIQCMAPCallEndReasons_ExitHDR = 1503, + eQMIQCMAPCallEndReasons_HDRNoSession = 1504, + eQMIQCMAPCallEndReasons_HDROrigDuringGPSFix = 1505, + eQMIQCMAPCallEndReasons_HDRCSTimeout = 1506, + eQMIQCMAPCallEndReasons_HDRReleasedByCM = 1507, +}; + +// Enum to describe QMI QCMAP IP Families +enum eQMIQCMAPIPFamilies:UINT32 +{ + eQMIQCMAPIPFamilies_IPv4 = 4, + eQMIQCMAPIPFamilies_IPv6 = 6, +}; + +// Enum to describe QMI QCMAP NAT Types +enum eQMIQCMAPNATTypes:UINT32 +{ + eQMIQCMAPNATTypes_Symmetric = 0, + eQMIQCMAPNATTypes_PortRestrictedCode = 1, +}; + +// Enum to describe QMI QCMAP Next Header Protocols +enum eQMIQCMAPNextHeaderProtocols:UINT32 +{ + eQMIQCMAPNextHeaderProtocols_TCP = 1, + eQMIQCMAPNextHeaderProtocols_UDP = 2, + eQMIQCMAPNextHeaderProtocols_ICMPv4 = 3, + eQMIQCMAPNextHeaderProtocols_ICMPv6 = 4, + eQMIQCMAPNextHeaderProtocols_ESP = 5, + eQMIQCMAPNextHeaderProtocols_TCPUDP = 6, +}; + +// Enum to describe QMI QCMAP Packet Service Status +enum eQMIQCMAPPacketServiceStatus:UINT32 +{ + eQMIQCMAPPacketServiceStatus_Connecting = 1, + eQMIQCMAPPacketServiceStatus_Connected = 2, + eQMIQCMAPPacketServiceStatus_Disconnecting = 3, + eQMIQCMAPPacketServiceStatus_Disconnected = 4, +}; + +// Enum to describe QMI QCMAP Verbose Call End Reasons +enum eQMIQCMAPVerboseCallEndReasons:UINT32 +{ + eQMIQCMAPVerboseCallEndReasons_Unspecified = 0, + eQMIQCMAPVerboseCallEndReasons_MIPFAUnspecified = 65600, + eQMIQCMAPVerboseCallEndReasons_MIPFAAdministrativelyProhibited = 65601, + eQMIQCMAPVerboseCallEndReasons_MIPFAInsufficientResources = 65602, + eQMIQCMAPVerboseCallEndReasons_MIPFAMobileNodeAuthenticationFailure = 65603, + eQMIQCMAPVerboseCallEndReasons_MIPFAHAAuthenticationFailure = 65604, + eQMIQCMAPVerboseCallEndReasons_MIPFARequestedLifetimeTooLong = 65605, + eQMIQCMAPVerboseCallEndReasons_MIPFAMalformedRequest = 65606, + eQMIQCMAPVerboseCallEndReasons_MIPFAMalformedReply = 65607, + eQMIQCMAPVerboseCallEndReasons_MIPFAEncapsulationUnavailable = 65608, + eQMIQCMAPVerboseCallEndReasons_MIPFAVJHCUnavailable = 65609, + eQMIQCMAPVerboseCallEndReasons_MIPFAReverseTunnelUnavailable = 65610, + eQMIQCMAPVerboseCallEndReasons_MIPFAReverseTunnelIsMandatoryAndTBitIsNotSet = 65611, + eQMIQCMAPVerboseCallEndReasons_MIPFADeliveryStyleNotSupported = 65615, + eQMIQCMAPVerboseCallEndReasons_MIPFAMissingNAI = 65633, + eQMIQCMAPVerboseCallEndReasons_MIPFAMissingHA = 65634, + eQMIQCMAPVerboseCallEndReasons_MIPFAMissingHomeAddress = 65635, + eQMIQCMAPVerboseCallEndReasons_MIPFAUnknownChallenge = 65640, + eQMIQCMAPVerboseCallEndReasons_MIPFAMissingChallenge = 65641, + eQMIQCMAPVerboseCallEndReasons_MIPFAStaleChallenge = 65642, + eQMIQCMAPVerboseCallEndReasons_MIPHAReasonUnspecified = 65664, + eQMIQCMAPVerboseCallEndReasons_MIPHAAdministrativelyProhibited = 65665, + eQMIQCMAPVerboseCallEndReasons_MIPHAInsufficientResources = 65666, + eQMIQCMAPVerboseCallEndReasons_MIPHAMobileNodeAuthenticationFailure = 65667, + eQMIQCMAPVerboseCallEndReasons_MIPHAFAAuthenticationFailure = 65668, + eQMIQCMAPVerboseCallEndReasons_MIPHARegistrationIDMismatch = 65669, + eQMIQCMAPVerboseCallEndReasons_MIPHAMalformedRequest = 65670, + eQMIQCMAPVerboseCallEndReasons_MIPHAUnknownHAAddress = 65672, + eQMIQCMAPVerboseCallEndReasons_MIPHAReverseTunnelUnavailable = 65673, + eQMIQCMAPVerboseCallEndReasons_MIPHAReverseTunnelIsMandatoryAndTBitIsNotSet = 65674, + eQMIQCMAPVerboseCallEndReasons_MIPHAEncapsulationUnavailable = 65675, + eQMIQCMAPVerboseCallEndReasons_Unknown = 131071, + eQMIQCMAPVerboseCallEndReasons_Internal = 131273, + eQMIQCMAPVerboseCallEndReasons_CallEnded = 131274, + eQMIQCMAPVerboseCallEndReasons_InternalUnknownCauseCode = 131275, + eQMIQCMAPVerboseCallEndReasons_UnknownCauseCode = 131276, + eQMIQCMAPVerboseCallEndReasons_CloseInProgress = 131277, + eQMIQCMAPVerboseCallEndReasons_NWInitiatedTermination = 131278, + eQMIQCMAPVerboseCallEndReasons_AppPreempted = 131279, + eQMIQCMAPVerboseCallEndReasons_CMCDMALock = 197108, + eQMIQCMAPVerboseCallEndReasons_CMIntercept = 197109, + eQMIQCMAPVerboseCallEndReasons_CMReorder = 197110, + eQMIQCMAPVerboseCallEndReasons_CMReleaseServiceOptionReject = 197111, + eQMIQCMAPVerboseCallEndReasons_CMIncomingCall = 197112, + eQMIQCMAPVerboseCallEndReasons_CMAlertStop = 197113, + eQMIQCMAPVerboseCallEndReasons_CMActivation = 197114, + eQMIQCMAPVerboseCallEndReasons_CMMaxAccessProbe = 197115, + eQMIQCMAPVerboseCallEndReasons_CMCCSNotSupportedByBS = 197116, + eQMIQCMAPVerboseCallEndReasons_CMNoResponseFromBS = 197117, + eQMIQCMAPVerboseCallEndReasons_CMRejectedByBS = 197118, + eQMIQCMAPVerboseCallEndReasons_CMIncompatible = 197119, + eQMIQCMAPVerboseCallEndReasons_CMAlreadyInTC = 197120, + eQMIQCMAPVerboseCallEndReasons_CMUserCallOrigDuringGPS = 197121, + eQMIQCMAPVerboseCallEndReasons_CMUserCallOrigDuringSMS = 197122, + eQMIQCMAPVerboseCallEndReasons_CMNoCDMAService = 197123, + eQMIQCMAPVerboseCallEndReasons_CMRetryOrder = 197127, + eQMIQCMAPVerboseCallEndReasons_CMConfFailed = 197608, + eQMIQCMAPVerboseCallEndReasons_CMIncomingRejected = 197609, + eQMIQCMAPVerboseCallEndReasons_CMNoGWService = 197616, + eQMIQCMAPVerboseCallEndReasons_CMNoGPRSContext = 197617, + eQMIQCMAPVerboseCallEndReasons_CMIllegalMS = 197618, + eQMIQCMAPVerboseCallEndReasons_CMIllegalME = 197619, + eQMIQCMAPVerboseCallEndReasons_CMGPRSServicesAndNonGPRSServiceNotAllowed = 197620, + eQMIQCMAPVerboseCallEndReasons_CMGPRSServicesNotAllowed = 197621, + eQMIQCMAPVerboseCallEndReasons_CMMSIdentityCannotBeDerivedByTheNetwork = 197622, + eQMIQCMAPVerboseCallEndReasons_CMImplicitlyDetached = 197623, + eQMIQCMAPVerboseCallEndReasons_CMPLMNNotAllowed = 197624, + eQMIQCMAPVerboseCallEndReasons_CMLANotAllowed = 197625, + eQMIQCMAPVerboseCallEndReasons_CMGPRSServicesNotAllowedInThisPLMN = 197626, + eQMIQCMAPVerboseCallEndReasons_CMPDPDuplicate = 197627, + eQMIQCMAPVerboseCallEndReasons_CMUERATChange = 197628, + eQMIQCMAPVerboseCallEndReasons_CMCongestion = 197629, + eQMIQCMAPVerboseCallEndReasons_CMNoPDPContextActivated = 197630, + eQMIQCMAPVerboseCallEndReasons_CMAccessClassDSACRejection = 197631, + eQMIQCMAPVerboseCallEndReasons_CMCDGenOrBusy = 198108, + eQMIQCMAPVerboseCallEndReasons_CMCDBillOrAuth = 198109, + eQMIQCMAPVerboseCallEndReasons_CMChangeHDR = 198110, + eQMIQCMAPVerboseCallEndReasons_CMExitHDR = 198111, + eQMIQCMAPVerboseCallEndReasons_CMHDRNoSession = 198112, + eQMIQCMAPVerboseCallEndReasons_CMHDROrigDuringGPSFix = 198113, + eQMIQCMAPVerboseCallEndReasons_CMHDRCSTimeout = 198114, + eQMIQCMAPVerboseCallEndReasons_CMHDRReleasedByCM = 198115, + eQMIQCMAPVerboseCallEndReasons_CMNoHybridHDRService = 198118, + eQMIQCMAPVerboseCallEndReasons_CMClientEnd = 198608, + eQMIQCMAPVerboseCallEndReasons_CMNoService = 198609, + eQMIQCMAPVerboseCallEndReasons_CMFade = 198610, + eQMIQCMAPVerboseCallEndReasons_CMNormalRelease = 198611, + eQMIQCMAPVerboseCallEndReasons_CMAccessInProgress = 198612, + eQMIQCMAPVerboseCallEndReasons_CMAccessFail = 198613, + eQMIQCMAPVerboseCallEndReasons_CMRedirectOrHandoff = 198614, + eQMIQCMAPVerboseCallEndReasons_3GPPOperatorDeterminedBarring = 393224, + eQMIQCMAPVerboseCallEndReasons_3GPPLLCSNDCPFailure = 393241, + eQMIQCMAPVerboseCallEndReasons_3GPPInsufficientResources = 393242, + eQMIQCMAPVerboseCallEndReasons_3GPPUnknownAPN = 393243, + eQMIQCMAPVerboseCallEndReasons_3GPPUnknownPDP = 393244, + eQMIQCMAPVerboseCallEndReasons_3GPPAuthenticationFailed = 393245, + eQMIQCMAPVerboseCallEndReasons_3GPPGGSNReject = 393246, + eQMIQCMAPVerboseCallEndReasons_3GPPActivationReject = 393247, + eQMIQCMAPVerboseCallEndReasons_3GPPOptionNotSupported = 393248, + eQMIQCMAPVerboseCallEndReasons_3GPPOptionUnsubscribed = 393249, + eQMIQCMAPVerboseCallEndReasons_3GPPOptionTemporarilyOOO = 393250, + eQMIQCMAPVerboseCallEndReasons_3GPPNSAPIAlreadyUsed = 393251, + eQMIQCMAPVerboseCallEndReasons_3GPPRegularDeactivation = 393252, + eQMIQCMAPVerboseCallEndReasons_3GPPQoSNotAccepted = 393253, + eQMIQCMAPVerboseCallEndReasons_3GPPNetworkFailure = 393254, + eQMIQCMAPVerboseCallEndReasons_3GPPUMTSReactivationRequest = 393255, + eQMIQCMAPVerboseCallEndReasons_3GPPFeatureNotSupported = 393256, + eQMIQCMAPVerboseCallEndReasons_3GPPTFTSemanticError = 393257, + eQMIQCMAPVerboseCallEndReasons_3GPPTFTSyntaxError = 393258, + eQMIQCMAPVerboseCallEndReasons_3GPPUnknownPDPContext = 393259, + eQMIQCMAPVerboseCallEndReasons_3GPPFilterSemanticError = 393260, + eQMIQCMAPVerboseCallEndReasons_3GPPFilterSyntaxError = 393261, + eQMIQCMAPVerboseCallEndReasons_3GPPPDPWithoutActiveTFT = 393262, + eQMIQCMAPVerboseCallEndReasons_3GPPInvalidTransactionID = 393297, + eQMIQCMAPVerboseCallEndReasons_3GPPMessageIncorrectSemantic = 393311, + eQMIQCMAPVerboseCallEndReasons_3GPPInvalidMandatoryID = 393312, + eQMIQCMAPVerboseCallEndReasons_3GPPMessageTypeUnsupported = 393313, + eQMIQCMAPVerboseCallEndReasons_3GPPMessageTypeNoncompatibleState = 393314, + eQMIQCMAPVerboseCallEndReasons_3GPPUnknownInfoElement = 393315, + eQMIQCMAPVerboseCallEndReasons_3GPPConditionalInfoElementError = 393316, + eQMIQCMAPVerboseCallEndReasons_3GPPMessageAndProtocolStateUncompatible = 393317, + eQMIQCMAPVerboseCallEndReasons_3GPPProtocolError = 393327, + eQMIQCMAPVerboseCallEndReasons_3GPPAPNTypeConflict = 393328, + eQMIQCMAPVerboseCallEndReasons_PPPTimeout = 458753, + eQMIQCMAPVerboseCallEndReasons_PPPAuthenticationFailed = 458754, + eQMIQCMAPVerboseCallEndReasons_PPPOptionMismatch = 458755, + eQMIQCMAPVerboseCallEndReasons_PPPPAPFailure = 458783, + eQMIQCMAPVerboseCallEndReasons_PPPCHAPFailure = 458784, + eQMIQCMAPVerboseCallEndReasons_PPPUnknown = 524287, + eQMIQCMAPVerboseCallEndReasons_EHRPDSubsLimitedToV4 = 524289, + eQMIQCMAPVerboseCallEndReasons_EHRPDSubsLimitedToV6 = 524290, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCPTimeout = 524292, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCPFailure = 524293, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2IGeneralError = 524294, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2IUnauthAPN = 524295, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2IPDNLimit = 524296, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2INoPDNGW = 524297, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2IPDNGWUnreach = 524298, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2IPDNGWRejected = 524299, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2IInsufficientParam = 524300, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2IResourceUnavailable = 524301, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2IAdminProhibited = 524302, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2IPDNIDInUse = 524303, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2ISubscriberLimitation = 524304, + eQMIQCMAPVerboseCallEndReasons_EHRPDVSNCP3GPP2IPDNExistsForAPN = 524305, + eQMIQCMAPVerboseCallEndReasons_PrefixUnavailable = 589825, +}; + +// Enum to describe QMI QoS Delivery Orders +enum eQMIQoSDeliveryOrders:UINT8 +{ + eQMIQoSDeliveryOrders_Subscribe = 0, + eQMIQoSDeliveryOrders_DeliveryOrderOn = 1, + eQMIQoSDeliveryOrders_DeliveryOrderOff = 2, +}; + +// Enum to describe QMI Results +enum eQMIResults:UINT16 +{ + eQMIResults_Success = 0, + eQMIResults_Failure = 1, +}; + +// Enum to describe QMI SDU Error Ratios +enum eQMISDUErrorRatios:UINT8 +{ + eQMISDUErrorRatios_Subscribe = 0, + eQMISDUErrorRatios_1X102 = 1, + eQMISDUErrorRatios_7X103 = 2, + eQMISDUErrorRatios_1X103 = 3, + eQMISDUErrorRatios_1X104 = 4, + eQMISDUErrorRatios_1X105 = 5, + eQMISDUErrorRatios_1X106 = 6, + eQMISDUErrorRatios_1X101 = 7, +}; + +// Enum to describe QMI SDU Residual Bit Error Ratios +enum eQMISDUResidualBitErrorRatios:UINT8 +{ + eQMISDUResidualBitErrorRatios_Subscribe = 0, + eQMISDUResidualBitErrorRatios_5X102 = 1, + eQMISDUResidualBitErrorRatios_1X102 = 2, + eQMISDUResidualBitErrorRatios_5X103 = 3, + eQMISDUResidualBitErrorRatios_4X103 = 4, + eQMISDUResidualBitErrorRatios_1X103 = 5, + eQMISDUResidualBitErrorRatios_1X104 = 6, + eQMISDUResidualBitErrorRatios_1X105 = 7, + eQMISDUResidualBitErrorRatios_1X106 = 8, + eQMISDUResidualBitErrorRatios_6X108 = 9, +}; + +// Enum to describe QMI Traffic Classes +enum eQMITrafficClasses:UINT8 +{ + eQMITrafficClasses_Subscribed = 0, + eQMITrafficClasses_Conversational = 1, + eQMITrafficClasses_Streaming = 2, + eQMITrafficClasses_Interactive = 3, + eQMITrafficClasses_Background = 4, +}; + +// Enum to describe QMI UIM ACL Status +enum eQMIUIMACLStatus:UINT8 +{ + eQMIUIMACLStatus_ACLNotAvailable = 0, + eQMIUIMACLStatus_ACLAvailableAndDisabled = 1, + eQMIUIMACLStatus_ACLAvailableAndEnabled = 2, +}; + +// Enum to describe QMI UIM APDU Response Status +enum eQMIUIMAPDUResponseStatus:UINT8 +{ + eQMIUIMAPDUResponseStatus_ReturnIntermediateProcedureBytes = 0, + eQMIUIMAPDUResponseStatus_ReturnFinalResultAndStatusWords = 1, +}; + +// Enum to describe QMI UIM Application States +enum eQMIUIMApplicationStates:UINT8 +{ + eQMIUIMApplicationStates_Unknown = 0, + eQMIUIMApplicationStates_Detected = 1, + eQMIUIMApplicationStates_PIN1OrUPINIsRequired = 2, + eQMIUIMApplicationStates_PUK1OrPUKForUPINIsRequired = 3, + eQMIUIMApplicationStates_PersonalizationStateMustBeChecked = 4, + eQMIUIMApplicationStates_PIN1IsBlocked = 5, + eQMIUIMApplicationStates_Illegal = 6, + eQMIUIMApplicationStates_Ready = 7, +}; + +// Enum to describe QMI UIM Application Types +enum eQMIUIMApplicationTypes:UINT8 +{ + eQMIUIMApplicationTypes_Unknown = 0, + eQMIUIMApplicationTypes_SIMCard = 1, + eQMIUIMApplicationTypes_USIMApplication = 2, + eQMIUIMApplicationTypes_RUIMCard = 3, + eQMIUIMApplicationTypes_CSIMApplication = 4, + eQMIUIMApplicationTypes_ISIMApplication = 5, +}; + +// Enum to describe QMI UIM Authentication Contexts +enum eQMIUIMAuthenticationContexts:UINT8 +{ + eQMIUIMAuthenticationContexts_GSMAlgorithm = 0, + eQMIUIMAuthenticationContexts_CAVEAlgorithm = 1, + eQMIUIMAuthenticationContexts_GSMSecurity = 2, + eQMIUIMAuthenticationContexts_3GSecurity = 3, + eQMIUIMAuthenticationContexts_VGCSVBSSecurity = 4, + eQMIUIMAuthenticationContexts_GBASecurityBootstrappingMode = 5, + eQMIUIMAuthenticationContexts_GBASecurityNAFDerivationMode = 6, + eQMIUIMAuthenticationContexts_MBMSSecurityMSKUpdateMode = 7, + eQMIUIMAuthenticationContexts_MBMSSecurityMTKGenerationMode = 8, + eQMIUIMAuthenticationContexts_MBMSSecurityMSKDeletionMode = 9, + eQMIUIMAuthenticationContexts_MBMSSecurityMUKDeletionMode = 10, + eQMIUIMAuthenticationContexts_IMSAKASecurity = 11, + eQMIUIMAuthenticationContexts_HTTPDigestSecurity = 12, + eQMIUIMAuthenticationContexts_ComputeIPCHAP = 13, + eQMIUIMAuthenticationContexts_ComputeIPMNHA = 14, + eQMIUIMAuthenticationContexts_ComputeIPMIPRRQ = 15, + eQMIUIMAuthenticationContexts_ComputeIPMNAAA = 16, + eQMIUIMAuthenticationContexts_ComputeIPHRPD = 17, +}; + +// Enum to describe QMI UIM CK/Session Operations +enum eQMIUIMCKSessionOperations:UINT8 +{ + eQMIUIMCKSessionOperations_Deactivate = 0, + eQMIUIMCKSessionOperations_Activate = 1, +}; + +// Enum to describe QMI UIM Card Error Codes +enum eQMIUIMCardErrorCodes:UINT8 +{ + eQMIUIMCardErrorCodes_Unknown = 0, + eQMIUIMCardErrorCodes_PowerDown = 1, + eQMIUIMCardErrorCodes_PollError = 2, + eQMIUIMCardErrorCodes_NoATRReceived = 3, + eQMIUIMCardErrorCodes_VoltMismatch = 4, + eQMIUIMCardErrorCodes_ParityError = 5, + eQMIUIMCardErrorCodes_UnknownPossiblyRemoved = 6, + eQMIUIMCardErrorCodes_TechnicalProblems = 7, +}; + +// Enum to describe QMI UIM Card States +enum eQMIUIMCardStates:UINT8 +{ + eQMIUIMCardStates_Absent = 0, + eQMIUIMCardStates_Present = 1, + eQMIUIMCardStates_Error = 2, + eQMIUIMCardStates_Unknown = 3, +}; + +// Enum to describe QMI UIM Connect Operations +enum eQMIUIMConnectOperations:UINT8 +{ + eQMIUIMConnectOperations_Disconnect = 0, + eQMIUIMConnectOperations_Connect = 1, + eQMIUIMConnectOperations_CheckStatus = 2, +}; + +// Enum to describe QMI UIM Disonnect Modes +enum eQMIUIMDisonnectModes:UINT8 +{ + eQMIUIMDisonnectModes_ImmediateDisconnect = 0, + eQMIUIMDisonnectModes_GracefulShutdown = 1, +}; + +// Enum to describe QMI UIM FDN Status Values +enum eQMIUIMFDNStatusValues:UINT8 +{ + eQMIUIMFDNStatusValues_NotAvailable = 0, + eQMIUIMFDNStatusValues_AvailableButDisabled = 1, + eQMIUIMFDNStatusValues_AvailableAndEnabled = 2, +}; + +// Enum to describe QMI UIM File Control Information +enum eQMIUIMFileControlInformation:UINT8 +{ + eQMIUIMFileControlInformation_NoData = 0, + eQMIUIMFileControlInformation_FCP = 1, + eQMIUIMFileControlInformation_FCI = 2, + eQMIUIMFileControlInformation_FCIWithInterfaces = 3, + eQMIUIMFileControlInformation_FMD = 4, +}; + +// Enum to describe QMI UIM File Types +enum eQMIUIMFileTypes:UINT8 +{ + eQMIUIMFileTypes_Transparent = 0, + eQMIUIMFileTypes_Cyclic = 1, + eQMIUIMFileTypes_LinearFixed = 2, + eQMIUIMFileTypes_DedicatedFile = 3, + eQMIUIMFileTypes_MasterFile = 4, +}; + +// Enum to describe QMI UIM Files Status +enum eQMIUIMFilesStatus:UINT32 +{ + eQMIUIMFilesStatus_Deactivated = 0, + eQMIUIMFilesStatus_Activated = 1, +}; + +// Enum to describe QMI UIM Hidden Key Status Values +enum eQMIUIMHiddenKeyStatusValues:UINT8 +{ + eQMIUIMHiddenKeyStatusValues_NotSupported = 0, + eQMIUIMHiddenKeyStatusValues_EnabledAndNotVerified = 1, + eQMIUIMHiddenKeyStatusValues_EnabledAndVerified = 2, + eQMIUIMHiddenKeyStatusValues_Disabled = 3, +}; + +// Enum to describe QMI UIM Hot-Swap +enum eQMIUIMHotSwap:UINT8 +{ + eQMIUIMHotSwap_HotSwapNotSupported = 0, + eQMIUIMHotSwap_HotSwapIsSupportedButStatusOfSwitchNotSupported = 1, + eQMIUIMHotSwap_SwitchIndicatesThatCardIsPresent = 2, + eQMIUIMHotSwap_SwichIndicatesThatCardIsNotPresent = 3, +}; + +// Enum to describe QMI UIM Key Reference ID +enum eQMIUIMKeyReferenceID:UINT8 +{ + eQMIUIMKeyReferenceID_PINApplication1 = 1, + eQMIUIMKeyReferenceID_PINApplication2 = 2, + eQMIUIMKeyReferenceID_PINApplication3 = 3, + eQMIUIMKeyReferenceID_PINApplication4 = 4, + eQMIUIMKeyReferenceID_PINApplication5 = 5, + eQMIUIMKeyReferenceID_PINApplication6 = 6, + eQMIUIMKeyReferenceID_PINApplication7 = 7, + eQMIUIMKeyReferenceID_PINApplication8 = 8, +}; + +// Enum to describe QMI UIM PIN IDs +enum eQMIUIMPINIDs:UINT8 +{ + eQMIUIMPINIDs_PIN1 = 1, + eQMIUIMPINIDs_PIN2 = 2, + eQMIUIMPINIDs_UniversalPIN = 3, + eQMIUIMPINIDs_HiddenKey = 4, +}; + +// Enum to describe QMI UIM PIN Operations +enum eQMIUIMPINOperations:UINT8 +{ + eQMIUIMPINOperations_Disable = 0, + eQMIUIMPINOperations_Enable = 1, +}; + +// Enum to describe QMI UIM PIN States +enum eQMIUIMPINStates:UINT8 +{ + eQMIUIMPINStates_Unknown = 0, + eQMIUIMPINStates_EnabledAndNotVerified = 1, + eQMIUIMPINStates_EnabledAndVerified = 2, + eQMIUIMPINStates_Disabled = 3, + eQMIUIMPINStates_Blocked = 4, + eQMIUIMPINStates_PermanentlyBlocked = 5, +}; + +// Enum to describe QMI UIM Personalization Features +enum eQMIUIMPersonalizationFeatures:UINT8 +{ + eQMIUIMPersonalizationFeatures_GWNetwork = 0, + eQMIUIMPersonalizationFeatures_GWNetworkSubset = 1, + eQMIUIMPersonalizationFeatures_GWServiceProvider = 2, + eQMIUIMPersonalizationFeatures_GWCorporate = 3, + eQMIUIMPersonalizationFeatures_GWUIM = 4, + eQMIUIMPersonalizationFeatures_1XNetworkType1 = 5, + eQMIUIMPersonalizationFeatures_1XNetworkType2 = 6, + eQMIUIMPersonalizationFeatures_1XHRPD = 7, + eQMIUIMPersonalizationFeatures_1XServiceProvider = 8, + eQMIUIMPersonalizationFeatures_1XCorporate = 9, + eQMIUIMPersonalizationFeatures_1XRUIM = 10, + eQMIUIMPersonalizationFeatures_Unknown = 11, +}; + +// Enum to describe QMI UIM Personalization States +enum eQMIUIMPersonalizationStates:UINT8 +{ + eQMIUIMPersonalizationStates_Unknown = 0, + eQMIUIMPersonalizationStates_PersonalizationOperationIsInProgress = 1, + eQMIUIMPersonalizationStates_Ready = 2, + eQMIUIMPersonalizationStates_PersonalizationCodeIsRequired = 3, + eQMIUIMPersonalizationStates_PUKForPersonalizationCodeIsRequired = 4, + eQMIUIMPersonalizationStates_PermanentlyBlocked = 5, +}; + +// Enum to describe QMI UIM Refresh Modes +enum eQMIUIMRefreshModes:UINT8 +{ + eQMIUIMRefreshModes_Reset = 0, + eQMIUIMRefreshModes_Init = 1, + eQMIUIMRefreshModes_InitAndFCN = 2, + eQMIUIMRefreshModes_FCN = 3, + eQMIUIMRefreshModes_InitAndFullFCN = 4, + eQMIUIMRefreshModes_ApplicationReset = 5, + eQMIUIMRefreshModes_3GSessionReset = 6, +}; + +// Enum to describe QMI UIM Refresh Stages +enum eQMIUIMRefreshStages:UINT8 +{ + eQMIUIMRefreshStages_WaitingForOK = 0, + eQMIUIMRefreshStages_Start = 1, + eQMIUIMRefreshStages_EndWithSuccess = 2, + eQMIUIMRefreshStages_EndWithFailure = 3, +}; + +// Enum to describe QMI UIM Register Flags +enum eQMIUIMRegisterFlags:UINT8 +{ + eQMIUIMRegisterFlags_Deregister = 0, + eQMIUIMRegisterFlags_Register = 1, +}; + +// Enum to describe QMI UIM SAP Connection Conditions +enum eQMIUIMSAPConnectionConditions:UINT8 +{ + eQMIUIMSAPConnectionConditions_BlockOnActiveVoiceOrDataCall = 0, + eQMIUIMSAPConnectionConditions_BlockOnActiveDataCall = 1, + eQMIUIMSAPConnectionConditions_BlockOnActiveVoiceCall = 2, + eQMIUIMSAPConnectionConditions_Allow = 3, +}; + +// Enum to describe QMI UIM SAP Requests +enum eQMIUIMSAPRequests:UINT8 +{ + eQMIUIMSAPRequests_RetrieveATR = 0, + eQMIUIMSAPRequests_SendAPDU = 1, + eQMIUIMSAPRequests_PowerOffSIM = 2, + eQMIUIMSAPRequests_PowerOnSIM = 3, + eQMIUIMSAPRequests_ResetSIM = 4, + eQMIUIMSAPRequests_RetrieveCardReaderStatus = 5, +}; + +// Enum to describe QMI UIM SAP States +enum eQMIUIMSAPStates:UINT8 +{ + eQMIUIMSAPStates_NotEnabled = 0, + eQMIUIMSAPStates_Connecting = 1, + eQMIUIMSAPStates_ConnectedSuccessfully = 2, + eQMIUIMSAPStates_ConnectionError = 3, + eQMIUIMSAPStates_Disconnecting = 4, + eQMIUIMSAPStates_DisconnectedSuccessfully = 5, +}; + +// Enum to describe QMI UIM Security Attributes +enum eQMIUIMSecurityAttributes:UINT8 +{ + eQMIUIMSecurityAttributes_Always = 0, + eQMIUIMSecurityAttributes_Never = 1, + eQMIUIMSecurityAttributes_ANDCondition = 2, + eQMIUIMSecurityAttributes_ORCondition = 3, + eQMIUIMSecurityAttributes_SingleCondition = 4, +}; + +// Enum to describe QMI UIM Session Types +enum eQMIUIMSessionTypes:UINT8 +{ + eQMIUIMSessionTypes_PrimaryGWProvisioning = 0, + eQMIUIMSessionTypes_Primary1XProvisioning = 1, + eQMIUIMSessionTypes_SecondaryGWProvisioning = 2, + eQMIUIMSessionTypes_Secondary1XProvisioning = 3, + eQMIUIMSessionTypes_NonprovisioningOnSlot1 = 4, + eQMIUIMSessionTypes_NonprovisioningOnSlot2 = 5, + eQMIUIMSessionTypes_CardOnSlot1 = 6, + eQMIUIMSessionTypes_CardOnSlot2 = 7, + eQMIUIMSessionTypes_LogicalChannelOnSlot1 = 8, + eQMIUIMSessionTypes_LogicalChannelOnSlot2 = 9, + eQMIUIMSessionTypes_TertiaryGWProvisioning = 10, + eQMIUIMSessionTypes_Tertiary1XProvisioning = 11, + eQMIUIMSessionTypes_QuarternaryGWProvisioning = 12, + eQMIUIMSessionTypes_Quarternary1XProvisioning = 13, + eQMIUIMSessionTypes_QuinaryGWProvisioning = 14, + eQMIUIMSessionTypes_Quinary1XProvisioning = 15, + eQMIUIMSessionTypes_NonprovisioningOnSlot3 = 16, + eQMIUIMSessionTypes_NonprovisioningOnSlot4 = 17, + eQMIUIMSessionTypes_NonprovisioningOnSlot5 = 18, + eQMIUIMSessionTypes_CardOnSlot3 = 19, + eQMIUIMSessionTypes_CardOnSlot4 = 20, + eQMIUIMSessionTypes_CardOnSlot5 = 21, + eQMIUIMSessionTypes_LogicalChannelOnSlot3 = 22, + eQMIUIMSessionTypes_LogicalChannelOnSlot4 = 23, + eQMIUIMSessionTypes_LogicalChannelOnSlot5 = 24, +}; + +// Enum to describe QMI UIM Slots +enum eQMIUIMSlots:UINT8 +{ + eQMIUIMSlots_Slot1 = 1, + eQMIUIMSlots_Slot2 = 2, + eQMIUIMSlots_Slot3 = 3, + eQMIUIMSlots_Slot4 = 4, + eQMIUIMSlots_Slot5 = 5, +}; + +// Enum to describe QMI Voice ALS Line Indicators +enum eQMIVoiceALSLineIndicators:UINT8 +{ + eQMIVoiceALSLineIndicators_Line1 = 0, + eQMIVoiceALSLineIndicators_Line2 = 1, +}; + +// Enum to describe QMI Voice ALS Lines +enum eQMIVoiceALSLines:UINT8 +{ + eQMIVoiceALSLines_Line1 = 0, + eQMIVoiceALSLines_Line2 = 1, +}; + +// Enum to describe QMI Voice Alerting Patterns +enum eQMIVoiceAlertingPatterns:UINT32 +{ + eQMIVoiceAlertingPatterns_Pattern1 = 0, + eQMIVoiceAlertingPatterns_Pattern2 = 1, + eQMIVoiceAlertingPatterns_Pattern3 = 2, + eQMIVoiceAlertingPatterns_Pattern4 = 3, + eQMIVoiceAlertingPatterns_Pattern5 = 4, + eQMIVoiceAlertingPatterns_Pattern6 = 5, + eQMIVoiceAlertingPatterns_Pattern7 = 6, + eQMIVoiceAlertingPatterns_Pattern8 = 7, + eQMIVoiceAlertingPatterns_Pattern9 = 8, +}; + +// Enum to describe QMI Voice Alerting Types +enum eQMIVoiceAlertingTypes:UINT8 +{ + eQMIVoiceAlertingTypes_Local = 0, + eQMIVoiceAlertingTypes_Remote = 1, +}; + +// Enum to describe QMI Voice CLIR Causes +enum eQMIVoiceCLIRCauses:UINT8 +{ + eQMIVoiceCLIRCauses_None = 0, + eQMIVoiceCLIRCauses_RejectedByUser = 1, + eQMIVoiceCLIRCauses_InteractionWithOtherServices = 2, + eQMIVoiceCLIRCauses_CoinLine = 3, + eQMIVoiceCLIRCauses_ServiceUnavailable = 4, + eQMIVoiceCLIRCauses_Reserved = 5, +}; + +// Enum to describe QMI Voice CLIR Types +enum eQMIVoiceCLIRTypes:UINT8 +{ + eQMIVoiceCLIRTypes_Supression = 1, + eQMIVoiceCLIRTypes_Invocation = 2, +}; + +// Enum to describe QMI Voice Call Control Alpha Codes +enum eQMIVoiceCallControlAlphaCodes:UINT32 +{ + eQMIVoiceCallControlAlphaCodes_NotPresent = 0, + eQMIVoiceCallControlAlphaCodes_Present = 1, + eQMIVoiceCallControlAlphaCodes_ZeroLength = 2, +}; + +// Enum to describe QMI Voice Call Control Result Types +enum eQMIVoiceCallControlResultTypes:UINT8 +{ + eQMIVoiceCallControlResultTypes_Voice = 0, + eQMIVoiceCallControlResultTypes_SupplementaryService = 1, + eQMIVoiceCallControlResultTypes_USSD = 2, +}; + +// Enum to describe QMI Voice Call Control Results +enum eQMIVoiceCallControlResults:UINT32 +{ + eQMIVoiceCallControlResults_AllowedWithoutModification = 0, + eQMIVoiceCallControlResults_NotAllowed = 1, + eQMIVoiceCallControlResults_AllowedWithModification = 2, + eQMIVoiceCallControlResults_AllowedModifiedToVoice = 3, + eQMIVoiceCallControlResults_AllowedModifiedToSS = 4, + eQMIVoiceCallControlResults_AllowedModifiedToUSSD = 5, +}; + +// Enum to describe QMI Voice Call Directions +enum eQMIVoiceCallDirections:UINT8 +{ + eQMIVoiceCallDirections_MobileOriginated = 1, + eQMIVoiceCallDirections_MobileTerminated = 2, +}; + +// Enum to describe QMI Voice Call Modes +enum eQMIVoiceCallModes:UINT8 +{ + eQMIVoiceCallModes_NoService = 0, + eQMIVoiceCallModes_CDMA = 1, + eQMIVoiceCallModes_GSM = 2, + eQMIVoiceCallModes_UMTS = 3, + eQMIVoiceCallModes_LTE = 4, + eQMIVoiceCallModes_TDSCDMA = 5, + eQMIVoiceCallModes_Unknown = 6, + eQMIVoiceCallModes_WLAN = 7, +}; + +// Enum to describe QMI Voice Call States +enum eQMIVoiceCallStates:UINT8 +{ + eQMIVoiceCallStates_Origination = 1, + eQMIVoiceCallStates_Incoming = 2, + eQMIVoiceCallStates_Conversation = 3, + eQMIVoiceCallStates_InProgress = 4, + eQMIVoiceCallStates_Alerting = 5, + eQMIVoiceCallStates_Hold = 6, + eQMIVoiceCallStates_Waiting = 7, + eQMIVoiceCallStates_Disconnecting = 8, + eQMIVoiceCallStates_End = 9, + eQMIVoiceCallStates_Setup = 10, +}; + +// Enum to describe QMI Voice Call Types +enum eQMIVoiceCallTypes:UINT8 +{ + eQMIVoiceCallTypes_VoiceAutomaticSelection = 0, + eQMIVoiceCallTypes_Forced = 1, + eQMIVoiceCallTypes_VoiceOverIP = 2, + eQMIVoiceCallTypes_VideoOverIP = 3, + eQMIVoiceCallTypes_Videoshare = 4, + eQMIVoiceCallTypes_TestCall = 5, + eQMIVoiceCallTypes_OTAPA = 6, + eQMIVoiceCallTypes_StandardOTASP = 7, + eQMIVoiceCallTypes_NonStandardOTASP = 8, + eQMIVoiceCallTypes_Emergency = 9, + eQMIVoiceCallTypes_SupplementaryService = 10, + eQMIVoiceCallTypes_EmergencyVoIP = 11, + eQMIVoiceCallTypes_ECall = 12, +}; + +// Enum to describe QMI Voice DTMF Events +enum eQMIVoiceDTMFEvents:UINT8 +{ + eQMIVoiceDTMFEvents_SendDTMFBurst = 0, + eQMIVoiceDTMFEvents_StartSendingContinuousDTMFTone = 1, + eQMIVoiceDTMFEvents_StopSendingContinuousDTMFTone = 3, + eQMIVoiceDTMFEvents_ReceiveDTMFBurst = 4, + eQMIVoiceDTMFEvents_StartReceivingContinuousDTMFTone = 6, + eQMIVoiceDTMFEvents_StopReceivingContinuousDTMFTone = 7, +}; + +// Enum to describe QMI Voice DTMF Privacy Levels +enum eQMIVoiceDTMFPrivacyLevels:UINT8 +{ + eQMIVoiceDTMFPrivacyLevels_Standard = 0, + eQMIVoiceDTMFPrivacyLevels_Enhanced = 1, +}; + +// Enum to describe QMI Voice Domains +enum eQMIVoiceDomains:UINT8 +{ + eQMIVoiceDomains_CSOnly = 0, + eQMIVoiceDomains_PSOnly = 1, + eQMIVoiceDomains_CSThenPS = 2, + eQMIVoiceDomains_PSThenCS = 3, +}; + +// Enum to describe QMI Voice ECT Call States +enum eQMIVoiceECTCallStates:UINT8 +{ + eQMIVoiceECTCallStates_None = 0, + eQMIVoiceECTCallStates_Alerting = 1, + eQMIVoiceECTCallStates_Active = 2, +}; + +// Enum to describe QMI Voice ECall Variants +enum eQMIVoiceECallVariants:UINT32 +{ + eQMIVoiceECallVariants_Test = 1, + eQMIVoiceECallVariants_Emergency = 2, + eQMIVoiceECallVariants_Reconfig = 3, +}; + +// Enum to describe QMI Voice End Reasons +enum eQMIVoiceEndReasons:UINT16 +{ + eQMIVoiceEndReasons_Offline = 0, + eQMIVoiceEndReasons_CDMALocked = 20, + eQMIVoiceEndReasons_NoService = 21, + eQMIVoiceEndReasons_Fade = 22, + eQMIVoiceEndReasons_Intercept = 23, + eQMIVoiceEndReasons_Reorder = 24, + eQMIVoiceEndReasons_NormalRelease = 25, + eQMIVoiceEndReasons_SORejectRelease = 26, + eQMIVoiceEndReasons_IncomingCall = 27, + eQMIVoiceEndReasons_AlertStop = 28, + eQMIVoiceEndReasons_ClientEnd = 29, + eQMIVoiceEndReasons_Activation = 30, + eQMIVoiceEndReasons_MCAbort = 31, + eQMIVoiceEndReasons_MaxAccessProbes = 32, + eQMIVoiceEndReasons_PersistentTestFailure = 33, + eQMIVoiceEndReasons_RUIMNotPresent = 34, + eQMIVoiceEndReasons_InProgressAccessAttempt = 35, + eQMIVoiceEndReasons_AccessFailure = 36, + eQMIVoiceEndReasons_RetryOrderReceived = 37, + eQMIVoiceEndReasons_ConcurrentServiceNotSupported = 38, + eQMIVoiceEndReasons_NoBaseStationResponse = 39, + eQMIVoiceEndReasons_BaseStationReject = 40, + eQMIVoiceEndReasons_IncompatibleConcurrentServices = 41, + eQMIVoiceEndReasons_AccessBlocked = 42, + eQMIVoiceEndReasons_AlreadyinTC = 43, + eQMIVoiceEndReasons_EmergencyFlashed = 44, + eQMIVoiceEndReasons_GPSCallEnding = 45, + eQMIVoiceEndReasons_SMSCallEnding = 46, + eQMIVoiceEndReasons_DataCallEnding = 47, + eQMIVoiceEndReasons_RedirectionOrHandoff = 48, + eQMIVoiceEndReasons_AllAccessBlocked = 49, + eQMIVoiceEndReasons_OTASPSPCError = 50, + eQMIVoiceEndReasons_MaxIS707BAccessProbes = 51, + eQMIVoiceEndReasons_BaseStationRejectOrder = 52, + eQMIVoiceEndReasons_BaseStationRetryOrder = 53, + eQMIVoiceEndReasons_TimerT42Expired = 54, + eQMIVoiceEndReasons_TimerT40Expired = 55, + eQMIVoiceEndReasons_ServiceInitializationFailure = 56, + eQMIVoiceEndReasons_TimerT50MExpired = 57, + eQMIVoiceEndReasons_TimerT51MExpired = 58, + eQMIVoiceEndReasons_ACKTimeoutDueTo12Retransmissions = 59, + eQMIVoiceEndReasons_BadForwardLinkOrTimerT5MExpired = 60, + eQMIVoiceEndReasons_TransceiverResourceManagerRequestFailed = 61, + eQMIVoiceEndReasons_TimerT41Expired = 62, + eQMIVoiceEndReasons_IncomingCallRejected = 102, + eQMIVoiceEndReasons_SetupIndicationRejected = 103, + eQMIVoiceEndReasons_NetworkEndedCall = 104, + eQMIVoiceEndReasons_NoFunds = 105, + eQMIVoiceEndReasons_NoGWSErvice = 106, + eQMIVoiceEndReasons_NoCDMAService = 107, + eQMIVoiceEndReasons_NoFullService = 108, + eQMIVoiceEndReasons_MaxPSCalls = 109, + eQMIVoiceEndReasons_SUPSUknownSubscriber = 110, + eQMIVoiceEndReasons_SUPSIllegalSubscriber = 111, + eQMIVoiceEndReasons_SUPSBearerServiceNotProvisioned = 112, + eQMIVoiceEndReasons_SUPSTeleserviceNotProvisioned = 113, + eQMIVoiceEndReasons_SUPSIllegalEquipment = 114, + eQMIVoiceEndReasons_SUPSCallBarred = 115, + eQMIVoiceEndReasons_SUPSIllegalSSOperation = 116, + eQMIVoiceEndReasons_SUPSSSErrorStatus = 117, + eQMIVoiceEndReasons_SUPSSSNotAvailable = 118, + eQMIVoiceEndReasons_SUPSSSSubscriptionViolation = 119, + eQMIVoiceEndReasons_SUPSSSIncompatibility = 120, + eQMIVoiceEndReasons_SUPSFacilityNotSupported = 121, + eQMIVoiceEndReasons_SUPSAbscentSubscriber = 122, + eQMIVoiceEndReasons_SUPSShortTermDenial = 123, + eQMIVoiceEndReasons_SUPSLongTermDenial = 124, + eQMIVoiceEndReasons_SUPSSystemFailure = 125, + eQMIVoiceEndReasons_SUPSDataMissing = 126, + eQMIVoiceEndReasons_SUPSUnexpectedDataValue = 127, + eQMIVoiceEndReasons_SUPSPasswordRegistrationFailure = 128, + eQMIVoiceEndReasons_SUPSNegativePasswordCheck = 129, + eQMIVoiceEndReasons_SUPSPasswordAttemptsViolation = 130, + eQMIVoiceEndReasons_SUPSPositionMethodFailure = 131, + eQMIVoiceEndReasons_SUPSUnknownAlphabet = 132, + eQMIVoiceEndReasons_SUPSUSSDBusy = 133, + eQMIVoiceEndReasons_SUPSRejectedByUser = 134, + eQMIVoiceEndReasons_SUPSRejectedByNetwork = 135, + eQMIVoiceEndReasons_SUPSDelectiontoServedSubscriber = 136, + eQMIVoiceEndReasons_SUPSSpecialServiceCode = 137, + eQMIVoiceEndReasons_SUPSInvalidDeflectedToNumber = 138, + eQMIVoiceEndReasons_SUPSMultipartyParticipantsExceeded = 139, + eQMIVoiceEndReasons_SUPSResourcesNotAvailable = 140, + eQMIVoiceEndReasons_CCUnassignedNumber = 141, + eQMIVoiceEndReasons_CCNoRouteToDestination = 142, + eQMIVoiceEndReasons_CCChannelUnacceptable = 143, + eQMIVoiceEndReasons_CCOperatorDeterminedBarring = 144, + eQMIVoiceEndReasons_CCNormalCallClearing = 145, + eQMIVoiceEndReasons_CCUserBusy = 146, + eQMIVoiceEndReasons_CCNoUserResponding = 147, + eQMIVoiceEndReasons_CCUserAlertingNoAnsewer = 148, + eQMIVoiceEndReasons_CCCallRejected = 149, + eQMIVoiceEndReasons_CCNumberChanged = 150, + eQMIVoiceEndReasons_CCPreemption = 151, + eQMIVoiceEndReasons_CCDestinationOutOfOrder = 152, + eQMIVoiceEndReasons_CCInvalidNumber = 153, + eQMIVoiceEndReasons_CCFacilityRejected = 154, + eQMIVoiceEndReasons_CCResponseToStatusEnquiry = 155, + eQMIVoiceEndReasons_CCNormalUnspecified = 156, + eQMIVoiceEndReasons_CCNoCircuitOrChannelAvailable = 157, + eQMIVoiceEndReasons_CCNetworkOutOfOrder = 158, + eQMIVoiceEndReasons_CCTemporaryFailure = 159, + eQMIVoiceEndReasons_CCSwitchingEquipmentCongestion = 160, + eQMIVoiceEndReasons_CCAccessInformationDiscarded = 161, + eQMIVoiceEndReasons_CCRequestedCircuitOrChannelNotAvailable = 162, + eQMIVoiceEndReasons_CCResourcesUnavailable = 163, + eQMIVoiceEndReasons_CCQOSUnavailable = 164, + eQMIVoiceEndReasons_CCRequestedFacilityNotSubscribed = 165, + eQMIVoiceEndReasons_CCIncomingCallsBarredWithinCUG = 166, + eQMIVoiceEndReasons_CCBearerCapabilityNotAuthorized = 167, + eQMIVoiceEndReasons_CCBearerCapabilityUnavailable = 168, + eQMIVoiceEndReasons_CCServiceOptionNotAvailable = 169, + eQMIVoiceEndReasons_CCACMLimitExceeded = 170, + eQMIVoiceEndReasons_CCBearerServiceNotImplemented = 171, + eQMIVoiceEndReasons_CCRequestedFacilityNotAvailable = 172, + eQMIVoiceEndReasons_CCOnlyDigitalInformationBearerAvailable = 173, + eQMIVoiceEndReasons_CCServiceOrOptionNotImplemented = 174, + eQMIVoiceEndReasons_CCInvalidTransactionIdentifier = 175, + eQMIVoiceEndReasons_CCUserNotMemberOfCUG = 176, + eQMIVoiceEndReasons_CCIncompatibleDestination = 177, + eQMIVoiceEndReasons_CCInvalidTransitNWSelection = 178, + eQMIVoiceEndReasons_CCSemanticallyIncorrectMessage = 179, + eQMIVoiceEndReasons_CCInvalidMandatoryInformation = 180, + eQMIVoiceEndReasons_CCMessageTypeNotImplemented = 181, + eQMIVoiceEndReasons_CCMessageTypeNotCompatible = 182, + eQMIVoiceEndReasons_CCInformationElementNonexistent = 183, + eQMIVoiceEndReasons_CCConditionalInformationElementError = 184, + eQMIVoiceEndReasons_CCMessageNotCompatible = 185, + eQMIVoiceEndReasons_CCRecoveryOnTimerExpired = 186, + eQMIVoiceEndReasons_CCProtocolErrorUnspecified = 187, + eQMIVoiceEndReasons_CCInternetworkingUnspecified = 188, + eQMIVoiceEndReasons_CCOutgoingCallsBarredWithinCUG = 189, + eQMIVoiceEndReasons_CCNoCUGSelection = 190, + eQMIVoiceEndReasons_CCUnknownCUGIndex = 191, + eQMIVoiceEndReasons_CCIncompatibleCUGIndex = 192, + eQMIVoiceEndReasons_CCCUGCallFailureunspecified = 193, + eQMIVoiceEndReasons_CCCLIRNotSubscribed = 194, + eQMIVoiceEndReasons_CCCCBSPossible = 195, + eQMIVoiceEndReasons_CCCCBSNotPossible = 196, + eQMIVoiceEndReasons_MMGMMIMSIUnknwonInHLR = 197, + eQMIVoiceEndReasons_MMGMMIllegalMS = 198, + eQMIVoiceEndReasons_MMGMMIMSIUnknownInVLR = 199, + eQMIVoiceEndReasons_MMGMMIMEINotAccepted = 200, + eQMIVoiceEndReasons_MMGMMIllegalME = 201, + eQMIVoiceEndReasons_MMGMMPLMNNotAllowed = 202, + eQMIVoiceEndReasons_MMGMMLocationAreaNotAllowed = 203, + eQMIVoiceEndReasons_MMGMMRoamingNotAllowedInThisLocationArea = 204, + eQMIVoiceEndReasons_MMGMMNoSuitableCellsInLocationArea = 205, + eQMIVoiceEndReasons_MMGMMNetworkFailure = 206, + eQMIVoiceEndReasons_MMGMMMACFailure = 207, + eQMIVoiceEndReasons_MMGMMSynchFailure = 208, + eQMIVoiceEndReasons_MMGMMNetworkCongestion = 209, + eQMIVoiceEndReasons_MMGMMGSMAuthenticationUnacceptable = 210, + eQMIVoiceEndReasons_MMGMMServiceNotSubscribed = 211, + eQMIVoiceEndReasons_MMGMMServiceTemporarilyOutOfOrder = 212, + eQMIVoiceEndReasons_MMGMMCallCannotBeIdentified = 213, + eQMIVoiceEndReasons_MMGMMIncorrectSemanticsInMessage = 214, + eQMIVoiceEndReasons_MMGMMMadatoryInformationInvalid = 215, + eQMIVoiceEndReasons_MMGMMAccessStratumFailure = 216, + eQMIVoiceEndReasons_MMGMMInvalidSIM = 217, + eQMIVoiceEndReasons_MMGMMWrongState = 218, + eQMIVoiceEndReasons_MMGMMAcessClassBloacked = 219, + eQMIVoiceEndReasons_MMGMMNoResources = 220, + eQMIVoiceEndReasons_MMGMMInvalidUserData = 221, + eQMIVoiceEndReasons_MMRejectTimerT3230Expired = 222, + eQMIVoiceEndReasons_MMRejectNoCellAvailable = 223, + eQMIVoiceEndReasons_MMRejectAbortMessageReceived = 224, + eQMIVoiceEndReasons_MMRejectRadioLinkLost = 225, + eQMIVoiceEndReasons_CNMRejectTimerT303Expired = 226, + eQMIVoiceEndReasons_CNMRejectCNMMMReleaseIsPending = 227, + eQMIVoiceEndReasons_AccessStratumRRReleaseIndication = 228, + eQMIVoiceEndReasons_AccessStratumRandomAccessFailure = 229, + eQMIVoiceEndReasons_AccessStratumRRCReleaseIndication = 230, + eQMIVoiceEndReasons_AccessStratumCloseSessionIndication = 231, + eQMIVoiceEndReasons_AccessStratumOpenSessionFailure = 232, + eQMIVoiceEndReasons_AccessStratumLowLevelFailure = 233, + eQMIVoiceEndReasons_AccessStratumRedialNotAllowed = 234, + eQMIVoiceEndReasons_AccessStratumImmediateRetry = 235, + eQMIVoiceEndReasons_AccessStratumAbortRadioUnavailable = 236, + eQMIVoiceEndReasons_OTARejectSONotSupported = 237, + eQMIVoiceEndReasons_IPBadRequestWaitingForInvite = 300, + eQMIVoiceEndReasons_IPBadRequestWaitingForReinvite = 301, + eQMIVoiceEndReasons_IPCalledPartyDoesNotExist = 302, + eQMIVoiceEndReasons_IPUnsupportedMediaType = 303, + eQMIVoiceEndReasons_IPTemporarilyUnavailable = 304, + eQMIVoiceEndReasons_IPNoNetworkReponseTimeout = 305, + eQMIVoiceEndReasons_IPUnableToPutCallOnHold = 306, + eQMIVoiceEndReasons_IPMovedToEHRPD = 307, + eQMIVoiceEndReasons_IPUpgradeOrDowngradeRejected = 308, + eQMIVoiceEndReasons_IPCallForbidden = 309, + eQMIVoiceEndReasons_IPGenericTimeout = 310, + eQMIVoiceEndReasons_IPUpgradeOrDowngradeFailed = 311, + eQMIVoiceEndReasons_IPUpgradeOrDowngradeCancelled = 312, + eQMIVoiceEndReasons_IPSSACBarring = 313, + eQMIVoiceEndReasons_IPThermalEmergency = 314, + eQMIVoiceEndReasons_IP1xCSFBSoftFailure = 315, + eQMIVoiceEndReasons_IP1xCSFBHardFailure = 316, +}; + +// Enum to describe QMI Voice Even Odd Indicators +enum eQMIVoiceEvenOddIndicators:UINT8 +{ + eQMIVoiceEvenOddIndicators_EvenNumber = 0, + eQMIVoiceEvenOddIndicators_OddNumber = 1, +}; + +// Enum to describe QMI Voice Extended Service Class +enum eQMIVoiceExtendedServiceClass +{ + eQMIVoiceExtendedServiceClass_Voice = 1, + eQMIVoiceExtendedServiceClass_Data = 2, + eQMIVoiceExtendedServiceClass_Fax = 4, + eQMIVoiceExtendedServiceClass_AllTeleservicesExceptSMS = 5, + eQMIVoiceExtendedServiceClass_SMS = 8, + eQMIVoiceExtendedServiceClass_AllTeleservicesData = 12, + eQMIVoiceExtendedServiceClass_AllTeleservices = 13, + eQMIVoiceExtendedServiceClass_SynchronousData = 16, + eQMIVoiceExtendedServiceClass_AllPositionDeterminationServiceData = 17, + eQMIVoiceExtendedServiceClass_AsynchronousData = 32, + eQMIVoiceExtendedServiceClass_AllSynchronousAsynchronousData = 48, + eQMIVoiceExtendedServiceClass_PacketData = 64, + eQMIVoiceExtendedServiceClass_AllSynchronousData = 80, + eQMIVoiceExtendedServiceClass_PacketAssemblerDisassemblerData = 128, + eQMIVoiceExtendedServiceClass_AllAsynchronousData = 160, + eQMIVoiceExtendedServiceClass_PLMNSpecificAllTeleservices = 53248, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices1 = 53504, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices2 = 53760, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices3 = 54016, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices4 = 54272, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices5 = 54528, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices6 = 54784, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices7 = 55040, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices8 = 55296, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices9 = 55552, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices10 = 55808, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices11 = 56064, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices12 = 56320, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices13 = 56576, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices14 = 56832, + eQMIVoiceExtendedServiceClass_PLMNSpecificTeleservices15 = 57088, +}; + +// Enum to describe QMI Voice Flash Types +enum eQMIVoiceFlashTypes:UINT8 +{ + eQMIVoiceFlashTypes_Simple = 0, + eQMIVoiceFlashTypes_ActivateAnswerHold = 1, + eQMIVoiceFlashTypes_DeactivateAnswerHold = 2, +}; + +// Enum to describe QMI Voice Handover States +enum eQMIVoiceHandoverStates:UINT32 +{ + eQMIVoiceHandoverStates_Start = 1, + eQMIVoiceHandoverStates_Fail = 2, + eQMIVoiceHandoverStates_Complete = 3, + eQMIVoiceHandoverStates_Cancel = 4, +}; + +// Enum to describe QMI Voice Interdigit Intervals +enum eQMIVoiceInterdigitIntervals:UINT8 +{ + eQMIVoiceInterdigitIntervals_60ms = 0, + eQMIVoiceInterdigitIntervals_100ms = 1, + eQMIVoiceInterdigitIntervals_150ms = 2, + eQMIVoiceInterdigitIntervals_200ms = 3, +}; + +// Enum to describe QMI Voice NSS Releases +enum eQMIVoiceNSSReleases:UINT8 +{ + eQMIVoiceNSSReleases_Finished = 1, +}; + +// Enum to describe QMI Voice Network Mode +enum eQMIVoiceNetworkMode:UINT32 +{ + eQMIVoiceNetworkMode_None = 0, + eQMIVoiceNetworkMode_GSM = 1, + eQMIVoiceNetworkMode_WCDMA = 2, + eQMIVoiceNetworkMode_CDMA = 3, + eQMIVoiceNetworkMode_LTE = 4, + eQMIVoiceNetworkMode_TDSCDMA = 5, +}; + +// Enum to describe QMI Voice Number Plans +enum eQMIVoiceNumberPlans:UINT8 +{ + eQMIVoiceNumberPlans_Unknown = 0, + eQMIVoiceNumberPlans_ISDN = 1, + eQMIVoiceNumberPlans_Data = 3, + eQMIVoiceNumberPlans_Telex = 4, + eQMIVoiceNumberPlans_National = 8, + eQMIVoiceNumberPlans_Private = 9, + eQMIVoiceNumberPlans_ReservedCTS = 11, + eQMIVoiceNumberPlans_ReservedExtension = 15, +}; + +// Enum to describe QMI Voice Number Types +enum eQMIVoiceNumberTypes:UINT8 +{ + eQMIVoiceNumberTypes_Unknown = 0, + eQMIVoiceNumberTypes_International = 1, + eQMIVoiceNumberTypes_National = 2, + eQMIVoiceNumberTypes_NetworkSpecific = 3, + eQMIVoiceNumberTypes_Subscriber = 4, + eQMIVoiceNumberTypes_Reserved = 5, + eQMIVoiceNumberTypes_Abbreviated = 6, + eQMIVoiceNumberTypes_ReservedExtension = 7, +}; + +// Enum to describe QMI Voice OTASP Stati +enum eQMIVoiceOTASPStati:UINT8 +{ + eQMIVoiceOTASPStati_Unlocked = 0, + eQMIVoiceOTASPStati_RetriesExceeded = 1, + eQMIVoiceOTASPStati_AKeyExchanged = 2, + eQMIVoiceOTASPStati_SSDUpdated = 3, + eQMIVoiceOTASPStati_NAMDownloaded = 4, + eQMIVoiceOTASPStati_MDNDownloaded = 5, + eQMIVoiceOTASPStati_IMSIDownloaded = 6, + eQMIVoiceOTASPStati_PRLDownloaded = 7, + eQMIVoiceOTASPStati_Committed = 8, + eQMIVoiceOTASPStati_OTAPAStarted = 9, + eQMIVoiceOTASPStati_OTAPAStopped = 10, + eQMIVoiceOTASPStati_OTAPAAborted = 11, + eQMIVoiceOTASPStati_OTAPACommitted = 12, +}; + +// Enum to describe QMI Voice Presentation Indicators +enum eQMIVoicePresentationIndicators:UINT8 +{ + eQMIVoicePresentationIndicators_Allowed = 0, + eQMIVoicePresentationIndicators_Restricted = 1, + eQMIVoicePresentationIndicators_Unavailable = 2, + eQMIVoicePresentationIndicators_NameRestricted = 3, + eQMIVoicePresentationIndicators_PayPhone = 4, +}; + +// Enum to describe QMI Voice Presentation Indicators 32-Bit +enum eQMIVoicePresentationIndicators32Bit:UINT32 +{ + eQMIVoicePresentationIndicators32Bit_Allowed = 0, + eQMIVoicePresentationIndicators32Bit_Restricted = 1, +}; + +// Enum to describe QMI Voice Privacy Levels +enum eQMIVoicePrivacyLevels:UINT8 +{ + eQMIVoicePrivacyLevels_Standard = 0, + eQMIVoicePrivacyLevels_Enhanced = 1, +}; + +// Enum to describe QMI Voice Provisioning States +enum eQMIVoiceProvisioningStates:UINT8 +{ + eQMIVoiceProvisioningStates_NotProvisioned = 0, + eQMIVoiceProvisioningStates_ProvisionedPermanent = 1, + eQMIVoiceProvisioningStates_PresentationRestricted = 2, + eQMIVoiceProvisioningStates_PresentationAllowed = 3, +}; + +// Enum to describe QMI Voice Pulse Widths +enum eQMIVoicePulseWidths:UINT8 +{ + eQMIVoicePulseWidths_95ms = 0, + eQMIVoicePulseWidths_150ms = 1, + eQMIVoicePulseWidths_200ms = 2, + eQMIVoicePulseWidths_250ms = 3, + eQMIVoicePulseWidths_300ms = 4, + eQMIVoicePulseWidths_350ms = 5, + eQMIVoicePulseWidths_SMSTXSpecial = 6, +}; + +// Enum to describe QMI Voice Screening Indicators +enum eQMIVoiceScreeningIndicators:UINT8 +{ + eQMIVoiceScreeningIndicators_UserNotScreened = 0, + eQMIVoiceScreeningIndicators_UserPassedVerification = 1, + eQMIVoiceScreeningIndicators_UserFailedVerification = 2, + eQMIVoiceScreeningIndicators_ProvidedNetwork = 3, +}; + +// Enum to describe QMI Voice Service Options +enum eQMIVoiceServiceOptions:UINT16 +{ + eQMIVoiceServiceOptions_Any = 0, + eQMIVoiceServiceOptions_IS96A = 1, + eQMIVoiceServiceOptions_EVRC = 3, + eQMIVoiceServiceOptions_IS73313K = 17, + eQMIVoiceServiceOptions_SelectableModeVocoder = 56, + eQMIVoiceServiceOptions_4GVNarrowBand = 68, + eQMIVoiceServiceOptions_4GVWideBand = 70, + eQMIVoiceServiceOptions_13K = 32768, + eQMIVoiceServiceOptions_IS96 = 32769, + eQMIVoiceServiceOptions_WVRC = 32803, +}; + +// Enum to describe QMI Voice Service Types +enum eQMIVoiceServiceTypes:UINT32 +{ + eQMIVoiceServiceTypes_Automatic = 1, + eQMIVoiceServiceTypes_GSM = 2, + eQMIVoiceServiceTypes_WCDMA = 3, + eQMIVoiceServiceTypes_CDMAAutomatic = 4, + eQMIVoiceServiceTypes_GSMOrWCDMA = 5, + eQMIVoiceServiceTypes_LTE = 6, + eQMIVoiceServiceTypes_TDSCDMA = 7, + eQMIVoiceServiceTypes_GSMOrWCDMAOrTDSCDMA = 8, + eQMIVoiceServiceTypes_CSOnly = 9, +}; + +// Enum to describe QMI Voice Speech Codec Type +enum eQMIVoiceSpeechCodecType:UINT32 +{ + eQMIVoiceSpeechCodecType_None = 0, + eQMIVoiceSpeechCodecType_QCELP13K = 1, + eQMIVoiceSpeechCodecType_EVRC = 2, + eQMIVoiceSpeechCodecType_EVRCB = 3, + eQMIVoiceSpeechCodecType_EVRCWideband = 4, + eQMIVoiceSpeechCodecType_EVRCNarrowbandWideband = 5, + eQMIVoiceSpeechCodecType_AMRNarrowband = 6, + eQMIVoiceSpeechCodecType_AMRWideband = 7, + eQMIVoiceSpeechCodecType_GSMEnhancedFullRate = 8, + eQMIVoiceSpeechCodecType_GSMFullRate = 9, + eQMIVoiceSpeechCodecType_GSMHalfRate = 10, +}; + +// Enum to describe QMI Voice Subaddress Types +enum eQMIVoiceSubaddressTypes:UINT8 +{ + eQMIVoiceSubaddressTypes_NSAP = 0, + eQMIVoiceSubaddressTypes_User = 1, +}; + +// Enum to describe QMI Voice Subscription Types +enum eQMIVoiceSubscriptionTypes:UINT8 +{ + eQMIVoiceSubscriptionTypes_Primary = 0, + eQMIVoiceSubscriptionTypes_Secondary = 1, + eQMIVoiceSubscriptionTypes_Tertiary = 2, +}; + +// Enum to describe QMI Voice Supplementary Notification Types +enum eQMIVoiceSupplementaryNotificationTypes:UINT8 +{ + eQMIVoiceSupplementaryNotificationTypes_OutgoingCallIsForwarded = 1, + eQMIVoiceSupplementaryNotificationTypes_OutgoingCallIsWaiting = 2, + eQMIVoiceSupplementaryNotificationTypes_OutgoingCUGCall = 3, + eQMIVoiceSupplementaryNotificationTypes_OutgoingCallsBarred = 4, + eQMIVoiceSupplementaryNotificationTypes_OutgoingCallIsDeflected = 5, + eQMIVoiceSupplementaryNotificationTypes_IncomingCUGCall = 6, + eQMIVoiceSupplementaryNotificationTypes_IncomingCallsBarred = 7, + eQMIVoiceSupplementaryNotificationTypes_IncomingForwardedCall = 8, + eQMIVoiceSupplementaryNotificationTypes_IncomingDeflectedCall = 9, + eQMIVoiceSupplementaryNotificationTypes_IncomingCallIsForwarded = 10, + eQMIVoiceSupplementaryNotificationTypes_UnconditionalCallForwardingActive = 11, + eQMIVoiceSupplementaryNotificationTypes_ConditionalCallForwardingActive = 12, + eQMIVoiceSupplementaryNotificationTypes_CLIRSuppressionRejected = 13, + eQMIVoiceSupplementaryNotificationTypes_CallIsOnHold = 14, + eQMIVoiceSupplementaryNotificationTypes_CallIsRetrieved = 15, + eQMIVoiceSupplementaryNotificationTypes_CallIsInConference = 16, + eQMIVoiceSupplementaryNotificationTypes_CallIsECTWhileAnotherCallIsAlerting = 17, + eQMIVoiceSupplementaryNotificationTypes_CallIsECTWhileAnotherCallIsActive = 18, +}; + +// Enum to describe QMI Voice Supplementary Service Call Types +enum eQMIVoiceSupplementaryServiceCallTypes:UINT8 +{ + eQMIVoiceSupplementaryServiceCallTypes_ReleaseHeldOrWaiting = 1, + eQMIVoiceSupplementaryServiceCallTypes_ReleaseActiveAcceptHeldOrWaiting = 2, + eQMIVoiceSupplementaryServiceCallTypes_HoldActiveAcceptHeldOrWaiting = 3, + eQMIVoiceSupplementaryServiceCallTypes_HoldAllExceptSpecifiedCall = 4, + eQMIVoiceSupplementaryServiceCallTypes_MakeConferenceCall = 5, + eQMIVoiceSupplementaryServiceCallTypes_ExplicitCallTransfer = 6, + eQMIVoiceSupplementaryServiceCallTypes_CCBSActivation = 7, + eQMIVoiceSupplementaryServiceCallTypes_EndAllCalls = 8, + eQMIVoiceSupplementaryServiceCallTypes_ReleaseSpecifiedCall = 9, + eQMIVoiceSupplementaryServiceCallTypes_AllActiveCallsOnLocalHold = 10, + eQMIVoiceSupplementaryServiceCallTypes_RetrieveLocallyHeldCalls = 11, +}; + +// Enum to describe QMI Voice Supplementary Service Codes +enum eQMIVoiceSupplementaryServiceCodes:UINT32 +{ + eQMIVoiceSupplementaryServiceCodes_ForwardUnconditional = 1, + eQMIVoiceSupplementaryServiceCodes_ForwardMobileBusy = 2, + eQMIVoiceSupplementaryServiceCodes_ForwardNoReply = 3, + eQMIVoiceSupplementaryServiceCodes_ForwardUnreachable = 4, + eQMIVoiceSupplementaryServiceCodes_ForwardAllForwarding = 5, + eQMIVoiceSupplementaryServiceCodes_ForwardAllConditional = 6, +}; + +// Enum to describe QMI Voice Supplementary Service Reasons +enum eQMIVoiceSupplementaryServiceReasons:UINT8 +{ + eQMIVoiceSupplementaryServiceReasons_ForwardUnconditional = 1, + eQMIVoiceSupplementaryServiceReasons_ForwardMobileBusy = 2, + eQMIVoiceSupplementaryServiceReasons_ForwardNoReply = 3, + eQMIVoiceSupplementaryServiceReasons_ForwardUnreachable = 4, + eQMIVoiceSupplementaryServiceReasons_ForwardAllForwarding = 5, + eQMIVoiceSupplementaryServiceReasons_ForwardAllConditional = 6, + eQMIVoiceSupplementaryServiceReasons_BarrAllOutgoing = 7, + eQMIVoiceSupplementaryServiceReasons_BarrOutgoingInt = 8, + eQMIVoiceSupplementaryServiceReasons_BarrOutgoingIntExtToHome = 9, + eQMIVoiceSupplementaryServiceReasons_BarrAllIncoming = 10, + eQMIVoiceSupplementaryServiceReasons_BarrIncomingRoaming = 11, + eQMIVoiceSupplementaryServiceReasons_BarrAllBarring = 12, + eQMIVoiceSupplementaryServiceReasons_BarrAllOutgoingBarring = 13, + eQMIVoiceSupplementaryServiceReasons_BarrAllIncomingBarring = 14, + eQMIVoiceSupplementaryServiceReasons_CallWaiting = 15, + eQMIVoiceSupplementaryServiceReasons_CLIR = 16, + eQMIVoiceSupplementaryServiceReasons_CLIP = 17, +}; + +// Enum to describe QMI Voice Supplementary Service Requests +enum eQMIVoiceSupplementaryServiceRequests:UINT8 +{ + eQMIVoiceSupplementaryServiceRequests_Activate = 1, + eQMIVoiceSupplementaryServiceRequests_Deactivate = 2, + eQMIVoiceSupplementaryServiceRequests_Register = 3, + eQMIVoiceSupplementaryServiceRequests_Erase = 4, + eQMIVoiceSupplementaryServiceRequests_Interrogate = 5, + eQMIVoiceSupplementaryServiceRequests_RegisterPassword = 6, + eQMIVoiceSupplementaryServiceRequests_USSD = 7, +}; + +// Enum to describe QMI Voice Supplementary Service Types +enum eQMIVoiceSupplementaryServiceTypes:UINT8 +{ + eQMIVoiceSupplementaryServiceTypes_Activate = 0, + eQMIVoiceSupplementaryServiceTypes_Deactivate = 1, + eQMIVoiceSupplementaryServiceTypes_Register = 2, + eQMIVoiceSupplementaryServiceTypes_Erase = 3, +}; + +// Enum to describe QMI Voice Switch Value +enum eQMIVoiceSwitchValue:UINT8 +{ + eQMIVoiceSwitchValue_NotAllowed = 0, + eQMIVoiceSwitchValue_Allowed = 1, +}; + +// Enum to describe QMI Voice TTY Modes +enum eQMIVoiceTTYModes:UINT8 +{ + eQMIVoiceTTYModes_Full = 0, + eQMIVoiceTTYModes_VoiceCarryOver = 1, + eQMIVoiceTTYModes_HearingCarryOver = 2, + eQMIVoiceTTYModes_Off = 3, +}; + +// Enum to describe QMI Voice USSD Alpha Coding Schemes +enum eQMIVoiceUSSDAlphaCodingSchemes:UINT8 +{ + eQMIVoiceUSSDAlphaCodingSchemes_GSM = 1, + eQMIVoiceUSSDAlphaCodingSchemes_UCS2 = 2, +}; + +// Enum to describe QMI Voice USSD Data Coding Schemes +enum eQMIVoiceUSSDDataCodingSchemes:UINT8 +{ + eQMIVoiceUSSDDataCodingSchemes_ASCII = 1, + eQMIVoiceUSSDDataCodingSchemes_8Bit = 2, + eQMIVoiceUSSDDataCodingSchemes_UCS2 = 3, +}; + +// Enum to describe QMI Voice USSD Notifcation Types +enum eQMIVoiceUSSDNotifcationTypes:UINT8 +{ + eQMIVoiceUSSDNotifcationTypes_NoActionRequired = 1, + eQMIVoiceUSSDNotifcationTypes_ActionIsRequired = 2, +}; + +// Enum to describe QMI Voice UUS Data Coding Schemes +enum eQMIVoiceUUSDataCodingSchemes:UINT8 +{ + eQMIVoiceUUSDataCodingSchemes_USP = 1, + eQMIVoiceUUSDataCodingSchemes_OHLP = 2, + eQMIVoiceUUSDataCodingSchemes_X244 = 3, + eQMIVoiceUUSDataCodingSchemes_SMCF = 4, + eQMIVoiceUUSDataCodingSchemes_IA5 = 5, + eQMIVoiceUUSDataCodingSchemes_RV12RD = 6, + eQMIVoiceUUSDataCodingSchemes_Q931UNCCM = 7, +}; + +// Enum to describe QMI Voice UUS Types +enum eQMIVoiceUUSTypes:UINT8 +{ + eQMIVoiceUUSTypes_Data = 0, + eQMIVoiceUUSTypes_Type1Implicit = 1, + eQMIVoiceUUSTypes_Type1Required = 2, + eQMIVoiceUUSTypes_Type1NotRequired = 3, + eQMIVoiceUUSTypes_Type2Required = 4, + eQMIVoiceUUSTypes_Type2NotRequired = 5, + eQMIVoiceUUSTypes_Type3Required = 6, + eQMIVoiceUUSTypes_Type3NotRequired = 7, +}; + +// Enum to describe QMI Voice Videoshare Variants +enum eQMIVoiceVideoshareVariants:UINT32 +{ + eQMIVoiceVideoshareVariants_RCSe = 0, + eQMIVoiceVideoshareVariants_RCSv5 = 1, +}; + +// Enum to describe QMI Voice VoIP SUPS Call Types +enum eQMIVoiceVoIPSUPSCallTypes:UINT8 +{ + eQMIVoiceVoIPSUPSCallTypes_ReleaseHeldOrWaiting = 1, + eQMIVoiceVoIPSUPSCallTypes_ReleaseActiveAcceptHeldOrWaiting = 2, + eQMIVoiceVoIPSUPSCallTypes_HoldActiveAcceptHeldOrWaiting = 3, + eQMIVoiceVoIPSUPSCallTypes_MakeConferenceCall = 4, + eQMIVoiceVoIPSUPSCallTypes_EndAllExistingCalls = 5, + eQMIVoiceVoIPSUPSCallTypes_UpgradeDowngradeExistingVTIP = 6, + eQMIVoiceVoIPSUPSCallTypes_AcceptCallUpgradeExistingIP = 7, + eQMIVoiceVoIPSUPSCallTypes_RejectCallUpgradeExistingIP = 8, + eQMIVoiceVoIPSUPSCallTypes_ReleasePartyFromConference = 9, +}; + +// Enum to describe QMI WDA Data Aggregation Protocols +enum eQMIWDADataAggregationProtocols:UINT32 +{ + eQMIWDADataAggregationProtocols_TLP = 1, + eQMIWDADataAggregationProtocols_NCM = 2, + eQMIWDADataAggregationProtocols_MBIM = 3, + eQMIWDADataAggregationProtocols_RNDIS = 4, + eQMIWDADataAggregationProtocols_QMAP = 5, +}; + +// Enum to describe QMI WDA Link Protocols +enum eQMIWDALinkProtocols:UINT32 +{ + eQMIWDALinkProtocols_Ethernet = 1, + eQMIWDALinkProtocols_IP = 2, +}; + +// Enum to describe QMI WDS 3GPP Call End Reasons +enum eQMIWDS3GPPCallEndReasons:UINT16 +{ + eQMIWDS3GPPCallEndReasons_OperatorDeterminedBarring = 8, + eQMIWDS3GPPCallEndReasons_LLCSNDCPFailure = 25, + eQMIWDS3GPPCallEndReasons_InsufficientResources = 26, + eQMIWDS3GPPCallEndReasons_UnknownAPN = 27, + eQMIWDS3GPPCallEndReasons_UnknownPDP = 28, + eQMIWDS3GPPCallEndReasons_AuthenticationFailed = 29, + eQMIWDS3GPPCallEndReasons_GGSNReject = 30, + eQMIWDS3GPPCallEndReasons_ActivationReject = 31, + eQMIWDS3GPPCallEndReasons_OptionNotSupported = 32, + eQMIWDS3GPPCallEndReasons_OptionUnsubscribed = 33, + eQMIWDS3GPPCallEndReasons_OptionTemporarilyOOO = 34, + eQMIWDS3GPPCallEndReasons_NSAPIAlreadyUsed = 35, + eQMIWDS3GPPCallEndReasons_RegularDeactivation = 36, + eQMIWDS3GPPCallEndReasons_QoSNotAccepted = 37, + eQMIWDS3GPPCallEndReasons_NetworkFailure = 38, + eQMIWDS3GPPCallEndReasons_UMTSReactivationRequest = 39, + eQMIWDS3GPPCallEndReasons_FeatureNotSupported = 40, + eQMIWDS3GPPCallEndReasons_TFTSemanticError = 41, + eQMIWDS3GPPCallEndReasons_TFTSyntaxError = 42, + eQMIWDS3GPPCallEndReasons_UnknownPDPContext = 43, + eQMIWDS3GPPCallEndReasons_FilterSemanticError = 44, + eQMIWDS3GPPCallEndReasons_FilterSyntaxError = 45, + eQMIWDS3GPPCallEndReasons_PDPWithoutActiveTFT = 46, + eQMIWDS3GPPCallEndReasons_IPv4OnlyAllowed = 50, + eQMIWDS3GPPCallEndReasons_IPv6OnlyAllowed = 51, + eQMIWDS3GPPCallEndReasons_SingleAddressBearerOnly = 52, + eQMIWDS3GPPCallEndReasons_ESMInfoNotReceived = 53, + eQMIWDS3GPPCallEndReasons_NoPDNConnection = 54, + eQMIWDS3GPPCallEndReasons_MultipleConnectionsNotAllowed = 55, + eQMIWDS3GPPCallEndReasons_InvalidTransactionID = 81, + eQMIWDS3GPPCallEndReasons_MessageIncorrectSemantic = 95, + eQMIWDS3GPPCallEndReasons_InvalidMandatoryID = 96, + eQMIWDS3GPPCallEndReasons_MessageTypeUnsupported = 97, + eQMIWDS3GPPCallEndReasons_MessageTypeNoncompatibleState = 98, + eQMIWDS3GPPCallEndReasons_UnknownInfoElement = 99, + eQMIWDS3GPPCallEndReasons_ConditionalInfoElementError = 100, + eQMIWDS3GPPCallEndReasons_MessageAndProtocolStateUncompatible = 101, + eQMIWDS3GPPCallEndReasons_ProtocolError = 111, + eQMIWDS3GPPCallEndReasons_APNTypeConflict = 112, +}; + +// Enum to describe QMI WDS 3GPP2 RAT Types +enum eQMIWDS3GPP2RATTypes:UINT8 +{ + eQMIWDS3GPP2RATTypes_HRPD = 1, + eQMIWDS3GPP2RATTypes_EHRPD = 2, + eQMIWDS3GPP2RATTypes_HRPDEHRPD = 3, +}; + +// Enum to describe QMI WDS Address Allocation Preference +enum eQMIWDSAddressAllocationPreference:UINT8 +{ + eQMIWDSAddressAllocationPreference_NASSignaling = 0, + eQMIWDSAddressAllocationPreference_DHCP = 1, +}; + +// Enum to describe QMI WDS Address Families +enum eQMIWDSAddressFamilies:UINT32 +{ + eQMIWDSAddressFamilies_Unknown = 0, + eQMIWDSAddressFamilies_IPv4 = 4, + eQMIWDSAddressFamilies_IPv6 = 6, +}; + +// Enum to describe QMI WDS Application Type +enum eQMIWDSApplicationType:UINT32 +{ + eQMIWDSApplicationType_DefaultApplicationType = 0, + eQMIWDSApplicationType_LBSApplicationType = 32, + eQMIWDSApplicationType_TetheredApplicationType = 64, +}; + +// Enum to describe QMI WDS Authentication Protocol +enum eQMIWDSAuthenticationProtocol:UINT8 +{ + eQMIWDSAuthenticationProtocol_None = 0, + eQMIWDSAuthenticationProtocol_PAP = 1, + eQMIWDSAuthenticationProtocol_CHAP = 2, + eQMIWDSAuthenticationProtocol_PAPOrCHAP = 3, +}; + +// Enum to describe QMI WDS Autoconnect Roam Settings +enum eQMIWDSAutoconnectRoamSettings:UINT8 +{ + eQMIWDSAutoconnectRoamSettings_Always = 0, + eQMIWDSAutoconnectRoamSettings_HomeOnly = 1, +}; + +// Enum to describe QMI WDS Autoconnect Settings +enum eQMIWDSAutoconnectSettings:UINT8 +{ + eQMIWDSAutoconnectSettings_Disabled = 0, + eQMIWDSAutoconnectSettings_Enabled = 1, + eQMIWDSAutoconnectSettings_Paused = 2, +}; + +// Enum to describe QMI WDS CDMA Networks +enum eQMIWDSCDMANetworks:UINT8 +{ + eQMIWDSCDMANetworks_NoService = 0, + eQMIWDSCDMANetworks_CDMA = 2, + eQMIWDSCDMANetworks_CDMA1xEVDO = 4, +}; + +// Enum to describe QMI WDS CDMA Service Options +enum eQMIWDSCDMAServiceOptions:UINT16 +{ + eQMIWDSCDMAServiceOptions_IS657 = 7, + eQMIWDSCDMAServiceOptions_IS657OverRateSet2 = 15, + eQMIWDSCDMAServiceOptions_IS707AWithRateSet1 = 22, + eQMIWDSCDMAServiceOptions_IS707AWithRateSet2 = 25, + eQMIWDSCDMAServiceOptions_CDMA2000PacketService = 33, + eQMIWDSCDMAServiceOptions_IS707 = 4103, + eQMIWDSCDMAServiceOptions_QCProprietaryRateSet2 = 32800, + eQMIWDSCDMAServiceOptions_NullServiceOption = 65535, +}; + +// Enum to describe QMI WDS Call End Reason Types +enum eQMIWDSCallEndReasonTypes:UINT16 +{ + eQMIWDSCallEndReasonTypes_Unspecified = 0, + eQMIWDSCallEndReasonTypes_MobileIP = 1, + eQMIWDSCallEndReasonTypes_Internal = 2, + eQMIWDSCallEndReasonTypes_CallManagerDefined = 3, + eQMIWDSCallEndReasonTypes_3GPPSpecificationDefined = 6, + eQMIWDSCallEndReasonTypes_PPP = 7, + eQMIWDSCallEndReasonTypes_EHRPD = 8, + eQMIWDSCallEndReasonTypes_IPv6 = 9, +}; + +// Enum to describe QMI WDS Call Manager Call End Reasons +enum eQMIWDSCallManagerCallEndReasons:UINT16 +{ + eQMIWDSCallManagerCallEndReasons_CDMALock = 500, + eQMIWDSCallManagerCallEndReasons_Intercept = 501, + eQMIWDSCallManagerCallEndReasons_Reorder = 502, + eQMIWDSCallManagerCallEndReasons_ReleaseServiceOptionReject = 503, + eQMIWDSCallManagerCallEndReasons_IncomingCall = 504, + eQMIWDSCallManagerCallEndReasons_AlertStop = 505, + eQMIWDSCallManagerCallEndReasons_Activation = 506, + eQMIWDSCallManagerCallEndReasons_MaxAccessProbe = 507, + eQMIWDSCallManagerCallEndReasons_CCSNotSupportedByBS = 508, + eQMIWDSCallManagerCallEndReasons_NoResponseFromBS = 509, + eQMIWDSCallManagerCallEndReasons_RejectedByBS = 510, + eQMIWDSCallManagerCallEndReasons_Incompatible = 511, + eQMIWDSCallManagerCallEndReasons_AlreadyInTC = 512, + eQMIWDSCallManagerCallEndReasons_UserCallOrigDuringGPS = 513, + eQMIWDSCallManagerCallEndReasons_UserCallOrigDuringSMS = 514, + eQMIWDSCallManagerCallEndReasons_NoCDMAService = 515, + eQMIWDSCallManagerCallEndReasons_RetryOrder = 519, + eQMIWDSCallManagerCallEndReasons_AccessBlock = 520, + eQMIWDSCallManagerCallEndReasons_AccessBlockAll = 521, + eQMIWDSCallManagerCallEndReasons_IS707BMaxAccess = 522, + eQMIWDSCallManagerCallEndReasons_ThermalEmergency = 523, + eQMIWDSCallManagerCallEndReasons_CallOriginationThrottled = 524, + eQMIWDSCallManagerCallEndReasons_ConfFailed = 1000, + eQMIWDSCallManagerCallEndReasons_IncomingRejected = 1001, + eQMIWDSCallManagerCallEndReasons_NoGWService = 1002, + eQMIWDSCallManagerCallEndReasons_NoGPRSContext = 1003, + eQMIWDSCallManagerCallEndReasons_IllegalMS = 1004, + eQMIWDSCallManagerCallEndReasons_IllegalME = 1005, + eQMIWDSCallManagerCallEndReasons_GPRSServicesAndNonGPRSServiceNotAllowed = 1006, + eQMIWDSCallManagerCallEndReasons_GPRSServicesNotAllowed = 1007, + eQMIWDSCallManagerCallEndReasons_MSIdentityCannotBeDerivedByTheNetwork = 1008, + eQMIWDSCallManagerCallEndReasons_ImplicitlyDetached = 1009, + eQMIWDSCallManagerCallEndReasons_PLMNNotAllowed = 1010, + eQMIWDSCallManagerCallEndReasons_LANotAllowed = 1011, + eQMIWDSCallManagerCallEndReasons_GPRSServicesNotAllowedInThisPLMN = 1012, + eQMIWDSCallManagerCallEndReasons_PDPDuplicate = 1013, + eQMIWDSCallManagerCallEndReasons_UERATChange = 1014, + eQMIWDSCallManagerCallEndReasons_Congestion = 1015, + eQMIWDSCallManagerCallEndReasons_NoPDPContextActivated = 1016, + eQMIWDSCallManagerCallEndReasons_AccessClassDSACRejection = 1017, + eQMIWDSCallManagerCallEndReasons_CDGenOrBusy = 1500, + eQMIWDSCallManagerCallEndReasons_CDBillOrAuth = 1501, + eQMIWDSCallManagerCallEndReasons_ChangeHDR = 1502, + eQMIWDSCallManagerCallEndReasons_ExitHDR = 1503, + eQMIWDSCallManagerCallEndReasons_HDRNoSession = 1504, + eQMIWDSCallManagerCallEndReasons_HDROrigDuringGPSFix = 1505, + eQMIWDSCallManagerCallEndReasons_HDRCSTimeout = 1506, + eQMIWDSCallManagerCallEndReasons_HDRReleasedByCM = 1507, + eQMIWDSCallManagerCallEndReasons_NoHybridHDRService = 1510, + eQMIWDSCallManagerCallEndReasons_ClientEnd = 2000, + eQMIWDSCallManagerCallEndReasons_NoService = 2001, + eQMIWDSCallManagerCallEndReasons_Fade = 2002, + eQMIWDSCallManagerCallEndReasons_NormalRelease = 2003, + eQMIWDSCallManagerCallEndReasons_AccessInProgress = 2004, + eQMIWDSCallManagerCallEndReasons_AccessFail = 2005, + eQMIWDSCallManagerCallEndReasons_RedirectOrHandoff = 2006, + eQMIWDSCallManagerCallEndReasons_Offline = 2500, + eQMIWDSCallManagerCallEndReasons_EmergencyMode = 2501, + eQMIWDSCallManagerCallEndReasons_PhoneInUse = 2502, + eQMIWDSCallManagerCallEndReasons_InvalidMode = 2503, + eQMIWDSCallManagerCallEndReasons_InvalidSIMState = 2504, + eQMIWDSCallManagerCallEndReasons_NoCollocHDR = 2505, + eQMIWDSCallManagerCallEndReasons_CallControlRejected = 2506, +}; + +// Enum to describe QMI WDS Call Types +enum eQMIWDSCallTypes:UINT8 +{ + eQMIWDSCallTypes_Laptop = 0, + eQMIWDSCallTypes_Embedded = 1, +}; + +// Enum to describe QMI WDS DUN Control Events +enum eQMIWDSDUNControlEvents:UINT8 +{ + eQMIWDSDUNControlEvents_DUNCall = 1, + eQMIWDSDUNControlEvents_Entitlement = 2, + eQMIWDSDUNControlEvents_SilentRedial = 3, +}; + +// Enum to describe QMI WDS DUN Control Preferences +enum eQMIWDSDUNControlPreferences:UINT8 +{ + eQMIWDSDUNControlPreferences_RelinquishDUNControl = 0, + eQMIWDSDUNControlPreferences_ExerciseDUNConrol = 1, +}; + +// Enum to describe QMI WDS Data Bearer Technologies +enum eQMIWDSDataBearerTechnologies:UINT32 +{ + eQMIWDSDataBearerTechnologies_3GPP = 0, + eQMIWDSDataBearerTechnologies_3GPP2 = 1, +}; + +// Enum to describe QMI WDS Data Call Status +enum eQMIWDSDataCallStatus:UINT8 +{ + eQMIWDSDataCallStatus_Unknown = 0, + eQMIWDSDataCallStatus_Activated = 1, + eQMIWDSDataCallStatus_Terminated = 2, +}; + +// Enum to describe QMI WDS Data Call Types +enum eQMIWDSDataCallTypes:UINT8 +{ + eQMIWDSDataCallTypes_Unknown = 0, + eQMIWDSDataCallTypes_Embedded = 1, + eQMIWDSDataCallTypes_Tethered = 2, + eQMIWDSDataCallTypes_ModemEmbedded = 3, +}; + +// Enum to describe QMI WDS Data Mode +enum eQMIWDSDataMode:UINT8 +{ + eQMIWDSDataMode_CDMAOrHDR = 0, + eQMIWDSDataMode_CDMAOnly = 1, + eQMIWDSDataMode_HDROnly = 2, +}; + +// Enum to describe QMI WDS Data Rate +enum eQMIWDSDataRate:UINT8 +{ + eQMIWDSDataRate_LowSO15Only = 0, + eQMIWDSDataRate_MediumSO33PlusLowRSCH = 1, + eQMIWDSDataRate_HighSO33PlusHighRSCH = 2, +}; + +// Enum to describe QMI WDS Data System Network Types +enum eQMIWDSDataSystemNetworkTypes:UINT8 +{ + eQMIWDSDataSystemNetworkTypes_3GPP = 0, + eQMIWDSDataSystemNetworkTypes_3GPP2 = 1, +}; + +// Enum to describe QMI WDS Data Systems +enum eQMIWDSDataSystems:UINT32 +{ + eQMIWDSDataSystems_Unknown = 0, + eQMIWDSDataSystems_CDMA1x = 1, + eQMIWDSDataSystems_CDMA1xEVDO = 2, + eQMIWDSDataSystems_GPRS = 3, + eQMIWDSDataSystems_WCDMA = 4, + eQMIWDSDataSystems_LTE = 5, + eQMIWDSDataSystems_TDSCDMA = 6, +}; + +// Enum to describe QMI WDS EHRPD Call End Reason +enum eQMIWDSEHRPDCallEndReason:UINT16 +{ + eQMIWDSEHRPDCallEndReason_SubsLimitedToV4 = 1, + eQMIWDSEHRPDCallEndReason_SubsLimitedToV6 = 2, + eQMIWDSEHRPDCallEndReason_VSNCPTimeout = 4, + eQMIWDSEHRPDCallEndReason_VSNCPFailure = 5, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2IGeneralError = 6, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2IUnauthAPN = 7, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2IPDNLimit = 8, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2INoPDNGW = 9, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2IPDNGWUnreach = 10, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2IPDNGWRejected = 11, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2IInsufficientParam = 12, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2IResourceUnavailable = 13, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2IAdminProhibited = 14, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2IPDNIDInUse = 15, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2ISubscriberLimitation = 16, + eQMIWDSEHRPDCallEndReason_VSNCP3GPP2IPDNExistsForAPN = 17, +}; + +// Enum to describe QMI WDS EMBMS Error Codes +enum eQMIWDSEMBMSErrorCodes:UINT16 +{ + eQMIWDSEMBMSErrorCodes_NotSupported = 108, + eQMIWDSEMBMSErrorCodes_ActivationInProgress = 111, + eQMIWDSEMBMSErrorCodes_Invalid = 124, + eQMIWDSEMBMSErrorCodes_DeactivationInProgress = 203, +}; + +// Enum to describe QMI WDS EMBMS List Types +enum eQMIWDSEMBMSListTypes:UINT8 +{ + eQMIWDSEMBMSListTypes_Active = 0, + eQMIWDSEMBMSListTypes_Available = 1, + eQMIWDSEMBMSListTypes_OOSWarning = 2, +}; + +// Enum to describe QMI WDS EMBMS Operation Status +enum eQMIWDSEMBMSOperationStatus:UINT32 +{ + eQMIWDSEMBMSOperationStatus_Success = 0, + eQMIWDSEMBMSOperationStatus_RadioConfigFailure = 65536, + eQMIWDSEMBMSOperationStatus_ChannelUnavailable = 65537, + eQMIWDSEMBMSOperationStatus_EMBMBSNotEnabled = 65538, + eQMIWDSEMBMSOperationStatus_OutOfCoverage = 65539, + eQMIWDSEMBMSOperationStatus_Unknown = 65540, + eQMIWDSEMBMSOperationStatus_NotAllowed = 65541, + eQMIWDSEMBMSOperationStatus_MissingControlInfo = 65542, + eQMIWDSEMBMSOperationStatus_MissingTMGI = 65543, + eQMIWDSEMBMSOperationStatus_MulticastOOS = 65544, + eQMIWDSEMBMSOperationStatus_UnicastOOS = 65545, + eQMIWDSEMBMSOperationStatus_CampedOnOtherFrequency = 65546, +}; + +// Enum to describe QMI WDS Extended Error Code +enum eQMIWDSExtendedErrorCode:UINT16 +{ + eQMIWDSExtendedErrorCode_Failure = 1, + eQMIWDSExtendedErrorCode_InvalidHandle = 2, + eQMIWDSExtendedErrorCode_InvalidOperation = 3, + eQMIWDSExtendedErrorCode_InvalidProfileType = 4, + eQMIWDSExtendedErrorCode_InvalidProfileNumber = 5, + eQMIWDSExtendedErrorCode_InvalidIdentifier = 6, + eQMIWDSExtendedErrorCode_InvalidArgument = 7, + eQMIWDSExtendedErrorCode_NotInitialized = 8, + eQMIWDSExtendedErrorCode_InvalidLength = 9, + eQMIWDSExtendedErrorCode_ListEnd = 10, + eQMIWDSExtendedErrorCode_InvalidSubscriptionID = 11, + eQMIWDSExtendedErrorCode_InvalidProfileFamily = 12, + eQMIWDSExtendedErrorCode_3GPPInvalidProfileFamily = 4097, + eQMIWDSExtendedErrorCode_3GPPAccessError = 4098, + eQMIWDSExtendedErrorCode_3GPPContextNotDefined = 4099, + eQMIWDSExtendedErrorCode_3GPPValidFlagNotSet = 4100, + eQMIWDSExtendedErrorCode_3GPPReadOnlyFlagSet = 4101, + eQMIWDSExtendedErrorCode_3GPPErrorMaxProfileNumber = 4102, + eQMIWDSExtendedErrorCode_3GPP2ErrorInvalidIdentifierForProfile = 4353, + eQMIWDSExtendedErrorCode_3GPP2ErrorProfileLimitReached = 4354, +}; + +// Enum to describe QMI WDS Extended Tech Prefs +enum eQMIWDSExtendedTechPrefs:UINT16 +{ + eQMIWDSExtendedTechPrefs_CDMA = 32769, + eQMIWDSExtendedTechPrefs_UMTS = 32772, + eQMIWDSExtendedTechPrefs_EPC = 34944, + eQMIWDSExtendedTechPrefs_EMBMS = 34946, + eQMIWDSExtendedTechPrefs_ModemLinkLocal = 34952, +}; + +// Enum to describe QMI WDS Handoff Info Types +enum eQMIWDSHandoffInfoTypes:UINT32 +{ + eQMIWDSHandoffInfoTypes_Initialization = 0, + eQMIWDSHandoffInfoTypes_Success = 1, + eQMIWDSHandoffInfoTypes_Failure = 2, +}; + +// Enum to describe QMI WDS IP Families +enum eQMIWDSIPFamilies:UINT8 +{ + eQMIWDSIPFamilies_IPv4 = 4, + eQMIWDSIPFamilies_IPv6 = 6, + eQMIWDSIPFamilies_Unspecified = 8, +}; + +// Enum to describe QMI WDS IP Support Types +enum eQMIWDSIPSupportTypes:UINT8 +{ + eQMIWDSIPSupportTypes_IPv4 = 0, + eQMIWDSIPSupportTypes_IPv6 = 1, + eQMIWDSIPSupportTypes_IPv4AndIPv6 = 2, +}; + +// Enum to describe QMI WDS IP Version +enum eQMIWDSIPVersion:UINT8 +{ + eQMIWDSIPVersion_IPv4 = 4, + eQMIWDSIPVersion_IPv6 = 6, +}; + +// Enum to describe QMI WDS IPSec Crypto Algorithms +enum eQMIWDSIPSecCryptoAlgorithms:UINT32 +{ + eQMIWDSIPSecCryptoAlgorithms_NullKeyExchange = 0, + eQMIWDSIPSecCryptoAlgorithms_GenericModuloExponentiation = 1, + eQMIWDSIPSecCryptoAlgorithms_DiffieHellmanKeyExchange = 2, + eQMIWDSIPSecCryptoAlgorithms_RSAEncryptionKeyExchange = 3, + eQMIWDSIPSecCryptoAlgorithms_NullHash = 4, + eQMIWDSIPSecCryptoAlgorithms_SHA1 = 5, + eQMIWDSIPSecCryptoAlgorithms_SHA256 = 6, + eQMIWDSIPSecCryptoAlgorithms_MD5 = 7, + eQMIWDSIPSecCryptoAlgorithms_NullCipher = 8, + eQMIWDSIPSecCryptoAlgorithms_DES = 9, + eQMIWDSIPSecCryptoAlgorithms_3DES = 10, + eQMIWDSIPSecCryptoAlgorithms_ARC4 = 11, + eQMIWDSIPSecCryptoAlgorithms_AES128 = 12, + eQMIWDSIPSecCryptoAlgorithms_C2 = 13, + eQMIWDSIPSecCryptoAlgorithms_AES128CMAC = 14, + eQMIWDSIPSecCryptoAlgorithms_UEA2SNOW3G = 15, + eQMIWDSIPSecCryptoAlgorithms_UIA2SNOW3G = 16, + eQMIWDSIPSecCryptoAlgorithms_UEA3ZUC = 17, + eQMIWDSIPSecCryptoAlgorithms_UIA3ZUC = 18, +}; + +// Enum to describe QMI WDS IPSec SA Encapsulation Modes +enum eQMIWDSIPSecSAEncapsulationModes:UINT32 +{ + eQMIWDSIPSecSAEncapsulationModes_Undefined = 0, + eQMIWDSIPSecSAEncapsulationModes_Tunnel = 1, + eQMIWDSIPSecSAEncapsulationModes_Transport = 2, +}; + +// Enum to describe QMI WDS IPSec SA Protocols +enum eQMIWDSIPSecSAProtocols:UINT32 +{ + eQMIWDSIPSecSAProtocols_Undefined = 0, + eQMIWDSIPSecSAProtocols_ISAKMP = 1, + eQMIWDSIPSecSAProtocols_AuthenticationHeader = 2, + eQMIWDSIPSecSAProtocols_EncapsulatingSecurityPayload = 3, +}; + +// Enum to describe QMI WDS IPv6 Call End Reason +enum eQMIWDSIPv6CallEndReason:UINT16 +{ + eQMIWDSIPv6CallEndReason_PrefixUnavailable = 1, + eQMIWDSIPv6CallEndReason_IPv6HRPDDisabled = 2, +}; + +// Enum to describe QMI WDS Internal Call End Reasons +enum eQMIWDSInternalCallEndReasons:UINT16 +{ + eQMIWDSInternalCallEndReasons_Internal = 201, + eQMIWDSInternalCallEndReasons_CallEnded = 202, + eQMIWDSInternalCallEndReasons_InternalUnknownCauseCode = 203, + eQMIWDSInternalCallEndReasons_UnknownCauseCode = 204, + eQMIWDSInternalCallEndReasons_CloseInProgress = 205, + eQMIWDSInternalCallEndReasons_NWInitiatedTermination = 206, + eQMIWDSInternalCallEndReasons_AppPreempted = 207, + eQMIWDSInternalCallEndReasons_PDNIPv4CallDisallowed = 208, + eQMIWDSInternalCallEndReasons_PDNIPv4CallThrottled = 209, + eQMIWDSInternalCallEndReasons_PDNIPv6CallDisallowed = 210, + eQMIWDSInternalCallEndReasons_ModemRestart = 212, + eQMIWDSInternalCallEndReasons_PDPPPPNotSupported = 213, + eQMIWDSInternalCallEndReasons_UnpreferredRAT = 214, + eQMIWDSInternalCallEndReasons_PhysicalLinkCloseInProgress = 215, + eQMIWDSInternalCallEndReasons_APNPendingHandover = 216, + eQMIWDSInternalCallEndReasons_ProfileBearerIncompatible = 217, + eQMIWDSInternalCallEndReasons_MMGDSICardEvent = 218, + eQMIWDSInternalCallEndReasons_LPMOrPowerDown = 219, + eQMIWDSInternalCallEndReasons_APNDisabled = 220, + eQMIWDSInternalCallEndReasons_MPITExpired = 221, + eQMIWDSInternalCallEndReasons_IPv6AddressTransferFailed = 222, + eQMIWDSInternalCallEndReasons_TRATSwapFailed = 223, +}; + +// Enum to describe QMI WDS LTE Attach Types +enum eQMIWDSLTEAttachTypes:UINT32 +{ + eQMIWDSLTEAttachTypes_Initial = 0, + eQMIWDSLTEAttachTypes_Handoff = 1, +}; + +// Enum to describe QMI WDS LTE IP Types +enum eQMIWDSLTEIPTypes:UINT8 +{ + eQMIWDSLTEIPTypes_IPv4 = 0, + eQMIWDSLTEIPTypes_IPv6 = 1, + eQMIWDSLTEIPTypes_IPv4OrIPv6 = 2, +}; + +// Enum to describe QMI WDS Mobile IP Call End Reasons +enum eQMIWDSMobileIPCallEndReasons:UINT16 +{ + eQMIWDSMobileIPCallEndReasons_FAUnspecified = 64, + eQMIWDSMobileIPCallEndReasons_FAAdministrativelyProhibited = 65, + eQMIWDSMobileIPCallEndReasons_FAInsufficientResources = 66, + eQMIWDSMobileIPCallEndReasons_FAMobileNodeAuthenticationFailure = 67, + eQMIWDSMobileIPCallEndReasons_FAHAAuthenticationFailure = 68, + eQMIWDSMobileIPCallEndReasons_FARequestedLifetimeTooLong = 69, + eQMIWDSMobileIPCallEndReasons_FAMalformedRequest = 70, + eQMIWDSMobileIPCallEndReasons_FAMalformedReply = 71, + eQMIWDSMobileIPCallEndReasons_FAEncapsulationUnavailable = 72, + eQMIWDSMobileIPCallEndReasons_FAVJHCUnavailable = 73, + eQMIWDSMobileIPCallEndReasons_FAReverseTunnelUnavailable = 74, + eQMIWDSMobileIPCallEndReasons_FAReverseTunnelIsMandatoryAndTBitIsNotSet = 75, + eQMIWDSMobileIPCallEndReasons_FADeliveryStyleNotSupported = 79, + eQMIWDSMobileIPCallEndReasons_FAMissingNAI = 97, + eQMIWDSMobileIPCallEndReasons_FAMissingHA = 98, + eQMIWDSMobileIPCallEndReasons_FAMissingHomeAddress = 99, + eQMIWDSMobileIPCallEndReasons_FAUnknownChallenge = 104, + eQMIWDSMobileIPCallEndReasons_FAMissingChallenge = 105, + eQMIWDSMobileIPCallEndReasons_FAStaleChallenge = 106, + eQMIWDSMobileIPCallEndReasons_HAReasonUnspecified = 128, + eQMIWDSMobileIPCallEndReasons_HAAdministrativelyProhibited = 129, + eQMIWDSMobileIPCallEndReasons_HAInsufficientResources = 130, + eQMIWDSMobileIPCallEndReasons_HAMobileNodeAuthenticationFailure = 131, + eQMIWDSMobileIPCallEndReasons_HAFAAuthenticationFailure = 132, + eQMIWDSMobileIPCallEndReasons_HARegistrationIDMismatch = 133, + eQMIWDSMobileIPCallEndReasons_HAMalformedRequest = 134, + eQMIWDSMobileIPCallEndReasons_HAUnknownHAAddress = 136, + eQMIWDSMobileIPCallEndReasons_HAReverseTunnelUnavailable = 137, + eQMIWDSMobileIPCallEndReasons_HAReverseTunnelIsMandatoryAndTBitIsNotSet = 138, + eQMIWDSMobileIPCallEndReasons_HAEncapsulationUnavailable = 139, + eQMIWDSMobileIPCallEndReasons_Unknown = 65535, +}; + +// Enum to describe QMI WDS Network Types +enum eQMIWDSNetworkTypes:UINT8 +{ + eQMIWDSNetworkTypes_Unknown = 0, + eQMIWDSNetworkTypes_CDMA = 1, + eQMIWDSNetworkTypes_UMTS = 2, +}; + +// Enum to describe QMI WDS Next Header Protocols +enum eQMIWDSNextHeaderProtocols:UINT32 +{ + eQMIWDSNextHeaderProtocols_TCP = 1, + eQMIWDSNextHeaderProtocols_UDP = 2, + eQMIWDSNextHeaderProtocols_TCPUDP = 3, +}; + +// Enum to describe QMI WDS OOS Warning Reasons +enum eQMIWDSOOSWarningReasons:UINT32 +{ + eQMIWDSOOSWarningReasons_UnicastOOS = 0, + eQMIWDSOOSWarningReasons_MulticastOOS = 1, + eQMIWDSOOSWarningReasons_Cleared = 2, +}; + +// Enum to describe QMI WDS PDN Type +enum eQMIWDSPDNType:UINT8 +{ + eQMIWDSPDNType_IPv4PDNType = 0, + eQMIWDSPDNType_IPv6PDNType = 1, + eQMIWDSPDNType_IPv4orIPv6PDNType = 2, + eQMIWDSPDNType_UnspecifiedPDNType = 3, +}; + +// Enum to describe QMI WDS PDP Access Control Flag +enum eQMIWDSPDPAccessControlFlag:UINT8 +{ + eQMIWDSPDPAccessControlFlag_PDPAccessControlNone = 0, + eQMIWDSPDPAccessControlFlag_PDPAccessControlReject = 1, + eQMIWDSPDPAccessControlFlag_PDPAccessControlPermission = 2, +}; + +// Enum to describe QMI WDS PDP Data Compression Type +enum eQMIWDSPDPDataCompressionType:UINT8 +{ + eQMIWDSPDPDataCompressionType_Off = 0, + eQMIWDSPDPDataCompressionType_ManufacturerPreferred = 1, + eQMIWDSPDPDataCompressionType_V42BIS = 2, + eQMIWDSPDPDataCompressionType_V44 = 3, +}; + +// Enum to describe QMI WDS PDP Header Compression Type +enum eQMIWDSPDPHeaderCompressionType:UINT8 +{ + eQMIWDSPDPHeaderCompressionType_Off = 0, + eQMIWDSPDPHeaderCompressionType_ManufacturerPreferred = 1, + eQMIWDSPDPHeaderCompressionType_RFC1144 = 2, + eQMIWDSPDPHeaderCompressionType_RFC2507 = 3, + eQMIWDSPDPHeaderCompressionType_RFC3095 = 4, +}; + +// Enum to describe QMI WDS PPP Call End Reason +enum eQMIWDSPPPCallEndReason:UINT16 +{ + eQMIWDSPPPCallEndReason_Timeout = 1, + eQMIWDSPPPCallEndReason_AuthenticationFailed = 2, + eQMIWDSPPPCallEndReason_OptionMismatch = 3, + eQMIWDSPPPCallEndReason_PAPFailure = 31, + eQMIWDSPPPCallEndReason_CHAPFailure = 32, + eQMIWDSPPPCallEndReason_Unknown = 65535, +}; + +// Enum to describe QMI WDS Profile Family +enum eQMIWDSProfileFamily:UINT8 +{ + eQMIWDSProfileFamily_Embedded = 0, + eQMIWDSProfileFamily_TetheredSocketsFamily = 1, +}; + +// Enum to describe QMI WDS Profile Param ID +enum eQMIWDSProfileParamID:UINT32 +{ + eQMIWDSProfileParamID_UMTSRequestedQoS = 23, + eQMIWDSProfileParamID_UMTSMinimumQoS = 24, + eQMIWDSProfileParamID_GPRSRequestedQoS = 25, + eQMIWDSProfileParamID_GPRSMinimumQoS = 26, + eQMIWDSProfileParamID_TFTFilterID1 = 50, + eQMIWDSProfileParamID_TFTFilterID2 = 51, +}; + +// Enum to describe QMI WDS QoS Class Identifier +enum eQMIWDSQoSClassIdentifier:UINT8 +{ + eQMIWDSQoSClassIdentifier_NetworkAssignQCI = 0, + eQMIWDSQoSClassIdentifier_GuaranteedBitrate1 = 1, + eQMIWDSQoSClassIdentifier_GuaranteedBitrate2 = 2, + eQMIWDSQoSClassIdentifier_GuaranteedBitrate3 = 3, + eQMIWDSQoSClassIdentifier_GuaranteedBitrate4 = 4, + eQMIWDSQoSClassIdentifier_NonGuaranteedBitrate5 = 5, + eQMIWDSQoSClassIdentifier_NonGuaranteedBitrate6 = 6, + eQMIWDSQoSClassIdentifier_NonGuaranteedBitrate7 = 7, + eQMIWDSQoSClassIdentifier_NonGuaranteedBitrate8 = 8, +}; + +// Enum to describe QMI WDS Radio Access Technologies +enum eQMIWDSRadioAccessTechnologies:UINT32 +{ + eQMIWDSRadioAccessTechnologies_NullBearer = 0, + eQMIWDSRadioAccessTechnologies_3GPPWCDMA = 1, + eQMIWDSRadioAccessTechnologies_3GPPGERAN = 2, + eQMIWDSRadioAccessTechnologies_3GPPLTE = 3, + eQMIWDSRadioAccessTechnologies_3GPPTDSCDMA = 4, + eQMIWDSRadioAccessTechnologies_3GPPWLAN = 5, + eQMIWDSRadioAccessTechnologies_3GPPMaximum = 100, + eQMIWDSRadioAccessTechnologies_3GPP21x = 101, + eQMIWDSRadioAccessTechnologies_3GPP2HRPD = 102, + eQMIWDSRadioAccessTechnologies_3GPP2EHRPD = 103, + eQMIWDSRadioAccessTechnologies_3GPP2WLAN = 104, + eQMIWDSRadioAccessTechnologies_3GPP2Maximum = 200, +}; + +// Enum to describe QMI WDS Reverse IP Connection Status +enum eQMIWDSReverseIPConnectionStatus:UINT32 +{ + eQMIWDSReverseIPConnectionStatus_Disconnected = 0, + eQMIWDSReverseIPConnectionStatus_Connected = 1, +}; + +// Enum to describe QMI WDS Reverse IP Technology Names +enum eQMIWDSReverseIPTechnologyNames:UINT32 +{ + eQMIWDSReverseIPTechnologyNames_WLANLocalBreakout = 32818, + eQMIWDSReverseIPTechnologyNames_IWLANS2B = 32819, +}; + +// Enum to describe QMI WDS Reverse IP Transport Filter Types +enum eQMIWDSReverseIPTransportFilterTypes:UINT32 +{ + eQMIWDSReverseIPTransportFilterTypes_ESPSPI = 0, +}; + +// Enum to describe QMI WDS SIP/MIP Call Types +enum eQMIWDSSIPMIPCallTypes:UINT8 +{ + eQMIWDSSIPMIPCallTypes_NotUp = 0, + eQMIWDSSIPMIPCallTypes_SIPUp = 1, + eQMIWDSSIPMIPCallTypes_MIPUp = 2, +}; + +// Enum to describe QMI WDS Slot Cycle Set Results +enum eQMIWDSSlotCycleSetResults:UINT8 +{ + eQMIWDSSlotCycleSetResults_Succcess = 0, + eQMIWDSSlotCycleSetResults_FailureRequestRejected = 1, + eQMIWDSSlotCycleSetResults_FailureRequestFailedTX = 2, + eQMIWDSSlotCycleSetResults_FailureNotSupported = 3, + eQMIWDSSlotCycleSetResults_FailureNoNetwork = 4, +}; + +// Enum to describe QMI WDS Tethered Call Types +enum eQMIWDSTetheredCallTypes:UINT8 +{ + eQMIWDSTetheredCallTypes_NonTethered = 0, + eQMIWDSTetheredCallTypes_RmNet = 1, + eQMIWDSTetheredCallTypes_DUN = 2, +}; + +// Enum to describe QMI WMS ACK Failure Cause +enum eQMIWMSACKFailureCause:UINT8 +{ + eQMIWMSACKFailureCause_NoNetworkResponse = 0, + eQMIWMSACKFailureCause_NetworkReleasedLink = 1, + eQMIWMSACKFailureCause_NotSent = 2, +}; + +// Enum to describe QMI WMS CDMA Service Options +enum eQMIWMSCDMAServiceOptions:UINT8 +{ + eQMIWMSCDMAServiceOptions_Automatic = 0, + eQMIWMSCDMAServiceOptions_SO6 = 6, + eQMIWMSCDMAServiceOptions_SO14 = 14, +}; + +// Enum to describe QMI WMS Call Control Types +enum eQMIWMSCallControlTypes:UINT32 +{ + eQMIWMSCallControlTypes_Disallow = 0, + eQMIWMSCallControlTypes_Allow = 1, + eQMIWMSCallControlTypes_AllowButModified = 2, +}; + +// Enum to describe QMI WMS Cause Codes +enum eQMIWMSCauseCodes:UINT16 +{ + eQMIWMSCauseCodes_AddressVacant = 0, + eQMIWMSCauseCodes_AddressTranslation = 1, + eQMIWMSCauseCodes_NetworkResourceShortage = 2, + eQMIWMSCauseCodes_NetworkFailure = 3, + eQMIWMSCauseCodes_InvalidTeleserviceID = 4, + eQMIWMSCauseCodes_NetworkOther = 5, + eQMIWMSCauseCodes_NoPageResponse = 32, + eQMIWMSCauseCodes_DestinationBusy = 33, + eQMIWMSCauseCodes_DestinationNoACK = 34, + eQMIWMSCauseCodes_DestinationResourceShortage = 35, + eQMIWMSCauseCodes_DeliveryPostponed = 36, + eQMIWMSCauseCodes_DestinationOutOfService = 37, + eQMIWMSCauseCodes_DestinationNotAtAddress = 38, + eQMIWMSCauseCodes_DestinationOther = 39, + eQMIWMSCauseCodes_RadioResourceShortage = 64, + eQMIWMSCauseCodes_RadioIncompatibility = 65, + eQMIWMSCauseCodes_RadioOther = 66, + eQMIWMSCauseCodes_Encoding = 96, + eQMIWMSCauseCodes_SMSOriginationDenied = 97, + eQMIWMSCauseCodes_SMSDestinationDenied = 98, + eQMIWMSCauseCodes_SupplementarySErviceNotSupported = 99, + eQMIWMSCauseCodes_SMSNotSupported = 100, + eQMIWMSCauseCodes_MissingExpectedParameter = 101, + eQMIWMSCauseCodes_MissingMandatoryParameter = 102, + eQMIWMSCauseCodes_UnrecognizedParameterValue = 103, + eQMIWMSCauseCodes_UnexpectedParameterValue = 104, + eQMIWMSCauseCodes_UserDataSizeError = 105, + eQMIWMSCauseCodes_GeneralOther = 106, +}; + +// Enum to describe QMI WMS Delivery Failures +enum eQMIWMSDeliveryFailures:UINT8 +{ + eQMIWMSDeliveryFailures_BlockedByCallControl = 0, +}; + +// Enum to describe QMI WMS Error Classes +enum eQMIWMSErrorClasses:UINT8 +{ + eQMIWMSErrorClasses_Temporary = 0, + eQMIWMSErrorClasses_Permanent = 1, +}; + +// Enum to describe QMI WMS Error Classes 2 +enum eQMIWMSErrorClasses2:UINT8 +{ + eQMIWMSErrorClasses2_Temporary = 2, + eQMIWMSErrorClasses2_Permanent = 3, +}; + +// Enum to describe QMI WMS GSM/WCDMA Domains +enum eQMIWMSGSMWCDMADomains:UINT8 +{ + eQMIWMSGSMWCDMADomains_CSPreferred = 0, + eQMIWMSGSMWCDMADomains_PSPreferred = 1, + eQMIWMSGSMWCDMADomains_CSOnly = 2, + eQMIWMSGSMWCDMADomains_PSOnly = 3, +}; + +// Enum to describe QMI WMS LTE Domains +enum eQMIWMSLTEDomains:UINT8 +{ + eQMIWMSLTEDomains_None = 0, + eQMIWMSLTEDomains_IMS = 1, +}; + +// Enum to describe QMI WMS Language +enum eQMIWMSLanguage:UINT16 +{ + eQMIWMSLanguage_Unknown = 0, + eQMIWMSLanguage_English = 1, + eQMIWMSLanguage_French = 2, + eQMIWMSLanguage_Spanish = 3, + eQMIWMSLanguage_Japanese = 4, + eQMIWMSLanguage_Korean = 5, + eQMIWMSLanguage_Chinese = 6, + eQMIWMSLanguage_Hebrew = 7, +}; + +// Enum to describe QMI WMS Message Classes +enum eQMIWMSMessageClasses:UINT8 +{ + eQMIWMSMessageClasses_Class0 = 0, + eQMIWMSMessageClasses_Class1 = 1, + eQMIWMSMessageClasses_Class2 = 2, + eQMIWMSMessageClasses_Class3 = 3, + eQMIWMSMessageClasses_ClassNone = 4, + eQMIWMSMessageClasses_ClassCDMA = 5, +}; + +// Enum to describe QMI WMS Message Delivery Failure Type +enum eQMIWMSMessageDeliveryFailureType:UINT8 +{ + eQMIWMSMessageDeliveryFailureType_Temporary = 0, + eQMIWMSMessageDeliveryFailureType_Permanent = 1, +}; + +// Enum to describe QMI WMS Message Formats +enum eQMIWMSMessageFormats:UINT8 +{ + eQMIWMSMessageFormats_CDMA = 0, + eQMIWMSMessageFormats_AnalogCLIUnsupported = 1, + eQMIWMSMessageFormats_AnalogVoiceMailUnsupported = 2, + eQMIWMSMessageFormats_AnalogWMSUnsupported = 3, + eQMIWMSMessageFormats_AnalogAWIWMSUnsupported = 4, + eQMIWMSMessageFormats_MWIUnsupported = 5, + eQMIWMSMessageFormats_GSMWCDMAPP = 6, + eQMIWMSMessageFormats_GSMWCDMABC = 7, + eQMIWMSMessageFormats_MWI = 8, +}; + +// Enum to describe QMI WMS Message Protocols +enum eQMIWMSMessageProtocols:UINT8 +{ + eQMIWMSMessageProtocols_CDMA = 0, + eQMIWMSMessageProtocols_GSMWCDMAUnsupported = 1, +}; + +// Enum to describe QMI WMS Message Tags +enum eQMIWMSMessageTags:UINT8 +{ + eQMIWMSMessageTags_MTRead = 0, + eQMIWMSMessageTags_MTNotRead = 1, + eQMIWMSMessageTags_MOSend = 2, + eQMIWMSMessageTags_MONotSent = 3, +}; + +// Enum to describe QMI WMS Message Types +enum eQMIWMSMessageTypes:UINT8 +{ + eQMIWMSMessageTypes_PointToPoint = 0, + eQMIWMSMessageTypes_Broadcast = 1, +}; + +// Enum to describe QMI WMS Network Registration Status +enum eQMIWMSNetworkRegistrationStatus:UINT8 +{ + eQMIWMSNetworkRegistrationStatus_NoService = 0, + eQMIWMSNetworkRegistrationStatus_InProgress = 1, + eQMIWMSNetworkRegistrationStatus_Failed = 2, + eQMIWMSNetworkRegistrationStatus_LimitedService = 3, + eQMIWMSNetworkRegistrationStatus_FullService = 4, +}; + +// Enum to describe QMI WMS Notification Type +enum eQMIWMSNotificationType:UINT8 +{ + eQMIWMSNotificationType_Primary = 0, + eQMIWMSNotificationType_SecondaryGSM = 1, + eQMIWMSNotificationType_SecondaryUMTS = 2, +}; + +// Enum to describe QMI WMS Protocol Identifier Data +enum eQMIWMSProtocolIdentifierData:UINT8 +{ + eQMIWMSProtocolIdentifierData_Default = 0, + eQMIWMSProtocolIdentifierData_Implicit = 32, + eQMIWMSProtocolIdentifierData_Telex = 33, + eQMIWMSProtocolIdentifierData_G3Fax = 34, + eQMIWMSProtocolIdentifierData_G4Fax = 35, + eQMIWMSProtocolIdentifierData_VoicePhone = 36, + eQMIWMSProtocolIdentifierData_Ermes = 37, + eQMIWMSProtocolIdentifierData_NATPaging = 38, + eQMIWMSProtocolIdentifierData_Videotex = 39, + eQMIWMSProtocolIdentifierData_TeltexUnspecified = 40, + eQMIWMSProtocolIdentifierData_TeltexPSPDN = 41, + eQMIWMSProtocolIdentifierData_TeltexCSPDN = 42, + eQMIWMSProtocolIdentifierData_TeltexPSTN = 43, + eQMIWMSProtocolIdentifierData_TeltexISDN = 44, + eQMIWMSProtocolIdentifierData_UCI = 45, + eQMIWMSProtocolIdentifierData_MessageHandling = 48, + eQMIWMSProtocolIdentifierData_X400 = 49, + eQMIWMSProtocolIdentifierData_InternetEMail = 50, + eQMIWMSProtocolIdentifierData_SCSpecific1 = 56, + eQMIWMSProtocolIdentifierData_SCSpecific2 = 57, + eQMIWMSProtocolIdentifierData_SCSpecific3 = 58, + eQMIWMSProtocolIdentifierData_SCSpecific4 = 59, + eQMIWMSProtocolIdentifierData_SCSpecific5 = 60, + eQMIWMSProtocolIdentifierData_SCSpecific6 = 61, + eQMIWMSProtocolIdentifierData_SCSpecific7 = 62, + eQMIWMSProtocolIdentifierData_GSMUMTS = 63, + eQMIWMSProtocolIdentifierData_SMType0 = 64, + eQMIWMSProtocolIdentifierData_ReplaceSM1 = 65, + eQMIWMSProtocolIdentifierData_ReplaceSM2 = 66, + eQMIWMSProtocolIdentifierData_ReplaceSM3 = 67, + eQMIWMSProtocolIdentifierData_ReplaceSM4 = 68, + eQMIWMSProtocolIdentifierData_ReplaceSM5 = 69, + eQMIWMSProtocolIdentifierData_ReplaceSM6 = 70, + eQMIWMSProtocolIdentifierData_ReplaceSM7 = 71, + eQMIWMSProtocolIdentifierData_ReturnCall = 95, + eQMIWMSProtocolIdentifierData_ANSI136RData = 124, + eQMIWMSProtocolIdentifierData_MEDataDownload = 125, + eQMIWMSProtocolIdentifierData_MEDepersonalizationShortMessage = 126, + eQMIWMSProtocolIdentifierData_SIMDataDownload = 127, +}; + +// Enum to describe QMI WMS RP Cause Codes +enum eQMIWMSRPCauseCodes:UINT16 +{ + eQMIWMSRPCauseCodes_UnassignedNumber = 1, + eQMIWMSRPCauseCodes_OperatorDeterminedBarring = 8, + eQMIWMSRPCauseCodes_CallBarred = 10, + eQMIWMSRPCauseCodes_Reserved = 11, + eQMIWMSRPCauseCodes_ShortMessageTransferRejected = 21, + eQMIWMSRPCauseCodes_MemoryCapacityExceeded = 22, + eQMIWMSRPCauseCodes_DestinationOutOfOrder = 27, + eQMIWMSRPCauseCodes_UnidentifiedSubscriber = 28, + eQMIWMSRPCauseCodes_FacilityRejected = 29, + eQMIWMSRPCauseCodes_UnknownSubscriber = 30, + eQMIWMSRPCauseCodes_NetworkOutOfOrder = 38, + eQMIWMSRPCauseCodes_TemporaryFailure = 41, + eQMIWMSRPCauseCodes_Congestion = 42, + eQMIWMSRPCauseCodes_UnspecifiedResourcesUnavailable = 47, + eQMIWMSRPCauseCodes_RequestedFacilityNotSubscribed = 50, + eQMIWMSRPCauseCodes_RequestedFacilityNotImplemented = 69, + eQMIWMSRPCauseCodes_InvalidShortMessageTransferValue = 81, + eQMIWMSRPCauseCodes_SemanticallyIncorrectMessage = 95, + eQMIWMSRPCauseCodes_InvalidManadatoryInfo = 96, + eQMIWMSRPCauseCodes_MessageTypeNotImplemented = 97, + eQMIWMSRPCauseCodes_MessageNotCompatibleWithSMS = 98, + eQMIWMSRPCauseCodes_InfoElementNotImplemented = 99, + eQMIWMSRPCauseCodes_UnspecifiedProtocolError = 111, + eQMIWMSRPCauseCodes_UnspecifiedInterworking = 127, +}; + +// Enum to describe QMI WMS Receipt Actions +enum eQMIWMSReceiptActions:UINT8 +{ + eQMIWMSReceiptActions_Discard = 0, + eQMIWMSReceiptActions_StoreAndNotify = 1, + eQMIWMSReceiptActions_TransferOnly = 2, + eQMIWMSReceiptActions_TransfterAndAcknowledge = 3, +}; + +// Enum to describe QMI WMS Route Values +enum eQMIWMSRouteValues:UINT8 +{ + eQMIWMSRouteValues_Discard = 0, + eQMIWMSRouteValues_StoreAndNotify = 1, + eQMIWMSRouteValues_TransferOnly = 2, + eQMIWMSRouteValues_TransferAndAcknowledge = 3, + eQMIWMSRouteValues_Unknown = 255, +}; + +// Enum to describe QMI WMS SMS Call Status +enum eQMIWMSSMSCallStatus:UINT8 +{ + eQMIWMSSMSCallStatus_Incoming = 0, + eQMIWMSSMSCallStatus_Connected = 1, + eQMIWMSSMSCallStatus_Aborted = 2, + eQMIWMSSMSCallStatus_Disconnected = 3, + eQMIWMSSMSCallStatus_Connecting = 4, +}; + +// Enum to describe QMI WMS SMS Message Mode +enum eQMIWMSSMSMessageMode:UINT8 +{ + eQMIWMSSMSMessageMode_GSMWCDMA = 1, +}; + +// Enum to describe QMI WMS Service Categories +enum eQMIWMSServiceCategories:UINT16 +{ + eQMIWMSServiceCategories_Unknown = 0, + eQMIWMSServiceCategories_EmergencyBroadcast = 1, + eQMIWMSServiceCategories_Administrative = 2, + eQMIWMSServiceCategories_Maintenance = 3, + eQMIWMSServiceCategories_GeneralNewsLocal = 4, + eQMIWMSServiceCategories_GeneralNewsRegional = 5, + eQMIWMSServiceCategories_GeneralNewsNational = 6, + eQMIWMSServiceCategories_GeneralNewsInternational = 7, + eQMIWMSServiceCategories_BusinessNewsLocal = 8, + eQMIWMSServiceCategories_BusinessNewsRegional = 9, + eQMIWMSServiceCategories_BusinessNewsNational = 10, + eQMIWMSServiceCategories_BusinessNewsInternational = 11, + eQMIWMSServiceCategories_SportsNewsLocal = 12, + eQMIWMSServiceCategories_SportsNewsRegional = 13, + eQMIWMSServiceCategories_SportsNewsNational = 14, + eQMIWMSServiceCategories_SportsNewsInternational = 15, + eQMIWMSServiceCategories_EntertainmentNewsLocal = 16, + eQMIWMSServiceCategories_EntertainmentNewsRegional = 17, + eQMIWMSServiceCategories_EntertainmentNewsNational = 18, + eQMIWMSServiceCategories_EntertainmentNewsInternational = 19, + eQMIWMSServiceCategories_LocalWeather = 20, + eQMIWMSServiceCategories_AreaTrafficReports = 21, + eQMIWMSServiceCategories_LocalAirplaneFlightSchedules = 22, + eQMIWMSServiceCategories_Restaurants = 23, + eQMIWMSServiceCategories_Lodgings = 24, + eQMIWMSServiceCategories_RetailDirectory = 25, + eQMIWMSServiceCategories_Advertisements = 26, + eQMIWMSServiceCategories_StockQuotes = 27, + eQMIWMSServiceCategories_EmploymentOpportunities = 28, + eQMIWMSServiceCategories_MedicalHealthHospitals = 29, + eQMIWMSServiceCategories_TechnologyNews = 30, + eQMIWMSServiceCategories_Multicategory = 31, + eQMIWMSServiceCategories_CardApplicationToolkitProtocolTeleservice = 32, + eQMIWMSServiceCategories_PresidentialLevelAlert = 4096, + eQMIWMSServiceCategories_ExtremeThreattoLifeandProperty = 4097, + eQMIWMSServiceCategories_SevereThreattoLifeandProperty = 4098, + eQMIWMSServiceCategories_AMBERChildAbductionEmergency = 4099, + eQMIWMSServiceCategories_CMASTestMessage = 4100, +}; + +// Enum to describe QMI WMS Service Ready Status +enum eQMIWMSServiceReadyStatus:UINT32 +{ + eQMIWMSServiceReadyStatus_SMSServiceNotReady = 0, + eQMIWMSServiceReadyStatus_3GPPSMSServiceReady = 1, + eQMIWMSServiceReadyStatus_3GPP2SMSServiceReady = 2, + eQMIWMSServiceReadyStatus_3GPPAnd3GPP2SMSServicesReady = 3, +}; + +// Enum to describe QMI WMS Storage Types +enum eQMIWMSStorageTypes:UINT8 +{ + eQMIWMSStorageTypes_UIM = 0, + eQMIWMSStorageTypes_NV = 1, + eQMIWMSStorageTypes_Unknown = 255, +}; + +// Enum to describe QMI WMS Subscription Type +enum eQMIWMSSubscriptionType:UINT8 +{ + eQMIWMSSubscriptionType_PrimarySubscription = 0, + eQMIWMSSubscriptionType_SecondarySubscription = 1, + eQMIWMSSubscriptionType_TertiarySubscription = 2, +}; + +// Enum to describe QMI WMS TP Cause Codes +enum eQMIWMSTPCauseCodes:UINT8 +{ + eQMIWMSTPCauseCodes_TelematicInterworkingNotSupported = 128, + eQMIWMSTPCauseCodes_ShortMessageType0NotSupported = 129, + eQMIWMSTPCauseCodes_CannotReplaceShortMessage = 130, + eQMIWMSTPCauseCodes_UnspecifiedPIDError = 143, + eQMIWMSTPCauseCodes_DataCodingSchemeNotSupported = 144, + eQMIWMSTPCauseCodes_MessageClassNotSupported = 145, + eQMIWMSTPCauseCodes_UnspecifiedDCSError = 159, + eQMIWMSTPCauseCodes_CommandCannotBeActioned = 160, + eQMIWMSTPCauseCodes_CommandUnsupported = 161, + eQMIWMSTPCauseCodes_UnspecifiedCommandError = 175, + eQMIWMSTPCauseCodes_TPDUNotSupported = 176, + eQMIWMSTPCauseCodes_SCBusy = 192, + eQMIWMSTPCauseCodes_NoSCSubscription = 193, + eQMIWMSTPCauseCodes_SCSystemFailure = 194, + eQMIWMSTPCauseCodes_InvalidSMEAddress = 195, + eQMIWMSTPCauseCodes_DestinationSMEBarred = 196, + eQMIWMSTPCauseCodes_SMRejectedOrDuplicate = 197, + eQMIWMSTPCauseCodes_VPFNotSupported = 198, + eQMIWMSTPCauseCodes_VPNotSupported = 199, + eQMIWMSTPCauseCodes_SIMSMSStorageFull = 208, + eQMIWMSTPCauseCodes_NoSIMSMSStorageCapability = 209, + eQMIWMSTPCauseCodes_ErrorInMS = 210, + eQMIWMSTPCauseCodes_MemoryCapacityExceeded = 211, + eQMIWMSTPCauseCodes_SIMApplicationToolkitBusy = 212, + eQMIWMSTPCauseCodes_SIMDataDownloadError = 213, + eQMIWMSTPCauseCodes_UnspecifiedError = 255, +}; + +// Enum to describe QMI WMS Transport Capability +enum eQMIWMSTransportCapability:UINT8 +{ + eQMIWMSTransportCapability_CDMA = 0, + eQMIWMSTransportCapability_GW = 1, +}; + +// Enum to describe QMI WMS Transport Type +enum eQMIWMSTransportType:UINT8 +{ + eQMIWMSTransportType_IMS = 0, +}; + +// Enum to describe QMI WMS Waiting Message Type +enum eQMIWMSWaitingMessageType:UINT8 +{ + eQMIWMSWaitingMessageType_Voicemail = 0, + eQMIWMSWaitingMessageType_Fax = 1, + eQMIWMSWaitingMessageType_Email = 2, + eQMIWMSWaitingMessageType_Other = 3, + eQMIWMSWaitingMessageType_Videomail = 4, +}; + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPIStructs.h b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPIStructs.h new file mode 100644 index 0000000..cde5b16 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtAPIStructs.h @@ -0,0 +1,33556 @@ +/*=========================================================================== +FILE: + GobiConnectionMgmtAPIStructs.h + +DESCRIPTION: + Declaration of the Gobi API structures + +Copyright (c) 2013, 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 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. +==========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "GobiConnectionMgmtAPIEnums.h" + +#pragma pack( push, 1 ) + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// Structure to represent a QMUX header +struct sQMUXHeader +{ + // mIF is always 1 + BYTE mIF; + + // mLength is full size of QMUX message NOT including mIF + WORD mLength; + + // Flags are always 0 for clients + BYTE mFlags; + + eQMIService mServiceType; + BYTE mClientID; +}; + +// Structure to represent a QMI Control Raw Transaction Header +struct sQMIControlRawTransactionHeader +{ + BYTE mResponse :1; + BYTE mIndication :1; + BYTE mReserved :6; + BYTE mTransactionID; +}; + +// Structure to represent a QMI Service Raw Transaction Header +struct sQMIServiceRawTransactionHeader +{ + BYTE mCompound :1; + BYTE mResponse :1; + BYTE mIndication :1; + BYTE mReserved :5; + WORD mTransactionID; +}; + +// Structure to represetn a QMI Raw Message Header +struct sQMIRawMessageHeader +{ + WORD mMessageID; + WORD mLength; + + // This array must be the size specified by mLength + // BYTE mTLV[1]; +}; + +// Structure to represent a QMUX message +struct sQMUXMessage +{ + sQMUXHeader mQMUXHeader; + + // Either a sQMUXControlRawTransactionHeader or + // sQMIServiceRawTransactionHeader should go here + + sQMIRawMessageHeader mQMIRawMessageHeader; +}; + +// Structure to represent a QMI (control/service) content +struct sQMIRawContentHeader +{ + BYTE mTypeID; + WORD mLength; + + // This array must be the size specified by mLength + // BYTE mValue[1]; +}; + +// Structure to describe request TLV 0x01 for QMI CTL Get Client ID +struct sQMICTLGetClientID_ServiceType +{ + eQMIService mQMIService; +}; + +// Structure to describe response TLV 0x01 for QMI CTL Get Client ID +struct sQMICTLGetClientID_AssignedClientID +{ + eQMIService mQMIService; + BYTE mClientID; +}; + +// Structure to describe TLV 0x02, the Result Code +// It is common for all Responses +struct sResultCode +{ + eQMIResults mQMIResult; + eQMIErrors mQMIError; +}; + +// Structure to describe TLV 0x01 for 'Abort' messages (0x0001/2) shared +// across QMI WDS and NAS services +struct sAbortRequest_TransactionID +{ + UINT16 mTransactionID; +}; + +// Structure to describe TLV 0x10 for 'Get Supported Messages Response' +// message (0x001E) shared across most QMI services +struct sGetSupportedMessagesResponse_Messages +{ + UINT16 mSupportedMessagesLength; + + // This array must be the size specified by mSupportedMessagesLength + // where each bit of each UINT8 represents a single message ID + // UINT8 mSupportedMessages[1]; +}; + +// Structure to describe TLV 0x01 for 'Get Supported Fields Request' +// message (0x001F) shared across most QMI services +struct sGetSupportedFieldsRequest_MessageID +{ + UINT16 mMessageID; +}; + +// Structure to describe TLVs 0x10/11/12 for 'Get Supported Fields Response' +// message (0x001F) shared across most QMI services +struct sGetSupportedFieldsResponse_Fields +{ + UINT8 mSupportedFieldsLength; + + // This array must be the size specified by mSupportedFieldsLength + // where each bit of each UINT8 represents a single TLV ID + // UINT8 mSupportedFields[1]; +}; + +// Structure to describe TLV 0x01 for QMI LOC, the status +// It is common for QMI LOC indications above 0x0032 +struct sLOCIndication_Status +{ + eQMILOCStatus mStatus; +}; + +// Structure to describe request TLV 0x10 for WDSSetEventReport() +struct sWDSSetEventReportRequest_ChannelRateIndicator +{ + INT8 mReportChannelRate; +}; + +// Structure to describe request TLV 0x11 for WDSSetEventReport() +struct sWDSSetEventReportRequest_TransferStatisticsIndicator +{ + UINT8 mTransferStatisticsIntervalSeconds; + bool mReportTXPacketSuccesses:1; + bool mReportRXPacketSuccesses:1; + bool mReportTXPacketErrors:1; + bool mReportRXPacketErrors:1; + bool mReportTXOverflows:1; + bool mReportRXOverflows:1; + bool mTXByteTotal:1; + bool mRXByteTotal:1; + bool mTXPacketsDropped:1; + bool mRXPacketsDropped:1; + + // Padding out 22 bits + UINT8 mReserved1:6; + UINT8 mReserved2[2]; +}; + +// Structure to describe request TLV 0x12 for WDSSetEventReport() +struct sWDSSetEventReportRequest_DataBearerTechnologyIndicator +{ + INT8 mReportDataBearerTechnology; +}; + +// Structure to describe request TLV 0x13 for WDSSetEventReport() +struct sWDSSetEventReportRequest_DormancyStatusIndicator +{ + INT8 mReportDormancyStatus; +}; + +// Structure to describe request TLV 0x14 for WDSSetEventReport() +struct sWDSSetEventReportRequest_MIPStatusIndicator +{ + INT8 mReportMIPStatus; +}; + +// Structure to describe request TLV 0x15 for WDSSetEventReport() +struct sWDSSetEventReportRequest_CurrentDataBearerTechnologyIndicator +{ + INT8 mReportDataBearerTechnology; +}; + +// Structure to describe request TLV 0x17 for WDSSetEventReport() +struct sWDSSetEventReportRequest_DataCallStatusIndicator +{ + INT8 mReportDataCallStatus; +}; + +// Structure to describe request TLV 0x18 for WDSSetEventReport() +struct sWDSSetEventReportRequest_PreferredDataSystemIndicator +{ + INT8 mReportPreferredDataSystem; +}; + +// Structure to describe request TLV 0x19 for WDSSetEventReport() +struct sWDSSetEventReportRequest_EVDOPMChangeIndicator +{ + INT8 mReportEVDOPageMonitorPeriodChange; +}; + +// Structure to describe request TLV 0x1A for WDSSetEventReport() +struct sWDSSetEventReportRequest_DataSystemsIndicator +{ + INT8 mReportDataSystems; +}; + +// Structure to describe request TLV 0x1B for WDSSetEventReport() +struct sWDSSetEventReportRequest_UplinkFlowControlIndicator +{ + INT8 mReportUplinkFlowControl; +}; + +// Structure to describe request TLV 0x1C for WDSSetEventReport() +struct sWDSSetEventReportRequest_LimitedDataSystemStatusIndicator +{ + INT8 mReportLimitedDataSystemStatus; +}; + +// Structure to describe request TLV 0x1D for WDSSetEventReport() +struct sWDSSetEventReportRequest_PDNFilterRemovalsIndicator +{ + INT8 mReportPDNFilterRemovals; +}; + +// Structure to describe request TLV 0x1E for WDSSetEventReport() +struct sWDSSetEventReportRequest_ExtendedDataBearerTechnologyIndicator +{ + INT8 mReportExtendedDataBearerTechnology; +}; + +// Structure to describe indication TLV 0x10 for WDS EventReport +struct sWDSEventReportIndication_TXPacketSuccesses +{ + UINT32 mTXPacketSuccesses; +}; + +// Structure to describe indication TLV 0x11 for WDS EventReport +struct sWDSEventReportIndication_RXPacketSuccesses +{ + UINT32 mRXPacketSuccesses; +}; + +// Structure to describe indication TLV 0x12 for WDS EventReport +struct sWDSEventReportIndication_TXPacketErrors +{ + UINT32 mTXPacketErrors; +}; + +// Structure to describe indication TLV 0x13 for WDS EventReport +struct sWDSEventReportIndication_RXPacketErrors +{ + UINT32 mRXPacketErrors; +}; + +// Structure to describe indication TLV 0x14 for WDS EventReport +struct sWDSEventReportIndication_TXOverflows +{ + UINT32 mTXOverflows; +}; + +// Structure to describe indication TLV 0x15 for WDS EventReport +struct sWDSEventReportIndication_RXOverflows +{ + UINT32 mRXOverflows; +}; + +// Structure to describe indication TLV 0x16 for WDS EventReport +struct sWDSEventReportIndication_ChannelRates +{ + UINT32 mChannelTXRatebps; + UINT32 mChannelRXRatebps; +}; + +// Structure to describe indication TLV 0x17 for WDS EventReport +struct sWDSEventReportIndication_DataBearerTechnology +{ + eQMIDataBearerTechnologies mDataBearerTechnology; +}; + +// Structure to describe indication TLV 0x18 for WDS EventReport +struct sWDSEventReportIndication_DormancyStatus +{ + eQMIDormancyStatus mDormancyStatus; +}; + +// Structure to describe indication TLV 0x19 for WDS EventReport +struct sWDSEventReportIndication_TXBytes +{ + UINT64 mTXByteTotal; +}; + +// Structure to describe indication TLV 0x1A for WDS EventReport +struct sWDSEventReportIndication_RXBytes +{ + UINT64 mRXByteTotal; +}; + +// Structure to describe indication TLV 0x1B for WDS EventReport +struct sWDSEventReportIndication_MIPStatus +{ + UINT8 mMIPStatus; +}; + +// Structure to describe indication TLV 0x1D for WDS EventReport +struct sWDSEventReportIndication_CurrentDataBearerTechnology +{ + eQMIWDSNetworkTypes mNetworkType; + + // The following union is based on the value of mNetworkType + union uValOfNetworkType + { + // If the value of mNetworkType == 1 + struct sNetworkTypeIs1 + { + bool mCDMA1x:1; + bool mCDMA1xEvDORev0:1; + bool mCDMA1xEvDORevA:1; + bool mCDMA1xEvDORevB:1; + bool mCDMAEHRPD:1; + bool mCDMAFMC:1; + + // Padding out 25 bits + UINT8 mReserved1:2; + UINT8 mReserved2[2]; + UINT8 mReserved3:7; + + bool mNullBearer:1; + + // The following union is for handing both mCDMA1x and mCDMA1xEvDORev(0, A, B) + union uValOfCDMA1x_or_CDMA1xEvDORevX + { + // If the value of mCDMA1x == 1 + struct sCDMA1xIs1 + { + bool mCDMA1xIS95:1; + bool mCDMA1xIS2000:1; + bool mCDMA1xIS2000RelA:1; + + // Padding out 29 bits + UINT8 mReserved4:5; + UINT8 mReserved5[3]; + }; + + sCDMA1xIs1 mCDMA1xIs1; + + // If the value of mCDMA1xEvDORev0 == 1 + struct sCDMA1xEvDORev0Is1 + { + bool mCDMA1xEvDORev0DPA:1; + + // Padding out 31 bits + UINT8 mReserved6:7; + UINT8 mReserved7[3]; + }; + + sCDMA1xEvDORev0Is1 mCDMA1xEvDORev0Is1; + + // If the value of mCDMA1xEvDORevA == 1 + struct sCDMA1xEvDORevAIs1 + { + bool mCDMA1xEvDORevADPA:1; + bool mCDMA1xEvDORevAMFPA:1; + bool mCDMA1xEvDORevAEMPA:1; + bool mCDMA1xEvDORevAEMPAEHRPD:1; + + // Padding out 28 bits + UINT8 mReserved8:4; + UINT8 mReserved9[3]; + }; + + sCDMA1xEvDORevAIs1 mCDMA1xEvDORevAIs1; + + // If the value of mCDMA1xEvDORevB == 1 + struct sCDMA1xEvDORevBIs1 + { + bool mCDMA1xEvDORevBDPA:1; + bool mCDMA1xEvDORevBMFPA:1; + bool mCDMA1xEvDORevBEMPA:1; + bool mCDMA1xEvDORevBEMPAEHRPD:1; + bool mCDMA1xEvDORevBMMPA:1; + bool mCDMA1xEvDORevBMMPAEHRPD:1; + + // Padding out 26 bits + UINT8 mReserved10:2; + UINT8 mReserved11[3]; + }; + + sCDMA1xEvDORevBIs1 mCDMA1xEvDORevBIs1; + + // Padding out 32 bits + UINT8 mReserved12[4]; + }; + + uValOfCDMA1x_or_CDMA1xEvDORevX mValOfCDMA1x_or_CDMA1xEvDORevX; + }; + + sNetworkTypeIs1 mNetworkTypeIs1; + + // If the value of mNetworkType == 2 + struct sNetworkTypeIs2 + { + bool mWCDMA:1; + bool mGPRS:1; + bool mHSDPA:1; + bool mHSUPA:1; + bool mEDGE:1; + bool mLTE:1; + bool mHSDPAPlus:1; + bool mDualCellHSDPAPlus:1; + bool m64QAM:1; + bool mTDSCDMA:1; + + // Padding out 21 bits + UINT8 mReserved13:6; + UINT8 mReserved14; + UINT8 mReserved15:7; + + bool mNullBearer:1; + }; + + sNetworkTypeIs2 mNetworkTypeIs2; + + // Padding out 64 bits + UINT8 mReserved16[8]; + }; + + uValOfNetworkType mValOfNetworkType; +}; + +// Structure to describe indication TLV 0x1F for WDS EventReport +struct sWDSEventReportIndication_DataCallStatus +{ + eQMIWDSDataCallStatus mDataCallStatus; +}; + +// Structure to describe indication TLV 0x20 for WDS EventReport +struct sWDSEventReportIndication_PreferredDataSystem +{ + eQMIWDSDataSystems mPreferredDataSystem; +}; + +// Structure to describe indication TLV 0x22 for WDS EventReport +struct sWDSEventReportIndication_DataCallType +{ + eQMIWDSDataCallTypes mDataCallType; + eQMIWDSTetheredCallTypes mTetheredCallType; +}; + +// Structure to describe indication TLV 0x23 for WDS EventReport +struct sWDSEventReportIndication_EVDOPageMonitorPeriodChange +{ + UINT8 mEVDOPageMonitorPeriodChange; + INT8 mEVDOForceLongSleep; +}; + +// Structure to describe indication TLV 0x24 for WDS EventReport +struct sWDSEventReportIndication_DataSystems +{ + eQMIWDSDataSystemNetworkTypes mPreferredNetworkType; + UINT8 mNetworkCount; + + struct sNetwork + { + eQMIWDSDataSystemNetworkTypes mNetworkType; + + // The following union is based on the value of mNetworkType + union uValOfNetworkType + { + // If the value of mNetworkType == 0 + struct sNetworkTypeIs0 + { + bool mWCDMA:1; + bool mGPRS:1; + bool mHSDPA:1; + bool mHSUPA:1; + bool mEDGE:1; + bool mLTE:1; + bool mHSDPAPlus:1; + bool mDualCellHSDPAPlus:1; + bool m64QAM:1; + bool mTDSCDMA:1; + + // Padding out 21 bits + UINT8 mReserved1:6; + UINT8 mReserved2; + UINT8 mReserved3:7; + + bool mNULLBearer:1; + }; + + sNetworkTypeIs0 mNetworkTypeIs0; + + // If the value of mNetworkType == 1 + struct sNetworkTypeIs1 + { + bool mCDMA1x:1; + bool mCDMA1xEvDORev0:1; + bool mCDMA1xEvDORevA:1; + bool mCDMA1xEvDORevB:1; + bool mCDMAEHRPD:1; + bool mCDMAFMC:1; + + // Padding out 25 bits + UINT8 mReserved4:2; + UINT8 mReserved5[2]; + UINT8 mReserved6:7; + + bool mNULLBearer:1; + + // The following union is for handing all mCDMA1x types + union uValOfCDMA1xTypes + { + // If the value of mCDMA1x == 1 + struct sCDMA1xIs1 + { + bool mCDMA1xIS95:1; + bool mCDMA1xIS2000:1; + bool mCDMA1xIS2000RelA:1; + + // Padding out 29 bits + UINT8 mReserved7:5; + UINT8 mReserved8[3]; + }; + + sCDMA1xIs1 mCDMA1xIs1; + + // If the value of mCDMA1xEvDORev0 == 1 + struct sCDMA1xEvDORev0Is1 + { + bool mCDMA1xEvDORev0DPA:1; + + // Padding out 31 bits + UINT8 mReserved9:7; + UINT8 mReserved10[3]; + }; + + sCDMA1xEvDORev0Is1 mCDMA1xEvDORev0Is1; + + // If the value of mCDMA1xEvDORevA == 1 + struct sCDMA1xEvDORevAIs1 + { + bool mCDMA1xEvDORevADPA:1; + bool mCDMA1xEvDORevAMFPA:1; + bool mCDMA1xEvDORevAEMPA:1; + bool mCDMA1xEvDORevAEMPAEHRPD:1; + + // Padding out 28 bits + UINT8 mReserved11:4; + UINT8 mReserved12[3]; + }; + + sCDMA1xEvDORevAIs1 mCDMA1xEvDORevAIs1; + + // If the value of mCDMA1xEvDORevB == 1 + struct sCDMA1xEvDORevBIs1 + { + bool mCDMA1xEvDORevBDPA:1; + bool mCDMA1xEvDORevBMFPA:1; + bool mCDMA1xEvDORevBEMPA:1; + bool mCDMA1xEvDORevBEMPAEHRPD:1; + bool mCDMA1xEvDORevBMMPA:1; + bool mCDMA1xEvDORevBMMPAEHRPD:1; + + // Padding out 26 bits + UINT8 mReserved13:2; + UINT8 mReserved14[3]; + }; + + sCDMA1xEvDORevBIs1 mCDMA1xEvDORevBIs1; + + // Padding out 32 bits + UINT8 mReserved15[4]; + }; + + uValOfCDMA1xTypes mValOfCDMA1xTypes; + }; + + sNetworkTypeIs1 mNetworkTypeIs1; + + // Padding out 64 bits + UINT8 mReserved16[8]; + }; + + uValOfNetworkType mValOfNetworkType; + }; + + // This array must be the size specified by mNetworkCount + // sNetwork mNetworks[1]; +}; + +// Structure to describe indication TLV 0x25 for WDS EventReport +struct sWDSEventReportIndication_TXPacketsDropped +{ + UINT32 mTXPacketsDropped; +}; + +// Structure to describe indication TLV 0x26 for WDS EventReport +struct sWDSEventReportIndication_RXPacketsDropped +{ + UINT32 mRXPacketsDropped; +}; + +// Structure to describe indication TLV 0x27 for WDS EventReport +struct sWDSEventReportIndication_UplinkFlowControl +{ + INT8 mUplinkFlowControlEnabled; +}; + +// Structure to describe indication TLV 0x28 for WDS EventReport +struct sWDSEventReportIndication_DataCallAddressFamily +{ + eQMIWDSAddressFamilies mAddressFamily; +}; + +// Structure to describe indication TLV 0x29 for WDS EventReport +struct sWDSEventReportIndication_PDNFiltersRemoved +{ + UINT8 mPDNFilterHandleCount; + + // This array must be the size specified by mPDNFilterHandleCount + // UINT32 mPDNFilterHandle[1]; +}; + +// Structure to describe indication TLV 0x2A for WDS EventReport +struct sWDSEventReportIndication_ExtendedDataBearerTechnology +{ + eQMIWDSDataBearerTechnologies mDataBearerTechnology; + eQMIWDSRadioAccessTechnologies mRadioAccessTechnology; + bool mWCDMA:1; + bool mHSDPA:1; + bool mHSUPA:1; + bool mHSDPAPlus:1; + bool mDualCellHSDPAPlus:1; + bool m64QAM:1; + bool mHSPA:1; + bool mGPRS:1; + bool mEDGE:1; + bool mGSM:1; + bool mS2B:1; + bool mLTELimitedService:1; + bool mLTEFDD:1; + bool mLTETDD:1; + + // Padding out 11 bits + UINT8 mReserved1:2; + UINT8 mReserved2; + UINT8 mReserved3:1; + + bool m1xIS95:1; + bool m1xIS2000:1; + bool m1xIS2000RelA:1; + bool mHDRRev0DPA:1; + bool mHDRRevADPA:1; + bool mHDRRevBDPA:1; + bool mHDRRevAMPA:1; + bool mHDRRevBMPA:1; + bool mHDRRevAEMPA:1; + bool mHDRRevBEMPA:1; + bool mHDRRevBMMPA:1; + bool mHDREVDOFMC:1; + + // Padding out 27 bits + UINT8 mReserved4:3; + UINT8 mReserved5[3]; +}; + +// Structure to describe request TLV 0x10 for WDSSetIndication() +struct sWDSSetIndicationRequest_TMGIList +{ + INT8 mReportEMBMSTMGIList; +}; + +// Structure to describe request TLV 0x11 for WDSSetIndication() +struct sWDSSetIndicationRequest_PacketService +{ + INT8 mSuppressPacketServiceIndication; +}; + +// Structure to describe request TLV 0x12 for WDSSetIndication() +struct sWDSSetIndicationRequest_ExtendedIP +{ + INT8 mReportExtendedIPConfigChange; +}; + +// Structure to describe request TLV 0x13 for WDSSetIndication() +struct sWDSSetIndicationRequest_LTEAttachPDNList +{ + INT8 mReportLTEAttachPDNListChange; +}; + +// Structure to describe request TLV 0x14 for WDSSetIndication() +struct sWDSSetIndicationRequest_ReverseIPTransportFilter +{ + INT8 mReportReverseIPTransportFilterSetup; +}; + +// Structure to describe request TLV 0x15 for WDSSetIndication() +struct sWDSSetIndicationRequest_HandoffInfo +{ + INT8 mReportHandoffInformation; +}; + +// Structure to describe request TLV 0x10 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_PrimaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x11 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_SecondaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x12 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_PrimaryNBNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x13 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_SecondaryNBNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x14 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_ContextAPNName +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe request TLV 0x15 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_IPAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x16 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_Authentication +{ + bool mEnablePAP:1; + bool mEnableCHAP:1; + + // Padding out 6 bits + UINT8 mReserved1:6; +}; + +// Structure to describe request TLV 0x17 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_Username +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe request TLV 0x18 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_Password +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe request TLV 0x19 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_IPFamily +{ + eQMIWDSIPFamilies mIPFamily; +}; + +// Structure to describe request TLV 0x30 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_TechnologyPreference +{ + bool mEnable3GPP:1; + bool mEnable3GPP2:1; + + // Padding out 6 bits + UINT8 mReserved1:6; +}; + +// Structure to describe request TLV 0x31 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_3GPPProfileIdentifier +{ + UINT8 mProfileIndex; +}; + +// Structure to describe request TLV 0x32 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_3GPP2ProfileIdentifier +{ + UINT8 mProfileIndex; +}; + +// Structure to describe request TLV 0x33 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_Autoconnect +{ + eQMIWDSAutoconnectSettings mAutoconnectSetting; +}; + +// Structure to describe request TLV 0x34 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_ExtendedTechnologyPreference +{ + eQMIWDSExtendedTechPrefs mExtendedTechnologyPreference; +}; + +// Structure to describe request TLV 0x35 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_CallType +{ + eQMIWDSCallTypes mCallType; +}; + +// Structure to describe request TLV 0x36 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_HandoffContext +{ + UINT8 mIPV4Address[4]; + UINT16 mIPv6Address[8]; + eQMIWDSIPSupportTypes mBearerIPType; +}; + +// Structure to describe request TLV 0x37 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceRequest_IPStreamID +{ + UINT8 mIPStreamID; +}; + +// Structure to describe response TLV 0x01 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceResponse_PacketDataHandle +{ + UINT32 mPacketDataHandle; +}; + +// Structure to describe response TLV 0x10 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceResponse_CallEndReason +{ + eQMICallEndReasons mCallEnd; +}; + +// Structure to describe response TLV 0x11 for WDSStartNetworkInterface() +struct sWDSStartNetworkInterfaceResponse_VerboseCallEndReason +{ + eQMIWDSCallEndReasonTypes mCallEndReasonType; + + // The following union is based on the value of mCallEndReasonType + union uValOfCallEndReasonType + { + // Always present + UINT16 mCallEndReasonValue; + + // If the value of mCallEndReasonType == 1 + struct sCallEndReasonTypeIs1 + { + eQMIWDSMobileIPCallEndReasons mMobileIPCallEndReason; + }; + + sCallEndReasonTypeIs1 mCallEndReasonTypeIs1; + + // If the value of mCallEndReasonType == 2 + struct sCallEndReasonTypeIs2 + { + eQMIWDSInternalCallEndReasons mInternalCallEndReason; + }; + + sCallEndReasonTypeIs2 mCallEndReasonTypeIs2; + + // If the value of mCallEndReasonType == 3 + struct sCallEndReasonTypeIs3 + { + eQMIWDSCallManagerCallEndReasons mCallManagerCallEndReason; + }; + + sCallEndReasonTypeIs3 mCallEndReasonTypeIs3; + + // If the value of mCallEndReasonType == 6 + struct sCallEndReasonTypeIs6 + { + eQMIWDS3GPPCallEndReasons m3GPPCallEndReason; + }; + + sCallEndReasonTypeIs6 mCallEndReasonTypeIs6; + + // If the value of mCallEndReasonType == 7 + struct sCallEndReasonTypeIs7 + { + eQMIWDSPPPCallEndReason mPPPCallEndReason; + }; + + sCallEndReasonTypeIs7 mCallEndReasonTypeIs7; + + // If the value of mCallEndReasonType == 8 + struct sCallEndReasonTypeIs8 + { + eQMIWDSEHRPDCallEndReason mEHRPDCallEndReason; + }; + + sCallEndReasonTypeIs8 mCallEndReasonTypeIs8; + + // If the value of mCallEndReasonType == 9 + struct sCallEndReasonTypeIs9 + { + eQMIWDSIPv6CallEndReason mIPv6CallEndReason; + }; + + sCallEndReasonTypeIs9 mCallEndReasonTypeIs9; + + // Padding out 16 bits + UINT8 mReserved1[2]; + }; + + uValOfCallEndReasonType mValOfCallEndReasonType; +}; + +// Structure to describe request TLV 0x01 for WDSStopNetworkInterface() +struct sWDSStopNetworkInterfaceRequest_PacketDataHandle +{ + UINT32 mPacketDataHandle; +}; + +// Structure to describe request TLV 0x10 for WDSStopNetworkInterface() +struct sWDSStopNetworkInterfaceRequest_Autoconnect +{ + INT8 mAutoconnectOff; +}; + +// Structure to describe response TLV 0x01 for WDSGetPacketServiceStatus() +struct sWDSGetPacketServiceStatusResponse_Status +{ + eQMIConnectionStatus mConnectionStatus; +}; + +// Structure to describe indication TLV 0x01 for WDS PacketServiceStatusReport +struct sWDSPacketServiceStatusReportIndication_Status +{ + eQMIConnectionStatus mConnectionStatus; + INT8 mReconfigureRequired; +}; + +// Structure to describe indication TLV 0x10 for WDS PacketServiceStatusReport +struct sWDSPacketServiceStatusReportIndication_CallEndReason +{ + eQMICallEndReasons mCallEnd; +}; + +// Structure to describe indication TLV 0x11 for WDS PacketServiceStatusReport +struct sWDSPacketServiceStatusReportIndication_VerboseCallEndReason +{ + eQMIWDSCallEndReasonTypes mCallEndReasonType; + + // The following union is based on the value of mCallEndReasonType + union uValOfCallEndReasonType + { + // Always present + UINT16 mCallEndReasonValue; + + // If the value of mCallEndReasonType == 1 + struct sCallEndReasonTypeIs1 + { + eQMIWDSMobileIPCallEndReasons mMobileIPCallEndReason; + }; + + sCallEndReasonTypeIs1 mCallEndReasonTypeIs1; + + // If the value of mCallEndReasonType == 2 + struct sCallEndReasonTypeIs2 + { + eQMIWDSInternalCallEndReasons mInternalCallEndReason; + }; + + sCallEndReasonTypeIs2 mCallEndReasonTypeIs2; + + // If the value of mCallEndReasonType == 3 + struct sCallEndReasonTypeIs3 + { + eQMIWDSCallManagerCallEndReasons mCallManagerCallEndReason; + }; + + sCallEndReasonTypeIs3 mCallEndReasonTypeIs3; + + // If the value of mCallEndReasonType == 6 + struct sCallEndReasonTypeIs6 + { + eQMIWDS3GPPCallEndReasons m3GPPCallEndReason; + }; + + sCallEndReasonTypeIs6 mCallEndReasonTypeIs6; + + // If the value of mCallEndReasonType == 7 + struct sCallEndReasonTypeIs7 + { + eQMIWDSPPPCallEndReason mPPPCallEndReason; + }; + + sCallEndReasonTypeIs7 mCallEndReasonTypeIs7; + + // If the value of mCallEndReasonType == 8 + struct sCallEndReasonTypeIs8 + { + eQMIWDSEHRPDCallEndReason mEHRPDCallEndReason; + }; + + sCallEndReasonTypeIs8 mCallEndReasonTypeIs8; + + // If the value of mCallEndReasonType == 9 + struct sCallEndReasonTypeIs9 + { + eQMIWDSIPv6CallEndReason mIPv6CallEndReason; + }; + + sCallEndReasonTypeIs9 mCallEndReasonTypeIs9; + + // Padding out 16 bits + UINT8 mReserved1[2]; + }; + + uValOfCallEndReasonType mValOfCallEndReasonType; +}; + +// Structure to describe indication TLV 0x12 for WDS PacketServiceStatusReport +struct sWDSPacketServiceStatusReportIndication_IPFamily +{ + eQMIWDSIPFamilies mIPFamily; +}; + +// Structure to describe indication TLV 0x13 for WDS PacketServiceStatusReport +struct sWDSPacketServiceStatusReportIndication_ExtendedTechnology +{ + eQMIWDSExtendedTechPrefs mExtendedTechnology; +}; + +// Structure to describe response TLV 0x01 for WDSGetChannelRates() +struct sWDSGetChannelRatesResponse_ChannelRates +{ + UINT32 mChannelTXRatebps; + UINT32 mChannelRXRatebps; + UINT32 mMaxChannelTXRatebps; + UINT32 mMaxChannelRXRatebps; +}; + +// Structure to describe request TLV 0x01 for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsRequest_PacketStatsMask +{ + bool mReportTXPacketSuccesses:1; + bool mReportRXPacketSuccesses:1; + bool mReportTXPacketErrors:1; + bool mReportRXPacketErrors:1; + bool mReportTXOverflows:1; + bool mReportRXOverflows:1; + bool mTXByteTotal:1; + bool mRXByteTotal:1; + bool mTXPacketsDropped:1; + bool mRXPacketsDropped:1; + + // Padding out 22 bits + UINT8 mReserved1:6; + UINT8 mReserved2[2]; +}; + +// Structure to describe response TLV 0x10 for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_TXPacketSuccesses +{ + UINT32 mTXPacketSuccesses; +}; + +// Structure to describe response TLV 0x11 for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_RXPacketSuccesses +{ + UINT32 mRXPacketSuccesses; +}; + +// Structure to describe response TLV 0x12 for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_TXPacketErrors +{ + UINT32 mTXPacketErrors; +}; + +// Structure to describe response TLV 0x13 for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_RXPacketErrors +{ + UINT32 mRXPacketErrors; +}; + +// Structure to describe response TLV 0x14 for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_TXOverflows +{ + UINT32 mTXOverflows; +}; + +// Structure to describe response TLV 0x15 for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_RXOverflows +{ + UINT32 mRXOverflows; +}; + +// Structure to describe response TLV 0x19 for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_TXBytes +{ + UINT64 mTXByteTotal; +}; + +// Structure to describe response TLV 0x1A for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_RXBytes +{ + UINT64 mRXByteTotal; +}; + +// Structure to describe response TLV 0x1B for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_PreviousTXBytes +{ + UINT64 mPreviousCallTXByteTotal; +}; + +// Structure to describe response TLV 0x1C for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_PreviousRXBytes +{ + UINT64 mPreviousCallRXByteTotal; +}; + +// Structure to describe response TLV 0x1D for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_TXPacketsDropped +{ + UINT32 mTXPacketsDropped; +}; + +// Structure to describe response TLV 0x1E for WDSGetPacketStatistics() +struct sWDSGetPacketStatisticsResponse_RXPacketsDropped +{ + UINT32 mRXPacketsDropped; +}; + +// Structure to describe request TLV 0x01 for WDSCreateProfile() +struct sWDSCreateProfileRequest_ProfileType +{ + eQMIProfileTypes mProfileType; +}; + +// Structure to describe request TLV 0x10 for WDSCreateProfile() +struct sWDSCreateProfileRequest_ProfileName +{ + // String is variable length, but must be size of the container + // char mProfileName[1]; +}; + +// Structure to describe request TLV 0x11 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDPType +{ + eQMIPDPTypes mPDPType; +}; + +// Structure to describe request TLV 0x12 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDPHeaderCompressionType +{ + eQMIWDSPDPHeaderCompressionType mPDPHeaderCompressionType; +}; + +// Structure to describe request TLV 0x13 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDPDataCompressionType +{ + eQMIWDSPDPDataCompressionType mPDPDataCompressionType; +}; + +// Structure to describe request TLV 0x14 for WDSCreateProfile() +struct sWDSCreateProfileRequest_APNName +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe request TLV 0x15 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PrimaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x16 for WDSCreateProfile() +struct sWDSCreateProfileRequest_SecondaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x17 for WDSCreateProfile() +struct sWDSCreateProfileRequest_UMTSRequestedQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; +}; + +// Structure to describe request TLV 0x18 for WDSCreateProfile() +struct sWDSCreateProfileRequest_UMTSMinimumQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; +}; + +// Structure to describe request TLV 0x19 for WDSCreateProfile() +struct sWDSCreateProfileRequest_GPRSRequestedQoS +{ + UINT32 mPrecedenceClass; + UINT32 mDelayClass; + UINT32 mReliabilityClass; + UINT32 mPeakThroughputClass; + UINT32 mMeanThroughputClass; +}; + +// Structure to describe request TLV 0x1A for WDSCreateProfile() +struct sWDSCreateProfileRequest_GPRSMinimumQoS +{ + UINT32 mPrecedenceClass; + UINT32 mDelayClass; + UINT32 mReliabilityClass; + UINT32 mPeakThroughputClass; + UINT32 mMeanThroughputClass; +}; + +// Structure to describe request TLV 0x1B for WDSCreateProfile() +struct sWDSCreateProfileRequest_Username +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe request TLV 0x1C for WDSCreateProfile() +struct sWDSCreateProfileRequest_Password +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe request TLV 0x1D for WDSCreateProfile() +struct sWDSCreateProfileRequest_Authentication +{ + bool mEnablePAP:1; + bool mEnableCHAP:1; + + // Padding out 6 bits + UINT8 mReserved1:6; +}; + +// Structure to describe request TLV 0x1E for WDSCreateProfile() +struct sWDSCreateProfileRequest_IPAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x1F for WDSCreateProfile() +struct sWDSCreateProfileRequest_PCSCF +{ + INT8 mPCSCFAddressUsingPCO; +}; + +// Structure to describe request TLV 0x20 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDPAccessControlFlag +{ + eQMIWDSPDPAccessControlFlag mPDPAccessControlFlag; +}; + +// Structure to describe request TLV 0x21 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PCSCFAddressUsingDHCP +{ + INT8 mPCSCFAddressUsingDHCP; +}; + +// Structure to describe request TLV 0x22 for WDSCreateProfile() +struct sWDSCreateProfileRequest_IMCNFlag +{ + INT8 mIMCN; +}; + +// Structure to describe request TLV 0x23 for WDSCreateProfile() +struct sWDSCreateProfileRequest_TrafficFlowTemplateID1Parameters +{ + UINT8 mFilterID; + UINT8 mEvaluationID; + eQMIWDSIPVersion mIPVersion; + + // The following union is based on the value of mIPVersion + union uValOfIPVersion + { + // If the value of mIPVersion == 4 + struct sIPVersionIs4 + { + UINT8 mIPV4Address[4]; + }; + + sIPVersionIs4 mIPVersionIs4; + + // If the value of mIPVersion == 6 + struct sIPVersionIs6 + { + UINT16 mIPv6Address[8]; + }; + + sIPVersionIs6 mIPVersionIs6; + + // Padding out 128 bits + UINT8 mReserved1[16]; + }; + + uValOfIPVersion mValOfIPVersion; + + UINT8 mSourceIPMask; + UINT8 mNextHeader; + UINT16 mDestinationPortRangeStart; + UINT16 mDestinationPortRangeEnd; + UINT16 mSourcePortRangeStart; + UINT16 mSourcePortRangeEnd; + UINT32 mIPSECSecurityParameterIndex; + UINT16 mTOSMask; + UINT32 mFlowLabel; +}; + +// Structure to describe request TLV 0x24 for WDSCreateProfile() +struct sWDSCreateProfileRequest_TrafficFlowTemplateID2Parameters +{ + UINT8 mFilterID; + UINT8 mEvaluationID; + eQMIWDSIPVersion mIPVersion; + + // The following union is based on the value of mIPVersion + union uValOfIPVersion + { + // If the value of mIPVersion == 4 + struct sIPVersionIs4 + { + UINT8 mIPV4Address[4]; + }; + + sIPVersionIs4 mIPVersionIs4; + + // If the value of mIPVersion == 6 + struct sIPVersionIs6 + { + UINT16 mIPv6Address[8]; + }; + + sIPVersionIs6 mIPVersionIs6; + + // Padding out 128 bits + UINT8 mReserved1[16]; + }; + + uValOfIPVersion mValOfIPVersion; + + UINT8 mSourceIPMask; + UINT8 mNextHeader; + UINT16 mDestinationPortRangeStart; + UINT16 mDestinationPortRangeEnd; + UINT16 mSourcePortRangeStart; + UINT16 mSourcePortRangeEnd; + UINT32 mIPSECSecurityParameterIndex; + UINT16 mTOSMask; + UINT32 mFlowLabel; +}; + +// Structure to describe request TLV 0x25 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDPContextNumber +{ + UINT8 mPDPContextNumber; +}; + +// Structure to describe request TLV 0x26 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDPContextSecondaryFlag +{ + INT8 mPDPContextSecondaryFlag; +}; + +// Structure to describe request TLV 0x27 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDPContextPrimaryID +{ + UINT8 mPDPPrimaryID; +}; + +// Structure to describe request TLV 0x28 for WDSCreateProfile() +struct sWDSCreateProfileRequest_IPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x29 for WDSCreateProfile() +struct sWDSCreateProfileRequest_RequestedQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; + INT8 mSignalingIndication; +}; + +// Structure to describe request TLV 0x2A for WDSCreateProfile() +struct sWDSCreateProfileRequest_MinimumQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; + INT8 mSignalingIndication; +}; + +// Structure to describe request TLV 0x2B for WDSCreateProfile() +struct sWDSCreateProfileRequest_PrimaryIPv6 +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x2C for WDSCreateProfile() +struct sWDSCreateProfileRequest_SecondaryIPv6 +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x2D for WDSCreateProfile() +struct sWDSCreateProfileRequest_AddressPreference +{ + eQMIWDSAddressAllocationPreference mAddressAllocationPreference; +}; + +// Structure to describe request TLV 0x2E for WDSCreateProfile() +struct sWDSCreateProfileRequest_LTEQoSParameters +{ + eQMIWDSQoSClassIdentifier mQoSClassIdentifier; + UINT32 mGuaranteedDownlinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mMaxUplinkBitrate; +}; + +// Structure to describe request TLV 0x2F for WDSCreateProfile() +struct sWDSCreateProfileRequest_APNDisabled +{ + INT8 mAPNDisabled; +}; + +// Structure to describe request TLV 0x30 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDNInactivityTimer +{ + UINT32 mPDNInactivityTimerSeconds; +}; + +// Structure to describe request TLV 0x31 for WDSCreateProfile() +struct sWDSCreateProfileRequest_APNClass +{ + UINT8 mAPNClass; +}; + +// Structure to describe request TLV 0x35 for WDSCreateProfile() +struct sWDSCreateProfileRequest_APNBearer +{ + bool mGSM:1; + bool mWCDMA:1; + bool mLTE:1; + + // Padding out 60 bits + UINT8 mReserved1:5; + UINT8 mReserved2[6]; + UINT8 mReserved3:7; + + bool mAny:1; +}; + +// Structure to describe request TLV 0x36 for WDSCreateProfile() +struct sWDSCreateProfileRequest_SupportEmergencyCalls +{ + INT8 mSupportEmergencyCalls; +}; + +// Structure to describe request TLV 0x37 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PCOContainerID +{ + UINT16 mPCOContainerID; +}; + +// Structure to describe request TLV 0x38 for WDSCreateProfile() +struct sWDSCreateProfileRequest_MCC +{ + UINT16 mMobileCountryCode; +}; + +// Structure to describe request TLV 0x39 for WDSCreateProfile() +struct sWDSCreateProfileRequest_MNC +{ + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe request TLV 0x8F for WDSCreateProfile() +struct sWDSCreateProfileRequest_ProfilePersistent +{ + INT8 mProfilePersistent; +}; + +// Structure to describe request TLV 0x90 for WDSCreateProfile() +struct sWDSCreateProfileRequest_NegotiateDNSServerPreference +{ + INT8 mNegotiateDNSServerPreference; +}; + +// Structure to describe request TLV 0x91 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PPPSessionCloseTimerDO +{ + UINT32 mPPPSessionCloseTimerDOSeconds; +}; + +// Structure to describe request TLV 0x92 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PPPSessionCloseTimer1X +{ + UINT32 mPPPSessionCloseTimer1XSeconds; +}; + +// Structure to describe request TLV 0x93 for WDSCreateProfile() +struct sWDSCreateProfileRequest_AllowLinger +{ + INT8 mAllowLinger; +}; + +// Structure to describe request TLV 0x94 for WDSCreateProfile() +struct sWDSCreateProfileRequest_LCPACKTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe request TLV 0x95 for WDSCreateProfile() +struct sWDSCreateProfileRequest_IPCPACKTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe request TLV 0x96 for WDSCreateProfile() +struct sWDSCreateProfileRequest_AuthenticationTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe request TLV 0x97 for WDSCreateProfile() +struct sWDSCreateProfileRequest_LCPConfigRetryCount +{ + UINT8 mRetryCount; +}; + +// Structure to describe request TLV 0x98 for WDSCreateProfile() +struct sWDSCreateProfileRequest_IPCPConfigRetryCount +{ + UINT8 mRetryCount; +}; + +// Structure to describe request TLV 0x99 for WDSCreateProfile() +struct sWDSCreateProfileRequest_AuthenticationRetry +{ + UINT8 mRetryCount; +}; + +// Structure to describe request TLV 0x9A for WDSCreateProfile() +struct sWDSCreateProfileRequest_AuthenticationProtocol +{ + eQMIWDSAuthenticationProtocol mAuthenticationProtocol; +}; + +// Structure to describe request TLV 0x9B for WDSCreateProfile() +struct sWDSCreateProfileRequest_UserID +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe request TLV 0x9C for WDSCreateProfile() +struct sWDSCreateProfileRequest_AuthenticationPassword +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe request TLV 0x9D for WDSCreateProfile() +struct sWDSCreateProfileRequest_DataRate +{ + eQMIWDSDataRate mDataRate; +}; + +// Structure to describe request TLV 0x9E for WDSCreateProfile() +struct sWDSCreateProfileRequest_ApplicationType +{ + eQMIWDSApplicationType mApplicationType; +}; + +// Structure to describe request TLV 0x9F for WDSCreateProfile() +struct sWDSCreateProfileRequest_DataMode +{ + eQMIWDSDataMode mDataMode; +}; + +// Structure to describe request TLV 0xA0 for WDSCreateProfile() +struct sWDSCreateProfileRequest_ApplicationPriority +{ + UINT8 mApplicationPriority; +}; + +// Structure to describe request TLV 0xA1 for WDSCreateProfile() +struct sWDSCreateProfileRequest_APNString +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe request TLV 0xA2 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDNType +{ + eQMIWDSPDNType mPDNType; +}; + +// Structure to describe request TLV 0xA3 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PCSCFAddressNeeded +{ + INT8 mPCSCFAddressNeeded; +}; + +// Structure to describe request TLV 0xA4 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PrimaryIPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0xA5 for WDSCreateProfile() +struct sWDSCreateProfileRequest_SecondaryIPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0xA6 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PrimaryIPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0xA7 for WDSCreateProfile() +struct sWDSCreateProfileRequest_SecondaryIPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0xA8 for WDSCreateProfile() +struct sWDSCreateProfileRequest_RATType +{ + eQMIWDS3GPP2RATTypes mRATType; +}; + +// Structure to describe request TLV 0xA9 for WDSCreateProfile() +struct sWDSCreateProfileRequest_3GPP2APNEnabled +{ + INT8 mAPNEnabled; +}; + +// Structure to describe request TLV 0xAA for WDSCreateProfile() +struct sWDSCreateProfileRequest_3GPP2PDNInactivityTimer +{ + UINT32 mPDNInactivityTimerMinutes; +}; + +// Structure to describe request TLV 0xAB for WDSCreateProfile() +struct sWDSCreateProfileRequest_3GPP2APNClass +{ + UINT8 mAPNClass; +}; + +// Structure to describe request TLV 0xAD for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDNAuthenticationProtocol +{ + eQMIWDSAuthenticationProtocol mAuthenticationProtocol; +}; + +// Structure to describe request TLV 0xAE for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDNUserID +{ + // String is variable length, but must be size of the container + // char mUserID[1]; +}; + +// Structure to describe request TLV 0xAF for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDNPassword +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe request TLV 0xB0 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDNLabel +{ + // String is variable length, but must be size of the container + // char mLabel[1]; +}; + +// Structure to describe request TLV 0xBD for WDSCreateProfile() +struct sWDSCreateProfileRequest_3GPP2PCOContainerID +{ + UINT16 mPCOContainerID; +}; + +// Structure to describe request TLV 0xBE for WDSCreateProfile() +struct sWDSCreateProfileRequest_3GPP2MCC +{ + UINT16 mMobileCountryCode; +}; + +// Structure to describe request TLV 0xBF for WDSCreateProfile() +struct sWDSCreateProfileRequest_3GPP2MNC +{ + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe request TLV 0xC0 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDNThrottlingTimer +{ + UINT32 mFailureTimerInSeconds; +}; + +// Structure to describe request TLV 0xC1 for WDSCreateProfile() +struct sWDSCreateProfileRequest_PDNDisallowTimer +{ + UINT32 mDisallowTimerInSeconds; +}; + +// Structure to describe response TLV 0x01 for WDSCreateProfile() +struct sWDSCreateProfileResponse_ProfileIdentifier +{ + eQMIProfileTypes mProfileType; + UINT8 mProfileIndex; +}; + +// Structure to describe response TLV 0xE0 for WDSCreateProfile() +struct sWDSCreateProfileResponse_ExtendedErrorCode +{ + eQMIWDSExtendedErrorCode mExtendedErrorCode; +}; + +// Structure to describe request TLV 0x01 for WDSModifyProfile() +struct sWDSModifyProfileRequest_ProfileIdentifier +{ + eQMIProfileTypes mProfileType; + UINT8 mProfileIndex; +}; + +// Structure to describe request TLV 0x10 for WDSModifyProfile() +struct sWDSModifyProfileRequest_ProfileName +{ + // String is variable length, but must be size of the container + // char mProfileName[1]; +}; + +// Structure to describe request TLV 0x11 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDPType +{ + eQMIPDPTypes mPDPType; +}; + +// Structure to describe request TLV 0x12 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDPHeaderCompressionType +{ + eQMIWDSPDPHeaderCompressionType mPDPHeaderCompressionType; +}; + +// Structure to describe request TLV 0x13 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDPDataCompressionType +{ + eQMIWDSPDPDataCompressionType mPDPDataCompressionType; +}; + +// Structure to describe request TLV 0x14 for WDSModifyProfile() +struct sWDSModifyProfileRequest_APNName +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe request TLV 0x15 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PrimaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x16 for WDSModifyProfile() +struct sWDSModifyProfileRequest_SecondaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x17 for WDSModifyProfile() +struct sWDSModifyProfileRequest_UMTSRequestedQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; +}; + +// Structure to describe request TLV 0x18 for WDSModifyProfile() +struct sWDSModifyProfileRequest_UMTSMinimumQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; +}; + +// Structure to describe request TLV 0x19 for WDSModifyProfile() +struct sWDSModifyProfileRequest_GPRSRequestedQoS +{ + UINT32 mPrecedenceClass; + UINT32 mDelayClass; + UINT32 mReliabilityClass; + UINT32 mPeakThroughputClass; + UINT32 mMeanThroughputClass; +}; + +// Structure to describe request TLV 0x1A for WDSModifyProfile() +struct sWDSModifyProfileRequest_GPRSMinimumQoS +{ + UINT32 mPrecedenceClass; + UINT32 mDelayClass; + UINT32 mReliabilityClass; + UINT32 mPeakThroughputClass; + UINT32 mMeanThroughputClass; +}; + +// Structure to describe request TLV 0x1B for WDSModifyProfile() +struct sWDSModifyProfileRequest_Username +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe request TLV 0x1C for WDSModifyProfile() +struct sWDSModifyProfileRequest_Password +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe request TLV 0x1D for WDSModifyProfile() +struct sWDSModifyProfileRequest_Authentication +{ + bool mEnablePAP:1; + bool mEnableCHAP:1; + + // Padding out 6 bits + UINT8 mReserved1:6; +}; + +// Structure to describe request TLV 0x1E for WDSModifyProfile() +struct sWDSModifyProfileRequest_IPAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x1F for WDSModifyProfile() +struct sWDSModifyProfileRequest_PCSCF +{ + INT8 mPCSCFAddressUsingPCO; +}; + +// Structure to describe request TLV 0x20 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDPAccessControlFlag +{ + eQMIWDSPDPAccessControlFlag mPDPAccessControlFlag; +}; + +// Structure to describe request TLV 0x21 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PCSCFAddressUsingDHCP +{ + INT8 mPCSCFAddressUsingDHCP; +}; + +// Structure to describe request TLV 0x22 for WDSModifyProfile() +struct sWDSModifyProfileRequest_IMCNFlag +{ + INT8 mIMCN; +}; + +// Structure to describe request TLV 0x23 for WDSModifyProfile() +struct sWDSModifyProfileRequest_TrafficFlowTemplateID1Parameters +{ + UINT8 mFilterID; + UINT8 mEvaluationID; + eQMIWDSIPVersion mIPVersion; + + // The following union is based on the value of mIPVersion + union uValOfIPVersion + { + // If the value of mIPVersion == 4 + struct sIPVersionIs4 + { + UINT8 mIPV4Address[4]; + }; + + sIPVersionIs4 mIPVersionIs4; + + // If the value of mIPVersion == 6 + struct sIPVersionIs6 + { + UINT16 mIPv6Address[8]; + }; + + sIPVersionIs6 mIPVersionIs6; + + // Padding out 128 bits + UINT8 mReserved1[16]; + }; + + uValOfIPVersion mValOfIPVersion; + + UINT8 mSourceIPMask; + UINT8 mNextHeader; + UINT16 mDestinationPortRangeStart; + UINT16 mDestinationPortRangeEnd; + UINT16 mSourcePortRangeStart; + UINT16 mSourcePortRangeEnd; + UINT32 mIPSECSecurityParameterIndex; + UINT16 mTOSMask; + UINT32 mFlowLabel; +}; + +// Structure to describe request TLV 0x24 for WDSModifyProfile() +struct sWDSModifyProfileRequest_TrafficFlowTemplateID2Parameters +{ + UINT8 mFilterID; + UINT8 mEvaluationID; + eQMIWDSIPVersion mIPVersion; + + // The following union is based on the value of mIPVersion + union uValOfIPVersion + { + // If the value of mIPVersion == 4 + struct sIPVersionIs4 + { + UINT8 mIPV4Address[4]; + }; + + sIPVersionIs4 mIPVersionIs4; + + // If the value of mIPVersion == 6 + struct sIPVersionIs6 + { + UINT16 mIPv6Address[8]; + }; + + sIPVersionIs6 mIPVersionIs6; + + // Padding out 128 bits + UINT8 mReserved1[16]; + }; + + uValOfIPVersion mValOfIPVersion; + + UINT8 mSourceIPMask; + UINT8 mNextHeader; + UINT16 mDestinationPortRangeStart; + UINT16 mDestinationPortRangeEnd; + UINT16 mSourcePortRangeStart; + UINT16 mSourcePortRangeEnd; + UINT32 mIPSECSecurityParameterIndex; + UINT16 mTOSMask; + UINT32 mFlowLabel; +}; + +// Structure to describe request TLV 0x25 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDPContextNumber +{ + UINT8 mPDPContextNumber; +}; + +// Structure to describe request TLV 0x26 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDPContextSecondaryFlag +{ + INT8 mPDPContextSecondaryFlag; +}; + +// Structure to describe request TLV 0x27 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDPContextPrimaryID +{ + UINT8 mPDPPrimaryID; +}; + +// Structure to describe request TLV 0x28 for WDSModifyProfile() +struct sWDSModifyProfileRequest_IPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x29 for WDSModifyProfile() +struct sWDSModifyProfileRequest_RequestedQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; + INT8 mSignalingIndication; +}; + +// Structure to describe request TLV 0x2A for WDSModifyProfile() +struct sWDSModifyProfileRequest_MinimumQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; + INT8 mSignalingIndication; +}; + +// Structure to describe request TLV 0x2B for WDSModifyProfile() +struct sWDSModifyProfileRequest_PrimaryIPv6 +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x2C for WDSModifyProfile() +struct sWDSModifyProfileRequest_SecondaryIPv6 +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x2D for WDSModifyProfile() +struct sWDSModifyProfileRequest_AddressPreference +{ + eQMIWDSAddressAllocationPreference mAddressAllocationPreference; +}; + +// Structure to describe request TLV 0x2E for WDSModifyProfile() +struct sWDSModifyProfileRequest_LTEQoSParameters +{ + eQMIWDSQoSClassIdentifier mQoSClassIdentifier; + UINT32 mGuaranteedDownlinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mMaxUplinkBitrate; +}; + +// Structure to describe request TLV 0x2F for WDSModifyProfile() +struct sWDSModifyProfileRequest_APNDisabled +{ + INT8 mAPNDisabled; +}; + +// Structure to describe request TLV 0x30 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDNInactivityTimer +{ + UINT32 mPDNInactivityTimerSeconds; +}; + +// Structure to describe request TLV 0x31 for WDSModifyProfile() +struct sWDSModifyProfileRequest_APNClass +{ + UINT8 mAPNClass; +}; + +// Structure to describe request TLV 0x35 for WDSModifyProfile() +struct sWDSModifyProfileRequest_APNBearer +{ + bool mGSM:1; + bool mWCDMA:1; + bool mLTE:1; + + // Padding out 60 bits + UINT8 mReserved1:5; + UINT8 mReserved2[6]; + UINT8 mReserved3:7; + + bool mAny:1; +}; + +// Structure to describe request TLV 0x36 for WDSModifyProfile() +struct sWDSModifyProfileRequest_SupportEmergencyCalls +{ + INT8 mSupportEmergencyCalls; +}; + +// Structure to describe request TLV 0x37 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PCOContainerID +{ + UINT16 mPCOContainerID; +}; + +// Structure to describe request TLV 0x38 for WDSModifyProfile() +struct sWDSModifyProfileRequest_MCC +{ + UINT16 mMobileCountryCode; +}; + +// Structure to describe request TLV 0x39 for WDSModifyProfile() +struct sWDSModifyProfileRequest_MNC +{ + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe request TLV 0x90 for WDSModifyProfile() +struct sWDSModifyProfileRequest_NegotiateDNSServerPrefrence +{ + INT8 mNegotiateDNSServerPreference; +}; + +// Structure to describe request TLV 0x91 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PPPSessionCloseTimerDO +{ + UINT32 mPPPSessionCloseTimerDOSeconds; +}; + +// Structure to describe request TLV 0x92 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PPPSessionCloseTimer1X +{ + UINT32 mPPPSessionCloseTimer1XSeconds; +}; + +// Structure to describe request TLV 0x93 for WDSModifyProfile() +struct sWDSModifyProfileRequest_AllowLinger +{ + INT8 mAllowLinger; +}; + +// Structure to describe request TLV 0x94 for WDSModifyProfile() +struct sWDSModifyProfileRequest_LCPACKTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe request TLV 0x95 for WDSModifyProfile() +struct sWDSModifyProfileRequest_IPCPACKTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe request TLV 0x96 for WDSModifyProfile() +struct sWDSModifyProfileRequest_AuthenticationTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe request TLV 0x97 for WDSModifyProfile() +struct sWDSModifyProfileRequest_LCPConfigRetryCount +{ + UINT8 mRetryCount; +}; + +// Structure to describe request TLV 0x98 for WDSModifyProfile() +struct sWDSModifyProfileRequest_IPCPConfigRetryCount +{ + UINT8 mRetryCount; +}; + +// Structure to describe request TLV 0x99 for WDSModifyProfile() +struct sWDSModifyProfileRequest_AuthenticationRetry +{ + UINT8 mRetryCount; +}; + +// Structure to describe request TLV 0x9A for WDSModifyProfile() +struct sWDSModifyProfileRequest_AuthenticationProtocol +{ + eQMIWDSAuthenticationProtocol mAuthenticationProtocol; +}; + +// Structure to describe request TLV 0x9B for WDSModifyProfile() +struct sWDSModifyProfileRequest_UserID +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe request TLV 0x9C for WDSModifyProfile() +struct sWDSModifyProfileRequest_AuthenticationPassword +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe request TLV 0x9D for WDSModifyProfile() +struct sWDSModifyProfileRequest_DataRate +{ + eQMIWDSDataRate mDataRate; +}; + +// Structure to describe request TLV 0x9E for WDSModifyProfile() +struct sWDSModifyProfileRequest_ApplicationType +{ + eQMIWDSApplicationType mApplicationType; +}; + +// Structure to describe request TLV 0x9F for WDSModifyProfile() +struct sWDSModifyProfileRequest_DataMode +{ + eQMIWDSDataMode mDataMode; +}; + +// Structure to describe request TLV 0xA0 for WDSModifyProfile() +struct sWDSModifyProfileRequest_ApplicationPriority +{ + UINT8 mApplicationPriority; +}; + +// Structure to describe request TLV 0xA1 for WDSModifyProfile() +struct sWDSModifyProfileRequest_APNString +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe request TLV 0xA2 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDNType +{ + eQMIWDSPDNType mPDNType; +}; + +// Structure to describe request TLV 0xA3 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PCSCFAddressNeeded +{ + INT8 mPCSCFAddressNeeded; +}; + +// Structure to describe request TLV 0xA4 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PrimaryIPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0xA5 for WDSModifyProfile() +struct sWDSModifyProfileRequest_SecondaryIPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0xA6 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PrimaryIPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0xA7 for WDSModifyProfile() +struct sWDSModifyProfileRequest_SecondaryIPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0xA8 for WDSModifyProfile() +struct sWDSModifyProfileRequest_RATType +{ + eQMIWDS3GPP2RATTypes mRATType; +}; + +// Structure to describe request TLV 0xA9 for WDSModifyProfile() +struct sWDSModifyProfileRequest_3GPP2APNEnabled +{ + INT8 mAPNEnabled; +}; + +// Structure to describe request TLV 0xAA for WDSModifyProfile() +struct sWDSModifyProfileRequest_3GPP2PDNInactivityTimer +{ + UINT32 mPDNInactivityTimerMinutes; +}; + +// Structure to describe request TLV 0xAB for WDSModifyProfile() +struct sWDSModifyProfileRequest_3GPP2APNClass +{ + UINT8 mAPNClass; +}; + +// Structure to describe request TLV 0xAD for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDNAuthenticationProtocol +{ + eQMIWDSAuthenticationProtocol mAuthenticationProtocol; +}; + +// Structure to describe request TLV 0xAE for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDNUserID +{ + // String is variable length, but must be size of the container + // char mUserID[1]; +}; + +// Structure to describe request TLV 0xAF for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDNPassword +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe request TLV 0xB0 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDNLabel +{ + // String is variable length, but must be size of the container + // char mLabel[1]; +}; + +// Structure to describe request TLV 0xBD for WDSModifyProfile() +struct sWDSModifyProfileRequest_3GPP2PCOContainerID +{ + UINT16 mPCOContainerID; +}; + +// Structure to describe request TLV 0xBE for WDSModifyProfile() +struct sWDSModifyProfileRequest_3GPP2MCC +{ + UINT16 mMobileCountryCode; +}; + +// Structure to describe request TLV 0xBF for WDSModifyProfile() +struct sWDSModifyProfileRequest_3GPP2MNC +{ + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe request TLV 0xC0 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDNThrottlingTimer +{ + UINT32 mFailureTimerInSeconds; +}; + +// Structure to describe request TLV 0xC1 for WDSModifyProfile() +struct sWDSModifyProfileRequest_PDNDisallowTimer +{ + UINT32 mDisallowTimerInSeconds; +}; + +// Structure to describe response TLV 0xE0 for WDSModifyProfile() +struct sWDSModifyProfileResponse_ExtendedErrorCode +{ + eQMIWDSExtendedErrorCode mExtendedErrorCode; +}; + +// Structure to describe request TLV 0x01 for WDSDeleteProfile() +struct sWDSDeleteProfileRequest_ProfileIdentifier +{ + eQMIProfileTypes mProfileType; + UINT8 mProfileIndex; +}; + +// Structure to describe response TLV 0xE0 for WDSDeleteProfile() +struct sWDSDeleteProfileResponse_ExtendedErrorCode +{ + eQMIWDSExtendedErrorCode mExtendedErrorCode; +}; + +// Structure to describe request TLV 0x10 for WDSGetProfileList() +struct sWDSGetProfileListRequest_ProfileName +{ + // String is variable length, but must be size of the container + // char mProfileName[1]; +}; + +// Structure to describe request TLV 0x11 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PDPType +{ + eQMIPDPTypes mPDPType; +}; + +// Structure to describe request TLV 0x12 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PDPHeaderCompressionType +{ + eQMIWDSPDPHeaderCompressionType mPDPHeaderCompressionType; +}; + +// Structure to describe request TLV 0x13 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PDPDataCompressionType +{ + eQMIWDSPDPDataCompressionType mPDPDataCompressionType; +}; + +// Structure to describe request TLV 0x14 for WDSGetProfileList() +struct sWDSGetProfileListRequest_APNName +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe request TLV 0x15 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PrimaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x16 for WDSGetProfileList() +struct sWDSGetProfileListRequest_SecondaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x17 for WDSGetProfileList() +struct sWDSGetProfileListRequest_UMTSRequestedQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; +}; + +// Structure to describe request TLV 0x18 for WDSGetProfileList() +struct sWDSGetProfileListRequest_UMTSMinimumQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; +}; + +// Structure to describe request TLV 0x19 for WDSGetProfileList() +struct sWDSGetProfileListRequest_GPRSRequestedQoS +{ + UINT32 mPrecedenceClass; + UINT32 mDelayClass; + UINT32 mReliabilityClass; + UINT32 mPeakThroughputClass; + UINT32 mMeanThroughputClass; +}; + +// Structure to describe request TLV 0x1A for WDSGetProfileList() +struct sWDSGetProfileListRequest_GPRSMinimumQoS +{ + UINT32 mPrecedenceClass; + UINT32 mDelayClass; + UINT32 mReliabilityClass; + UINT32 mPeakThroughputClass; + UINT32 mMeanThroughputClass; +}; + +// Structure to describe request TLV 0x1B for WDSGetProfileList() +struct sWDSGetProfileListRequest_Username +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe request TLV 0x1C for WDSGetProfileList() +struct sWDSGetProfileListRequest_Password +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe request TLV 0x1D for WDSGetProfileList() +struct sWDSGetProfileListRequest_Authentication +{ + bool mEnablePAP:1; + bool mEnableCHAP:1; + + // Padding out 6 bits + UINT8 mReserved1:6; +}; + +// Structure to describe request TLV 0x1E for WDSGetProfileList() +struct sWDSGetProfileListRequest_IPAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x1F for WDSGetProfileList() +struct sWDSGetProfileListRequest_PCSCF +{ + INT8 mPCSCFAddressUsingPCO; +}; + +// Structure to describe request TLV 0x20 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PDPAccessControlFlag +{ + eQMIWDSPDPAccessControlFlag mPDPAccessControlFlag; +}; + +// Structure to describe request TLV 0x21 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PCSCFAddressUsingDHCP +{ + INT8 mPCSCFAddressUsingDHCP; +}; + +// Structure to describe request TLV 0x22 for WDSGetProfileList() +struct sWDSGetProfileListRequest_IMCNFlag +{ + INT8 mIMCN; +}; + +// Structure to describe request TLV 0x23 for WDSGetProfileList() +struct sWDSGetProfileListRequest_TrafficFlowTemplateID1Parameters +{ + UINT8 mFilterID; + UINT8 mEvaluationID; + eQMIWDSIPVersion mIPVersion; + + // The following union is based on the value of mIPVersion + union uValOfIPVersion + { + // If the value of mIPVersion == 4 + struct sIPVersionIs4 + { + UINT8 mIPV4Address[4]; + }; + + sIPVersionIs4 mIPVersionIs4; + + // If the value of mIPVersion == 6 + struct sIPVersionIs6 + { + UINT16 mIPv6Address[8]; + }; + + sIPVersionIs6 mIPVersionIs6; + + // Padding out 128 bits + UINT8 mReserved1[16]; + }; + + uValOfIPVersion mValOfIPVersion; + + UINT8 mSourceIPMask; + UINT8 mNextHeader; + UINT16 mDestinationPortRangeStart; + UINT16 mDestinationPortRangeEnd; + UINT16 mSourcePortRangeStart; + UINT16 mSourcePortRangeEnd; + UINT32 mIPSECSecurityParameterIndex; + UINT16 mTOSMask; + UINT32 mFlowLabel; +}; + +// Structure to describe request TLV 0x24 for WDSGetProfileList() +struct sWDSGetProfileListRequest_TrafficFlowTemplateID2Parameters +{ + UINT8 mFilterID; + UINT8 mEvaluationID; + eQMIWDSIPVersion mIPVersion; + + // The following union is based on the value of mIPVersion + union uValOfIPVersion + { + // If the value of mIPVersion == 4 + struct sIPVersionIs4 + { + UINT8 mIPV4Address[4]; + }; + + sIPVersionIs4 mIPVersionIs4; + + // If the value of mIPVersion == 6 + struct sIPVersionIs6 + { + UINT16 mIPv6Address[8]; + }; + + sIPVersionIs6 mIPVersionIs6; + + // Padding out 128 bits + UINT8 mReserved1[16]; + }; + + uValOfIPVersion mValOfIPVersion; + + UINT8 mSourceIPMask; + UINT8 mNextHeader; + UINT16 mDestinationPortRangeStart; + UINT16 mDestinationPortRangeEnd; + UINT16 mSourcePortRangeStart; + UINT16 mSourcePortRangeEnd; + UINT32 mIPSECSecurityParameterIndex; + UINT16 mTOSMask; + UINT32 mFlowLabel; +}; + +// Structure to describe request TLV 0x25 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PDPContextNumber +{ + UINT8 mPDPContextNumber; +}; + +// Structure to describe request TLV 0x26 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PDPContextSecondaryFlag +{ + INT8 mPDPContextSecondaryFlag; +}; + +// Structure to describe request TLV 0x27 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PDPContextPrimaryID +{ + UINT8 mPDPPrimaryID; +}; + +// Structure to describe request TLV 0x28 for WDSGetProfileList() +struct sWDSGetProfileListRequest_IPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x29 for WDSGetProfileList() +struct sWDSGetProfileListRequest_RequestedQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; + INT8 mSignalingIndication; +}; + +// Structure to describe request TLV 0x2A for WDSGetProfileList() +struct sWDSGetProfileListRequest_MinimumQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; + INT8 mSignalingIndication; +}; + +// Structure to describe request TLV 0x2B for WDSGetProfileList() +struct sWDSGetProfileListRequest_PrimaryIPv6 +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x2C for WDSGetProfileList() +struct sWDSGetProfileListRequest_SecondaryIPv6 +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x2D for WDSGetProfileList() +struct sWDSGetProfileListRequest_AddressPreference +{ + eQMIWDSAddressAllocationPreference mAddressAllocationPreference; +}; + +// Structure to describe request TLV 0x2E for WDSGetProfileList() +struct sWDSGetProfileListRequest_LTEQoSParameters +{ + eQMIWDSQoSClassIdentifier mQoSClassIdentifier; + UINT32 mGuaranteedDownlinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mMaxUplinkBitrate; +}; + +// Structure to describe request TLV 0x90 for WDSGetProfileList() +struct sWDSGetProfileListRequest_NegotiateDNSServerPreferences +{ + INT8 mNegotiateDNSServerPreference; +}; + +// Structure to describe request TLV 0x91 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PPPSessionCloseTimerDO +{ + UINT32 mPPPSessionCloseTimerDOSeconds; +}; + +// Structure to describe request TLV 0x92 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PPPSessionCloseTimer1X +{ + UINT32 mPPPSessionCloseTimer1XSeconds; +}; + +// Structure to describe request TLV 0x93 for WDSGetProfileList() +struct sWDSGetProfileListRequest_AllowLinger +{ + INT8 mAllowLinger; +}; + +// Structure to describe request TLV 0x94 for WDSGetProfileList() +struct sWDSGetProfileListRequest_LCPACKTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe request TLV 0x95 for WDSGetProfileList() +struct sWDSGetProfileListRequest_IPCPACKTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe request TLV 0x96 for WDSGetProfileList() +struct sWDSGetProfileListRequest_AuthenticationTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe request TLV 0x97 for WDSGetProfileList() +struct sWDSGetProfileListRequest_LCPConfigRetryCount +{ + UINT8 mRetryCount; +}; + +// Structure to describe request TLV 0x98 for WDSGetProfileList() +struct sWDSGetProfileListRequest_IPCPConfigRetryCount +{ + UINT8 mRetryCount; +}; + +// Structure to describe request TLV 0x99 for WDSGetProfileList() +struct sWDSGetProfileListRequest_AuthenticationRetry +{ + UINT8 mRetryCount; +}; + +// Structure to describe request TLV 0x9A for WDSGetProfileList() +struct sWDSGetProfileListRequest_AuthenticationProtocol +{ + eQMIWDSAuthenticationProtocol mAuthenticationProtocol; +}; + +// Structure to describe request TLV 0x9B for WDSGetProfileList() +struct sWDSGetProfileListRequest_UserID +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe request TLV 0x9C for WDSGetProfileList() +struct sWDSGetProfileListRequest_AuthenticationPassword +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe request TLV 0x9D for WDSGetProfileList() +struct sWDSGetProfileListRequest_DataRate +{ + eQMIWDSDataRate mDataRate; +}; + +// Structure to describe request TLV 0x9E for WDSGetProfileList() +struct sWDSGetProfileListRequest_ApplicationType +{ + eQMIWDSApplicationType mApplicationType; +}; + +// Structure to describe request TLV 0x9F for WDSGetProfileList() +struct sWDSGetProfileListRequest_DataMode +{ + eQMIWDSDataMode mDataMode; +}; + +// Structure to describe request TLV 0xA0 for WDSGetProfileList() +struct sWDSGetProfileListRequest_ApplicationPriority +{ + UINT8 mApplicationPriority; +}; + +// Structure to describe request TLV 0xA1 for WDSGetProfileList() +struct sWDSGetProfileListRequest_APNString +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe request TLV 0xA2 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PDNType +{ + eQMIWDSPDNType mPDNType; +}; + +// Structure to describe request TLV 0xA3 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PCSCFAddressNeeded +{ + INT8 mPCSCFAddressNeeded; +}; + +// Structure to describe request TLV 0xA4 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PrimaryIPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0xA5 for WDSGetProfileList() +struct sWDSGetProfileListRequest_SecondaryIPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0xA6 for WDSGetProfileList() +struct sWDSGetProfileListRequest_PrimaryIPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0xA7 for WDSGetProfileList() +struct sWDSGetProfileListRequest_SecondaryIPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x01 for WDSGetProfileList() +struct sWDSGetProfileListResponse_ProfileList +{ + UINT8 mNumberOfProfiles; + + struct sProfile + { + eQMIProfileTypes mProfileType; + UINT8 mProfileIndex; + UINT8 mProfileNameLength; + + // This array must be the size specified by mProfileNameLength + // char mProfileName[1]; + }; + + // This array must be the size specified by mNumberOfProfiles + // sProfile mProfiles[1]; +}; + +// Structure to describe response TLV 0xE0 for WDSGetProfileList() +struct sWDSGetProfileListResponse_ExtendedErrorCode +{ + eQMIWDSExtendedErrorCode mExtendedErrorCode; +}; + +// Structure to describe request TLV 0x01 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsRequest_ProfileIdentifier +{ + eQMIProfileTypes mProfileType; + UINT8 mProfileIndex; +}; + +// Structure to describe response TLV 0x10 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_ProfileName +{ + // String is variable length, but must be size of the container + // char mProfileName[1]; +}; + +// Structure to describe response TLV 0x11 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDPType +{ + eQMIPDPTypes mPDPType; +}; + +// Structure to describe response TLV 0x12 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDPHeaderCompressionType +{ + eQMIWDSPDPHeaderCompressionType mPDPHeaderCompressionType; +}; + +// Structure to describe response TLV 0x13 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDPDataCompressionType +{ + eQMIWDSPDPDataCompressionType mPDPDataCompressionType; +}; + +// Structure to describe response TLV 0x14 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_APNName +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe response TLV 0x15 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PrimaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x16 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_SecondaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x17 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_UMTSRequestedQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; +}; + +// Structure to describe response TLV 0x18 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_UMTSMinimumQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; +}; + +// Structure to describe response TLV 0x19 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_GPRSRequestedQoS +{ + UINT32 mPrecedenceClass; + UINT32 mDelayClass; + UINT32 mReliabilityClass; + UINT32 mPeakThroughputClass; + UINT32 mMeanThroughputClass; +}; + +// Structure to describe response TLV 0x1A for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_GPRSMinimumQoS +{ + UINT32 mPrecedenceClass; + UINT32 mDelayClass; + UINT32 mReliabilityClass; + UINT32 mPeakThroughputClass; + UINT32 mMeanThroughputClass; +}; + +// Structure to describe response TLV 0x1B for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_Username +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe response TLV 0x1D for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_Authentication +{ + bool mEnablePAP:1; + bool mEnableCHAP:1; + + // Padding out 6 bits + UINT8 mReserved1:6; +}; + +// Structure to describe response TLV 0x1E for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_IPAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x1F for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PCSCF +{ + INT8 mPCSCFAddressUsingPCO; +}; + +// Structure to describe response TLV 0x20 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDPAccessControlFlag +{ + eQMIWDSPDPAccessControlFlag mPDPAccessControlFlag; +}; + +// Structure to describe response TLV 0x21 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PCSCFAddressUsingDHCP +{ + INT8 mPCSCFAddressUsingDHCP; +}; + +// Structure to describe response TLV 0x22 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_IMCMFlag +{ + INT8 mIMCN; +}; + +// Structure to describe response TLV 0x23 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_TrafficFlowTemplateID1Parameters +{ + UINT8 mFilterID; + UINT8 mEvaluationID; + eQMIWDSIPVersion mIPVersion; + + // The following union is based on the value of mIPVersion + union uValOfIPVersion + { + // If the value of mIPVersion == 4 + struct sIPVersionIs4 + { + UINT8 mIPV4Address[4]; + }; + + sIPVersionIs4 mIPVersionIs4; + + // If the value of mIPVersion == 6 + struct sIPVersionIs6 + { + UINT16 mIPv6Address[8]; + }; + + sIPVersionIs6 mIPVersionIs6; + + // Padding out 128 bits + UINT8 mReserved1[16]; + }; + + uValOfIPVersion mValOfIPVersion; + + UINT8 mSourceIPMask; + UINT8 mNextHeader; + UINT16 mDestinationPortRangeStart; + UINT16 mDestinationPortRangeEnd; + UINT16 mSourcePortRangeStart; + UINT16 mSourcePortRangeEnd; + UINT32 mIPSECSecurityParameterIndex; + UINT16 mTOSMask; + UINT32 mFlowLabel; +}; + +// Structure to describe response TLV 0x24 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_TrafficFlowTemplateID2Parameters +{ + UINT8 mFilterID; + UINT8 mEvaluationID; + eQMIWDSIPVersion mIPVersion; + + // The following union is based on the value of mIPVersion + union uValOfIPVersion + { + // If the value of mIPVersion == 4 + struct sIPVersionIs4 + { + UINT8 mIPV4Address[4]; + }; + + sIPVersionIs4 mIPVersionIs4; + + // If the value of mIPVersion == 6 + struct sIPVersionIs6 + { + UINT16 mIPv6Address[8]; + }; + + sIPVersionIs6 mIPVersionIs6; + + // Padding out 128 bits + UINT8 mReserved1[16]; + }; + + uValOfIPVersion mValOfIPVersion; + + UINT8 mSourceIPMask; + UINT8 mNextHeader; + UINT16 mDestinationPortRangeStart; + UINT16 mDestinationPortRangeEnd; + UINT16 mSourcePortRangeStart; + UINT16 mSourcePortRangeEnd; + UINT32 mIPSECSecurityParameterIndex; + UINT16 mTOSMask; + UINT32 mFlowLabel; +}; + +// Structure to describe response TLV 0x25 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDPContextNumber +{ + UINT8 mPDPContextNumber; +}; + +// Structure to describe response TLV 0x26 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDPContextSecondaryFlag +{ + INT8 mPDPContextSecondaryFlag; +}; + +// Structure to describe response TLV 0x27 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDPContextPrimaryID +{ + UINT8 mPDPPrimaryID; +}; + +// Structure to describe response TLV 0x28 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_IPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x29 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_RequestedQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; + INT8 mSignalingIndication; +}; + +// Structure to describe response TLV 0x2A for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_MinimumQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; + INT8 mSignalingIndication; +}; + +// Structure to describe response TLV 0x2B for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PrimaryIPv6 +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x2C for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_SecondaryIPv6 +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x2D for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_AddressPreference +{ + eQMIWDSAddressAllocationPreference mAddressAllocationPreference; +}; + +// Structure to describe response TLV 0x2E for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_LTEQoSParameters +{ + eQMIWDSQoSClassIdentifier mQoSClassIdentifier; + UINT32 mGuaranteedDownlinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mMaxUplinkBitrate; +}; + +// Structure to describe response TLV 0x2F for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_APNDisabled +{ + INT8 mAPNDisabled; +}; + +// Structure to describe response TLV 0x30 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDNInactivityTimer +{ + UINT32 mPDNInactivityTimerSeconds; +}; + +// Structure to describe response TLV 0x31 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_APNClass +{ + UINT8 mAPNClass; +}; + +// Structure to describe response TLV 0x35 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_APNBearer +{ + bool mGSM:1; + bool mWCDMA:1; + bool mLTE:1; + + // Padding out 60 bits + UINT8 mReserved1:5; + UINT8 mReserved2[6]; + UINT8 mReserved3:7; + + bool mAny:1; +}; + +// Structure to describe response TLV 0x36 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_SupportEmergencyCalls +{ + INT8 mSupportEmergencyCalls; +}; + +// Structure to describe response TLV 0x37 for WDSGetProfile() +struct sWDSGetProfileResponse_PCOContainerID +{ + UINT16 mPCOContainerID; +}; + +// Structure to describe response TLV 0x38 for WDSGetProfile() +struct sWDSGetProfileResponse_MCC +{ + UINT16 mMobileCountryCode; +}; + +// Structure to describe response TLV 0x39 for WDSGetProfile() +struct sWDSGetProfileResponse_MNC +{ + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe response TLV 0x90 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_NegotiateDNSServerPreference +{ + INT8 mNegotiateDNSServerPreference; +}; + +// Structure to describe response TLV 0x91 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PPPSessionCloseTimerDO +{ + UINT32 mPPPSessionCloseTimerDOSeconds; +}; + +// Structure to describe response TLV 0x92 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PPPSessionCloseTimer1X +{ + UINT32 mPPPSessionCloseTimer1XSeconds; +}; + +// Structure to describe response TLV 0x93 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_AllowLinger +{ + INT8 mAllowLinger; +}; + +// Structure to describe response TLV 0x94 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_LCPACKTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe response TLV 0x95 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_IPCPACKTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe response TLV 0x96 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_AuthenticationTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe response TLV 0x97 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_LCPConfigRetryCount +{ + UINT8 mRetryCount; +}; + +// Structure to describe response TLV 0x98 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_IPCPConfigRetryCount +{ + UINT8 mRetryCount; +}; + +// Structure to describe response TLV 0x99 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_AuthenticationRetry +{ + UINT8 mRetryCount; +}; + +// Structure to describe response TLV 0x9A for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_AuthenticationProtocol +{ + eQMIWDSAuthenticationProtocol mAuthenticationProtocol; +}; + +// Structure to describe response TLV 0x9B for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_UserID +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe response TLV 0x9C for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_AuthenticationPassword +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe response TLV 0x9D for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_DataRate +{ + eQMIWDSDataRate mDataRate; +}; + +// Structure to describe response TLV 0x9E for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_ApplicationType +{ + eQMIWDSApplicationType mApplicationType; +}; + +// Structure to describe response TLV 0x9F for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_DataMode +{ + eQMIWDSDataMode mDataMode; +}; + +// Structure to describe response TLV 0xA0 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_ApplicationPriority +{ + UINT8 mApplicationPriority; +}; + +// Structure to describe response TLV 0xA1 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_APNString +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe response TLV 0xA2 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDNType +{ + eQMIWDSPDNType mPDNType; +}; + +// Structure to describe response TLV 0xA3 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PCSCFAddressNeeded +{ + INT8 mPCSCFAddressNeeded; +}; + +// Structure to describe response TLV 0xA4 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PrimaryIPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0xA5 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_SecondaryIPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0xA6 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PrimaryIPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0xA7 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_SecondaryIPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0xA8 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_RATType +{ + eQMIWDS3GPP2RATTypes mRATType; +}; + +// Structure to describe response TLV 0xA9 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_3GPP2APNEnabled +{ + INT8 mAPNEnabled; +}; + +// Structure to describe response TLV 0xAA for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_3GPP2PDNInactivityTimer +{ + UINT32 mPDNInactivityTimerMinutes; +}; + +// Structure to describe response TLV 0xAB for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_3GPP2APNClass +{ + UINT8 mAPNClass; +}; + +// Structure to describe response TLV 0xAD for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDNAuthenticationProtocol +{ + eQMIWDSAuthenticationProtocol mAuthenticationProtocol; +}; + +// Structure to describe response TLV 0xAE for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDNUserID +{ + // String is variable length, but must be size of the container + // char mUserID[1]; +}; + +// Structure to describe response TLV 0xAF for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDNPassword +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe response TLV 0xB0 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_PDNLabel +{ + // String is variable length, but must be size of the container + // char mLabel[1]; +}; + +// Structure to describe response TLV 0xBD for WDSGetProfile() +struct sWDSGetProfileResponse_3GPP2PCOContainerID +{ + UINT16 mPCOContainerID; +}; + +// Structure to describe response TLV 0xBE for WDSGetProfile() +struct sWDSGetProfileResponse_3GPP2MCC +{ + UINT16 mMobileCountryCode; +}; + +// Structure to describe response TLV 0xBF for WDSGetProfile() +struct sWDSGetProfileResponse_3GPP2MNC +{ + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe response TLV 0xC0 for WDSGetProfile() +struct sWDSGetProfileResponse_PDNThrottlingTimer +{ + UINT32 mFailureTimerInSeconds; +}; + +// Structure to describe response TLV 0xC1 for WDSGetProfile() +struct sWDSGetProfileResponse_PDNDisallowTimer +{ + UINT32 mDisallowTimerInSeconds; +}; + +// Structure to describe response TLV 0xE0 for WDSGetProfileSettings() +struct sWDSGetProfileSettingsResponse_ExtendedErrorCode +{ + eQMIWDSExtendedErrorCode mExtendedErrorCode; +}; + +// Structure to describe request TLV 0x01 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsRequest_ProfileType +{ + eQMIProfileTypes mProfileType; +}; + +// Structure to describe response TLV 0x10 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_ProfileName +{ + // String is variable length, but must be size of the container + // char mProfileName[1]; +}; + +// Structure to describe response TLV 0x11 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDPType +{ + eQMIPDPTypes mPDPType; +}; + +// Structure to describe response TLV 0x12 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDPHeaderCompressionType +{ + eQMIWDSPDPHeaderCompressionType mPDPHeaderCompressionType; +}; + +// Structure to describe response TLV 0x13 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDPDataCompressionType +{ + eQMIWDSPDPDataCompressionType mPDPDataCompressionType; +}; + +// Structure to describe response TLV 0x14 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_APNName +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe response TLV 0x15 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PrimaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x16 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_SecondaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x17 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_UMTSRequestedQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; +}; + +// Structure to describe response TLV 0x18 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_UMTSMinimumQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; +}; + +// Structure to describe response TLV 0x19 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_GPRSRequestedQoS +{ + UINT32 mPrecedenceClass; + UINT32 mDelayClass; + UINT32 mReliabilityClass; + UINT32 mPeakThroughputClass; + UINT32 mMeanThroughputClass; +}; + +// Structure to describe response TLV 0x1A for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_GPRSMinimumQoS +{ + UINT32 mPrecedenceClass; + UINT32 mDelayClass; + UINT32 mReliabilityClass; + UINT32 mPeakThroughputClass; + UINT32 mMeanThroughputClass; +}; + +// Structure to describe response TLV 0x1B for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_Username +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe response TLV 0x1C for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_Password +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe response TLV 0x1D for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_Authentication +{ + bool mEnablePAP:1; + bool mEnableCHAP:1; + + // Padding out 6 bits + UINT8 mReserved1:6; +}; + +// Structure to describe response TLV 0x1E for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_IPAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x1F for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PCSCF +{ + INT8 mPCSCFAddressUsingPCO; +}; + +// Structure to describe response TLV 0x20 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDPAccessControlFlag +{ + eQMIWDSPDPAccessControlFlag mPDPAccessControlFlag; +}; + +// Structure to describe response TLV 0x21 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PCSCFAddressUsingDHCP +{ + INT8 mPCSCFAddressUsingDHCP; +}; + +// Structure to describe response TLV 0x22 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_IMCNFlag +{ + INT8 mIMCN; +}; + +// Structure to describe response TLV 0x23 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_TrafficFlowTemplateID1Parameters +{ + UINT8 mFilterID; + UINT8 mEvaluationID; + eQMIWDSIPVersion mIPVersion; + + // The following union is based on the value of mIPVersion + union uValOfIPVersion + { + // If the value of mIPVersion == 4 + struct sIPVersionIs4 + { + UINT8 mIPV4Address[4]; + }; + + sIPVersionIs4 mIPVersionIs4; + + // If the value of mIPVersion == 6 + struct sIPVersionIs6 + { + UINT16 mIPv6Address[8]; + }; + + sIPVersionIs6 mIPVersionIs6; + + // Padding out 128 bits + UINT8 mReserved1[16]; + }; + + uValOfIPVersion mValOfIPVersion; + + UINT8 mSourceIPMask; + UINT8 mNextHeader; + UINT16 mDestinationPortRangeStart; + UINT16 mDestinationPortRangeEnd; + UINT16 mSourcePortRangeStart; + UINT16 mSourcePortRangeEnd; + UINT32 mIPSECSecurityParameterIndex; + UINT16 mTOSMask; + UINT32 mFlowLabel; +}; + +// Structure to describe response TLV 0x24 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_TrafficFlowTemplateID2Parameters +{ + UINT8 mFilterID; + UINT8 mEvaluationID; + eQMIWDSIPVersion mIPVersion; + + // The following union is based on the value of mIPVersion + union uValOfIPVersion + { + // If the value of mIPVersion == 4 + struct sIPVersionIs4 + { + UINT8 mIPV4Address[4]; + }; + + sIPVersionIs4 mIPVersionIs4; + + // If the value of mIPVersion == 6 + struct sIPVersionIs6 + { + UINT16 mIPv6Address[8]; + }; + + sIPVersionIs6 mIPVersionIs6; + + // Padding out 128 bits + UINT8 mReserved1[16]; + }; + + uValOfIPVersion mValOfIPVersion; + + UINT8 mSourceIPMask; + UINT8 mNextHeader; + UINT16 mDestinationPortRangeStart; + UINT16 mDestinationPortRangeEnd; + UINT16 mSourcePortRangeStart; + UINT16 mSourcePortRangeEnd; + UINT32 mIPSECSecurityParameterIndex; + UINT16 mTOSMask; + UINT32 mFlowLabel; +}; + +// Structure to describe response TLV 0x25 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDPContextNumber +{ + UINT8 mPDPContextNumber; +}; + +// Structure to describe response TLV 0x26 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDPContextSecondaryFlag +{ + INT8 mPDPContextSecondaryFlag; +}; + +// Structure to describe response TLV 0x27 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDPContextPrimaryID +{ + UINT8 mPDPPrimaryID; +}; + +// Structure to describe response TLV 0x28 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_IPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x29 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_RequestedQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; + INT8 mSignalingIndication; +}; + +// Structure to describe response TLV 0x2A for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_MinimumQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; + INT8 mSignalingIndication; +}; + +// Structure to describe response TLV 0x2B for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PrimaryIPv6 +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x2C for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_SecondaryIPv6 +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x2D for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_AddressPreference +{ + eQMIWDSAddressAllocationPreference mAddressAllocationPreference; +}; + +// Structure to describe response TLV 0x2E for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_LTEQoSParameters +{ + eQMIWDSQoSClassIdentifier mQoSClassIdentifier; + UINT32 mGuaranteedDownlinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mMaxUplinkBitrate; +}; + +// Structure to describe response TLV 0x2F for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_APNDisabled +{ + INT8 mAPNDisabled; +}; + +// Structure to describe response TLV 0x30 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDNInactivityTimer +{ + UINT32 mPDNInactivityTimerSeconds; +}; + +// Structure to describe response TLV 0x31 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_APNClass +{ + UINT8 mAPNClass; +}; + +// Structure to describe response TLV 0x35 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_APNBearer +{ + bool mGSM:1; + bool mWCDMA:1; + bool mLTE:1; + + // Padding out 60 bits + UINT8 mReserved1:5; + UINT8 mReserved2[6]; + UINT8 mReserved3:7; + + bool mAny:1; +}; + +// Structure to describe response TLV 0x36 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_SupportEmergencyCalls +{ + INT8 mSupportEmergencyCalls; +}; + +// Structure to describe response TLV 0x37 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PCOContainerID +{ + UINT16 mPCOContainerID; +}; + +// Structure to describe response TLV 0x38 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_MCC +{ + UINT16 mMobileCountryCode; +}; + +// Structure to describe response TLV 0x39 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_MNC +{ + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe response TLV 0x90 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_NegotiateDNSServerPreferences +{ + INT8 mNegotiateDNSServerPreference; +}; + +// Structure to describe response TLV 0x91 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PPPSessionCloseTimerDO +{ + UINT32 mPPPSessionCloseTimerDOSeconds; +}; + +// Structure to describe response TLV 0x92 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PPPSessionCloseTimer1X +{ + UINT32 mPPPSessionCloseTimer1XSeconds; +}; + +// Structure to describe response TLV 0x93 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_AllowLinger +{ + INT8 mAllowLinger; +}; + +// Structure to describe response TLV 0x94 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_LCPACKTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe response TLV 0x95 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_IPCPACKTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe response TLV 0x96 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_AuthenticationTimeout +{ + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe response TLV 0x97 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_LCPConfigRetryCount +{ + UINT8 mRetryCount; +}; + +// Structure to describe response TLV 0x98 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_IPCPConfigRetryCount +{ + UINT8 mRetryCount; +}; + +// Structure to describe response TLV 0x99 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_AuthenticationRetry +{ + UINT8 mRetryCount; +}; + +// Structure to describe response TLV 0x9A for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_AuthenticationProtocol +{ + eQMIWDSAuthenticationProtocol mAuthenticationProtocol; +}; + +// Structure to describe response TLV 0x9B for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_UserID +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe response TLV 0x9C for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_AuthenticationPassword +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe response TLV 0x9D for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_DataRate +{ + eQMIWDSDataRate mDataRate; +}; + +// Structure to describe response TLV 0x9E for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_ApplicationType +{ + eQMIWDSApplicationType mApplicationType; +}; + +// Structure to describe response TLV 0x9F for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_DataMode +{ + eQMIWDSDataMode mDataMode; +}; + +// Structure to describe response TLV 0xA0 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_ApplicationPriority +{ + UINT8 mApplicationPriority; +}; + +// Structure to describe response TLV 0xA1 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_APNString +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe response TLV 0xA2 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDNType +{ + eQMIWDSPDNType mPDNType; +}; + +// Structure to describe response TLV 0xA3 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PCSCFAddressNeeded +{ + INT8 mPCSCFAddressNeeded; +}; + +// Structure to describe response TLV 0xA4 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PrimaryIPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0xA5 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_SecondaryIPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0xA6 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PrimaryIPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0xA7 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_SecondaryIPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0xA8 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_RATType +{ + eQMIWDS3GPP2RATTypes mRATType; +}; + +// Structure to describe response TLV 0xA9 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_3GPP2APNEnabled +{ + INT8 mAPNEnabled; +}; + +// Structure to describe response TLV 0xAA for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_3GPP2PDNInactivityTimer +{ + UINT32 mPDNInactivityTimerMinutes; +}; + +// Structure to describe response TLV 0xAB for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_3GPP2APNClass +{ + UINT8 mAPNClass; +}; + +// Structure to describe response TLV 0xAD for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDNAuthenticationProtocol +{ + eQMIWDSAuthenticationProtocol mAuthenticationProtocol; +}; + +// Structure to describe response TLV 0xAE for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDNUserID +{ + // String is variable length, but must be size of the container + // char mUserID[1]; +}; + +// Structure to describe response TLV 0xAF for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDNPassword +{ + // String is variable length, but must be size of the container + // char mPassword[1]; +}; + +// Structure to describe response TLV 0xB0 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDNLabel +{ + // String is variable length, but must be size of the container + // char mLabel[1]; +}; + +// Structure to describe response TLV 0xBD for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_3GPP2PCOContainerID +{ + UINT16 mPCOContainerID; +}; + +// Structure to describe response TLV 0xBE for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_3GPP2MCC +{ + UINT16 mMobileCountryCode; +}; + +// Structure to describe response TLV 0xBF for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_3GPP2MNC +{ + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe response TLV 0xC0 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDNThrottlingTimer +{ + UINT32 mFailureTimerInSeconds; +}; + +// Structure to describe response TLV 0xC1 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_PDNDisallowTimer +{ + UINT32 mDisallowTimerInSeconds; +}; + +// Structure to describe response TLV 0xE0 for WDSGetDefaultSettings() +struct sWDSGetDefaultSettingsResponse_ExtendedErrorCode +{ + eQMIWDSExtendedErrorCode mExtendedErrorCode; +}; + +// Structure to describe request TLV 0x10 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsRequest_RequestedSettings +{ + bool mProfileID:1; + bool mProfileName:1; + bool mPDPType:1; + bool mAPNName:1; + bool mDNSAddress:1; + bool mGrantedQoS:1; + bool mUsername:1; + bool mAuthenticationProtocol:1; + bool mIPAddress:1; + bool mGatewayInfo:1; + bool mPCSCFAddress:1; + bool mPCSCFServerAddressList:1; + bool mPCSCFDomainNameList:1; + bool mMTU:1; + bool mDomainNameList:1; + bool mIPFamily:1; + bool mIMCNFlag:1; + bool mExtendedTechnology:1; + bool mOperatorReservedPCO:1; + + // Padding out 13 bits + UINT8 mReserved1:5; + UINT8 mReserved2; +}; + +// Structure to describe response TLV 0x10 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_ProfileName +{ + // String is variable length, but must be size of the container + // char mProfileName[1]; +}; + +// Structure to describe response TLV 0x11 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_PDPType +{ + eQMIPDPTypes mPDPType; +}; + +// Structure to describe response TLV 0x14 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_APNName +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe response TLV 0x15 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_PrimaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x16 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_SecondaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x17 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_UMTSGrantedQoS +{ + eQMITrafficClasses mTrafficClass; + UINT32 mMaxUplinkBitrate; + UINT32 mMaxDownlinkBitrate; + UINT32 mGuaranteedUplinkBitrate; + UINT32 mGuaranteedDownlinkBitrate; + eQMIQoSDeliveryOrders mQoSDeliveryOrder; + UINT32 mMaxSDUSize; + eQMISDUErrorRatios mSDUErrorRatio; + eQMISDUResidualBitErrorRatios mSDUResidualBitErrorRatio; + eQMIErroneousSDUDeliveries mErroneousSDUDelivery; + UINT32 mTransferDelay; + UINT32 mTrafficHandlingPriority; +}; + +// Structure to describe response TLV 0x19 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_GPRSGrantedQoS +{ + UINT32 mPrecedenceClass; + UINT32 mDelayClass; + UINT32 mReliabilityClass; + UINT32 mPeakThroughputClass; + UINT32 mMeanThroughputClass; +}; + +// Structure to describe response TLV 0x1B for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_Username +{ + // String is variable length, but must be size of the container + // char mUsername[1]; +}; + +// Structure to describe response TLV 0x1D for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_Authentication +{ + bool mEnablePAP:1; + bool mEnableCHAP:1; + + // Padding out 6 bits + UINT8 mReserved1:6; +}; + +// Structure to describe response TLV 0x1E for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_IPAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x1F for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_ProfileID +{ + eQMIProfileTypes mProfileType; + UINT8 mProfileIndex; +}; + +// Structure to describe response TLV 0x20 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_GatewayAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x21 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_GatewaySubnetMask +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x22 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_PCSCF +{ + INT8 mPCSCFAddressUsingPCO; +}; + +// Structure to describe response TLV 0x23 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_PCSCFServerAddressList +{ + UINT8 mNumberOfInstances; + + struct sInstance + { + UINT8 mIPV4Address[4]; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x24 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_PCSCFDomainNameList +{ + UINT8 mNumberOfInstances; + + struct sInstance + { + UINT16 mFQDNLength; + + // This array must be the size specified by mFQDNLength + // char mFQDN[1]; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x25 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_IPv6Address +{ + UINT16 mIPv6Address[8]; + UINT8 mIPPrefixLength; +}; + +// Structure to describe response TLV 0x26 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_IPv6GatewayAddress +{ + UINT16 mIPv6Address[8]; + UINT8 mIPPrefixLength; +}; + +// Structure to describe response TLV 0x27 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_PrimaryIPv6DNS +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x28 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_SecondaryIPv6DNS +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x29 for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_MTU +{ + UINT32 mMTU; +}; + +// Structure to describe response TLV 0x2A for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_DomainNameList +{ + UINT8 mNumberOfInstances; + + struct sInstance + { + UINT16 mDomainNameLength; + + // This array must be the size specified by mDomainNameLength + // char mDomainName[1]; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x2B for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_IPFamily +{ + eQMIWDSIPFamilies mIPFamily; +}; + +// Structure to describe response TLV 0x2C for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_IMCNFlag +{ + INT8 mIMCN; +}; + +// Structure to describe response TLV 0x2D for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_ExtendedTechnology +{ + eQMIWDSExtendedTechPrefs mExtendedTechnologyPreference; +}; + +// Structure to describe response TLV 0x2E for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_PCSCFIPv6AddressList +{ + UINT8 mNumberOfAddresses; + + struct sAddress + { + UINT16 mIPv6Address[8]; + }; + + // This array must be the size specified by mNumberOfAddresses + // sAddress mAddresses[1]; +}; + +// Structure to describe response TLV 0x2F for WDSGetCurrentSettings() +struct sWDSGetCurrentSettingsResponse_OperatorReservedProtocolInfo1 +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; + UINT8 mApplicationSpecificInfoLength; + + // This array must be the size specified by mApplicationSpecificInfoLength + // UINT8 mApplicationSpecificInfo[1]; +}; + +struct sWDSGetCurrentSettingsResponse_OperatorReservedProtocolInfo2 +{ + UINT16 mPCOContainerID; +}; + +struct sWDSGetCurrentSettingsResponse_OperatorReservedProtocolInfo +{ + sWDSGetCurrentSettingsResponse_OperatorReservedProtocolInfo1 mWDSGetCurrentSettingsResponse_OperatorReservedProtocolInfo1; + sWDSGetCurrentSettingsResponse_OperatorReservedProtocolInfo2 mWDSGetCurrentSettingsResponse_OperatorReservedProtocolInfo2; +}; + +// Structure to describe request TLV 0x01 for WDSSetMIPMode() +struct sWDSSetMIPModeRequest_MobileIPMode +{ + eQMIMobileIPModes mMIPMode; +}; + +// Structure to describe response TLV 0x01 for WDSGetMIPMode() +struct sWDSGetMIPModeResponse_MobileIPMode +{ + eQMIMobileIPModes mMIPMode; +}; + +// Structure to describe response TLV 0x01 for WDSGetDormancy() +struct sWDSGetDormancyResponse_DormancyStatus +{ + eQMIDormancyStatus mDormancyStatus; +}; + +// Structure to describe response TLV 0x01 for WDSGetAutoconnectSetting() +struct sWDSGetAutoconnectSettingResponse_Autoconnect +{ + eQMIWDSAutoconnectSettings mAutoconnectSetting; +}; + +// Structure to describe response TLV 0x10 for WDSGetAutoconnectSetting() +struct sWDSGetAutoconnectSettingResponse_Roam +{ + eQMIWDSAutoconnectRoamSettings mAutoconnectRoamSetting; +}; + +// Structure to describe response TLV 0x01 for WDSGetDataSessionDuration() +struct sWDSGetDataSessionDurationResponse_Duration +{ + UINT64 mDataSessionDuration; +}; + +// Structure to describe response TLV 0x10 for WDSGetDataSessionDuration() +struct sWDSGetDataSessionDurationResponse_PreviousDuration +{ + UINT64 mPreviousDataSessionDuration; +}; + +// Structure to describe response TLV 0x11 for WDSGetDataSessionDuration() +struct sWDSGetDataSessionDurationResponse_ActiveDuration +{ + UINT64 mDataSessionActiveDuration; +}; + +// Structure to describe response TLV 0x12 for WDSGetDataSessionDuration() +struct sWDSGetDataSessionDurationResponse_PreviousActiveDuration +{ + UINT64 mPreviousDataSessionActiveDuration; +}; + +// Structure to describe response TLV 0x01 for WDSGetModemStatus() +struct sWDSGetModemStatusResponse_Status +{ + eQMIConnectionStatus mConnectionStatus; + UINT64 mDataSessionDuration; +}; + +// Structure to describe response TLV 0x10 for WDSGetModemStatus() +struct sWDSGetModemStatusResponse_CallEndReason +{ + eQMICallEndReasons mCallEnd; +}; + +// Structure to describe indication TLV 0x01 for WDS ModemStatusReport +struct sWDSModemStatusReportIndication_Status +{ + eQMIConnectionStatus mConnectionStatus; +}; + +// Structure to describe indication TLV 0x10 for WDS ModemStatusReport +struct sWDSModemStatusReportIndication_CallEndReason +{ + eQMICallEndReasons mCallEnd; +}; + +// Structure to describe response TLV 0x01 for WDSGetDataBearerTechnology() +struct sWDSGetDataBearerTechnologyResponse_Technology +{ + eQMIDataBearerTechnologies mDataBearerTechnology; +}; + +// Structure to describe response TLV 0x10 for WDSGetDataBearerTechnology() +struct sWDSGetDataBearerTechnologyResponse_LastCallTechnology +{ + eQMIDataBearerTechnologies mDataBearerTechnology; +}; + +// Structure to describe request TLV 0x01 for WDSGetModemInfo() +struct sWDSGetModemInfoRequest_RequestedStatus +{ + bool mConnectionStatus:1; + bool mLastCallEndReason:1; + bool mRXTXByteTotals:1; + bool mDormancyStatus:1; + bool mDataBearerTechnology:1; + bool mChannelRates:1; + bool mDuration:1; + + // Padding out 25 bits + UINT8 mReserved1:1; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x10 for WDSGetModemInfo() +struct sWDSGetModemInfoRequest_ConnectionStatusIndicator +{ + INT8 mReportConnectionStatus; +}; + +// Structure to describe request TLV 0x11 for WDSGetModemInfo() +struct sWDSGetModemInfoRequest_TransferStatisticsIndicator +{ + UINT8 mTransferStatisticsIntervalSeconds; + + // Padding out 6 bits + UINT8 mReserved1:6; + + bool mTXByteTotal:1; + bool mRXByteTotal:1; + + // Padding out 24 bits + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x12 for WDSGetModemInfo() +struct sWDSGetModemInfoRequest_DormancyStatusIndicator +{ + INT8 mReportDormancyStatus; +}; + +// Structure to describe request TLV 0x13 for WDSGetModemInfo() +struct sWDSGetModemInfoRequest_DataBearerTechnologyIndicator +{ + INT8 mReportDataBearerTechnology; +}; + +// Structure to describe request TLV 0x14 for WDSGetModemInfo() +struct sWDSGetModemInfoRequest_ChannelRateIndicator +{ + INT8 mReportChannelRate; +}; + +// Structure to describe response TLV 0x10 for WDSGetModemInfo() +struct sWDSGetModemInfoResponse_Status +{ + eQMIConnectionStatus mConnectionStatus; + UINT64 mDataSessionDuration; +}; + +// Structure to describe response TLV 0x11 for WDSGetModemInfo() +struct sWDSGetModemInfoResponse_CallEndReason +{ + eQMICallEndReasons mCallEnd; +}; + +// Structure to describe response TLV 0x12 for WDSGetModemInfo() +struct sWDSGetModemInfoResponse_TXBytes +{ + UINT64 mTXByteTotal; +}; + +// Structure to describe response TLV 0x13 for WDSGetModemInfo() +struct sWDSGetModemInfoResponse_RXBytes +{ + UINT64 mRXByteTotal; +}; + +// Structure to describe response TLV 0x14 for WDSGetModemInfo() +struct sWDSGetModemInfoResponse_DormancyStatus +{ + eQMIDormancyStatus mDormancyStatus; +}; + +// Structure to describe response TLV 0x15 for WDSGetModemInfo() +struct sWDSGetModemInfoResponse_Technology +{ + eQMIDataBearerTechnologies mDataBearerTechnology; +}; + +// Structure to describe response TLV 0x16 for WDSGetModemInfo() +struct sWDSGetModemInfoResponse_Rates +{ + UINT32 mChannelTXRatebps; + UINT32 mChannelRXRatebps; + UINT32 mMaxChannelTXRatebps; + UINT32 mMaxChannelRXRatebps; +}; + +// Structure to describe response TLV 0x17 for WDSGetModemInfo() +struct sWDSGetModemInfoResponse_PreviousTXBytes +{ + UINT64 mPreviousCallTXByteTotal; +}; + +// Structure to describe response TLV 0x18 for WDSGetModemInfo() +struct sWDSGetModemInfoResponse_PreviousRXBytes +{ + UINT64 mPreviousCallRXByteTotal; +}; + +// Structure to describe response TLV 0x19 for WDSGetModemInfo() +struct sWDSGetModemInfoResponse_ActiveDuration +{ + UINT64 mDataSessionActiveDuration; +}; + +// Structure to describe response TLV 0x20 for WDSGetModemInfo() +struct sWDSGetModemInfoResponse_LastCallTechnology +{ + eQMIDataBearerTechnologies mDataBearerTechnology; +}; + +// Structure to describe indication TLV 0x10 for WDS ModemInfoReport +struct sWDSModemInfoReportIndication_Status +{ + eQMIConnectionStatus mConnectionStatus; +}; + +// Structure to describe indication TLV 0x11 for WDS ModemInfoReport +struct sWDSModemInfoReportIndication_CallEndReason +{ + eQMICallEndReasons mCallEnd; +}; + +// Structure to describe indication TLV 0x12 for WDS ModemInfoReport +struct sWDSModemInfoReportIndication_TXBytes +{ + UINT64 mTXByteTotal; +}; + +// Structure to describe indication TLV 0x13 for WDS ModemInfoReport +struct sWDSModemInfoReportIndication_RXBytes +{ + UINT64 mRXByteTotal; +}; + +// Structure to describe indication TLV 0x14 for WDS ModemInfoReport +struct sWDSModemInfoReportIndication_DormancyStatus +{ + eQMIDormancyStatus mDormancyStatus; +}; + +// Structure to describe indication TLV 0x15 for WDS ModemInfoReport +struct sWDSModemInfoReportIndication_Technology +{ + eQMIDataBearerTechnologies mDataBearerTechnology; +}; + +// Structure to describe indication TLV 0x16 for WDS ModemInfoReport +struct sWDSModemInfoReportIndication_Rates +{ + UINT32 mChannelTXRatebps; + UINT32 mChannelRXRatebps; +}; + +// Structure to describe response TLV 0x01 for WDSGetActiveMIPProfile() +struct sWDSGetActiveMIPProfileResponse_Index +{ + UINT8 mProfileIndex; +}; + +// Structure to describe request TLV 0x01 for WDSSetActiveMIPProfile() +struct sWDSSetActiveMIPProfileRequest_Index +{ + char mSPC[6]; + UINT8 mProfileIndex; +}; + +// Structure to describe request TLV 0x01 for WDSGetMIPProfile() +struct sWDSGetMIPProfileRequest_Index +{ + UINT8 mProfileIndex; +}; + +// Structure to describe response TLV 0x10 for WDSGetMIPProfile() +struct sWDSGetMIPProfileResponse_State +{ + INT8 mEnabled; +}; + +// Structure to describe response TLV 0x11 for WDSGetMIPProfile() +struct sWDSGetMIPProfileResponse_HomeAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x12 for WDSGetMIPProfile() +struct sWDSGetMIPProfileResponse_PrimaryHomeAgentAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x13 for WDSGetMIPProfile() +struct sWDSGetMIPProfileResponse_SecondaryHomeAgentAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x14 for WDSGetMIPProfile() +struct sWDSGetMIPProfileResponse_ReverseTunneling +{ + INT8 mReverseTunneling; +}; + +// Structure to describe response TLV 0x15 for WDSGetMIPProfile() +struct sWDSGetMIPProfileResponse_NAI +{ + // String is variable length, but must be size of the container + // char mNAI[1]; +}; + +// Structure to describe response TLV 0x16 for WDSGetMIPProfile() +struct sWDSGetMIPProfileResponse_HASPI +{ + UINT32 mHASPI; +}; + +// Structure to describe response TLV 0x17 for WDSGetMIPProfile() +struct sWDSGetMIPProfileResponse_AAASPI +{ + UINT32 mAAASPI; +}; + +// Structure to describe response TLV 0x1A for WDSGetMIPProfile() +struct sWDSGetMIPProfileResponse_HAState +{ + eQMIHAAAAKeyStates mKeyState; +}; + +// Structure to describe response TLV 0x1B for WDSGetMIPProfile() +struct sWDSGetMIPProfileResponse_AAAState +{ + eQMIHAAAAKeyStates mKeyState; +}; + +// Structure to describe request TLV 0x01 for WDSSetMIPProfile() +struct sWDSSetMIPProfileRequest_Index +{ + char mSPC[6]; + UINT8 mProfileIndex; +}; + +// Structure to describe request TLV 0x10 for WDSSetMIPProfile() +struct sWDSSetMIPProfileRequest_State +{ + INT8 mEnabled; +}; + +// Structure to describe request TLV 0x11 for WDSSetMIPProfile() +struct sWDSSetMIPProfileRequest_HomeAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x12 for WDSSetMIPProfile() +struct sWDSSetMIPProfileRequest_PrimaryHomeAgentAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x13 for WDSSetMIPProfile() +struct sWDSSetMIPProfileRequest_SecondaryHomeAgentAddress +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x14 for WDSSetMIPProfile() +struct sWDSSetMIPProfileRequest_ReverseTunneling +{ + INT8 mReverseTunneling; +}; + +// Structure to describe request TLV 0x15 for WDSSetMIPProfile() +struct sWDSSetMIPProfileRequest_NAI +{ + // String is variable length, but must be size of the container + // char mNAI[1]; +}; + +// Structure to describe request TLV 0x16 for WDSSetMIPProfile() +struct sWDSSetMIPProfileRequest_HASPI +{ + UINT32 mHASPI; +}; + +// Structure to describe request TLV 0x17 for WDSSetMIPProfile() +struct sWDSSetMIPProfileRequeste_AAASPI +{ + UINT32 mAAASPI; +}; + +// Structure to describe request TLV 0x18 for WDSSetMIPProfile() +struct sWDSSetMIPProfileRequest_MNHA +{ + // String is variable length, but must be size of the container + // char mMNHAKey[1]; +}; + +// Structure to describe request TLV 0x19 for WDSSetMIPProfile() +struct sWDSSetMIPProfileRequest_MNAAA +{ + // String is variable length, but must be size of the container + // char mMNAAAKey[1]; +}; + +// Structure to describe response TLV 0x10 for WDSGetMIPParameters() +struct sWDSGetMIPParametersResponse_MobileIPMode +{ + eQMIMobileIPModes mMIPMode; +}; + +// Structure to describe response TLV 0x11 for WDSGetMIPParameters() +struct sWDSGetMIPParametersResponse_RetryAttemptLimit +{ + UINT8 mRetryAttemptLimit; +}; + +// Structure to describe response TLV 0x12 for WDSGetMIPParameters() +struct sWDSGetMIPParametersResponse_RetryAttemptInterval +{ + UINT8 mRetryAttemptInterval; +}; + +// Structure to describe response TLV 0x13 for WDSGetMIPParameters() +struct sWDSGetMIPParametersResponse_ReRegistrationPeriod +{ + UINT8 mReRegistrationPeriod; +}; + +// Structure to describe response TLV 0x14 for WDSGetMIPParameters() +struct sWDSGetMIPParametersResponse_ReRegistrationOnlyWithTraffic +{ + INT8 mReRegistrationOnlyWithTraffic; +}; + +// Structure to describe response TLV 0x15 for WDSGetMIPParameters() +struct sWDSGetMIPParametersResponse_MNHAAuthenticatorCalculator +{ + INT8 mMNHAAuthenticatorCalculator; +}; + +// Structure to describe response TLV 0x16 for WDSGetMIPParameters() +struct sWDSGetMIPParametersResponse_MNHARFC2002BISAuthentication +{ + INT8 mMNHARFC2002BISAuthentication; +}; + +// Structure to describe request TLV 0x01 for WDSSetMIPParameters() +struct sWDSSetMIPParametersRequest_SPC +{ + char mSPC[6]; +}; + +// Structure to describe request TLV 0x10 for WDSSetMIPParameters() +struct sWDSSetMIPParametersRequest_MobileIPMode +{ + eQMIMobileIPModes mMIPMode; +}; + +// Structure to describe request TLV 0x11 for WDSSetMIPParameters() +struct sWDSSetMIPParametersRequest_RetryAttemptLimit +{ + UINT8 mRetryAttemptLimit; +}; + +// Structure to describe request TLV 0x12 for WDSSetMIPParameters() +struct sWDSSetMIPParametersRequest_RetryAttemptInterval +{ + UINT8 mRetryAttemptInterval; +}; + +// Structure to describe request TLV 0x13 for WDSSetMIPParameters() +struct sWDSSetMIPParametersRequest_ReRegistrationPeriod +{ + UINT8 mReRegistrationPeriod; +}; + +// Structure to describe request TLV 0x14 for WDSSetMIPParameters() +struct sWDSSetMIPParametersRequest_ReRegistrationOnlyWithTraffic +{ + INT8 mReRegistrationOnlyWithTraffic; +}; + +// Structure to describe request TLV 0x15 for WDSSetMIPParameters() +struct sWDSSetMIPParametersRequest_MNHAAuthenticatorCalculator +{ + INT8 mMNHAAuthenticatorCalculator; +}; + +// Structure to describe request TLV 0x16 for WDSSetMIPParameters() +struct sWDSSetMIPParametersRequest_MNHARFC2002BISAuthentication +{ + INT8 mMNHARFC2002BISAuthentication; +}; + +// Structure to describe response TLV 0x01 for WDSGetLastMIPStatus() +struct sWDSGetLastMIPStatusResponse_Status +{ + UINT8 mLastMIPStatus; +}; + +// Structure to describe response TLV 0x01 for WDSGetANAAAAuthenticationStatus() +struct sWDSGetANAAAAuthenticationStatusResponse_Status +{ + INT8 mANAAAAuthenticated; +}; + +// Structure to describe response TLV 0x01 for WDSGetCurrentDataBearerTechnology() +struct sWDSGetCurrentDataBearerTechnologyResponse_Technology +{ + eQMIWDSNetworkTypes mNetworkType; + + // The following union is based on the value of mNetworkType + union uValOfNetworkType + { + // If the value of mNetworkType == 1 + struct sNetworkTypeIs1 + { + bool mCDMA1x:1; + bool mCDMA1xEvDORev0:1; + bool mCDMA1xEvDORevA:1; + bool mCDMA1xEvDORevB:1; + bool mCDMAEHRPD:1; + bool mCDMAFMC:1; + + // Padding out 25 bits + UINT8 mReserved1:2; + UINT8 mReserved2[2]; + UINT8 mReserved3:7; + + bool mNullBearer:1; + + // The following union is for handing both mCDMA1x and mCDMA1xEvDORev(0, A, B) + union uValOfCDMA1x_or_CDMA1xEvDORevX + { + // If the value of mCDMA1x == 1 + struct sCDMA1xIs1 + { + bool mCDMA1xIS95:1; + bool mCDMA1xIS2000:1; + bool mCDMA1xIS2000RelA:1; + + // Padding out 29 bits + UINT8 mReserved4:5; + UINT8 mReserved5[3]; + }; + + sCDMA1xIs1 mCDMA1xIs1; + + // If the value of mCDMA1xEvDORev0 == 1 + struct sCDMA1xEvDORev0Is1 + { + bool mCDMA1xEvDORev0DPA:1; + + // Padding out 31 bits + UINT8 mReserved6:7; + UINT8 mReserved7[3]; + }; + + sCDMA1xEvDORev0Is1 mCDMA1xEvDORev0Is1; + + // If the value of mCDMA1xEvDORevA == 1 + struct sCDMA1xEvDORevAIs1 + { + bool mCDMA1xEvDORevADPA:1; + bool mCDMA1xEvDORevAMFPA:1; + bool mCDMA1xEvDORevAEMPA:1; + bool mCDMA1xEvDORevAEMPAEHRPD:1; + + // Padding out 28 bits + UINT8 mReserved8:4; + UINT8 mReserved9[3]; + }; + + sCDMA1xEvDORevAIs1 mCDMA1xEvDORevAIs1; + + // If the value of mCDMA1xEvDORevB == 1 + struct sCDMA1xEvDORevBIs1 + { + bool mCDMA1xEvDORevBDPA:1; + bool mCDMA1xEvDORevBMFPA:1; + bool mCDMA1xEvDORevBEMPA:1; + bool mCDMA1xEvDORevBEMPAEHRPD:1; + bool mCDMA1xEvDORevBMMPA:1; + bool mCDMA1xEvDORevBMMPAEHRPD:1; + + // Padding out 26 bits + UINT8 mReserved10:2; + UINT8 mReserved11[3]; + }; + + sCDMA1xEvDORevBIs1 mCDMA1xEvDORevBIs1; + + // Padding out 32 bits + UINT8 mReserved12[4]; + }; + + uValOfCDMA1x_or_CDMA1xEvDORevX mValOfCDMA1x_or_CDMA1xEvDORevX; + }; + + sNetworkTypeIs1 mNetworkTypeIs1; + + // If the value of mNetworkType == 2 + struct sNetworkTypeIs2 + { + bool mWCDMA:1; + bool mGPRS:1; + bool mHSDPA:1; + bool mHSUPA:1; + bool mEDGE:1; + bool mLTE:1; + bool mHSDPAPlus:1; + bool mDualCellHSDPAPlus:1; + bool m64QAM:1; + bool mTDSCDMA:1; + + // Padding out 21 bits + UINT8 mReserved13:6; + UINT8 mReserved14; + UINT8 mReserved15:7; + + bool mNullBearer:1; + }; + + sNetworkTypeIs2 mNetworkTypeIs2; + + // Padding out 64 bits + UINT8 mReserved16[8]; + }; + + uValOfNetworkType mValOfNetworkType; +}; + +// Structure to describe response TLV 0x10 for WDSGetCurrentDataBearerTechnology() +struct sWDSGetCurrentDataBearerTechnologyResponse_LastCallTechnology +{ + eQMIWDSNetworkTypes mNetworkType; + + // The following union is based on the value of mNetworkType + union uValOfNetworkType + { + // If the value of mNetworkType == 1 + struct sNetworkTypeIs1 + { + bool mCDMA1x:1; + bool mCDMA1xEvDORev0:1; + bool mCDMA1xEvDORevA:1; + bool mCDMA1xEvDORevB:1; + bool mCDMAEHRPD:1; + bool mCDMAFMC:1; + + // Padding out 25 bits + UINT8 mReserved1:2; + UINT8 mReserved2[2]; + UINT8 mReserved3:7; + + bool mNullBearer:1; + + // The following union is for handing both mCDMA1x and mCDMA1xEvDORev(0, A, B) + union uValOfCDMA1x_or_CDMA1xEvDORevX + { + // If the value of mCDMA1x == 1 + struct sCDMA1xIs1 + { + bool mCDMA1xIS95:1; + bool mCDMA1xIS2000:1; + bool mCDMA1xIS2000RelA:1; + + // Padding out 29 bits + UINT8 mReserved4:5; + UINT8 mReserved5[3]; + }; + + sCDMA1xIs1 mCDMA1xIs1; + + // If the value of mCDMA1xEvDORev0 == 1 + struct sCDMA1xEvDORev0Is1 + { + bool mCDMA1xEvDORev0DPA:1; + + // Padding out 31 bits + UINT8 mReserved6:7; + UINT8 mReserved7[3]; + }; + + sCDMA1xEvDORev0Is1 mCDMA1xEvDORev0Is1; + + // If the value of mCDMA1xEvDORevA == 1 + struct sCDMA1xEvDORevAIs1 + { + bool mCDMA1xEvDORevADPA:1; + bool mCDMA1xEvDORevAMFPA:1; + bool mCDMA1xEvDORevAEMPA:1; + bool mCDMA1xEvDORevAEMPAEHRPD:1; + + // Padding out 28 bits + UINT8 mReserved8:4; + UINT8 mReserved9[3]; + }; + + sCDMA1xEvDORevAIs1 mCDMA1xEvDORevAIs1; + + // If the value of mCDMA1xEvDORevB == 1 + struct sCDMA1xEvDORevBIs1 + { + bool mCDMA1xEvDORevBDPA:1; + bool mCDMA1xEvDORevBMFPA:1; + bool mCDMA1xEvDORevBEMPA:1; + bool mCDMA1xEvDORevBEMPAEHRPD:1; + bool mCDMA1xEvDORevBMMPA:1; + bool mCDMA1xEvDORevBMMPAEHRPD:1; + + // Padding out 26 bits + UINT8 mReserved10:2; + UINT8 mReserved11[3]; + }; + + sCDMA1xEvDORevBIs1 mCDMA1xEvDORevBIs1; + + // Padding out 32 bits + UINT8 mReserved12[4]; + }; + + uValOfCDMA1x_or_CDMA1xEvDORevX mValOfCDMA1x_or_CDMA1xEvDORevX; + }; + + sNetworkTypeIs1 mNetworkTypeIs1; + + // If the value of mNetworkType == 2 + struct sNetworkTypeIs2 + { + bool mWCDMA:1; + bool mGPRS:1; + bool mHSDPA:1; + bool mHSUPA:1; + bool mEDGE:1; + bool mLTE:1; + bool mHSDPAPlus:1; + bool mDualCellHSDPAPlus:1; + bool m64QAM:1; + bool mTDSCDMA:1; + + // Padding out 21 bits + UINT8 mReserved13:6; + UINT8 mReserved14; + UINT8 mReserved15:7; + + bool mNullBearer:1; + }; + + sNetworkTypeIs2 mNetworkTypeIs2; + + // Padding out 64 bits + UINT8 mReserved16[8]; + }; + + uValOfNetworkType mValOfNetworkType; +}; + +// Structure to describe request TLV 0x10 for WDSGetCallList() +struct sWDSGetCallListRequest_ListType +{ + eQMICallHistoryTypes mCallListType; +}; + +// Structure to describe response TLV 0x10 for WDSGetCallList() +struct sWDSGetCallListResponse_FullList +{ + UINT16 mCallRecords; + + struct sRecord + { + UINT16 mID; + eQMICallTypes mType; + eQMIDataBearerTechnologies mDataBearer; + UINT64 mTimestamp; + UINT8 mIPV4Address[4]; + UINT64 mTotalDuration; + UINT64 mActiveDuration; + UINT64 mRXByteTotal; + UINT64 mTXByteTotal; + eQMICallEndReasons mCallEnd; + UINT8 mPhoneNumberLength; + + // This array must be the size specified by mPhoneNumberLength + // char mPhoneNumber[1]; + }; + + // This array must be the size specified by mCallRecords + // sRecord mRecords[1]; +}; + +// Structure to describe response TLV 0x11 for WDSGetCallList() +struct sWDSGetCallListResponse_IDList +{ + UINT16 mCallRecords; + + struct sRecord + { + UINT16 mID; + }; + + // This array must be the size specified by mCallRecords + // sRecord mRecords[1]; +}; + +// Structure to describe request TLV 0x01 for WDSGetCallRecord() +struct sWDSGetCallRecordRequest_RecordID +{ + UINT16 mID; +}; + +// Structure to describe response TLV 0x01 for WDSGetCallRecord() +struct sWDSGetCallRecordResponse_Record +{ + UINT16 mID; + eQMICallTypes mType; + eQMIDataBearerTechnologies mDataBearer; + UINT64 mTimestamp; + UINT8 mIPV4Address[4]; + UINT64 mTotalDuration; + UINT64 mActiveDuration; + UINT64 mRXByteTotal; + UINT64 mTXByteTotal; + eQMICallEndReasons mCallEnd; + UINT8 mPhoneNumberLength; + + // This array must be the size specified by mPhoneNumberLength + // char mPhoneNumber[1]; +}; + +// Structure to describe response TLV 0x01 for WDSGetCallListMaxSize() +struct sWDSGetCallListMaxSizeResponse_Maximum +{ + UINT16 mCallListMaxSize; +}; + +// Structure to describe request TLV 0x01 for WDSGetDefaultProfileNumber() +struct sWDSGetDefaultProfileNumberRequest_ProfileType +{ + eQMIProfileTypes mProfileType; + eQMIWDSProfileFamily mProfileFamily; +}; + +// Structure to describe response TLV 0x01 for WDSGetDefaultProfileNumber() +struct sWDSGetDefaultProfileNumberResponse_ProfileNumber +{ + UINT8 mProfileIndex; +}; + +// Structure to describe response TLV 0xE0 for WDSGetDefaultProfileNumber() +struct sWDSGetDefaultProfileNumberResponse_ExtendedErrorCode +{ + eQMIWDSExtendedErrorCode mExtendedErrorCode; +}; + +// Structure to describe request TLV 0x01 for WDSSetDefaultProfileNumber() +struct sWDSSetDefaultProfileNumberRequest_ProfileIdentifier +{ + eQMIProfileTypes mProfileType; + eQMIWDSProfileFamily mProfileFamily; + UINT8 mProfileIndex; +}; + +// Structure to describe response TLV 0xE0 for WDSSetDefaultProfileNumber() +struct sWDSSetDefaultProfileNumberResponse_ExtendedErrorCode +{ + eQMIWDSExtendedErrorCode mExtendedErrorCode; +}; + +// Structure to describe request TLV 0x01 for WDSResetProfile() +struct sWDSResetProfileRequest_ProfileIdentifier +{ + eQMIProfileTypes mProfileType; + UINT8 mProfileIndex; +}; + +// Structure to describe response TLV 0xE0 for WDSResetProfile() +struct sWDSResetProfileResponse_ExtendedErrorCode +{ + eQMIWDSExtendedErrorCode mExtendedErrorCode; +}; + +// Structure to describe request TLV 0x01 for WDSResetProfileParamToInvalid() +struct sWDSResetProfileParamToInvalidRequest_ProfileParam +{ + eQMIProfileTypes mProfileType; + UINT8 mProfileIndex; + eQMIWDSProfileParamID mProfileParamID; +}; + +// Structure to describe response TLV 0xE0 for WDSResetProfileParamToInvalid() +struct sWDSResetProfileParamToInvalidResponse_ExtendedErrorCode +{ + eQMIWDSExtendedErrorCode mExtendedErrorCode; +}; + +// Structure to describe request TLV 0x01 for WDSSetIPFamilyPreference() +struct sWDSSetIPFamilyPreferenceRequest_IPFamilyPreference +{ + eQMIWDSIPFamilies mIPFamily; +}; + +// Structure to describe request TLV 0x01 for WDSSetFMCTunnelParameters() +struct sWDSSetFMCTunnelParametersRequest_Parameters +{ + UINT32 mStreamID; + INT8 mNATIsPresent; + UINT16 mPortID; +}; + +// Structure to describe request TLV 0x10 for WDSSetFMCTunnelParameters() +struct sWDSSetFMCTunnelParametersRequest_IPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x11 for WDSSetFMCTunnelParameters() +struct sWDSSetFMCTunnelParametersRequest_IPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x10 for WDSGetFMCTunnelParameters() +struct sWDSGetFMCTunnelParametersResponse_Parameters +{ + UINT32 mStreamID; + INT8 mNATIsPresent; + UINT16 mPortID; +}; + +// Structure to describe response TLV 0x11 for WDSGetFMCTunnelParameters() +struct sWDSGetFMCTunnelParametersResponse_IPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x12 for WDSGetFMCTunnelParameters() +struct sWDSGetFMCTunnelParametersResponse_IPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x01 for WDSSetAutoconnectSetting() +struct sWDSSetAutoconnectSettingRequest_Autoconnect +{ + eQMIWDSAutoconnectSettings mAutoconnectSetting; +}; + +// Structure to describe request TLV 0x10 for WDSSetAutoconnectSetting() +struct sWDSSetAutoconnectSettingRequest_Roam +{ + eQMIWDSAutoconnectRoamSettings mAutoconnectRoamSetting; +}; + +// Structure to describe response TLV 0x10 for WDSGetDNSSetting() +struct sWDSGetDNSSettingResponse_PrimaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x11 for WDSGetDNSSetting() +struct sWDSGetDNSSettingResponse_SecondaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe response TLV 0x12 for WDSGetDNSSetting() +struct sWDSGetDNSSettingResponse_PrimaryIPv6DNS +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x13 for WDSGetDNSSetting() +struct sWDSGetDNSSettingResponse_SecondaryIPv6DNS +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x10 for WDSSetDNSSetting() +struct sWDSSetDNSSettingRequest_PrimaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x11 for WDSSetDNSSetting() +struct sWDSSetDNSSettingRequest_SecondaryDNS +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe request TLV 0x12 for WDSSetDNSSetting() +struct sWDSSetDNSSettingRequest_PrimaryIPv6DNS +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x13 for WDSSetDNSSetting() +struct sWDSSetDNSSettingRequest_SecondaryIPv6DNS +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x01 for WDSGetCDMAPreDormancySettings() +struct sWDSGetCDMAPreDormancySettingsResponse_Settings +{ + eQMIWDSCDMAServiceOptions mServiceOption; + eQMIWDSCDMANetworks mDataSessionNetwork; +}; + +// Structure to describe request TLV 0x01 for WDSSetCAMTimer() +struct sWDSSetCAMTimerRequest_Timer +{ + UINT32 mCAMTimerSeconds; +}; + +// Structure to describe response TLV 0x01 for WDSGetCAMTimer() +struct sWDSGetCAMTimerResponse_Timer +{ + UINT32 mCAMTimerSeconds; +}; + +// Structure to describe request TLV 0x01 for WDSSetSCRM() +struct sWDSSetSCRMRequest_SCRM +{ + INT8 mSCRMEnabled; +}; + +// Structure to describe response TLV 0x01 for WDSGetSCRM() +struct sWDSGetSCRMResponse_SCRM +{ + INT8 mSCRMEnabled; +}; + +// Structure to describe request TLV 0x01 for WDSSetRDUD() +struct sWDSSetRDUDRequest_RDUD +{ + INT8 mRDUDEnabled; +}; + +// Structure to describe response TLV 0x01 for WDSGetRDUD() +struct sWDSGetRDUDResponse_RDUD +{ + INT8 mRDUDEnabled; +}; + +// Structure to describe response TLV 0x01 for WDSGetSIPMIPCallType() +struct sWDSGetSIPMIPCallTypeResponse_CallType +{ + eQMIWDSSIPMIPCallTypes mCallType; +}; + +// Structure to describe request TLV 0x01 for WDSSetEVDOPageMonitorPeriod() +struct sWDSSetEVDOPageMonitorPeriodRequest_Period +{ + UINT8 mPageMonitorPeriod; +}; + +// Structure to describe indication TLV 0x01 for WDS EVDOPageMonitorPeriodIndication +struct sWDSEVDOPageMonitorPeriodIndication_Result +{ + eQMIWDSSlotCycleSetResults mSlotCycleSetResult; +}; + +// Structure to describe request TLV 0x01 for WDSSetEVDOLongSleep() +struct sWDSSetEVDOLongSleepRequest_Setting +{ + INT8 mForceLongSleep; +}; + +// Structure to describe response TLV 0x01 for WDSGetEVDOPageMonitorPeriod() +struct sWDSGetEVDOPageMonitorPeriodResponse_Details +{ + UINT8 mPageMonitorPeriod; + INT8 mForceLongSleep; +}; + +// Structure to describe response TLV 0x01 for WDSGetCallThrottleInfo() +struct sWDSGetCallThrottleInfoResponse_Details +{ + UINT32 mEVDOThrottledDelaySeconds; + UINT32 mCDMAThrottledDelaySeconds; +}; + +// Structure to describe request TLV 0x01 for WDSGetNSAPI() +struct sWDSGetNSAPIRequest_APN +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe response TLV 0x01 for WDSGetNSAPI() +struct sWDSGetNSAPIResponse_NSAPI +{ + UINT8 mNSAPICount; + + // This array must be the size specified by mNSAPICount + // UINT8 mNSAPI[1]; +}; + +// Structure to describe request TLV 0x01 for WDSSetDUNCallControlPreference() +struct sWDSSetDUNCallControlPreferenceRequest_Preference +{ + eQMIWDSDUNControlPreferences mDUNControl; +}; + +// Structure to describe request TLV 0x10 for WDSSetDUNCallControlPreference() +struct sWDSSetDUNCallControlPreferenceRequest_AllowDUN +{ + INT8 mAllowDUNCalls; +}; + +// Structure to describe response TLV 0x01 for WDSGetDUNCallControlInfo() +struct sWDSGetDUNCallControlInfoResponse_Status +{ + INT8 mDUNControlEnabled; +}; + +// Structure to describe response TLV 0x10 for WDSGetDUNCallControlInfo() +struct sWDSGetDUNCallControlInfoResponse_AllowDUN +{ + INT8 mAllowDUNCalls; +}; + +// Structure to describe response TLV 0x11 for WDSGetDUNCallControlInfo() +struct sWDSGetDUNCallControlInfoResponse_CurrentClient +{ + INT8 mSetByCurrentClient; +}; + +// Structure to describe response TLV 0x12 for WDSGetDUNCallControlInfo() +struct sWDSGetDUNCallControlInfoResponse_ReportMask +{ + bool mSendDUNCallNotifications:1; + bool mSendEntitlementNotifications:1; + bool mSendSilentRedailNotifications:1; + + // Padding out 5 bits + UINT8 mReserved1:5; +}; + +// Structure to describe request TLV 0x01 for WDSSetDUNCallControlEventReport() +struct sWDSSetDUNCallControlEventReportRequest_CallNotifications +{ + INT8 mEnableDUNCallNotifications; +}; + +// Structure to describe request TLV 0x10 for WDSSetDUNCallControlEventReport() +struct sWDSSetDUNCallControlEventReportRequest_EntitlementNotifications +{ + INT8 mEnableEntitlementNotifications; +}; + +// Structure to describe request TLV 0x11 for WDSSetDUNCallControlEventReport() +struct sWDSSetDUNCallControlEventReportRequest_RedialNotifications +{ + INT8 mEnableSilentRedailNotifications; +}; + +// Structure to describe response TLV 0x01 for WDSSetDUNCallControlEventReport() +struct sWDSSetDUNCallControlEventReportResponse_ReportMask +{ + bool mSendDUNCallNotifications:1; + bool mSendEntitlementNotifications:1; + bool mSendSilentRedailNotifications:1; + + // Padding out 5 bits + UINT8 mReserved1:5; +}; + +// Structure to describe indication TLV 0x01 for WDS DUNCallControlEventReport +struct sWDSDUNCallControlEventReportIndication_Event +{ + eQMIWDSDUNControlEvents mDUNControlEvent; +}; + +// Structure to describe indication TLV 0x10 for WDS DUNCallControlEventReport +struct sWDSDUNCallControlEventReportIndication_CallNotification +{ + INT8 mDUNCallAllowed; +}; + +// Structure to describe indication TLV 0x11 for WDS DUNCallControlEventReport +struct sWDSDUNCallControlEventReportIndication_CallID +{ + UINT8 mDUNCallID; +}; + +// Structure to describe indication TLV 0x12 for WDS DUNCallControlEventReport +struct sWDSDUNCallControlEventReportIndication_PreviousFailureReason +{ + eQMIWDSCallEndReasonTypes mCallEndReasonType; + + // The following union is based on the value of mCallEndReasonType + union uValOfCallEndReasonType + { + // Always present + UINT16 mCallEndReasonValue; + + // If the value of mCallEndReasonType == 1 + struct sCallEndReasonTypeIs1 + { + eQMIWDSMobileIPCallEndReasons mMobileIPCallEndReason; + }; + + sCallEndReasonTypeIs1 mCallEndReasonTypeIs1; + + // If the value of mCallEndReasonType == 2 + struct sCallEndReasonTypeIs2 + { + eQMIWDSInternalCallEndReasons mInternalCallEndReason; + }; + + sCallEndReasonTypeIs2 mCallEndReasonTypeIs2; + + // If the value of mCallEndReasonType == 3 + struct sCallEndReasonTypeIs3 + { + eQMIWDSCallManagerCallEndReasons mCallManagerCallEndReason; + }; + + sCallEndReasonTypeIs3 mCallEndReasonTypeIs3; + + // If the value of mCallEndReasonType == 6 + struct sCallEndReasonTypeIs6 + { + eQMIWDS3GPPCallEndReasons m3GPPCallEndReason; + }; + + sCallEndReasonTypeIs6 mCallEndReasonTypeIs6; + + // If the value of mCallEndReasonType == 7 + struct sCallEndReasonTypeIs7 + { + eQMIWDSPPPCallEndReason mPPPCallEndReason; + }; + + sCallEndReasonTypeIs7 mCallEndReasonTypeIs7; + + // If the value of mCallEndReasonType == 8 + struct sCallEndReasonTypeIs8 + { + eQMIWDSEHRPDCallEndReason mEHRPDCallEndReason; + }; + + sCallEndReasonTypeIs8 mCallEndReasonTypeIs8; + + // If the value of mCallEndReasonType == 9 + struct sCallEndReasonTypeIs9 + { + eQMIWDSIPv6CallEndReason mIPv6CallEndReason; + }; + + sCallEndReasonTypeIs9 mCallEndReasonTypeIs9; + + // Padding out 16 bits + UINT8 mReserved1[2]; + }; + + uValOfCallEndReasonType mValOfCallEndReasonType; +}; + +// Structure to describe request TLV 0x01 for WDSPendingDUNCallControl() +struct sWDSPendingDUNCallControlRequest_Action +{ + INT8 mDUNCallAllowed; +}; + +// Structure to describe request TLV 0x02 for WDSPendingDUNCallControl() +struct sWDSPendingDUNCallControlRequest_CallID +{ + UINT8 mDUNCallID; +}; + +// Structure to describe request TLV 0x01 for WDSEMBMSTMGIActivate() +struct sWDSEMBMSTMGIActivateRequest_TMGI +{ + UINT8 mTMGI[6]; + INT8 mSessionIDValid; + UINT8 mSessionID; +}; + +// Structure to describe request TLV 0x10 for WDSEMBMSTMGIActivate() +struct sWDSEMBMSTMGIActivateRequest_TransactionID +{ + INT16 mTransactionID; +}; + +// Structure to describe request TLV 0x11 for WDSEMBMSTMGIActivate() +struct sWDSEMBMSTMGIActivateRequest_PreemptPriority +{ + UINT32 mPreemptPriority; +}; + +// Structure to describe request TLV 0x12 for WDSEMBMSTMGIActivate() +struct sWDSEMBMSTMGIActivateRequest_EARFCNList +{ + UINT8 mEARFCNCount; + + // This array must be the size specified by mEARFCNCount + // UINT16 mEARFCN[1]; +}; + +// Structure to describe response TLV 0x10 for WDSEMBMSTMGIActivate() +struct sWDSEMBMSTMGIActivateResponse_ExtendedError +{ + eQMIWDSEMBMSErrorCodes mExtendedEMBMSErrorCode; +}; + +// Structure to describe indication TLV 0x01 for WDS EMBMSTMGIActivateIndication +struct sWDSEMBMSTMGIActivateIndication_Status +{ + eQMIWDSEMBMSOperationStatus mTMGIOperationStatus; +}; + +// Structure to describe indication TLV 0x02 for WDS EMBMSTMGIActivateIndication +struct sWDSEMBMSTMGIActivateIndication_TMGI +{ + UINT8 mTMGI[6]; + INT8 mSessionIDValid; + UINT8 mSessionID; +}; + +// Structure to describe indication TLV 0x10 for WDS EMBMSTMGIActivateIndication +struct sWDSEMBMSTMGIActivateIndication_TransactionID +{ + INT16 mTransactionID; +}; + +// Structure to describe request TLV 0x01 for WDSEMBMSTMGIDeactivate() +struct sWDSEMBMSTMGIDeactivateRequest_TMGI +{ + UINT8 mTMGI[6]; + INT8 mSessionIDValid; + UINT8 mSessionID; +}; + +// Structure to describe request TLV 0x10 for WDSEMBMSTMGIDeactivate() +struct sWDSEMBMSTMGIDeactivateRequest_TransactionID +{ + INT16 mTransactionID; +}; + +// Structure to describe response TLV 0x10 for WDSEMBMSTMGIDeactivate() +struct sWDSEMBMSTMGIDeactivateResponse_ExtendedError +{ + eQMIWDSEMBMSErrorCodes mExtendedEMBMSErrorCode; +}; + +// Structure to describe indication TLV 0x01 for WDS EMBMSTMGIDectivateIndication +struct sWDSEMBMSTMGIDectivateIndication_Status +{ + eQMIWDSEMBMSOperationStatus mTMGIOperationStatus; +}; + +// Structure to describe indication TLV 0x02 for WDS EMBMSTMGIDectivateIndication +struct sWDSEMBMSTMGIDectivateIndication_TMGI +{ + UINT8 mTMGI[6]; + INT8 mSessionIDValid; + UINT8 mSessionID; +}; + +// Structure to describe indication TLV 0x10 for WDS EMBMSTMGIDectivateIndication +struct sWDSEMBMSTMGIDectivateIndication_TransactionID +{ + INT16 mTransactionID; +}; + +// Structure to describe request TLV 0x01 for WDSEMBMSTMGIListQuery() +struct sWDSEMBMSTMGIListQueryRequest_Type +{ + eQMIWDSEMBMSListTypes mTMGIListType; +}; + +// Structure to describe request TLV 0x10 for WDSEMBMSTMGIListQuery() +struct sWDSEMBMSTMGIListQueryRequest_TransactionID +{ + INT16 mTransactionID; +}; + +// Structure to describe response TLV 0x10 for WDSEMBMSTMGIListQuery() +struct sWDSEMBMSTMGIListQueryResponse_List +{ + eQMIWDSEMBMSListTypes mTMGIListType; + UINT8 mTMGIListCount; + + struct sEntry + { + UINT8 mTMGI[6]; + INT8 mSessionIDValid; + UINT8 mSessionID; + }; + + // This array must be the size specified by mTMGIListCount + // sEntry mEntrys[1]; +}; + +// Structure to describe response TLV 0x11 for WDSEMBMSTMGIListQuery() +struct sWDSEMBMSTMGIListQueryResponse_OOS +{ + eQMIWDSOOSWarningReasons mOOSWarningReason; +}; + +// Structure to describe indication TLV 0x10 for WDS EMBMSTMGIListIndication +struct sWDSEMBMSTMGIListIndication_List +{ + eQMIWDSEMBMSListTypes mTMGIListType; + UINT8 mTMGIListCount; + + struct sEntry + { + UINT8 mTMGI[6]; + INT8 mSessionIDValid; + UINT8 mSessionID; + }; + + // This array must be the size specified by mTMGIListCount + // sEntry mEntrys[1]; +}; + +// Structure to describe indication TLV 0x11 for WDS EMBMSTMGIListIndication +struct sWDSEMBMSTMGIListIndication_OOS +{ + eQMIWDSOOSWarningReasons mOOSWarningReason; +}; + +// Structure to describe indication TLV 0x12 for WDS EMBMSTMGIListIndication +struct sWDSEMBMSTMGIListIndication_TransactionID +{ + INT16 mTransactionID; +}; + +// Structure to describe response TLV 0x10 for WDSGetPreferredDataSystem() +struct sWDSGetPreferredDataSystemResponse_PreferredDataSystem +{ + eQMIWDSDataSystems mPreferredDataSystem; +}; + +// Structure to describe response TLV 0x10 for WDSGetLastDataCallStatus() +struct sWDSGetLastDataCallStatusResponse_DataCallStatus +{ + eQMIWDSDataCallStatus mDataCallStatus; +}; + +// Structure to describe response TLV 0x11 for WDSGetLastDataCallStatus() +struct sWDSGetLastDataCallStatusResponse_DataCallType +{ + eQMIWDSDataCallTypes mDataCallType; + eQMIWDSTetheredCallTypes mTetheredCallType; +}; + +// Structure to describe response TLV 0x12 for WDSGetLastDataCallStatus() +struct sWDSGetLastDataCallStatusResponse_DataCallAddressFamily +{ + eQMIWDSAddressFamilies mAddressFamily; +}; + +// Structure to describe response TLV 0x10 for WDSGetCurrentDataSystems() +struct sWDSGetCurrentDataSystemsResponse_Systems +{ + eQMIWDSDataSystemNetworkTypes mPreferredNetworkType; + UINT8 mNetworkCount; + + struct sNetwork + { + eQMIWDSDataSystemNetworkTypes mNetworkType; + + // The following union is based on the value of mNetworkType + union uValOfNetworkType + { + // If the value of mNetworkType == 0 + struct sNetworkTypeIs0 + { + bool mWCDMA:1; + bool mGPRS:1; + bool mHSDPA:1; + bool mHSUPA:1; + bool mEDGE:1; + bool mLTE:1; + bool mHSDPAPlus:1; + bool mDualCellHSDPAPlus:1; + bool m64QAM:1; + bool mTDSCDMA:1; + + // Padding out 21 bits + UINT8 mReserved1:6; + UINT8 mReserved2; + UINT8 mReserved3:7; + + bool mNULLBearer:1; + }; + + sNetworkTypeIs0 mNetworkTypeIs0; + + // If the value of mNetworkType == 1 + struct sNetworkTypeIs1 + { + bool mCDMA1x:1; + bool mCDMA1xEvDORev0:1; + bool mCDMA1xEvDORevA:1; + bool mCDMA1xEvDORevB:1; + bool mCDMAEHRPD:1; + bool mCDMAFMC:1; + + // Padding out 25 bits + UINT8 mReserved4:2; + UINT8 mReserved5[2]; + UINT8 mReserved6:7; + + bool mNULLBearer:1; + + // The following union is for handing all mCDMA1x types + union uValOfCDMA1xTypes + { + // If the value of mCDMA1x == 1 + struct sCDMA1xIs1 + { + bool mCDMA1xIS95:1; + bool mCDMA1xIS2000:1; + bool mCDMA1xIS2000RelA:1; + + // Padding out 29 bits + UINT8 mReserved7:5; + UINT8 mReserved8[3]; + }; + + sCDMA1xIs1 mCDMA1xIs1; + + // If the value of mCDMA1xEvDORev0 == 1 + struct sCDMA1xEvDORev0Is1 + { + bool mCDMA1xEvDORev0DPA:1; + + // Padding out 31 bits + UINT8 mReserved9:7; + UINT8 mReserved10[3]; + }; + + sCDMA1xEvDORev0Is1 mCDMA1xEvDORev0Is1; + + // If the value of mCDMA1xEvDORevA == 1 + struct sCDMA1xEvDORevAIs1 + { + bool mCDMA1xEvDORevADPA:1; + bool mCDMA1xEvDORevAMFPA:1; + bool mCDMA1xEvDORevAEMPA:1; + bool mCDMA1xEvDORevAEMPAEHRPD:1; + + // Padding out 28 bits + UINT8 mReserved11:4; + UINT8 mReserved12[3]; + }; + + sCDMA1xEvDORevAIs1 mCDMA1xEvDORevAIs1; + + // If the value of mCDMA1xEvDORevB == 1 + struct sCDMA1xEvDORevBIs1 + { + bool mCDMA1xEvDORevBDPA:1; + bool mCDMA1xEvDORevBMFPA:1; + bool mCDMA1xEvDORevBEMPA:1; + bool mCDMA1xEvDORevBEMPAEHRPD:1; + bool mCDMA1xEvDORevBMMPA:1; + bool mCDMA1xEvDORevBMMPAEHRPD:1; + + // Padding out 26 bits + UINT8 mReserved13:2; + UINT8 mReserved14[3]; + }; + + sCDMA1xEvDORevBIs1 mCDMA1xEvDORevBIs1; + + // Padding out 32 bits + UINT8 mReserved15[4]; + }; + + uValOfCDMA1xTypes mValOfCDMA1xTypes; + }; + + sNetworkTypeIs1 mNetworkTypeIs1; + + // Padding out 64 bits + UINT8 mReserved16[8]; + }; + + uValOfNetworkType mValOfNetworkType; + }; + + // This array must be the size specified by mNetworkCount + // sNetwork mNetworks[1]; +}; + +// Structure to describe request TLV 0x01 for WDSGetPDNThrottleInfo() +struct sWDSGetPDNThrottleInfoRequest_Type +{ + eQMIWDSDataSystemNetworkTypes mTechnologyType; +}; + +// Structure to describe response TLV 0x10 for WDSGetPDNThrottleInfo() +struct sWDSGetPDNThrottleInfoResponse_Info +{ + UINT8 mThrottleInfoCount; + + struct sInfo + { + INT8 mIPv4Throttled; + INT8 mIPv6Throttled; + UINT32 mIPv4ThrottleTimeLeftInMilliseconds; + UINT32 mIPv6ThrottleTimeLeftInMilliseconds; + UINT8 mAPNNameLength; + + // This array must be the size specified by mAPNNameLength + // char mAPNName[1]; + }; + + // This array must be the size specified by mThrottleInfoCount + // sInfo mInfos[1]; +}; + +// Structure to describe response TLV 0x10 for WDSGetLTEAttachParameters() +struct sWDSGetLTEAttachParametersResponse_APNString +{ + // String is variable length, but must be size of the container + // char mAPNName[1]; +}; + +// Structure to describe response TLV 0x11 for WDSGetLTEAttachParameters() +struct sWDSGetLTEAttachParametersResponse_IPSupport +{ + eQMIWDSLTEIPTypes mIPType; +}; + +// Structure to describe response TLV 0x12 for WDSGetLTEAttachParameters() +struct sWDSGetLTEAttachParametersResponse_OTAAttach +{ + INT8 mOTAAttachPerformed; +}; + +// Structure to describe response TLV 0x10 for WDSGetFlowControlStatus() +struct sWDSGetFlowControlStatusResponse_UplinkFlowControl +{ + INT8 mUplinkFlowControlEnabled; +}; + +// Structure to describe request TLV 0x01 for WDSEMBMSTMGISwitch() +struct sWDSEMBMSTMGISwitchRequest_TMGIToActivate +{ + UINT8 mTMGI[6]; + INT8 mSessionIDValid; + UINT8 mSessionID; +}; + +// Structure to describe request TLV 0x02 for WDSEMBMSTMGISwitch() +struct sWDSEMBMSTMGISwitchRequest_TMGIToDeactivate +{ + UINT8 mTMGI[6]; + INT8 mSessionIDValid; + UINT8 mSessionID; +}; + +// Structure to describe request TLV 0x10 for WDSEMBMSTMGISwitch() +struct sWDSEMBMSTMGISwitchRequest_TransactionID +{ + INT16 mTransactionID; +}; + +// Structure to describe request TLV 0x11 for WDSEMBMSTMGISwitch() +struct sWDSEMBMSTMGISwitchRequest_PreemptPriority +{ + UINT32 mPreemptPriority; +}; + +// Structure to describe request TLV 0x12 for WDSEMBMSTMGISwitch() +struct sWDSEMBMSTMGISwitchRequest_EARFCNList +{ + UINT8 mEARFCNCount; + + // This array must be the size specified by mEARFCNCount + // UINT16 mEARFCN[1]; +}; + +// Structure to describe response TLV 0x10 for WDSEMBMSTMGISwitch() +struct sWDSEMBMSTMGISwitchResponse_ExtendedError +{ + eQMIWDSEMBMSErrorCodes mExtendedEMBMSErrorCode; +}; + +// Structure to describe indication TLV 0x01 for WDS EMBMSTMGISwitchIndication +struct sWDSEMBMSTMGISwitchIndication_ActivationStatus +{ + eQMIWDSEMBMSOperationStatus mTMGIOperationStatus; +}; + +// Structure to describe indication TLV 0x02 for WDS EMBMSTMGISwitchIndication +struct sWDSEMBMSTMGISwitchIndication_ActivationTMGI +{ + UINT8 mTMGI[6]; + INT8 mSessionIDValid; + UINT8 mSessionID; +}; + +// Structure to describe indication TLV 0x03 for WDS EMBMSTMGISwitchIndication +struct sWDSEMBMSTMGISwitchIndication_DeactivationStatus +{ + eQMIWDSEMBMSOperationStatus mTMGIOperationStatus; +}; + +// Structure to describe indication TLV 0x04 for WDS EMBMSTMGISwitchIndication +struct sWDSEMBMSTMGISwitchIndication_DeactivationTMGI +{ + UINT8 mTMGI[6]; + INT8 mSessionIDValid; + UINT8 mSessionID; +}; + +// Structure to describe indication TLV 0x10 for WDS EMBMSTMGISwitchIndication +struct sWDSEMBMSTMGISwitchIndication_TransactionID +{ + INT16 mTransactionID; +}; + +// Structure to describe request TLV 0x01 for WDSBindDataPort() +struct sWDSBindDataPortRequest_DataPort +{ + UINT16 mDataPort; +}; + +// Structure to describe request TLV 0x01 for WDSSetPDNFilter() +struct sWDSSetPDNFilterRequest_IPFamily +{ + eQMIWDSIPFamilies mIPFamily; +}; + +// Structure to describe request TLV 0x02 for WDSSetPDNFilter() +struct sWDSSetPDNFilterRequest_NetworkPolicy +{ + bool mEnable3GPP:1; + bool mEnable3GPP2:1; + + // Padding out 6 bits + UINT8 mReserved1:6; + + UINT8 m3GPP2ProfileIndex; + UINT8 m3GPPProfileIndex; +}; + +// Structure to describe request TLV 0x10 for WDSSetPDNFilter() +struct sWDSSetPDNFilterRequest_NextHeaderPolicy +{ + eQMIWDSNextHeaderProtocols mNextHeaderProtocol; +}; + +// Structure to describe request TLV 0x11 for WDSSetPDNFilter() +struct sWDSSetPDNFilterRequest_ProtocolSource +{ + UINT16 mPortRangeStart; + UINT16 mPortRange; +}; + +// Structure to describe response TLV 0x10 for WDSSetPDNFilter() +struct sWDSSetPDNFilterResponse_Handle +{ + UINT32 mPDNFilterHandle; +}; + +// Structure to describe request TLV 0x01 for WDSRemovePDNFilter() +struct sWDSRemovePDNFilterRequest_Handle +{ + UINT32 mPDNFilterHandle; +}; + +// Structure to describe indication TLV 0x10 for WDS ExtendedIPConfigIndication +struct sWDSExtendedIPConfigIndication_ChangedIPConfig +{ + // Padding out 10 bits + UINT8 mReserved1; + UINT8 mReserved2:2; + + bool mPCSCFAddressUsingPCO:1; + + // Padding out 21 bits + UINT8 mReserved3:5; + UINT8 mReserved4[2]; +}; + +// Structure to describe request TLV 0x01 for WDSReverseIPTransportConnectionIndication() +struct sWDSReverseIPTransportConnectionIndicationRequest_Registration +{ + INT8 mRegisterForIndication; +}; + +// Structure to describe indication TLV 0x01 for WDS ReverseIPTransportConnectionIndication +struct sWDSReverseIPTransportConnectionIndication_Status +{ + eQMIWDSReverseIPConnectionStatus mConnectionStatus; +}; + +// Structure to describe indication TLV 0x02 for WDS ReverseIPTransportConnectionIndication +struct sWDSReverseIPTransportConnectionIndication_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe indication TLV 0x10 for WDS ReverseIPTransportConnectionIndication +struct sWDSReverseIPTransportConnectionIndication_TechnologyName +{ + eQMIWDSReverseIPTechnologyNames mTechnologyName; +}; + +// Structure to describe indication TLV 0x11 for WDS ReverseIPTransportConnectionIndication +struct sWDSReverseIPTransportConnectionIndication_Shared +{ + INT8 mIsShared; +}; + +// Structure to describe indication TLV 0x12 for WDS ReverseIPTransportConnectionIndication +struct sWDSReverseIPTransportConnectionIndication_IPv4Address +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe indication TLV 0x13 for WDS ReverseIPTransportConnectionIndication +struct sWDSReverseIPTransportConnectionIndication_IPv4Subnet +{ + UINT8 mIPV4Address[4]; +}; + +// Structure to describe indication TLV 0x14 for WDS ReverseIPTransportConnectionIndication +struct sWDSReverseIPTransportConnectionIndication_IPv6Address +{ + UINT16 mIPv6Address[8]; + UINT8 mIPPrefixLength; +}; + +// Structure to describe response TLV 0x10 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_SecurityParameterIndexRX +{ + INT8 mSecurityParameterIndex; +}; + +// Structure to describe response TLV 0x11 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_SecurityParameterIndexTX +{ + INT8 mSecurityParameterIndex; +}; + +// Structure to describe response TLV 0x12 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_IPSecSAProtocol +{ + eQMIWDSIPSecSAProtocols mIPSecSAProtocol; +}; + +// Structure to describe response TLV 0x13 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_EncapsulationMode +{ + eQMIWDSIPSecSAEncapsulationModes mIPSecSAProtocol; +}; + +// Structure to describe response TLV 0x14 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_DestinationAddress +{ + eQMIWDSAddressFamilies mAddressFamily; + UINT8 mIPAddressLength; + + // This array must be the size specified by mIPAddressLength + // UINT8 mIPAddress[1]; +}; + +// Structure to describe response TLV 0x15 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_LocalAddress +{ + eQMIWDSAddressFamilies mAddressFamily; + UINT8 mIPAddressLength; + + // This array must be the size specified by mIPAddressLength + // UINT8 mIPAddress[1]; +}; + +// Structure to describe response TLV 0x16 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_HashAlgorithm +{ + eQMIWDSIPSecCryptoAlgorithms mAlgorithm; +}; + +// Structure to describe response TLV 0x17 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_HashKeyRX +{ + UINT8 mKeyLength; + + // This array must be the size specified by mKeyLength + // UINT8 mKeyAddress[1]; +}; + +// Structure to describe response TLV 0x18 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_HashKeyTX +{ + UINT8 mKeyLength; + + // This array must be the size specified by mKeyLength + // UINT8 mKeyAddress[1]; +}; + +// Structure to describe response TLV 0x19 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_CryptographyAlgorithm +{ + eQMIWDSIPSecCryptoAlgorithms mAlgorithm; +}; + +// Structure to describe response TLV 0x1A for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_CryptographyKeyRX +{ + UINT8 mKeyLength; + + // This array must be the size specified by mKeyLength + // UINT8 mKeyAddress[1]; +}; + +// Structure to describe response TLV 0x1B for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_CryptographyKeyTX +{ + UINT8 mKeyLength; + + // This array must be the size specified by mKeyLength + // UINT8 mKeyAddress[1]; +}; + +// Structure to describe response TLV 0x1C for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InitializationVector +{ + UINT8 mInitializationVectorLength; + + // This array must be the size specified by mInitializationVectorLength + // UINT8 mInitializationVector[1]; +}; + +// Structure to describe response TLV 0x1D for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_UDPEncapsulated +{ + INT8 mUDPEncapsulated; +}; + +// Structure to describe response TLV 0x1E for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_NATLocalIPAddress +{ + eQMIWDSAddressFamilies mAddressFamily; + UINT8 mIPAddressLength; + + // This array must be the size specified by mIPAddressLength + // UINT8 mIPAddress[1]; +}; + +// Structure to describe response TLV 0x1F for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_NATRemoteIPAddress +{ + eQMIWDSAddressFamilies mAddressFamily; + UINT8 mIPAddressLength; + + // This array must be the size specified by mIPAddressLength + // UINT8 mIPAddress[1]; +}; + +// Structure to describe response TLV 0x20 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv4Address +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT8 mIPV4Address[4]; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x21 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv4Netmask +{ + UINT8 mNetmask[4]; +}; + +// Structure to describe response TLV 0x22 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv4DNS +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT8 mIPV4Address[4]; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x23 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv4NBNS +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT8 mIPV4Address[4]; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x24 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalAddressExpiry +{ + UINT32 mExpiry; +}; + +// Structure to describe response TLV 0x25 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv4DHCP +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT8 mIPV4Address[4]; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x26 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_ApplicationVersion +{ + UINT8 mApplicationVersionLength; + + // This array must be the size specified by mApplicationVersionLength + // char mApplicationVersion[1]; +}; + +// Structure to describe response TLV 0x27 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv6Address +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT16 mIPv6Address[8]; + UINT8 mIPPrefixLength; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x28 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv6DNS +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT16 mIPv6Address[8]; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x29 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv6NBNS +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT16 mIPv6Address[8]; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x2A for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv6DHCP +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT16 mIPv6Address[8]; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x2B for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv4Subnet +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT8 mIPV4Address[4]; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x2C for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_SupportedAttributes +{ + UINT8 mSupportedAttributesLength; + + // This array must be the size specified by mSupportedAttributesLength + // char mSupportedAttributes[1]; +}; + +// Structure to describe response TLV 0x2D for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv6Subnet +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT16 mIPv6Address[8]; + UINT8 mIPPrefixLength; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x2E for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv4PCSCF +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT8 mIPV4Address[4]; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x2F for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_InternalIPv6PCSCF +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT16 mIPv6Address[8]; + UINT8 mIPPrefixLength; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x30 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_3GPP2MIP4HA +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT8 mIPV4Address[4]; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x31 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_3GPP2MIP4HOA +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT8 mIPV4Address[4]; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x32 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_3GPP2MIP6HA +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT16 mIPv6Address[8]; + UINT8 mIPPrefixLength; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x33 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_3GPP2MIP6HOA +{ + UINT8 mAttributeCount; + + struct sAttribute + { + UINT16 mIPv6Address[8]; + UINT8 mIPPrefixLength; + }; + + // This array must be the size specified by mAttributeCount + // sAttribute mAttributes[1]; +}; + +// Structure to describe response TLV 0x34 for WDSGetIPSecStaticSAConfig() +struct sWDSGetIPSecStaticSAConfigResponse_TrafficSelectorList +{ + UINT8 mTrafficSelectorListCount; + + struct sTrafficSelector1 + { + UINT8 mProtocol; + UINT16 mStartPort; + UINT16 mEndPort; + eQMIWDSAddressFamilies mAddressFamily; + UINT8 mIPAddressLength; + + // This array must be the size specified by mIPAddressLength + // UINT8 mIPAddress[1]; + }; + + struct sTrafficSelector2 + { + eQMIWDSAddressFamilies mAddressFamily; + UINT8 mIPAddressLength; + + // This array must be the size specified by mIPAddressLength + // UINT8 mIPAddress[1]; + }; + + struct sTrafficSelector + { + sTrafficSelector1 mTrafficSelector1; + sTrafficSelector2 mTrafficSelector2; + }; + + // This array must be the size specified by mTrafficSelectorListCount + // sTrafficSelector mTrafficSelectors[1]; +}; + +// Structure to describe request TLV 0x01 for WDSReverseIPTransportConfigComplete() +struct sWDSReverseIPTransportConfigCompleteRequest_Result +{ + INT8 mConfigurationSuccess; +}; + +// Structure to describe request TLV 0x02 for WDSReverseIPTransportConfigComplete() +struct sWDSReverseIPTransportConfigCompleteRequest_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe response TLV 0x10 for WDSGetExtendedDataBearerTechnology() +struct sWDSGetExtendedDataBearerTechnologyResponse_CurrentBearer +{ + eQMIWDSDataBearerTechnologies mDataBearerTechnology; + eQMIWDSRadioAccessTechnologies mRadioAccessTechnology; + bool mWCDMA:1; + bool mHSDPA:1; + bool mHSUPA:1; + bool mHSDPAPlus:1; + bool mDualCellHSDPAPlus:1; + bool m64QAM:1; + bool mHSPA:1; + bool mGPRS:1; + bool mEDGE:1; + bool mGSM:1; + bool mS2B:1; + bool mLTELimitedService:1; + bool mLTEFDD:1; + bool mLTETDD:1; + + // Padding out 11 bits + UINT8 mReserved1:2; + UINT8 mReserved2; + UINT8 mReserved3:1; + + bool m1xIS95:1; + bool m1xIS2000:1; + bool m1xIS2000RelA:1; + bool mHDRRev0DPA:1; + bool mHDRRevADPA:1; + bool mHDRRevBDPA:1; + bool mHDRRevAMPA:1; + bool mHDRRevBMPA:1; + bool mHDRRevAEMPA:1; + bool mHDRRevBEMPA:1; + bool mHDRRevBMMPA:1; + bool mHDREVDOFMC:1; + + // Padding out 27 bits + UINT8 mReserved4:3; + UINT8 mReserved5[3]; +}; + +// Structure to describe response TLV 0x11 for WDSGetExtendedDataBearerTechnology() +struct sWDSGetExtendedDataBearerTechnologyResponse_LastBearer +{ + eQMIWDSDataBearerTechnologies mDataBearerTechnology; + eQMIWDSRadioAccessTechnologies mRadioAccessTechnology; + bool mWCDMA:1; + bool mHSDPA:1; + bool mHSUPA:1; + bool mHSDPAPlus:1; + bool mDualCellHSDPAPlus:1; + bool m64QAM:1; + bool mHSPA:1; + bool mGPRS:1; + bool mEDGE:1; + bool mGSM:1; + bool mS2B:1; + bool mLTELimitedService:1; + bool mLTEFDD:1; + bool mLTETDD:1; + + // Padding out 11 bits + UINT8 mReserved1:2; + UINT8 mReserved2; + UINT8 mReserved3:1; + + bool m1xIS95:1; + bool m1xIS2000:1; + bool m1xIS2000RelA:1; + bool mHDRRev0DPA:1; + bool mHDRRevADPA:1; + bool mHDRRevBDPA:1; + bool mHDRRevAMPA:1; + bool mHDRRevBMPA:1; + bool mHDRRevAEMPA:1; + bool mHDRRevBEMPA:1; + bool mHDRRevBMMPA:1; + bool mHDREVDOFMC:1; + + // Padding out 27 bits + UINT8 mReserved4:3; + UINT8 mReserved5[3]; +}; + +// Structure to describe response TLV 0x10 for WDSGetLTEMaximumAttachPDNNumber() +struct sWDSGetLTEMaximumAttachPDNNumberResponse_Maximum +{ + UINT8 mMaximumAttachPDNNumber; +}; + +// Structure to describe request TLV 0x01 for WDSSetLTEAttachPDNList() +struct sWDSSetLTEAttachPDNListRequest_AttachPDNList +{ + UINT8 mAttachPDNListCount; + + // This array must be the size specified by mAttachPDNListCount + // UINT16 mAttachPDNProfileID[1]; +}; + +// Structure to describe response TLV 0x10 for WDSGetLTEAttachPDNList() +struct sWDSGetLTEAttachPDNListResponse_AttachPDNList +{ + UINT8 mAttachPDNListCount; + + // This array must be the size specified by mAttachPDNListCount + // UINT16 mAttachPDNProfileID[1]; +}; + +// Structure to describe indication TLV 0x10 for WDS LTEAttachPDNListIndication +struct sWDSLTEAttachPDNListIndication_AttachPDNList +{ + UINT8 mAttachPDNListCount; + + // This array must be the size specified by mAttachPDNListCount + // UINT16 mAttachPDNProfileID[1]; +}; + +// Structure to describe request TLV 0x01 for WDSSetLTEDataRetry() +struct sWDSSetLTEDataRetryRequest_LTEDataRetry +{ + INT8 mRetryLTEDataAttach; +}; + +// Structure to describe response TLV 0x10 for WDSGetLTEDataRetry() +struct sWDSGetLTEDataRetryResponse_LTEDataRetry +{ + INT8 mRetryLTEDataAttach; +}; + +// Structure to describe request TLV 0x01 for WDSSetLTEAttachType() +struct sWDSSetLTEAttachTypeRequest_LTEAttachType +{ + eQMIWDSLTEAttachTypes mLTEAttachType; +}; + +// Structure to describe response TLV 0x10 for WDSGetLTEAttachType() +struct sWDSGetLTEAttachTypeResponse_LTEAttachType +{ + eQMIWDSLTEAttachTypes mLTEAttachType; +}; + +// Structure to describe indication TLV 0x01 for WDS ReverseIPTransportFilterIndication +struct sWDSReverseIPTransportFilterIndication_FilterType +{ + eQMIWDSReverseIPTransportFilterTypes mReverseIPTransportFilterType; +}; + +// Structure to describe indication TLV 0x10 for WDS ReverseIPTransportFilterIndication +struct sWDSReverseIPTransportFilterIndication_SPI +{ + UINT32 mSecurityParameterIndex; +}; + +// Structure to describe indication TLV 0x01 for WDS HandoffInformationIndication +struct sWDSHandoffInformationIndication_FilterType +{ + eQMIWDSHandoffInfoTypes mHandoffInformation; +}; + +// Structure to describe request TLV 0x10 for DMSSetEventReport() +struct sDMSSetEventReportRequest_PowerState +{ + INT8 mReportPowerState; +}; + +// Structure to describe request TLV 0x11 for DMSSetEventReport() +struct sDMSSetEventReportRequest_BatteryLevel +{ + UINT8 mBatteryLevelLowerLimit; + UINT8 mBatteryLevelUpperLimit; +}; + +// Structure to describe request TLV 0x12 for DMSSetEventReport() +struct sDMSSetEventReportRequest_PINStatus +{ + INT8 mReportPINStatus; +}; + +// Structure to describe request TLV 0x13 for DMSSetEventReport() +struct sDMSSetEventReportRequest_ActivationState +{ + INT8 mReportActivationState; +}; + +// Structure to describe request TLV 0x14 for DMSSetEventReport() +struct sDMSSetEventReportRequest_OperatingMode +{ + INT8 mReportOperatingMode; +}; + +// Structure to describe request TLV 0x15 for DMSSetEventReport() +struct sDMSSetEventReportRequest_UIMState +{ + INT8 mReportUIMState; +}; + +// Structure to describe request TLV 0x16 for DMSSetEventReport() +struct sDMSSetEventReportRequest_WirelessDisableState +{ + INT8 mReportWirelessDisableState; +}; + +// Structure to describe request TLV 0x17 for DMSSetEventReport() +struct sDMSSetEventReportRequest_PRLInit +{ + INT8 mReportPRLInitialization; +}; + +// Structure to describe indication TLV 0x10 for DMS EventReport +struct sDMSEventReportIndication_PowerState +{ + eQMIDMSPowerSources mPowerSource:1; + bool mBatteryConnected:1; + bool mBatteryCharging:1; + bool mPowerFault:1; + + // Padding out 4 bits + UINT8 mReserved1:4; + + UINT8 mBatteryLevel; +}; + +// Structure to describe indication TLV 0x11 for DMS EventReport +struct sDMSEventReportIndication_PIN1State +{ + eQMIDMSPINStatus mPINStatus; + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe indication TLV 0x12 for DMS EventReport +struct sDMSEventReportIndication_PIN2State +{ + eQMIDMSPINStatus mPINStatus; + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe indication TLV 0x13 for DMS EventReport +struct sDMSEventReportIndication_ActivationState +{ + eQMIDMSActivationStates mActivationState; +}; + +// Structure to describe indication TLV 0x14 for DMS EventReport +struct sDMSEventReportIndication_OperatingMode +{ + eQMIDMSOperatingModes mOperatingMode; +}; + +// Structure to describe indication TLV 0x15 for DMS EventReport +struct sDMSEventReportIndication_UIMState +{ + eQMIDMSUIMStates mUIMState; +}; + +// Structure to describe indication TLV 0x16 for DMS EventReport +struct sDMSEventReportIndication_WirelessDisableState +{ + INT8 mWirelessDisableOn; +}; + +// Structure to describe indication TLV 0x17 for DMS EventReport +struct sDMSEventReportIndication_PRLInit +{ + INT8 mPRLLoaded; +}; + +// Structure to describe response TLV 0x01 for DMSGetDeviceCapabilities() +struct sDMSGetDeviceCapabilitiesResponse_Capabilities +{ + UINT32 mMaxTXRatebps; + UINT32 mMaxRXRatebps; + eQMIDMSDataServiceCapabilities1 mDataServiceCapability; + INT8 mSIMSupported; + UINT8 mRadioInterfaceCount; + + // This array must be the size specified by mRadioInterfaceCount + // eQMIDMSRadioInterfaces mRadioInterface[1]; +}; + +// Structure to describe response TLV 0x10 for DMSGetDeviceCapabilities() +struct sDMSGetDeviceCapabilitiesResponse_ServiceCapability +{ + eQMIDMSServiceCapabilities mServiceCapability; +}; + +// Structure to describe response TLV 0x11 for DMSGetDeviceCapabilities() +struct sDMSGetDeviceCapabilitiesResponse_VoiceCapability +{ + bool mGWCSFBCapable:1; + bool m1xCSFBCapable:1; + bool mVoLTECapable:1; + + // Padding out 61 bits + UINT8 mReserved1:5; + UINT8 mReserved2[7]; +}; + +// Structure to describe response TLV 0x12 for DMSGetDeviceCapabilities() +struct sDMSGetDeviceCapabilitiesResponse_VoiceAndDataCapability +{ + bool mSVLTE:1; + bool mSVDO:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe response TLV 0x01 for DMSGetDeviceManfacturer() +struct sDMSGetDeviceManfacturerResponse_Manfacturer +{ + // String is variable length, but must be size of the container + // char mDeviceManfacturer[1]; +}; + +// Structure to describe response TLV 0x01 for DMSGetDeviceModel() +struct sDMSGetDeviceModelResponse_Model +{ + // String is variable length, but must be size of the container + // char mDeviceModelID[1]; +}; + +// Structure to describe response TLV 0x01 for DMSGetDeviceRevision() +struct sDMSGetDeviceRevisionResponse_Revision +{ + // String is variable length, but must be size of the container + // char mDeviceRevisionID[1]; +}; + +// Structure to describe response TLV 0x10 for DMSGetDeviceRevision() +struct sDMSGetDeviceRevisionResponse_BootCodeRevision +{ + // String is variable length, but must be size of the container + // char mBootCodeRevisionID[1]; +}; + +// Structure to describe response TLV 0x11 for DMSGetDeviceRevision() +struct sDMSGetDeviceRevisionResponse_UQCNRevision +{ + // String is variable length, but must be size of the container + // char mBootCodeRevisionID[1]; +}; + +// Structure to describe response TLV 0x01 for DMSGetDeviceVoiceNumber() +struct sDMSGetDeviceVoiceNumberResponse_VoiceNumber +{ + // String is variable length, but must be size of the container + // char mDeviceVoiceNumber[1]; +}; + +// Structure to describe response TLV 0x10 for DMSGetDeviceVoiceNumber() +struct sDMSGetDeviceVoiceNumberResponse_MobileIDNumber +{ + // String is variable length, but must be size of the container + // char mDeviceMobileIDNumber[1]; +}; + +// Structure to describe response TLV 0x11 for DMSGetDeviceVoiceNumber() +struct sDMSGetDeviceVoiceNumberResponse_IMSI +{ + // String is variable length, but must be size of the container + // char mIMSI[1]; +}; + +// Structure to describe response TLV 0x10 for DMSGetDeviceSerialNumbers() +struct sDMSGetDeviceSerialNumbersResponse_ESN +{ + // String is variable length, but must be size of the container + // char mESN[1]; +}; + +// Structure to describe response TLV 0x11 for DMSGetDeviceSerialNumbers() +struct sDMSGetDeviceSerialNumbersResponse_IMEI +{ + // String is variable length, but must be size of the container + // char mIMEI[1]; +}; + +// Structure to describe response TLV 0x12 for DMSGetDeviceSerialNumbers() +struct sDMSGetDeviceSerialNumbersResponse_MEID +{ + // String is variable length, but must be size of the container + // char mMEID[1]; +}; + +// Structure to describe response TLV 0x01 for DMSGetPowerState() +struct sDMSGetPowerStateResponse_PowerState +{ + eQMIDMSPowerSources mPowerSource:1; + bool mBatteryConnected:1; + bool mBatteryCharging:1; + bool mPowerFault:1; + + // Padding out 4 bits + UINT8 mReserved1:4; + + UINT8 mBatteryLevel; +}; + +// Structure to describe request TLV 0x01 for DMSUIMSetPINProtection() +struct sDMSUIMSetPINProtectionRequest_Info +{ + UINT8 mPINID; + UINT8 mPINEnabled; + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // char mPINValue[1]; +}; + +// Structure to describe response TLV 0x10 for DMSUIMSetPINProtection() +struct sDMSUIMSetPINProtectionResponse_RetryInfo +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe request TLV 0x01 for DMSUIMVerifyPIN() +struct sDMSUIMVerifyPINRequest_Info +{ + UINT8 mPINID; + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // char mPINValue[1]; +}; + +// Structure to describe response TLV 0x10 for DMSUIMVerifyPIN() +struct sDMSUIMVerifyPINResponse_RetryInfo +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe request TLV 0x01 for DMSUIMUnblockPIN() +struct sDMSUIMUnblockPINRequest_Info1 +{ + UINT8 mPINID; + UINT8 mPUKLength; + + // This array must be the size specified by mPUKLength + // char mPUKValue[1]; +}; + +struct sDMSUIMUnblockPINRequest_Info2 +{ + UINT8 mNewPINLength; + + // This array must be the size specified by mNewPINLength + // char mNewPINValue[1]; +}; + +struct sDMSUIMUnblockPINRequest_Info +{ + sDMSUIMUnblockPINRequest_Info1 mDMSUIMUnblockPINRequest_Info1; + sDMSUIMUnblockPINRequest_Info2 mDMSUIMUnblockPINRequest_Info2; +}; + +// Structure to describe response TLV 0x10 for DMSUIMUnblockPIN() +struct sDMSUIMUnblockPINResponse_RetryInfo +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe request TLV 0x01 for DMSUIMChangePIN() +struct sDMSUIMChangePINRequest_Info1 +{ + UINT8 mPINID; + UINT8 mOldPINLength; + + // This array must be the size specified by mOldPINLength + // char mOldPINValue[1]; +}; + +struct sDMSUIMChangePINRequest_Info2 +{ + UINT8 mNewPINLength; + + // This array must be the size specified by mNewPINLength + // char mNewPINValue[1]; +}; + +struct sDMSUIMChangePINRequest_Info +{ + sDMSUIMChangePINRequest_Info1 mDMSUIMChangePINRequest_Info1; + sDMSUIMChangePINRequest_Info2 mDMSUIMChangePINRequest_Info2; +}; + +// Structure to describe response TLV 0x10 for DMSUIMChangePIN() +struct sDMSUIMChangePINResponse_RetryInfo +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe response TLV 0x11 for DMSUIMGetPINStatus() +struct sDMSUIMGetPINStatusResponse_PIN1Status +{ + eQMIDMSPINStatus mPINStatus; + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe response TLV 0x12 for DMSUIMGetPINStatus() +struct sDMSUIMGetPINStatusResponse_PIN2Status +{ + eQMIDMSPINStatus mPINStatus; + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe response TLV 0x01 for DMSGetHardwareRevision() +struct sDMSGetHardwareRevisionResponse_HardwareRevision +{ + // String is variable length, but must be size of the container + // char mDeviceHardwareRevision[1]; +}; + +// Structure to describe response TLV 0x01 for DMSGetOperatingMode() +struct sDMSGetOperatingModeResponse_OperatingMode +{ + eQMIDMSOperatingModes mOperatingMode; +}; + +// Structure to describe response TLV 0x10 for DMSGetOperatingMode() +struct sDMSGetOperatingModeResponse_OfflineReason +{ + UINT8 mHostImageMismatch:1; + UINT8 mUQCNImageMismatch:1; + UINT8 mIncompatibleUQCN:1; + UINT8 mUQCNCopyIssue:1; + + // Padding out 12 bits + UINT8 mReserved1:4; + UINT8 mReserved2; +}; + +// Structure to describe response TLV 0x11 for DMSGetOperatingMode() +struct sDMSGetOperatingModeResponse_PlatformRestricted +{ + INT8 mPlatformRestricted; +}; + +// Structure to describe request TLV 0x01 for DMSSetOperatingMode() +struct sDMSSetOperatingModeRequest_OperatingMode +{ + eQMIDMSOperatingModes mOperatingMode; +}; + +// Structure to describe response TLV 0x01 for DMSGetTimestamp() +struct sDMSGetTimestampResponse_Timestamp +{ + UINT64 mTimestamp:48; + + // mSource is of type eQMIDMSTimestampSources + UINT64 mSource:16; +}; + +// Structure to describe response TLV 0x01 for DMSGetPRLVersion() +struct sDMSGetPRLVersionResponse_PRLVersion +{ + UINT16 mPRLVersion; +}; + +// Structure to describe response TLV 0x01 for DMSGetActivationState() +struct sDMSGetActivationStateResponse_ActivationState +{ + eQMIDMSActivationStates mActivationState; +}; + +// Structure to describe request TLV 0x01 for DMSActivateAutomatic() +struct sDMSActivateAutomaticRequest_ActivationCode +{ + UINT8 mCodeLength; + + // This array must be the size specified by mCodeLength + // char mCode[1]; +}; + +// Structure to describe request TLV 0x01 for DMSActivateManual() +struct sDMSActivateManualRequest_ActivationData1 +{ + char mSPC[6]; + UINT16 mSID; + UINT8 mMDNLength; + + // This array must be the size specified by mMDNLength + // char mMDN[1]; +}; + +struct sDMSActivateManualRequest_ActivationData2 +{ + UINT8 mMINLength; + + // This array must be the size specified by mMINLength + // char mMIN[1]; +}; + +struct sDMSActivateManualRequest_ActivationData +{ + sDMSActivateManualRequest_ActivationData1 mDMSActivateManualRequest_ActivationData1; + sDMSActivateManualRequest_ActivationData2 mDMSActivateManualRequest_ActivationData2; +}; + +// Structure to describe request TLV 0x10 for DMSActivateManual() +struct sDMSActivateManualRequest_PRLObsolete +{ + UINT16 mPRLLength; + + // This array must be the size specified by mPRLLength + // UINT8 mPRL[1]; +}; + +// Structure to describe request TLV 0x11 for DMSActivateManual() +struct sDMSActivateManualRequest_MNHAKey +{ + UINT8 mMNHALength; + + // This array must be the size specified by mMNHALength + // char mMNHA[1]; +}; + +// Structure to describe request TLV 0x12 for DMSActivateManual() +struct sDMSActivateManualRequest_MNAAAKey +{ + UINT8 mMNAAALength; + + // This array must be the size specified by mMNAAALength + // char mMNAAA[1]; +}; + +// Structure to describe request TLV 0x13 for DMSActivateManual() +struct sDMSActivateManualRequest_PRL +{ + UINT16 mPRLTotalLength; + UINT16 mPRLSegmentLength; + UINT8 mPRLSegmentID; + + // This array must be the size specified by mPRLSegmentLength + // UINT8 mPRL[1]; +}; + +// Structure to describe response TLV 0x01 for DMSGetLockState() +struct sDMSGetLockStateResponse_LockState +{ + eQMIDMSLockStates mLockState; +}; + +// Structure to describe request TLV 0x01 for DMSSetLockState() +struct sDMSSetLockStateRequest_LockState +{ + eQMIDMSLockStates mLockState; + char mLockCode[4]; +}; + +// Structure to describe request TLV 0x01 for DMSSetLockCode() +struct sDMSSetLockCodeRequest_LockCode +{ + char mCurrentLockCode[4]; + char mNewLockCode[4]; +}; + +// Structure to describe response TLV 0x01 for DMSReadUserData() +struct sDMSReadUserDataResponse_UserData +{ + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe request TLV 0x01 for DMSWriteUserData() +struct sDMSWriteUserDataRequest_UserData +{ + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe response TLV 0x01 for DMSReadERIData() +struct sDMSReadERIDataResponse_UserData +{ + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe request TLV 0x01 for DMSResetFactoryDefaults() +struct sDMSResetFactoryDefaultsRequest_SPC +{ + char mSPC[6]; +}; + +// Structure to describe request TLV 0x01 for DMSValidateSPC() +struct sDMSValidateSPCRequest_SPC +{ + char mSPC[6]; +}; + +// Structure to describe response TLV 0x01 for DMSUIMGetICCID() +struct sDMSUIMGetICCIDResponse_ICCID +{ + // String is variable length, but must be size of the container + // char mICCID[1]; +}; + +// Structure to describe response TLV 0x01 for DMSUIMGetHostLockID() +struct sDMSUIMGetHostLockIDResponse_ID +{ + UINT32 mHostLockCode; +}; + +// Structure to describe request TLV 0x01 for DMSUIMGetControlKeyStatus() +struct sDMSUIMGetControlKeyStatusRequest_Facility +{ + eQMIDMSUIMFacility mFacility; +}; + +// Structure to describe response TLV 0x01 for DMSUIMGetControlKeyStatus() +struct sDMSUIMGetControlKeyStatusResponse_Status +{ + eQMIDMSUIMFacilityStates mFacilityState; + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe response TLV 0x10 for DMSUIMGetControlKeyStatus() +struct sDMSUIMGetControlKeyStatusResponse_Blocking +{ + INT8 mOperationBlocking; +}; + +// Structure to describe request TLV 0x01 for DMSUIMSetControlKeyProtection() +struct sDMSUIMSetControlKeyProtectionRequest_Facility +{ + eQMIDMSUIMFacility mFacility; + eQMIDMSUIMFacilityStates mFacilityState; + UINT8 mControlKeyLength; + + // This array must be the size specified by mControlKeyLength + // char mControlKey[1]; +}; + +// Structure to describe response TLV 0x10 for DMSUIMSetControlKeyProtection() +struct sDMSUIMSetControlKeyProtectionResponse_Status +{ + UINT8 mRemainingVerifyRetries; +}; + +// Structure to describe request TLV 0x01 for DMSUIMUnblockControlKey() +struct sDMSUIMUnblockControlKeyRequest_Facility +{ + eQMIDMSUIMFacility mFacility; + UINT8 mControlKeyLength; + + // This array must be the size specified by mControlKeyLength + // char mControlKey[1]; +}; + +// Structure to describe response TLV 0x10 for DMSUIMUnblockControlKey() +struct sDMSUIMUnblockControlKeyResponse_Status +{ + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe response TLV 0x01 for DMSGetIMSI() +struct sDMSGetIMSIResponse_IMSI +{ + // String is variable length, but must be size of the container + // char mIMSI[1]; +}; + +// Structure to describe response TLV 0x01 for DMSGetUIMState() +struct sDMSGetUIMStateResponse_State +{ + eQMIDMSUIMStates mUIMState; +}; + +// Structure to describe response TLV 0x01 for DMSGetBandCapabilities() +struct sDMSGetBandCapabilitiesResponse_Bands +{ + bool mBandClass0ASystem:1; + bool mBandClass0BSystem:1; + bool mBandClass1:1; + bool mBandClass2:1; + bool mBandClass3ASystem:1; + bool mBandClass4:1; + bool mBandClass5:1; + bool mGSMDCS:1; + bool mGSMPrimary:1; + bool mGSMExtended:1; + bool mBandClass6:1; + bool mBandClass7:1; + bool mBandClass8:1; + bool mBandClass9:1; + bool mBandClass10:1; + bool mBandClass11:1; + bool mGSM450:1; + bool mGSM480:1; + bool mGSM750:1; + bool mGSM850:1; + bool mGSMRailways:1; + bool mGSMPCS:1; + bool mWCDMA2100I:1; + bool mWCDMAPCS1900:1; + bool mWCDMADCS1800:1; + bool mWCDMA1700US:1; + bool mWCDMA850:1; + bool mWCDMA800:1; + bool mBandClass12:1; + bool mBandClass14:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mBandClass15:1; + + // Padding out 16 bits + UINT8 mReserved2[2]; + + bool mWCDMA2600:1; + bool mWCDMA900:1; + bool mWCDMA1700Japan:1; + + // Padding out 5 bits + UINT8 mReserved3:5; + + bool mBandClass16:1; + bool mBandClass17:1; + bool mBandClass18:1; + bool mBandClass19:1; + + // Padding out 4 bits + UINT8 mReserved4:4; +}; + +// Structure to describe response TLV 0x10 for DMSGetBandCapabilities() +struct sDMSGetBandCapabilitiesResponse_LTEBands +{ + bool mEUTRANBand1:1; + bool mEUTRANBand2:1; + bool mEUTRANBand3:1; + bool mEUTRANBand4:1; + bool mEUTRANBand5:1; + bool mEUTRANBand6:1; + bool mEUTRANBand7:1; + bool mEUTRANBand8:1; + bool mEUTRANBand9:1; + bool mEUTRANBand10:1; + bool mEUTRANBand11:1; + bool mEUTRANBand12:1; + bool mEUTRANBand13:1; + bool mEUTRANBand14:1; + + // Padding out 2 bits + UINT8 mReserved1:2; + + bool mEUTRANBand17:1; + bool mEUTRANBand18:1; + bool mEUTRANBand19:1; + bool mEUTRANBand20:1; + bool mEUTRANBand21:1; + + // Padding out 2 bits + UINT8 mReserved2:2; + + bool mEUTRANBand24:1; + bool mEUTRANBand25:1; + + // Padding out 7 bits + UINT8 mReserved3:7; + + bool mEUTRANBand33:1; + bool mEUTRANBand34:1; + bool mEUTRANBand35:1; + bool mEUTRANBand36:1; + bool mEUTRANBand37:1; + bool mEUTRANBand38:1; + bool mEUTRANBand39:1; + bool mEUTRANBand40:1; + bool mEUTRANBand41:1; + + // Padding out 23 bits + UINT8 mReserved4:7; + UINT8 mReserved5[2]; +}; + +// Structure to describe response TLV 0x11 for DMSGetBandCapabilities() +struct sDMSGetBandCapabilitiesResponse_TDSBands +{ + bool mTDSBandA:1; + bool mTDSBandB:1; + bool mTDSBandC:1; + bool mTDSBandD:1; + bool mTDSBandE:1; + bool mTDSBandF:1; + + // Padding out 58 bits + UINT8 mReserved1:2; + UINT8 mReserved2[7]; +}; + +// Structure to describe response TLV 0x01 for DMSGetFactorySerialNumber() +struct sDMSGetFactorySerialNumberResponse_ID +{ + // String is variable length, but must be size of the container + // char mFactorySerialNumber[1]; +}; + +// Structure to describe request TLV 0x01 for DMSSetDeviceTime() +struct sDMSSetDeviceTimeRequest_Time +{ + UINT64 mTimeInMilliseconds; +}; + +// Structure to describe request TLV 0x10 for DMSSetDeviceTime() +struct sDMSSetDeviceTimeRequest_Type +{ + eQMIDMSTimeReferences mTimeReference; +}; + +// Structure to describe response TLV 0x01 for DMSGetSoftwareVersion() +struct sDMSGetSoftwareVersionResponse_Version +{ + // String is variable length, but must be size of the container + // char mSoftwareVersion[1]; +}; + +// Structure to describe request TLV 0x01 for DMSSetSPC() +struct sDMSSetSPCRequest_CurrentSPC +{ + char mCurrentSPC[6]; +}; + +// Structure to describe request TLV 0x02 for DMSSetSPC() +struct sDMSSetSPCRequest_NewSPC +{ + char mNewSPC[6]; +}; + +// Structure to describe response TLV 0x10 for DMSGetCurrentPRLInfo() +struct sDMSGetCurrentPRLInfoResponse_Version +{ + UINT16 mPRLVersion; +}; + +// Structure to describe response TLV 0x11 for DMSGetCurrentPRLInfo() +struct sDMSGetCurrentPRLInfoResponse_Preference +{ + INT8 mPRLOnlyPreferenceSet; +}; + +// Structure to describe request TLV 0x01 for DMSBindSubscription() +struct sDMSBindSubscriptionRequest_Subscription +{ + eQMIDMSSubscriptions mSubscription; +}; + +// Structure to describe response TLV 0x10 for DMSGetSubscription() +struct sDMSGetSubscriptionResponse_Subscription +{ + eQMIDMSSubscriptions mSubscription; +}; + +// Structure to describe request TLV 0x10 for NASSetEventReport() +struct sNASSetEventReportRequest_SignalIndicator +{ + INT8 mReportSignalStrength; + UINT8 mNumberOfThresholds; + + // This array must be the size specified by mNumberOfThresholds + // INT8 mSignalStrengthThresholddBm[1]; +}; + +// Structure to describe request TLV 0x11 for NASSetEventReport() +struct sNASSetEventReportRequest_RFIndicator +{ + INT8 mReportRFInfo; +}; + +// Structure to describe request TLV 0x12 for NASSetEventReport() +struct sNASSetEventReportRequest_RegistrationRejectIndicator +{ + INT8 mReportLUReject; +}; + +// Structure to describe request TLV 0x13 for NASSetEventReport() +struct sNASSetEventReportRequest_RSSIIndicator +{ + INT8 mReportRSSI; + UINT8 mRSSIDelta; +}; + +// Structure to describe request TLV 0x14 for NASSetEventReport() +struct sNASSetEventReportRequest_ECIOIndicator +{ + INT8 mReportECIO; + UINT8 mECIODelta; +}; + +// Structure to describe request TLV 0x15 for NASSetEventReport() +struct sNASSetEventReportRequest_IOIndicator +{ + INT8 mReportIO; + UINT8 mIODelta; +}; + +// Structure to describe request TLV 0x16 for NASSetEventReport() +struct sNASSetEventReportRequest_SINRIndicator +{ + INT8 mReportSINR; + UINT8 mSINRDelta; +}; + +// Structure to describe request TLV 0x17 for NASSetEventReport() +struct sNASSetEventReportRequest_ErrorRateIndicator +{ + INT8 mReportErrorRate; +}; + +// Structure to describe request TLV 0x18 for NASSetEventReport() +struct sNASSetEventReportRequest_RSRQIndicator +{ + INT8 mReportRSRQ; + UINT8 mRSRQDelta; +}; + +// Structure to describe request TLV 0x19 for NASSetEventReport() +struct sNASSetEventReportRequest_ECIOThreshold +{ + INT8 mReportECIO; + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x1A for NASSetEventReport() +struct sNASSetEventReportRequest_SINRThreshold +{ + INT8 mReportSINR; + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // UINT8 mThreshold[1]; +}; + +// Structure to describe request TLV 0x1B for NASSetEventReport() +struct sNASSetEventReportRequest_LTESNRDelta +{ + INT8 mReportLTESNR; + UINT16 mLTESNRDelta; +}; + +// Structure to describe request TLV 0x1C for NASSetEventReport() +struct sNASSetEventReportRequest_LTERSPSDelta +{ + INT8 mReportLTERSRP; + UINT8 mLTERSRPDelta; +}; + +// Structure to describe indication TLV 0x10 for NAS EventReport +struct sNASEventReportIndication_SignalStrength +{ + INT8 mSignalStrengthdBm; + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe indication TLV 0x11 for NAS EventReport +struct sNASEventReportIndication_RFInfo +{ + UINT8 mNumberOfInstances; + + struct sInstance + { + eQMINASRadioInterfaces mRadioInterface; + eQMINASBandClasses mActiveBandClass; + UINT16 mActiveChannel; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x12 for NAS EventReport +struct sNASEventReportIndication_RegistrationReject +{ + eQMINASServiceDomains mServiceDomain; + UINT16 mRejectCause; +}; + +// Structure to describe indication TLV 0x13 for NAS EventReport +struct sNASEventReportIndication_RSSI +{ + UINT8 mRSSIDelta; + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe indication TLV 0x14 for NAS EventReport +struct sNASEventReportIndication_ECIO +{ + UINT8 mECIO; + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe indication TLV 0x15 for NAS EventReport +struct sNASEventReportIndication_IO +{ + UINT32 mIO; +}; + +// Structure to describe indication TLV 0x16 for NAS EventReport +struct sNASEventReportIndication_SINR +{ + eQMINASSINRLevels mSINR; +}; + +// Structure to describe indication TLV 0x17 for NAS EventReport +struct sNASEventReportIndication_ErrorRate +{ + UINT16 mErrorRate; + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe indication TLV 0x18 for NAS EventReport +struct sNASEventReportIndication_RSRQ +{ + INT8 mRSRQ; + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe indication TLV 0x19 for NAS EventReport +struct sNASEventReportIndication_LTESNR +{ + INT16 mLTESNR; +}; + +// Structure to describe indication TLV 0x1A for NAS EventReport +struct sNASEventReportIndication_LTERSRP +{ + INT16 mLTERSRP; +}; + +// Structure to describe request TLV 0x10 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_SystemSelectIndicator +{ + INT8 mReportSystemSelect; +}; + +// Structure to describe request TLV 0x12 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_DDTMIndicator +{ + INT8 mReportDDTM; +}; + +// Structure to describe request TLV 0x13 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_ServingSystemIndicator +{ + INT8 mReportServingSystem; +}; + +// Structure to describe request TLV 0x14 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_DualStandbyIndicator +{ + INT8 mReportDualStandby; +}; + +// Structure to describe request TLV 0x15 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_SubscriptionInformationIndicator +{ + INT8 mReportSubscriptionInformation; +}; + +// Structure to describe request TLV 0x17 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_NetworkTimeIndicator +{ + INT8 mReportNetworkTime; +}; + +// Structure to describe request TLV 0x18 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_SystemInformationIndicator +{ + INT8 mReportSystemInformation; +}; + +// Structure to describe request TLV 0x19 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_SignalStrengthIndicator +{ + INT8 mReportSignalStrength; +}; + +// Structure to describe request TLV 0x1A for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_ErrorRateIndicator +{ + INT8 mReportErrorRate; +}; + +// Structure to describe request TLV 0x1B for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_NewEVDOUATIIndicator +{ + INT8 mReportNewEVDOUATI; +}; + +// Structure to describe request TLV 0x1C for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_EVDOSessionIndicator +{ + INT8 mReportEVDOSessionClose; +}; + +// Structure to describe request TLV 0x1D for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_ManagedRoamingIndicator +{ + INT8 mReportManagedRoaming; +}; + +// Structure to describe request TLV 0x1E for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_CurrentPLMNName +{ + INT8 mReportCurrentPLMNName; +}; + +// Structure to describe request TLV 0x1F for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_EMBMSStatus +{ + INT8 mReportEMBMSStatus; +}; + +// Structure to describe request TLV 0x20 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_RFBandInfo +{ + INT8 mReportRFBandInfo; +}; + +// Structure to describe request TLV 0x21 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_NetworkReject +{ + INT8 mNetworkRejectEnabled; + INT8 mSupressSytemInfoEnabled; +}; + +// Structure to describe request TLV 0x22 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_OperatorNameData +{ + INT8 mOperatorNameDataEnabled; +}; + +// Structure to describe request TLV 0x23 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_CSPPLMNModeBit +{ + INT8 mCSPPLMNModeBitEnabled; +}; + +// Structure to describe request TLV 0x24 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_RTREConfiguration +{ + INT8 mRTREConfigurationEnabled; +}; + +// Structure to describe request TLV 0x25 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_IMSPreference +{ + INT8 mIMSPreferenceEnabled; +}; + +// Structure to describe request TLV 0x26 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_E911State +{ + INT8 mE911StateReadyEnabled; +}; + +// Structure to describe request TLV 0x27 for NASSetRegistrationEventReport() +struct sNASSetRegistrationEventReportRequest_LTESIB16NetworkTime +{ + INT8 mLTESIB16NetworkTimeEnabled; +}; + +// Structure to describe request TLV 0x10 for NASGetSignalStrength() +struct sNASGetSignalStrengthRequest_RequestMask +{ + bool mQueryRSSI:1; + bool mQueryECIO:1; + bool mQueryIO:1; + bool mQuerySINR:1; + bool mQueryErrorRate:1; + bool mQueryRSRQ:1; + bool mQueryLTESNR:1; + bool mQueryLTERSRQ:1; + + // Padding out 8 bits + UINT8 mReserved1; +}; + +// Structure to describe response TLV 0x01 for NASGetSignalStrength() +struct sNASGetSignalStrengthResponse_SignalStrength +{ + INT8 mSignalStrengthdBm; + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe response TLV 0x10 for NASGetSignalStrength() +struct sNASGetSignalStrengthResponse_SignalStrengthList +{ + UINT16 mNumberOfInfoInstances; + + struct sInfo + { + INT8 mSignalStrengthdBm; + eQMINASRadioInterfaces mRadioInterface; + }; + + // This array must be the size specified by mNumberOfInfoInstances + // sInfo mInfos[1]; +}; + +// Structure to describe response TLV 0x11 for NASGetSignalStrength() +struct sNASGetSignalStrengthResponse_RSSIList +{ + UINT16 mNumberOfMeasurements; + + struct sMeasurement + { + UINT8 mRSSIDelta; + eQMINASRadioInterfaces mRadioInterface; + }; + + // This array must be the size specified by mNumberOfMeasurements + // sMeasurement mMeasurements[1]; +}; + +// Structure to describe response TLV 0x12 for NASGetSignalStrength() +struct sNASGetSignalStrengthResponse_ECIOList +{ + UINT16 mNumberOfMeasurements; + + struct sMeasurement + { + UINT8 mECIO; + eQMINASRadioInterfaces mRadioInterface; + }; + + // This array must be the size specified by mNumberOfMeasurements + // sMeasurement mMeasurements[1]; +}; + +// Structure to describe response TLV 0x13 for NASGetSignalStrength() +struct sNASGetSignalStrengthResponse_IO +{ + UINT32 mIO; +}; + +// Structure to describe response TLV 0x14 for NASGetSignalStrength() +struct sNASGetSignalStrengthResponse_SINR +{ + eQMINASSINRLevels mSINR; +}; + +// Structure to describe response TLV 0x15 for NASGetSignalStrength() +struct sNASGetSignalStrengthResponse_ErrorRateList +{ + UINT16 mNumberOfMeasurements; + + struct sMeasurement + { + UINT16 mErrorRate; + eQMINASRadioInterfaces mRadioInterface; + }; + + // This array must be the size specified by mNumberOfMeasurements + // sMeasurement mMeasurements[1]; +}; + +// Structure to describe response TLV 0x16 for NASGetSignalStrength() +struct sNASGetSignalStrengthResponse_RSRQ +{ + INT8 mRSRQ; + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe response TLV 0x17 for NASGetSignalStrength() +struct sNASGetSignalStrengthResponse_LTESNR +{ + INT16 mLTESNR; +}; + +// Structure to describe response TLV 0x18 for NASGetSignalStrength() +struct sNASGetSignalStrengthResponse_LTERSRQ +{ + INT16 mLTERSRP; +}; + +// Structure to describe request TLV 0x10 for NASPerformNetworkScan() +struct sNASPerformNetworkScanRequest_NetworkMask +{ + bool mGSM:1; + bool mUMTS:1; + bool mLTE:1; + bool mTDSCDMA:1; + + // Padding out 4 bits + UINT8 mReserved1:4; +}; + +// Structure to describe request TLV 0x11 for NASPerformNetworkScan() +struct sNASPerformNetworkScanRequest_ScanType +{ + eQMINASNetworkScanTypes mScanType; +}; + +// Structure to describe response TLV 0x10 for NASPerformNetworkScan() +struct sNASPerformNetworkScanResponse_NetworkInfo +{ + UINT16 mNumberOfInfoInstances; + + struct sNetworkInfo + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + eQMINASInUseStates mInUseStatus:2; + eQMINASRoamingStates mRoamingStatus:2; + eQMINASForbiddenStates mForbiddenStatus:2; + eQMINASPreferredStates mPreferredStatus:2; + UINT8 mDescriptionLength; + + // This array must be the size specified by mDescriptionLength + // char mDescription[1]; + }; + + // This array must be the size specified by mNumberOfInfoInstances + // sNetworkInfo mNetworkInfos[1]; +}; + +// Structure to describe response TLV 0x11 for NASPerformNetworkScan() +struct sNASPerformNetworkScanResponse_NetworkRAT +{ + UINT16 mNumberOfInfoInstances; + + struct sInfo + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + eQMINASRadioAccessTechnologies mRadioAccessTechnology; + }; + + // This array must be the size specified by mNumberOfInfoInstances + // sInfo mInfos[1]; +}; + +// Structure to describe response TLV 0x12 for NASPerformNetworkScan() +struct sNASPerformNetworkScanResponse_PCSInfo +{ + UINT16 mPCSInfoCount; + + struct sPCSInfo + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; + }; + + // This array must be the size specified by mPCSInfoCount + // sPCSInfo mPCSInfos[1]; +}; + +// Structure to describe response TLV 0x13 for NASPerformNetworkScan() +struct sNASPerformNetworkScanResponse_NetworkScanResult +{ + eQMINASNetworkScanResult mNetworkScanResult; +}; + +// Structure to describe response TLV 0x14 for NASPerformNetworkScan() +struct sNASPerformNetworkScanResponse_CSGInfo +{ + UINT8 mCSGInfoCount; + + struct sInfo + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + eQMINASClosedSubscriberGroupCategories mCategory; + UINT8 mNameLength; + + // This array must be the size specified by mNameLength + // wchar_t mName[1]; + }; + + // This array must be the size specified by mCSGInfoCount + // sInfo mInfos[1]; +}; + +// Structure to describe request TLV 0x01 for NASInitiateNetworkRegister() +struct sNASInitiateNetworkRegisterRequest_Action +{ + eQMINASRegisterActions mRegisterAction; +}; + +// Structure to describe request TLV 0x10 for NASInitiateNetworkRegister() +struct sNASInitiateNetworkRegisterRequest_ManualInfo +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + eQMINASRadioAccessTechnologies mRadioAccessTechnology; +}; + +// Structure to describe request TLV 0x11 for NASInitiateNetworkRegister() +struct sNASInitiateNetworkRegisterRequest_ChangeDuration +{ + eQMINASChangeDuration mChangeDuration; +}; + +// Structure to describe request TLV 0x12 for NASInitiateNetworkRegister() +struct sNASInitiateNetworkRegisterRequest_PCSInfo +{ + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe request TLV 0x10 for NASInitiateAttach() +struct sNASInitiateAttachRequest_Action +{ + eQMINASPSAttachActions mPSAttachAction; +}; + +// Structure to describe response TLV 0x01 for NASGetServingSystem() +struct sNASGetServingSystemResponse_ServingSystem +{ + eQMINASRegistrationStates mRegistrationState; + eQMINASCSPSAttachStates mCSAttachState; + eQMINASCSPSAttachStates mPSAttachState; + eQMINASRegisteredNetworks mRegisteredNetwork; + UINT8 mNumberOfRadioInterfacesInUse; + + // This array must be the size specified by mNumberOfRadioInterfacesInUse + // eQMINASRadioInterfaces mRadioInterface[1]; +}; + +// Structure to describe response TLV 0x10 for NASGetServingSystem() +struct sNASGetServingSystemResponse_RoamingIndicator +{ + eQMINASRoamingIndicators mRoamingIndicator; +}; + +// Structure to describe response TLV 0x11 for NASGetServingSystem() +struct sNASGetServingSystemResponse_DataServices +{ + UINT8 mNumberOfDataCapabilities; + + // This array must be the size specified by mNumberOfDataCapabilities + // eQMINASDataServiceCapabilities2 mDataCapability[1]; +}; + +// Structure to describe response TLV 0x12 for NASGetServingSystem() +struct sNASGetServingSystemResponse_CurrentPLMN +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + UINT8 mDescriptionLength; + + // This array must be the size specified by mDescriptionLength + // char mDescription[1]; +}; + +// Structure to describe response TLV 0x13 for NASGetServingSystem() +struct sNASGetServingSystemResponse_SystemID +{ + UINT16 mSystemID; + UINT16 mNetworkID; +}; + +// Structure to describe response TLV 0x14 for NASGetServingSystem() +struct sNASGetServingSystemResponse_BaseStation +{ + UINT16 mBaseStationID; + INT32 mLatitude; + INT32 mLongitude; +}; + +// Structure to describe response TLV 0x15 for NASGetServingSystem() +struct sNASGetServingSystemResponse_RoamingList +{ + UINT8 mNumberOfInstances; + + struct sInstance + { + eQMINASRadioInterfaces mRadioInterface; + eQMINASRoamingIndicators mRoamingIndicator; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x16 for NASGetServingSystem() +struct sNASGetServingSystemResponse_DefaultRoaming +{ + eQMINASRoamingIndicators mRoamingIndicator; +}; + +// Structure to describe response TLV 0x17 for NASGetServingSystem() +struct sNASGetServingSystemResponse_3GPP2TimeZone +{ + UINT8 mLeapSeconds; + INT8 mLocalTimeOffset; + INT8 mDaylightSavingsInEffect; +}; + +// Structure to describe response TLV 0x18 for NASGetServingSystem() +struct sNASGetServingSystemResponse_ProtocolRevision +{ + eQMINASRevision mProtocolRevision; +}; + +// Structure to describe response TLV 0x1A for NASGetServingSystem() +struct sNASGetServingSystemResponse_3GPPTimeZone +{ + INT8 m3GPPTimeZone; +}; + +// Structure to describe response TLV 0x1B for NASGetServingSystem() +struct sNASGetServingSystemResponse_3GPPDaylightSavingsAdjustment +{ + eQMINASDaylightSavingsAdjustment mDaylightSavingsAdjustment; +}; + +// Structure to describe response TLV 0x1C for NASGetServingSystem() +struct sNASGetServingSystemResponse_3GPPLocationAreaCode +{ + UINT16 mLocationAreaCode; +}; + +// Structure to describe response TLV 0x1D for NASGetServingSystem() +struct sNASGetServingSystemResponse_3GPPCellID +{ + UINT32 mCellID; +}; + +// Structure to describe response TLV 0x1E for NASGetServingSystem() +struct sNASGetServingSystemResponse_3GPP2ConcurrentService +{ + eQMINASConcurrentService mConcurrentService; +}; + +// Structure to describe response TLV 0x1F for NASGetServingSystem() +struct sNASGetServingSystemResponse_3GPP2PRLIndicator +{ + eQMINASPRLIndicator mPRLIndicator; +}; + +// Structure to describe response TLV 0x20 for NASGetServingSystem() +struct sNASGetServingSystemResponse_DualTransferModeIndication +{ + eQMINASDualTransferMode mDualTransferMode; +}; + +// Structure to describe response TLV 0x21 for NASGetServingSystem() +struct sNASGetServingSystemResponse_DetailedServiceInformation +{ + eQMINASServiceStatus mServiceStatus; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + eQMINASServiceStatus mCDMA1xEVDOServiceStatus; + eQMINASCDMA1xEVDOHybridInformation mCDMA1xEVDOHybridInformation; + eQMINASSystemForbidden mSystemForbidden; +}; + +// Structure to describe response TLV 0x22 for NASGetServingSystem() +struct sNASGetServingSystemResponse_CDMASystemInformation +{ + UINT16 mMobileCountryCode; + UINT8 mIMSI_11_12; +}; + +// Structure to describe response TLV 0x23 for NASGetServingSystem() +struct sNASGetServingSystemResponse_CDMA1xEVDOPersonality +{ + eQMINASCDMA1xEVDOPersonality mCDMA1xEVDOPersonality; +}; + +// Structure to describe response TLV 0x24 for NASGetServingSystem() +struct sNASGetServingSystemResponse_TrackingAreaCode +{ + UINT16 mTrackingAreaCode; +}; + +// Structure to describe response TLV 0x25 for NASGetServingSystem() +struct sNASGetServingSystemResponse_CallBarring +{ + eQMINASCallBarringStatus mCSCallBarringStatus; + eQMINASCallBarringStatus mPSCallBarringStatus; +}; + +// Structure to describe response TLV 0x26 for NASGetServingSystem() +struct sNASGetServingSystemResponse_UMTSPSC +{ + UINT16 mPrimaryScramblingCode; +}; + +// Structure to describe response TLV 0x27 for NASGetServingSystem() +struct sNASGetServingSystemResponse_PCSInfo +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe response TLV 0x28 for NASGetServingSystem() +struct sNASGetServingSystemResponse_HSCallStatus +{ + eQMINASHighSpeedCallStatus mHighSpeedCallStatus; +}; + +// Structure to describe indication TLV 0x01 for NAS ServingSystemIndication +struct sNASServingSystemIndication_ServingSystem +{ + eQMINASRegistrationStates mRegistrationState; + eQMINASCSPSAttachStates mCSAttachState; + eQMINASCSPSAttachStates mPSAttachState; + eQMINASRegisteredNetworks mRegisteredNetwork; + UINT8 mNumberOfRadioInterfacesInUse; + + // This array must be the size specified by mNumberOfRadioInterfacesInUse + // eQMINASRadioInterfaces mRadioInterface[1]; +}; + +// Structure to describe indication TLV 0x10 for NAS ServingSystemIndication +struct sNASServingSystemIndication_RoamingIndicator +{ + eQMINASRoamingIndicators mRoamingIndicator; +}; + +// Structure to describe indication TLV 0x11 for NAS ServingSystemIndication +struct sNASServingSystemIndication_DataServices +{ + UINT8 mNumberOfDataCapabilities; + + // This array must be the size specified by mNumberOfDataCapabilities + // eQMINASDataServiceCapabilities2 mDataCapability[1]; +}; + +// Structure to describe indication TLV 0x12 for NAS ServingSystemIndication +struct sNASServingSystemIndication_CurrentPLMN +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + UINT8 mDescriptionLength; + + // This array must be the size specified by mDescriptionLength + // char mDescription[1]; +}; + +// Structure to describe indication TLV 0x13 for NAS ServingSystemIndication +struct sNASServingSystemIndication_SystemID +{ + UINT16 mSystemID; + UINT16 mNetworkID; +}; + +// Structure to describe indication TLV 0x14 for NAS ServingSystemIndication +struct sNASServingSystemIndication_BaseStation +{ + UINT16 mBaseStationID; + INT32 mLatitude; + INT32 mLongitude; +}; + +// Structure to describe indication TLV 0x15 for NAS ServingSystemIndication +struct sNASServingSystemIndication_RoamingList +{ + UINT8 mNumberOfInstances; + + struct sInstance + { + eQMINASRadioInterfaces mRadioInterface; + eQMINASRoamingIndicators mRoamingIndicator; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x16 for NAS ServingSystemIndication +struct sNASServingSystemIndication_DefaultRoaming +{ + eQMINASRoamingIndicators mRoamingIndicator; +}; + +// Structure to describe indication TLV 0x17 for NAS ServingSystemIndication +struct sNASServingSystemIndication_TimeZone +{ + UINT8 mLeapSeconds; + INT8 mLocalTimeOffset; + INT8 mDaylightSavingsInEffect; +}; + +// Structure to describe indication TLV 0x18 for NAS ServingSystemIndication +struct sNASServingSystemIndication_ProtocolRevision +{ + eQMINASRevision mProtocolRevision; +}; + +// Structure to describe indication TLV 0x19 for NAS ServingSystemIndication +struct sNASServingSystemIndication_PLMNChange +{ + INT8 mPLMNChanged; +}; + +// Structure to describe indication TLV 0x1A for NAS ServingSystemIndication +struct sNASServingSystemIndication_3GPPTimeZone +{ + INT8 m3GPPTimeZone; +}; + +// Structure to describe indication TLV 0x1B for NAS ServingSystemIndication +struct sNASServingSystemIndication_3GPPDaylightSavingAdjustment +{ + eQMINASDaylightSavingsAdjustment mDaylightSavingsAdjustment; +}; + +// Structure to describe indication TLV 0x1C for NAS ServingSystemIndication +struct sNASServingSystemIndication_3GPPUniversalTimeAndZone +{ + UINT16 mYear; + UINT8 mMonth; + UINT8 mDay; + UINT8 mHour; + UINT8 mMinute; + UINT8 mSecond; + INT8 mTimeZoneOffset; +}; + +// Structure to describe indication TLV 0x1D for NAS ServingSystemIndication +struct sNASServingSystemIndication_3GPPLocationAreaCode +{ + UINT16 mLocationAreaCode; +}; + +// Structure to describe indication TLV 0x1E for NAS ServingSystemIndication +struct sNASServingSystemIndication_3GPPCellID +{ + UINT32 mCellID; +}; + +// Structure to describe indication TLV 0x1F for NAS ServingSystemIndication +struct sNASServingSystemIndication_3GPP2ConcurrentService +{ + eQMINASConcurrentService mConcurrentService; +}; + +// Structure to describe indication TLV 0x20 for NAS ServingSystemIndication +struct sNASServingSystemIndication_3GPP2PRLIndicator +{ + eQMINASPRLIndicator mPRLIndicator; +}; + +// Structure to describe indication TLV 0x21 for NAS ServingSystemIndication +struct sNASServingSystemIndication_DualTransferModeIndication +{ + eQMINASDualTransferMode mDualTransferMode; +}; + +// Structure to describe indication TLV 0x22 for NAS ServingSystemIndication +struct sNASServingSystemIndication_DetailedServiceInformation +{ + eQMINASServiceStatus mServiceStatus; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + eQMINASServiceStatus mCDMA1xEVDOServiceStatus; + eQMINASCDMA1xEVDOHybridInformation mCDMA1xEVDOHybridInformation; + eQMINASSystemForbidden mSystemForbidden; +}; + +// Structure to describe indication TLV 0x23 for NAS ServingSystemIndication +struct sNASServingSystemIndication_CDMASystemInformation +{ + UINT16 mMobileCountryCode; + UINT8 mIMSI_11_12; +}; + +// Structure to describe indication TLV 0x24 for NAS ServingSystemIndication +struct sNASServingSystemIndication_CDMA1xEVDOPersonality +{ + eQMINASCDMA1xEVDOPersonality mCDMA1xEVDOPersonality; +}; + +// Structure to describe indication TLV 0x25 for NAS ServingSystemIndication +struct sNASServingSystemIndication_TrackingAreaCode +{ + UINT16 mTrackingAreaCode; +}; + +// Structure to describe indication TLV 0x26 for NAS ServingSystemIndication +struct sNASServingSystemIndication_CallBarring +{ + eQMINASCallBarringStatus mCSCallBarringStatus; + eQMINASCallBarringStatus mPSCallBarringStatus; +}; + +// Structure to describe indication TLV 0x27 for NAS ServingSystemIndication +struct sNASServingSystemIndication_PLMNChangeStatus +{ + INT8 mNoPLMNChange; +}; + +// Structure to describe indication TLV 0x28 for NAS ServingSystemIndication +struct sNASServingSystemIndication_UMTSPSC +{ + UINT16 mPrimaryScramblingCode; +}; + +// Structure to describe indication TLV 0x29 for NAS ServingSystemIndication +struct sNASServingSystemIndication_PCSInfo +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe indication TLV 0x2A for NAS ServingSystemIndication +struct sNASServingSystemIndication_HSCallStatus +{ + eQMINASHighSpeedCallStatus mHighSpeedCallStatus; +}; + +// Structure to describe response TLV 0x01 for NASGetHomeNetwork() +struct sNASGetHomeNetworkResponse_HomeNetwork +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + UINT8 mDescriptionLength; + + // This array must be the size specified by mDescriptionLength + // char mDescription[1]; +}; + +// Structure to describe response TLV 0x10 for NASGetHomeNetwork() +struct sNASGetHomeNetworkResponse_HomeIDs +{ + UINT16 mSystemID; + UINT16 mNetworkID; +}; + +// Structure to describe response TLV 0x11 for NASGetHomeNetwork() +struct sNASGetHomeNetworkResponse_ExtendedHomeNetwork +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + eQMINASNetworkDescriptionDisplays mDisplayNetworkDescription; + eQMINASNetworkDescriptionEncodings mNetworkDescriptionEncoding; + UINT8 mNetworkDescriptionLength; + + // This array must be the size specified by mNetworkDescriptionLength + // UINT8 mNetworkDescription[1]; +}; + +// Structure to describe response TLV 0x12 for NASGetHomeNetwork() +struct sNASGetHomeNetworkResponse_3GPPHomeNetworkMNC +{ + INT8 mHomeNetworkIs3GPP; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe response TLV 0x10 for NASGetPreferredNetworks() +struct sNASGetPreferredNetworksResponse_Networks +{ + UINT16 mNumberOfPreferredNetworks; + + struct sNetwork + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + + // Padding out 6 bits + UINT8 mReserved1:6; + + bool mGSMCompact:1; + bool mGSM:1; + + // Padding out 6 bits + UINT8 mReserved2:6; + + bool mLTE:1; + bool mUMTS:1; + }; + + // This array must be the size specified by mNumberOfPreferredNetworks + // sNetwork mNetworks[1]; +}; + +// Structure to describe response TLV 0x11 for NASGetPreferredNetworks() +struct sNASGetPreferredNetworksResponse_StaticNetworks +{ + UINT16 mNumberOfPreferredNetworks; + + struct sNetwork + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + + // Padding out 6 bits + UINT8 mReserved1:6; + + bool mGSMCompact:1; + bool mGSM:1; + + // Padding out 6 bits + UINT8 mReserved2:6; + + bool mLTE:1; + bool mUMTS:1; + }; + + // This array must be the size specified by mNumberOfPreferredNetworks + // sNetwork mNetworks[1]; +}; + +// Structure to describe response TLV 0x12 for NASGetPreferredNetworks() +struct sNASGetPreferredNetworksResponse_NetworksWithPCSDigitStatus +{ + UINT8 mNumberOfPreferredNetworks; + + struct sNetwork + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; + }; + + // This array must be the size specified by mNumberOfPreferredNetworks + // sNetwork mNetworks[1]; +}; + +// Structure to describe response TLV 0x13 for NASGetPreferredNetworks() +struct sNASGetPreferredNetworksResponse_StaticNetworksWithPCSDigitStatus +{ + UINT8 mNumberOfPreferredNetworks; + + struct sNetwork + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; + }; + + // This array must be the size specified by mNumberOfPreferredNetworks + // sNetwork mNetworks[1]; +}; + +// Structure to describe request TLV 0x10 for NASSetPreferredNetworks() +struct sNASSetPreferredNetworksRequest_Networks +{ + UINT16 mNumberOfPreferredNetworks; + + struct sNetwork + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + + // Padding out 6 bits + UINT8 mReserved1:6; + + bool mGSMCompact:1; + bool mGSM:1; + + // Padding out 6 bits + UINT8 mReserved2:6; + + bool mLTE:1; + bool mUMTS:1; + }; + + // This array must be the size specified by mNumberOfPreferredNetworks + // sNetwork mNetworks[1]; +}; + +// Structure to describe request TLV 0x11 for NASSetPreferredNetworks() +struct sNASSetPreferredNetworksRequest_NetworksWithPCSDigitStatus +{ + UINT8 mNumberOfPreferredNetworks; + + struct sNetwork + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; + }; + + // This array must be the size specified by mNumberOfPreferredNetworks + // sNetwork mNetworks[1]; +}; + +// Structure to describe request TLV 0x12 for NASSetPreferredNetworks() +struct sNASSetPreferredNetworksRequest_Clear +{ + INT8 mClearPreferredNetworks; +}; + +// Structure to describe response TLV 0x10 for NASGetForbiddenNetworks() +struct sNASGetForbiddenNetworksResponse_Networks +{ + UINT16 mNumberOfForbiddenNetworks; + + struct sNetwork + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + }; + + // This array must be the size specified by mNumberOfForbiddenNetworks + // sNetwork mNetworks[1]; +}; + +// Structure to describe request TLV 0x10 for NASSetForbiddenNetworks() +struct sNASSetForbiddenNetworksRequest_Networks +{ + UINT16 mNumberOfForbiddenNetworks; + + struct sNetwork + { + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + }; + + // This array must be the size specified by mNumberOfForbiddenNetworks + // sNetwork mNetworks[1]; +}; + +// Structure to describe request TLV 0x01 for NASSetTechnologyPreference() +struct sNASSetTechnologyPreferenceRequest_Preference +{ + // mTechnology must be the first two bits of a UINT8 + // whose remaining bits are described in the optional + // structs following. + + // The following union is based on the value of mTechnology + union uValOfTechnology + { + // Always present + eQMINASTechPrefs mTechnology:2; + + // If the value of mTechnology == 1 + struct sTechnologyIs1 + { + // Padding out 2 bits + UINT8 mReserved1:2; + + UINT8 mAnalog:1; + UINT8 mDigital:1; + UINT8 mEVDO:1; + UINT8 mLTE:1; + + // Padding out 2 bits + UINT8 mReserved2:2; + }; + + sTechnologyIs1 mTechnologyIs1; + + // If the value of mTechnology == 2 + struct sTechnologyIs2 + { + // Padding out 2 bits + UINT8 mReserved3:2; + + UINT8 mGSM:1; + UINT8 mWCDMA:1; + UINT8 mEVDO:1; + UINT8 mLTE:1; + + // Padding out 2 bits + UINT8 mReserved4:2; + }; + + sTechnologyIs2 mTechnologyIs2; + + // Padding out 8 bits + UINT8 mReserved5; + }; + + uValOfTechnology mValOfTechnology; + + // Padding out 8 bits + UINT8 mReserved6; + + eQMINASTechPrefDurations mDuration; +}; + +// Structure to describe response TLV 0x01 for NASGetTechnologyPreference() +struct sNASGetTechnologyPreferenceResponse_ActivePreference +{ + // mTechnology must be the first two bits of a UINT8 + // whose remaining bits are described in the optional + // structs following. + + // The following union is based on the value of mTechnology + union uValOfTechnology + { + // Always present + eQMINASTechPrefs mTechnology:2; + + // If the value of mTechnology == 1 + struct sTechnologyIs1 + { + // Padding out 2 bits + UINT8 mReserved1:2; + + UINT8 mAnalog:1; + UINT8 mDigital:1; + UINT8 mEVDO:1; + UINT8 mLTE:1; + + // Padding out 2 bits + UINT8 mReserved2:2; + }; + + sTechnologyIs1 mTechnologyIs1; + + // If the value of mTechnology == 2 + struct sTechnologyIs2 + { + // Padding out 2 bits + UINT8 mReserved3:2; + + UINT8 mGSM:1; + UINT8 mWCDMA:1; + UINT8 mEVDO:1; + UINT8 mLTE:1; + + // Padding out 2 bits + UINT8 mReserved4:2; + }; + + sTechnologyIs2 mTechnologyIs2; + + // Padding out 8 bits + UINT8 mReserved5; + }; + + uValOfTechnology mValOfTechnology; + + // Padding out 8 bits + UINT8 mReserved6; + + eQMINASTechPrefDurations mDuration; +}; + +// Structure to describe response TLV 0x10 for NASGetTechnologyPreference() +struct sNASGetTechnologyPreferenceResponse_PersistentPreference +{ + // mTechnology must be the first two bits of a UINT8 + // whose remaining bits are described in the optional + // structs following. + + // The following union is based on the value of mTechnology + union uValOfTechnology + { + // Always present + eQMINASTechPrefs mTechnology:2; + + // If the value of mTechnology == 1 + struct sTechnologyIs1 + { + // Padding out 2 bits + UINT8 mReserved1:2; + + UINT8 mAnalog:1; + UINT8 mDigital:1; + UINT8 mEVDO:1; + UINT8 mLTE:1; + + // Padding out 2 bits + UINT8 mReserved2:2; + }; + + sTechnologyIs1 mTechnologyIs1; + + // If the value of mTechnology == 2 + struct sTechnologyIs2 + { + // Padding out 2 bits + UINT8 mReserved3:2; + + UINT8 mGSM:1; + UINT8 mWCDMA:1; + UINT8 mEVDO:1; + UINT8 mLTE:1; + + // Padding out 2 bits + UINT8 mReserved4:2; + }; + + sTechnologyIs2 mTechnologyIs2; + + // Padding out 8 bits + UINT8 mReserved5; + }; + + uValOfTechnology mValOfTechnology; + + // Padding out 8 bits + UINT8 mReserved6; +}; + +// Structure to describe response TLV 0x01 for NASGetACCOLC() +struct sNASGetACCOLCResponse_ACCOLC +{ + UINT8 mACCOLC; +}; + +// Structure to describe request TLV 0x01 for NASSetACCOLC() +struct sNASSetACCOLCRequest_ACCOLC +{ + char mSPC[6]; + UINT8 mACCOLC; +}; + +// Structure to describe indication TLV 0x01 for NAS GetSystemPreference +struct sNASGetSystemPreferenceIndication_Pref +{ + eQMINASSystemPreferences mSystemPreference; +}; + +// Structure to describe response TLV 0x11 for NASGetNetworkParameters() +struct sNASGetNetworkParametersResponse_SCI +{ + UINT8 mSlotCycleIndex; +}; + +// Structure to describe response TLV 0x12 for NASGetNetworkParameters() +struct sNASGetNetworkParametersResponse_SCM +{ + UINT8 mStationClassMark; +}; + +// Structure to describe response TLV 0x13 for NASGetNetworkParameters() +struct sNASGetNetworkParametersResponse_Registration +{ + INT8 mRegisterOnHomeSystem; + INT8 mRegisterOnForeignSystem; + INT8 mRegisterOnForeignNetwork; +}; + +// Structure to describe response TLV 0x14 for NASGetNetworkParameters() +struct sNASGetNetworkParametersResponse_CDMA1xEVDORevision +{ + INT8 mForceCDMA1xEVDORev0; +}; + +// Structure to describe response TLV 0x15 for NASGetNetworkParameters() +struct sNASGetNetworkParametersResponse_CDMA1xEVDOSCPCustom +{ + INT8 mCDMA1xEVDOSCPCustomConfig; + bool mSubtype2PhysicalLayer:1; + bool mEnhancedCCMAC:1; + bool mEnhancedACMAC:1; + bool mEnhancedFTCMAC:1; + bool mSubtype3RTCMAC:1; + bool mSubtype1RTCMAC:1; + bool mEnhancedIdle:1; + bool mGenericMultimodeCapableDiscPort:1; + + // Padding out 24 bits + UINT8 mReserved1[3]; + + bool mGenericBroadcast:1; + + // Padding out 31 bits + UINT8 mReserved2:7; + UINT8 mReserved3[3]; + + bool mSNMultiflowPacketApplication:1; + bool mSNEnhancedMultiflowPacketApplication:1; + + // Padding out 30 bits + UINT8 mReserved4:6; + UINT8 mReserved5[3]; +}; + +// Structure to describe response TLV 0x16 for NASGetNetworkParameters() +struct sNASGetNetworkParametersResponse_Roaming +{ + eQMINASRoamingPreferences mRoamPreference; +}; + +// Structure to describe response TLV 0x17 for NASGetNetworkParameters() +struct sNASGetNetworkParametersResponse_ForceCDMA1xEVDOSCP +{ + eQMINASForceCDMA1xEVDOSCP mForceCDMA1xEVDOSCP; +}; + +// Structure to describe request TLV 0x10 for NASSetNetworkParameters() +struct sNASSetNetworkParametersRequest_SPC +{ + char mSPC[6]; +}; + +// Structure to describe request TLV 0x14 for NASSetNetworkParameters() +struct sNASSetNetworkParametersRequest_CDMA1xEVDORevision +{ + INT8 mForceCDMA1xEVDORev0; +}; + +// Structure to describe request TLV 0x15 for NASSetNetworkParameters() +struct sNASSetNetworkParametersRequest_CDMA1xEVDOSCPCustom +{ + INT8 mCDMA1xEVDOSCPCustomConfig; + bool mSubtype2PhysicalLayer:1; + bool mEnhancedCCMAC:1; + bool mEnhancedACMAC:1; + bool mEnhancedFTCMAC:1; + bool mSubtype3RTCMAC:1; + bool mSubtype1RTCMAC:1; + bool mEnhancedIdle:1; + bool mGenericMultimodeCapableDiscPort:1; + + // Padding out 24 bits + UINT8 mReserved1[3]; + + bool mGenericBroadcast:1; + + // Padding out 31 bits + UINT8 mReserved2:7; + UINT8 mReserved3[3]; + + bool mSNMultiflowPacketApplication:1; + bool mSNEnhancedMultiflowPacketApplication:1; + + // Padding out 30 bits + UINT8 mReserved4:6; + UINT8 mReserved5[3]; +}; + +// Structure to describe request TLV 0x16 for NASSetNetworkParameters() +struct sNASSetNetworkParametersRequest_Roaming +{ + eQMINASRoamingPreferences mRoamPreference; +}; + +// Structure to describe response TLV 0x01 for NASGetRFInfo() +struct sNASGetRFInfoResponse_RFInfo +{ + UINT8 mNumberOfInstances; + + struct sInstance + { + eQMINASRadioInterfaces mRadioInterface; + eQMINASBandClasses mActiveBandClass; + UINT16 mActiveChannel; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x01 for NASGetANAAAAuthenticationStatus() +struct sNASGetANAAAAuthenticationStatusResponse_Status +{ + eQMINASANAAAAuthenticationStatus mANAAAAuthenticationStatus; +}; + +// Structure to describe request TLV 0x10 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_EmergencyMode +{ + INT8 mEmergencyModeOn; +}; + +// Structure to describe request TLV 0x11 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_Mode +{ + bool mCDMA1x:1; + bool mCDMA1xEVDO:1; + bool mGSM:1; + bool mUMTS:1; + bool mLTE:1; + bool mTDSCDMA:1; + + // Padding out 10 bits + UINT8 mReserved1:2; + UINT8 mReserved2; +}; + +// Structure to describe request TLV 0x12 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_Band +{ + bool mBandClass0ASystem:1; + bool mBandClass0BSystem:1; + bool mBandClass1:1; + bool mBandClass2:1; + bool mBandClass3ASystem:1; + bool mBandClass4:1; + bool mBandClass5:1; + bool mGSMDCS:1; + bool mGSMPrimary:1; + bool mGSMExtended:1; + bool mBandClass6:1; + bool mBandClass7:1; + bool mBandClass8:1; + bool mBandClass9:1; + bool mBandClass10:1; + bool mBandClass11:1; + bool mGSM450:1; + bool mGSM480:1; + bool mGSM750:1; + bool mGSM850:1; + bool mGSMRailways:1; + bool mGSMPCS:1; + bool mWCDMA2100I:1; + bool mWCDMAPCS1900:1; + bool mWCDMADCS1800:1; + bool mWCDMA1700US:1; + bool mWCDMA850:1; + bool mWCDMA800:1; + bool mBandClass12:1; + bool mBandClass14:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mBandClass15:1; + + // Padding out 16 bits + UINT8 mReserved2[2]; + + bool mWCDMA2600:1; + bool mWCDMA900:1; + bool mWCDMA1700Japan:1; + + // Padding out 5 bits + UINT8 mReserved3:5; + + bool mBandClass16:1; + bool mBandClass17:1; + bool mBandClass18:1; + bool mBandClass19:1; + + // Padding out 4 bits + UINT8 mReserved4:4; +}; + +// Structure to describe request TLV 0x13 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_PRL +{ + eQMINASPRLPreferences mPRLPreference; +}; + +// Structure to describe request TLV 0x14 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_Roaming +{ + eQMINASRoamingPreferences2 mRoamingPreference; +}; + +// Structure to describe request TLV 0x15 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_LTEBand +{ + bool mEUTRABand1:1; + bool mEUTRABand2:1; + bool mEUTRABand3:1; + bool mEUTRABand4:1; + bool mEUTRABand5:1; + bool mEUTRABand6:1; + bool mEUTRABand7:1; + bool mEUTRABand8:1; + bool mEUTRABand9:1; + bool mEUTRABand10:1; + bool mEUTRABand11:1; + bool mEUTRABand12:1; + bool mEUTRABand13:1; + bool mEUTRABand14:1; + + // Padding out 2 bits + UINT8 mReserved1:2; + + bool mEUTRABand17:1; + bool mEUTRABand18:1; + bool mEUTRABand19:1; + bool mEUTRABand20:1; + bool mEUTRABand21:1; + + // Padding out 2 bits + UINT8 mReserved2:2; + + bool mEUTRABand24:1; + bool mEUTRABand25:1; + + // Padding out 7 bits + UINT8 mReserved3:7; + + bool mEUTRABand33:1; + bool mEUTRABand34:1; + bool mEUTRABand35:1; + bool mEUTRABand36:1; + bool mEUTRABand37:1; + bool mEUTRABand38:1; + bool mEUTRABand39:1; + bool mEUTRABand40:1; + bool mEUTRABand41:1; + bool mEUTRABand42:1; + bool mEUTRABand43:1; + + // Padding out 21 bits + UINT8 mReserved4:5; + UINT8 mReserved5[2]; +}; + +// Structure to describe request TLV 0x16 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_NetworkSelection +{ + eQMINASNetworkSelection mNetworkSelection; + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; +}; + +// Structure to describe request TLV 0x17 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_ChangeDuration +{ + eQMINASChangeDuration mChangeDuration; +}; + +// Structure to describe request TLV 0x18 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_ServiceDomain +{ + eQMINASServiceDomainPrefs mServiceDomainPreference; +}; + +// Structure to describe request TLV 0x19 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_GWAcquisitionOrder +{ + eQMINASAcquisitionOrder mAcquisitionOrderPreference; +}; + +// Structure to describe request TLV 0x1A for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_PCSInfo +{ + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe request TLV 0x1B for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_Domain +{ + eQMINASServiceDomainPrefs mServiceDomainPreference; +}; + +// Structure to describe request TLV 0x1C for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_Acquisition +{ + eQMINASAcquisitionOrder mAcquisitionOrderPreference; +}; + +// Structure to describe request TLV 0x1D for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_TDSCDMABand +{ + bool mTDSCDMABandA:1; + bool mTDSCDMABandB:1; + bool mTDSCDMABandC:1; + bool mTDSCDMABandD:1; + bool mTDSCDMABandE:1; + bool mTDSCDMABandF:1; + + // Padding out 58 bits + UINT8 mReserved1:2; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x1E for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_AcquisitionOrder +{ + UINT8 mNumberOfRadioInterfaces; + + // This array must be the size specified by mNumberOfRadioInterfaces + // eQMINASRadioInterfaces mRadioInterface[1]; +}; + +// Structure to describe request TLV 0x1F for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_RegistrationRestriction +{ + eQMINASRegistrationRestrictions mRegistrationRestriction; +}; + +// Structure to describe request TLV 0x20 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_CSGID +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; + UINT32 mCSGID; + eQMINASRadioAccessTechnologies mRadioAccessTechnology; +}; + +// Structure to describe request TLV 0x21 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_ModemUsagePreference +{ + eQMINASModemUsagePreferences mModemUsagePreference; +}; + +// Structure to describe request TLV 0x22 for NASSetSystemSelectionPref() +struct sNASSetSystemSelectionPrefRequest_RadioInterface +{ + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe response TLV 0x10 for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_EmergencyMode +{ + INT8 mEmergencyModeOn; +}; + +// Structure to describe response TLV 0x11 for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_Mode +{ + bool mCDMA1x:1; + bool mCDMA1xEVDO:1; + bool mGSM:1; + bool mUMTS:1; + bool mLTE:1; + bool mTDSCDMA:1; + + // Padding out 10 bits + UINT8 mReserved1:2; + UINT8 mReserved2; +}; + +// Structure to describe response TLV 0x12 for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_Band +{ + bool mBandClass0ASystem:1; + bool mBandClass0BSystem:1; + bool mBandClass1:1; + bool mBandClass2:1; + bool mBandClass3ASystem:1; + bool mBandClass4:1; + bool mBandClass5:1; + bool mGSMDCS:1; + bool mGSMPrimary:1; + bool mGSMExtended:1; + bool mBandClass6:1; + bool mBandClass7:1; + bool mBandClass8:1; + bool mBandClass9:1; + bool mBandClass10:1; + bool mBandClass11:1; + bool mGSM450:1; + bool mGSM480:1; + bool mGSM750:1; + bool mGSM850:1; + bool mGSMRailways:1; + bool mGSMPCS:1; + bool mWCDMA2100I:1; + bool mWCDMAPCS1900:1; + bool mWCDMADCS1800:1; + bool mWCDMA1700US:1; + bool mWCDMA850:1; + bool mWCDMA800:1; + bool mBandClass12:1; + bool mBandClass14:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mBandClass15:1; + + // Padding out 16 bits + UINT8 mReserved2[2]; + + bool mWCDMA2600:1; + bool mWCDMA900:1; + bool mWCDMA1700Japan:1; + + // Padding out 5 bits + UINT8 mReserved3:5; + + bool mBandClass16:1; + bool mBandClass17:1; + bool mBandClass18:1; + bool mBandClass19:1; + + // Padding out 4 bits + UINT8 mReserved4:4; +}; + +// Structure to describe response TLV 0x13 for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_PRL +{ + eQMINASPRLPreferences mPRLPreference; +}; + +// Structure to describe response TLV 0x14 for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_Roaming +{ + eQMINASRoamingPreferences2 mRoamingPreference; +}; + +// Structure to describe response TLV 0x15 for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_LTEBand +{ + bool mEUTRABand1:1; + bool mEUTRABand2:1; + bool mEUTRABand3:1; + bool mEUTRABand4:1; + bool mEUTRABand5:1; + bool mEUTRABand6:1; + bool mEUTRABand7:1; + bool mEUTRABand8:1; + bool mEUTRABand9:1; + bool mEUTRABand10:1; + bool mEUTRABand11:1; + bool mEUTRABand12:1; + bool mEUTRABand13:1; + bool mEUTRABand14:1; + + // Padding out 2 bits + UINT8 mReserved1:2; + + bool mEUTRABand17:1; + bool mEUTRABand18:1; + bool mEUTRABand19:1; + bool mEUTRABand20:1; + bool mEUTRABand21:1; + + // Padding out 2 bits + UINT8 mReserved2:2; + + bool mEUTRABand24:1; + bool mEUTRABand25:1; + + // Padding out 7 bits + UINT8 mReserved3:7; + + bool mEUTRABand33:1; + bool mEUTRABand34:1; + bool mEUTRABand35:1; + bool mEUTRABand36:1; + bool mEUTRABand37:1; + bool mEUTRABand38:1; + bool mEUTRABand39:1; + bool mEUTRABand40:1; + bool mEUTRABand41:1; + bool mEUTRABand42:1; + bool mEUTRABand43:1; + + // Padding out 21 bits + UINT8 mReserved4:5; + UINT8 mReserved5[2]; +}; + +// Structure to describe response TLV 0x16 for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_NetworkSelection +{ + eQMINASNetworkSelection mNetworkSelection; +}; + +// Structure to describe response TLV 0x18 for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_Domain +{ + eQMINASServiceDomainPrefs mServiceDomainPreference; +}; + +// Structure to describe response TLV 0x19 for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_Acquisition +{ + eQMINASAcquisitionOrder mAcquisitionOrderPreference; +}; + +// Structure to describe response TLV 0x1A for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_TDSCDMABand +{ + bool mTDSCDMABandA:1; + bool mTDSCDMABandB:1; + bool mTDSCDMABandC:1; + bool mTDSCDMABandD:1; + bool mTDSCDMABandE:1; + bool mTDSCDMABandF:1; + + // Padding out 58 bits + UINT8 mReserved1:2; + UINT8 mReserved2[7]; +}; + +// Structure to describe response TLV 0x1B for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_ManualPLMN +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe response TLV 0x1C for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_AcquisitionOrder +{ + UINT8 mNumberOfRadioInterfaces; + + // This array must be the size specified by mNumberOfRadioInterfaces + // eQMINASRadioInterfaces mRadioInterface[1]; +}; + +// Structure to describe response TLV 0x1D for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_RegistrationRestriction +{ + eQMINASRegistrationRestrictions mRegistrationRestriction; +}; + +// Structure to describe response TLV 0x1E for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_CSGID +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; + UINT32 mCSGID; + eQMINASRadioAccessTechnologies mRadioAccessTechnology; +}; + +// Structure to describe response TLV 0x1F for NASGetSystemSelectionPref() +struct sNASGetSystemSelectionPrefResponse_ModemUsagePreference +{ + eQMINASModemUsagePreferences mModemUsagePreference; +}; + +// Structure to describe indication TLV 0x10 for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_EmergencyMode +{ + INT8 mEmergencyModeOn; +}; + +// Structure to describe indication TLV 0x11 for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_Mode +{ + bool mCDMA1x:1; + bool mCDMA1xEVDO:1; + bool mGSM:1; + bool mUMTS:1; + bool mLTE:1; + bool mTDSCDMA:1; + + // Padding out 10 bits + UINT8 mReserved1:2; + UINT8 mReserved2; +}; + +// Structure to describe indication TLV 0x12 for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_Band +{ + bool mBandClass0ASystem:1; + bool mBandClass0BSystem:1; + bool mBandClass1:1; + bool mBandClass2:1; + bool mBandClass3ASystem:1; + bool mBandClass4:1; + bool mBandClass5:1; + bool mGSMDCS:1; + bool mGSMPrimary:1; + bool mGSMExtended:1; + bool mBandClass6:1; + bool mBandClass7:1; + bool mBandClass8:1; + bool mBandClass9:1; + bool mBandClass10:1; + bool mBandClass11:1; + bool mGSM450:1; + bool mGSM480:1; + bool mGSM750:1; + bool mGSM850:1; + bool mGSMRailways:1; + bool mGSMPCS:1; + bool mWCDMA2100I:1; + bool mWCDMAPCS1900:1; + bool mWCDMADCS1800:1; + bool mWCDMA1700US:1; + bool mWCDMA850:1; + bool mWCDMA800:1; + bool mBandClass12:1; + bool mBandClass14:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mBandClass15:1; + + // Padding out 16 bits + UINT8 mReserved2[2]; + + bool mWCDMA2600:1; + bool mWCDMA900:1; + bool mWCDMA1700Japan:1; + + // Padding out 5 bits + UINT8 mReserved3:5; + + bool mBandClass16:1; + bool mBandClass17:1; + bool mBandClass18:1; + bool mBandClass19:1; + + // Padding out 4 bits + UINT8 mReserved4:4; +}; + +// Structure to describe indication TLV 0x13 for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_PRL +{ + eQMINASPRLPreferences mPRLPreference; +}; + +// Structure to describe indication TLV 0x14 for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_Roaming +{ + eQMINASRoamingPreferences2 mRoamingPreference; +}; + +// Structure to describe indication TLV 0x15 for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_LTEBand +{ + bool mEUTRABand1:1; + bool mEUTRABand2:1; + bool mEUTRABand3:1; + bool mEUTRABand4:1; + bool mEUTRABand5:1; + bool mEUTRABand6:1; + bool mEUTRABand7:1; + bool mEUTRABand8:1; + bool mEUTRABand9:1; + bool mEUTRABand10:1; + bool mEUTRABand11:1; + bool mEUTRABand12:1; + bool mEUTRABand13:1; + bool mEUTRABand14:1; + + // Padding out 2 bits + UINT8 mReserved1:2; + + bool mEUTRABand17:1; + bool mEUTRABand18:1; + bool mEUTRABand19:1; + bool mEUTRABand20:1; + bool mEUTRABand21:1; + + // Padding out 2 bits + UINT8 mReserved2:2; + + bool mEUTRABand24:1; + bool mEUTRABand25:1; + + // Padding out 7 bits + UINT8 mReserved3:7; + + bool mEUTRABand33:1; + bool mEUTRABand34:1; + bool mEUTRABand35:1; + bool mEUTRABand36:1; + bool mEUTRABand37:1; + bool mEUTRABand38:1; + bool mEUTRABand39:1; + bool mEUTRABand40:1; + bool mEUTRABand41:1; + bool mEUTRABand42:1; + bool mEUTRABand43:1; + + // Padding out 21 bits + UINT8 mReserved4:5; + UINT8 mReserved5[2]; +}; + +// Structure to describe indication TLV 0x16 for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_NetworkSelection +{ + eQMINASNetworkSelection mNetworkSelection; +}; + +// Structure to describe indication TLV 0x18 for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_Domain +{ + eQMINASServiceDomainPrefs mServiceDomainPreference; +}; + +// Structure to describe indication TLV 0x19 for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_Acquisition +{ + eQMINASAcquisitionOrder mAcquisitionOrderPreference; +}; + +// Structure to describe indication TLV 0x1A for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_TDSCDMABand +{ + bool mTDSCDMABandA:1; + bool mTDSCDMABandB:1; + bool mTDSCDMABandC:1; + bool mTDSCDMABandD:1; + bool mTDSCDMABandE:1; + bool mTDSCDMABandF:1; + + // Padding out 58 bits + UINT8 mReserved1:2; + UINT8 mReserved2[7]; +}; + +// Structure to describe indication TLV 0x1B for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_ManualPLMN +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe indication TLV 0x1C for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_AcquisitionOrder +{ + UINT8 mNumberOfRadioInterfaces; + + // This array must be the size specified by mNumberOfRadioInterfaces + // eQMINASRadioInterfaces mRadioInterface[1]; +}; + +// Structure to describe indication TLV 0x1D for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_RegistrationRestriction +{ + eQMINASRegistrationRestrictions mRegistrationRestriction; +}; + +// Structure to describe indication TLV 0x1E for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_CSGID +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; + UINT32 mCSGID; + eQMINASRadioAccessTechnologies mRadioAccessTechnology; +}; + +// Structure to describe indication TLV 0x1F for NAS SystemSelectionPrefIndication +struct sNASSystemSelectionPrefIndication_ModemUsagePreference +{ + eQMINASModemUsagePreferences mModemUsagePreference; +}; + +// Structure to describe request TLV 0x01 for NASSetDDTMPreference() +struct sNASSetDDTMPreferenceRequest_DDTM +{ + eQMINASDDTMPreferences mDDTMPreference; + bool mSuppressL2ACK:1; + bool mSuppress1xRegistrations:1; + bool mIgnoreServiceOptionPages:1; + bool mBlockMobileOriginatedSMSAndDBM:1; + + // Padding out 12 bits + UINT8 mReserved1:4; + UINT8 mReserved2; + + eQMINASServiceOptionActions mServiceOptionAction; + UINT8 mNumberOfInstances; + + // This array must be the size specified by mNumberOfInstances + // UINT16 mServiceOption[1]; +}; + +// Structure to describe response TLV 0x01 for NASGetDDTMPreference() +struct sNASGetDDTMPreferenceResponse_DDTM +{ + eQMINASDDTMPreferences mDDTMPreference; + bool mSuppressL2ACK:1; + bool mSuppress1xRegistrations:1; + bool mIgnoreServiceOptionPages:1; + bool mBlockMobileOriginatedSMSAndDBM:1; + + // Padding out 12 bits + UINT8 mReserved1:4; + UINT8 mReserved2; + + eQMINASServiceOptionActions mServiceOptionAction; + UINT8 mNumberOfInstances; + + // This array must be the size specified by mNumberOfInstances + // UINT16 mServiceOption[1]; +}; + +// Structure to describe indication TLV 0x01 for NAS DDTMPreferenceIndication +struct sNASDDTMPreferenceIndication_DDTM +{ + eQMINASDDTMPreferences mDDTMPreference; + bool mSuppressL2ACK:1; + bool mSuppress1xRegistrations:1; + bool mIgnoreServiceOptionPages:1; + bool mBlockMobileOriginatedSMSAndDBM:1; + + // Padding out 12 bits + UINT8 mReserved1:4; + UINT8 mReserved2; + + eQMINASServiceOptionActions mServiceOptionAction; + UINT8 mNumberOfInstances; + + // This array must be the size specified by mNumberOfInstances + // UINT16 mServiceOption[1]; +}; + +// Structure to describe response TLV 0x10 for NASGetOperatorNameData() +struct sNASGetOperatorNameDataResponse_ServiceProviderName +{ + UINT8 mDisplayCondition; + UINT8 mSPNLength; + + // This array must be the size specified by mSPNLength + // UINT8 mSPN[1]; +}; + +// Structure to describe response TLV 0x11 for NASGetOperatorNameData() +struct sNASGetOperatorNameDataResponse_OperatorPLMNList +{ + UINT16 mPLMNListLength; + + struct sPLNM + { + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; + UINT16 mLocationAreaCode1; + UINT16 mLocationAreaCode2; + UINT8 mPLMNNameRecordIdentifier; + }; + + // This array must be the size specified by mPLMNListLength + // sPLNM mPLNMs[1]; +}; + +// Structure to describe response TLV 0x12 for NASGetOperatorNameData() +struct sNASGetOperatorNameDataResponse_PLMNName +{ + UINT8 mPLMNCount; + + struct sPLMNName1 + { + eQMINASPLMNNameEncodingSchemes mPLMNShortEncoding; + eQMINASPLMNNameCountryInitials mPLMNShortCountryInitials; + eQMINASPLMNNameSpareBits mPLMNLongBits; + eQMINASPLMNNameSpareBits mPLMNSpareBits; + UINT8 mPLMNLongLength; + + // This array must be the size specified by mPLMNLongLength + // UINT8 mPLMNLong[1]; + }; + + struct sPLMNName2 + { + UINT8 mPLMNShortLength; + + // This array must be the size specified by mPLMNShortLength + // UINT8 mPLMNShort[1]; + }; + + struct sPLMNName + { + sPLMNName1 mPLMNName1; + sPLMNName2 mPLMNName2; + }; + + // This array must be the size specified by mPLMNCount + // sPLMNName mPLMNNames[1]; +}; + +// Structure to describe response TLV 0x13 for NASGetOperatorNameData() +struct sNASGetOperatorNameDataResponse_OperatorStringName +{ + // String is variable length, but must be size of the container + // char mPLMNOperatorName[1]; +}; + +// Structure to describe response TLV 0x14 for NASGetOperatorNameData() +struct sNASGetOperatorNameDataResponse_NITZInformation1 +{ + eQMINASPLMNNameEncodingSchemes mPLMNShortEncoding; + eQMINASPLMNNameCountryInitials mPLMNShortCountryInitials; + eQMINASPLMNNameSpareBits mPLMNLongBits; + eQMINASPLMNNameSpareBits mPLMNSpareBits; + UINT8 mPLMNLongLength; + + // This array must be the size specified by mPLMNLongLength + // UINT8 mPLMNLong[1]; +}; + +struct sNASGetOperatorNameDataResponse_NITZInformation2 +{ + UINT8 mPLMNShortLength; + + // This array must be the size specified by mPLMNShortLength + // UINT8 mPLMNShort[1]; +}; + +struct sNASGetOperatorNameDataResponse_NITZInformation +{ + sNASGetOperatorNameDataResponse_NITZInformation1 mNASGetOperatorNameDataResponse_NITZInformation1; + sNASGetOperatorNameDataResponse_NITZInformation2 mNASGetOperatorNameDataResponse_NITZInformation2; +}; + +// Structure to describe indication TLV 0x10 for NAS OperatorNameDataIndication +struct sNASOperatorNameDataIndication_ServiceProviderName +{ + UINT8 mDisplayCondition; + UINT8 mSPNLength; + + // This array must be the size specified by mSPNLength + // UINT8 mSPN[1]; +}; + +// Structure to describe indication TLV 0x11 for NAS OperatorNameDataIndication +struct sNASOperatorNameDataIndication_OperatorPLMNList +{ + UINT16 mPLMNListLength; + + struct sPLNM + { + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; + UINT16 mLocationAreaCode1; + UINT16 mLocationAreaCode2; + UINT8 mPLMNNameRecordIdentifier; + }; + + // This array must be the size specified by mPLMNListLength + // sPLNM mPLNMs[1]; +}; + +// Structure to describe indication TLV 0x12 for NAS OperatorNameDataIndication +struct sNASOperatorNameDataIndication_PLMNName +{ + UINT8 mPLMNCount; + + struct sPLMNName1 + { + eQMINASPLMNNameEncodingSchemes mPLMNShortEncoding; + eQMINASPLMNNameCountryInitials mPLMNShortCountryInitials; + eQMINASPLMNNameSpareBits mPLMNLongBits; + eQMINASPLMNNameSpareBits mPLMNSpareBits; + UINT8 mPLMNLongLength; + + // This array must be the size specified by mPLMNLongLength + // UINT8 mPLMNLong[1]; + }; + + struct sPLMNName2 + { + UINT8 mPLMNShortLength; + + // This array must be the size specified by mPLMNShortLength + // UINT8 mPLMNShort[1]; + }; + + struct sPLMNName + { + sPLMNName1 mPLMNName1; + sPLMNName2 mPLMNName2; + }; + + // This array must be the size specified by mPLMNCount + // sPLMNName mPLMNNames[1]; +}; + +// Structure to describe indication TLV 0x13 for NAS OperatorNameDataIndication +struct sNASOperatorNameDataIndication_OperatorStringName +{ + // String is variable length, but must be size of the container + // char mPLMNOperatorName[1]; +}; + +// Structure to describe indication TLV 0x14 for NAS OperatorNameDataIndication +struct sNASOperatorNameDataIndication_NITZInformation1 +{ + eQMINASPLMNNameEncodingSchemes mPLMNShortEncoding; + eQMINASPLMNNameCountryInitials mPLMNShortCountryInitials; + eQMINASPLMNNameSpareBits mPLMNLongBits; + eQMINASPLMNNameSpareBits mPLMNSpareBits; + UINT8 mPLMNLongLength; + + // This array must be the size specified by mPLMNLongLength + // UINT8 mPLMNLong[1]; +}; + +struct sNASOperatorNameDataIndication_NITZInformation2 +{ + UINT8 mPLMNShortLength; + + // This array must be the size specified by mPLMNShortLength + // UINT8 mPLMNShort[1]; +}; + +struct sNASOperatorNameDataIndication_NITZInformation +{ + sNASOperatorNameDataIndication_NITZInformation1 mNASOperatorNameDataIndication_NITZInformation1; + sNASOperatorNameDataIndication_NITZInformation2 mNASOperatorNameDataIndication_NITZInformation2; +}; + +// Structure to describe response TLV 0x10 for NASGetCSPPLMNMode() +struct sNASGetCSPPLMNModeResponse_Mode +{ + INT8 mRestrictManualPLMNSelection; +}; + +// Structure to describe indication TLV 0x10 for NAS CSPPLMNModeIndication +struct sNASCSPPLMNModeIndication_Mode +{ + INT8 mRestrictManualPLMNSelection; +}; + +// Structure to describe request TLV 0x01 for NASUpdateAKEY() +struct sNASUpdateAKEYRequest_AKEY +{ + char mAKEY[26]; +}; + +// Structure to describe request TLV 0x01 for NASGet3GPP2SubscriptionInfo() +struct sNASGet3GPP2SubscriptionInfoRequest_NAMID +{ + UINT8 mNAMID; +}; + +// Structure to describe request TLV 0x10 for NASGet3GPP2SubscriptionInfo() +struct sNASGet3GPP2SubscriptionInfoRequest_InfoMask +{ + bool mNAMName:1; + bool mDirectoryNumber:1; + bool mHomeID:1; + bool mMINBasedIMSI:1; + bool mTrueIMSI:1; + bool mCDMAChannel:1; + bool mMobileDirectoryNumber:1; + + // Padding out 25 bits + UINT8 mReserved1:1; + UINT8 mReserved2[3]; +}; + +// Structure to describe response TLV 0x10 for NASGet3GPP2SubscriptionInfo() +struct sNASGet3GPP2SubscriptionInfoResponse_NAMName +{ + UINT8 mNAMNameLength; + + // This array must be the size specified by mNAMNameLength + // char mNAMName[1]; +}; + +// Structure to describe response TLV 0x11 for NASGet3GPP2SubscriptionInfo() +struct sNASGet3GPP2SubscriptionInfoResponse_DirectoryNumber +{ + UINT8 mDirectoryNumberLength; + + // This array must be the size specified by mDirectoryNumberLength + // char mDirectoryNumber[1]; +}; + +// Structure to describe response TLV 0x12 for NASGet3GPP2SubscriptionInfo() +struct sNASGet3GPP2SubscriptionInfoResponse_HomeID +{ + UINT8 mHomeIDCount; + + struct sHomeID + { + UINT16 mSystemID; + UINT16 mNetworkID; + }; + + // This array must be the size specified by mHomeIDCount + // sHomeID mHomeIDs[1]; +}; + +// Structure to describe response TLV 0x13 for NASGet3GPP2SubscriptionInfo() +struct sNASGet3GPP2SubscriptionInfoResponse_MINBasedIMSI +{ + char mMobileCountryCode[3]; + char mIMSI11_12[2]; + char mIMSIS1[7]; + char mIMSIS2[3]; + UINT8 mIMSIAddressNumber; +}; + +// Structure to describe response TLV 0x14 for NASGet3GPP2SubscriptionInfo() +struct sNASGet3GPP2SubscriptionInfoResponse_TrueIMSI +{ + char mMobileCountryCode[3]; + char mIMSI11_12[2]; + char mIMSIS1[7]; + char mIMSIS2[3]; + UINT8 mIMSIAddressNumber; +}; + +// Structure to describe response TLV 0x15 for NASGet3GPP2SubscriptionInfo() +struct sNASGet3GPP2SubscriptionInfoResponse_CDMAChannel +{ + UINT16 mAChannelForPrimaryCarrier; + UINT16 mBChannelForPrimaryCarrier; + UINT16 mAChannelForSecondaryCarrier; + UINT16 mBChannelForSecondaryCarrier; +}; + +// Structure to describe response TLV 0x16 for NASGet3GPP2SubscriptionInfo() +struct sNASGet3GPP2SubscriptionInfoResponse_MDN +{ + UINT8 mMobileDirectoryNumberLength; + + // This array must be the size specified by mMobileDirectoryNumberLength + // char mMobileDirectoryNumber[1]; +}; + +// Structure to describe request TLV 0x01 for NASSet3GPP2SubscriptionInfo() +struct sNASSet3GPP2SubscriptionInfoRequest_NAMID +{ + UINT8 mNAMID; +}; + +// Structure to describe request TLV 0x10 for NASSet3GPP2SubscriptionInfo() +struct sNASSet3GPP2SubscriptionInfoRequest_DirectoryNumber +{ + UINT8 mDirectoryNumberLength; + + // This array must be the size specified by mDirectoryNumberLength + // char mDirectoryNumber[1]; +}; + +// Structure to describe request TLV 0x11 for NASSet3GPP2SubscriptionInfo() +struct sNASSet3GPP2SubscriptionInfoRequest_HomeID +{ + UINT8 mHomeIDCount; + + struct sHomeID + { + UINT16 mSystemID; + UINT16 mNetworkID; + }; + + // This array must be the size specified by mHomeIDCount + // sHomeID mHomeIDs[1]; +}; + +// Structure to describe request TLV 0x12 for NASSet3GPP2SubscriptionInfo() +struct sNASSet3GPP2SubscriptionInfoRequest_MINBasedIMSI +{ + char mMobileCountryCode[3]; + char mIMSI11_12[2]; + char mIMSIS1[7]; + char mIMSIS2[3]; + UINT8 mIMSIAddressNumber; +}; + +// Structure to describe request TLV 0x13 for NASSet3GPP2SubscriptionInfo() +struct sNASSet3GPP2SubscriptionInfoRequest_TrueIMSI +{ + char mMobileCountryCode[3]; + char mIMSI11_12[2]; + char mIMSIS1[7]; + char mIMSIS2[3]; + UINT8 mIMSIAddressNumber; +}; + +// Structure to describe request TLV 0x14 for NASSet3GPP2SubscriptionInfo() +struct sNASSet3GPP2SubscriptionInfoRequest_CDMAChannel +{ + UINT16 mAChannelForPrimaryCarrier; + UINT16 mBChannelForPrimaryCarrier; + UINT16 mAChannelForSecondaryCarrier; + UINT16 mBChannelForSecondaryCarrier; +}; + +// Structure to describe request TLV 0x15 for NASSet3GPP2SubscriptionInfo() +struct sNASSet3GPP2SubscriptionInfoRequest_NAMName +{ + UINT8 mNAMNameLength; + + // This array must be the size specified by mNAMNameLength + // char mNAMName[1]; +}; + +// Structure to describe request TLV 0x16 for NASSet3GPP2SubscriptionInfo() +struct sNASSet3GPP2SubscriptionInfoRequest_MDN +{ + UINT8 mMobileDirectoryNumberLength; + + // This array must be the size specified by mMobileDirectoryNumberLength + // char mMobileDirectoryNumber[1]; +}; + +// Structure to describe request TLV 0x17 for NASSet3GPP2SubscriptionInfo() +struct sNASSet3GPP2SubscriptionInfoRequest_SPC +{ + char mSPC[6]; +}; + +// Structure to describe response TLV 0x10 for NASGetMobileCAIRevision() +struct sNASGetMobileCAIRevisionResponse_CAIRevision +{ + eQMINASRevision mCAIRevision; +}; + +// Structure to describe response TLV 0x10 for NASGetRTREConfig() +struct sNASGetRTREConfigResponse_CurrentRTREConfig +{ + eQMINASRTREConfiguration mRTREConfiguration; +}; + +// Structure to describe response TLV 0x11 for NASGetRTREConfig() +struct sNASGetRTREConfigResponse_RTREConfigPreference +{ + eQMINASRTREConfiguration mRTREConfiguration; +}; + +// Structure to describe request TLV 0x01 for NASSetRTREConfig() +struct sNASSetRTREConfigRequest_RTREConfig +{ + eQMINASRTREConfiguration mRTREConfiguration; +}; + +// Structure to describe request TLV 0x10 for NASSetRTREConfig() +struct sNASSetRTREConfigRequest_SPC +{ + char mSPC[6]; +}; + +// Structure to describe response TLV 0x10 for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_GERANInfo +{ + UINT32 mCellID; + + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mMobileCountryCode0:4; + UINT8 mMobileCountryCode1:4; + UINT8 mMobileCountryCode2:4; + + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mMobileNetworkCode0:4; + UINT8 mMobileNetworkCode1:4; + UINT8 mMobileNetworkCode2:4; + + UINT16 mLocationAreaCode; + UINT16 mUTRAAbsoluteRFChannelNumber; + UINT8 mBCC:3; + UINT8 mNCC:3; + + // Padding out 2 bits + UINT8 mReserved1:2; + + UINT32 mTimingAdvance; + eQMINASRXLevel mRXLevel; + UINT8 mNMRCellCount; + + struct sNMRCell + { + UINT32 mCellID; + + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mPLMNMobileCountryCode0:4; + UINT8 mPLMNMobileCountryCode1:4; + UINT8 mPLMNMobileCountryCode2:4; + + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mPLMNMobileNetworkCode0:4; + UINT8 mPLMNMobileNetworkCode1:4; + UINT8 mPLMNMobileNetworkCode2:4; + + UINT16 mLocationAreaCode; + UINT16 mUTRAAbsoluteRFChannelNumber; + UINT8 mBaseStationIdentityCodeBCC:3; + UINT8 mBaseStationIdentityCodeNCC:3; + + // Padding out 2 bits + UINT8 mReserved2:2; + + eQMINASRXLevel mRXLevel; + }; + + // This array must be the size specified by mNMRCellCount + // sNMRCell mNMRCells[1]; +}; + +// Structure to describe response TLV 0x11 for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_UMTSInfo1 +{ + UINT32 mCellID; + + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mMobileCountryCode0:4; + UINT8 mMobileCountryCode1:4; + UINT8 mMobileCountryCode2:4; + + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mMobileNetworkCode0:4; + UINT8 mMobileNetworkCode1:4; + UINT8 mMobileNetworkCode2:4; + + UINT16 mLocationAreaCode; + UINT16 mUTRAAbsoluteRFChannelNumber; + UINT16 mPrimaryScramblingCode; + INT16 mReceivedSignalCodePower; + UINT16 mECIO; + UINT8 mUTRAUMTSMonitoredCellCount; + + struct sUMTSMonitoredCell + { + UINT16 mUTRAAbsoluteRFChannelNumber; + UINT16 mPrimaryScramblingCode; + INT16 mReceivedSignalCodePower; + UINT16 mECIO; + }; + + // This array must be the size specified by mUTRAUMTSMonitoredCellCount + // sUMTSMonitoredCell mUMTSMonitoredCells[1]; +}; + +struct sNASGetCellLocationInfoResponse_UMTSInfo2 +{ + UINT8 mGERANNBRCellCount; + + struct sGERANNBRCell + { + UINT16 mAbsoluteRFChannelNumber; + UINT8 mNetworkColorCode; + UINT8 mBaseStationColorCode; + INT16 mRSSI; + }; + + // This array must be the size specified by mGERANNBRCellCount + // sGERANNBRCell mGERANNBRCells[1]; +}; + +struct sNASGetCellLocationInfoResponse_UMTSInfo +{ + sNASGetCellLocationInfoResponse_UMTSInfo1 mNASGetCellLocationInfoResponse_UMTSInfo1; + sNASGetCellLocationInfoResponse_UMTSInfo2 mNASGetCellLocationInfoResponse_UMTSInfo2; +}; + +// Structure to describe response TLV 0x12 for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_CDMAInfo +{ + UINT16 mSystemID; + UINT16 mNetworkID; + UINT16 mBaseStationID; + UINT16 mReferencePN; + INT32 mLatitude; + INT32 mLongitude; +}; + +// Structure to describe response TLV 0x13 for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_IntrafrequencyLTEInfo +{ + INT8 mUEInIdleMode; + + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mMobileCountryCode0:4; + UINT8 mMobileCountryCode1:4; + UINT8 mMobileCountryCode2:4; + + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mMobileNetworkCode0:4; + UINT8 mMobileNetworkCode1:4; + UINT8 mMobileNetworkCode2:4; + + UINT16 mTrackingAreaCode; + UINT32 mGlobalCellID; + UINT16 mEUTRAAbsoluteRFChannelNumber; + UINT16 mServingCellID; + UINT8 mCellReselectionPriority; + UINT8 mSNonIntraSearchThreshold; + UINT8 mServingCellLowThreshold; + UINT8 mSIntraSearchThreshold; + UINT8 mCellCount; + + struct sCell + { + UINT16 mPhysicalCellID; + INT16 mRSRQ; + INT16 mRSRP; + INT16 mRSSI; + INT16 mCellSelectionRXLevel; + }; + + // This array must be the size specified by mCellCount + // sCell mCells[1]; +}; + +// Structure to describe response TLV 0x14 for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_InterfrequencyLTEInfo +{ + INT8 mUEInIdleMode; + UINT8 mFrequencyCount; + + struct sFrequency + { + UINT16 mEUTRAAbsoluteRFChannelNumber; + UINT8 mCellSelectionRXLevelLowThreshold; + UINT8 mCellSelectionRXLevelHighThreshold; + UINT8 mCellReselectionPriority; + UINT8 mCellCount; + + struct sCell + { + UINT16 mPhysicalCellID; + INT16 mRSRQ; + INT16 mRSRP; + INT16 mRSSI; + INT16 mCellSelectionRXLevel; + }; + + // This array must be the size specified by mCellCount + // sCell mCells[1]; + }; + + // This array must be the size specified by mFrequencyCount + // sFrequency mFrequencys[1]; +}; + +// Structure to describe response TLV 0x15 for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_LTEInfoNeighboringGSM +{ + INT8 mUEInIdleMode; + UINT8 mFrequencyCount; + + struct sFrequency + { + UINT8 mCellReselectionPriority; + UINT8 mCellReselectionHighThreshold; + UINT8 mCellReselectionLowThreshold; + + // Bitfield arrays are not possible in c, unrolling the array + bool mNCCPermitted0:1; + bool mNCCPermitted1:1; + bool mNCCPermitted2:1; + bool mNCCPermitted3:1; + bool mNCCPermitted4:1; + bool mNCCPermitted5:1; + bool mNCCPermitted6:1; + bool mNCCPermitted7:1; + + UINT8 mCellCount; + + struct sCell + { + UINT16 mAbsoluteRFChannelNumber; + INT8 mBandIs1900; + INT8 mCellIDValid; + UINT8 mBCC:3; + UINT8 mNCC:3; + + // Padding out 2 bits + UINT8 mReserved1:2; + + INT16 mRSSI; + INT16 mCellSelectionRXLevel; + }; + + // This array must be the size specified by mCellCount + // sCell mCells[1]; + }; + + // This array must be the size specified by mFrequencyCount + // sFrequency mFrequencys[1]; +}; + +// Structure to describe response TLV 0x16 for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_LTEInfoNeighboringWCDMA +{ + INT8 mUEInIdleMode; + UINT8 mFrequencyCount; + + struct sFrequency + { + UINT16 mUTRAAbsoluteRFChannelNumber; + UINT8 mCellReselectionPriority; + UINT8 mCellReselectionHighThreshold; + UINT8 mCellReselectionLowThreshold; + UINT8 mCellCount; + + struct sCell + { + UINT16 mPrimaryScramblingCode; + INT16 mCPICHRSCP; + INT16 mCPICHEcNo; + INT16 mCellSelectionRXLevel; + }; + + // This array must be the size specified by mCellCount + // sCell mCells[1]; + }; + + // This array must be the size specified by mFrequencyCount + // sFrequency mFrequencys[1]; +}; + +// Structure to describe response TLV 0x17 for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_UMTSCellID +{ + UINT32 mCellID; +}; + +// Structure to describe response TLV 0x18 for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_WCDMAInfoNeighboringLTE +{ + eQMINASWCDMARRCStates mWCDMARRCState; + UINT8 mNeighborCellCount; + + struct sNeighborCell + { + UINT16 mEUTRAAbsoluteRFChannelNumber; + UINT16 mPhysicalCellID; + float mRSRPdBm; + float mRSRQdB; + INT16 mCellSelectionRXLevel; + INT8 mCellIsTDD; + }; + + // This array must be the size specified by mNeighborCellCount + // sNeighborCell mNeighborCells[1]; +}; + +// Structure to describe response TLV 0x19 for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_CDMARXInfo +{ + float mRX0AGC; + float mRX1AGC; +}; + +// Structure to describe response TLV 0x1A for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_CDMA1xEVRXInfo +{ + float mRX0AGC; + float mRX1AGC; +}; + +// Structure to describe response TLV 0x1B for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_GSMExtendedCellInfo +{ + UINT16 mUERangeFromBSInSteps; + UINT16 mBCCHAssignedChannel; +}; + +// Structure to describe response TLV 0x1C for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_WCDMAExtendedCellInfo +{ + float mRXAGC; + float mTXAGC; + UINT16 mDownlinkBLERPercentage; +}; + +// Structure to describe response TLV 0x1D for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_WCDMAGSMExtendedNeighborCell +{ + UINT8 mGSMNeighborCount; + + // This array must be the size specified by mGSMNeighborCount + // UINT16 mGSMNeighborBCCHAssignedChannel[1]; +}; + +// Structure to describe response TLV 0x1E for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_LTETimingAdvance +{ + UINT32 mTimingAdvance; +}; + +// Structure to describe response TLV 0x1F for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_WCDMAActiveSet +{ + UINT8 mActiveSetEntries; + + struct sActiveSetEntry + { + UINT16 mPrimaryScramblingCode; + UINT32 mCellID; + INT16 mReceivedSignalCodePower; + INT16 mECIO; + UINT16 mUTRAAbsoluteRFChannelNumber; + }; + + // This array must be the size specified by mActiveSetEntries + // sActiveSetEntry mActiveSetEntrys[1]; +}; + +// Structure to describe response TLV 0x20 for NASGetCellLocationInfo() +struct sNASGetCellLocationInfoResponse_WCDMAActiveSetReference +{ + UINT32 mCellID; + + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mMobileCountryCode0:4; + UINT8 mMobileCountryCode1:4; + UINT8 mMobileCountryCode2:4; + + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mMobileNetworkCode0:4; + UINT8 mMobileNetworkCode1:4; + UINT8 mMobileNetworkCode2:4; + + UINT16 mLocationAreaCode; + UINT16 mUTRAAbsoluteRFChannelNumber; + UINT16 mPrimaryScramblingCode; + UINT16 mRoutingAreaCode; +}; + +// Structure to describe request TLV 0x01 for NASGetPLMNName() +struct sNASGetPLMNNameRequest_PLMN +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; +}; + +// Structure to describe request TLV 0x10 for NASGetPLMNName() +struct sNASGetPLMNNameRequest_SupressSIMError +{ + INT8 mSIMInitNotChecked; +}; + +// Structure to describe request TLV 0x11 for NASGetPLMNName() +struct sNASGetPLMNNameRequest_MNCPCSDigitIncludeStatus +{ + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe request TLV 0x12 for NASGetPLMNName() +struct sNASGetPLMNNameRequest_AlwaysSendPLMNName +{ + INT8 mAlwaysSendPLMNName; +}; + +// Structure to describe request TLV 0x13 for NASGetPLMNName() +struct sNASGetPLMNNameRequest_UseStaticTableOnly +{ + INT8 mUseStaticTableOnly; +}; + +// Structure to describe request TLV 0x14 for NASGetPLMNName() +struct sNASGetPLMNNameRequest_CSGID +{ + UINT32 mCSGID; +}; + +// Structure to describe request TLV 0x15 for NASGetPLMNName() +struct sNASGetPLMNNameRequest_RAT +{ + eQMINASRadioAccessTechnologies mRadioAccessTechnology; +}; + +// Structure to describe response TLV 0x10 for NASGetPLMNName() +struct sNASGetPLMNNameResponse_Name1 +{ + eQMINASPLMNNameEncodingSchemes mSPNEncoding; + UINT8 mSPNLength; + + // This array must be the size specified by mSPNLength + // UINT8 mSPN[1]; +}; + +struct sNASGetPLMNNameResponse_Name2 +{ + eQMINASPLMNNameEncodingSchemes mPLMNShortEncoding; + eQMINASPLMNNameCountryInitials mPLMNShortCountryInitials; + eQMINASPLMNNameSpareBits mPLMNSpareBits; + UINT8 mPLMNShortLength; + + // This array must be the size specified by mPLMNShortLength + // UINT8 mPLMNShort[1]; +}; + +struct sNASGetPLMNNameResponse_Name3 +{ + eQMINASPLMNNameEncodingSchemes mPLMNLongEncoding; + eQMINASPLMNNameCountryInitials mPLMNLongCountryInitials; + eQMINASPLMNNameSpareBits mPLMNLongBits; + UINT8 mPLMNLongLength; + + // This array must be the size specified by mPLMNLongLength + // UINT8 mPLMNLong[1]; +}; + +struct sNASGetPLMNNameResponse_Name +{ + sNASGetPLMNNameResponse_Name1 mNASGetPLMNNameResponse_Name1; + sNASGetPLMNNameResponse_Name2 mNASGetPLMNNameResponse_Name2; + sNASGetPLMNNameResponse_Name3 mNASGetPLMNNameResponse_Name3; +}; + +// Structure to describe response TLV 0x11 for NASGetPLMNName() +struct sNASGetPLMNNameResponse_DisplayBitInfo +{ + eQMINASTriStatus mIsSPNSet; + eQMINASTriStatus mIsPLMNSet; +}; + +// Structure to describe response TLV 0x12 for NASGetPLMNName() +struct sNASGetPLMNNameResponse_NetworkInfo +{ + eQMINASTriStatus mIsHomeNetwork; +}; + +// Structure to describe request TLV 0x01 for NASBindSubscription() +struct sNASBindSubscriptionRequest_SubscriptionType +{ + eQMINASSubscriptionType mSubscriptionType; +}; + +// Structure to describe indication TLV 0x10 for NAS ManagedRoamingIndication +struct sNASManagedRoamingIndication_RadioInterface +{ + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe indication TLV 0x10 for NAS DualStandbyPrefIndication +struct sNASDualStandbyPrefIndication_StandbyPreference +{ + eQMINASStandbyPreference mStandbyPreference; + eQMINASSubscriptionType mPrioritySubscription; + eQMINASSubscriptionType mActiveSubscription; + eQMINASSubscriptionType mDefaultDataSubscription; +}; + +// Structure to describe indication TLV 0x11 for NAS DualStandbyPrefIndication +struct sNASDualStandbyPrefIndication_VoiceSubscription +{ + eQMINASSubscriptionType mDefaultVoiceSubscription; +}; + +// Structure to describe indication TLV 0x10 for NAS SubscriptionInfoIndication +struct sNASSubscriptionInfoIndication_PrioritySubscriptionInfo +{ + eQMINASSubscriptionType mSubscriptionType; +}; + +// Structure to describe indication TLV 0x11 for NAS SubscriptionInfoIndication +struct sNASSubscriptionInfoIndication_ActiveSubscriptionInfo +{ + eQMINASActiveSubscription mActiveSubscription; +}; + +// Structure to describe indication TLV 0x12 for NAS SubscriptionInfoIndication +struct sNASSubscriptionInfoIndication_DefaultDataSubscriptionInfo +{ + INT8 mDefaultDataSubscription; +}; + +// Structure to describe indication TLV 0x13 for NAS SubscriptionInfoIndication +struct sNASSubscriptionInfoIndication_VoiceSystemID +{ + UINT32 mVoiceSystemID; +}; + +// Structure to describe response TLV 0x10 for NASGetModePref() +struct sNASGetModePrefResponse_ModePreferenceForIDX0 +{ + bool mCDMA1x:1; + bool mCDMA1xEVDO:1; + bool mGSM:1; + bool mUMTS:1; + bool mLTE:1; + bool mTDSCDMA:1; + + // Padding out 10 bits + UINT8 mReserved1:2; + UINT8 mReserved2; +}; + +// Structure to describe response TLV 0x11 for NASGetModePref() +struct sNASGetModePrefResponse_ModePreferenceForIDX1 +{ + bool mCDMA1x:1; + bool mCDMA1xEVDO:1; + bool mGSM:1; + bool mUMTS:1; + bool mLTE:1; + bool mTDSCDMA:1; + + // Padding out 10 bits + UINT8 mReserved1:2; + UINT8 mReserved2; +}; + +// Structure to describe response TLV 0x12 for NASGetModePref() +struct sNASGetModePrefResponse_ModePreferenceForIDX2 +{ + bool mCDMA1x:1; + bool mCDMA1xEVDO:1; + bool mGSM:1; + bool mUMTS:1; + bool mLTE:1; + bool mTDSCDMA:1; + + // Padding out 10 bits + UINT8 mReserved1:2; + UINT8 mReserved2; +}; + +// Structure to describe request TLV 0x10 for NASSetDualStandbyPreference() +struct sNASSetDualStandbyPreferenceRequest_StandbyPreference +{ + eQMINASStandbyPreference mStandbyPreference; +}; + +// Structure to describe request TLV 0x11 for NASSetDualStandbyPreference() +struct sNASSetDualStandbyPreferenceRequest_PrioritySubs +{ + eQMINASSubscriptionType mSubscriptionType; +}; + +// Structure to describe request TLV 0x12 for NASSetDualStandbyPreference() +struct sNASSetDualStandbyPreferenceRequest_DefaultDataSubs +{ + eQMINASSubscriptionType mSubscriptionType; +}; + +// Structure to describe request TLV 0x13 for NASSetDualStandbyPreference() +struct sNASSetDualStandbyPreferenceRequest_DefaultVoiceSubs +{ + eQMINASSubscriptionType mDefaultVoiceSubscription; +}; + +// Structure to describe indication TLV 0x01 for NAS NetworkTimeIndication +struct sNASNetworkTimeIndication_UniversalTime +{ + UINT16 mYear; + UINT8 mMonth; + UINT8 mDay; + UINT8 mHour; + UINT8 mMinute; + UINT8 mSecond; + eQMINASDayOfWeek mDayOfWeek; +}; + +// Structure to describe indication TLV 0x10 for NAS NetworkTimeIndication +struct sNASNetworkTimeIndication_TimeZone +{ + INT8 mTimeZoneOffset; +}; + +// Structure to describe indication TLV 0x11 for NAS NetworkTimeIndication +struct sNASNetworkTimeIndication_DaylightSavingAdjustment +{ + eQMINASDaylightSavingsAdjustment mDaylightSavingsAdjustment; +}; + +// Structure to describe indication TLV 0x12 for NAS NetworkTimeIndication +struct sNASNetworkTimeIndication_RadioInterface +{ + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe response TLV 0x10 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_CDMAServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe response TLV 0x11 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_CDMA1xEVDOServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe response TLV 0x12 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_GSMServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASServiceStatus mTrueServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe response TLV 0x13 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_WCDMAServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASServiceStatus mTrueServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe response TLV 0x14 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_LTEServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASServiceStatus mTrueServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe response TLV 0x15 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_CDMASystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mSystemPRLMatchValid; + eQMINASPRLIndicator mSystemPRLMatch; + INT8 mPRevInUseValid; + eQMINASRevision mProtocolRevisionInUse; + INT8 mBaseStationPRevValid; + eQMINASRevision mBaseStationProtocolRevision; + INT8 mConcurrentServiceSupportedValid; + eQMINASConcurrentServiceSupported mConcurrentServiceSupported; + INT8 mCDMASystemIDValid; + UINT16 mSystemID; + UINT16 mNetworkID; + INT8 mBaseStationInfoValid; + UINT16 mBaseStationID; + INT32 mLatitude; + INT32 mLongitude; + INT8 mPacketZoneValid; + UINT16 mPacketZone; + INT8 mNetworkIDValid; + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; +}; + +// Structure to describe response TLV 0x16 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_CDMA1xEVDOSystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mSystemPRLMatchValid; + eQMINASPRLIndicator mSystemPRLMatch; + INT8 mCDMA1xEVDOPersonalityValid; + eQMINASCDMA1xEVDOPersonality mCDMA1xEVDOPersonality; + INT8 mCDMA1xEVDOActiveProtocolValid; + eQMINASCDMA1xEVDOActiveProtocol mCDMA1xEVDOActiveProtocol; + INT8 mSectorIDValid; + UINT8 mSectorID[16]; +}; + +// Structure to describe response TLV 0x17 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_GSMSystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mLocationAreaCodeValid; + UINT16 mLocationAreaCode; + INT8 mCellIDValid; + UINT32 mCellID; + INT8 mRegistrationRejectInformationValid; + eQMINASSystemServiceCapabilities mRegistrationRejectServiceDomain; + UINT8 mRejectCause; + INT8 mNetworkIDValid; + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; + INT8 mEGPRSSupportValid; + eQMINASEGPRSSupport mEGPRSSupport; + INT8 mDTMSupportValid; + eQMINASDTMSupport mDTMSupport; +}; + +// Structure to describe response TLV 0x18 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_WCDMASystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mLocationAreaCodeValid; + UINT16 mLocationAreaCode; + INT8 mCellIDValid; + UINT32 mCellID; + INT8 mRegistrationRejectInformationValid; + eQMINASSystemServiceCapabilities mRegistrationRejectServiceDomain; + UINT8 mRejectCause; + INT8 mNetworkIDValid; + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; + INT8 mHighSpeedCallStatusValid; + eQMINASHighSpeedCallStatus mHighSpeedCallStatus; + INT8 mHighSpeedServiceIndicationValid; + eQMINASHighSpeedCallStatus mHighSpeedServiceIndication; + INT8 mPrimaryScramblingCodeValue; + UINT16 mPrimaryScramblingCode; +}; + +// Structure to describe response TLV 0x19 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_LTESystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mLocationAreaCodeValid; + UINT16 mLocationAreaCode; + INT8 mCellIDValid; + UINT32 mCellID; + INT8 mRegistrationRejectInformationValid; + eQMINASSystemServiceCapabilities mRegistrationRejectServiceDomain; + UINT8 mRejectCause; + INT8 mNetworkIDValid; + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; + INT8 mTrackingAreaCodeValid; + UINT16 mTrackingAreaCode; +}; + +// Structure to describe response TLV 0x1A for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_MoreCDMASystemInfo +{ + UINT16 mGeoSystemIndex; + UINT16 mRegistrationPeriod; +}; + +// Structure to describe response TLV 0x1B for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_MoreCDMA1xEVDOSystemInfo +{ + UINT16 mGeoSystemIndex; +}; + +// Structure to describe response TLV 0x1C for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_MoreGSMSystemInfo +{ + UINT16 mGeoSystemIndex; + eQMINASCellBroadcastCaps mCellBroadcastCapability; +}; + +// Structure to describe response TLV 0x1D for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_MoreWCDMASystemInfo +{ + UINT16 mGeoSystemIndex; + eQMINASCellBroadcastCaps mCellBroadcastCapability; +}; + +// Structure to describe response TLV 0x1E for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_MoreLTESystemInfo +{ + UINT16 mGeoSystemIndex; +}; + +// Structure to describe response TLV 0x1F for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_GSMCallBarring +{ + eQMINASCallBarringStatus mCSCallBarringStatus; + eQMINASCallBarringStatus mPSCallBarringStatus; +}; + +// Structure to describe response TLV 0x20 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_WCDMACallBarring +{ + eQMINASCallBarringStatus mCSCallBarringStatus; + eQMINASCallBarringStatus mPSCallBarringStatus; +}; + +// Structure to describe response TLV 0x21 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_LTEVoice +{ + INT8 mLTEVoiceSupported; +}; + +// Structure to describe response TLV 0x22 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_GSMCipher +{ + eQMINASServiceDomains mCipheringOnServiceDomain; +}; + +// Structure to describe response TLV 0x23 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_WCDMACipher +{ + eQMINASServiceDomains mCipheringOnServiceDomain; +}; + +// Structure to describe response TLV 0x24 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_TDSCDMAServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASServiceStatus mTrueServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe response TLV 0x25 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_TDSCDMASystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mLocationAreaCodeValid; + UINT16 mLocationAreaCode; + INT8 mCellIDValid; + UINT32 mCellID; + INT8 mRegistrationRejectInformationValid; + eQMINASSystemServiceCapabilities mRegistrationRejectServiceDomain; + UINT8 mRejectCause; + INT8 mNetworkIDValid; + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; + INT8 mHighSpeedCallStatusValid; + eQMINASHighSpeedCallStatus mHighSpeedCallStatus; + INT8 mHighSpeedServiceIndicationValid; + eQMINASHighSpeedCallStatus mHighSpeedServiceIndication; + INT8 mCellParameterIDValid; + UINT16 mCellParameterID; + INT8 mCellBroadcastCapabilityValid; + eQMINASCellBroadcastCaps2 mCellBroadcastCapability; + INT8 mCSBarringStatusValid; + eQMINASCallBarringStatus mCSCallBarringStatus; + INT8 mPSBarringStatusValid; + eQMINASCallBarringStatus mPSCallBarringStatus; + INT8 mCipheringValid; + eQMINASServiceDomains mCipheringOnServiceDomain; +}; + +// Structure to describe response TLV 0x26 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_EMBMSCoverage +{ + INT8 mEMBMSSupported; +}; + +// Structure to describe response TLV 0x27 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_SIMRejectInfo +{ + eQMINASSIMRejectStates mSIMRejectInfo; +}; + +// Structure to describe response TLV 0x28 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_WCDMAEUTRADetection +{ + eQMINASEUTRAStatus mEUTRADetectionStatus; +}; + +// Structure to describe response TLV 0x29 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_LTEIMSVoice +{ + INT8 mIMSVoiceSupportAvailable; +}; + +// Structure to describe response TLV 0x2A for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_LTEVoiceDomain +{ + eQMINASVoiceDomains mLTEVoiceDomain; +}; + +// Structure to describe response TLV 0x2B for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_CDMARegZoneID +{ + UINT16 mCDMARegZoneID; +}; + +// Structure to describe response TLV 0x2C for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_GSMRAC +{ + UINT8 mGSMRoutingAreaCode; +}; + +// Structure to describe response TLV 0x2D for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_WCDMARAC +{ + UINT8 mWCDMARoutingAreaCode; +}; + +// Structure to describe response TLV 0x2E for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_CDMAResolvedMCC +{ + UINT16 mCDMAMCCResolvedViaSIDLookup; +}; + +// Structure to describe response TLV 0x2F for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_RegistrationRestriction +{ + eQMINASRegistrationRestrictions mRegistrationRestriction; +}; + +// Structure to describe response TLV 0x30 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_TDSCDMARegistrationDomain +{ + eQMINASRegistrationDomains mTDSCDMARegistrationDomain; +}; + +// Structure to describe response TLV 0x31 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_LTERegistrationDomain +{ + eQMINASRegistrationDomains mTDSCDMARegistrationDomain; +}; + +// Structure to describe response TLV 0x32 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_WCDMARegistrationDomain +{ + eQMINASRegistrationDomains mTDSCDMARegistrationDomain; +}; + +// Structure to describe response TLV 0x33 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_GSMRegistrationDomain +{ + eQMINASRegistrationDomains mTDSCDMARegistrationDomain; +}; + +// Structure to describe response TLV 0x34 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_EMBMSTraceID +{ + INT16 mEMBMSTraceID; +}; + +// Structure to describe response TLV 0x35 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_WCDMACSGInfo +{ + UINT32 mCSGID; + UINT8 mNameLength; + + // This array must be the size specified by mNameLength + // wchar_t mName[1]; +}; + +// Structure to describe response TLV 0x36 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_CDMA1xEVVoiceDomain +{ + eQMINASVoiceDomains mCDMA1xEVVoiceDomain; +}; + +// Structure to describe response TLV 0x37 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_CDMA1xEVSMSDomain +{ + eQMINASSMSDomains mCDMA1xEVSMSDomain; +}; + +// Structure to describe response TLV 0x38 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_LTESMSDomain +{ + eQMINASSMSDomains mLTESMSDomain; +}; + +// Structure to describe response TLV 0x39 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_LTEEmergencyBearer +{ + eQMINASTriStatus mLTEEmergencyBearerSupported; +}; + +// Structure to describe response TLV 0x3A for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_GSMVoiceDomain +{ + eQMINASVoiceDomains mVoiceDomain; +}; + +// Structure to describe response TLV 0x3B for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_GSMSMSDomain +{ + eQMINASSMSDomains mSMSDomain; +}; + +// Structure to describe response TLV 0x3C for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_WCDMAVoiceDomain +{ + eQMINASVoiceDomains mVoiceDomain; +}; + +// Structure to describe response TLV 0x3D for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_WCDMASMSDomain +{ + eQMINASSMSDomains mSMSDomain; +}; + +// Structure to describe response TLV 0x3E for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_LTEEmergencyAccessBarred +{ + eQMINASTriStatus mLTEEmergencyAccessBarred; +}; + +// Structure to describe response TLV 0x3F for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_CDMAVoiceDomain +{ + eQMINASVoiceDomains mVoiceDomain; +}; + +// Structure to describe response TLV 0x40 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_CDMASMSDomain +{ + eQMINASSMSDomains mSMSDomain; +}; + +// Structure to describe response TLV 0x41 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_TDSCDMAVoiceDomain +{ + eQMINASVoiceDomains mVoiceDomain; +}; + +// Structure to describe response TLV 0x42 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_TDSCDMASMSDomain +{ + eQMINASSMSDomains mSMSDomain; +}; + +// Structure to describe response TLV 0x43 for NASGetSystemInfo() +struct sNASGetSystemInfoResponse_LTECSGInfo +{ + UINT32 mCSGID; + UINT8 mNameLength; + + // This array must be the size specified by mNameLength + // wchar_t mName[1]; +}; + +// Structure to describe indication TLV 0x10 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_CDMAServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe indication TLV 0x11 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_CDMA1xEVDOServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe indication TLV 0x12 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_GSMServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASServiceStatus mTrueServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe indication TLV 0x13 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_WCDMAServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASServiceStatus mTrueServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe indication TLV 0x14 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_LTEServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASServiceStatus mTrueServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe indication TLV 0x15 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_CDMASystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mSystemPRLMatchValid; + eQMINASPRLIndicator mSystemPRLMatch; + INT8 mPRevInUseValid; + eQMINASRevision mProtocolRevisionInUse; + INT8 mBaseStationPRevValid; + eQMINASRevision mBaseStationProtocolRevision; + INT8 mConcurrentServiceSupportedValid; + eQMINASConcurrentServiceSupported mConcurrentServiceSupported; + INT8 mCDMASystemIDValid; + UINT16 mSystemID; + UINT16 mNetworkID; + INT8 mBaseStationInfoValid; + UINT16 mBaseStationID; + INT32 mLatitude; + INT32 mLongitude; + INT8 mPacketZoneValid; + UINT16 mPacketZone; + INT8 mNetworkIDValid; + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; +}; + +// Structure to describe indication TLV 0x16 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_CDMA1xEVDOSystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mSystemPRLMatchValid; + eQMINASPRLIndicator mSystemPRLMatch; + INT8 mCDMA1xEVDOPersonalityValid; + eQMINASCDMA1xEVDOPersonality mCDMA1xEVDOPersonality; + INT8 mCDMA1xEVDOActiveProtocolValid; + eQMINASCDMA1xEVDOActiveProtocol mCDMA1xEVDOActiveProtocol; + INT8 mSectorIDValid; + UINT8 mSectorID[16]; +}; + +// Structure to describe indication TLV 0x17 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_GSMSystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mLocationAreaCodeValid; + UINT16 mLocationAreaCode; + INT8 mCellIDValid; + UINT32 mCellID; + INT8 mRegistrationRejectInformationValid; + eQMINASSystemServiceCapabilities mRegistrationRejectServiceDomain; + UINT8 mRejectCause; + INT8 mNetworkIDValid; + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; + INT8 mEGPRSSupportValid; + eQMINASEGPRSSupport mEGPRSSupport; + INT8 mDTMSupportValid; + eQMINASDTMSupport mDTMSupport; +}; + +// Structure to describe indication TLV 0x18 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_WCDMASystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mLocationAreaCodeValid; + UINT16 mLocationAreaCode; + INT8 mCellIDValid; + UINT32 mCellID; + INT8 mRegistrationRejectInformationValid; + eQMINASSystemServiceCapabilities mRegistrationRejectServiceDomain; + UINT8 mRejectCause; + INT8 mNetworkIDValid; + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; + INT8 mHighSpeedCallStatusValid; + eQMINASHighSpeedCallStatus mHighSpeedCallStatus; + INT8 mHighSpeedServiceIndicationValid; + eQMINASHighSpeedCallStatus mHighSpeedServiceIndication; + INT8 mPrimaryScramblingCodeValue; + UINT16 mPrimaryScramblingCode; +}; + +// Structure to describe indication TLV 0x19 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_LTESystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mLocationAreaCodeValid; + UINT16 mLocationAreaCode; + INT8 mCellIDValid; + UINT32 mCellID; + INT8 mRegistrationRejectInformationValid; + eQMINASSystemServiceCapabilities mRegistrationRejectServiceDomain; + UINT8 mRejectCause; + INT8 mNetworkIDValid; + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; + INT8 mTrackingAreaCodeValid; + UINT16 mTrackingAreaCode; +}; + +// Structure to describe indication TLV 0x1A for NAS SystemInfoIndication +struct sNASSystemInfoIndication_MoreCDMASystemInfo +{ + UINT16 mGeoSystemIndex; + UINT16 mRegistrationPeriod; +}; + +// Structure to describe indication TLV 0x1B for NAS SystemInfoIndication +struct sNASSystemInfoIndication_MoreCDMA1xEVDOSystemInfo +{ + UINT16 mGeoSystemIndex; +}; + +// Structure to describe indication TLV 0x1C for NAS SystemInfoIndication +struct sNASSystemInfoIndication_MoreGSMSystemInfo +{ + UINT16 mGeoSystemIndex; + eQMINASCellBroadcastCaps mCellBroadcastCapability; +}; + +// Structure to describe indication TLV 0x1D for NAS SystemInfoIndication +struct sNASSystemInfoIndication_MoreWCDMASystemInfo +{ + UINT16 mGeoSystemIndex; + eQMINASCellBroadcastCaps mCellBroadcastCapability; +}; + +// Structure to describe indication TLV 0x1E for NAS SystemInfoIndication +struct sNASSystemInfoIndication_MoreLTESystemInfo +{ + UINT16 mGeoSystemIndex; +}; + +// Structure to describe indication TLV 0x1F for NAS SystemInfoIndication +struct sNASSystemInfoIndication_GSMCallBarring +{ + eQMINASCallBarringStatus mCSCallBarringStatus; + eQMINASCallBarringStatus mPSCallBarringStatus; +}; + +// Structure to describe indication TLV 0x20 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_WCDMACallBarring +{ + eQMINASCallBarringStatus mCSCallBarringStatus; + eQMINASCallBarringStatus mPSCallBarringStatus; +}; + +// Structure to describe indication TLV 0x21 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_LTEVoice +{ + INT8 mLTEVoiceSupported; +}; + +// Structure to describe indication TLV 0x22 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_GSMCipher +{ + eQMINASServiceDomains mCipheringOnServiceDomain; +}; + +// Structure to describe indication TLV 0x23 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_WCDMACipher +{ + eQMINASServiceDomains mCipheringOnServiceDomain; +}; + +// Structure to describe indication TLV 0x24 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_NoPLMNChange +{ + INT8 mNoPLMNChange; +}; + +// Structure to describe indication TLV 0x25 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_TDSCDMAServiceStatusInfo +{ + eQMINASServiceStatus mServiceStatus; + eQMINASServiceStatus mTrueServiceStatus; + eQMINASPreferredDataBath mPreferredDataPath; +}; + +// Structure to describe indication TLV 0x26 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_TDSCDMASystemInfo +{ + INT8 mServiceDomainValid; + eQMINASSystemServiceCapabilities mServiceDomain; + INT8 mServiceCapabilityValid; + eQMINASSystemServiceCapabilities mSystemServiceCapabilities; + INT8 mRoamStatusValid; + eQMINASRoamStatus mRoamStatus; + INT8 mSystemForbiddenValid; + eQMINASSystemForbidden mSystemForbidden; + INT8 mLocationAreaCodeValid; + UINT16 mLocationAreaCode; + INT8 mCellIDValid; + UINT32 mCellID; + INT8 mRegistrationRejectInformationValid; + eQMINASSystemServiceCapabilities mRegistrationRejectServiceDomain; + UINT8 mRejectCause; + INT8 mNetworkIDValid; + char mMobileCountryCode[3]; + char mMobileNetworkCode[3]; + INT8 mHighSpeedCallStatusValid; + eQMINASHighSpeedCallStatus mHighSpeedCallStatus; + INT8 mHighSpeedServiceIndicationValid; + eQMINASHighSpeedCallStatus mHighSpeedServiceIndication; + INT8 mCellParameterIDValid; + UINT16 mCellParameterID; + INT8 mCellBroadcastCapabilityValid; + eQMINASCellBroadcastCaps2 mCellBroadcastCapability; + INT8 mCSBarringStatusValid; + eQMINASCallBarringStatus mCSCallBarringStatus; + INT8 mPSBarringStatusValid; + eQMINASCallBarringStatus mPSCallBarringStatus; + INT8 mCipheringValid; + eQMINASServiceDomains mCipheringOnServiceDomain; +}; + +// Structure to describe indication TLV 0x27 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_EMBMSCoverage +{ + INT8 mEMBMSSupported; +}; + +// Structure to describe indication TLV 0x28 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_SIMRejectInfo +{ + eQMINASSIMRejectStates mSIMRejectInfo; +}; + +// Structure to describe indication TLV 0x29 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_WCDMAEUTRADetection +{ + eQMINASEUTRAStatus mEUTRADetectionStatus; +}; + +// Structure to describe indication TLV 0x2A for NAS SystemInfoIndication +struct sNASSystemInfoIndication_LTEIMSVoice +{ + INT8 mIMSVoiceSupportAvailable; +}; + +// Structure to describe indication TLV 0x2B for NAS SystemInfoIndication +struct sNASSystemInfoIndication_LTEVoiceDomain +{ + eQMINASVoiceDomains mLTEVoiceDomain; +}; + +// Structure to describe indication TLV 0x2C for NAS SystemInfoIndication +struct sNASSystemInfoIndication_CDMARegZoneID +{ + UINT16 mCDMARegZoneID; +}; + +// Structure to describe indication TLV 0x2D for NAS SystemInfoIndication +struct sNASSystemInfoIndication_GSMRAC +{ + UINT8 mGSMRoutingAreaCode; +}; + +// Structure to describe indication TLV 0x2E for NAS SystemInfoIndication +struct sNASSystemInfoIndication_WCDMARAC +{ + UINT8 mWCDMARoutingAreaCode; +}; + +// Structure to describe indication TLV 0x2F for NAS SystemInfoIndication +struct sNASSystemInfoIndication_CDMAResolvedMCC +{ + UINT16 mCDMAMCCResolvedViaSIDLookup; +}; + +// Structure to describe indication TLV 0x30 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_RegistrationRestriction +{ + eQMINASRegistrationRestrictions mRegistrationRestriction; +}; + +// Structure to describe indication TLV 0x31 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_TDSCDMARegistrationDomain +{ + eQMINASRegistrationDomains mTDSCDMARegistrationDomain; +}; + +// Structure to describe indication TLV 0x32 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_LTERegistrationDomain +{ + eQMINASRegistrationDomains mTDSCDMARegistrationDomain; +}; + +// Structure to describe indication TLV 0x33 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_WCDMARegistrationDomain +{ + eQMINASRegistrationDomains mTDSCDMARegistrationDomain; +}; + +// Structure to describe indication TLV 0x34 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_GSMRegistrationDomain +{ + eQMINASRegistrationDomains mTDSCDMARegistrationDomain; +}; + +// Structure to describe indication TLV 0x35 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_EMBMSTraceID +{ + INT16 mEMBMSTraceID; +}; + +// Structure to describe indication TLV 0x36 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_WCDMACSGInfo +{ + UINT32 mCSGID; + UINT8 mNameLength; + + // This array must be the size specified by mNameLength + // wchar_t mName[1]; +}; + +// Structure to describe indication TLV 0x37 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_CDMA1xEVVoiceDomain +{ + eQMINASVoiceDomains mCDMA1xEVVoiceDomain; +}; + +// Structure to describe indication TLV 0x38 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_CDMA1xEVSMSDomain +{ + eQMINASSMSDomains mCDMA1xEVSMSDomain; +}; + +// Structure to describe indication TLV 0x39 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_LTESMSDomain +{ + eQMINASSMSDomains mLTESMSDomain; +}; + +// Structure to describe indication TLV 0x3A for NAS SystemInfoIndication +struct sNASSystemInfoIndication_LTEEmergencyBearer +{ + eQMINASTriStatus mLTEEmergencyBearerSupported; +}; + +// Structure to describe indication TLV 0x3B for NAS SystemInfoIndication +struct sNASSystemInfoIndication_GSMVoiceDomain +{ + eQMINASVoiceDomains mVoiceDomain; +}; + +// Structure to describe indication TLV 0x3C for NAS SystemInfoIndication +struct sNASSystemInfoIndication_GSMSMSDomain +{ + eQMINASSMSDomains mSMSDomain; +}; + +// Structure to describe indication TLV 0x3D for NAS SystemInfoIndication +struct sNASSystemInfoIndication_WCDMAVoiceDomain +{ + eQMINASVoiceDomains mVoiceDomain; +}; + +// Structure to describe indication TLV 0x3E for NAS SystemInfoIndication +struct sNASSystemInfoIndication_WCDMASMSDomain +{ + eQMINASSMSDomains mSMSDomain; +}; + +// Structure to describe indication TLV 0x3F for NAS SystemInfoIndication +struct sNASSystemInfoIndication_LTEEmergencyAccessBarred +{ + eQMINASTriStatus mLTEEmergencyAccessBarred; +}; + +// Structure to describe indication TLV 0x40 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_CDMAVoiceDomain +{ + eQMINASVoiceDomains mVoiceDomain; +}; + +// Structure to describe indication TLV 0x41 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_CDMASMSDomain +{ + eQMINASSMSDomains mSMSDomain; +}; + +// Structure to describe indication TLV 0x42 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_TDSCDMAVoiceDomain +{ + eQMINASVoiceDomains mVoiceDomain; +}; + +// Structure to describe indication TLV 0x43 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_TDSCDMASMSDomain +{ + eQMINASSMSDomains mSMSDomain; +}; + +// Structure to describe indication TLV 0x44 for NAS SystemInfoIndication +struct sNASSystemInfoIndication_LTECSGInfo +{ + UINT32 mCSGID; + UINT8 mNameLength; + + // This array must be the size specified by mNameLength + // wchar_t mName[1]; +}; + +// Structure to describe response TLV 0x10 for NASGetSignalInfo() +struct sNASGetSignalInfoResponse_CDMASignalInfo +{ + INT8 mRSSI; + UINT16 mECIO; +}; + +// Structure to describe response TLV 0x11 for NASGetSignalInfo() +struct sNASGetSignalInfoResponse_CDMA1xEVDOSignalInfo +{ + INT8 mRSSI; + UINT16 mECIO; + eQMINASSINRLevels mSINR; + UINT32 mIO; +}; + +// Structure to describe response TLV 0x12 for NASGetSignalInfo() +struct sNASGetSignalInfoResponse_GSMSignalInfo +{ + INT8 mRSSI; +}; + +// Structure to describe response TLV 0x13 for NASGetSignalInfo() +struct sNASGetSignalInfoResponse_WCDMASignalInfo +{ + INT8 mRSSI; + UINT16 mECIO; +}; + +// Structure to describe response TLV 0x14 for NASGetSignalInfo() +struct sNASGetSignalInfoResponse_LTESignalInfo +{ + INT8 mRSSI; + INT8 mRSRQ; + INT16 mRSRP; + INT16 mSNR; +}; + +// Structure to describe response TLV 0x15 for NASGetSignalInfo() +struct sNASGetSignalInfoResponse_TDSCDMASignalInfo +{ + INT8 mPCCPCHRSCP; +}; + +// Structure to describe response TLV 0x16 for NASGetSignalInfo() +struct sNASGetSignalInfoResponse_TDSCDMASignalInfoEx +{ + float mRSSIdBm; + float mRSCPdBm; + float mECIOdB; + float mSINRdB; +}; + +// Structure to describe request TLV 0x10 for NASConfigureSignalInfo() +struct sNASConfigureSignalInfoRequest_RSSIThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT8 mThreshold[1]; +}; + +// Structure to describe request TLV 0x11 for NASConfigureSignalInfo() +struct sNASConfigureSignalInfoRequest_ECIOThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x12 for NASConfigureSignalInfo() +struct sNASConfigureSignalInfoRequest_CDMA1xEVDOSINRThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // UINT8 mThreshold[1]; +}; + +// Structure to describe request TLV 0x13 for NASConfigureSignalInfo() +struct sNASConfigureSignalInfoRequest_LTESINRThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT8 mThreshold[1]; +}; + +// Structure to describe request TLV 0x14 for NASConfigureSignalInfo() +struct sNASConfigureSignalInfoRequest_IOThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT32 mThreshold[1]; +}; + +// Structure to describe request TLV 0x15 for NASConfigureSignalInfo() +struct sNASConfigureSignalInfoRequest_RSRQThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT8 mThreshold[1]; +}; + +// Structure to describe request TLV 0x16 for NASConfigureSignalInfo() +struct sNASConfigureSignalInfoRequest_RSRPThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x17 for NASConfigureSignalInfo() +struct sNASConfigureSignalInfoRequest_LTEConfig +{ + eQMINASLTESignalRates mLTESignalCheckRate; + eQMINASLTESignalRates mLTESignalAveragingRate; +}; + +// Structure to describe request TLV 0x18 for NASConfigureSignalInfo() +struct sNASConfigureSignalInfoRequest_RSCPThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT8 mRSCPThreshold[1]; +}; + +// Structure to describe request TLV 0x19 for NASConfigureSignalInfo() +struct sNASConfigureSignalInfoRequest_TDSCDMASINRThresholdList +{ + UINT8 mSINRThresholdCount; + + // This array must be the size specified by mSINRThresholdCount + // float mSINRThresholddB[1]; +}; + +// Structure to describe indication TLV 0x10 for NAS SignalInfoIndication +struct sNASSignalInfoIndication_CDMASignalInfo +{ + INT8 mRSSI; + UINT16 mECIO; +}; + +// Structure to describe indication TLV 0x11 for NAS SignalInfoIndication +struct sNASSignalInfoIndication_CDMA1xEVDOSignalInfo +{ + INT8 mRSSI; + UINT16 mECIO; + eQMINASSINRLevels mSINR; + UINT32 mIO; +}; + +// Structure to describe indication TLV 0x12 for NAS SignalInfoIndication +struct sNASSignalInfoIndication_GSMSignalInfo +{ + INT8 mRSSI; +}; + +// Structure to describe indication TLV 0x13 for NAS SignalInfoIndication +struct sNASSignalInfoIndication_WCDMASignalInfo +{ + INT8 mRSSI; + UINT16 mECIO; +}; + +// Structure to describe indication TLV 0x14 for NAS SignalInfoIndication +struct sNASSignalInfoIndication_LTESignalInfo +{ + INT8 mRSSI; + INT8 mRSRQ; + INT16 mRSRP; + INT16 mSNR; +}; + +// Structure to describe indication TLV 0x15 for NAS SignalInfoIndication +struct sNASSignalInfoIndication_TDSCDMASignalInfo +{ + INT8 mPCCPCHRSCP; +}; + +// Structure to describe indication TLV 0x16 for NAS SignalInfoIndication +struct sNASSignalInfoIndication_TDSCDMASignalInfoEx +{ + float mRSSIdBm; + float mRSCPdBm; + float mECIOdB; + float mSINRdB; +}; + +// Structure to describe response TLV 0x10 for NASGetErrorRate() +struct sNASGetErrorRateResponse_CDMAFrameErrorRate +{ + UINT16 mErrorRate; +}; + +// Structure to describe response TLV 0x11 for NASGetErrorRate() +struct sNASGetErrorRateResponse_CDMA1xEVDOPacketErrorRate +{ + UINT16 mErrorRate; +}; + +// Structure to describe response TLV 0x12 for NASGetErrorRate() +struct sNASGetErrorRateResponse_GSMBitErrorRate +{ + UINT8 mErrorRate; +}; + +// Structure to describe response TLV 0x13 for NASGetErrorRate() +struct sNASGetErrorRateResponse_WCDMABlockErrorRate +{ + UINT8 mErrorRate; +}; + +// Structure to describe response TLV 0x14 for NASGetErrorRate() +struct sNASGetErrorRateResponse_TDSCDMABlockErrorRate +{ + UINT8 mErrorRate; +}; + +// Structure to describe indication TLV 0x10 for NAS ErrorRateIndication +struct sNASErrorRateIndication_CDMAFrameErrorRate +{ + UINT16 mErrorRate; +}; + +// Structure to describe indication TLV 0x11 for NAS ErrorRateIndication +struct sNASErrorRateIndication_CDMA1xEVDOPacketErrorRate +{ + UINT16 mErrorRate; +}; + +// Structure to describe indication TLV 0x12 for NAS ErrorRateIndication +struct sNASErrorRateIndication_GSMBitErrorRate +{ + UINT8 mErrorRate; +}; + +// Structure to describe indication TLV 0x13 for NAS ErrorRateIndication +struct sNASErrorRateIndication_WCDMAFrameErrorRate +{ + UINT8 mErrorRate; +}; + +// Structure to describe indication TLV 0x14 for NAS ErrorRateIndication +struct sNASErrorRateIndication_TDSCDMABlockErrorRate +{ + UINT8 mErrorRate; +}; + +// Structure to describe indication TLV 0x01 for NAS EVDOSessionCloseIndication +struct sNASEVDOSessionCloseIndication_Reason +{ + eQMINASEVDOSessionCloseReasons mSessionCloseReason; +}; + +// Structure to describe indication TLV 0x01 for NAS EVDOUATIUpdateIndication +struct sNASEVDOUATIUpdateIndication_UATI +{ + UINT8 mUATI[16]; +}; + +// Structure to describe request TLV 0x01 for NASGetEVDOProtocolSubtype() +struct sNASGetEVDOProtocolSubtypeRequest_Protocol +{ + UINT32 mEVDOProtocol; +}; + +// Structure to describe response TLV 0x10 for NASGetEVDOProtocolSubtype() +struct sNASGetEVDOProtocolSubtypeResponse_Subtype +{ + UINT16 mEVDOProtocolSubtype; +}; + +// Structure to describe response TLV 0x10 for NASGetEVDOColorCode() +struct sNASGetEVDOColorCodeResponse_Value +{ + UINT8 mEVDOColorCode; +}; + +// Structure to describe response TLV 0x10 for NASGetAcquisitionSystemMode() +struct sNASGetAcquisitionSystemModeResponse_CDMA +{ + eQMINASRadioSystemModes mRadioSystemMode; +}; + +// Structure to describe response TLV 0x11 for NASGetAcquisitionSystemMode() +struct sNASGetAcquisitionSystemModeResponse_CDMA1xEVDO +{ + eQMINASRadioSystemModes mRadioSystemMode; +}; + +// Structure to describe response TLV 0x12 for NASGetAcquisitionSystemMode() +struct sNASGetAcquisitionSystemModeResponse_GSM +{ + eQMINASRadioSystemModes mRadioSystemMode; +}; + +// Structure to describe response TLV 0x13 for NASGetAcquisitionSystemMode() +struct sNASGetAcquisitionSystemModeResponse_UMTS +{ + eQMINASRadioSystemModes mRadioSystemMode; +}; + +// Structure to describe response TLV 0x14 for NASGetAcquisitionSystemMode() +struct sNASGetAcquisitionSystemModeResponse_LTE +{ + eQMINASRadioSystemModes mRadioSystemMode; +}; + +// Structure to describe response TLV 0x15 for NASGetAcquisitionSystemMode() +struct sNASGetAcquisitionSystemModeResponse_TDSCDMA +{ + eQMINASRadioSystemModes mRadioSystemMode; +}; + +// Structure to describe request TLV 0x01 for NASSetRXDiversity() +struct sNASSetRXDiversityRequest_Diversity +{ + eQMINASRadioInterfaces mRadioInterface; + bool mEnableRXChain0:1; + bool mEnableRXChain1:1; + + // Padding out 6 bits + UINT8 mReserved1:6; +}; + +// Structure to describe response TLV 0x10 for NASGetRXTXInfo() +struct sNASGetRXTXInfoResponse_RX0Info +{ + INT8 mRadioTuned; + INT32 mRXPower; + INT32 mEcIo; + INT32 mRSCP; + INT32 mRSRP; + INT32 mPhase; +}; + +// Structure to describe response TLV 0x11 for NASGetRXTXInfo() +struct sNASGetRXTXInfoResponse_RX1Info +{ + INT8 mRadioTuned; + INT32 mRXPower; + INT32 mEcIo; + INT32 mRSCP; + INT32 mRSRP; + INT32 mPhase; +}; + +// Structure to describe response TLV 0x12 for NASGetRXTXInfo() +struct sNASGetRXTXInfoResponse_TXInfo +{ + INT8 mInTraffic; + INT32 mTXPower; +}; + +// Structure to describe request TLV 0x01 for NASUpdateAKEYExtended() +struct sNASUpdateAKEYExtendedRequest_AKEY +{ + char mSPC[6]; + char mAKEY[26]; +}; + +// Structure to describe response TLV 0x10 for NASGetDualStandbyPreference() +struct sNASGetDualStandbyPreferenceResponse_StandbyPreference +{ + eQMINASStandbyPreference mStandbyPreference; +}; + +// Structure to describe response TLV 0x11 for NASGetDualStandbyPreference() +struct sNASGetDualStandbyPreferenceResponse_PrioritySubs +{ + eQMINASSubscriptionType mSubscriptionType; +}; + +// Structure to describe response TLV 0x12 for NASGetDualStandbyPreference() +struct sNASGetDualStandbyPreferenceResponse_ActiveSubs +{ + eQMINASSubscriptionType mSubscriptionType; +}; + +// Structure to describe response TLV 0x13 for NASGetDualStandbyPreference() +struct sNASGetDualStandbyPreferenceResponse_DefaultDataSubs +{ + eQMINASSubscriptionType mSubscriptionType; +}; + +// Structure to describe response TLV 0x14 for NASGetDualStandbyPreference() +struct sNASGetDualStandbyPreferenceResponse_DefaultVoiceSubs +{ + eQMINASSubscriptionType mSubscriptionType; +}; + +// Structure to describe request TLV 0x01 for NASBlockLTEPLMN() +struct sNASBlockLTEPLMNRequest_PLMN +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe request TLV 0x10 for NASBlockLTEPLMN() +struct sNASBlockLTEPLMNRequest_AbsoluteTime +{ + UINT32 mBlockingIntervalInMilliseconds; +}; + +// Structure to describe request TLV 0x11 for NASBlockLTEPLMN() +struct sNASBlockLTEPLMNRequest_T3204Multiplier +{ + UINT32 mBlockingIntervalAsT3204Multiplier; +}; + +// Structure to describe request TLV 0x01 for NASUnblockLTEPLMN() +struct sNASUnblockLTEPLMNRequest_PLMN +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe indication TLV 0x10 for NAS CurrentPLMNNameIndication +struct sNASCurrentPLMNNameIndication_PLMN +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe indication TLV 0x11 for NAS CurrentPLMNNameIndication +struct sNASCurrentPLMNNameIndication_SPN +{ + eQMINASPLMNNameEncodingSchemes mSPNEncoding; + UINT8 mSPNLength; + + // This array must be the size specified by mSPNLength + // UINT8 mSPN[1]; +}; + +// Structure to describe indication TLV 0x12 for NAS CurrentPLMNNameIndication +struct sNASCurrentPLMNNameIndication_ShortName +{ + eQMINASPLMNNameEncodingSchemes mPLMNShortEncoding; + eQMINASPLMNNameCountryInitials mPLMNShortCountryInitials; + eQMINASPLMNNameSpareBits mPLMNSpareBits; + UINT8 mPLMNShortLength; + + // This array must be the size specified by mPLMNShortLength + // UINT8 mPLMNShort[1]; +}; + +// Structure to describe indication TLV 0x13 for NAS CurrentPLMNNameIndication +struct sNASCurrentPLMNNameIndication_LongName +{ + eQMINASPLMNNameEncodingSchemes mPLMNLongEncoding; + eQMINASPLMNNameCountryInitials mPLMNLongCountryInitials; + eQMINASPLMNNameSpareBits mPLMNLongBits; + UINT8 mPLMNLongLength; + + // This array must be the size specified by mPLMNLongLength + // UINT8 mPLMNLong[1]; +}; + +// Structure to describe indication TLV 0x14 for NAS CurrentPLMNNameIndication +struct sNASCurrentPLMNNameIndication_CSGID +{ + UINT32 mCSGID; +}; + +// Structure to describe indication TLV 0x15 for NAS CurrentPLMNNameIndication +struct sNASCurrentPLMNNameIndication_DisplayBitInfo +{ + eQMINASTriStatus mIsSPNSet; + eQMINASTriStatus mIsPLMNSet; +}; + +// Structure to describe indication TLV 0x16 for NAS CurrentPLMNNameIndication +struct sNASCurrentPLMNNameIndication_NetworkInfo +{ + eQMINASTriStatus mIsHomeNetwork; +}; + +// Structure to describe request TLV 0x01 for NASConfigureEMBMS() +struct sNASConfigureEMBMSRequest_Config +{ + INT8 mEMBMSEnabled; +}; + +// Structure to describe request TLV 0x10 for NASConfigureEMBMS() +struct sNASConfigureEMBMSRequest_TraceID +{ + INT16 mEMBMSTraceID; +}; + +// Structure to describe response TLV 0x10 for NASConfigureEMBMS() +struct sNASConfigureEMBMSResponse_TraceID +{ + INT16 mEMBMSTraceID; +}; + +// Structure to describe response TLV 0x10 for NASGetEMBMSStatus() +struct sNASGetEMBMSStatusResponse_Status +{ + INT8 mEMBMSEnabled; +}; + +// Structure to describe response TLV 0x11 for NASGetEMBMSStatus() +struct sNASGetEMBMSStatusResponse_TraceID +{ + INT16 mEMBMSTraceID; +}; + +// Structure to describe indication TLV 0x01 for NAS EMBMSStatusIndication +struct sNASEMBMSStatusIndication_Status +{ + INT8 mEMBMSEnabled; +}; + +// Structure to describe indication TLV 0x10 for NAS EMBMSStatusIndication +struct sNASEMBMSStatusIndication_TraceID +{ + INT16 mEMBMSTraceID; +}; + +// Structure to describe response TLV 0x10 for NASGetCDMAPositionInfo() +struct sNASGetCDMAPositionInfoResponse_Info +{ + INT8 mUEInIdleMode; + UINT8 mBaseStationCount; + + struct sBaseStation + { + eQMINASCDMAPilotTypes mPilotType; + UINT16 mSystemID; + UINT16 mNetworkID; + UINT16 mBaseStationID; + UINT16 mPilotPN; + UINT16 mPilotStrength; + INT32 mLatitude; + INT32 mLongitude; + UINT64 mGPSTimeInMilliseconds; + }; + + // This array must be the size specified by mBaseStationCount + // sBaseStation mBaseStations[1]; +}; + +// Structure to describe indication TLV 0x01 for NAS RFBandInfoIndication +struct sNASRFBandInfoIndication_BandInfo +{ + eQMINASRadioInterfaces mRadioInterface; + eQMINASBandClasses mActiveBandClass; + UINT16 mActiveChannel; +}; + +// Structure to describe indication TLV 0x01 for NAS NetworkRejectIndication +struct sNASNetworkRejectIndication_RadioInterface +{ + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe indication TLV 0x02 for NAS NetworkRejectIndication +struct sNASNetworkRejectIndication_ServiceDomain +{ + eQMINASSystemServiceCapabilities mRegistrationRejectServiceDomain; +}; + +// Structure to describe indication TLV 0x03 for NAS NetworkRejectIndication +struct sNASNetworkRejectIndication_RejectCause +{ + UINT8 mRejectCause; +}; + +// Structure to describe indication TLV 0x10 for NAS NetworkRejectIndication +struct sNASNetworkRejectIndication_PLMN +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + INT8 mMNCIncludesPCSDigit; +}; + +// Structure to describe indication TLV 0x11 for NAS NetworkRejectIndication +struct sNASNetworkRejectIndication_CSGID +{ + UINT32 mCSGID; +}; + +// Structure to describe response TLV 0x10 for NASGetManagedRoamingConfig() +struct sNASGetManagedRoamingConfigResponse_Config +{ + INT8 mManagedRoamingSupported; +}; + +// Structure to describe indication TLV 0x10 for NAS RTREConfigurationIndication +struct sNASRTREConfigurationIndication_CurrentConfig +{ + eQMINASRTREConfiguration mRTREConfiguration; +}; + +// Structure to describe indication TLV 0x11 for NAS RTREConfigurationIndication +struct sNASRTREConfigurationIndication_ConfigPreference +{ + eQMINASRTREConfiguration mRTREPreference; +}; + +// Structure to describe response TLV 0x10 for NASGetCentralizedEONSSupport() +struct sNASGetCentralizedEONSSupportResponse_Status +{ + INT8 mCentralizedEONSSupported; +}; + +// Structure to describe request TLV 0x10 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_CDMARSSIThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x11 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_CDMARSSIDelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x12 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_CDMAECIOThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x13 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_CDMAECIODelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x14 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_HDRRSSIThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x15 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_HDRRSSIDelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x16 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_HDRECIOThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x17 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_HDRECIODelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x18 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_HDRSINRThresholdList +{ + UINT8 mSINRThresholdCount; + + // This array must be the size specified by mSINRThresholdCount + // eQMINASSINRLevels mSINRThreshold[1]; +}; + +// Structure to describe request TLV 0x19 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_HDRSINRDelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x1A for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_HDRIOThreshold +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x1B for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_HDRIODelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x1C for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_GSMRSSIThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x1D for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_GSMRSSIDelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x1E for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_WCDMARSSIThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x1F for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_WCDMARSSIDelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x20 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_WCDMAECIOThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x21 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_WCDMAECIODelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x22 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_LTERSSIThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x23 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_LTERSSIDelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x24 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_LTESNRThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x25 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_LTESNRDelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x26 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_LTERSRQThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x27 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_LTERSRQDelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x28 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_LTERSRPThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x29 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_LTERSRPDelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x2A for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_LTESignalReportConfig +{ + eQMINASReportRate mReportRate; + eQMINASAveragePeriod mAveragePeriod; +}; + +// Structure to describe request TLV 0x2B for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_TDSCDMARSCPThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // INT16 mThreshold[1]; +}; + +// Structure to describe request TLV 0x2C for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_TDSCDMARSCPDelta +{ + UINT16 mDelta; +}; + +// Structure to describe request TLV 0x2D for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_TDSCDMARSSIThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // float mRSSIThresholddBm[1]; +}; + +// Structure to describe request TLV 0x2E for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_TDSCDMARSSIDelta +{ + float mRSSIDeltadBm; +}; + +// Structure to describe request TLV 0x2F for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_TDSCDMAECIOThresholdList +{ + UINT8 mThresholdCount; + + // This array must be the size specified by mThresholdCount + // float mECIOThresholddB[1]; +}; + +// Structure to describe request TLV 0x30 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_TDSCDMAECIODelta +{ + float mECIODeltadB; +}; + +// Structure to describe request TLV 0x31 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_TDSCDMASINRThresholdList +{ + UINT8 mSINRThresholdCount; + + // This array must be the size specified by mSINRThresholdCount + // float mSINRThresholddB[1]; +}; + +// Structure to describe request TLV 0x32 for NASConfigureSignalInfo2() +struct sNASConfigureSignalInfo2Request_TDSCDMASINRDelta +{ + float mSINRDeltadB; +}; + +// Structure to describe response TLV 0x10 for NASGetTDSCDMACellInfo() +struct sNASGetTDSCDMACellInfoResponse_CellInfo +{ + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mMobileCountryCode0:4; + UINT8 mMobileCountryCode1:4; + UINT8 mMobileCountryCode2:4; + + // Bitfield arrays are not possible in c, unrolling the array + UINT8 mMobileNetworkCode0:4; + UINT8 mMobileNetworkCode1:4; + UINT8 mMobileNetworkCode2:4; + + INT8 mMNCIncludesPCSDigit; + UINT16 mLocationAreaCode; + UINT16 mAbsoluteRFChannelNumber; + UINT32 mCellID; + UINT8 mCellParameterID; + UINT8 mPathLossdB; + float mTimingAdvanceSeconds; + float mRSCPdBm; +}; + +// Structure to describe response TLV 0x11 for NASGetTDSCDMACellInfo() +struct sNASGetTDSCDMACellInfoResponse_NeighborCellInfo +{ + UINT8 mNeighborCellCount; + + struct sNeighborCell + { + UINT16 mAbsoluteRFChannelNumber; + UINT8 mCellParameterID; + float mRSCPdBm; + }; + + // This array must be the size specified by mNeighborCellCount + // sNeighborCell mNeighborCells[1]; +}; + +// Structure to describe request TLV 0x01 for NASSetHPLMNIRATSearchTimer() +struct sNASSetHPLMNIRATSearchTimerRequest_Timer +{ + UINT16 mTDSCDMASearchTimer; +}; + +// Structure to describe request TLV 0x10 for NASGetEMBMSSignalQuality() +struct sNASGetEMBMSSignalQualityRequest_TraceID +{ + INT16 mEMBMSTraceID; +}; + +// Structure to describe response TLV 0x10 for NASGetEMBMSSignalQuality() +struct sNASGetEMBMSSignalQualityResponse_TraceID +{ + INT16 mEMBMSTraceID; +}; + +// Structure to describe response TLV 0x11 for NASGetEMBMSSignalQuality() +struct sNASGetEMBMSSignalQualityResponse_SignalQuality +{ + UINT8 mSignalCount; + + struct sSignal + { + UINT8 mMBSFNAreaID; + INT8 mAverageSNR; + INT8 mSignalLevel; + }; + + // This array must be the size specified by mSignalCount + // sSignal mSignals[1]; +}; + +// Structure to describe request TLV 0x01 for NASLimitSystemInfoIndications() +struct sNASLimitSystemInfoIndicationsRequest_Limits +{ + bool mLimitByServerStatus:1; + bool mLimitByServerDomain:1; + bool mLimitByPLMNID:1; + bool mLimitBySIDAndNID:1; + bool mLimitByRoamStatus:1; + + // Padding out 59 bits + UINT8 mReserved1:3; + UINT8 mReserved2[7]; +}; + +// Structure to describe response TLV 0x01 for NASGetSystemInfoIndicationLimits() +struct sNASGetSystemInfoIndicationLimitsResponse_Limits +{ + bool mLimitByServerStatus:1; + bool mLimitByServerDomain:1; + bool mLimitByPLMNID:1; + bool mLimitBySIDAndNID:1; + bool mLimitByRoamStatus:1; + + // Padding out 59 bits + UINT8 mReserved1:3; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x01 for NASUpdateIMSStatus() +struct sNASUpdateIMSStatusRequest_RadioInterface +{ + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe request TLV 0x02 for NASUpdateIMSStatus() +struct sNASUpdateIMSStatusRequest_IMSRegistrationState +{ + UINT8 mRegistrationStates; + + struct sRegistrationState + { + eQMINASCallTypes mCallType; + INT8 mIsRegistered; + }; + + // This array must be the size specified by mRegistrationStates + // sRegistrationState mRegistrationStates[1]; +}; + +// Structure to describe response TLV 0x10 for NASGetIMSPreference() +struct sNASGetIMSPreferenceResponse_IMSPreferenceInfo +{ + eQMINASRadioInterfaces mRadioInterface; + bool mVoice:1; + bool mSMS:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe indication TLV 0x01 for NAS IMSPreferenceIndication +struct sNASIMSPreferenceIndication_IMSPreferenceInfo +{ + eQMINASRadioInterfaces mRadioInterface; + bool mVoice:1; + bool mSMS:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x01 for NASConfigurePLMNNameIndication() +struct sNASConfigurePLMNNameIndicationRequest_ReportAllNames +{ + INT8 mReportAllAvailableNames; +}; + +// Structure to describe request TLV 0x01 for NASCDMAAvoidSystem() +struct sNASCDMAAvoidSystemRequest_AvoidSystemInfo +{ + eQMINASAvoidSystemTypes mAvoidType; +}; + +// Structure to describe response TLV 0x10 for NASGetCDMAAvoidSystemList() +struct sNASGetCDMAAvoidSystemListResponse_AvoidedSystemList +{ + UINT8 mAvoidedSystemCount; + + struct sAvoidedSystem + { + UINT16 mSystemID; + UINT16 mNetworkID; + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; + }; + + // This array must be the size specified by mAvoidedSystemCount + // sAvoidedSystem mAvoidedSystems[1]; +}; + +// Structure to describe request TLV 0x01 for NASSetHPLMNSearchTimer() +struct sNASSetHPLMNSearchTimerRequest_HPLMNSearchTimer +{ + UINT32 mHPLMNSearchTimerInMinutes; +}; + +// Structure to describe response TLV 0x10 for NASGetHPLMNSearchTimer() +struct sNASGetHPLMNSearchTimerResponse_HPLMNSearchTimer +{ + UINT32 mHPLMNSearchTimerInMinutes; +}; + +// Structure to describe request TLV 0x01 for NASSetE911State() +struct sNASSetE911StateRequest_E911State +{ + eQMINASE911States mE911State; +}; + +// Structure to describe response TLV 0x10 for NASGetSubscriptionInfo() +struct sNASGetSubscriptionInfoResponse_PriorityInfo +{ + INT8 mIsPrioritySubscription; +}; + +// Structure to describe response TLV 0x11 for NASGetSubscriptionInfo() +struct sNASGetSubscriptionInfoResponse_ActiveInfo +{ + INT8 mIsSubscriptionActive; +}; + +// Structure to describe response TLV 0x12 for NASGetSubscriptionInfo() +struct sNASGetSubscriptionInfoResponse_DefaultDataInfo +{ + INT8 mIsDefaultDataSubscription; +}; + +// Structure to describe response TLV 0x13 for NASGetSubscriptionInfo() +struct sNASGetSubscriptionInfoResponse_VoiceSystemID +{ + UINT32 mVoiceSystemID; +}; + +// Structure to describe response TLV 0x10 for NASGetNetworkTime() +struct sNASGetNetworkTimeResponse_3GPP2Time +{ + UINT16 mYear; + UINT8 mMonth; + UINT8 mDay; + UINT8 mHour; + UINT8 mMinute; + UINT8 mSecond; + eQMINASDayOfWeek mDayOfWeek; + INT8 mTimeZoneOffset; + eQMINASDaylightSavingsAdjustment mDaylightSavingsAdjustment; + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe response TLV 0x11 for NASGetNetworkTime() +struct sNASGetNetworkTimeResponse_3GPPTime +{ + UINT16 mYear; + UINT8 mMonth; + UINT8 mDay; + UINT8 mHour; + UINT8 mMinute; + UINT8 mSecond; + eQMINASDayOfWeek mDayOfWeek; + INT8 mTimeZoneOffset; + eQMINASDaylightSavingsAdjustment mDaylightSavingsAdjustment; + eQMINASRadioInterfaces mRadioInterface; +}; + +// Structure to describe response TLV 0x10 for NASGetLTESIB16NetworkTime() +struct sNASGetLTESIB16NetworkTimeResponse_LTESIB16Status +{ + eQMINASTriStatus mLTESIB16Acquired; +}; + +// Structure to describe response TLV 0x11 for NASGetLTESIB16NetworkTime() +struct sNASGetLTESIB16NetworkTimeResponse_UniversalTime +{ + UINT16 mYear; + UINT8 mMonth; + UINT8 mDay; + UINT8 mHour; + UINT8 mMinute; + UINT8 mSecond; + eQMINASDayOfWeek mDayOfWeek; +}; + +// Structure to describe response TLV 0x12 for NASGetLTESIB16NetworkTime() +struct sNASGetLTESIB16NetworkTimeResponse_AbsoluteTime +{ + UINT64 mAbsoluteTime; +}; + +// Structure to describe response TLV 0x13 for NASGetLTESIB16NetworkTime() +struct sNASGetLTESIB16NetworkTimeResponse_LeapSecond +{ + INT8 mLeapSeconds; +}; + +// Structure to describe response TLV 0x14 for NASGetLTESIB16NetworkTime() +struct sNASGetLTESIB16NetworkTimeResponse_TimeZone +{ + INT8 mTimeZoneOffset; +}; + +// Structure to describe response TLV 0x15 for NASGetLTESIB16NetworkTime() +struct sNASGetLTESIB16NetworkTimeResponse_DaylightSavings +{ + eQMINASDaylightSavingsAdjustment mDaylightSavingsAdjustment; +}; + +// Structure to describe indication TLV 0x10 for NAS LTESIB16NetworkTimeIndication +struct sNASLTESIB16NetworkTimeIndication_LTESIB16Status +{ + eQMINASTriStatus mLTESIB16Acquired; +}; + +// Structure to describe indication TLV 0x11 for NAS LTESIB16NetworkTimeIndication +struct sNASLTESIB16NetworkTimeIndication_UniversalTime +{ + UINT16 mYear; + UINT8 mMonth; + UINT8 mDay; + UINT8 mHour; + UINT8 mMinute; + UINT8 mSecond; + eQMINASDayOfWeek mDayOfWeek; +}; + +// Structure to describe indication TLV 0x12 for NAS LTESIB16NetworkTimeIndication +struct sNASLTESIB16NetworkTimeIndication_AbsoluteTime +{ + UINT64 mAbsoluteTime; +}; + +// Structure to describe indication TLV 0x13 for NAS LTESIB16NetworkTimeIndication +struct sNASLTESIB16NetworkTimeIndication_LeapSecond +{ + INT8 mLeapSeconds; +}; + +// Structure to describe indication TLV 0x14 for NAS LTESIB16NetworkTimeIndication +struct sNASLTESIB16NetworkTimeIndication_TimeZone +{ + INT8 mTimeZoneOffset; +}; + +// Structure to describe indication TLV 0x15 for NAS LTESIB16NetworkTimeIndication +struct sNASLTESIB16NetworkTimeIndication_DaylightSavings +{ + eQMINASDaylightSavingsAdjustment mDaylightSavingsAdjustment; +}; + +// Structure to describe request TLV 0x10 for WMSSetEventReport() +struct sWMSSetEventReportRequest_NewMTMessageIndicator +{ + INT8 mReportNewMTMessages; +}; + +// Structure to describe request TLV 0x11 for WMSSetEventReport() +struct sWMSSetEventReportRequest_MOSMSCallControlInfo +{ + INT8 mReportMOSMSCallControl; +}; + +// Structure to describe request TLV 0x12 for WMSSetEventReport() +struct sWMSSetEventReportRequest_MWIMessageIndicator +{ + INT8 mReportNewMWIMessages; +}; + +// Structure to describe indication TLV 0x10 for WMS EventReport +struct sWMSEventReportIndication_ReceivedMTMessage +{ + eQMIWMSStorageTypes mStorageType; + UINT32 mStorageIndex; +}; + +// Structure to describe indication TLV 0x11 for WMS EventReport +struct sWMSEventReportIndication_TransferRouteMTMessage +{ + INT8 mACKRequired; + UINT32 mTransactionID; + eQMIWMSMessageFormats mMessageFormat; + UINT16 mRawMessageLength; + + // This array must be the size specified by mRawMessageLength + // UINT8 mRawMessage[1]; +}; + +// Structure to describe indication TLV 0x12 for WMS EventReport +struct sWMSEventReportIndication_MessageMode +{ + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe indication TLV 0x13 for WMS EventReport +struct sWMSEventReportIndication_ReceivedETWSMessage +{ + eQMIWMSNotificationType mNotificationType; + UINT16 mRawMessageLength; + + // This array must be the size specified by mRawMessageLength + // UINT8 mRawMessage[1]; +}; + +// Structure to describe indication TLV 0x14 for WMS EventReport +struct sWMSEventReportIndication_ReceivedETWSPLMNInfo +{ + UINT16 mMobileCountryCode; + UINT16 mMobileNetworkCode; +}; + +// Structure to describe indication TLV 0x15 for WMS EventReport +struct sWMSEventReportIndication_ReceivedSMSCAddress +{ + UINT8 mSMSCAddressLength; + + // This array must be the size specified by mSMSCAddressLength + // char mSMSCAddress[1]; +}; + +// Structure to describe indication TLV 0x16 for WMS EventReport +struct sWMSEventReportIndication_SMSOnIMS +{ + INT8 mMessageReceivedFromIMS; +}; + +// Structure to describe indication TLV 0x17 for WMS EventReport +struct sWMSEventReportIndication_CallControlInfo +{ + eQMIWMSCallControlTypes mMOCallControlType; + UINT8 mAlphaIDLength; + + // This array must be the size specified by mAlphaIDLength + // UINT8 mAlphaID[1]; +}; + +// Structure to describe request TLV 0x01 for WMSRawSend() +struct sWMSRawSendRequest_MessageData +{ + eQMIWMSMessageFormats mMessageFormat; + UINT16 mRawMessageLength; + + // This array must be the size specified by mRawMessageLength + // UINT8 mRawMessage[1]; +}; + +// Structure to describe request TLV 0x10 for WMSRawSend() +struct sWMSRawSendRequest_ForceOnDC +{ + INT8 mForceSendOnDC; + eQMIWMSCDMAServiceOptions mServiceOption; +}; + +// Structure to describe request TLV 0x11 for WMSRawSend() +struct sWMSRawSendRequest_FollowOnDC +{ + INT8 mDoNotDisconnectDC; +}; + +// Structure to describe request TLV 0x12 for WMSRawSend() +struct sWMSRawSendRequest_LinkControl +{ + UINT8 mLinkTimerInSeconds; +}; + +// Structure to describe request TLV 0x13 for WMSRawSend() +struct sWMSRawSendRequest_SMSOnIMS +{ + INT8 mMessageToBeSentOnIMS; +}; + +// Structure to describe request TLV 0x14 for WMSRawSend() +struct sWMSRawSendRequest_RetryMessage +{ + INT8 mMessageIsARetry; +}; + +// Structure to describe request TLV 0x15 for WMSRawSend() +struct sWMSRawSendRequest_RetryMessageID +{ + UINT32 mMessageRetryID; +}; + +// Structure to describe request TLV 0x16 for WMSRawSend() +struct sWMSRawSendRequest_LinkControlEnabling +{ + INT8 mAlwaysEnableLinkControl; +}; + +// Structure to describe response TLV 0x01 for WMSRawSend() +struct sWMSRawSendResponse_MessageID +{ + UINT16 mMessageID; +}; + +// Structure to describe response TLV 0x10 for WMSRawSend() +struct sWMSRawSendResponse_CauseCode +{ + eQMIWMSCauseCodes mCauseCode; +}; + +// Structure to describe response TLV 0x11 for WMSRawSend() +struct sWMSRawSendResponse_ErrorClass +{ + eQMIWMSErrorClasses mErrorClass; +}; + +// Structure to describe response TLV 0x12 for WMSRawSend() +struct sWMSRawSendResponse_CauseInfo +{ + eQMIWMSRPCauseCodes mGSMWCDMARPCause; + eQMIWMSTPCauseCodes mGSMWCDMATPCause; +}; + +// Structure to describe response TLV 0x13 for WMSRawSend() +struct sWMSRawSendResponse_MessageDeliveryFailureType +{ + eQMIWMSMessageDeliveryFailureType mMessageDeliveryFailureType; +}; + +// Structure to describe response TLV 0x14 for WMSRawSend() +struct sWMSRawSendResponse_MessageDeliveryFailureCause +{ + eQMIWMSDeliveryFailures mDeliveryFailureCause; +}; + +// Structure to describe response TLV 0x15 for WMSRawSend() +struct sWMSRawSendResponse_CallControlModifiedInfo +{ + UINT8 mAlphaIDLength; + + // This array must be the size specified by mAlphaIDLength + // UINT8 mAlphaID[1]; +}; + +// Structure to describe request TLV 0x01 for WMSRawWrite() +struct sWMSRawWriteRequest_MessageData +{ + eQMIWMSStorageTypes mStorageType; + eQMIWMSMessageFormats mMessageFormat; + UINT16 mRawMessageLength; + + // This array must be the size specified by mRawMessageLength + // UINT8 mRawMessage[1]; +}; + +// Structure to describe request TLV 0x10 for WMSRawWrite() +struct sWMSRawWriteRequest_MessageTag +{ + eQMIWMSMessageTags mMessageTag; +}; + +// Structure to describe response TLV 0x01 for WMSRawWrite() +struct sWMSRawWriteResponse_MessageIndex +{ + UINT32 mStorageIndex; +}; + +// Structure to describe request TLV 0x01 for WMSRawRead() +struct sWMSRawReadRequest_MessageIndex +{ + eQMIWMSStorageTypes mStorageType; + UINT32 mStorageIndex; +}; + +// Structure to describe request TLV 0x10 for WMSRawRead() +struct sWMSRawReadRequest_MessageMode +{ + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe request TLV 0x11 for WMSRawRead() +struct sWMSRawReadRequest_SMSOnIMS +{ + INT8 mMessageToBeReadFromIMS; +}; + +// Structure to describe response TLV 0x01 for WMSRawRead() +struct sWMSRawReadResponse_MessageData +{ + eQMIWMSMessageTags mMessageTag; + eQMIWMSMessageFormats mMessageFormat; + UINT16 mRawMessageLength; + + // This array must be the size specified by mRawMessageLength + // UINT8 mRawMessage[1]; +}; + +// Structure to describe request TLV 0x01 for WMSModifyTag() +struct sWMSModifyTagRequest_MessageTag +{ + eQMIWMSStorageTypes mStorageType; + UINT32 mStorageIndex; + eQMIWMSMessageTags mMessageTag; +}; + +// Structure to describe request TLV 0x10 for WMSModifyTag() +struct sWMSModifyTagRequest_MessageMode +{ + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe request TLV 0x01 for WMSDelete() +struct sWMSDeleteRequest_MemoryStorage +{ + eQMIWMSStorageTypes mStorageType; +}; + +// Structure to describe request TLV 0x10 for WMSDelete() +struct sWMSDeleteRequest_MessageIndex +{ + UINT32 mStorageIndex; +}; + +// Structure to describe request TLV 0x11 for WMSDelete() +struct sWMSDeleteRequest_MessageTag +{ + eQMIWMSMessageTags mMessageTag; +}; + +// Structure to describe request TLV 0x12 for WMSDelete() +struct sWMSDeleteRequest_MessageMode +{ + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe response TLV 0x01 for WMSGetMessageProtocol() +struct sWMSGetMessageProtocolResponse_MessageProtocol +{ + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe request TLV 0x01 for WMSListMessages() +struct sWMSListMessagesRequest_MemoryStorage +{ + eQMIWMSStorageTypes mStorageType; +}; + +// Structure to describe request TLV 0x10 for WMSListMessages() +struct sWMSListMessagesRequest_MessageTag +{ + eQMIWMSMessageTags mMessageTag; +}; + +// Structure to describe request TLV 0x11 for WMSListMessages() +struct sWMSListMessagesRequest_MessageMode +{ + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe response TLV 0x01 for WMSListMessages() +struct sWMSListMessagesResponse_MessageList +{ + UINT32 mNumberOfMessages; + + struct sMessage + { + UINT32 mStorageIndex; + eQMIWMSMessageTags mMessageTag; + }; + + // This array must be the size specified by mNumberOfMessages + // sMessage mMessages[1]; +}; + +// Structure to describe request TLV 0x01 for WMSSetRoutes() +struct sWMSSetRoutesRequest_RouteList +{ + UINT16 mNumberOfRoutes; + + struct sRoute + { + eQMIWMSMessageTypes mMessageType; + eQMIWMSMessageClasses mMessageClass; + eQMIWMSStorageTypes mStorageType; + eQMIWMSReceiptActions mReceiptAction; + }; + + // This array must be the size specified by mNumberOfRoutes + // sRoute mRoutes[1]; +}; + +// Structure to describe request TLV 0x10 for WMSSetRoutes() +struct sWMSSetRoutesRequest_TransferStatusReport +{ + INT8 mTransferStatusReports; +}; + +// Structure to describe response TLV 0x01 for WMSGetRoutes() +struct sWMSGetRoutesResponse_RouteList +{ + UINT16 mNumberOfRoutes; + + struct sRoute + { + eQMIWMSMessageTypes mMessageType; + eQMIWMSMessageClasses mMessageClass; + eQMIWMSStorageTypes mStorageType; + eQMIWMSRouteValues mRouteValue; + }; + + // This array must be the size specified by mNumberOfRoutes + // sRoute mRoutes[1]; +}; + +// Structure to describe response TLV 0x10 for WMSGetRoutes() +struct sWMSGetRoutesResponse_TransferStatusReport +{ + INT8 mTransferStatusReports; +}; + +// Structure to describe response TLV 0x01 for WMSGetSMSCAddress() +struct sWMSGetSMSCAddressResponse_Address +{ + char mSMSCAddressType[3]; + UINT8 mSMSCAddressLength; + + // This array must be the size specified by mSMSCAddressLength + // char mSMSCAddress[1]; +}; + +// Structure to describe request TLV 0x01 for WMSSetSMSCAddress() +struct sWMSSetSMSCAddressRequest_Address +{ + // String is variable length, but must be size of the container + // char mSMSCAddress[1]; +}; + +// Structure to describe request TLV 0x10 for WMSSetSMSCAddress() +struct sWMSSetSMSCAddressRequest_AddressType +{ + // String is variable length, but must be size of the container + // char mSMSCAddressType[1]; +}; + +// Structure to describe request TLV 0x01 for WMSGetStorageMaxSize() +struct sWMSGetStorageMaxSizeRequest_MemoryStorage +{ + eQMIWMSStorageTypes mStorageType; +}; + +// Structure to describe request TLV 0x10 for WMSGetStorageMaxSize() +struct sWMSGetStorageMaxSizeRequest_MessageMode +{ + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe response TLV 0x01 for WMSGetStorageMaxSize() +struct sWMSGetStorageMaxSizeResponse_MaxSize +{ + UINT32 mMaxStorageSizeInMessages; +}; + +// Structure to describe response TLV 0x10 for WMSGetStorageMaxSize() +struct sWMSGetStorageMaxSizeResponse_AvailableSize +{ + UINT32 mFreeStorageSizeInMessages; +}; + +// Structure to describe request TLV 0x01 for WMSSendACK() +struct sWMSSendACKRequest_ACK +{ + UINT32 mTransactionID; + eQMIWMSMessageProtocols mMode; + INT8 mProcessedSuccessfully; +}; + +// Structure to describe request TLV 0x10 for WMSSendACK() +struct sWMSSendACKRequest_3GPP2FailureInfo +{ + eQMIWMSErrorClasses2 mErrorClass; + UINT8 mTransportLayerStatus; +}; + +// Structure to describe request TLV 0x11 for WMSSendACK() +struct sWMSSendACKRequest_3GPPFailureInfo +{ + // mGSMWCDMARPCause is of type eQMIWMSRPCauseCodes + UINT8 mGSMWCDMARPCause; + eQMIWMSTPCauseCodes mGSMWCDMATPCause; +}; + +// Structure to describe request TLV 0x12 for WMSSendACK() +struct sWMSSendACKRequest_SMSOnIMS +{ + INT8 mACKToBeSentOnIMS; +}; + +// Structure to describe response TLV 0x10 for WMSSendACK() +struct sWMSSendACKResponse_ACKFailureCause +{ + eQMIWMSACKFailureCause mACKFailureCause; +}; + +// Structure to describe request TLV 0x01 for WMSSetRetryPeriod() +struct sWMSSetRetryPeriodRequest_Period +{ + UINT32 mRetryPeriodInSeconds; +}; + +// Structure to describe request TLV 0x01 for WMSSetRetryInterval() +struct sWMSSetRetryIntervalRequest_Interval +{ + UINT32 mRetryIntervalInSeconds; +}; + +// Structure to describe request TLV 0x01 for WMSSetDCDisconnectTimer() +struct sWMSSetDCDisconnectTimerRequest_Timer +{ + UINT32 mDCDisconnectTimerInSeconds; +}; + +// Structure to describe request TLV 0x01 for WMSSetMemoryStatus() +struct sWMSSetMemoryStatusRequest_Status +{ + INT8 mMemoryIsAvailable; +}; + +// Structure to describe request TLV 0x01 for WMSSetBroadcastActivation() +struct sWMSSetBroadcastActivationRequest_BCInfo +{ + eQMIWMSMessageProtocols mMode; + INT8 mActivateBroadcast; +}; + +// Structure to describe request TLV 0x10 for WMSSetBroadcastActivation() +struct sWMSSetBroadcastActivationRequest_BCFiltering +{ + INT8 mNoBroadcastMessageFiltering; +}; + +// Structure to describe request TLV 0x01 for WMSSetBroadcastConfig() +struct sWMSSetBroadcastConfigRequest_Mode +{ + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe request TLV 0x10 for WMSSetBroadcastConfig() +struct sWMSSetBroadcastConfigRequest_3GPPInfo +{ + UINT16 mNumberOfInstances; + + struct sInstance + { + UINT16 mMessageIDStart; + UINT16 mMessageIDEnd; + INT8 mSelected; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe request TLV 0x11 for WMSSetBroadcastConfig() +struct sWMSSetBroadcastConfigRequest_3GPP2Info +{ + UINT16 mNumberOfInstances; + + struct sInstance + { + eQMIWMSServiceCategories mServiceCategory; + eQMIWMSLanguage mLanguage; + INT8 mSelected; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe request TLV 0x01 for WMSGetBroadcastConfig() +struct sWMSGetBroadcastConfigRequest_Mode +{ + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe response TLV 0x10 for WMSGetBroadcastConfig() +struct sWMSGetBroadcastConfigResponse_3GPPInfo +{ + INT8 mActivated; + UINT16 mNumberOfInstances; + + struct sInstance + { + UINT16 mMessageIDStart; + UINT16 mMessageIDEnd; + INT8 mSelected; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x11 for WMSGetBroadcastConfig() +struct sWMSGetBroadcastConfigResponse_3GPP2Info +{ + INT8 mActivated; + UINT16 mNumberOfInstances; + + struct sInstance + { + eQMIWMSServiceCategories mServiceCategory; + eQMIWMSLanguage mLanguage; + INT8 mSelected; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x01 for WMS MemoryFullIndication +struct sWMSMemoryFullIndication_Info +{ + eQMIWMSStorageTypes mStorageType; + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe response TLV 0x01 for WMSGetDomainPreference() +struct sWMSGetDomainPreferenceResponse_Pref +{ + eQMIWMSGSMWCDMADomains mDomainPreference; +}; + +// Structure to describe request TLV 0x01 for WMSSetDomainPreference() +struct sWMSSetDomainPreferenceRequest_Pref +{ + eQMIWMSGSMWCDMADomains mDomainPreference; +}; + +// Structure to describe request TLV 0x01 for WMSSendFromMemoryStore() +struct sWMSSendFromMemoryStoreRequest_Info +{ + eQMIWMSStorageTypes mStorageType; + UINT32 mStorageIndex; + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe request TLV 0x10 for WMSSendFromMemoryStore() +struct sWMSSendFromMemoryStoreRequest_SMSOnIMS +{ + INT8 mMessageToBeSentOnIMS; +}; + +// Structure to describe response TLV 0x10 for WMSSendFromMemoryStore() +struct sWMSSendFromMemoryStoreResponse_MessageID +{ + UINT16 mMessageID; +}; + +// Structure to describe response TLV 0x11 for WMSSendFromMemoryStore() +struct sWMSSendFromMemoryStoreResponse_CauseCode +{ + eQMIWMSCauseCodes mCauseCode; +}; + +// Structure to describe response TLV 0x12 for WMSSendFromMemoryStore() +struct sWMSSendFromMemoryStoreResponse_ErrorClass +{ + eQMIWMSErrorClasses mErrorClass; +}; + +// Structure to describe response TLV 0x13 for WMSSendFromMemoryStore() +struct sWMSSendFromMemoryStoreResponse_CauseInfo +{ + eQMIWMSRPCauseCodes mGSMWCDMARPCause; + eQMIWMSTPCauseCodes mGSMWCDMATPCause; +}; + +// Structure to describe response TLV 0x14 for WMSSendFromMemoryStore() +struct sWMSSendFromMemoryStoreResponse_MessageDeliveryFailureType +{ + eQMIWMSMessageDeliveryFailureType mMessageDeliveryFailureType; +}; + +// Structure to describe response TLV 0x01 for WMSGetWaitingMessage() +struct sWMSGetWaitingMessageResponse_WaitingMessageInfo +{ + UINT8 mNumberOfWaitingMessages; + eQMIWMSWaitingMessageType mWaitingMessageType; + INT8 mActiveIndication; + UINT8 mMessageCount; +}; + +// Structure to describe indication TLV 0x01 for WMS WaitingMessageIndication +struct sWMSWaitingMessageIndication_WaitingMessageInfo +{ + UINT8 mNumberOfWaitingMessages; + eQMIWMSWaitingMessageType mWaitingMessageType; + INT8 mActiveIndication; + UINT8 mMessageCount; +}; + +// Structure to describe request TLV 0x01 for WMSSetPrimaryClient() +struct sWMSSetPrimaryClientRequest_PrimaryClientInfo +{ + INT8 mPrimaryClient; +}; + +// Structure to describe indication TLV 0x01 for WMS SMSCAddressIndication +struct sWMSSMSCAddressIndication_Address +{ + char mSMSCAddressType[3]; + UINT8 mSMSCAddressLength; + + // This array must be the size specified by mSMSCAddressLength + // char mSMSCAddress[1]; +}; + +// Structure to describe request TLV 0x10 for WMSIndicatorRegistration() +struct sWMSIndicatorRegistrationRequest_TransportLayerInfoEvents +{ + INT8 mTransportLayerInfoEvents; +}; + +// Structure to describe request TLV 0x11 for WMSIndicatorRegistration() +struct sWMSIndicatorRegistrationRequest_NetworkRegistrationInfoEvents +{ + INT8 mNetworkRegistrationInfoEvents; +}; + +// Structure to describe request TLV 0x12 for WMSIndicatorRegistration() +struct sWMSIndicatorRegistrationRequest_CallStatusInfoEvents +{ + INT8 mCallStatusInfoEvents; +}; + +// Structure to describe request TLV 0x13 for WMSIndicatorRegistration() +struct sWMSIndicatorRegistrationRequest_ServiceReadyEvents +{ + INT8 mServiceReadyEvents; +}; + +// Structure to describe request TLV 0x14 for WMSIndicatorRegistration() +struct sWMSIndicatorRegistrationRequest_BroadcastConfigEvents +{ + INT8 mBroadcastConfigEvents; +}; + +// Structure to describe response TLV 0x10 for WMSGetTransportInfoLayer() +struct sWMSGetTransportInfoLayerResponse_TransportLayerRegistrationInfo +{ + INT8 mRegistered; +}; + +// Structure to describe response TLV 0x11 for WMSGetTransportLayerInfo() +struct sWMSGetTransportLayerInfoResponse_TransportLayerInfo +{ + eQMIWMSTransportType mTransportType; + eQMIWMSTransportCapability mTransportCapability; +}; + +// Structure to describe indication TLV 0x01 for WMS TransportLayerInfoIndication +struct sWMSTransportLayerInfoIndication_TransportLayerRegInfo +{ + INT8 mRegistered; +}; + +// Structure to describe indication TLV 0x10 for WMS TransportLayerInfoIndication +struct sWMSTransportLayerInfoIndication_TransportLayerInfo +{ + eQMIWMSTransportType mTransportType; + eQMIWMSTransportCapability mTransportCapability; +}; + +// Structure to describe response TLV 0x10 for WMSGetNetworkRegistrationInfo() +struct sWMSGetNetworkRegistrationInfoResponse_NetworkRegistrationInfo +{ + eQMIWMSNetworkRegistrationStatus mNetworkRegistrationStatus; +}; + +// Structure to describe indication TLV 0x01 for WMS NetworkRegistrationInfoIndication +struct sWMSNetworkRegistrationInfoIndication_NetworkRegistrationInfo +{ + eQMIWMSNetworkRegistrationStatus mNetworkRegistrationStatus; +}; + +// Structure to describe request TLV 0x01 for WMSBindSubscription() +struct sWMSBindSubscriptionRequest_SubscriptionType +{ + eQMIWMSSubscriptionType mSubscriptionType; +}; + +// Structure to describe response TLV 0x10 for WMSGetIndicatorRegistration() +struct sWMSGetIndicatorRegistrationResponse_TransportLayerInfoEvents +{ + INT8 mTransportLayerInfoEvents; +}; + +// Structure to describe response TLV 0x11 for WMSGetIndicatorRegistration() +struct sWMSGetIndicatorRegistrationResponse_NetworkRegistrationInfoEvents +{ + INT8 mNetworkRegistrationInfoEvents; +}; + +// Structure to describe response TLV 0x12 for WMSGetIndicatorRegistration() +struct sWMSGetIndicatorRegistrationResponse_CallStatusInfoEvents +{ + INT8 mCallStatusInfoEvents; +}; + +// Structure to describe response TLV 0x13 for WMSGetIndicatorRegistration() +struct sWMSGetIndicatorRegistrationResponse_ServiceReadyEvents +{ + INT8 mServiceReadyEvents; +}; + +// Structure to describe response TLV 0x14 for WMSGetIndicatorRegistration() +struct sWMSGetIndicatorRegistrationResponse_BroadcastConfigEvents +{ + INT8 mBroadcastConfigEvents; +}; + +// Structure to describe request TLV 0x01 for WMSGetSMSParameters() +struct sWMSGetSMSParametersRequest_MessageMode +{ + eQMIWMSSMSMessageMode mSMSMessageMode; +}; + +// Structure to describe response TLV 0x10 for WMSGetSMSParameters() +struct sWMSGetSMSParametersResponse_DestinationAddress +{ + UINT8 mDestinationAddressLength; + + // This array must be the size specified by mDestinationAddressLength + // UINT8 mDestinationAddress[1]; +}; + +// Structure to describe response TLV 0x11 for WMSGetSMSParameters() +struct sWMSGetSMSParametersResponse_ProtocolIdentifierData +{ + eQMIWMSProtocolIdentifierData mProtocolIdentifierData; +}; + +// Structure to describe response TLV 0x12 for WMSGetSMSParameters() +struct sWMSGetSMSParametersResponse_DataCodingScheme +{ + UINT8 mDataCodingScheme; +}; + +// Structure to describe response TLV 0x13 for WMSGetSMSParameters() +struct sWMSGetSMSParametersResponse_ValidityPeriod +{ + UINT8 mValidityPeriod; +}; + +// Structure to describe request TLV 0x01 for WMSSetSMSParameters() +struct sWMSSetSMSParametersRequest_MessageMode +{ + eQMIWMSSMSMessageMode mSMSMessageMode; +}; + +// Structure to describe request TLV 0x10 for WMSSetSMSParameters() +struct sWMSSetSMSParametersRequest_DestinationAddress +{ + UINT8 mDestinationAddressLength; + + // This array must be the size specified by mDestinationAddressLength + // UINT8 mDestinationAddress[1]; +}; + +// Structure to describe request TLV 0x11 for WMSSetSMSParameters() +struct sWMSSetSMSParametersRequest_ProtocolIdentifierData +{ + eQMIWMSProtocolIdentifierData mProtocolIdentifierData; +}; + +// Structure to describe request TLV 0x12 for WMSSetSMSParameters() +struct sWMSSetSMSParametersRequest_DataCodingScheme +{ + UINT8 mDataCodingScheme; +}; + +// Structure to describe request TLV 0x13 for WMSSetSMSParameters() +struct sWMSSetSMSParametersRequest_ValidityPeriod +{ + UINT8 mValidityPeriod; +}; + +// Structure to describe indication TLV 0x01 for WMS CallStatusIndication +struct sWMSCallStatusIndication_SMSCallStatusInfo +{ + eQMIWMSSMSCallStatus mSMSCallStatus; +}; + +// Structure to describe response TLV 0x10 for WMSGetDomainPreferenceConfig() +struct sWMSGetDomainPreferenceConfigResponse_LTEDomain +{ + eQMIWMSLTEDomains mLTEDomainPreference; +}; + +// Structure to describe response TLV 0x11 for WMSGetDomainPreferenceConfig() +struct sWMSGetDomainPreferenceConfigResponse_GWDomain +{ + eQMIWMSGSMWCDMADomains mDomainPreference; +}; + +// Structure to describe response TLV 0x10 for WMSSetDomainPreferenceConfig() +struct sWMSSetDomainPreferenceConfigResponse_LTEDomain +{ + eQMIWMSLTEDomains mLTEDomainPreference; +}; + +// Structure to describe response TLV 0x11 for WMSSetDomainPreferenceConfig() +struct sWMSSetDomainPreferenceConfigResponse_GWDomain +{ + eQMIWMSGSMWCDMADomains mDomainPreference; +}; + +// Structure to describe response TLV 0x10 for WMSSetDomainPreferenceConfig() +struct sWMSSetDomainPreferenceConfigResponse_LTEOutcome +{ + UINT16 mLTEDomainPreferenceOutcome; +}; + +// Structure to describe response TLV 0x11 for WMSSetDomainPreferenceConfig() +struct sWMSSetDomainPreferenceConfigResponse_GWOutcome +{ + UINT16 mGWDomainPreferenceOutcome; +}; + +// Structure to describe response TLV 0x10 for WMSGetRetryPeriod() +struct sWMSGetRetryPeriodResponse_RetryPeriod +{ + UINT32 mRetryPeriodInSeconds; +}; + +// Structure to describe response TLV 0x10 for WMSGetRetryInterval() +struct sWMSGetRetryIntervalResponse_RetryInterval +{ + UINT32 mRetryIntervalInSeconds; +}; + +// Structure to describe response TLV 0x10 for WMSGetDCDisconnectTimer() +struct sWMSGetDCDisconnectTimerResponse_DCDisconnectTimer +{ + UINT32 mDCDisconnectTimerInSeconds; +}; + +// Structure to describe response TLV 0x10 for WMSGetMemoryStatus() +struct sWMSGetMemoryStatusResponse_MemoryStatus +{ + INT8 mMemoryIsAvailable; +}; + +// Structure to describe response TLV 0x10 for WMSGetPrimaryClient() +struct sWMSGetPrimaryClientResponse_PrimaryClientInfo +{ + INT8 mPrimaryClient; +}; + +// Structure to describe response TLV 0x10 for WMSGetSubscriptionBinding() +struct sWMSGetSubscriptionBindingResponse_SubscriptionType +{ + eQMIWMSSubscriptionType mSubscriptionType; +}; + +// Structure to describe request TLV 0x01 for WMSAsyncRawSend() +struct sWMSAsyncRawSendRequest_MessageData +{ + eQMIWMSMessageFormats mMessageFormat; + UINT16 mRawMessageLength; + + // This array must be the size specified by mRawMessageLength + // UINT8 mRawMessage[1]; +}; + +// Structure to describe request TLV 0x10 for WMSAsyncRawSend() +struct sWMSAsyncRawSendRequest_ForceOnDC +{ + INT8 mForceSendOnDC; + eQMIWMSCDMAServiceOptions mServiceOption; +}; + +// Structure to describe request TLV 0x11 for WMSAsyncRawSend() +struct sWMSAsyncRawSendRequest_FollowOnDC +{ + INT8 mDoNotDisconnectDC; +}; + +// Structure to describe request TLV 0x12 for WMSAsyncRawSend() +struct sWMSAsyncRawSendRequest_LinkControl +{ + UINT8 mLinkTimerInSeconds; +}; + +// Structure to describe request TLV 0x13 for WMSAsyncRawSend() +struct sWMSAsyncRawSendRequest_SMSOnIMS +{ + INT8 mMessageToBeSentOnIMS; +}; + +// Structure to describe request TLV 0x14 for WMSAsyncRawSend() +struct sWMSAsyncRawSendRequest_RetryMessage +{ + INT8 mMessageIsARetry; +}; + +// Structure to describe request TLV 0x15 for WMSAsyncRawSend() +struct sWMSAsyncRawSendRequest_RetryMessageID +{ + UINT32 mMessageRetryID; +}; + +// Structure to describe request TLV 0x16 for WMSAsyncRawSend() +struct sWMSAsyncRawSendRequest_UserData +{ + UINT32 mUserData; +}; + +// Structure to describe request TLV 0x17 for WMSAsyncRawSend() +struct sWMSAsyncRawSendRequest_LinkControlEnabling +{ + INT8 mAlwaysEnableLinkControl; +}; + +// Structure to describe indication TLV 0x01 for WMS AsyncRawSendIndication +struct sWMSAsyncRawSendIndication_Status +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for WMS AsyncRawSendIndication +struct sWMSAsyncRawSendIndication_MessageID +{ + UINT16 mMessageID; +}; + +// Structure to describe indication TLV 0x11 for WMS AsyncRawSendIndication +struct sWMSAsyncRawSendIndication_CauseCode +{ + eQMIWMSCauseCodes mCauseCode; +}; + +// Structure to describe indication TLV 0x12 for WMS AsyncRawSendIndication +struct sWMSAsyncRawSendIndication_ErrorClass +{ + eQMIWMSErrorClasses mErrorClass; +}; + +// Structure to describe indication TLV 0x13 for WMS AsyncRawSendIndication +struct sWMSAsyncRawSendIndication_CauseInfo +{ + eQMIWMSRPCauseCodes mGSMWCDMARPCause; + eQMIWMSTPCauseCodes mGSMWCDMATPCause; +}; + +// Structure to describe indication TLV 0x14 for WMS AsyncRawSendIndication +struct sWMSAsyncRawSendIndication_MessageDeliveryFailureType +{ + eQMIWMSMessageDeliveryFailureType mMessageDeliveryFailureType; +}; + +// Structure to describe indication TLV 0x15 for WMS AsyncRawSendIndication +struct sWMSAsyncRawSendIndication_MessageDeliveryFailureCause +{ + eQMIWMSDeliveryFailures mDeliveryFailureCause; +}; + +// Structure to describe indication TLV 0x16 for WMS AsyncRawSendIndication +struct sWMSAsyncRawSendIndication_CallControlModifiedInfo +{ + UINT8 mAlphaIDLength; + + // This array must be the size specified by mAlphaIDLength + // UINT8 mAlphaID[1]; +}; + +// Structure to describe indication TLV 0x17 for WMS AsyncRawSendIndication +struct sWMSAsyncRawSendIndication_UserData +{ + UINT32 mUserData; +}; + +// Structure to describe request TLV 0x01 for WMSAsyncSendACK() +struct sWMSAsyncSendACKRequest_ACK +{ + UINT32 mTransactionID; + eQMIWMSMessageProtocols mMode; + INT8 mProcessedSuccessfully; +}; + +// Structure to describe request TLV 0x10 for WMSAysncSendACK() +struct sWMSAysncSendACKRequest_3GPP2FailureInfo +{ + eQMIWMSErrorClasses2 mErrorClass; + UINT8 mTransportLayerStatus; +}; + +// Structure to describe request TLV 0x11 for WMSAsyncSendACK() +struct sWMSAsyncSendACKRequest_3GPPFailureInfo +{ + // mGSMWCDMARPCause is of type eQMIWMSRPCauseCodes + UINT8 mGSMWCDMARPCause; + eQMIWMSTPCauseCodes mGSMWCDMATPCause; +}; + +// Structure to describe request TLV 0x12 for WMSAsyncSendACK() +struct sWMSAsyncSendACKRequest_SMSOnIMS +{ + INT8 mACKToBeSentOnIMS; +}; + +// Structure to describe request TLV 0x13 for WMSAsyncSendACK() +struct sWMSAsyncSendACKRequest_UserData +{ + UINT32 mUserData; +}; + +// Structure to describe indication TLV 0x01 for WMS AsyncSendACKIndication +struct sWMSAsyncSendACKIndication_Status +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for WMS AsyncSendACKIndication +struct sWMSAsyncSendACKIndication_ACKFailureCause +{ + eQMIWMSACKFailureCause mACKFailureCause; +}; + +// Structure to describe indication TLV 0x11 for WMS AsyncSendACKIndication +struct sWMSAsyncSendACKIndication_UserData +{ + UINT32 mUserData; +}; + +// Structure to describe request TLV 0x01 for WMSAsyncSendFromMemoryStore() +struct sWMSAsyncSendFromMemoryStoreRequest_Info +{ + eQMIWMSStorageTypes mStorageType; + UINT32 mStorageIndex; + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe request TLV 0x10 for WMSAsyncSendFromMemoryStore() +struct sWMSAsyncSendFromMemoryStoreRequest_SMSOnIMS +{ + INT8 mMessageToBeSentOnIMS; +}; + +// Structure to describe request TLV 0x11 for WMSAsyncSendFromMemoryStore() +struct sWMSAsyncSendFromMemoryStoreRequest_UserData +{ + UINT32 mUserData; +}; + +// Structure to describe indication TLV 0x01 for WMS AsyncSendFromMemoryStoreIndication +struct sWMSAsyncSendFromMemoryStoreIndication_Status +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for WMS AsyncSendFromMemoryStoreIndication +struct sWMSAsyncSendFromMemoryStoreIndication_MessageID +{ + UINT16 mMessageID; +}; + +// Structure to describe indication TLV 0x11 for WMS AsyncSendFromMemoryStoreIndication +struct sWMSAsyncSendFromMemoryStoreIndication_CauseCode +{ + eQMIWMSCauseCodes mCauseCode; +}; + +// Structure to describe indication TLV 0x12 for WMS AsyncSendFromMemoryStoreIndication +struct sWMSAsyncSendFromMemoryStoreIndication_ErrorClass +{ + eQMIWMSErrorClasses mErrorClass; +}; + +// Structure to describe indication TLV 0x13 for WMS AsyncSendFromMemoryStoreIndication +struct sWMSAsyncSendFromMemoryStoreIndication_CauseInfo +{ + eQMIWMSRPCauseCodes mGSMWCDMARPCause; + eQMIWMSTPCauseCodes mGSMWCDMATPCause; +}; + +// Structure to describe indication TLV 0x14 for WMS AsyncSendFromMemoryStoreIndication +struct sWMSAsyncSendFromMemoryStoreIndication_MessageDeliveryFailureType +{ + eQMIWMSMessageDeliveryFailureType mMessageDeliveryFailureType; +}; + +// Structure to describe indication TLV 0x15 for WMS AsyncSendFromMemoryStoreIndication +struct sWMSAsyncSendFromMemoryStoreIndication_MessageDeliveryFailureCause +{ + eQMIWMSDeliveryFailures mDeliveryFailureCause; +}; + +// Structure to describe indication TLV 0x16 for WMS AsyncSendFromMemoryStoreIndication +struct sWMSAsyncSendFromMemoryStoreIndication_CallControlModifiedInfo +{ + UINT8 mAlphaIDLength; + + // This array must be the size specified by mAlphaIDLength + // UINT8 mAlphaID[1]; +}; + +// Structure to describe indication TLV 0x17 for WMS AsyncSendFromMemoryStoreIndication +struct sWMSAsyncSendFromMemoryStoreIndication_UserData +{ + UINT32 mUserData; +}; + +// Structure to describe response TLV 0x10 for WMSGetServiceReadyStatus() +struct sWMSGetServiceReadyStatusResponse_ServiceReadyEvents +{ + INT8 mServiceReadyEvents; +}; + +// Structure to describe response TLV 0x11 for WMSGetServiceReadyStatus() +struct sWMSGetServiceReadyStatusResponse_ServiceReadyStatus +{ + eQMIWMSServiceReadyStatus mReadyStatus; +}; + +// Structure to describe indication TLV 0x01 for WMS ServiceReadyStatusIndication +struct sWMSServiceReadyStatusIndication_ServiceReadyStatus +{ + eQMIWMSServiceReadyStatus mReadyStatus; +}; + +// Structure to describe indication TLV 0x01 for WMS BroadcastConfigIndication +struct sWMSBroadcastConfigIndication_Mode +{ + eQMIWMSMessageProtocols mMode; +}; + +// Structure to describe indication TLV 0x10 for WMS BroadcastConfigIndication +struct sWMSBroadcastConfigIndication_3GPPInfo +{ + INT8 mActivated; + UINT16 mNumberOfInstances; + + struct sInstance + { + UINT16 mMessageIDStart; + UINT16 mMessageIDEnd; + INT8 mSelected; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x11 for WMS BroadcastConfigIndication +struct sWMSBroadcastConfigIndication_3GPP2Info +{ + INT8 mActivated; + UINT16 mNumberOfInstances; + + struct sInstance + { + eQMIWMSServiceCategories mServiceCategory; + eQMIWMSLanguage mLanguage; + INT8 mSelected; + }; + + // This array must be the size specified by mNumberOfInstances + // sInstance mInstances[1]; +}; + +// Structure to describe request TLV 0x01 for WMSSetWaitingMessage() +struct sWMSSetWaitingMessageRequest_WaitingMessageInfo +{ + UINT8 mNumberOfWaitingMessages; + eQMIWMSWaitingMessageType mWaitingMessageType; + INT8 mActiveIndication; + UINT8 mMessageCount; +}; + +// Structure to describe request TLV 0x10 for PDSSetEventReport() +struct sPDSSetEventReportRequest_NMEAIndicator +{ + INT8 mReportNMEASentences; +}; + +// Structure to describe request TLV 0x11 for PDSSetEventReport() +struct sPDSSetEventReportRequest_ModeIndicator +{ + INT8 mReportNMEASentencesPlusMode; +}; + +// Structure to describe request TLV 0x12 for PDSSetEventReport() +struct sPDSSetEventReportRequest_RawIndicator +{ + INT8 mReportRawPositionData; +}; + +// Structure to describe request TLV 0x13 for PDSSetEventReport() +struct sPDSSetEventReportRequest_XTRARequestIndicator +{ + INT8 mReportExternalXTRADataRequests; +}; + +// Structure to describe request TLV 0x14 for PDSSetEventReport() +struct sPDSSetEventReportRequest_TimeInjectionIndicator +{ + INT8 mReportExternalTimeInjections; +}; + +// Structure to describe request TLV 0x15 for PDSSetEventReport() +struct sPDSSetEventReportRequest_WiFiIndicator +{ + INT8 mReportExternalWiFiRequests; +}; + +// Structure to describe request TLV 0x16 for PDSSetEventReport() +struct sPDSSetEventReportRequest_SatelliteIndicator +{ + INT8 mReportSatelliteInfo; +}; + +// Structure to describe request TLV 0x17 for PDSSetEventReport() +struct sPDSSetEventReportRequest_VXNetworkIndicator +{ + INT8 mReportVXNetworkInitiatedPrompts; +}; + +// Structure to describe request TLV 0x18 for PDSSetEventReport() +struct sPDSSetEventReportRequest_SUPLNetworkIndicator +{ + INT8 mReportSUPLNetworkInitiatedPrompts; +}; + +// Structure to describe request TLV 0x19 for PDSSetEventReport() +struct sPDSSetEventReportRequest_UMTSCPNetworkIndicator +{ + INT8 mReportUMTSCPNetworkInitiatedPrompts; +}; + +// Structure to describe request TLV 0x1A for PDSSetEventReport() +struct sPDSSetEventReportRequest_PDSCommIndicator +{ + INT8 mReportPDSCommEvents; +}; + +// Structure to describe request TLV 0x1B for PDSSetEventReport() +struct sPDSSetEventReportRequest_AccelerometerDataIndicator +{ + INT8 mReportAccelerometerDataStatus; +}; + +// Structure to describe request TLV 0x1C for PDSSetEventReport() +struct sPDSSetEventReportRequest_GyroDataIndicator +{ + INT8 mReportGyroDataStatus; +}; + +// Structure to describe request TLV 0x1D for PDSSetEventReport() +struct sPDSSetEventReportRequest_TimeSyncIndication +{ + INT8 mReportTimeSyncRequest; +}; + +// Structure to describe request TLV 0x1E for PDSSetEventReport() +struct sPDSSetEventReportRequest_PositionReliablilityIndicator +{ + INT8 mReportPositionReliability; +}; + +// Structure to describe request TLV 0x1F for PDSSetEventReport() +struct sPDSSetEventReportRequest_SensorDataUsageIndicator +{ + INT8 mReportSensorDataUsage; +}; + +// Structure to describe request TLV 0x20 for PDSSetEventReport() +struct sPDSSetEventReportRequest_TimeSourceInformationIndicator +{ + INT8 mReportTimeSourceInformation; +}; + +// Structure to describe request TLV 0x21 for PDSSetEventReport() +struct sPDSSetEventReportRequest_HeadingUncertaintyIndicator +{ + INT8 mReportHeadingUncertaintyInformation; +}; + +// Structure to describe request TLV 0x22 for PDSSetEventReport() +struct sPDSSetEventReportRequest_NMEADebugStringIndicator +{ + INT8 mReportNMEADebugStrings; +}; + +// Structure to describe request TLV 0x23 for PDSSetEventReport() +struct sPDSSetEventReportRequest_ExternalXTRADataIndicator +{ + INT8 mReportExtendedXTRAData; +}; + +// Structure to describe request TLV 0x24 for PDSSetEventReport() +struct sPDSSetEventReportRequest_ServiceResetStatus +{ + INT8 mReportServiceResetStatus; +}; + +// Structure to describe request TLV 0x25 for PDSSetEventReport() +struct sPDSSetEventReportRequest_VehicleAccelerometerIndicator +{ + INT8 mReportVehicleAccelerometerReady; +}; + +// Structure to describe request TLV 0x26 for PDSSetEventReport() +struct sPDSSetEventReportRequest_VehicleAngularRateIndicator +{ + INT8 mReportVehicleAngularRateReady; +}; + +// Structure to describe request TLV 0x27 for PDSSetEventReport() +struct sPDSSetEventReportRequest_VehicleOdometryIndicator +{ + INT8 mReportVehicleOdometryReady; +}; + +// Structure to describe request TLV 0x28 for PDSSetEventReport() +struct sPDSSetEventReportRequest_SensorBiasEstimateIndicator +{ + INT8 mReportSensorBiasEstimate; +}; + +// Structure to describe request TLV 0x29 for PDSSetEventReport() +struct sPDSSetEventReportRequest_IS801CPNIRejectReasonIndicator +{ + INT8 mReportIS801CPNIRejectReason; +}; + +// Structure to describe request TLV 0x2A for PDSSetEventReport() +struct sPDSSetEventReportRequest_SUPLSessionEndStatusIndicator +{ + INT8 mReportSUPLSessionEndStatus; +}; + +// Structure to describe request TLV 0x2B for PDSSetEventReport() +struct sPDSSetEventReportRequest_EmergencyPositionSessionEventIndicator +{ + INT8 mReportEmergencyPositionSessionEvent; +}; + +// Structure to describe indication TLV 0x10 for PDS EventReport +struct sPDSEventReportIndication_NMEASentence +{ + // String is variable length, but must be size of the container + // char mNMEASentence[1]; +}; + +// Structure to describe indication TLV 0x11 for PDS EventReport +struct sPDSEventReportIndication_NMEASentencePlusMode +{ + eQMIPDSNMEASentenceOperatingModes mNMEASentenceOperatingMode; + UINT16 mNMEASentenceLength; + + // This array must be the size specified by mNMEASentenceLength + // char mNMEASentence[1]; +}; + +// Structure to describe indication TLV 0x12 for PDS EventReport +struct sPDSEventReportIndication_PositionSessionStatus +{ + eQMIPDSSessionStatus mSessionStatus; +}; + +// Structure to describe indication TLV 0x13 for PDS EventReport +struct sPDSEventReportIndication_ParsedPositionData +{ + bool mTimestampCalendarValid:1; + bool mTimestampUTCValid:1; + bool mLeapSecondsValid:1; + bool mTimeUncertaintyValid:1; + bool mLatitudeValid:1; + bool mLongitudeValid:1; + bool mEllipsoidAltitudeValid:1; + bool mMeanSeaLevelAltitudeValid:1; + bool mHorizontalSpeedValid:1; + bool mVerticalSpeedValid:1; + bool mHeadingValid:1; + bool mHorizontalUncertaintyCircularValid:1; + bool mHorizontalUncertaintyEllipseSemiMajorValid:1; + bool mHorizontalUncertaintyEllipseSemiMinorValid:1; + bool mHorizontalUncertaintyEllipseOrientAzimuthValid:1; + bool mVerticalUncertaintyValid:1; + bool mHorizontalVelocityUncertaintyValid:1; + bool mVerticalVelocityUncertaintyValid:1; + bool mHorizontalConfidenceValid:1; + bool mPositionDOPValid:1; + bool mHorizontalDOPValid:1; + bool mVerticalDOPValid:1; + bool mOperatingModeUsedValid:1; + + // Padding out 9 bits + UINT8 mReserved1:1; + UINT8 mReserved2; + + UINT16 mCalendarYear; + eQMIPDSCalendarMonths mCalendarMonth; + eQMIPDSCalendarDays mCalendarDay; + UINT8 mCalendarDayOfMonth; + UINT8 mCalendarHour; + UINT8 mCalendarMinute; + UINT8 mCalendarSecond; + UINT16 mCalendarMillisecond; + UINT8 mCalendarLeapSeconds; + UINT64 mUTCTimestamp; + UINT32 mUTCTimestampUncertainty; + double mLatitude; + double mLongitude; + float mEllipsoidAltitude; + float mMeanSeaLevelAltitude; + float mHorizontalSpeed; + float mVerticalSpeed; + float mHeading; + float mHorizontalUncertaintyCircular; + float mHorizontalUncertaintyEllipseSemiMajor; + float mHorizontalUncertaintyEllipseSemiMinor; + float mHorizontalUncertaintyEllipseOrientAzimuth; + float mVerticalUncertainty; + float mHorizontalVelocityUncertainty; + float mVerticalVelocityUncertainty; + UINT8 mHorizontalConfidence; + float mPositionDOP; + float mHorizontalDOP; + float mVerticalDOP; + eQMIPDSNMEASentenceOperatingModes mOperatingMode; +}; + +// Structure to describe indication TLV 0x14 for PDS EventReport +struct sPDSEventReportIndication_ExternalXTRARequest +{ + UINT16 mMaximumFileSize; + UINT8 mURLRecordCount; + + struct sURL + { + UINT8 mURLLength; + + // This array must be the size specified by mURLLength + // char mURL[1]; + }; + + // This array must be the size specified by mURLRecordCount + // sURL mURLs[1]; +}; + +// Structure to describe indication TLV 0x15 for PDS EventReport +struct sPDSEventReportIndication_ExternalTimeInjectionRequest +{ + UINT32 mDelayThresholdMilliseconds; + UINT8 mURLRecordCount; + + struct sURL + { + UINT8 mURLLength; + + // This array must be the size specified by mURLLength + // char mURL[1]; + }; + + // This array must be the size specified by mURLRecordCount + // sURL mURLs[1]; +}; + +// Structure to describe indication TLV 0x16 for PDS EventReport +struct sPDSEventReportIndication_ExternalWiFiPositionRequest +{ + eQMIPDSWiFiRequestTypes mWiFiRequestType; + UINT16 mWiFiRequestTimeBetweenFixesMilliseconds; +}; + +// Structure to describe indication TLV 0x17 for PDS EventReport +struct sPDSEventReportIndication_SatelliteInfo +{ + bool mIonoValid:1; + bool mSatelliteCountValid:1; + bool mSatelliteListValid:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; + + INT8 mIonosphericCorrections; + UINT8 mSVRecordCount; + + struct sSV + { + bool mSystemValid:1; + bool mPRNValid:1; + bool mHealthStatusValid:1; + bool mProcessStatusValid:1; + bool mEphemerisStateValid:1; + bool mAlmanacStateValid:1; + bool mElevationValid:1; + bool mAzimuthValid:1; + bool mCN0Valid:1; + + // Padding out 23 bits + UINT8 mReserved3:7; + UINT8 mReserved4[2]; + + eQMIPDSSVSystems mSystem; + UINT8 mPRN; + eQMIPDSSVHealthStatus mHealthLevel; + eQMIPDSSVProcessingStatus mProcessingStatus; + eQMIPDSSVEphemerisStatus mEphemerisState; + eQMIPDSSVAlmanacStatus mAlmanacState; + INT32 mElevation; + UINT16 mAzimuth; + UINT16 mCN0; + }; + + // This array must be the size specified by mSVRecordCount + // sSV mSVs[1]; +}; + +// Structure to describe indication TLV 0x18 for PDS EventReport +struct sPDSEventReportIndication_VXNetworkInitiatedPrompt +{ + bool mPrivacyValid:1; + bool mQoSValid:1; + bool mCountValid:1; + bool mIntervalValid:1; + bool mModeValid:1; + bool mRequestorIDValid:1; + + // Padding out 26 bits + UINT8 mReserved1:2; + UINT8 mReserved2[3]; + + eQMIPDSPrivacyModes mPrivacy; + UINT8 mQoS; + UINT32 mPositionCount; + UINT32 mIntervalBetweenFixesSeconds; + eQMIPDSVXModes mMode; + eQMIPDSVXDataCodingSchemes mRequestorIDDCS; + UINT8 mRequestorIDLength; + + // This array must be the size specified by mRequestorIDLength + // UINT8 mRequestorID[1]; +}; + +// Structure to describe indication TLV 0x19 for PDS EventReport +struct sPDSEventReportIndication_SUPLNetworkInitiatedPrompt1 +{ + bool mPrivacyValid:1; + bool mINITHashValid:1; + bool mModeValid:1; + bool mSLPSessionIDValid:1; + bool mSLPServerIPv4AddressValid:1; + bool mSLPServerIPv6AddressValid:1; + bool mSLPServerURLAddressValid:1; + bool mDCSValid:1; + bool mRequestorIDValid:1; + bool mClientNameValid:1; + bool mQoPHorizontalAccuracyValid:1; + bool mQoPVerticalAccuracyValid:1; + bool mQoPMaxLocationAgeValid:1; + bool mQoPDelayValid:1; + + // Padding out 18 bits + UINT8 mReserved1:2; + UINT8 mReserved2[2]; + + eQMIPDSPrivacyModes mPrivacy; + UINT64 mINITHash; + eQMIPDSSUPLModes mMode; + UINT32 mSLPSessionID; + UINT32 mSLPServerIPv4Port; + UINT8 mSLPServerIPv4Address[4]; + UINT32 mSLPServerIPv6Port; + UINT8 mSLPServerIPv6Address[16]; + UINT8 mSLPServerURLLength; + + // This array must be the size specified by mSLPServerURLLength + // char mSLPServerURLAddress[1]; +}; + +struct sPDSEventReportIndication_SUPLNetworkInitiatedPrompt2 +{ + eQMIPDSSUPLDataCodingSchemes mRequestDCS; + eQMIPDSSUPLIDNameDataCodingSchemes mRequestorIDDCS; + UINT8 mRequestorIDLength; + + // This array must be the size specified by mRequestorIDLength + // UINT8 mRequestorID[1]; +}; + +struct sPDSEventReportIndication_SUPLNetworkInitiatedPrompt3 +{ + eQMIPDSSUPLIDNameDataCodingSchemes mClientNameDCS; + UINT8 mClientNameLength; + + // This array must be the size specified by mClientNameLength + // UINT8 mClientName[1]; +}; + +struct sPDSEventReportIndication_SUPLNetworkInitiatedPrompt4 +{ + UINT8 mQoPHorizontalAccuracy; + UINT8 mQoPVerticalAccuracy; + UINT8 mQoPMaxLocationAge; + UINT8 mQoPDelay; +}; + +struct sPDSEventReportIndication_SUPLNetworkInitiatedPrompt +{ + sPDSEventReportIndication_SUPLNetworkInitiatedPrompt1 mPDSEventReportIndication_SUPLNetworkInitiatedPrompt1; + sPDSEventReportIndication_SUPLNetworkInitiatedPrompt2 mPDSEventReportIndication_SUPLNetworkInitiatedPrompt2; + sPDSEventReportIndication_SUPLNetworkInitiatedPrompt3 mPDSEventReportIndication_SUPLNetworkInitiatedPrompt3; + sPDSEventReportIndication_SUPLNetworkInitiatedPrompt4 mPDSEventReportIndication_SUPLNetworkInitiatedPrompt4; +}; + +// Structure to describe indication TLV 0x1A for PDS EventReport +struct sPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt1 +{ + bool mPrivacyValid:1; + bool mInvokeIDValid:1; + bool mNotificationTextValid:1; + bool mClientAddressValid:1; + bool mLocationTypeValid:1; + bool mRequestorIDValid:1; + bool mCodewordStringValid:1; + bool mServiceTypeIDValid:1; + + // Padding out 24 bits + UINT8 mReserved1[3]; + + eQMIPDSPrivacyModes mPrivacy; + UINT8 mInvokeID; + eQMIPDSUMTSCPDataCodingSchemes mNotificationTextDCS; + UINT8 mNotificationTextLength; + + // This array must be the size specified by mNotificationTextLength + // UINT8 mNotificationText[1]; +}; + +struct sPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt2 +{ + UINT8 mClientAddressLength; + + // This array must be the size specified by mClientAddressLength + // char mClientAddress[1]; +}; + +struct sPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt3 +{ + eQMIPDSUMTSCPLocationTypes mLocationType; + eQMIPDSUMTSCPDataCodingSchemes mRequestorIDDCS; + UINT8 mRequestorIDLength; + + // This array must be the size specified by mRequestorIDLength + // UINT8 mRequestorID[1]; +}; + +struct sPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt4 +{ + eQMIPDSUMTSCPDataCodingSchemes mCodewordDCS; + UINT8 mCodewordLength; + + // This array must be the size specified by mCodewordLength + // UINT8 mCodeword[1]; +}; + +struct sPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt5 +{ + UINT8 mServiceTypeID; +}; + +struct sPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt +{ + sPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt1 mPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt1; + sPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt2 mPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt2; + sPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt3 mPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt3; + sPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt4 mPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt4; + sPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt5 mPDSEventReportIndication_UMTSCPNetworkInitiatedPrompt5; +}; + +// Structure to describe indication TLV 0x1B for PDS EventReport +struct sPDSEventReportIndication_CommEvents +{ + eQMIPDSCommEventTypes mType; + eQMIPDSCommEventProtocols mProtocolDataType; +}; + +// Structure to describe indication TLV 0x1C for PDS EventReport +struct sPDSEventReportIndication_PositionSource +{ + bool mGPS:1; + bool mCellID:1; + bool mGlonass:1; + bool mNetwork:1; + bool mEPI:1; + + // Padding out 27 bits + UINT8 mReserved1:3; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x1D for PDS EventReport +struct sPDSEventReportIndication_AccelerometerStreamingStatus +{ + eQMIPDSStreamingStatus mAccelerometerStreamingStatus; +}; + +// Structure to describe indication TLV 0x1E for PDS EventReport +struct sPDSEventReportIndication_GyroStreamingStatus +{ + eQMIPDSStreamingStatus mGyroStreamingStatus; +}; + +// Structure to describe indication TLV 0x1F for PDS EventReport +struct sPDSEventReportIndication_TimeSyncRequest +{ + UINT32 mReferenceCounter; +}; + +// Structure to describe indication TLV 0x20 for PDS EventReport +struct sPDSEventReportIndication_PositionReliabilityCounter +{ + eQMIPDSReliabilityIndicator mReliabilityIndicatorHorizontal; + eQMIPDSReliabilityIndicator mReliabilityIndicatorVertical; +}; + +// Structure to describe indication TLV 0x21 for PDS EventReport +struct sPDSEventReportIndication_SensorDataUsage +{ + bool mAccelerometer:1; + bool mGyro:1; + + // Padding out 14 bits + UINT8 mReserved1:6; + UINT8 mReserved2; + + bool mHeadingAidedWithSensorData:1; + bool mSpeedAidedWithSensorData:1; + bool mPositionAidedWithSensorData:1; + bool mVelocityAidedWithSensorData:1; + + // Padding out 12 bits + UINT8 mReserved3:4; + UINT8 mReserved4; +}; + +// Structure to describe indication TLV 0x22 for PDS EventReport +struct sPDSEventReportIndication_TimeSourceInformation +{ + INT8 mTimeValid; + eQMIPDSTimeSource mTimeSource; + UINT32 mTimeUncertaintyMilliseconds; + UINT16 mGPSWeekNumber; + UINT32 mGPSTimeOfWeekMilliseconds; + UINT32 mReserved1; + UINT32 mReserved2; + UINT32 mReserved3; + UINT32 mReserved4; + UINT32 mReserved5; +}; + +// Structure to describe indication TLV 0x23 for PDS EventReport +struct sPDSEventReportIndication_EncryptedPositionInformation +{ + eQMIPDSEncryptionAlgorithm mEncryptionAlgorithm; + UINT8 mEncryptionDataLength; + + // This array must be the size specified by mEncryptionDataLength + // UINT8 mEncryptionData[1]; +}; + +// Structure to describe indication TLV 0x24 for PDS EventReport +struct sPDSEventReportIndication_HeadingUncertaintyInformation +{ + float mHeadingUncertainty; + float mGNSSHeadingUncertainty; + UINT32 mReserved1; + UINT32 mReserved2; +}; + +// Structure to describe indication TLV 0x25 for PDS EventReport +struct sPDSEventReportIndication_ProprietaryNMEADebugSentences +{ + // String is variable length, but must be size of the container + // char mNMEADebug[1]; +}; + +// Structure to describe indication TLV 0x26 for PDS EventReport +struct sPDSEventReportIndication_ExtendedExternalXTRADatabaseRequest +{ + UINT32 mMaximumFileSize; + UINT8 mURLCount; + UINT8 mURLLength; + + // This array must be the size specified by mURLLength + // char mURL[1]; +}; + +// Structure to describe indication TLV 0x27 for PDS EventReport +struct sPDSEventReportIndication_ServiceResetStatus +{ + eQMIPDSResetStates mServiceResetStatus; +}; + +// Structure to describe indication TLV 0x28 for PDS EventReport +struct sPDSEventReportIndication_ExtendedPositionFailure +{ + eQMIPDSExtendedPositionFailures mPositionSessionFailure; +}; + +// Structure to describe indication TLV 0x29 for PDS EventReport +struct sPDSEventReportIndication_SUPLTriggerType +{ + eQMIPDSSUPLTriggerTypes mSUPLTriggerType; +}; + +// Structure to describe indication TLV 0x2A for PDS EventReport +struct sPDSEventReportIndication_ESPLURL +{ + UINT8 mEmergencySUPLLocationPlatformURLLength; + + // This array must be the size specified by mEmergencySUPLLocationPlatformURLLength + // char mEmergencySUPLLocationPlatformURL[1]; +}; + +// Structure to describe indication TLV 0x2B for PDS EventReport +struct sPDSEventReportIndication_SUPLINITSource +{ + eQMIPDSSUPLINITSources mSUPLINITSource; +}; + +// Structure to describe indication TLV 0x2C for PDS EventReport +struct sPDSEventReportIndication_VehicleAccelerometerStreamingStatus +{ + eQMIPDSStreamingStatus mVehicleAccelerometerStreamingStatus; +}; + +// Structure to describe indication TLV 0x2D for PDS EventReport +struct sPDSEventReportIndication_VehicleAngularRateStreamingStatus +{ + eQMIPDSStreamingStatus mVehicleAngularRateStreamingStatus; +}; + +// Structure to describe indication TLV 0x2E for PDS EventReport +struct sPDSEventReportIndication_VehicleOdometryStreamingStatus +{ + eQMIPDSStreamingStatus mVehicleOdometryStreamingStatus; +}; + +// Structure to describe indication TLV 0x2F for PDS EventReport +struct sPDSEventReportIndication_SensorBiasEstimate +{ + UINT16 mSequenceNumber; + bool mGyroscopeXAxisValid:1; + bool mGyroscopeYAxisValid:1; + bool mGyroscopeZAxisValid:1; + + // Padding out 61 bits + UINT8 mReserved1:5; + UINT8 mReserved2[7]; + + float mGyroscopeXAxisValue; + float mGyroscopeYAxisValue; + float mGyroscopeZAxisValue; + bool mAccelerometerXAxisValid:1; + bool mAccelerometerYAxisValid:1; + bool mAccelerometerZAxisValid:1; + + // Padding out 61 bits + UINT8 mReserved3:5; + UINT8 mReserved4[7]; + + float mAccelerometerXAxisValue; + float mAccelerometerYAxisValue; + float mAccelerometerZAxisValue; +}; + +// Structure to describe indication TLV 0x30 for PDS EventReport +struct sPDSEventReportIndication_IS801CPNIRejectReason +{ + eQMIPDSIS801CPNIRejectReasons mIS801CPNIRejectReason; +}; + +// Structure to describe indication TLV 0x31 for PDS EventReport +struct sPDSEventReportIndication_SUPLSessionEndStatus +{ + eQMIPDSSUPLSessionEndStatus mSUPLSessionEndStatus; +}; + +// Structure to describe indication TLV 0x32 for PDS EventReport +struct sPDSEventReportIndication_EmergencyPositionSessionEvent +{ + eQMIPDSEmergencyPositionSessionEvents mEmergencyPositionSessionEvent; +}; + +// Structure to describe response TLV 0x01 for PDSGetServiceState() +struct sPDSGetServiceStateResponse_State +{ + INT8 mServiceEnabled; + eQMIPDSTrackingSessionStates mTrackingSessionState; +}; + +// Structure to describe response TLV 0x10 for PDSGetServiceState() +struct sPDSGetServiceStateResponse_Capabilities +{ + bool mMobileOriginatedPositioningSessions:1; + bool mMobileTerminatedPositioningSessions:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe indication TLV 0x01 for PDS ServiceStateIndication +struct sPDSServiceStateIndication_State +{ + INT8 mServiceEnabled; + eQMIPDSTrackingSessionStates mTrackingSessionState; +}; + +// Structure to describe indication TLV 0x10 for PDS ServiceStateIndication +struct sPDSServiceStateIndication_Capabilities +{ + bool mMobileOriginatedPositioningSessions:1; + bool mMobileTerminatedPositioningSessions:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x01 for PDSSetServiceState() +struct sPDSSetServiceStateRequest_State +{ + INT8 mServiceEnabled; +}; + +// Structure to describe request TLV 0x10 for PDSSetServiceState() +struct sPDSSetServiceStateRequest_CapabilitiesToEnable +{ + bool mMobileOriginatedPositioningSessions:1; + bool mMobileTerminatedPositioningSessions:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x01 for PDSStartTrackingSession() +struct sPDSStartTrackingSessionRequest_Session +{ + eQMIPDSSessionControlTypes mSessionControl; + eQMIPDSSessionTypes mSessionType; + eQMIPDSOperationTypes mSessionOperation; + eQMIPDSServerOptions mServerOption; + UINT8 mTimeoutSeconds; + UINT32 mSessionFixRequests; + UINT32 mFixRequestIntervalSeconds; + UINT32 mDesiredAccuracyMeters; +}; + +// Structure to describe response TLV 0x01 for PDSGetTrackingSessionInfo() +struct sPDSGetTrackingSessionInfoResponse_Info +{ + eQMIPDSSessionControlTypes mSessionControl; + eQMIPDSSessionTypes mSessionType; + eQMIPDSOperationTypes mSessionOperation; + eQMIPDSServerOptions mServerOption; + UINT8 mTimeoutSeconds; + UINT32 mSessionFixRequests; + UINT32 mFixRequestIntervalSeconds; + UINT32 mDesiredAccuracyMeters; +}; + +// Structure to describe response TLV 0x01 for PDSGetNMEAConfig() +struct sPDSGetNMEAConfigResponse_Config +{ + bool mGPGGANMEASentences:1; + bool mGPRMCNMEASentences:1; + bool mGPGSVNMEASentences:1; + bool mGPGSANMEASentences:1; + bool mGPVTGNMEASentences:1; + bool mGLGSVNMEASentences:1; + bool mGNGSANMEASentences:1; + bool mGNGNSNMEASentences:1; + eQMIPDSOutputDevices mOutputDevice; + eQMIPDSNMEAReportingOptions mNMEAReporting; +}; + +// Structure to describe response TLV 0x10 for PDSGetNMEAConfig() +struct sPDSGetNMEAConfigResponse_AdditionalConfig +{ + bool mPQXFI:1; + bool mPSTIS:1; + + // Padding out 14 bits + UINT8 mReserved1:6; + UINT8 mReserved2; +}; + +// Structure to describe response TLV 0x11 for PDSGetNMEAConfig() +struct sPDSGetNMEAConfigResponse_NonstandardConfig +{ + INT8 mEnableNonstandardSentences; +}; + +// Structure to describe request TLV 0x01 for PDSSetNMEAConfig() +struct sPDSSetNMEAConfigRequest_Config +{ + bool mGPGGANMEASentences:1; + bool mGPRMCNMEASentences:1; + bool mGPGSVNMEASentences:1; + bool mGPGSANMEASentences:1; + bool mGPVTGNMEASentences:1; + bool mGLGSVNMEASentences:1; + bool mGNGSANMEASentences:1; + bool mGNGNSNMEASentences:1; + eQMIPDSOutputDevices mOutputDevice; + eQMIPDSNMEAReportingOptions mNMEAReporting; +}; + +// Structure to describe request TLV 0x10 for PDSSetNMEAConfig() +struct sPDSSetNMEAConfigRequest_AdditionalConfig +{ + bool mPQXFI:1; + bool mPSTIS:1; + + // Padding out 14 bits + UINT8 mReserved1:6; + UINT8 mReserved2; +}; + +// Structure to describe response TLV 0x11 for PDSSetNMEAConfig() +struct sPDSSetNMEAConfigResponse_NonstandardConfig +{ + INT8 mEnableNonstandardSentences; +}; + +// Structure to describe request TLV 0x01 for PDSInjectTimeReference() +struct sPDSInjectTimeReferenceRequest_Time +{ + UINT64 mSystemTimeMilliseconds; + UINT16 mSystemDiscontinuties; +}; + +// Structure to describe response TLV 0x01 for PDSGetDefaults() +struct sPDSGetDefaultsResponse_Defaults +{ + eQMIPDSOperationTypes mSessionOperation; + UINT8 mTimeoutSeconds; + UINT32 mFixRequestIntervalSeconds; + UINT32 mDesiredAccuracyMeters; +}; + +// Structure to describe request TLV 0x01 for PDSSetDefaults() +struct sPDSSetDefaultsRequest_Defaults +{ + eQMIPDSOperationTypes mSessionOperation; + UINT8 mTimeoutSeconds; + UINT32 mFixRequestIntervalSeconds; + UINT32 mDesiredAccuracyMeters; +}; + +// Structure to describe response TLV 0x10 for PDSGetXTRAParameters() +struct sPDSGetXTRAParametersResponse_Automatic +{ + INT8 mAutomaticDownloadEnabled; + UINT16 mDownloadIntervalInHours; +}; + +// Structure to describe response TLV 0x11 for PDSGetXTRAParameters() +struct sPDSGetXTRAParametersResponse_Medium +{ + UINT8 mMediumPreferences; + + // This array must be the size specified by mMediumPreferences + // eQMIPDSMediums mMediumPreference[1]; +}; + +// Structure to describe response TLV 0x12 for PDSGetXTRAParameters() +struct sPDSGetXTRAParametersResponse_Network +{ + eQMIPDSWWANNetworkPreferences mWWANNetworkPreference; +}; + +// Structure to describe response TLV 0x13 for PDSGetXTRAParameters() +struct sPDSGetXTRAParametersResponse_Validity +{ + UINT16 mValidPeriodGPSStartWeek; + UINT16 mValidPeriodGPSStartWeekOffsetInMinutes; + UINT16 mValidPeriodDurationInHours; +}; + +// Structure to describe response TLV 0x14 for PDSGetXTRAParameters() +struct sPDSGetXTRAParametersResponse_Embedded +{ + INT8 mEmbeddedXTRADataClientEnabled; + INT8 mEmbeddedXTRATimeClientEnabled; +}; + +// Structure to describe request TLV 0x10 for PDSSetXTRAParameters() +struct sPDSSetXTRAParametersRequest_Automatic +{ + INT8 mAutomaticDownloadEnabled; + UINT16 mDownloadIntervalInHours; +}; + +// Structure to describe request TLV 0x11 for PDSSetXTRAParameters() +struct sPDSSetXTRAParametersRequest_Medium +{ + UINT8 mMediumPreferences; + + // This array must be the size specified by mMediumPreferences + // eQMIPDSMediums mMediumPreference[1]; +}; + +// Structure to describe request TLV 0x12 for PDSSetXTRAParameters() +struct sPDSSetXTRAParametersRequest_Network +{ + eQMIPDSWWANNetworkPreferences mWWANNetworkPreference; +}; + +// Structure to describe request TLV 0x14 for PDSSetXTRAParameters() +struct sPDSSetXTRAParametersRequest_Embedded +{ + INT8 mEmbeddedXTRADataClientEnabled; + INT8 mEmbeddedXTRATimeClientEnabled; +}; + +// Structure to describe request TLV 0x12 for PDSGetAGPSConfig() +struct sPDSGetAGPSConfigRequest_NetworkMode +{ + eQMIPDSNetworkMode mNetworkMode; +}; + +// Structure to describe response TLV 0x10 for PDSGetAGPSConfig() +struct sPDSGetAGPSConfigResponse_ServerAddress +{ + UINT8 mServerAddress[4]; + UINT32 mServerPort; +}; + +// Structure to describe response TLV 0x11 for PDSGetAGPSConfig() +struct sPDSGetAGPSConfigResponse_ServerURL +{ + UINT8 mURLLength; + + // This array must be the size specified by mURLLength + // char mURL[1]; +}; + +// Structure to describe request TLV 0x10 for PDSSetAGPSConfig() +struct sPDSSetAGPSConfigRequest_Server +{ + UINT8 mServerAddress[4]; + UINT32 mServerPort; +}; + +// Structure to describe request TLV 0x11 for PDSSetAGPSConfig() +struct sPDSSetAGPSConfigRequest_ServerURL +{ + UINT8 mURLLength; + + // This array must be the size specified by mURLLength + // char mURL[1]; +}; + +// Structure to describe request TLV 0x12 for PDSSetAGPSConfig() +struct sPDSSetAGPSConfigRequest_NetworkMode +{ + eQMIPDSNetworkMode mNetworkMode; +}; + +// Structure to describe response TLV 0x01 for PDSGetServiceAutoTrackingState() +struct sPDSGetServiceAutoTrackingStateResponse_State +{ + INT8 mAutoTrackingEnabled; +}; + +// Structure to describe request TLV 0x01 for PDSSetServiceAutoTrackingState() +struct sPDSSetServiceAutoTrackingStateRequest_State +{ + INT8 mAutoTrackingEnabled; +}; + +// Structure to describe response TLV 0x01 for PDSGetCOMPortAutoTrackingConfig() +struct sPDSGetCOMPortAutoTrackingConfigResponse_Config +{ + INT8 mAutoTrackingEnabled; +}; + +// Structure to describe request TLV 0x01 for PDSSetCOMPortAutoTrackingConfig() +struct sPDSSetCOMPortAutoTrackingConfigRequest_Config +{ + INT8 mAutoTrackingEnabled; +}; + +// Structure to describe request TLV 0x10 for PDSResetPDSData() +struct sPDSResetPDSDataRequest_GPSData +{ + bool mResetEPH:1; + bool mResetALM:1; + bool mResetPOS:1; + bool mResetTIME:1; + bool mResetIONO:1; + bool mResetUTC:1; + bool mResetHEALTH:1; + bool mResetSVDIR:1; + bool mResetSVSTEER:1; + bool mResetSADATA:1; + bool mResetRTI:1; + bool mResetALMCORR:1; + bool mResetFREQBIASEST:1; + + // Padding out 19 bits + UINT8 mReserved1:3; + UINT8 mReserved2[2]; +}; + +// Structure to describe request TLV 0x11 for PDSResetPDSData() +struct sPDSResetPDSDataRequest_CellData +{ + bool mResetPOS:1; + bool mResetLATESTGPSPOS:1; + bool mResetOTAPOS:1; + bool mResetEXTREFPOS:1; + bool mResetTIMETAG:1; + bool mResetCELLID:1; + bool mResetCACHEDCELLID:1; + bool mResetLASTSRVCELL:1; + bool mResetCURSRVCELL:1; + bool mResetNEIGHBORINFO:1; + + // Padding out 22 bits + UINT8 mReserved1:6; + UINT8 mReserved2[2]; +}; + +// Structure to describe request TLV 0x10 for PDSSinglePositionFix() +struct sPDSSinglePositionFixRequest_Mode +{ + eQMIPDSOperationTypes mSessionOperation; +}; + +// Structure to describe request TLV 0x11 for PDSSinglePositionFix() +struct sPDSSinglePositionFixRequest_Timeout +{ + UINT8 mTimeoutSeconds; +}; + +// Structure to describe request TLV 0x12 for PDSSinglePositionFix() +struct sPDSSinglePositionFixRequest_Accuracy +{ + UINT32 mDesiredAccuracyMeters; +}; + +// Structure to describe response TLV 0x01 for PDSGetServiceVersion() +struct sPDSGetServiceVersionResponse_Version +{ + UINT8 mServiceMajorVersion; + UINT8 mServiceMinorVersion; +}; + +// Structure to describe request TLV 0x01 for PDSInjectXTRAData() +struct sPDSInjectXTRADataRequest_Data +{ + UINT8 mSequenceNumber; + UINT16 mTotalLength; + UINT16 mSequenceLength; + + // This array must be the size specified by mSequenceLength + // UINT8 mData[1]; +}; + +// Structure to describe request TLV 0x10 for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_Timestamp +{ + UINT64 mUTCTimestamp; +}; + +// Structure to describe request TLV 0x11 for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_Latitude +{ + double mLatitude; +}; + +// Structure to describe request TLV 0x12 for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_Longitude +{ + double mLongitude; +}; + +// Structure to describe request TLV 0x13 for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_AltitudeEllipsoid +{ + float mEllipsoidAltitude; +}; + +// Structure to describe request TLV 0x14 for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_AltitudeSeaLevel +{ + float mMeanSeaLevelAltitude; +}; + +// Structure to describe request TLV 0x15 for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_HorizontalUncertainty +{ + float mHorizontalUncertaintyCircular; +}; + +// Structure to describe request TLV 0x16 for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_VerticalUncertainty +{ + float mVerticalUncertainty; +}; + +// Structure to describe request TLV 0x17 for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_HorizontalConfidence +{ + UINT8 mHorizontalConfidence; +}; + +// Structure to describe request TLV 0x18 for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_VerticalConfidence +{ + UINT8 mVerticalConfidence; +}; + +// Structure to describe request TLV 0x19 for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_Source +{ + eQMIPDSInjectedPositionSources mSource; +}; + +// Structure to describe request TLV 0x1A for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_TimeType +{ + eQMIPDSTimeType mTimeType; +}; + +// Structure to describe request TLV 0x1B for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_PositionReliability +{ + eQMIPDSReliabilityIndicator mReliabilityIndicatorHorizontal; + eQMIPDSReliabilityIndicator mReliabilityIndicatorVertical; +}; + +// Structure to describe request TLV 0x1C for PDSInjectPositionData() +struct sPDSInjectPositionDataRequest_AltitudeInformation +{ + eQMIPDSAltitudeSource mAltitudeSource; + eQMIPDSSourceLinkage mSourceLinkage; + eQMIPDSUncertaintyCoverage mUncertaintyCoverage; +}; + +// Structure to describe request TLV 0x10 for PDSInjectWiFiPositionData() +struct sPDSInjectWiFiPositionDataRequest_Time +{ + UINT32 mWiFiTimeCounterMilliseconds; +}; + +// Structure to describe request TLV 0x11 for PDSInjectWiFiPositionData() +struct sPDSInjectWiFiPositionDataRequest_Position +{ + INT32 mWiFiLatitude; + INT32 mWiFiLongitude; + UINT16 mHEPEInMeters; + UINT8 mAPCount; + UINT8 mErrorCode; +}; + +// Structure to describe request TLV 0x12 for PDSInjectWiFiPositionData() +struct sPDSInjectWiFiPositionDataRequest_APInfo +{ + UINT8 mAPCount; + + struct sAP + { + UINT8 mMACAddress[6]; + UINT32 mRSSI; + UINT16 mBeaconChannel; + bool mUsedForPosition:1; + bool mHiddenSSID:1; + bool mEncryptionOn:1; + bool mInfrastructureMode:1; + + // Padding out 4 bits + UINT8 mReserved1:4; + }; + + // This array must be the size specified by mAPCount + // sAP mAPs[1]; +}; + +// Structure to describe request TLV 0x13 for PDSInjectWiFiPositionData() +struct sPDSInjectWiFiPositionDataRequest_PositionReliability +{ + eQMIPDSReliabilityIndicator mReliabilityIndicatorHorizontal; +}; + +// Structure to describe response TLV 0x10 for PDSGetSBASConfig() +struct sPDSGetSBASConfigResponse_Config +{ + eQMIPDSSBASStates mState; +}; + +// Structure to describe request TLV 0x10 for PDSSetSBASConfig() +struct sPDSSetSBASConfigRequest_Config +{ + INT8 mEnableSBAS; +}; + +// Structure to describe request TLV 0x01 for PDSSendNetworkInitiatedResponse() +struct sPDSSendNetworkInitiatedResponseRequest_Action +{ + INT8 mAllowRequest; +}; + +// Structure to describe request TLV 0x10 for PDSSendNetworkInitiatedResponse() +struct sPDSSendNetworkInitiatedResponseRequest_VX +{ + bool mPrivacyValid:1; + bool mQoSValid:1; + bool mCountValid:1; + bool mIntervalValid:1; + bool mModeValid:1; + bool mRequestorIDValid:1; + + // Padding out 26 bits + UINT8 mReserved1:2; + UINT8 mReserved2[3]; + + eQMIPDSPrivacyModes mPrivacy; + UINT8 mQoS; + UINT32 mPositionCount; + UINT32 mIntervalBetweenFixesSeconds; + eQMIPDSVXModes mMode; + eQMIPDSVXDataCodingSchemes mRequestorIDDCS; + UINT8 mRequestorIDLength; + + // This array must be the size specified by mRequestorIDLength + // UINT8 mRequestorID[1]; +}; + +// Structure to describe request TLV 0x11 for PDSSendNetworkInitiatedResponse() +struct sPDSSendNetworkInitiatedResponseRequest_SUPL1 +{ + bool mPrivacyValid:1; + bool mINITHashValid:1; + bool mModeValid:1; + bool mSLPSessionIDValid:1; + bool mSLPServerIPv4AddressValid:1; + bool mSLPServerIPv6AddressValid:1; + bool mSLPServerURLAddressValid:1; + bool mDCSValid:1; + bool mRequestorIDValid:1; + bool mClientNameValid:1; + bool mQoPHorizontalAccuracyValid:1; + bool mQoPVerticalAccuracyValid:1; + bool mQoPMaxLocationAgeValid:1; + bool mQoPDelayValid:1; + + // Padding out 18 bits + UINT8 mReserved1:2; + UINT8 mReserved2[2]; + + eQMIPDSPrivacyModes mPrivacy; + UINT64 mINITHash; + eQMIPDSSUPLModes mMode; + UINT32 mSLPSessionID; + UINT32 mSLPServerIPv4Port; + UINT8 mSLPServerIPv4Address[4]; + UINT32 mSLPServerIPv6Port; + UINT8 mSLPServerIPv6Address[16]; + UINT8 mSLPServerURLLength; + + // This array must be the size specified by mSLPServerURLLength + // char mSLPServerURLAddress[1]; +}; + +struct sPDSSendNetworkInitiatedResponseRequest_SUPL2 +{ + eQMIPDSSUPLDataCodingSchemes mRequestDCS; + eQMIPDSSUPLIDNameDataCodingSchemes mRequestorIDDCS; + UINT8 mRequestorIDLength; + + // This array must be the size specified by mRequestorIDLength + // UINT8 mRequestorID[1]; +}; + +struct sPDSSendNetworkInitiatedResponseRequest_SUPL3 +{ + eQMIPDSSUPLIDNameDataCodingSchemes mClientNameDCS; + UINT8 mClientNameLength; + + // This array must be the size specified by mClientNameLength + // UINT8 mClientName[1]; +}; + +struct sPDSSendNetworkInitiatedResponseRequest_SUPL4 +{ + UINT8 mQoPHorizontalAccuracy; + UINT8 mQoPVerticalAccuracy; + UINT8 mQoPMaxLocationAge; + UINT8 mQoPDelay; +}; + +struct sPDSSendNetworkInitiatedResponseRequest_SUPL +{ + sPDSSendNetworkInitiatedResponseRequest_SUPL1 mPDSSendNetworkInitiatedResponseRequest_SUPL1; + sPDSSendNetworkInitiatedResponseRequest_SUPL2 mPDSSendNetworkInitiatedResponseRequest_SUPL2; + sPDSSendNetworkInitiatedResponseRequest_SUPL3 mPDSSendNetworkInitiatedResponseRequest_SUPL3; + sPDSSendNetworkInitiatedResponseRequest_SUPL4 mPDSSendNetworkInitiatedResponseRequest_SUPL4; +}; + +// Structure to describe request TLV 0x12 for PDSSendNetworkInitiatedResponse() +struct sPDSSendNetworkInitiatedResponseRequest_UMTSCP1 +{ + bool mPrivacyValid:1; + bool mInvokeIDValid:1; + bool mNotificationTextValid:1; + bool mClientAddressValid:1; + bool mLocationTypeValid:1; + bool mRequestorIDValid:1; + bool mCodewordStringValid:1; + bool mServiceTypeIDValid:1; + + // Padding out 24 bits + UINT8 mReserved1[3]; + + eQMIPDSPrivacyModes mPrivacy; + UINT8 mInvokeID; + eQMIPDSUMTSCPDataCodingSchemes mNotificationTextDCS; + UINT8 mNotificationTextLength; + + // This array must be the size specified by mNotificationTextLength + // UINT8 mNotificationText[1]; +}; + +struct sPDSSendNetworkInitiatedResponseRequest_UMTSCP2 +{ + UINT8 mClientAddressLength; + + // This array must be the size specified by mClientAddressLength + // char mClientAddress[1]; +}; + +struct sPDSSendNetworkInitiatedResponseRequest_UMTSCP3 +{ + eQMIPDSUMTSCPLocationTypes mLocationType; + eQMIPDSUMTSCPDataCodingSchemes mRequestorIDDCS; + UINT8 mRequestorIDLength; + + // This array must be the size specified by mRequestorIDLength + // UINT8 mRequestorID[1]; +}; + +struct sPDSSendNetworkInitiatedResponseRequest_UMTSCP4 +{ + eQMIPDSUMTSCPDataCodingSchemes mCodewordDCS; + UINT8 mCodewordLength; + + // This array must be the size specified by mCodewordLength + // UINT8 mCodeword[1]; +}; + +struct sPDSSendNetworkInitiatedResponseRequest_UMTSCP5 +{ + UINT8 mServiceTypeID; +}; + +struct sPDSSendNetworkInitiatedResponseRequest_UMTSCP +{ + sPDSSendNetworkInitiatedResponseRequest_UMTSCP1 mPDSSendNetworkInitiatedResponseRequest_UMTSCP1; + sPDSSendNetworkInitiatedResponseRequest_UMTSCP2 mPDSSendNetworkInitiatedResponseRequest_UMTSCP2; + sPDSSendNetworkInitiatedResponseRequest_UMTSCP3 mPDSSendNetworkInitiatedResponseRequest_UMTSCP3; + sPDSSendNetworkInitiatedResponseRequest_UMTSCP4 mPDSSendNetworkInitiatedResponseRequest_UMTSCP4; + sPDSSendNetworkInitiatedResponseRequest_UMTSCP5 mPDSSendNetworkInitiatedResponseRequest_UMTSCP5; +}; + +// Structure to describe request TLV 0x13 for PDSSendNetworkInitiatedResponse() +struct sPDSSendNetworkInitiatedResponseRequest_SUPLTriggerType +{ + eQMIPDSSUPLTriggerTypes mSUPLTriggerType; +}; + +// Structure to describe request TLV 0x14 for PDSSendNetworkInitiatedResponse() +struct sPDSSendNetworkInitiatedResponseRequest_ESPLURL +{ + UINT8 mEmergencySUPLLocationPlatformURLLength; + + // This array must be the size specified by mEmergencySUPLLocationPlatformURLLength + // char mEmergencySUPLLocationPlatformURL[1]; +}; + +// Structure to describe request TLV 0x01 for PDSInjectAbsoluteTime() +struct sPDSInjectAbsoluteTimeRequest_Time +{ + UINT64 mTimestampMilliseconds; + UINT32 mTimeUncertaintyMilliseconds; + eQMIPDSTimeBases mTimeBase; + INT8 mForceAcceptance; +}; + +// Structure to describe request TLV 0x01 for PDSInjectEFSData() +struct sPDSInjectEFSDataRequest_DateFile1 +{ + UINT8 mFilenameLength; + + // This array must be the size specified by mFilenameLength + // char mFilename[1]; +}; + +struct sPDSInjectEFSDataRequest_DateFile2 +{ + eQMIPDSEFSFileOperations mFileOperation; + UINT32 mDataLength; + UINT8 mPartNumber; + UINT8 mTotalParts; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +struct sPDSInjectEFSDataRequest_DateFile +{ + sPDSInjectEFSDataRequest_DateFile1 mPDSInjectEFSDataRequest_DateFile1; + sPDSInjectEFSDataRequest_DateFile2 mPDSInjectEFSDataRequest_DateFile2; +}; + +// Structure to describe response TLV 0x10 for PDSGetDPOConfig() +struct sPDSGetDPOConfigResponse_Config +{ + INT8 mDataPowerOptimizationEnabled; +}; + +// Structure to describe request TLV 0x10 for PDSSetDPOConfig() +struct sPDSSetDPOConfigRequest_Config +{ + eQMIPDSConfig mConfiguration; +}; + +// Structure to describe response TLV 0x10 for PDSGetODPConfig() +struct sPDSGetODPConfigResponse_Config +{ + eQMIPDSODPStates mOnDemandPositioning; +}; + +// Structure to describe request TLV 0x10 for PDSSetODPConfig() +struct sPDSSetODPConfigRequest_Config +{ + eQMIPDSODPStates mOnDemandPositioning; +}; + +// Structure to describe response TLV 0x10 for PDSGetGPSState() +struct sPDSGetGPSStateResponse_State +{ + INT8 mEngineEnabled; + bool mPositionValid:1; + bool mAltitudeVerticalUncertaintyValid:1; + bool mTimeMillisecondsValid:1; + bool mTimeWeekNumberValid:1; + bool mTimeUncertaintyValid:1; + bool mIonoValid:1; + bool mGPSEphemerisValid:1; + bool mGPSAlmanacValid:1; + bool mGPSHealthValid:1; + bool mGPSVisibleSVsValid:1; + bool mGlonassEphemerisValid:1; + bool mGlonassAlmanacValid:1; + bool mGlonassHealthValid:1; + bool mGlonassVisibleSVsValid:1; + bool mSBASEphemerisValid:1; + bool mSBASAlmanacValid:1; + bool mSBASHealthValid:1; + bool mSBASVisibleSVsValid:1; + bool mXTRAInformationValid:1; + + // Padding out 5 bits + UINT8 mReserved1:5; + + double mLatitude; + double mLongitude; + float mHorizontalUncertaintyCircular; + float mEllipsoidAltitude; + float mVerticalUncertainty; + UINT32 mTimestampInTOWMilliseconds; + UINT16 mGPSWeekNumber; + UINT32 mTimeUncertaintyMilliseconds; + INT8 mIonoIsValid; + UINT32 mGPSEphemerisSVMask; + UINT32 mGPSAlmanacSVMask; + UINT32 mGPSHealthSVMask; + UINT32 mGPSVisibleSVMask; + UINT32 mGlonassEphemerisSVMask; + UINT32 mGlonassAlmanacSVMask; + UINT32 mGlonassHealthSVMask; + UINT32 mGlonassVisibleSVMask; + UINT32 mSBASEphemerisSVMask; + UINT32 mSBASAlmanacSVMask; + UINT32 mSBASHealthSVMask; + UINT32 mSBASVisibleSVMask; + UINT16 mXTRAGPSStartWeek; + UINT16 mXTRAGPSStartMinutes; + INT32 mElevation; +}; + +// Structure to describe request TLV 0x01 for PDSSetPPMEventReport() +struct sPDSSetPPMEventReportRequest_ReportPPMEvents +{ + INT8 mReportPPMEvents; +}; + +// Structure to describe request TLV 0x01 for PDSSetSPIStreamingReport() +struct sPDSSetSPIStreamingReportRequest_ReportEvents +{ + INT8 mReportSPIEvents; +}; + +// Structure to describe indication TLV 0x10 for PDS SetSPIStreamingReportIndication +struct sPDSSetSPIStreamingReportIndication_SPIStreamingRequest +{ + INT8 mStreamSPIStatus; +}; + +// Structure to describe request TLV 0x01 for PDSSetSPIStatus() +struct sPDSSetSPIStatusRequest_Status +{ + eQMIPDSSPIState mSPIState; + UINT8 mSPIConfidence; +}; + +// Structure to describe request TLV 0x01 for PDSSetPPMReportingState() +struct sPDSSetPPMReportingStateRequest_PPMReportingState +{ + eQMIPDSReportingState mReportingState; + UINT16 mReportingPeriodSeconds; +}; + +// Structure to describe indication TLV 0x10 for PDS SetPPMReportingStateIndication +struct sPDSSetPPMReportingStateIndication_PPMPageReport +{ + UINT32 mPageTimeMilliseconds; + UINT16 mPagePNOffset; + UINT8 mPageBandClass; + UINT16 mPageCDMAFrequency; + UINT16 mPageBaseID; + UINT16 mPageSystemID; + UINT16 mPageNetworkID; +}; + +// Structure to describe indication TLV 0x11 for PDS SetPPMReportingStateIndication +struct sPDSSetPPMReportingStateIndication_PPMMeasurementReport +{ + UINT32 mReferenceTimeMilliseconds; + UINT8 mReferenceBandClass; + UINT16 mReferenceCDMAFrequency; + UINT8 mReferenceTotalRXPower; + UINT16 mReferencePNOffset; + UINT8 mReferenceStrength; + UINT8 mReferenceRMSErrorPhase; + UINT8 mNumberOfPilots; + + struct sPilot + { + UINT16 mPilotPNOffset; + UINT8 mPilotStrength; + UINT8 mPilotRMSErrorPhase; + INT16 mPilotPhase; + }; + + // This array must be the size specified by mNumberOfPilots + // sPilot mPilots[1]; +}; + +// Structure to describe indication TLV 0x12 for PDS SetPPMReportingStateIndication +struct sPDSSetPPMReportingStateIndication_PPMSuspendReason +{ + eQMIPDSSuspendReason mSuspendReason; +}; + +// Structure to describe indication TLV 0x13 for PDS SetPPMReportingStateIndication +struct sPDSSetPPMReportingStateIndication_PPMStopReason +{ + eQMIPDSStopReason mStopReason; +}; + +// Structure to describe request TLV 0x01 for PDSForceReceiverOff() +struct sPDSForceReceiverOffRequest_ForceReceiverOff +{ + eQMIPDSForceReceiverOff mForceReceiverOff; +}; + +// Structure to describe response TLV 0x10 for PDSGetPositionMethodsState() +struct sPDSGetPositionMethodsStateResponse_XTRATime +{ + eQMIPDSMethodStates mMethodState; +}; + +// Structure to describe response TLV 0x11 for PDSGetPositionMethodsState() +struct sPDSGetPositionMethodsStateResponse_XTRAData +{ + eQMIPDSMethodStates mMethodState; +}; + +// Structure to describe response TLV 0x12 for PDSGetPositionMethodsState() +struct sPDSGetPositionMethodsStateResponse_WiFi +{ + eQMIPDSMethodStates mMethodState; +}; + +// Structure to describe request TLV 0x10 for PDSSetPositionMethodsState() +struct sPDSSetPositionMethodsStateRequest_XTRATime +{ + eQMIPDSMethodStates mMethodState; +}; + +// Structure to describe request TLV 0x11 for PDSSetPositionMethodsState() +struct sPDSSetPositionMethodsStateRequest_XTRAData +{ + eQMIPDSMethodStates mMethodState; +}; + +// Structure to describe request TLV 0x12 for PDSSetPositionMethodsState() +struct sPDSSetPositionMethodsStateRequest_WiFi +{ + eQMIPDSMethodStates mMethodState; +}; + +// Structure to describe request TLV 0x10 for PDSInjectSensorData() +struct sPDSInjectSensorDataRequest_3AxisAccelerometerData +{ + UINT32 mSensorTimeOfFirstSampleMilliseconds; + bool mSignReversalRequired:1; + + // Padding out 7 bits + UINT8 mReserved1:7; + + UINT8 mNumberOfSamples; + + struct sSample + { + UINT16 mSampleTimeOffsetMilliseconds; + float mXAxisSample; + float mYAxisSample; + float mZAxisSample; + }; + + // This array must be the size specified by mNumberOfSamples + // sSample mSamples[1]; +}; + +// Structure to describe request TLV 0x11 for PDSInjectSensorData() +struct sPDSInjectSensorDataRequest_3AxisGyroData +{ + UINT32 mSensorTimeOfFirstSampleMilliseconds; + bool mSignReversalRequired:1; + + // Padding out 7 bits + UINT8 mReserved1:7; + + UINT8 mNumberOfSamples; + + struct sSample + { + UINT16 mSampleTimeOffsetMilliseconds; + float mXAxisSample; + float mYAxisSample; + float mZAxisSample; + }; + + // This array must be the size specified by mNumberOfSamples + // sSample mSamples[1]; +}; + +// Structure to describe request TLV 0x12 for PDSInjectSensorData() +struct sPDSInjectSensorDataRequest_AccelerometerTemperatureSamples +{ + UINT32 mTimeOfFirstSample; + UINT8 mTemperatureSamplesCount; + + struct sSample + { + UINT16 mSampleTimeOffset; + float mTemperature; + }; + + // This array must be the size specified by mTemperatureSamplesCount + // sSample mSamples[1]; +}; + +// Structure to describe request TLV 0x13 for PDSInjectSensorData() +struct sPDSInjectSensorDataRequest_GyroTemperatureSamples +{ + UINT32 mTimeOfFirstSample; + UINT8 mTemperatureSamplesCount; + + struct sSample + { + UINT16 mSampleTimeOffset; + float mTemperature; + }; + + // This array must be the size specified by mTemperatureSamplesCount + // sSample mSamples[1]; +}; + +// Structure to describe response TLV 0x10 for PDSInjectSensorData() +struct sPDSInjectSensorDataResponse_AccelerometerSampleSetCount +{ + UINT8 mAccelerometerSampleSetCount; +}; + +// Structure to describe response TLV 0x11 for PDSInjectSensorData() +struct sPDSInjectSensorDataResponse_GyroSampleSetCount +{ + UINT8 mGyroSampleSetCount; +}; + +// Structure to describe response TLV 0x12 for PDSInjectSensorData() +struct sPDSInjectSensorDataResponse_AccelerometerTemperatureSamples +{ + UINT8 mProcessedTemperatureSamplesCount; +}; + +// Structure to describe response TLV 0x13 for PDSInjectSensorData() +struct sPDSInjectSensorDataResponse_GyroTemperatureSamples +{ + UINT8 mProcessedTemperatureSamplesCount; +}; + +// Structure to describe request TLV 0x01 for PDSInjectTimeSyncData() +struct sPDSInjectTimeSyncDataRequest_TimeTag +{ + UINT32 mReferenceCounter; + UINT32 mSensorProcessorRXTimeMilliseconds; + UINT32 mSensorProcessorTXTimeMilliseconds; +}; + +// Structure to describe response TLV 0x10 for PDSGetSensorConfig() +struct sPDSGetSensorConfigResponse_CradleMountState +{ + eQMIPDSCradleMountState mCradleMountState; + UINT8 mCradleMountStateConfidence; +}; + +// Structure to describe response TLV 0x11 for PDSGetSensorConfig() +struct sPDSGetSensorConfigResponse_ExternalPowerSupplyState +{ + eQMIPDSExternalPowerState mExternalPowerSupplyState; +}; + +// Structure to describe request TLV 0x10 for PDSSetSensorConfig() +struct sPDSSetSensorConfigRequest_CradleMountState +{ + eQMIPDSCradleMountState mCradleMountState; + UINT8 mCradleMountStateConfidence; +}; + +// Structure to describe request TLV 0x11 for PDSSetSensorConfig() +struct sPDSSetSensorConfigRequest_ExternalPowerState +{ + eQMIPDSExternalPowerState mExternalPowerSupplyState; +}; + +// Structure to describe response TLV 0x10 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_GyroDataVariance +{ + float mGyroDataVariance; +}; + +// Structure to describe response TLV 0x11 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_GyroBiasRandomWalk +{ + float mGyroBiasRandomWalk; +}; + +// Structure to describe response TLV 0x12 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_VirtualGyroGravityAveragingLength +{ + UINT32 mVirtualGyroGravityAveragingLengthMilliseconds; +}; + +// Structure to describe response TLV 0x13 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_HeadingFilterMode +{ + INT8 mHeadingFilterMode; +}; + +// Structure to describe response TLV 0x14 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_VelocityConstraintVariance +{ + float mVelocityConstraintVariance; +}; + +// Structure to describe response TLV 0x15 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_PositioningMethod +{ + bool mSuppressInjectedPosition:1; + bool mReportUsingInstantaneousInformation:1; + bool mDisablePersistentMemoryStorage:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; +}; + +// Structure to describe response TLV 0x16 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_VelocityRWSD +{ + float mVelocityRandomWalkSpectralDensity; +}; + +// Structure to describe response TLV 0x17 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_AccelerationRWSD +{ + float mAccelerationRandomWalkSpectralDensity; +}; + +// Structure to describe response TLV 0x18 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_AngleRWSD +{ + float mAngleRandomWalkSpectralDensity; +}; + +// Structure to describe response TLV 0x19 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_RateRWSD +{ + float mRateRandomWalkSpectralDensity; +}; + +// Structure to describe response TLV 0x1A for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_SensorAlgorithmConfig +{ + bool mDisableINSPositioningFilter:1; + + // Padding out 31 bits + UINT8 mReserved1:7; + UINT8 mReserved2[3]; +}; + +// Structure to describe response TLV 0x1B for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_MaximumDeadReckoningTime +{ + UINT32 mMaximumDeadReckoningTimeSeconds; +}; + +// Structure to describe response TLV 0x1C for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_INSFilterLowThreshold +{ + UINT8 mINSFilterCrossCheckSigmaLowThreshold; +}; + +// Structure to describe response TLV 0x1D for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_INSFilterHighThreshold +{ + UINT8 mINSFilterCrossCheckSigmaHighThreshold; +}; + +// Structure to describe response TLV 0x1E for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_VehicleDataUse +{ + bool mUseGyroscopeXAxis:1; + bool mUseGyroscopeYAxis:1; + bool mUseGyroscopeZAxis:1; + bool mUseAccelerometerXAxis:1; + bool mUseAccelerometerYAxis:1; + bool mUseAccelerometerZAxis:1; + bool mUseOdometry:1; + + // Padding out 57 bits + UINT8 mReserved1:1; + UINT8 mReserved2[7]; +}; + +// Structure to describe response TLV 0x1F for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_VehicleVelocityRWSD +{ + float mVehicleVelocityRandomWalkSpectralDensity; +}; + +// Structure to describe response TLV 0x20 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_VehicleAccelerometerRWSD +{ + float mVehicleAccelerometerRandomWalkSpectralDensity; +}; + +// Structure to describe response TLV 0x21 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_VehicleAngleRWSD +{ + float mVehicleAngleRandomWalkSpectralDensity; +}; + +// Structure to describe response TLV 0x22 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_VehicleAngularRateRWSD +{ + float mVehicleAngularRateRandomWalkSpectralDensity; +}; + +// Structure to describe response TLV 0x23 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_VehicleOdometryScaleRWSD +{ + float mVehicleOdometryScaleRandomWalkSpectralDensity; +}; + +// Structure to describe response TLV 0x24 for PDSGetSensorNavigation() +struct sPDSGetSensorNavigationResponse_VehicleOdometryVariance +{ + float mVehicleOdometryVariance; +}; + +// Structure to describe request TLV 0x10 for PDSSetNavigationConfig() +struct sPDSSetNavigationConfigRequest_GyroDataVariance +{ + float mGyroDataVariance; +}; + +// Structure to describe request TLV 0x11 for PDSSetNavigationConfig() +struct sPDSSetNavigationConfigRequest_GyroBiasRandomWalk +{ + float mGyroBiasRandomWalk; +}; + +// Structure to describe request TLV 0x12 for PDSSetNavigationConfig() +struct sPDSSetNavigationConfigRequest_VirtualGyroCravityAveragingLength +{ + UINT32 mVirtualGyroGravityAveragingLengthMilliseconds; +}; + +// Structure to describe request TLV 0x13 for PDSSetNavigationConfig() +struct sPDSSetNavigationConfigRequest_HeadingFilterMode +{ + INT8 mHeadingFilterMode; +}; + +// Structure to describe request TLV 0x14 for PDSSetNavigationConfig() +struct sPDSSetNavigationConfigRequest_VelocityConstraintVariance +{ + float mVelocityConstraintVariance; +}; + +// Structure to describe request TLV 0x15 for PDSSetNavigationConfig() +struct sPDSSetNavigationConfigRequest_PositioningMethod +{ + bool mSuppressInjectedPosition:1; + bool mReportUsingInstantaneousInformation:1; + bool mDisablePersistentMemoryStorage:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x16 for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_VelocityRWSD +{ + float mVelocityRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x17 for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_AccelerationRWSD +{ + float mAccelerationRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x18 for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_AngleRWSD +{ + float mAngleRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x19 for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_RateRWSD +{ + float mRateRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x1A for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_SensorAlgorithmConfig +{ + bool mDisableINSPositioningFilter:1; + + // Padding out 31 bits + UINT8 mReserved1:7; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x1B for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_MaximumDeadReckoningTime +{ + UINT32 mMaximumDeadReckoningTimeSeconds; +}; + +// Structure to describe request TLV 0x1C for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_INSFilterLowThreshold +{ + UINT8 mINSFilterCrossCheckSigmaLowThreshold; +}; + +// Structure to describe request TLV 0x1D for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_INSFilterHighThreshold +{ + UINT8 mINSFilterCrossCheckSigmaHighThreshold; +}; + +// Structure to describe request TLV 0x1E for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_VehicleDataUse +{ + bool mUseGyroscopeXAxis:1; + bool mUseGyroscopeYAxis:1; + bool mUseGyroscopeZAxis:1; + bool mUseAccelerometerXAxis:1; + bool mUseAccelerometerYAxis:1; + bool mUseAccelerometerZAxis:1; + bool mUseOdometry:1; + + // Padding out 57 bits + UINT8 mReserved1:1; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x1F for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_VehicleVelocityRWSD +{ + float mVehicleVelocityRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x20 for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_VehicleAccelerometerRWSD +{ + float mVehicleAccelerometerRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x21 for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_VehicleAngleRWSD +{ + float mVehicleAngleRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x22 for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_VehicleAngularRateRWSD +{ + float mVehicleAngularRateRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x23 for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_VehicleOdometryScaleRWSD +{ + float mVehicleOdometryScaleRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x24 for PDSSetSensorNavigation() +struct sPDSSetSensorNavigationRequest_VehicleOdometryVariance +{ + float mVehicleOdometryVariance; +}; + +// Structure to describe request TLV 0x10 for PDSSetWLANBlanking() +struct sPDSSetWLANBlankingRequest_BlankingEnable +{ + eQMIPDSBlankingEnable mBlankingEnable; +}; + +// Structure to describe request TLV 0x11 for PDSSetWLANBlanking() +struct sPDSSetWLANBlankingRequest_ActiveChannels +{ + bool mChannel1:1; + bool mChannel2:1; + bool mChannel3:1; + bool mChannel4:1; + bool mChannel5:1; + bool mChannel6:1; + bool mChannel7:1; + bool mChannel8:1; + bool mChannel9:1; + bool mChannel10:1; + bool mChannel11:1; + bool mChannel12:1; + bool mChannel13:1; + bool mChannel14:1; + + // Padding out 18 bits + UINT8 mReserved1:2; + UINT8 mReserved2[2]; +}; + +// Structure to describe request TLV 0x12 for PDSSetWLANBlanking() +struct sPDSSetWLANBlankingRequest_BluetoothJamming +{ + INT8 mBluetoothJammingActive; +}; + +// Structure to describe request TLV 0x13 for PDSSetWLANBlanking() +struct sPDSSetWLANBlankingRequest_IMDJamming +{ + eQMIPDSIMDJammingStates mSimulateIMDJamming; +}; + +// Structure to describe request TLV 0x14 for PDSSetWLANBlanking() +struct sPDSSetWLANBlankingRequest_JammingBands +{ + eQMIPDSIMDJammingBands mBandstoJam; +}; + +// Structure to describe request TLV 0x10 for PDSSetSecurityChallengeReport() +struct sPDSSetSecurityChallengeReportRequest_EnableSecurity +{ + eQMIPDSReportSecurityChallenge mReportSecurityChallenge; +}; + +// Structure to describe indication TLV 0x10 for PDS SetSecurityChallengeReportIndication +struct sPDSSetSecurityChallengeReportIndication_EnableSecurity +{ + eQMIPDSEncryptionAlgorithm mEncryptionAlgorithm; + UINT8 mEncryptionDataID; + UINT8 mEncryptionDataLength; + + // This array must be the size specified by mEncryptionDataLength + // UINT8 mEncryptionData[1]; +}; + +// Structure to describe request TLV 0x10 for PDSSetSecurityChallenge() +struct sPDSSetSecurityChallengeRequest_SecureHashAlgorithm +{ + UINT8 mEncryptionDataID; + UINT8 mEncryptionDataLength; + + // This array must be the size specified by mEncryptionDataLength + // UINT8 mEncryptionData[1]; +}; + +// Structure to describe response TLV 0x10 for PDSGetSecurityEncryptionConfig() +struct sPDSGetSecurityEncryptionConfigResponse_SecureClientTimestamp +{ + eQMIPDSEncryptionAlgorithm mEncryptionAlgorithm; + UINT64 mEncryptionTimestampMilliseconds; + UINT8 mEncryptionDataLength; + + // This array must be the size specified by mEncryptionDataLength + // UINT8 mEncryptionData[1]; +}; + +// Structure to describe request TLV 0x10 for PDSSetSecurityUpdateRate() +struct sPDSSetSecurityUpdateRateRequest_EnableSecurity +{ + UINT8 mUpdateRate; +}; + +// Structure to describe request TLV 0x10 for PDSSetCellDatabaseControl() +struct sPDSSetCellDatabaseControlRequest_Control +{ + bool mPositionInfoStorage:1; + bool mTimeInfoStorage:1; + + // Padding out 30 bits + UINT8 mReserved1:6; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x01 for PDSInjectMotionData() +struct sPDSInjectMotionDataRequest_MotionData +{ + eQMIPDSMotionStates mMotionState; + eQMIPDSMotionModes mMotionMode; + eQMIPDSMotionSubmodes mMotionSubmode; + float mStateProbability; + UINT16 mMotionDataAgeMilliseconds; + UINT16 mMotionDataTimoutMilliseconds; +}; + +// Structure to describe request TLV 0x01 for PDSSetGNSSEngineErrorRecoveryReport() +struct sPDSSetGNSSEngineErrorRecoveryReportRequest_Indicator +{ + INT8 mReportGNSSEngineErrorRecovery; +}; + +// Structure to describe indication TLV 0x01 for PDS GNSSEngineErrorRecoveryReport +struct sPDSGNSSEngineErrorRecoveryReportIndication_Reason +{ + eQMIPDSResetReasons mResetReason; +}; + +// Structure to describe indication TLV 0x02 for PDS GNSSEngineErrorRecoveryReport +struct sPDSGNSSEngineErrorRecoveryReportIndication_DeletedData +{ + bool mClockInformation:1; + bool mPositionInformation:1; + bool mSVDirections:1; + bool mSVSteering:1; + + // Padding out 28 bits + UINT8 mReserved1:4; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x10 for PDS GNSSEngineErrorRecoveryReport +struct sPDSGNSSEngineErrorRecoveryReportIndication_CurrentSystemTime +{ + UINT16 mGPSWeekNumber; + UINT32 mGPSTimeOfWeekMilliseconds; +}; + +// Structure to describe indication TLV 0x11 for PDS GNSSEngineErrorRecoveryReport +struct sPDSGNSSEngineErrorRecoveryReportIndication_ScanParameters +{ + eQMIPDSSVSystems mSystem; + UINT8 mPRN; + UINT16 mCN0; + UINT16 mSubMillisecondDifferenceMicroseconds; + INT16 mDopplerDifferenceHz; +}; + +// Structure to describe indication TLV 0x12 for PDS GNSSEngineErrorRecoveryReport +struct sPDSGNSSEngineErrorRecoveryReportIndication_ClockParameters +{ + eQMIPDSSVSystems mSystem; + eQMIPDSTimeSource mCurrentTimeSource; + eQMIPDSTimeSource mInjectedTimeSource; + UINT32 mTimeDifferenceMilliseconds; + UINT32 mTimeUncertaintyMicroseconds; +}; + +// Structure to describe indication TLV 0x13 for PDS GNSSEngineErrorRecoveryReport +struct sPDSGNSSEngineErrorRecoveryReportIndication_SubframeParameters +{ + UINT8 mPRN; + INT32 mGPSDataDemodulationINProgress; + UINT16 mObservedCycleSlips; + UINT16 mParityErrors; + UINT32 mGPSSubframeWordWithTimingError; +}; + +// Structure to describe indication TLV 0x14 for PDS GNSSEngineErrorRecoveryReport +struct sPDSGNSSEngineErrorRecoveryReportIndication_TimeParameters +{ + eQMIPDSSVSystems mSystem; + UINT8 mPRN; + UINT16 mGPSWeekNumber; + UINT32 mGPSTimeOfWeekMilliseconds; + UINT16 mGNSSNumberOfDays; + UINT32 mGNSSMilliseconds; + UINT32 mClockDifferenceMilliseconds; +}; + +// Structure to describe indication TLV 0x15 for PDS GNSSEngineErrorRecoveryReport +struct sPDSGNSSEngineErrorRecoveryReportIndication_MeasurementParameters +{ + eQMIPDSSVSystems mSystem; + UINT16 mGPSWeekNumber; + UINT32 mGPSTimeOfWeekMilliseconds; + UINT8 mObservedMeasurementInconsistencies; + UINT16 mObservationDuration; +}; + +// Structure to describe indication TLV 0x16 for PDS GNSSEngineErrorRecoveryReport +struct sPDSGNSSEngineErrorRecoveryReportIndication_RFParameters +{ + UINT32 mQualitySignalStrength; + UINT32 mResetSignalStrength; +}; + +// Structure to describe request TLV 0x10 for PDSInjectTestData() +struct sPDSInjectTestDataRequest_TimeUncertainty +{ + UINT32 mTimeUncertaintyMicroseconds; +}; + +// Structure to describe request TLV 0x11 for PDSInjectTestData() +struct sPDSInjectTestDataRequest_PositionUncertainty +{ + UINT32 mPositionUncertaintyCentimeters; +}; + +// Structure to describe request TLV 0x12 for PDSInjectTestData() +struct sPDSInjectTestDataRequest_TimeOffset +{ + UINT64 mTimeOffsetMicroseconds; +}; + +// Structure to describe request TLV 0x13 for PDSInjectTestData() +struct sPDSInjectTestDataRequest_PositionOffset +{ + UINT32 mPositionOffsetMeters; +}; + +// Structure to describe request TLV 0x01 for PDSSetGNSSRFConfig() +struct sPDSSetGNSSRFConfigRequest_PeakAntennaGain +{ + INT16 mPeakAntennaGain; +}; + +// Structure to describe request TLV 0x10 for PDSSetGNSSRFConfig() +struct sPDSSetGNSSRFConfigRequest_GPSRFLoss +{ + UINT16 mRFLoss; +}; + +// Structure to describe request TLV 0x11 for PDSSetGNSSRFConfig() +struct sPDSSetGNSSRFConfigRequest_GlonassRFLoss +{ + UINT16 mRFLossFrequency0; + UINT16 mRFLossFrequencyMinus7; + UINT16 mRFLossFrequencyPlus6; +}; + +// Structure to describe request TLV 0x01 for PDSInjectCourseOverGroundData() +struct sPDSInjectCourseOverGroundDataRequest_COGData +{ + eQMIPDSCOGTimeTypes mTimeType; + UINT64 mTimestampMilliseconds; + float mCourseOverGround; + float mCourseOverGroundUncertainty; + eQMIPDSReliabilityIndicator mCourseOverGroundReliability; +}; + +// Structure to describe request TLV 0x01 for PDSInjectSUPLCertificate() +struct sPDSInjectSUPLCertificateRequest_SUPLCertificateID +{ + UINT8 mSUPLCertificateID; +}; + +// Structure to describe request TLV 0x02 for PDSInjectSUPLCertificate() +struct sPDSInjectSUPLCertificateRequest_SUPLCertificateData +{ + UINT16 mSUPLCertificateDataLength; + + // This array must be the size specified by mSUPLCertificateDataLength + // UINT8 mSUPLCertificateData[1]; +}; + +// Structure to describe request TLV 0x01 for PDSDeleteSUPLCertificate() +struct sPDSDeleteSUPLCertificateRequest_SUPLCertificateID +{ + UINT8 mSUPLCertificateID; +}; + +// Structure to describe response TLV 0x10 for PDSGetIS801OverSUPLIndicator() +struct sPDSGetIS801OverSUPLIndicatorResponse_Indicator +{ + INT8 mIS801IsCarriedInsideSUPL; +}; + +// Structure to describe request TLV 0x01 for PDSSetIS801OverSUPLIndicator() +struct sPDSSetIS801OverSUPLIndicatorRequest_Indicator +{ + INT8 mIS801IsCarriedInsideSUPL; +}; + +// Structure to describe response TLV 0x10 for PDSGetSUPLHashAlgorithm() +struct sPDSGetSUPLHashAlgorithmResponse_Algorithm +{ + eQMIPDSSUPLHashAlgorithms mSUPLHashAlgorithm; +}; + +// Structure to describe request TLV 0x01 for PDSSetSUPLHashAlgorithm() +struct sPDSSetSUPLHashAlgorithmRequest_Algorithm +{ + eQMIPDSSUPLHashAlgorithms mSUPLHashAlgorithm; +}; + +// Structure to describe response TLV 0x10 for PDSGetSUPLMaximumVersion() +struct sPDSGetSUPLMaximumVersionResponse_MaxVersion +{ + eQMIPDSSUPLVersions mSUPLMaximumVersion; +}; + +// Structure to describe request TLV 0x01 for PDSSetSUPLMaximumVersion() +struct sPDSSetSUPLMaximumVersionRequest_MaxVersion +{ + eQMIPDSSUPLVersions mSUPLMaximumVersion; +}; + +// Structure to describe response TLV 0x10 for PDSGetSUPLSecurity() +struct sPDSGetSUPLSecurityResponse_Security +{ + INT32 mSUPLSecurityEnabled; +}; + +// Structure to describe request TLV 0x01 for PDSSetSUPLSecurity() +struct sPDSSetSUPLSecurityRequest_Security +{ + INT32 mSUPLSecurityEnabled; +}; + +// Structure to describe response TLV 0x10 for PDSGetSUPLTLSVersion() +struct sPDSGetSUPLTLSVersionResponse_TLSVersion +{ + eQMIPDSSUPLTLSVersions mSUPLTLSVersion; +}; + +// Structure to describe request TLV 0x01 for PDSSetSUPLTLSVersion() +struct sPDSSetSUPLTLSVersionRequest_TLSVersion +{ + eQMIPDSSUPLTLSVersions mSUPLTLSVersion; +}; + +// Structure to describe response TLV 0x10 for PDSGetAGNSSPositioningModes() +struct sPDSGetAGNSSPositioningModesResponse_Modes +{ + bool mUPMSBasedFor2GAnd3G:1; + bool mUPMSAssistedFor2GAnd3G:1; + bool mUPMSBasedFor4G:1; + bool mUPMSAssistedFor4G:1; + + // Padding out 28 bits + UINT8 mReserved1:4; + UINT8 mReserved2[3]; + + bool mCPMSBasedFor2G:1; + bool mCPMSAssistedFor2G:1; + bool mCPMSBasedFor3G:1; + bool mCPMSAssistedFor3G:1; + bool mCPMSBasedFor4G:1; + bool mCPMSAssistedFor4G:1; + + // Padding out 26 bits + UINT8 mReserved3:2; + UINT8 mReserved4[3]; + + bool mCommonStandalone:1; + + // Padding out 31 bits + UINT8 mReserved5:7; + UINT8 mReserved6[3]; + + INT8 mGSMUPNMRSupportEnabled; +}; + +// Structure to describe request TLV 0x01 for PDSSetAGNSSPositioningModes() +struct sPDSSetAGNSSPositioningModesRequest_Modes +{ + bool mUPMSBasedFor2GAnd3G:1; + bool mUPMSAssistedFor2GAnd3G:1; + bool mUPMSBasedFor4G:1; + bool mUPMSAssistedFor4G:1; + + // Padding out 28 bits + UINT8 mReserved1:4; + UINT8 mReserved2[3]; + + bool mCPMSBasedFor2G:1; + bool mCPMSAssistedFor2G:1; + bool mCPMSBasedFor3G:1; + bool mCPMSAssistedFor3G:1; + bool mCPMSBasedFor4G:1; + bool mCPMSAssistedFor4G:1; + + // Padding out 26 bits + UINT8 mReserved3:2; + UINT8 mReserved4[3]; + + bool mCommonStandalone:1; + + // Padding out 31 bits + UINT8 mReserved5:7; + UINT8 mReserved6[3]; + + INT8 mGSMUPNMRSupportEnabled; +}; + +// Structure to describe response TLV 0x10 for PDSGetEmergencyProtocolConfig() +struct sPDSGetEmergencyProtocolConfigResponse_Config +{ + eQMIPDSEmergencyProtocolConfigs mEmergencyProtocolConfig; +}; + +// Structure to describe request TLV 0x01 for PDSSetEmergencyProtocolConfig() +struct sPDSSetEmergencyProtocolConfigRequest_Config +{ + eQMIPDSEmergencyProtocolConfigs mEmergencyProtocolConfig; +}; + +// Structure to describe request TLV 0x01 for PDSGetAPNProfiles() +struct sPDSGetAPNProfilesRequest_APNType +{ + eQMIPDSAPNTypes mAPNType; +}; + +// Structure to describe response TLV 0x10 for PDSGetAPNProfiles() +struct sPDSGetAPNProfilesResponse_APNType +{ + eQMIPDSAPNTypes mAPNType; +}; + +// Structure to describe response TLV 0x11 for PDSGetAPNProfiles() +struct sPDSGetAPNProfilesResponse_WCDMAAPNInfo +{ + eQMIPDSPDNTypes mPDNType; + UINT8 mAPNNameLength; + + // This array must be the size specified by mAPNNameLength + // char mAPNName[1]; +}; + +// Structure to describe request TLV 0x01 for PDSSetAPNProfiles() +struct sPDSSetAPNProfilesRequest_APNType +{ + eQMIPDSAPNTypes mAPNType; +}; + +// Structure to describe request TLV 0x10 for PDSSetAPNProfiles() +struct sPDSSetAPNProfilesRequest_WCDMAAPNInfo +{ + eQMIPDSPDNTypes mPDNType; + UINT8 mAPNNameLength; + + // This array must be the size specified by mAPNNameLength + // char mAPNName[1]; +}; + +// Structure to describe response TLV 0x10 for PDSGetHomeSUPLAddress() +struct sPDSGetHomeSUPLAddressResponse_Address +{ + UINT8 mAddressLength; + + // This array must be the size specified by mAddressLength + // char mAddress[1]; +}; + +// Structure to describe request TLV 0x10 for PDSSetHomeSUPLAddress() +struct sPDSSetHomeSUPLAddressRequest_Address +{ + UINT8 mAddressLength; + + // This array must be the size specified by mAddressLength + // char mAddress[1]; +}; + +// Structure to describe request TLV 0x10 for PDSInjectVehicleSensorData() +struct sPDSInjectVehicleSensorDataRequest_AccelerometerData +{ + UINT32 mSensorSampleTimeBaseInMilliseconds; + bool mXAxisValid:1; + bool mYAxisValid:1; + bool mZAxisValid:1; + + // Padding out 61 bits + UINT8 mReserved1:5; + UINT8 mReserved2[7]; + + UINT8 mSensorDataCount; + + struct sSensorData + { + UINT32 mSampleTimeOffsetInMicroseconds; + UINT8 mAxisSampleCount; + + // This array must be the size specified by mAxisSampleCount + // float mAxisSample[1]; + }; + + // This array must be the size specified by mSensorDataCount + // sSensorData mSensorDatas[1]; +}; + +// Structure to describe request TLV 0x11 for PDSInjectVehicleSensorData() +struct sPDSInjectVehicleSensorDataRequest_AngularRotationData +{ + UINT32 mSensorSampleTimeBaseInMilliseconds; + bool mXAxisValid:1; + bool mYAxisValid:1; + bool mZAxisValid:1; + + // Padding out 61 bits + UINT8 mReserved1:5; + UINT8 mReserved2[7]; + + UINT8 mSensorDataCount; + + struct sSensorData + { + UINT32 mSampleTimeOffsetInMicroseconds; + UINT8 mAxisSampleCount; + + // This array must be the size specified by mAxisSampleCount + // float mAxisSample[1]; + }; + + // This array must be the size specified by mSensorDataCount + // sSensorData mSensorDatas[1]; +}; + +// Structure to describe request TLV 0x12 for PDSInjectVehicleSensorData() +struct sPDSInjectVehicleSensorDataRequest_OdometryData +{ + UINT32 mSensorSampleTimeBaseInMilliseconds; + bool mReverseMovement:1; + bool mAffectedByErrors:1; + bool mAbsoluteMeasurement:1; + + // Padding out 61 bits + UINT8 mReserved1:5; + UINT8 mReserved2[7]; + + bool mLeftAndRightAverageValid:1; + bool mLeftSideValid:1; + bool mRightSideValid:1; + + // Padding out 61 bits + UINT8 mReserved3:5; + UINT8 mReserved4[7]; + + UINT32 mDistanceTraveledBaseInMeters; + UINT8 mOdometryDataCount; + + struct sOdometryData + { + UINT32 mSampleTimeOffsetInMicroseconds; + UINT8 mDistanceTraveledCount; + + // This array must be the size specified by mDistanceTraveledCount + // UINT32 mDistanceTraveledInMillimeters[1]; + }; + + // This array must be the size specified by mOdometryDataCount + // sOdometryData mOdometryDatas[1]; +}; + +// Structure to describe request TLV 0x13 for PDSInjectVehicleSensorData() +struct sPDSInjectVehicleSensorDataRequest_ExternalTimeSyncInfo +{ + UINT32 mChangeInTimeScalesInMilliseconds; +}; + +// Structure to describe request TLV 0x01 for PDSInjectPedometerData() +struct sPDSInjectPedometerDataRequest_PedometerData +{ + eQMIPDSInjectTimeTypes mTimeType; + UINT64 mTimestampMilliseconds; + UINT32 mTimeIntervalInMilliseconds; + float mStepConfidence; + UINT32 mStepCount; + float mStepCountUncertainty; + float mStepRate; + float mStrideLength; + float mStrideLengthUncertainty; +}; + +// Structure to describe request TLV 0x10 for AUTHStartEAPSession() +struct sAUTHStartEAPSessionRequest_MethodMask +{ + bool mEAPSIM:1; + bool mEAPAKA:1; + + // Padding out 30 bits + UINT8 mReserved1:6; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x11 for AUTHStartEAPSession() +struct sAUTHStartEAPSessionRequest_UserID +{ + UINT8 mUserIDLength; + + // This array must be the size specified by mUserIDLength + // UINT8 mUserID[1]; +}; + +// Structure to describe request TLV 0x12 for AUTHStartEAPSession() +struct sAUTHStartEAPSessionRequest_MetaIdentity +{ + UINT8 mMetaIdentityLength; + + // This array must be the size specified by mMetaIdentityLength + // UINT8 mMetaIdentity[1]; +}; + +// Structure to describe request TLV 0x13 for AUTHStartEAPSession() +struct sAUTHStartEAPSessionRequest_SIMAKAAlgorithm +{ + eQMIAUTHSIMAKAAlgorithm mSIMAKAAlgorithm; +}; + +// Structure to describe request TLV 0x01 for AUTHSendEAPPacket() +struct sAUTHSendEAPPacketRequest_RequestPacket +{ + UINT8 mEAPRequestPacket[9999]; +}; + +// Structure to describe response TLV 0x01 for AUTHSendEAPPacket() +struct sAUTHSendEAPPacketResponse_ResponsePacket +{ + UINT8 mResponsePacket[9999]; +}; + +// Structure to describe indication TLV 0x01 for AUTH EAPSessionResultIndication +struct sAUTHEAPSessionResultIndication_Result +{ + eQMIAUTHEAPResult mResult; +}; + +// Structure to describe response TLV 0x01 for AUTHGetEAPSessionKeys() +struct sAUTHGetEAPSessionKeysResponse_SessionKeys +{ + UINT8 mSessionKeys[9999]; +}; + +// Structure to describe request TLV 0x01 for AUTHRunAKA() +struct sAUTHRunAKARequest_Version +{ + eQMIAUTHAKAVersion mAKAVersion; +}; + +// Structure to describe request TLV 0x10 for AUTHRunAKA() +struct sAUTHRunAKARequest_Parameters1 +{ + UINT8 mRandomChallengeLength; + + // This array must be the size specified by mRandomChallengeLength + // UINT8 mRandomChallenge[1]; +}; + +struct sAUTHRunAKARequest_Parameters2 +{ + UINT8 mAuthenticationTokenLength; + + // This array must be the size specified by mAuthenticationTokenLength + // UINT8 mAuthenticationToken[1]; +}; + +struct sAUTHRunAKARequest_Parameters +{ + sAUTHRunAKARequest_Parameters1 mAUTHRunAKARequest_Parameters1; + sAUTHRunAKARequest_Parameters2 mAUTHRunAKARequest_Parameters2; +}; + +// Structure to describe response TLV 0x01 for AUTHRunAKA() +struct sAUTHRunAKAResponse_Handle +{ + UINT32 mHandle; +}; + +// Structure to describe indication TLV 0x01 for AUTH AKAResultIndication +struct sAUTHAKAResultIndication_Result +{ + UINT32 mHandle; + eQMIAUTHAKAResult mResult; +}; + +// Structure to describe indication TLV 0x10 for AUTH AKAResultIndication +struct sAUTHAKAResultIndication_V1V2ResponseData1 +{ + UINT8 mDigestLength; + + // This array must be the size specified by mDigestLength + // UINT8 mDigest[1]; +}; + +struct sAUTHAKAResultIndication_V1V2ResponseData2 +{ + UINT8 mAKADataLength; + + // This array must be the size specified by mAKADataLength + // UINT8 mAKAData[1]; +}; + +struct sAUTHAKAResultIndication_V1V2ResponseData +{ + sAUTHAKAResultIndication_V1V2ResponseData1 mAUTHAKAResultIndication_V1V2ResponseData1; + sAUTHAKAResultIndication_V1V2ResponseData2 mAUTHAKAResultIndication_V1V2ResponseData2; +}; + +// Structure to describe request TLV 0x10 for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_DTMF +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x11 for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_VoicePrivacy +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x12 for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_SupplementaryService +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x13 for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_CallNotification +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x14 for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_Handover +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x15 for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_SpeechCodec +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x16 for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_USSDNotification +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x17 for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_Supplementary +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x18 for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_Modification +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x19 for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_UUS +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x1A for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_AOC +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x1B for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_Conference +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x1C for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_Burst +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x1D for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_PageMiss +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x1E for VoiceIndicationRegistration() +struct sVoiceIndicationRegistrationRequest_CallControlResultInfo +{ + INT8 mEnableEvents; +}; + +// Structure to describe request TLV 0x01 for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_CallingNumber +{ + // String is variable length, but must be size of the container + // char mCallingNumber[1]; +}; + +// Structure to describe request TLV 0x10 for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_CallType +{ + eQMIVoiceCallTypes mCallType; +}; + +// Structure to describe request TLV 0x11 for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_CLIR +{ + eQMIVoiceCLIRTypes mCLIRType; +}; + +// Structure to describe request TLV 0x12 for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_UUS +{ + eQMIVoiceUUSTypes mUUSType; + eQMIVoiceUUSDataCodingSchemes mUUSDCS; + UINT8 mUUSLength; + + // This array must be the size specified by mUUSLength + // UINT8 mUUSData[1]; +}; + +// Structure to describe request TLV 0x13 for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_CUG +{ + UINT16 mCUGIndex; + INT8 mSuppressPreferentialCUG; + INT8 mSuppressOASubscription; +}; + +// Structure to describe request TLV 0x14 for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_EmergencyCategory +{ + bool mPolice:1; + bool mAmbulance:1; + bool mFireBrigade:1; + bool mMarineGuard:1; + bool mMountainRescue:1; + bool mManualCall:1; + bool mAutomaticCall:1; + bool mReserved:1; +}; + +// Structure to describe request TLV 0x15 for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_CalledPartySubaddress +{ + eQMIVoiceSubaddressTypes mSubaddressType; + eQMIVoiceEvenOddIndicators mAddressSignals; + UINT8 mSubaddressLength; + + // This array must be the size specified by mSubaddressLength + // UINT8 mSubaddress[1]; +}; + +// Structure to describe request TLV 0x16 for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_ServiceType +{ + eQMIVoiceServiceTypes mServiceType; +}; + +// Structure to describe request TLV 0x17 for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_SIPURIOverflow +{ + // String is variable length, but must be size of the container + // char mSIPURIOverflow[1]; +}; + +// Structure to describe request TLV 0x18 for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_AudioAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x19 for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_VideoAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x1A for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_PresentationIndicator +{ + eQMIVoicePresentationIndicators32Bit mPresentationIndicator; +}; + +// Structure to describe request TLV 0x1B for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_VideoshareCallAttributes +{ + eQMIVoiceVideoshareVariants mVideoshareVariant; + UINT16 mFileAttributesLength; + + // This array must be the size specified by mFileAttributesLength + // char mFileAttributes[1]; +}; + +// Structure to describe request TLV 0x1C for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_ECallVariant +{ + eQMIVoiceECallVariants mECallVariant; +}; + +// Structure to describe request TLV 0x1D for VoiceCallOriginate() +struct sVoiceCallOriginateRequest_ConferenceURIList +{ + // String is variable length, but must be size of the container + // char mConferenceURIList[1]; +}; + +// Structure to describe response TLV 0x10 for VoiceCallOriginate() +struct sVoiceCallOriginateResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x11 for VoiceCallOriginate() +struct sVoiceCallOriginateResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x12 for VoiceCallOriginate() +struct sVoiceCallOriginateResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x13 for VoiceCallOriginate() +struct sVoiceCallOriginateResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe response TLV 0x14 for VoiceCallOriginate() +struct sVoiceCallOriginateResponse_EndReason +{ + eQMIVoiceEndReasons mEndReason; +}; + +// Structure to describe request TLV 0x01 for VoiceCallEnd() +struct sVoiceCallEndRequest_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x10 for VoiceCallEnd() +struct sVoiceCallEndResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe request TLV 0x01 for VoiceCallAnswer() +struct sVoiceCallAnswerRequest_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe request TLV 0x10 for VoiceCallAnswer() +struct sVoiceCallAnswerRequest_CallType +{ + eQMIVoiceCallTypes mCallType; +}; + +// Structure to describe request TLV 0x11 for VoiceCallAnswer() +struct sVoiceCallAnswerRequest_AudioAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x12 for VoiceCallAnswer() +struct sVoiceCallAnswerRequest_VideoAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x13 for VoiceCallAnswer() +struct sVoiceCallAnswerRequest_PresentationIndicator +{ + eQMIVoicePresentationIndicators32Bit mPresentationIndicator; +}; + +// Structure to describe request TLV 0x14 for VoiceCallAnswer() +struct sVoiceCallAnswerRequest_VideoshareFileAttributes +{ + // String is variable length, but must be size of the container + // char mFileAttributes[1]; +}; + +// Structure to describe request TLV 0x15 for VoiceCallAnswer() +struct sVoiceCallAnswerRequest_RejectCall +{ + INT8 mRejectCall; +}; + +// Structure to describe response TLV 0x10 for VoiceCallAnswer() +struct sVoiceCallAnswerResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe request TLV 0x01 for VoiceGetCallInfo() +struct sVoiceGetCallInfoRequest_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x10 for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_CallInfo +{ + UINT8 mCallID; + eQMIVoiceCallStates mCallState; + eQMIVoiceCallTypes mCallType; + eQMIVoiceCallDirections mDirection; + eQMIVoiceCallModes mMode; +}; + +// Structure to describe response TLV 0x11 for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_RemotePartyNumber +{ + eQMIVoicePresentationIndicators mPresentationIndicator; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; +}; + +// Structure to describe response TLV 0x12 for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_ServiceOption +{ + UINT16 mServiceOption; +}; + +// Structure to describe response TLV 0x13 for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_VoicePrivacy +{ + eQMIVoicePrivacyLevels mVoicePrivacy; +}; + +// Structure to describe response TLV 0x14 for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_OTASPStatus +{ + eQMIVoiceOTASPStati mOTASPStatus; +}; + +// Structure to describe response TLV 0x15 for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_RemotePartyName +{ + eQMIVoicePresentationIndicators mPresentationIndicator; + UINT8 mCodingScheme; + UINT8 mCallerNameLength; + + // This array must be the size specified by mCallerNameLength + // UINT8 mCallerName[1]; +}; + +// Structure to describe response TLV 0x16 for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_UUS +{ + eQMIVoiceUUSTypes mUUSType; + eQMIVoiceUUSDataCodingSchemes mUUSDCS; + UINT8 mUUSLength; + + // This array must be the size specified by mUUSLength + // UINT8 mUUSData[1]; +}; + +// Structure to describe response TLV 0x17 for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_AlertingType +{ + eQMIVoiceAlertingTypes mAlertingType; +}; + +// Structure to describe response TLV 0x18 for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x19 for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_ConnectedNumberInfo +{ + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; +}; + +// Structure to describe response TLV 0x1A for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_DiagnosticInfo +{ + UINT8 mDiagnosticInfoLength; + + // This array must be the size specified by mDiagnosticInfoLength + // UINT8 mDiagnosticInfo[1]; +}; + +// Structure to describe response TLV 0x1B for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_AlertingPattern +{ + eQMIVoiceAlertingPatterns mAlertingPattern; +}; + +// Structure to describe response TLV 0x1C for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_AudioAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe response TLV 0x1D for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_VideoAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe response TLV 0x1E for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_VideoshareVariant +{ + eQMIVoiceVideoshareVariants mVideoshareVariant; +}; + +// Structure to describe response TLV 0x1F for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_SIPURI +{ + // String is variable length, but must be size of the container + // char mSIPURI[1]; +}; + +// Structure to describe response TLV 0x20 for VoiceGetCallInfo() +struct sVoiceGetCallInfoResponse_SRVCCCall +{ + INT8 mSRVCCCall; +}; + +// Structure to describe indication TLV 0x10 for Voice OTASPIndication +struct sVoiceOTASPIndication_OTASPStatus +{ + UINT8 mCallID; + eQMIVoiceOTASPStati mOTASPStatus; +}; + +// Structure to describe indication TLV 0x01 for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe indication TLV 0x10 for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_Signal +{ + UINT8 mSignalType; + UINT8 mAlertPitch; + UINT8 mSignal; +}; + +// Structure to describe indication TLV 0x11 for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_CallerID +{ + UINT8 mPresentationIndicator; + UINT8 mCallerIDLength; + + // This array must be the size specified by mCallerIDLength + // char mCallerID[1]; +}; + +// Structure to describe indication TLV 0x12 for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_Display +{ + // String is variable length, but must be size of the container + // char mDisplayBuffer[1]; +}; + +// Structure to describe indication TLV 0x13 for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_ExtendedDisplay +{ + UINT8 mExtendedDisplayBuffer[182]; +}; + +// Structure to describe indication TLV 0x14 for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_CallerName +{ + // String is variable length, but must be size of the container + // char mCallerName[1]; +}; + +// Structure to describe indication TLV 0x15 for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_CallWaiting +{ + INT8 mNewCallWaiting; +}; + +// Structure to describe indication TLV 0x16 for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_ConnectedNumberInfo +{ + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; +}; + +// Structure to describe indication TLV 0x17 for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_CallingPartyNumberInfo +{ + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; +}; + +// Structure to describe indication TLV 0x18 for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_CalledPartyNumberInfo +{ + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; +}; + +// Structure to describe indication TLV 0x19 for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_RedirectingNumberInfo +{ + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mRedirectReason; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; +}; + +// Structure to describe indication TLV 0x1A for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_CLIRCause +{ + eQMIVoiceCLIRCauses mCLIRCause; +}; + +// Structure to describe indication TLV 0x1B for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_NSSAudio +{ + UINT8 mUpLink; + UINT8 mDownLink; +}; + +// Structure to describe indication TLV 0x1C for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_NSSRelease +{ + eQMIVoiceNSSReleases mNSSRelease; +}; + +// Structure to describe indication TLV 0x1D for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_LineControlInfo +{ + INT8 mPolarityIncluded; + INT8 mToggleMode; + INT8 mReversePolarity; + UINT8 mPowerDenialTime; +}; + +// Structure to describe indication TLV 0x1E for Voice InfoRecordIndication +struct sVoiceInfoRecordIndication_ExtendedDisplayInfo +{ + UINT8 mDisplayType; + UINT8 mExtendedDisplayInfoLength; + + // This array must be the size specified by mExtendedDisplayInfoLength + // UINT8 mExtendedDisplayInfo[1]; +}; + +// Structure to describe request TLV 0x01 for VoiceSendFlash() +struct sVoiceSendFlashRequest_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe request TLV 0x10 for VoiceSendFlash() +struct sVoiceSendFlashRequest_Payload +{ + // String is variable length, but must be size of the container + // char mFlashPayload[1]; +}; + +// Structure to describe request TLV 0x11 for VoiceSendFlash() +struct sVoiceSendFlashRequest_Type +{ + eQMIVoiceFlashTypes mFlashType; +}; + +// Structure to describe response TLV 0x10 for VoiceSendFlash() +struct sVoiceSendFlashResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe request TLV 0x01 for VoiceBurstDTMF() +struct sVoiceBurstDTMFRequest_Info +{ + UINT8 mCallID; + UINT8 mDTMFBufferLength; + + // This array must be the size specified by mDTMFBufferLength + // char mDTMFBuffer[1]; +}; + +// Structure to describe request TLV 0x10 for VoiceBurstDTMF() +struct sVoiceBurstDTMFRequest_Lengths +{ + eQMIVoicePulseWidths mDTMFPulseWidth; + eQMIVoiceInterdigitIntervals mDTMFInterdigitInterval; +}; + +// Structure to describe request TLV 0x01 for VoiceStartContinuousDTMF() +struct sVoiceStartContinuousDTMFRequest_Info +{ + UINT8 mCallID; + char mDTMFDigit; +}; + +// Structure to describe response TLV 0x10 for VoiceStartContinuous() +struct sVoiceStartContinuousResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe request TLV 0x01 for VoiceStopContinuousDTMF() +struct sVoiceStopContinuousDTMFRequest_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x10 for VoiceStopContinuous() +struct sVoiceStopContinuousResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe indication TLV 0x01 for Voice DTMFIndication +struct sVoiceDTMFIndication_DTMFInfo +{ + UINT8 mCallID; + eQMIVoiceDTMFEvents mDTMFEvent; + UINT8 mDTMFBufferLength; + + // This array must be the size specified by mDTMFBufferLength + // char mDTMFBuffer[1]; +}; + +// Structure to describe indication TLV 0x10 for Voice DTMFIndication +struct sVoiceDTMFIndication_Lengths +{ + eQMIVoicePulseWidths mDTMFPulseWidth; + eQMIVoiceInterdigitIntervals mDTMFInterdigitInterval; +}; + +// Structure to describe request TLV 0x01 for VoiceSetPreferredPrivacy() +struct sVoiceSetPreferredPrivacyRequest_Preference +{ + eQMIVoiceDTMFPrivacyLevels mPrivacyLevel; +}; + +// Structure to describe indication TLV 0x01 for Voice PrivacyIndication +struct sVoicePrivacyIndication_DTMFInfo +{ + UINT8 mCallID; + eQMIVoiceDTMFPrivacyLevels mPrivacyLevel; +}; + +// Structure to describe indication TLV 0x01 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_CallInfo +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoiceCallStates mCallState; + eQMIVoiceCallTypes mCallType; + eQMIVoiceCallDirections mDirection; + eQMIVoiceCallModes mMode; + INT8 mMultiparty; + eQMIVoiceALSLineIndicators mALSLineIndicator; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x10 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_RemotePartyNumber +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoicePresentationIndicators mPresentationIndicator; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x11 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_RemotePartyName +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoicePresentationIndicators mPresentationIndicator; + UINT8 mCodingScheme; + UINT8 mCallerNameLength; + + // This array must be the size specified by mCallerNameLength + // UINT8 mCallerName[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x12 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_AlertingType +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoiceAlertingTypes mAlertingType; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x13 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_ServiceOption +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + UINT16 mServiceOption; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x14 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_CallEndReason +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoiceEndReasons mEndReason; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x15 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_AlphaID +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x16 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_ConnectedNumberInfo +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x17 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_DiagnosticInfo +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + UINT8 mDiagnosticInfoLength; + + // This array must be the size specified by mDiagnosticInfoLength + // UINT8 mDiagnosticInfo[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x18 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_CalledPartyNumberInfo +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x19 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_RedirectingNumberInfo +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x1A for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_AlertingPattern +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoiceAlertingPatterns mAlertingPattern; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe indication TLV 0x1B for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_AudioAttributesArray +{ + UINT8 mAttributesCount; + + struct sAttributes + { + UINT8 mCallID; + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; + }; + + // This array must be the size specified by mAttributesCount + // sAttributes mAttributeses[1]; +}; + +// Structure to describe indication TLV 0x1C for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_VideoAttributesArray +{ + UINT8 mAttributesCount; + + struct sAttributes + { + UINT8 mCallID; + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; + }; + + // This array must be the size specified by mAttributesCount + // sAttributes mAttributeses[1]; +}; + +// Structure to describe indication TLV 0x1D for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_VideoshareVariant +{ + UINT8 mVideoshareVariantCount; + + struct sVariant + { + UINT8 mCallID; + eQMIVoiceVideoshareVariants mVideoshareVariant; + }; + + // This array must be the size specified by mVideoshareVariantCount + // sVariant mVariants[1]; +}; + +// Structure to describe indication TLV 0x1E for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_SIPURI +{ + UINT8 mSIPURICount; + + struct sSIP + { + UINT8 mCallID; + UINT8 mSIPURILength; + + // This array must be the size specified by mSIPURILength + // char mSIPURI[1]; + }; + + // This array must be the size specified by mSIPURICount + // sSIP mSIPs[1]; +}; + +// Structure to describe indication TLV 0x1F for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_SRVCC +{ + UINT8 mSRVCCCount; + + struct sSRVCC + { + UINT8 mCallID; + INT8 mSRVCCCall; + }; + + // This array must be the size specified by mSRVCCCount + // sSRVCC mSRVCCs[1]; +}; + +// Structure to describe indication TLV 0x20 for Voice AllCallStatusIndication +struct sVoiceAllCallStatusIndication_ParentCallInfo +{ + UINT8 mCallInstanceCount; + + struct sCall + { + UINT8 mCallID; + UINT8 mParentCallID; + INT8 mIsParentCallCleared; + }; + + // This array must be the size specified by mCallInstanceCount + // sCall mCalls[1]; +}; + +// Structure to describe response TLV 0x10 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_CallInfo +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoiceCallStates mCallState; + eQMIVoiceCallTypes mCallType; + eQMIVoiceCallDirections mDirection; + eQMIVoiceCallModes mMode; + INT8 mMultiparty; + eQMIVoiceALSLineIndicators mALSLineIndicator; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x11 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_RemotePartyNumber +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoicePresentationIndicators mPresentationIndicator; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x12 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_RemotePartyName +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoicePresentationIndicators mPresentationIndicator; + UINT8 mCodingScheme; + UINT8 mCallerNameLength; + + // This array must be the size specified by mCallerNameLength + // UINT8 mCallerName[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x13 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_AlertingType +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoiceAlertingTypes mAlertingType; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x14 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_UUS +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoiceUUSTypes mUUSType; + eQMIVoiceUUSDataCodingSchemes mUUSDCS; + UINT8 mUUSLength; + + // This array must be the size specified by mUUSLength + // UINT8 mUUSData[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x15 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_ServiceOption +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + UINT16 mServiceOption; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x16 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_OTASPStatus +{ + eQMIVoiceOTASPStati mOTASPStatus; +}; + +// Structure to describe response TLV 0x17 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_VoicePrivacy +{ + eQMIVoicePrivacyLevels mVoicePrivacy; +}; + +// Structure to describe response TLV 0x18 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_CallEndReason +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoiceEndReasons mEndReason; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x19 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_AlphaID +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x1A for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_ConnectedNumberInfo +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x1B for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_DiagnosticInfo +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + UINT8 mDiagnosticInfoLength; + + // This array must be the size specified by mDiagnosticInfoLength + // UINT8 mDiagnosticInfo[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x1C for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_CalledPartyNumberInfo +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x1D for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_RedirectingNumberInfo +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x1E for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_AlertingPattern +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + UINT8 mCallID; + eQMIVoiceAlertingPatterns mAlertingPattern; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x1F for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_AudioAttributesArray +{ + UINT8 mAttributesCount; + + struct sAttributes + { + UINT8 mCallID; + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; + }; + + // This array must be the size specified by mAttributesCount + // sAttributes mAttributeses[1]; +}; + +// Structure to describe response TLV 0x20 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_VideoAttributesArray +{ + UINT8 mAttributesCount; + + struct sAttributes + { + UINT8 mCallID; + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; + }; + + // This array must be the size specified by mAttributesCount + // sAttributes mAttributeses[1]; +}; + +// Structure to describe response TLV 0x21 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_VideoshareVariant +{ + UINT8 mVideoshareVariantCount; + + struct sVariant + { + UINT8 mCallID; + eQMIVoiceVideoshareVariants mVideoshareVariant; + }; + + // This array must be the size specified by mVideoshareVariantCount + // sVariant mVariants[1]; +}; + +// Structure to describe response TLV 0x22 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_SIPURI +{ + UINT8 mSIPURICount; + + struct sSIP + { + UINT8 mCallID; + UINT8 mSIPURILength; + + // This array must be the size specified by mSIPURILength + // char mSIPURI[1]; + }; + + // This array must be the size specified by mSIPURICount + // sSIP mSIPs[1]; +}; + +// Structure to describe response TLV 0x23 for VoiceGetAllCallInfo() +struct sVoiceGetAllCallInfoResponse_SRVCC +{ + UINT8 mSRVCCCount; + + struct sSRVCC + { + UINT8 mCallID; + INT8 mSRVCCCall; + }; + + // This array must be the size specified by mSRVCCCount + // sSRVCC mSRVCCs[1]; +}; + +// Structure to describe request TLV 0x01 for VoiceManageCalls() +struct sVoiceManageCallsRequest_Info +{ + eQMIVoiceSupplementaryServiceCallTypes mSupplementaryServiceType; +}; + +// Structure to describe request TLV 0x10 for VoiceManageCalls() +struct sVoiceManageCallsRequest_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x10 for VoiceManageCalls() +struct sVoiceManageCallsResponse_FailureCause +{ + eQMIVoiceEndReasons mFailureCause; +}; + +// Structure to describe indication TLV 0x01 for Voice SupplementaryServiceIndication +struct sVoiceSupplementaryServiceIndication_Info +{ + UINT8 mCallID; + eQMIVoiceSupplementaryNotificationTypes mNotificationType; +}; + +// Structure to describe indication TLV 0x10 for Voice SupplementaryServiceIndication +struct sVoiceSupplementaryServiceIndication_CUG +{ + UINT16 mCUGIndex; +}; + +// Structure to describe indication TLV 0x11 for Voice SupplementaryServiceIndication +struct sVoiceSupplementaryServiceIndication_ECT +{ + eQMIVoiceECTCallStates mECTCallState; + eQMIVoicePresentationIndicators mPresentationIndicator; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; +}; + +// Structure to describe indication TLV 0x12 for Voice SupplementaryServiceIndication +struct sVoiceSupplementaryServiceIndication_SupplementaryServiceCode +{ + eQMIVoiceSupplementaryServiceCodes mSupplementaryServiceCode; +}; + +// Structure to describe request TLV 0x01 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceRequest_Info +{ + eQMIVoiceSupplementaryServiceTypes mService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe request TLV 0x10 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceRequest_ServiceClass +{ + bool mSupplementaryServiceClassVoice:1; + bool mSupplementaryServiceClassData:1; + bool mSupplementaryServiceClassFax:1; + bool mSupplementaryServiceClassSMS:1; + bool mSupplementaryServiceClassDataCircuitSync:1; + bool mSupplementaryServiceClassDataCircuitAsync:1; + bool mSupplementaryServiceClassPacketAccess:1; + bool mSupplementaryServiceClassPadAccess:1; +}; + +// Structure to describe request TLV 0x11 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceRequest_Password +{ + char mCallBarringPassword[4]; +}; + +// Structure to describe request TLV 0x12 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceRequest_Number +{ + // String is variable length, but must be size of the container + // char mCallForwardingNumber[1]; +}; + +// Structure to describe request TLV 0x13 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceRequest_Timer +{ + UINT8 mNoReplyTimerSeconds; +}; + +// Structure to describe request TLV 0x14 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceRequest_CallForwarding +{ + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; +}; + +// Structure to describe request TLV 0x15 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceRequest_ExtendedServiceClass +{ + eQMIVoiceExtendedServiceClass mExtendedServiceClass; +}; + +// Structure to describe response TLV 0x10 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceResponse_FailureCause +{ + eQMIVoiceEndReasons mFailureCause; +}; + +// Structure to describe response TLV 0x11 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x12 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x13 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x14 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe response TLV 0x15 for VoiceSetSupplementaryService() +struct sVoiceSetSupplementaryServiceResponse_ServiceStatus +{ + INT8 mActive; + INT8 mProvisioned; +}; + +// Structure to describe request TLV 0x10 for VoiceGetCallWaiting() +struct sVoiceGetCallWaitingRequest_ServiceClass +{ + bool mSupplementaryServiceClassVoice:1; + bool mSupplementaryServiceClassData:1; + bool mSupplementaryServiceClassFax:1; + bool mSupplementaryServiceClassSMS:1; + bool mSupplementaryServiceClassDataCircuitSync:1; + bool mSupplementaryServiceClassDataCircuitAsync:1; + bool mSupplementaryServiceClassPacketAccess:1; + bool mSupplementaryServiceClassPadAccess:1; +}; + +// Structure to describe request TLV 0x11 for VoiceGetCallWaiting() +struct sVoiceGetCallWaitingRequest_ExtendedServiceClass +{ + eQMIVoiceExtendedServiceClass mExtendedServiceClass; +}; + +// Structure to describe response TLV 0x10 for VoiceGetCallWaiting() +struct sVoiceGetCallWaitingResponse_ServiceClass +{ + bool mSupplementaryServiceClassVoice:1; + bool mSupplementaryServiceClassData:1; + bool mSupplementaryServiceClassFax:1; + bool mSupplementaryServiceClassSMS:1; + bool mSupplementaryServiceClassDataCircuitSync:1; + bool mSupplementaryServiceClassDataCircuitAsync:1; + bool mSupplementaryServiceClassPacketAccess:1; + bool mSupplementaryServiceClassPadAccess:1; +}; + +// Structure to describe response TLV 0x11 for VoiceGetCallWaiting() +struct sVoiceGetCallWaitingResponse_FailureCause +{ + eQMIVoiceEndReasons mFailureCause; +}; + +// Structure to describe response TLV 0x12 for VoiceGetCallWaiting() +struct sVoiceGetCallWaitingResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x13 for VoiceGetCallWaitinge() +struct sVoiceGetCallWaitingeResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x14 for VoiceGetCallWaiting() +struct sVoiceGetCallWaitingResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x15 for VoiceGetCallWaiting() +struct sVoiceGetCallWaitingResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe response TLV 0x16 for VoiceGetCallWaiting() +struct sVoiceGetCallWaitingResponse_ExtendedServiceClass +{ + eQMIVoiceExtendedServiceClass mExtendedServiceClass; +}; + +// Structure to describe request TLV 0x01 for VoiceGetCallBarring() +struct sVoiceGetCallBarringRequest_Reason +{ + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe request TLV 0x10 for VoiceGetCallBarring() +struct sVoiceGetCallBarringRequest_ServiceClass +{ + bool mSupplementaryServiceClassVoice:1; + bool mSupplementaryServiceClassData:1; + bool mSupplementaryServiceClassFax:1; + bool mSupplementaryServiceClassSMS:1; + bool mSupplementaryServiceClassDataCircuitSync:1; + bool mSupplementaryServiceClassDataCircuitAsync:1; + bool mSupplementaryServiceClassPacketAccess:1; + bool mSupplementaryServiceClassPadAccess:1; +}; + +// Structure to describe request TLV 0x11 for VoiceGetCallBarring() +struct sVoiceGetCallBarringRequest_ExtendedServiceClass +{ + eQMIVoiceExtendedServiceClass mExtendedServiceClass; +}; + +// Structure to describe response TLV 0x10 for VoiceGetCallBarring() +struct sVoiceGetCallBarringResponse_ServiceClass +{ + bool mSupplementaryServiceClassVoice:1; + bool mSupplementaryServiceClassData:1; + bool mSupplementaryServiceClassFax:1; + bool mSupplementaryServiceClassSMS:1; + bool mSupplementaryServiceClassDataCircuitSync:1; + bool mSupplementaryServiceClassDataCircuitAsync:1; + bool mSupplementaryServiceClassPacketAccess:1; + bool mSupplementaryServiceClassPadAccess:1; +}; + +// Structure to describe response TLV 0x11 for VoiceGetCallBarring() +struct sVoiceGetCallBarringResponse_FailureCause +{ + eQMIVoiceEndReasons mFailureCause; +}; + +// Structure to describe response TLV 0x12 for VoiceGetCallBarring() +struct sVoiceGetCallBarringResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x13 for VoiceGetCallBarring() +struct sVoiceGetCallBarringResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x14 for VoiceGetCallBarring() +struct sVoiceGetCallBarringResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x15 for VoiceGetCallBarring() +struct sVoiceGetCallBarringResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe response TLV 0x16 for VoiceGetCallBarring() +struct sVoiceGetCallBarringResponse_ExtendedServiceClass +{ + eQMIVoiceExtendedServiceClass mExtendedServiceClass; +}; + +// Structure to describe response TLV 0x10 for VoiceGetCLIP() +struct sVoiceGetCLIPResponse_Status +{ + INT8 mCLIPActive; + INT8 mCLIPProvisioned; +}; + +// Structure to describe response TLV 0x11 for VoiceGetCLIP() +struct sVoiceGetCLIPResponse_FailureCause +{ + eQMIVoiceEndReasons mFailureCause; +}; + +// Structure to describe response TLV 0x12 for VoiceGetCLIP() +struct sVoiceGetCLIPResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x13 for VoiceGetCLIP() +struct sVoiceGetCLIPResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x14 for VoiceGetCLIP() +struct sVoiceGetCLIPResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x15 for VoiceGetCLIP() +struct sVoiceGetCLIPResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe response TLV 0x10 for VoiceGetCLIR() +struct sVoiceGetCLIRResponse_Status +{ + INT8 mCLIRActive; + eQMIVoiceProvisioningStates mCLIRProvisionStatus; +}; + +// Structure to describe response TLV 0x11 for VoiceGetCLIR() +struct sVoiceGetCLIRResponse_FailureCause +{ + eQMIVoiceEndReasons mFailureCause; +}; + +// Structure to describe response TLV 0x12 for VoiceGetCLIR() +struct sVoiceGetCLIRResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x13 for VoiceGetCLIR() +struct sVoiceGetCLIRResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x14 for VoiceGetCLIR() +struct sVoiceGetCLIRResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x15 for VoiceGetCLIR() +struct sVoiceGetCLIRResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe request TLV 0x01 for VoiceGetCallForwarding() +struct sVoiceGetCallForwardingRequest_Reason +{ + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe request TLV 0x10 for VoiceGetCallForwarding() +struct sVoiceGetCallForwardingRequest_ServiceClass +{ + bool mSupplementaryServiceClassVoice:1; + bool mSupplementaryServiceClassData:1; + bool mSupplementaryServiceClassFax:1; + bool mSupplementaryServiceClassSMS:1; + bool mSupplementaryServiceClassDataCircuitSync:1; + bool mSupplementaryServiceClassDataCircuitAsync:1; + bool mSupplementaryServiceClassPacketAccess:1; + bool mSupplementaryServiceClassPadAccess:1; +}; + +// Structure to describe request TLV 0x11 for VoiceGetCallForwarding() +struct sVoiceGetCallForwardingRequest_ExtendedServiceClass +{ + eQMIVoiceExtendedServiceClass mExtendedServiceClass; +}; + +// Structure to describe response TLV 0x10 for VoiceGetCallForwarding() +struct sVoiceGetCallForwardingResponse_Info +{ + UINT8 mInstanceCount; + + struct sInstance1 + { + INT8 mServiceActive; + bool mSupplementaryServiceClassVoice:1; + bool mSupplementaryServiceClassData:1; + bool mSupplementaryServiceClassFax:1; + bool mSupplementaryServiceClassSMS:1; + bool mSupplementaryServiceClassDataCircuitSync:1; + bool mSupplementaryServiceClassDataCircuitAsync:1; + bool mSupplementaryServiceClassPacketAccess:1; + bool mSupplementaryServiceClassPadAccess:1; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + struct sInstance2 + { + UINT8 mNoReplyTimerSeconds; + }; + + struct sInstance + { + sInstance1 mInstance1; + sInstance2 mInstance2; + }; + + // This array must be the size specified by mInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x11 for VoiceGetCallForwarding() +struct sVoiceGetCallForwardingResponse_FailureCause +{ + eQMIVoiceEndReasons mFailureCause; +}; + +// Structure to describe response TLV 0x12 for VoiceGetCallForwarding() +struct sVoiceGetCallForwardingResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x13 for VoiceGetCallForwarding() +struct sVoiceGetCallForwardingResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x14 for VoiceGetCallForwarding() +struct sVoiceGetCallForwardingResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x15 for VoiceGetCallForwarding() +struct sVoiceGetCallForwardingResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe response TLV 0x16 for VoiceGetCallForwarding() +struct sVoiceGetCallForwardingResponse_ExtendedInfo +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + INT8 mServiceActive; + bool mSupplementaryServiceClassVoice:1; + bool mSupplementaryServiceClassData:1; + bool mSupplementaryServiceClassFax:1; + bool mSupplementaryServiceClassSMS:1; + bool mSupplementaryServiceClassDataCircuitSync:1; + bool mSupplementaryServiceClassDataCircuitAsync:1; + bool mSupplementaryServiceClassPacketAccess:1; + bool mSupplementaryServiceClassPadAccess:1; + UINT8 mNoReplyTimerSeconds; + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe response TLV 0x17 for VoiceGetCallForwarding() +struct sVoiceGetCallForwardingResponse_ExtendedInfo2 +{ + UINT8 mCallInstanceCount; + + struct sInstance + { + INT8 mServiceActive; + eQMIVoiceExtendedServiceClass mExtendedServiceClass; + UINT8 mNoReplyTimerSeconds; + UINT8 mPresentationIndicator; + eQMIVoiceScreeningIndicators mScreeningIndicator; + eQMIVoiceNumberTypes mNumberType; + eQMIVoiceNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + // This array must be the size specified by mCallInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe request TLV 0x01 for VoiceSetCallBarringPassword() +struct sVoiceSetCallBarringPasswordRequest_Info +{ + eQMIVoiceSupplementaryServiceReasons mReason; + char mOldCallBarringPassword[4]; + char mNewCallBarringPassword[4]; + char mNewCallBarringPasswordRepeat[4]; +}; + +// Structure to describe response TLV 0x10 for VoiceSetCallBarring() +struct sVoiceSetCallBarringResponse_FailureCause +{ + eQMIVoiceEndReasons mFailureCause; +}; + +// Structure to describe response TLV 0x11 for VoiceSetCallBarring() +struct sVoiceSetCallBarringResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x12 for VoiceSetCallBarring() +struct sVoiceSetCallBarringResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x13 for VoiceSetCallBarring() +struct sVoiceSetCallBarringResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x14 for VoiceSetCallBarring() +struct sVoiceSetCallBarringResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe request TLV 0x01 for VoiceInitiateUSSD() +struct sVoiceInitiateUSSDRequest_Info +{ + eQMIVoiceUSSDDataCodingSchemes mUSSDCS; + UINT8 mUSSLength; + + // This array must be the size specified by mUSSLength + // UINT8 mUSSData[1]; +}; + +// Structure to describe response TLV 0x10 for VoiceInitiateUSSD() +struct sVoiceInitiateUSSDResponse_FailCause +{ + UINT16 mFailureCause; +}; + +// Structure to describe response TLV 0x11 for VoiceInitiateUSSD() +struct sVoiceInitiateUSSDResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x12 for VoiceInitiateUSSD() +struct sVoiceInitiateUSSDResponse_Data +{ + eQMIVoiceUSSDDataCodingSchemes mUSSDCS; + UINT8 mUSSLength; + + // This array must be the size specified by mUSSLength + // UINT8 mUSSData[1]; +}; + +// Structure to describe response TLV 0x13 for VoiceInitiateUSSD() +struct sVoiceInitiateUSSDResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x14 for VoiceInitiateUSSD() +struct sVoiceInitiateUSSDResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x15 for VoiceInitiateUSSD() +struct sVoiceInitiateUSSDResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe response TLV 0x16 for VoiceInitiateUSSD() +struct sVoiceInitiateUSSDResponse_EncodedData +{ + UINT8 mServiceInformationLength; + + // This array must be the size specified by mServiceInformationLength + // wchar_t mServiceInformation[1]; +}; + +// Structure to describe request TLV 0x01 for VoiceAnswerUSSD() +struct sVoiceAnswerUSSDRequest_Info +{ + eQMIVoiceUSSDDataCodingSchemes mUSSDCS; + UINT8 mUSSLength; + + // This array must be the size specified by mUSSLength + // UINT8 mUSSData[1]; +}; + +// Structure to describe indication TLV 0x01 for Voice USSDIndication +struct sVoiceUSSDIndication_Type +{ + eQMIVoiceUSSDNotifcationTypes mNotificationType; +}; + +// Structure to describe indication TLV 0x10 for Voice USSDIndication +struct sVoiceUSSDIndication_Data +{ + eQMIVoiceUSSDDataCodingSchemes mUSSDCS; + UINT8 mUSSLength; + + // This array must be the size specified by mUSSLength + // UINT8 mUSSData[1]; +}; + +// Structure to describe indication TLV 0x11 for Voice USSDIndication +struct sVoiceUSSDIndication_EncodedData +{ + UINT8 mServiceInformationLength; + + // This array must be the size specified by mServiceInformationLength + // wchar_t mServiceInformation[1]; +}; + +// Structure to describe indication TLV 0x01 for Voice USSIndication +struct sVoiceUSSIndication_Info +{ + UINT8 mCallID; + eQMIVoiceUUSTypes mUUSType; + eQMIVoiceUUSDataCodingSchemes mUUSDCS; + UINT8 mUUSLength; + + // This array must be the size specified by mUUSLength + // UINT8 mUUSData[1]; +}; + +// Structure to describe request TLV 0x10 for VoiceSetConfig() +struct sVoiceSetConfigRequest_AutoAnswer +{ + INT8 mAutoAnswer; +}; + +// Structure to describe request TLV 0x11 for VoiceSetConfig() +struct sVoiceSetConfigRequest_AirTimer +{ + UINT8 mNAMID; + UINT32 mAirTimerMinutes; +}; + +// Structure to describe request TLV 0x12 for VoiceSetConfig() +struct sVoiceSetConfigRequest_RoamTimer +{ + UINT8 mNAMID; + UINT32 mRoamTimerMinutes; +}; + +// Structure to describe request TLV 0x13 for VoiceSetConfig() +struct sVoiceSetConfigRequest_TTYMode +{ + eQMIVoiceTTYModes mTTYMode; +}; + +// Structure to describe request TLV 0x14 for VoiceSetConfig() +struct sVoiceSetConfigRequest_PreferredVoiceSO +{ + UINT8 mNAMID; + INT8 mEVRCCapability; + eQMIVoiceServiceOptions mHomePageVoiceServiceOption; + eQMIVoiceServiceOptions mHomeOriginationVoiceServiceOption; + eQMIVoiceServiceOptions mRoamOriginationVoiceServiceOption; +}; + +// Structure to describe request TLV 0x15 for VoiceSetConfig() +struct sVoiceSetConfigRequest_PreferredVoiceDomain +{ + eQMIVoiceDomains mPreferredDomain; +}; + +// Structure to describe response TLV 0x10 for VoiceSetConfig() +struct sVoiceSetConfigResponse_AutoAnswer +{ + INT8 mWriteFailed; +}; + +// Structure to describe response TLV 0x11 for VoiceSetConfig() +struct sVoiceSetConfigResponse_AirTimer +{ + INT8 mWriteFailed; +}; + +// Structure to describe response TLV 0x12 for VoiceSetConfig() +struct sVoiceSetConfigResponse_RoamTimer +{ + INT8 mWriteFailed; +}; + +// Structure to describe response TLV 0x13 for VoiceSetConfig() +struct sVoiceSetConfigResponse_TTYMode +{ + INT8 mWriteFailed; +}; + +// Structure to describe response TLV 0x14 for VoiceSetConfig() +struct sVoiceSetConfigResponse_PreferredVoiceSO +{ + INT8 mWriteFailed; +}; + +// Structure to describe response TLV 0x15 for VoiceSetConfig() +struct sVoiceSetConfigResponse_PreferredVoiceDomain +{ + INT8 mWriteFailed; +}; + +// Structure to describe request TLV 0x10 for VoiceGetConfig() +struct sVoiceGetConfigRequest_AutoAnswer +{ + INT8 mInclude; +}; + +// Structure to describe request TLV 0x11 for VoiceGetConfig() +struct sVoiceGetConfigRequest_AirTimer +{ + INT8 mInclude; +}; + +// Structure to describe request TLV 0x12 for VoiceGetConfig() +struct sVoiceGetConfigRequest_RoamTimer +{ + INT8 mInclude; +}; + +// Structure to describe request TLV 0x13 for VoiceGetConfig() +struct sVoiceGetConfigRequest_TTYMode +{ + INT8 mInclude; +}; + +// Structure to describe request TLV 0x14 for VoiceGetConfig() +struct sVoiceGetConfigRequest_PreferredVoiceSO +{ + INT8 mInclude; +}; + +// Structure to describe request TLV 0x15 for VoiceGetConfig() +struct sVoiceGetConfigRequest_AMRStatus +{ + INT8 mInclude; +}; + +// Structure to describe request TLV 0x16 for VoiceGetConfig() +struct sVoiceGetConfigRequest_PreferredVoicePrivacy +{ + INT8 mInclude; +}; + +// Structure to describe request TLV 0x17 for VoiceGetConfig() +struct sVoiceGetConfigRequest_NAM +{ + UINT8 mNAMID; +}; + +// Structure to describe request TLV 0x18 for VoiceGetConfig() +struct sVoiceGetConfigRequest_VoiceDomain +{ + INT8 mInclude; +}; + +// Structure to describe response TLV 0x10 for VoiceGetConfig() +struct sVoiceGetConfigResponse_AutoAnswer +{ + INT8 mAutoAnswer; +}; + +// Structure to describe response TLV 0x11 for VoiceGetConfig() +struct sVoiceGetConfigResponse_AirTimer +{ + UINT8 mNAMID; + UINT32 mAirTimerMinutes; +}; + +// Structure to describe response TLV 0x12 for VoiceGetConfig() +struct sVoiceGetConfigResponse_RoamTimer +{ + UINT8 mNAMID; + UINT32 mRoamTimerMinutes; +}; + +// Structure to describe response TLV 0x13 for VoiceGetConfig() +struct sVoiceGetConfigResponse_TTYMode +{ + eQMIVoiceTTYModes mTTYMode; +}; + +// Structure to describe response TLV 0x14 for VoiceGetConfig() +struct sVoiceGetConfigResponse_PreferredVoiceSO +{ + UINT8 mNAMID; + INT8 mEVRCCapability; + eQMIVoiceServiceOptions mHomePageVoiceServiceOption; + eQMIVoiceServiceOptions mHomeOriginationVoiceServiceOption; + eQMIVoiceServiceOptions mRoamOriginationVoiceServiceOption; +}; + +// Structure to describe response TLV 0x15 for VoiceGetConfig() +struct sVoiceGetConfigResponse_AMRConfig +{ + INT8 mGSMAMR; + bool mWCDMAAMRWB:1; + bool mGSMHRAMR:1; + bool mGSMAMRWB:1; + bool mGSMAMRNB:1; + + // Padding out 4 bits + UINT8 mReserved1:4; +}; + +// Structure to describe response TLV 0x16 for VoiceGetConfig() +struct sVoiceGetConfigResponse_Privacy +{ + eQMIVoicePrivacyLevels mVoicePrivacy; +}; + +// Structure to describe response TLV 0x17 for VoiceGetConfig() +struct sVoiceGetConfigResponse_PreferredVoiceDomain +{ + eQMIVoiceDomains mPreferredDomain; +}; + +// Structure to describe request TLV 0x01 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_Info +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryServiceRequest; + INT8 mModifiedByCallControl; +}; + +// Structure to describe request TLV 0x10 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_Class +{ + bool mSupplementaryServiceClassVoice:1; + bool mSupplementaryServiceClassData:1; + bool mSupplementaryServiceClassFax:1; + bool mSupplementaryServiceClassSMS:1; + bool mSupplementaryServiceClassDataCircuitSync:1; + bool mSupplementaryServiceClassDataCircuitAsync:1; + bool mSupplementaryServiceClassPacketAccess:1; + bool mSupplementaryServiceClassPadAccess:1; +}; + +// Structure to describe request TLV 0x11 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_Reason +{ + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe request TLV 0x12 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_Number +{ + // String is variable length, but must be size of the container + // char mCallForwardingNumber[1]; +}; + +// Structure to describe request TLV 0x13 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_Timer +{ + UINT8 mNoReplyTimerSeconds; +}; + +// Structure to describe request TLV 0x14 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_USSData +{ + eQMIVoiceUSSDDataCodingSchemes mUSSDCS; + UINT8 mUSSLength; + + // This array must be the size specified by mUSSLength + // UINT8 mUSSData[1]; +}; + +// Structure to describe request TLV 0x15 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe request TLV 0x16 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe request TLV 0x17 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_Password +{ + char mCallBarringPassword[4]; +}; + +// Structure to describe request TLV 0x18 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_NewPassword +{ + char mNewCallBarringPassword[4]; + char mNewCallBarringPasswordRepeat[4]; +}; + +// Structure to describe request TLV 0x19 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_DataSource +{ + INT8 mResponseData; +}; + +// Structure to describe request TLV 0x1A for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_FailCause +{ + UINT16 mFailureCause; +}; + +// Structure to describe request TLV 0x1B for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_CallForwarding +{ + UINT8 mInstanceCount; + + struct sInstance1 + { + INT8 mServiceActive; + bool mSupplementaryServiceClassVoice:1; + bool mSupplementaryServiceClassData:1; + bool mSupplementaryServiceClassFax:1; + bool mSupplementaryServiceClassSMS:1; + bool mSupplementaryServiceClassDataCircuitSync:1; + bool mSupplementaryServiceClassDataCircuitAsync:1; + bool mSupplementaryServiceClassPacketAccess:1; + bool mSupplementaryServiceClassPadAccess:1; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + struct sInstance2 + { + UINT8 mNoReplyTimerSeconds; + }; + + struct sInstance + { + sInstance1 mInstance1; + sInstance2 mInstance2; + }; + + // This array must be the size specified by mInstanceCount + // sInstance mInstances[1]; +}; + +// Structure to describe request TLV 0x1C for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_CLIR +{ + INT8 mCLIRActive; + eQMIVoiceProvisioningStates mCLIRProvisionStatus; +}; + +// Structure to describe request TLV 0x1D for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_CLIP +{ + INT8 mCLIPActive; + INT8 mCLIPProvisioned; +}; + +// Structure to describe request TLV 0x1E for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_COLP +{ + INT8 mActive; + INT8 mProvisioned; +}; + +// Structure to describe request TLV 0x1F for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_COLR +{ + INT8 mActive; + INT8 mProvisioned; +}; + +// Structure to describe request TLV 0x20 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_CNAP +{ + INT8 mActive; + INT8 mProvisioned; +}; + +// Structure to describe request TLV 0x21 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_EncodedData +{ + UINT8 mServiceInformationLength; + + // This array must be the size specified by mServiceInformationLength + // wchar_t mServiceInformation[1]; +}; + +// Structure to describe request TLV 0x22 for VoiceSupplementaryService() +struct sVoiceSupplementaryServiceRequestIndication_ExtendedServiceClass +{ + eQMIVoiceExtendedServiceClass mExtendedServiceClass; +}; + +// Structure to describe request TLV 0x01 for VoiceAsyncInitiateUSSD() +struct sVoiceAsyncInitiateUSSDRequest_Info +{ + eQMIVoiceUSSDDataCodingSchemes mUSSDCS; + UINT8 mUSSLength; + + // This array must be the size specified by mUSSLength + // UINT8 mUSSData[1]; +}; + +// Structure to describe indication TLV 0x10 for Voice USSDAsyncIndication +struct sVoiceUSSDAsyncIndication_Error +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x11 for Voice USSDAsyncIndication +struct sVoiceUSSDAsyncIndication_FailCause +{ + UINT16 mFailureCause; +}; + +// Structure to describe indication TLV 0x12 for Voice USSDAsyncIndication +struct sVoiceUSSDAsyncIndication_Info +{ + eQMIVoiceUSSDDataCodingSchemes mUSSDCS; + UINT8 mUSSLength; + + // This array must be the size specified by mUSSLength + // UINT8 mUSSData[1]; +}; + +// Structure to describe indication TLV 0x13 for Voice USSDAsyncIndication +struct sVoiceUSSDAsyncIndication_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe indication TLV 0x14 for Voice USSDAsyncIndication +struct sVoiceUSSDAsyncIndication_EncodedData +{ + UINT8 mServiceInformationLength; + + // This array must be the size specified by mServiceInformationLength + // wchar_t mServiceInformation[1]; +}; + +// Structure to describe request TLV 0x01 for VoiceBindSubscription() +struct sVoiceBindSubscriptionRequest_Type +{ + eQMIVoiceSubscriptionTypes mSubscriptionType; +}; + +// Structure to describe request TLV 0x01 for VoiceALSSetLineSwitching() +struct sVoiceALSSetLineSwitchingRequest_Switching +{ + INT8 mLineSwitchingAllowed; +}; + +// Structure to describe request TLV 0x01 for VoiceALSSelectLine() +struct sVoiceALSSelectLineRequest_Line +{ + eQMIVoiceALSLines mLineValue; +}; + +// Structure to describe request TLV 0x01 for VoiceAOCSetACMMaximum() +struct sVoiceAOCSetACMMaximumRequest_ACMMax +{ + UINT32 mACMMaximum; +}; + +// Structure to describe request TLV 0x01 for VoiceAOCGetCallMeterInfo() +struct sVoiceAOCGetCallMeterInfoRequest_Mask +{ + bool mACM:1; + bool mACMMaximum:1; + bool mCCM:1; + + // Padding out 13 bits + UINT8 mReserved1:5; + UINT8 mReserved2; +}; + +// Structure to describe response TLV 0x10 for VoiceAOCGetCallMeterInfo() +struct sVoiceAOCGetCallMeterInfoResponse_ACM +{ + UINT32 mACM; +}; + +// Structure to describe response TLV 0x11 for VoiceAOCGetCallMeterInfo() +struct sVoiceAOCGetCallMeterInfoResponse_ACMMax +{ + UINT32 mACMMaximum; +}; + +// Structure to describe response TLV 0x12 for VoiceAOCGetCallMeterInfo() +struct sVoiceAOCGetCallMeterInfoResponse_CCM +{ + UINT32 mCCM; +}; + +// Structure to describe response TLV 0x10 for VoiceGetCOLP() +struct sVoiceGetCOLPResponse_COLP +{ + INT8 mActive; + INT8 mProvisioned; +}; + +// Structure to describe response TLV 0x11 for VoiceGetCOLP() +struct sVoiceGetCOLPResponse_FailCause +{ + UINT16 mFailureCause; +}; + +// Structure to describe response TLV 0x12 for VoiceGetCOLP() +struct sVoiceGetCOLPResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x13 for VoiceGetCOLP() +struct sVoiceGetCOLPResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x14 for VoiceGetCOLP() +struct sVoiceGetCOLPResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x15 for VoiceGetCOLP() +struct sVoiceGetCOLPResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe response TLV 0x10 for VoiceGetCOLR() +struct sVoiceGetCOLRResponse_COLR +{ + INT8 mActive; + INT8 mProvisioned; +}; + +// Structure to describe response TLV 0x11 for VoiceGetCOLR() +struct sVoiceGetCOLRResponse_FailCause +{ + UINT16 mFailureCause; +}; + +// Structure to describe response TLV 0x12 for VoiceGetCOLR() +struct sVoiceGetCOLRResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x13 for VoiceGetCOLR() +struct sVoiceGetCOLRResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x14 for VoiceGetCOLR() +struct sVoiceGetCOLRResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x15 for VoiceGetCOLR() +struct sVoiceGetCOLRResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe response TLV 0x10 for VoiceGetCNAP() +struct sVoiceGetCNAPResponse_CNAP +{ + INT8 mActive; + INT8 mProvisioned; +}; + +// Structure to describe response TLV 0x11 for VoiceGetCNAP() +struct sVoiceGetCNAPResponse_FailCause +{ + UINT16 mFailureCause; +}; + +// Structure to describe response TLV 0x12 for VoiceGetCNAP() +struct sVoiceGetCNAPResponse_AlphaID +{ + eQMIVoiceUSSDAlphaCodingSchemes mAlphaDCS; + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // UINT8 mAlphaData[1]; +}; + +// Structure to describe response TLV 0x13 for VoiceGetCNAP() +struct sVoiceGetCNAPResponse_CallControl +{ + eQMIVoiceCallControlResultTypes mCallControlResult; +}; + +// Structure to describe response TLV 0x14 for VoiceGetCNAP() +struct sVoiceGetCNAPResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x15 for VoiceGetCNAP() +struct sVoiceGetCNAPResponse_SupplementaryService +{ + eQMIVoiceSupplementaryServiceRequests mSupplementaryService; + eQMIVoiceSupplementaryServiceReasons mReason; +}; + +// Structure to describe request TLV 0x01 for VoiceManageIPCalls() +struct sVoiceManageIPCallsRequest_Info +{ + eQMIVoiceVoIPSUPSCallTypes mSupplementaryServiceType; +}; + +// Structure to describe request TLV 0x10 for VoiceManageIPCalls() +struct sVoiceManageIPCallsRequest_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe request TLV 0x11 for VoiceManageIPCalls() +struct sVoiceManageIPCallsRequest_CallType +{ + eQMIVoiceCallTypes mCallType; +}; + +// Structure to describe request TLV 0x12 for VoiceManageIPCalls() +struct sVoiceManageIPCallsRequest_AudioAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x13 for VoiceManageIPCalls() +struct sVoiceManageIPCallsRequest_VideoAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe request TLV 0x14 for VoiceManageIPCalls() +struct sVoiceManageIPCallsRequest_SIPURI +{ + // String is variable length, but must be size of the container + // char mSIPURIOverflow[1]; +}; + +// Structure to describe response TLV 0x10 for VoiceManageIPCalls() +struct sVoiceManageIPCallsResponse_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe response TLV 0x11 for VoiceManageIPCalls() +struct sVoiceManageIPCallsResponse_FailureCause +{ + eQMIVoiceEndReasons mFailureCause; +}; + +// Structure to describe response TLV 0x12 for VoiceManageIPCalls() +struct sVoiceManageIPCallsResponse_Participants +{ + UINT8 mNumberOfParticipants; +}; + +// Structure to describe response TLV 0x10 for VoiceALSGetLineSwitchingStatus() +struct sVoiceALSGetLineSwitchingStatusResponse_SwitchValue +{ + eQMIVoiceSwitchValue mSwitchValue; +}; + +// Structure to describe response TLV 0x10 for VoiceALSGetSelectedLine() +struct sVoiceALSGetSelectedLineResponse_Line +{ + eQMIVoiceALSLines mLineValue; +}; + +// Structure to describe indication TLV 0x01 for Voice CallModifiedIndication +struct sVoiceCallModifiedIndication_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe indication TLV 0x10 for Voice CallModifiedIndication +struct sVoiceCallModifiedIndication_CallType +{ + eQMIVoiceCallTypes mCallType; +}; + +// Structure to describe indication TLV 0x11 for Voice CallModifiedIndication +struct sVoiceCallModifiedIndication_AudioAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe indication TLV 0x12 for Voice CallModifiedIndication +struct sVoiceCallModifiedIndication_VideoAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe indication TLV 0x13 for Voice CallModifiedIndication +struct sVoiceCallModifiedIndication_FailCause +{ + UINT16 mFailureCause; +}; + +// Structure to describe indication TLV 0x01 for Voice CallModifyAcceptIndication +struct sVoiceCallModifyAcceptIndication_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe indication TLV 0x10 for Voice CallModifyAcceptIndication +struct sVoiceCallModifyAcceptIndication_CallType +{ + eQMIVoiceCallTypes mCallType; +}; + +// Structure to describe indication TLV 0x11 for Voice CallModifyAcceptIndication +struct sVoiceCallModifyAcceptIndication_AudioAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe indication TLV 0x12 for Voice CallModifyAcceptIndication +struct sVoiceCallModifyAcceptIndication_VideoAttribute +{ + bool mVoiceCallTX:1; + bool mVoiceCallRX:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; +}; + +// Structure to describe indication TLV 0x10 for Voice SpeechCodecInformationIndication +struct sVoiceSpeechCodecInformationIndication_NetworkMode +{ + eQMIVoiceNetworkMode mNetworkMode; +}; + +// Structure to describe indication TLV 0x11 for Voice SpeechCodecInformationIndication +struct sVoiceSpeechCodecInformationIndication_Type +{ + eQMIVoiceSpeechCodecType mType; +}; + +// Structure to describe indication TLV 0x12 for Voice SpeechCodecInformationIndication +struct sVoiceSpeechCodecInformationIndication_SamplingRate +{ + UINT32 mSamplingRateHz; +}; + +// Structure to describe indication TLV 0x13 for Voice SpeechCodecInformationIndication +struct sVoiceSpeechCodecInformationIndication_CallID +{ + UINT8 mCallID; +}; + +// Structure to describe indication TLV 0x01 for Voice HandoverIndication +struct sVoiceHandoverIndication_State +{ + eQMIVoiceHandoverStates mHandoverState; +}; + +// Structure to describe indication TLV 0x01 for Voice ConferenceInfoIndication +struct sVoiceConferenceInfoIndication_ConferenceXML +{ + UINT16 mConferenceXMLLength; + + // This array must be the size specified by mConferenceXMLLength + // char mConferenceXML[1]; +}; + +// Structure to describe indication TLV 0x02 for Voice ConferenceInfoIndication +struct sVoiceConferenceInfoIndication_SequenceNumber +{ + UINT32 mSequenceNumber; +}; + +// Structure to describe indication TLV 0x10 for Voice ConferenceInfoIndication +struct sVoiceConferenceInfoIndication_TotalLength +{ + UINT32 mTotalLength; +}; + +// Structure to describe indication TLV 0x01 for Voice ConferenceJoinIndication +struct sVoiceConferenceJoinIndication_JoinInfo +{ + UINT8 mCallID; +}; + +// Structure to describe indication TLV 0x02 for Voice ConferenceJoinIndication +struct sVoiceConferenceJoinIndication_ParticipantInfo1 +{ + UINT8 mURINameLength; + + // This array must be the size specified by mURINameLength + // wchar_t mURIName[1]; +}; + +struct sVoiceConferenceJoinIndication_ParticipantInfo2 +{ + UINT8 mURIDescriptionLength; + + // This array must be the size specified by mURIDescriptionLength + // wchar_t mURIDescription[1]; +}; + +struct sVoiceConferenceJoinIndication_ParticipantInfo +{ + sVoiceConferenceJoinIndication_ParticipantInfo1 mVoiceConferenceJoinIndication_ParticipantInfo1; + sVoiceConferenceJoinIndication_ParticipantInfo2 mVoiceConferenceJoinIndication_ParticipantInfo2; +}; + +// Structure to describe indication TLV 0x01 for Voice ConferenceParticipantUpdateIndication +struct sVoiceConferenceParticipantUpdateIndication_ParticipantInfo1 +{ + UINT8 mURINameLength; + + // This array must be the size specified by mURINameLength + // wchar_t mURIName[1]; +}; + +struct sVoiceConferenceParticipantUpdateIndication_ParticipantInfo2 +{ + UINT8 mURIDescriptionLength; + + // This array must be the size specified by mURIDescriptionLength + // wchar_t mURIDescription[1]; +}; + +struct sVoiceConferenceParticipantUpdateIndication_ParticipantInfo +{ + sVoiceConferenceParticipantUpdateIndication_ParticipantInfo1 mVoiceConferenceParticipantUpdateIndication_ParticipantInfo1; + sVoiceConferenceParticipantUpdateIndication_ParticipantInfo2 mVoiceConferenceParticipantUpdateIndication_ParticipantInfo2; +}; + +// Structure to describe indication TLV 0x01 for Voice ExtendedBurstTypeIndication +struct sVoiceExtendedBurstTypeIndication_Info +{ + UINT16 mMobileCountryCode; + UINT8 mDataBurstSubtype; + UINT8 mChargeIndication; + UINT8 mSubUnitCallTimeInDeciseconds; + UINT8 mUnitCallTimeInSeconds; +}; + +// Structure to describe indication TLV 0x01 for Voice MTPageMissIndication +struct sVoiceMTPageMissIndication_Reason +{ + eQMIVoiceEndReasons mPageMissReason; +}; + +// Structure to describe indication TLV 0x01 for Voice CallControlResultInfoIndication +struct sVoiceCallControlResultInfoIndication_Result +{ + eQMIVoiceCallControlResults mCallControlResult; +}; + +// Structure to describe indication TLV 0x02 for Voice CallControlResultInfoIndication +struct sVoiceCallControlResultInfoIndication_AlphaPresence +{ + eQMIVoiceCallControlAlphaCodes mAlphaPresence; +}; + +// Structure to describe indication TLV 0x10 for Voice CallControlResultInfoIndication +struct sVoiceCallControlResultInfoIndication_AlphaGSM8 +{ + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // char mAlphaData[1]; +}; + +// Structure to describe indication TLV 0x11 for Voice CallControlResultInfoIndication +struct sVoiceCallControlResultInfoIndication_AlphaUTF16 +{ + UINT8 mAlphaLength; + + // This array must be the size specified by mAlphaLength + // wchar_t mAlphaData[1]; +}; + +// Structure to describe request TLV 0x10 for CAT2SetEventReport() +struct sCAT2SetEventReportRequest_ReportMask +{ + bool mDisplayText:1; + bool mGetInkey:1; + bool mGetInput:1; + bool mSetupMenu:1; + bool mSelectItem:1; + bool mSendSMSAlphaIdentifier:1; + bool mSetupEventUserActivity:1; + bool mSetupEventIdleScreenNotify:1; + bool mSetupEventLanguageSelNotify:1; + bool mSetupIdleModeText:1; + bool mLanguageNotification:1; + bool mRefresh:1; + bool mEndProactiveSession:1; + bool mPlayTone:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mLaunchBrowser:1; + bool mSendSS:1; + bool mSendUSSD:1; + bool mProvideLocalInformationLanguage:1; + bool mBearerIndependentProtocol:1; + bool mSetupEventBrowserTermination:1; + bool mProvideLocalInformationTime:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mActivate:1; + bool mSetupEventHCIConnectivity:1; + + // Padding out 6 bits + UINT8 mReserved2:6; +}; + +// Structure to describe request TLV 0x11 for CAT2SetEventReport() +struct sCAT2SetEventReportRequest_DecodeReportMask +{ + bool mDisplayText:1; + bool mGetInkey:1; + bool mGetInput:1; + bool mSetupMenu:1; + bool mSelectItem:1; + bool mSendSMSAlphaIdentifier:1; + bool mSetupEventUserActivity:1; + bool mSetupEventIdleScreenNotify:1; + bool mSetupEventLanguageSelNotify:1; + bool mSetupIdleModeText:1; + bool mLanguageNotification:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mEndProactiveSession:1; + bool mPlayTone:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mLaunchBrowser:1; + bool mSendSS:1; + bool mSendUSSD:1; + bool mProvideLocalInformationLanguage:1; + bool mBearerIndependentProtocol:1; + bool mSetupEventBrowserTermination:1; + + // Padding out 1 bits + UINT8 mReserved2:1; + + bool mSCWSEvent:1; + bool mActivate:1; + bool mSetupEventHCIConnectivity:1; + bool mBearerIndependentProtocolStatus:1; + + // Padding out 5 bits + UINT8 mReserved3:5; +}; + +// Structure to describe request TLV 0x12 for CAT2SetEventReport() +struct sCAT2SetEventReportRequest_Slot +{ + bool mSlot1:1; + bool mSlot2:1; + bool mSlot3:1; + bool mSlot4:1; + bool mSlot5:1; + + // Padding out 3 bits + UINT8 mReserved1:3; +}; + +// Structure to describe request TLV 0x13 for CAT2SetEventReport() +struct sCAT2SetEventReportRequest_FullFunctionMask +{ + bool mSendSMS:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mSendSS:1; + bool mSendUSSD:1; + + // Padding out 27 bits + UINT8 mReserved1:3; + UINT8 mReserved2[3]; +}; + +// Structure to describe response TLV 0x10 for CAT2SetEventReport() +struct sCAT2SetEventReportResponse_RegStatusMask +{ + bool mDisplayText:1; + bool mGetInkey:1; + bool mGetInput:1; + bool mSetupMenu:1; + bool mSelectItem:1; + bool mSendSMSAlphaIdentifier:1; + bool mSetupEventUserActivity:1; + bool mSetupEventIdleScreenNotify:1; + bool mSetupEventLanguageSelNotify:1; + bool mSetupIdleModeText:1; + bool mLanguageNotification:1; + bool mRefresh:1; + bool mEndProactiveSession:1; + bool mPlayTone:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mLaunchBrowser:1; + bool mSendSS:1; + bool mSendUSSD:1; + bool mProvideLocalInformationLanguage:1; + bool mBearerIndependentProtocol:1; + bool mSetupEventBrowserTermination:1; + bool mProvideLocalInformationTime:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mActivate:1; + bool mSetupEventHCIConnectivity:1; + + // Padding out 6 bits + UINT8 mReserved2:6; +}; + +// Structure to describe response TLV 0x11 for CAT2SetEventReport() +struct sCAT2SetEventReportResponse_DecodedRegStatusMask +{ + bool mDisplayText:1; + bool mGetInkey:1; + bool mGetInput:1; + bool mSetupMenu:1; + bool mSelectItem:1; + bool mSendSMSAlphaIdentifier:1; + bool mSetupEventUserActivity:1; + bool mSetupEventIdleScreenNotify:1; + bool mSetupEventLanguageSelNotify:1; + bool mSetupIdleModeText:1; + bool mLanguageNotification:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mEndProactiveSession:1; + bool mPlayTone:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mLaunchBrowser:1; + bool mSendSS:1; + bool mSendUSSD:1; + bool mProvideLocalInformationLanguage:1; + bool mBearerIndependentProtocol:1; + bool mSetupEventBrowserTermination:1; + + // Padding out 1 bits + UINT8 mReserved2:1; + + bool mSCWSEvent:1; + bool mActivate:1; + bool mSetupEventHCIConnectivity:1; + bool mBearerIndependentProtocolStatus:1; + + // Padding out 5 bits + UINT8 mReserved3:5; +}; + +// Structure to describe response TLV 0x12 for CAT2SetEventReport() +struct sCAT2SetEventReportResponse_FullFunctionFailureMask +{ + bool mSendSMS:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mSendSS:1; + bool mSendUSSD:1; + + // Padding out 27 bits + UINT8 mReserved1:3; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x10 for CAT2 EventReport +struct sCAT2EventReportIndication_DisplayTextEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mDisplayTextCommand[1]; +}; + +// Structure to describe indication TLV 0x11 for CAT2 EventReport +struct sCAT2EventReportIndication_GetInkeyEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mGetInkeyCommand[1]; +}; + +// Structure to describe indication TLV 0x12 for CAT2 EventReport +struct sCAT2EventReportIndication_GetInputEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mGetInputCommand[1]; +}; + +// Structure to describe indication TLV 0x13 for CAT2 EventReport +struct sCAT2EventReportIndication_SetupMenuEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupMenuCommand[1]; +}; + +// Structure to describe indication TLV 0x14 for CAT2 EventReport +struct sCAT2EventReportIndication_SelectItemEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSelectItemCommand[1]; +}; + +// Structure to describe indication TLV 0x15 for CAT2 EventReport +struct sCAT2EventReportIndication_AlphaIDAvailable +{ + eQMICATAlphaIDCommandType mAlphaIDCommandType; + UINT16 mAlphaIDLength; + + // This array must be the size specified by mAlphaIDLength + // UINT8 mAlphaID[1]; +}; + +// Structure to describe indication TLV 0x16 for CAT2 EventReport +struct sCAT2EventReportIndication_SetupEventList +{ + bool mUserActivityNotify:1; + bool mIdleScreenAvailable:1; + bool mLanguageSelectionNotify:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x17 for CAT2 EventReport +struct sCAT2EventReportIndication_SetupIdleModeTextEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupIdleModeTextCommand[1]; +}; + +// Structure to describe indication TLV 0x18 for CAT2 EventReport +struct sCAT2EventReportIndication_LanguageNotificationEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mLanguageNotificationCommand[1]; +}; + +// Structure to describe indication TLV 0x19 for CAT2 EventReport +struct sCAT2EventReportIndication_RefreshEvent +{ + UINT16 mRefreshMode; + eQMICATRefreshStage mRefreshStage; +}; + +// Structure to describe indication TLV 0x1A for CAT2 EventReport +struct sCAT2EventReportIndication_EndProactiveSession +{ + eQMICATProactiveSessionEndType mProactiveSessionEndType; +}; + +// Structure to describe indication TLV 0x1B for CAT2 EventReport +struct sCAT2EventReportIndication_DecodedHeaderID +{ + eQMICATCommandID mCommandID; + UINT32 mReferenceID; + UINT8 mCommandNumber; +}; + +// Structure to describe indication TLV 0x1C for CAT2 EventReport +struct sCAT2EventReportIndication_TextString +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x1D for CAT2 EventReport +struct sCAT2EventReportIndication_HighPriority +{ + eQMICATHighPriority mHighPriority; +}; + +// Structure to describe indication TLV 0x1E for CAT2 EventReport +struct sCAT2EventReportIndication_UserControl +{ + eQMICATUserControl mUserControl; +}; + +// Structure to describe indication TLV 0x1F for CAT2 EventReport +struct sCAT2EventReportIndication_Icon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe indication TLV 0x20 for CAT2 EventReport +struct sCAT2EventReportIndication_Duration +{ + eQMICATTimeUnits mUnits; + UINT8 mInterval; +}; + +// Structure to describe indication TLV 0x21 for CAT2 EventReport +struct sCAT2EventReportIndication_ResponseFormat +{ + eQMICATResponseFormat mResponseFormat; +}; + +// Structure to describe indication TLV 0x22 for CAT2 EventReport +struct sCAT2EventReportIndication_HelpAvailable +{ + eQMICATHelpAvailable mHelpAvailable; +}; + +// Structure to describe indication TLV 0x23 for CAT2 EventReport +struct sCAT2EventReportIndication_ResponsePackingFormat +{ + eQMICATResponsePackingFormat mResponsePackingFormat; +}; + +// Structure to describe indication TLV 0x24 for CAT2 EventReport +struct sCAT2EventReportIndication_ResponseLength +{ + UINT8 mMaximumUserInput; + UINT8 mMinimumUserInput; +}; + +// Structure to describe indication TLV 0x25 for CAT2 EventReport +struct sCAT2EventReportIndication_ShowUserInput +{ + eQMICATShowUserInput mShowUserInput; +}; + +// Structure to describe indication TLV 0x26 for CAT2 EventReport +struct sCAT2EventReportIndication_Tone +{ + eQMICATTone mTone; +}; + +// Structure to describe indication TLV 0x27 for CAT2 EventReport +struct sCAT2EventReportIndication_SoftkeySelection +{ + eQMICATSoftkeySelection mSoftkeySelection; +}; + +// Structure to describe indication TLV 0x28 for CAT2 EventReport +struct sCAT2EventReportIndication_Items +{ + UINT8 mItemsLength; + + struct sItem + { + UINT8 mItemID; + UINT8 mItemTextLength; + + // This array must be the size specified by mItemTextLength + // UINT8 mItemText[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe indication TLV 0x29 for CAT2 EventReport +struct sCAT2EventReportIndication_DefaultItem +{ + UINT8 mDefaultItem; +}; + +// Structure to describe indication TLV 0x2A for CAT2 EventReport +struct sCAT2EventReportIndication_NextActionIdentifier +{ + UINT8 mActionsLength; + + // This array must be the size specified by mActionsLength + // eQMICATNextAction mNextAction[1]; +}; + +// Structure to describe indication TLV 0x2B for CAT2 EventReport +struct sCAT2EventReportIndication_IconIDList +{ + eQMICATDisplayIconOnly mDisplayIconOnly; + UINT8 mItemsLength; + + struct sItem + { + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe indication TLV 0x2C for CAT2 EventReport +struct sCAT2EventReportIndication_Presentation +{ + eQMICATPresentation mPresentation; +}; + +// Structure to describe indication TLV 0x2D for CAT2 EventReport +struct sCAT2EventReportIndication_PackingRequired +{ + eQMICATPackingRequired mPackingRequired; +}; + +// Structure to describe indication TLV 0x2E for CAT2 EventReport +struct sCAT2EventReportIndication_SMSTPDU +{ + UINT8 mSMSTPDUDataLength; + + // This array must be the size specified by mSMSTPDUDataLength + // UINT8 mSMSTPDUData[1]; +}; + +// Structure to describe indication TLV 0x2F for CAT2 EventReport +struct sCAT2EventReportIndication_IsCDMASMS +{ + eQMICATIsCDMASMS mIsCDMASMS; +}; + +// Structure to describe indication TLV 0x30 for CAT2 EventReport +struct sCAT2EventReportIndication_Address +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe indication TLV 0x31 for CAT2 EventReport +struct sCAT2EventReportIndication_CallSetupRequirement +{ + eQMICATCallSetupRequirement mCallSetupRequirement; +}; + +// Structure to describe indication TLV 0x32 for CAT2 EventReport +struct sCAT2EventReportIndication_Redial +{ + eQMICATRedialNecessary mRedialNecessary; + eQMICATTimeUnits mUnits; + UINT8 mInterval; +}; + +// Structure to describe indication TLV 0x33 for CAT2 EventReport +struct sCAT2EventReportIndication_Subaddress +{ + UINT8 mSubaddressDataLength; + + struct sSubaddressData + { + UINT8 mSubaddressData1:4; + UINT8 mSubaddressData2:4; + }; + + // This array must be the size specified by mSubaddressDataLength + // sSubaddressData mSubaddressDatas[1]; +}; + +// Structure to describe indication TLV 0x34 for CAT2 EventReport +struct sCAT2EventReportIndication_CapabilitiesConfiguration +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe indication TLV 0x35 for CAT2 EventReport +struct sCAT2EventReportIndication_DTMF +{ + UINT8 mDTMFDataLength; + + struct sDTMFData + { + UINT8 mDTMFData1:4; + UINT8 mDTMFData2:4; + }; + + // This array must be the size specified by mDTMFDataLength + // sDTMFData mDTMFDatas[1]; +}; + +// Structure to describe indication TLV 0x36 for CAT2 EventReport +struct sCAT2EventReportIndication_SpecificLanguageNotification +{ + eQMICATSpecificLanguageNotfication mSpecificLanguageNotification; +}; + +// Structure to describe indication TLV 0x37 for CAT2 EventReport +struct sCAT2EventReportIndication_Language +{ + char mLanguage[2]; +}; + +// Structure to describe indication TLV 0x38 for CAT2 EventReport +struct sCAT2EventReportIndication_LaunchMode +{ + eQMICATLaunchMode mLaunchMode; +}; + +// Structure to describe indication TLV 0x39 for CAT2 EventReport +struct sCAT2EventReportIndication_URL +{ + UINT8 mURLDataLength; + + // This array must be the size specified by mURLDataLength + // char mURLData[1]; +}; + +// Structure to describe indication TLV 0x3A for CAT2 EventReport +struct sCAT2EventReportIndication_BrowserID +{ + UINT8 mBrowserID; +}; + +// Structure to describe indication TLV 0x3B for CAT2 EventReport +struct sCAT2EventReportIndication_BearerList +{ + UINT8 mBearerListLength; + + // This array must be the size specified by mBearerListLength + // eQMICATBearer mBearerList[1]; +}; + +// Structure to describe indication TLV 0x3C for CAT2 EventReport +struct sCAT2EventReportIndication_ProvisioningFile +{ + UINT32 mNumberOfProvisioningFiles; + + struct sFile + { + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // char mPath[1]; + }; + + // This array must be the size specified by mNumberOfProvisioningFiles + // sFile mFiles[1]; +}; + +// Structure to describe indication TLV 0x3D for CAT2 EventReport +struct sCAT2EventReportIndication_USSDString +{ + eQMICATUSSDDataCodingScheme mOriginalDataCodingScheme; + eQMICATUSSDDataCodingScheme mDataCodingScheme; + UINT8 mUSSDTextLength; + + // This array must be the size specified by mUSSDTextLength + // UINT8 mUSSDText[1]; +}; + +// Structure to describe indication TLV 0x3E for CAT2 EventReport +struct sCAT2EventReportIndication_DefaultText +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x3F for CAT2 EventReport +struct sCAT2EventReportIndication_ImmediateResponseRequired +{ + eQMICATImmediateResponse mImmediateResponse; +}; + +// Structure to describe indication TLV 0x40 for CAT2 EventReport +struct sCAT2EventReportIndication_UserConfirmationAlpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x41 for CAT2 EventReport +struct sCAT2EventReportIndication_SetupCallDisplayAlpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x42 for CAT2 EventReport +struct sCAT2EventReportIndication_UserConfirmationIcon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe indication TLV 0x43 for CAT2 EventReport +struct sCAT2EventReportIndication_SetupCallDisplayIcon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe indication TLV 0x44 for CAT2 EventReport +struct sCAT2EventReportIndication_GatewayProxy +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x45 for CAT2 EventReport +struct sCAT2EventReportIndication_Alpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x46 for CAT2 EventReport +struct sCAT2EventReportIndication_NotificationRequired +{ + eQMICATNotificationRequired mNotificationRequired; +}; + +// Structure to describe indication TLV 0x47 for CAT2 EventReport +struct sCAT2EventReportIndication_PlayToneEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mPlayToneCommand[1]; +}; + +// Structure to describe indication TLV 0x48 for CAT2 EventReport +struct sCAT2EventReportIndication_SetupCallEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupCallCommand[1]; +}; + +// Structure to describe indication TLV 0x49 for CAT2 EventReport +struct sCAT2EventReportIndication_SendDTMFEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendDTMFCommand[1]; +}; + +// Structure to describe indication TLV 0x4A for CAT2 EventReport +struct sCAT2EventReportIndication_LaunchBrowserEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mLaunchBrowserCommand[1]; +}; + +// Structure to describe indication TLV 0x4B for CAT2 EventReport +struct sCAT2EventReportIndication_SendSMSEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendSMSCommand[1]; +}; + +// Structure to describe indication TLV 0x4C for CAT2 EventReport +struct sCAT2EventReportIndication_SendSSEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendSSCommand[1]; +}; + +// Structure to describe indication TLV 0x4D for CAT2 EventReport +struct sCAT2EventReportIndication_SendUSSDEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendUSSDCommand[1]; +}; + +// Structure to describe indication TLV 0x4E for CAT2 EventReport +struct sCAT2EventReportIndication_ProvideLocalInformationEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mProvideLocalInformationCommand[1]; +}; + +// Structure to describe indication TLV 0x4F for CAT2 EventReport +struct sCAT2EventReportIndication_SetupRawEventList +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupEventListCommand[1]; +}; + +// Structure to describe indication TLV 0x50 for CAT2 EventReport +struct sCAT2EventReportIndication_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe indication TLV 0x51 for CAT2 EventReport +struct sCAT2EventReportIndication_OpenChannelEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mOpenChannelCommand[1]; +}; + +// Structure to describe indication TLV 0x52 for CAT2 EventReport +struct sCAT2EventReportIndication_CloseChannelEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mCloseChannelCommand[1]; +}; + +// Structure to describe indication TLV 0x53 for CAT2 EventReport +struct sCAT2EventReportIndication_SendDataEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendDataCommand[1]; +}; + +// Structure to describe indication TLV 0x54 for CAT2 EventReport +struct sCAT2EventReportIndication_ReceiveDataEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mReceiveDataCommand[1]; +}; + +// Structure to describe indication TLV 0x55 for CAT2 EventReport +struct sCAT2EventReportIndication_OnDemmandLinkEstablish +{ + eQMICATOnDemandLinkEstablish mOnDemandLinkEstablish; +}; + +// Structure to describe indication TLV 0x56 for CAT2 EventReport +struct sCAT2EventReportIndication_CSDBearerDescription +{ + UINT8 mSpeed; + eQMICATCSDBearerName mCSDBearerName; + eQMICATConnectionElement mConnectionElement; +}; + +// Structure to describe indication TLV 0x57 for CAT2 EventReport +struct sCAT2EventReportIndication_GPRSBearerDescription +{ + UINT8 mPrecedenceClass; + UINT8 mDelayClass; + UINT8 mReliabilityClass; + UINT8 mPeakThroughput; + UINT8 mMeanThroughput; + eQMICATPacketDataProtocol mPacketDataProtocol; +}; + +// Structure to describe indication TLV 0x58 for CAT2 EventReport +struct sCAT2EventReportIndication_EUTRANExternalParameterBearerDescription +{ + eQMICATTrafficClass mTrafficClass; + UINT16 mMaxUploadBitrate; + UINT16 mMaxDownloadBitrate; + UINT16 mGuaranteedUploadBitrate; + UINT16 mGuaranteedDownloadBitrate; + eQMICATDeliveryOrder mDeliveryOrder; + UINT8 mMaxSDUSize; + UINT8 mMaxSDUErrorRatio; + UINT8 mResidualBitErrorRatio; + eQMICATDeliverErrorSDU mDeliverErrorSDU; + UINT8 mTransferDelay; + UINT8 mTrafficHandlingPRI; + eQMICATPDPType mPDPType; +}; + +// Structure to describe indication TLV 0x59 for CAT2 EventReport +struct sCAT2EventReportIndication_EUTRANExternalMappedUTRANBearerDescription +{ + UINT8 mQCI; + UINT8 mMaxUploadBitrate; + UINT8 mMaxDownloadBitrate; + UINT8 mGuaranteedUploadBitrate; + UINT8 mGuaranteedDownloadBitrate; + UINT8 mMaximumUploadBitrateExt; + UINT8 mMaximumDownloadBitrateExt; + UINT8 mGuaranteedUploadBitrateExt; + UINT8 mGuaranteedDownloadBitrateExt; + eQMICATPDPType mPDPType; +}; + +// Structure to describe indication TLV 0x5A for CAT2 EventReport +struct sCAT2EventReportIndication_BufferSize +{ + UINT16 mBufferSize; +}; + +// Structure to describe indication TLV 0x5B for CAT2 EventReport +struct sCAT2EventReportIndication_NetworkAccessName +{ + UINT8 mNetworkAccessNameLength; + + // This array must be the size specified by mNetworkAccessNameLength + // UINT8 mNetworkAccessName[1]; +}; + +// Structure to describe indication TLV 0x5C for CAT2 EventReport +struct sCAT2EventReportIndication_OtherAddress +{ + eQMICATAddressType mAddressType; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe indication TLV 0x5D for CAT2 EventReport +struct sCAT2EventReportIndication_UserLogin +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x5E for CAT2 EventReport +struct sCAT2EventReportIndication_UserPassword +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x5F for CAT2 EventReport +struct sCAT2EventReportIndication_TransportLevel +{ + eQMICATTransportProtocol mTransportProtocol; + UINT16 mPortNumber; +}; + +// Structure to describe indication TLV 0x60 for CAT2 EventReport +struct sCAT2EventReportIndication_DataDestinationAddress +{ + eQMICATAddressType mAddressType; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe indication TLV 0x61 for CAT2 EventReport +struct sCAT2EventReportIndication_ChannelDataLength +{ + UINT8 mChannelDataLength; +}; + +// Structure to describe indication TLV 0x62 for CAT2 EventReport +struct sCAT2EventReportIndication_SendDataImmediately +{ + eQMICATSendDataImmediately mSendDataImmediately; +}; + +// Structure to describe indication TLV 0x63 for CAT2 EventReport +struct sCAT2EventReportIndication_ChannelData +{ + UINT16 mChannelDataLength; + + // This array must be the size specified by mChannelDataLength + // UINT8 mChannelData[1]; +}; + +// Structure to describe indication TLV 0x64 for CAT2 EventReport +struct sCAT2EventReportIndication_ChannelID +{ + UINT8 mChannelID; +}; + +// Structure to describe indication TLV 0x65 for CAT2 EventReport +struct sCAT2EventReportIndication_ItemsWithDCS +{ + UINT8 mItemsLength; + + struct sItem + { + UINT8 mItemID; + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mItemTextLength; + + // This array must be the size specified by mItemTextLength + // UINT8 mItemText[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe indication TLV 0x66 for CAT2 EventReport +struct sCAT2EventReportIndication_Activate +{ + UINT32 mReferenceID; + UINT16 mActivateLength; + + // This array must be the size specified by mActivateLength + // UINT8 mActivate[1]; +}; + +// Structure to describe indication TLV 0x67 for CAT2 EventReport +struct sCAT2EventReportIndication_ActivateTarget +{ + eQMICATActivateTargets mActivateTarget; +}; + +// Structure to describe indication TLV 0x68 for CAT2 EventReport +struct sCAT2EventReportIndication_ResponseType +{ + eQMICATResponseTypes mResponseType; +}; + +// Structure to describe indication TLV 0x69 for CAT2 EventReport +struct sCAT2EventReportIndication_BearerIndependentProtocolStatus +{ + UINT8 mChannelID; + eQMICATBearerIndependentProtocolStatus mBearerIndependentProtocolStatus; +}; + +// Structure to describe response TLV 0x01 for CAT2GetServiceState() +struct sCAT2GetServiceStateResponse_CATServiceState +{ + bool mCommonDisplayText:1; + bool mCommonGetInkey:1; + bool mCommonGetInput:1; + bool mCommonSetupMenu:1; + bool mCommonSelectItem:1; + bool mCommonSendSMSAlphaIdentifier:1; + bool mCommonSetupEventUserActivity:1; + bool mCommonSetupEventIdleScreenNotify:1; + bool mCommonSetupEventLanguageSelNotify:1; + bool mCommonSetupIdleModeText:1; + bool mCommonLanguageNotification:1; + bool mCommonRefresh:1; + bool mCommonEndProactiveSession:1; + bool mCommonPlayTone:1; + bool mCommonSetupCall:1; + bool mCommonSendDTMF:1; + bool mCommonLaunchBrowser:1; + bool mCommonSendSS:1; + bool mCommonSendUSSD:1; + bool mCommonProvideLocalInformationLanguage:1; + bool mCommonBearerIndependentProtocol:1; + bool mCommonSetupEventBrowserTermination:1; + bool mCommonProvideLocalInformationTime:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mCommonActivate:1; + bool mCommonSetupEventHCIConnectivity:1; + + // Padding out 6 bits + UINT8 mReserved2:6; + + bool mControlDisplayText:1; + bool mControlGetInkey:1; + bool mControlGetInput:1; + bool mControlSetupMenu:1; + bool mControlSelectItem:1; + bool mControlSendSMSAlphaIdentifier:1; + bool mControlSetupEventUserActivity:1; + bool mControlSetupEventIdleScreenNotify:1; + bool mControlSetupEventLanguageSelNotify:1; + bool mControlSetupIdleModeText:1; + bool mControlLanguageNotification:1; + bool mControlRefresh:1; + bool mControlEndProactiveSession:1; + bool mControlPlayTone:1; + bool mControlSetupCall:1; + bool mControlSendDTMF:1; + bool mControlLaunchBrowser:1; + bool mControlSendSS:1; + bool mControlSendUSSD:1; + bool mControlProvideLocalInformationLanguage:1; + bool mControlBearerIndependentProtocol:1; + bool mControlSetupEventBrowserTermination:1; + bool mControlProvideLocalInformationTime:1; + + // Padding out 1 bits + UINT8 mReserved3:1; + + bool mControlActivate:1; + bool mControlSetupEventHCIConnectivity:1; + + // Padding out 6 bits + UINT8 mReserved4:6; +}; + +// Structure to describe response TLV 0x10 for CAT2GetServiceState() +struct sCAT2GetServiceStateResponse_DecodedCATServiceState +{ + bool mCommonDisplayText:1; + bool mCommonGetInkey:1; + bool mCommonGetInput:1; + bool mCommonSetupMenu:1; + bool mCommonSelectItem:1; + bool mCommonSendSMSAlphaIdentifier:1; + bool mCommonSetupEventUserActivity:1; + bool mCommonSetupEventIdleScreenNotify:1; + bool mCommonSetupEventLanguageSelNotify:1; + bool mCommonSetupIdleModeText:1; + bool mCommonLanguageNotification:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mCommonEndProactiveSession:1; + bool mCommonPlayTone:1; + bool mCommonSetupCall:1; + bool mCommonSendDTMF:1; + bool mCommonLaunchBrowser:1; + bool mCommonSendSS:1; + bool mCommonSendUSSD:1; + bool mCommonProvideLocalInformationLanguage:1; + bool mCommonBearerIndependentProtocol:1; + bool mCommonSetupEventBrowserTermination:1; + + // Padding out 1 bits + UINT8 mReserved2:1; + + bool mCommonSCWSEvent:1; + bool mCommonActivate:1; + bool mCommonSetupEventHCIConnectivity:1; + bool mCommonBearerIndependentProtocolStatus:1; + + // Padding out 5 bits + UINT8 mReserved3:5; + + bool mControlDisplayText:1; + bool mControlGetInkey:1; + bool mControlGetInput:1; + bool mControlSetupMenu:1; + bool mControlSelectItem:1; + bool mControlSendSMSAlphaIdentifier:1; + bool mControlSetupEventUserActivity:1; + bool mControlSetupEventIdleScreenNotify:1; + bool mControlSetupEventLanguageSelNotify:1; + bool mControlSetupIdleModeText:1; + bool mControlLanguageNotification:1; + + // Padding out 1 bits + UINT8 mReserved4:1; + + bool mControlEndProactiveSession:1; + bool mControlPlayTone:1; + bool mControlSetupCall:1; + bool mControlSendDTMF:1; + bool mControlLaunchBrowser:1; + bool mControlSendSS:1; + bool mControlSendUSSD:1; + bool mControlProvideLocalInformationLanguage:1; + bool mControlBearerIndependentProtocol:1; + bool mControlSetupEventBrowserTermination:1; + + // Padding out 1 bits + UINT8 mReserved5:1; + + bool mControlSCWSEvent:1; + bool mControlActivate:1; + bool mControlSetupEventHCIConnectivity:1; + bool mControlBearerIndependentProtocolStatus:1; + + // Padding out 5 bits + UINT8 mReserved6:5; +}; + +// Structure to describe response TLV 0x11 for CAT2GetServiceState() +struct sCAT2GetServiceStateResponse_FullFunctionServiceState +{ + bool mSendSMS:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mSendSS:1; + bool mSendUSSD:1; + + // Padding out 27 bits + UINT8 mReserved1:3; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x01 for CAT2SendTerminalResponse() +struct sCAT2SendTerminalResponseRequest_TerminalResponseType +{ + UINT32 mReferenceID; + UINT16 mTerminalResponseLength; + + // This array must be the size specified by mTerminalResponseLength + // UINT8 mTerminalResponse[1]; +}; + +// Structure to describe request TLV 0x10 for CAT2SendTerminalResponse() +struct sCAT2SendTerminalResponseRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe response TLV 0x10 for CAT2SendTerminal() +struct sCAT2SendTerminalResponseResponse_TRResponse +{ + UINT8 mSW1; + UINT8 mSW2; + UINT8 mTerminalResponseLength; + + // This array must be the size specified by mTerminalResponseLength + // UINT8 mTerminalResponseData[1]; +}; + +// Structure to describe request TLV 0x01 for CAT2EnvelopeCommand() +struct sCAT2EnvelopeCommandRequest_EnvelopeCommand +{ + eQMICATEnvelopeCommandType mEnvelopeCommandType; + UINT16 mEnvelopeLength; + + // This array must be the size specified by mEnvelopeLength + // UINT8 mEnvelopeData[1]; +}; + +// Structure to describe request TLV 0x10 for CAT2EnvelopeCommand() +struct sCAT2EnvelopeCommandRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe response TLV 0x10 for CAT2EnvelopeCommand() +struct sCAT2EnvelopeCommandResponse_RawResponse +{ + UINT8 mSW1; + UINT8 mSW2; + UINT8 mEnvelopeResponseLength; + + // This array must be the size specified by mEnvelopeResponseLength + // UINT8 mEnvelopeResponseData[1]; +}; + +// Structure to describe request TLV 0x01 for CAT2GetEventReport() +struct sCAT2GetEventReportRequest_CommandInput +{ + UINT32 mCommandID; + eQMICATCommandFormat mCommandFormat; +}; + +// Structure to describe response TLV 0x10 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_DisplayTextEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mDisplayTextCommand[1]; +}; + +// Structure to describe response TLV 0x11 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_GetInkeyEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mGetInkeyCommand[1]; +}; + +// Structure to describe response TLV 0x12 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_GetInputEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mGetInputCommand[1]; +}; + +// Structure to describe response TLV 0x13 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SetupMenuEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupMenuCommand[1]; +}; + +// Structure to describe response TLV 0x14 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SelectItemEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSelectItemCommand[1]; +}; + +// Structure to describe response TLV 0x15 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_AlphaIDAvailable +{ + eQMICATAlphaIDCommandType mAlphaIDCommandType; + UINT16 mAlphaIDLength; + + // This array must be the size specified by mAlphaIDLength + // UINT8 mAlphaID[1]; +}; + +// Structure to describe response TLV 0x16 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SetupEventList +{ + bool mUserActivityNotify:1; + bool mIdleScreenAvailable:1; + bool mLanguageSelectionNotify:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; +}; + +// Structure to describe response TLV 0x17 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SetupIdleModeTextEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupIdleModeTextCommand[1]; +}; + +// Structure to describe response TLV 0x18 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_LanguageNotificationEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mLanguageNotificationCommand[1]; +}; + +// Structure to describe response TLV 0x19 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_RefreshEvent +{ + UINT16 mRefreshMode; + eQMICATRefreshStage mRefreshStage; +}; + +// Structure to describe response TLV 0x1A for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_EndProactiveSession +{ + eQMICATProactiveSessionEndType mProactiveSessionEndType; +}; + +// Structure to describe response TLV 0x1B for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_DecodedHeaderID +{ + eQMICATCommandID mCommandID; + UINT32 mReferenceID; + UINT8 mCommandNumber; +}; + +// Structure to describe response TLV 0x1C for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_TextString +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x1D for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_HighPriority +{ + eQMICATHighPriority mHighPriority; +}; + +// Structure to describe response TLV 0x1E for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_UserControl +{ + eQMICATUserControl mUserControl; +}; + +// Structure to describe response TLV 0x1F for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Icon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe response TLV 0x20 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Duration +{ + eQMICATTimeUnits mUnits; + UINT8 mInterval; +}; + +// Structure to describe response TLV 0x21 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ResponseFormat +{ + eQMICATResponseFormat mResponseFormat; +}; + +// Structure to describe response TLV 0x22 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_HelpAvailable +{ + eQMICATHelpAvailable mHelpAvailable; +}; + +// Structure to describe response TLV 0x23 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ResponsePackingFormat +{ + eQMICATResponsePackingFormat mResponsePackingFormat; +}; + +// Structure to describe response TLV 0x24 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ResponseLength +{ + UINT8 mMaximumUserInput; + UINT8 mMinimumUserInput; +}; + +// Structure to describe response TLV 0x25 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ShowUserInput +{ + eQMICATShowUserInput mShowUserInput; +}; + +// Structure to describe response TLV 0x26 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Tone +{ + eQMICATTone mTone; +}; + +// Structure to describe response TLV 0x27 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SoftkeySelection +{ + eQMICATSoftkeySelection mSoftkeySelection; +}; + +// Structure to describe response TLV 0x28 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Items +{ + UINT8 mItemsLength; + + struct sItem + { + UINT8 mItemID; + UINT8 mItemTextLength; + + // This array must be the size specified by mItemTextLength + // UINT8 mItemText[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe response TLV 0x29 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_DefaultItems +{ + UINT8 mDefaultItem; +}; + +// Structure to describe response TLV 0x2A for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_NextActionIdentifier +{ + UINT8 mActionsLength; + + // This array must be the size specified by mActionsLength + // eQMICATNextAction mNextAction[1]; +}; + +// Structure to describe response TLV 0x2B for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_IconIDList +{ + eQMICATDisplayIconOnly mDisplayIconOnly; + UINT8 mItemsLength; + + struct sItem + { + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe response TLV 0x2C for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Presentation +{ + eQMICATPresentation mPresentation; +}; + +// Structure to describe response TLV 0x2D for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_PackingRequired +{ + eQMICATPackingRequired mPackingRequired; +}; + +// Structure to describe response TLV 0x2E for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SMSTPDU +{ + UINT8 mSMSTPDUDataLength; + + // This array must be the size specified by mSMSTPDUDataLength + // UINT8 mSMSTPDUData[1]; +}; + +// Structure to describe response TLV 0x2F for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_IsCDMASMS +{ + eQMICATIsCDMASMS mIsCDMASMS; +}; + +// Structure to describe response TLV 0x30 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Address +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe response TLV 0x31 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_CallSetupRequirement +{ + eQMICATCallSetupRequirement mCallSetupRequirement; +}; + +// Structure to describe response TLV 0x32 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Redial +{ + eQMICATRedialNecessary mRedialNecessary; + eQMICATTimeUnits mUnits; + UINT8 mInterval; +}; + +// Structure to describe response TLV 0x33 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Subaddress +{ + UINT8 mSubaddressDataLength; + + struct sSubaddressData + { + UINT8 mSubaddressData1:4; + UINT8 mSubaddressData2:4; + }; + + // This array must be the size specified by mSubaddressDataLength + // sSubaddressData mSubaddressDatas[1]; +}; + +// Structure to describe response TLV 0x34 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_CapabilityConfiguration +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe response TLV 0x35 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_DTMF +{ + UINT8 mDTMFDataLength; + + struct sDTMFData + { + UINT8 mDTMFData1:4; + UINT8 mDTMFData2:4; + }; + + // This array must be the size specified by mDTMFDataLength + // sDTMFData mDTMFDatas[1]; +}; + +// Structure to describe response TLV 0x36 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SpecificLanguageNotification +{ + eQMICATSpecificLanguageNotfication mSpecificLanguageNotification; +}; + +// Structure to describe response TLV 0x37 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Language +{ + char mLanguage[2]; +}; + +// Structure to describe response TLV 0x38 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_LaunchMode +{ + eQMICATLaunchMode mLaunchMode; +}; + +// Structure to describe response TLV 0x39 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_URL +{ + UINT8 mURLDataLength; + + // This array must be the size specified by mURLDataLength + // char mURLData[1]; +}; + +// Structure to describe response TLV 0x3A for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_BrowserID +{ + UINT8 mBrowserID; +}; + +// Structure to describe response TLV 0x3B for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_BearerList +{ + UINT8 mBearerListLength; + + // This array must be the size specified by mBearerListLength + // eQMICATBearer mBearerList[1]; +}; + +// Structure to describe response TLV 0x3C for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ProvisioningFiles +{ + UINT32 mNumberOfProvisioningFiles; + + struct sFile + { + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // char mPath[1]; + }; + + // This array must be the size specified by mNumberOfProvisioningFiles + // sFile mFiles[1]; +}; + +// Structure to describe response TLV 0x3D for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_USSDString +{ + eQMICATUSSDDataCodingScheme mOriginalDataCodingScheme; + eQMICATUSSDDataCodingScheme mDataCodingScheme; + UINT8 mUSSDTextLength; + + // This array must be the size specified by mUSSDTextLength + // UINT8 mUSSDText[1]; +}; + +// Structure to describe response TLV 0x3E for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_DefaultText +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x3F for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ImmediateResponseRequest +{ + eQMICATImmediateResponse mImmediateResponse; +}; + +// Structure to describe response TLV 0x40 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_UserConfirmationAlpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x41 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SetupCallDisplayAlpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x42 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_UserConfirmationIcon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe response TLV 0x43 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SetupCallDisplayIcon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe response TLV 0x44 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_GatewayProxy +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x45 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Alpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x46 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_NotificationRequired +{ + eQMICATNotificationRequired mNotificationRequired; +}; + +// Structure to describe response TLV 0x47 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_PlayToneEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mPlayToneCommand[1]; +}; + +// Structure to describe response TLV 0x48 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SetupCallEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupCallCommand[1]; +}; + +// Structure to describe response TLV 0x49 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SendDTMFEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendDTMFCommand[1]; +}; + +// Structure to describe response TLV 0x4A for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_LaunchBrowserEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mLaunchBrowserCommand[1]; +}; + +// Structure to describe response TLV 0x4B for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SendSMSEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendSMSCommand[1]; +}; + +// Structure to describe response TLV 0x4C for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SendSSEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendSSCommand[1]; +}; + +// Structure to describe response TLV 0x4D for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SendUSSDEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendUSSDCommand[1]; +}; + +// Structure to describe response TLV 0x4E for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ProvideLocalInformationEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mProvideLocalInformationCommand[1]; +}; + +// Structure to describe response TLV 0x4F for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SetupEventListRawEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupEventListCommand[1]; +}; + +// Structure to describe response TLV 0x50 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe response TLV 0x51 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_OpenChannelEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mOpenChannelCommand[1]; +}; + +// Structure to describe response TLV 0x52 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_CloseChannelEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mCloseChannelCommand[1]; +}; + +// Structure to describe response TLV 0x53 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SendDataEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendDataCommand[1]; +}; + +// Structure to describe response TLV 0x54 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ReceiveDataEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mReceiveDataCommand[1]; +}; + +// Structure to describe response TLV 0x55 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_OnDemandLinkEstablish +{ + eQMICATOnDemandLinkEstablish mOnDemandLinkEstablish; +}; + +// Structure to describe response TLV 0x56 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_CSDBearerDescription +{ + UINT8 mSpeed; + eQMICATCSDBearerName mCSDBearerName; + eQMICATConnectionElement mConnectionElement; +}; + +// Structure to describe response TLV 0x57 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_GPRSBearerDescription +{ + UINT8 mPrecedenceClass; + UINT8 mDelayClass; + UINT8 mReliabilityClass; + UINT8 mPeakThroughput; + UINT8 mMeanThroughput; + eQMICATPacketDataProtocol mPacketDataProtocol; +}; + +// Structure to describe response TLV 0x58 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_EUTRANExternalParameterBearerDescription +{ + eQMICATTrafficClass mTrafficClass; + UINT16 mMaxUploadBitrate; + UINT16 mMaxDownloadBitrate; + UINT16 mGuaranteedUploadBitrate; + UINT16 mGuaranteedDownloadBitrate; + eQMICATDeliveryOrder mDeliveryOrder; + UINT8 mMaxSDUSize; + UINT8 mMaxSDUErrorRatio; + UINT8 mResidualBitErrorRatio; + eQMICATDeliverErrorSDU mDeliverErrorSDU; + UINT8 mTransferDelay; + UINT8 mTrafficHandlingPRI; + eQMICATPDPType mPDPType; +}; + +// Structure to describe response TLV 0x59 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_EUTRANExternalMappedUTRANBearerDescription +{ + UINT8 mQCI; + UINT8 mMaxUploadBitrate; + UINT8 mMaxDownloadBitrate; + UINT8 mGuaranteedUploadBitrate; + UINT8 mGuaranteedDownloadBitrate; + UINT8 mMaximumUploadBitrateExt; + UINT8 mMaximumDownloadBitrateExt; + UINT8 mGuaranteedUploadBitrateExt; + UINT8 mGuaranteedDownloadBitrateExt; + eQMICATPDPType mPDPType; +}; + +// Structure to describe response TLV 0x5A for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_BufferSize +{ + UINT16 mBufferSize; +}; + +// Structure to describe response TLV 0x5B for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_NetworkAccessName +{ + UINT8 mNetworkAccessNameLength; + + // This array must be the size specified by mNetworkAccessNameLength + // UINT8 mNetworkAccessName[1]; +}; + +// Structure to describe response TLV 0x5C for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_OtherAddress +{ + eQMICATAddressType mAddressType; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe response TLV 0x5D for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_UserLogin +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x5E for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_UserPassword +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x5F for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_TransportLevel +{ + eQMICATTransportProtocol mTransportProtocol; + UINT16 mPortNumber; +}; + +// Structure to describe response TLV 0x60 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_DataDestinationAddress +{ + eQMICATAddressType mAddressType; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe response TLV 0x61 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ChannelDataLength +{ + UINT8 mChannelDataLength; +}; + +// Structure to describe response TLV 0x62 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_SendDataImmediately +{ + eQMICATSendDataImmediately mSendDataImmediately; +}; + +// Structure to describe response TLV 0x63 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ChannelData +{ + UINT16 mChannelDataLength; + + // This array must be the size specified by mChannelDataLength + // UINT8 mChannelData[1]; +}; + +// Structure to describe response TLV 0x64 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ChannelID +{ + UINT8 mChannelID; +}; + +// Structure to describe response TLV 0x65 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ItemsWithDCS +{ + UINT8 mItemsLength; + + struct sItem + { + UINT8 mItemID; + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mItemTextLength; + + // This array must be the size specified by mItemTextLength + // UINT8 mItemText[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe response TLV 0x66 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_Activate +{ + UINT32 mReferenceID; + UINT16 mActivateLength; + + // This array must be the size specified by mActivateLength + // UINT8 mActivate[1]; +}; + +// Structure to describe response TLV 0x67 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ActivateTarget +{ + eQMICATActivateTargets mActivateTarget; +}; + +// Structure to describe response TLV 0x68 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_ResponseType +{ + eQMICATResponseTypes mResponseType; +}; + +// Structure to describe response TLV 0x69 for CAT2GetEventReport() +struct sCAT2GetEventReportResponse_BearerIndependentProtocolStatus +{ + UINT8 mChannelID; + eQMICATBearerIndependentProtocolStatus mBearerIndependentProtocolStatus; +}; + +// Structure to describe request TLV 0x01 for CAT2SendDecodedTerminalResponse() +struct sCAT2SendDecodedTerminalResponseRequest_TerminalResponse +{ + UINT32 mReferenceID; + UINT8 mCommandNumber; + eQMICATResponseCommand mResponseCommand; + UINT8 mGeneralResult; + UINT8 mAdditionalInformationLength; + + // This array must be the size specified by mAdditionalInformationLength + // UINT8 mTerminalResponseAdditionalInformation[1]; +}; + +// Structure to describe request TLV 0x10 for CAT2SendDecodedTerminalResponse() +struct sCAT2SendDecodedTerminalResponseRequest_TextString +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe request TLV 0x11 for CAT2SendDecodedTerminalResponse() +struct sCAT2SendDecodedTerminalResponseRequest_ItemIdentifier +{ + UINT8 mItemIdentifier; +}; + +// Structure to describe request TLV 0x12 for CAT2SendDecodedTerminalResponse() +struct sCAT2SendDecodedTerminalResponseRequest_GetInkeyExtraInfo +{ + eQMICATTimeUnits mUnits; + UINT8 mInterval; + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe request TLV 0x13 for CAT2SendDecodedTerminalResponse() +struct sCAT2SendDecodedTerminalResponseRequest_LanguageInfo +{ + char mLanguage[2]; +}; + +// Structure to describe request TLV 0x14 for CAT2SendDecodedTerminalResponse() +struct sCAT2SendDecodedTerminalResponseRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x15 for CAT2SendDecodedTerminalResponse() +struct sCAT2SendDecodedTerminalResponseRequest_GetInkeyYesInput +{ + eQMICATTimeUnits mUnits; + UINT8 mInterval; + INT8 mGetInkeyYesInput; +}; + +// Structure to describe response TLV 0x10 for CAT2SendDecodedTerminal() +struct sCAT2SendDecodedTerminalResponseResponse_TRResponse +{ + UINT8 mSW1; + UINT8 mSW2; + UINT8 mTerminalResponseLength; + + // This array must be the size specified by mTerminalResponseLength + // UINT8 mTerminalResponseData[1]; +}; + +// Structure to describe request TLV 0x01 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_EnvelopeCommand +{ + eQMICATDecodedEnvelopeCommand mEnvelopeCommand; +}; + +// Structure to describe request TLV 0x10 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_ItemIdentifier +{ + UINT8 mItemIdentifier; +}; + +// Structure to describe request TLV 0x11 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_HelpRequest +{ + eQMICATHelpRequest mHelpRequest; +}; + +// Structure to describe request TLV 0x12 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_Language +{ + char mLanguage[2]; +}; + +// Structure to describe request TLV 0x13 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x14 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_Address +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe request TLV 0x15 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_Subaddress +{ + UINT8 mSubaddressDataLength; + + struct sSubaddressData + { + UINT8 mSubaddressData1:4; + UINT8 mSubaddressData2:4; + }; + + // This array must be the size specified by mSubaddressDataLength + // sSubaddressData mSubaddressDatas[1]; +}; + +// Structure to describe request TLV 0x16 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_CapabilityConfigParam1 +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe request TLV 0x17 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_CapabilityConfigParam2 +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe request TLV 0x18 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_USSDString +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe request TLV 0x19 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_PDPContextActivation +{ + UINT8 mPDPContextActivationDataLength; + + // This array must be the size specified by mPDPContextActivationDataLength + // UINT8 mPDPContextActivationData[1]; +}; + +// Structure to describe request TLV 0x1A for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_EPSPDNConnectActivation +{ + UINT8 mEPSPDNConnectActivationDataLength; + + // This array must be the size specified by mEPSPDNConnectActivationDataLength + // UINT8 mEPSPDNConnectActivationData[1]; +}; + +// Structure to describe request TLV 0x1B for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_BrowserTerminationCause +{ + eQMICATBrowserTerminationCauses mBrowserTerminationCause; +}; + +// Structure to describe request TLV 0x1C for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_SMSTPDU +{ + UINT8 mSMSTPDUDataLength; + + // This array must be the size specified by mSMSTPDUDataLength + // UINT8 mSMSTPDUData[1]; +}; + +// Structure to describe request TLV 0x1D for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_IsCDMASMS +{ + eQMICATIsCDMASMS mIsCDMASMS; +}; + +// Structure to describe request TLV 0x1E for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_RAT +{ + eQMICATRadioAccessTechnologies mRadioAccessTechnology; +}; + +// Structure to describe request TLV 0x1F for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_CallType +{ + eQMICATCallTypes mCallType; +}; + +// Structure to describe request TLV 0x20 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_TransactionID +{ + UINT8 mCallTransactionIDLength; + + // This array must be the size specified by mCallTransactionIDLength + // UINT8 mCallTransactionID[1]; +}; + +// Structure to describe request TLV 0x21 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_RPAddress +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe request TLV 0x22 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_TPAddress +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe request TLV 0x23 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandRequest_Cause +{ + UINT8 mCauseLength; + + // This array must be the size specified by mCauseLength + // UINT8 mCause[1]; +}; + +// Structure to describe response TLV 0x10 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_CallControlResult +{ + eQMICATCallControlResult mCallControlResult; +}; + +// Structure to describe response TLV 0x11 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_Address +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe response TLV 0x12 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_Subaddress +{ + UINT8 mSubaddressDataLength; + + struct sSubaddressData + { + UINT8 mSubaddressData1:4; + UINT8 mSubaddressData2:4; + }; + + // This array must be the size specified by mSubaddressDataLength + // sSubaddressData mSubaddressDatas[1]; +}; + +// Structure to describe response TLV 0x13 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_CapabilityConfigParam1 +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe response TLV 0x14 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_CapabilityConfigParam2 +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe response TLV 0x15 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_USSDString +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x16 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_PDPContextActivation +{ + UINT8 mPDPContextActivationDataLength; + + // This array must be the size specified by mPDPContextActivationDataLength + // UINT8 mPDPContextActivationData[1]; +}; + +// Structure to describe response TLV 0x17 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_EPSPDNConnectActivation +{ + UINT8 mEPSPDNConnectActivationDataLength; + + // This array must be the size specified by mEPSPDNConnectActivationDataLength + // UINT8 mEPSPDNConnectActivationData[1]; +}; + +// Structure to describe response TLV 0x18 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_Alpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x19 for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_BCRepeatIndicator +{ + eQMICATBearerCapabilityRepeatIndicator mBearerCapabilityRepeatIndicator; +}; + +// Structure to describe response TLV 0x1A for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_SMSPPDataDownloadUICCACK +{ + UINT8 mSMSPPDataDownloadUICCACKLength; + + // This array must be the size specified by mSMSPPDataDownloadUICCACKLength + // UINT8 mSMSPPDataDownloadUICCACKData[1]; +}; + +// Structure to describe response TLV 0x1B for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_RPAddress +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe response TLV 0x1C for CAT2SendDecodedEnvelopeCommand() +struct sCAT2SendDecodedEnvelopeCommandResponse_TPAddress +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe request TLV 0x10 for CAT2EventConfirmation() +struct sCAT2EventConfirmationRequest_UserConfirmed +{ + eQMICATUserConfirmed mUserConfirmed; +}; + +// Structure to describe request TLV 0x11 for CAT2EventConfirmation() +struct sCAT2EventConfirmationRequest_IconIsDisplayed +{ + eQMICATIconIsDisplayed mIconIsDisplayed; +}; + +// Structure to describe request TLV 0x12 for CAT2EventConfirmation() +struct sCAT2EventConfirmationRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x01 for CAT2SCWSOpenChannel() +struct sCAT2SCWSOpenChannelRequest_ChannelStatus +{ + UINT32 mChannelID; + eQMICATChannelState mChannelState; +}; + +// Structure to describe request TLV 0x10 for CAT2SCWSOpenChannel() +struct sCAT2SCWSOpenChannelRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe indication TLV 0x10 for CAT2 SCWSOpenChannelIndication +struct sCAT2SCWSOpenChannelIndication_OpenChannelInformation +{ + UINT32 mChannelID; + UINT16 mPortNumber; + UINT16 mBufferSize; +}; + +// Structure to describe indication TLV 0x11 for CAT2 SCWSOpenChannelIndication +struct sCAT2SCWSOpenChannelIndication_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe indication TLV 0x12 for CAT2 SCWSOpenChannelIndication +struct sCAT2SCWSOpenChannelIndication_Alpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe request TLV 0x01 for CAT2SCWSCloseChannel() +struct sCAT2SCWSCloseChannelRequest_ChannelStatus +{ + UINT32 mChannelID; + eQMICATChannelState mChannelState; +}; + +// Structure to describe request TLV 0x10 for CAT2SCWSCloseChannel() +struct sCAT2SCWSCloseChannelRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe indication TLV 0x10 for CAT2 SCWSCloseChannelIndication +struct sCAT2SCWSCloseChannelIndication_CloseChannelInfo +{ + UINT32 mChannelID; + eQMICATChannelState mChannelState; +}; + +// Structure to describe response TLV 0x11 for CAT2SCWSCloseChannel() +struct sCAT2SCWSCloseChannelResponse_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x01 for CAT2SCWSSendData() +struct sCAT2SCWSSendDataRequest_ChannelStatus +{ + UINT32 mChannelID; + eQMICATSendDataResult mDataSendResult; +}; + +// Structure to describe request TLV 0x10 for CAT2SCWSSendData() +struct sCAT2SCWSSendDataRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe indication TLV 0x10 for CAT2 SCWSSendDataIndication +struct sCAT2SCWSSendDataIndication_SendDataInfo +{ + UINT32 mChannelID; + UINT8 mTotalPackets; + UINT8 mCurrentPacket; + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe indication TLV 0x11 for CAT2 SCWSSendDataIndication +struct sCAT2SCWSSendDataIndication_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x01 for CAT2SCWSDataAvailable() +struct sCAT2SCWSDataAvailableRequest_RemainingData +{ + UINT32 mChannelID; + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe request TLV 0x02 for CAT2SCWSDataAvailable() +struct sCAT2SCWSDataAvailableRequest_RemainingDataLength +{ + UINT16 mDataLength; +}; + +// Structure to describe request TLV 0x10 for CAT2SCWSDataAvailable() +struct sCAT2SCWSDataAvailableRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x01 for CAT2SCWSChannelStatus() +struct sCAT2SCWSChannelStatusRequest_ChannelStatus +{ + UINT32 mChannelID; + eQMICATChannelState mChannelState; +}; + +// Structure to describe request TLV 0x10 for CAT2SCWSChannelStatus() +struct sCAT2SCWSChannelStatusRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x10 for CAT2GetTerminalProfile() +struct sCAT2GetTerminalProfileRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe response TLV 0x10 for CAT2GetTerminalProfile() +struct sCAT2GetTerminalProfileResponse_RawData +{ + UINT8 mTerminalProfileLength; + + // This array must be the size specified by mTerminalProfileLength + // UINT8 mTerminalProfileData[1]; +}; + +// Structure to describe request TLV 0x01 for CAT2SetConfiguration() +struct sCAT2SetConfigurationRequest_Mode +{ + eQMICATConfigModes mConfigMode; +}; + +// Structure to describe request TLV 0x10 for CAT2SetConfiguration() +struct sCAT2SetConfigurationRequest_CustomData +{ + UINT8 mTerminalProfileLength; + + // This array must be the size specified by mTerminalProfileLength + // UINT8 mTerminalProfileData[1]; +}; + +// Structure to describe response TLV 0x10 for CAT2GetConfiguration() +struct sCAT2GetConfigurationResponse_Mode +{ + eQMICATConfigModes mConfigMode; +}; + +// Structure to describe response TLV 0x11 for CAT2GetConfiguration() +struct sCAT2GetConfigurationResponse_CustomData +{ + UINT8 mTerminalProfileLength; + + // This array must be the size specified by mTerminalProfileLength + // UINT8 mTerminalProfileData[1]; +}; + +// Structure to describe request TLV 0x01 for UIMReadTransparent() +struct sUIMReadTransparentRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMReadTransparent() +struct sUIMReadTransparentRequest_FileID +{ + UINT16 mFileID; + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // UINT16 mPath[1]; +}; + +// Structure to describe request TLV 0x03 for UIMReadTransparent() +struct sUIMReadTransparentRequest_Buffer +{ + UINT16 mOffset; + UINT16 mLength; +}; + +// Structure to describe request TLV 0x10 for UIMReadTransparent() +struct sUIMReadTransparentRequest_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe request TLV 0x11 for UIMReadTransparent() +struct sUIMReadTransparentRequest_Encryption +{ + INT8 mDataEncrypted; +}; + +// Structure to describe response TLV 0x10 for UIMReadTransparent() +struct sUIMReadTransparentResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe response TLV 0x11 for UIMReadTransparent() +struct sUIMReadTransparentResponse_ReadResult +{ + UINT16 mContentLength; + + // This array must be the size specified by mContentLength + // UINT8 mContent[1]; +}; + +// Structure to describe response TLV 0x12 for UIMReadTransparent() +struct sUIMReadTransparentResponse_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x13 for UIMReadTransparent() +struct sUIMReadTransparentResponse_Encryption +{ + INT8 mDataEncrypted; +}; + +// Structure to describe response TLV 0x14 for UIMReadTransparent() +struct sUIMReadTransparentResponse_RequestedLength +{ + UINT16 mFileLength; +}; + +// Structure to describe indication TLV 0x01 for UIM ReadTransparentIndication +struct sUIMReadTransparentIndication_OriginalToken +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x10 for UIM ReadTransparentIndication +struct sUIMReadTransparentIndication_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe indication TLV 0x11 for UIM ReadTransparentIndication +struct sUIMReadTransparentIndication_ReadResult +{ + UINT16 mContentLength; + + // This array must be the size specified by mContentLength + // UINT8 mContent[1]; +}; + +// Structure to describe indication TLV 0x12 for UIM ReadTransparentIndication +struct sUIMReadTransparentIndication_Encryption +{ + INT8 mDataEncrypted; +}; + +// Structure to describe indication TLV 0x13 for UIM ReadTransparentIndication +struct sUIMReadTransparentIndication_RequestedLength +{ + UINT16 mFileLength; +}; + +// Structure to describe request TLV 0x01 for UIMReadRecord() +struct sUIMReadRecordRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMReadRecord() +struct sUIMReadRecordRequest_FileID +{ + UINT16 mFileID; + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // UINT16 mPath[1]; +}; + +// Structure to describe request TLV 0x03 for UIMReadRecord() +struct sUIMReadRecordRequest_Record +{ + UINT16 mRecordNumber; + UINT16 mContentLength; +}; + +// Structure to describe request TLV 0x10 for UIMReadRecord() +struct sUIMReadRecordRequest_LastRecord +{ + UINT16 mRecordNumber; +}; + +// Structure to describe request TLV 0x11 for UIMReadRecord() +struct sUIMReadRecordRequest_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x10 for UIMReadRecord() +struct sUIMReadRecordResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe response TLV 0x11 for UIMReadRecord() +struct sUIMReadRecordResponse_ReadResult +{ + UINT16 mContentLength; + + // This array must be the size specified by mContentLength + // UINT8 mContent[1]; +}; + +// Structure to describe response TLV 0x12 for UIMReadRecord() +struct sUIMReadRecordResponse_AdditionalReadResult +{ + UINT16 mContentLength; + + struct sRecord + { + // This array must be the size specified by mContentLength + // UINT8 mContent[1]; + }; + + // This array is variable length based on the size of the container + // sRecord mRecords[1]; +}; + +// Structure to describe response TLV 0x13 for UIMReadRecord() +struct sUIMReadRecordResponse_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x01 for UIM ReadRecordIndication +struct sUIMReadRecordIndication_OriginalToken +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x10 for UIM ReadRecordIndication +struct sUIMReadRecordIndication_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe indication TLV 0x11 for UIM ReadRecordIndication +struct sUIMReadRecordIndication_ReadResult +{ + UINT16 mContentLength; + + // This array must be the size specified by mContentLength + // UINT8 mContent[1]; +}; + +// Structure to describe indication TLV 0x12 for UIM ReadRecordIndication +struct sUIMReadRecordIndication_AdditionalReadResult +{ + UINT16 mContentLength; + + struct sRecord + { + // This array must be the size specified by mContentLength + // UINT8 mContent[1]; + }; + + // This array is variable length based on the size of the container + // sRecord mRecords[1]; +}; + +// Structure to describe request TLV 0x01 for UIMWriteTransparent() +struct sUIMWriteTransparentRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMWriteTransparent() +struct sUIMWriteTransparentRequest_FileID +{ + UINT16 mFileID; + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // UINT16 mPath[1]; +}; + +// Structure to describe request TLV 0x03 for UIMWriteTransparent() +struct sUIMWriteTransparentRequest_Buffer +{ + UINT16 mOffset; + UINT16 mContentLength; + + // This array must be the size specified by mContentLength + // UINT8 mContent[1]; +}; + +// Structure to describe request TLV 0x10 for UIMWriteTransparent() +struct sUIMWriteTransparentRequest_ResponseInIndicaiton +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x10 for UIMWriteTransparent() +struct sUIMWriteTransparentResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe response TLV 0x11 for UIMWriteTransparent() +struct sUIMWriteTransparentResponse_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x01 for UIM WriteTransparentIndication +struct sUIMWriteTransparentIndication_OriginalToken +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x10 for UIM WriteTransparentIndication +struct sUIMWriteTransparentIndication_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe request TLV 0x01 for UIMWriteRecord() +struct sUIMWriteRecordRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMWriteRecord() +struct sUIMWriteRecordRequest_FileID +{ + UINT16 mFileID; + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // UINT16 mPath[1]; +}; + +// Structure to describe request TLV 0x03 for UIMWriteRecord() +struct sUIMWriteRecordRequest_Record +{ + UINT16 mRecordNumber; + UINT16 mContentLength; + + // This array must be the size specified by mContentLength + // UINT8 mContent[1]; +}; + +// Structure to describe request TLV 0x10 for UIMWriteRecord() +struct sUIMWriteRecordRequest_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x10 for UIMWriteRecord() +struct sUIMWriteRecordResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe response TLV 0x11 for UIMWriteRecord() +struct sUIMWriteRecordResponse_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x01 for UIM WriteRecordIndication +struct sUIMWriteRecordIndication_OriginalToken +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x10 for UIM WriteRecordIndication +struct sUIMWriteRecordIndication_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe request TLV 0x01 for UIMGetFileAttributes() +struct sUIMGetFileAttributesRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMGetFileAttributes() +struct sUIMGetFileAttributesRequest_FileID +{ + UINT16 mFileID; + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // UINT16 mPath[1]; +}; + +// Structure to describe request TLV 0x10 for UIMGetFileAttributes() +struct sUIMGetFileAttributesRequest_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe request TLV 0x11 for UIMGetFileAttributes() +struct sUIMGetFileAttributesRequest_UICCSecurity +{ + INT8 mReturnUICCSecurityAttributes; +}; + +// Structure to describe response TLV 0x10 for UIMGetFileAttributes() +struct sUIMGetFileAttributesResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe response TLV 0x11 for UIMGetFileAttributes() +struct sUIMGetFileAttributesResponse_Attributes +{ + UINT16 mFileSize; + UINT16 mFileID; + eQMIUIMFileTypes mFileType; + UINT16 mRecordSize; + UINT16 mRecordCount; + eQMIUIMSecurityAttributes mReadSecurityAttributes; + bool mReadPIN1:1; + bool mReadPIN2:1; + bool mReadUPIN:1; + bool mReadADM:1; + + // Padding out 4 bits + UINT8 mReserved1:4; + + eQMIUIMSecurityAttributes mWriteSecurityAttributes; + bool mWritePIN1:1; + bool mWritePIN2:1; + bool mWriteUPIN:1; + bool mWriteADM:1; + + // Padding out 4 bits + UINT8 mReserved2:4; + + eQMIUIMSecurityAttributes mIncreaseSecurityAttributes; + bool mIncreasePIN1:1; + bool mIncreasePIN2:1; + bool mIncreaseUPIN:1; + bool mIncreaseADM:1; + + // Padding out 4 bits + UINT8 mReserved3:4; + + eQMIUIMSecurityAttributes mDeactivateSecurityAttributes; + bool mDeactivatePIN1:1; + bool mDeactivatePIN2:1; + bool mDeactivateUPIN:1; + bool mDeactivateADM:1; + + // Padding out 4 bits + UINT8 mReserved4:4; + + eQMIUIMSecurityAttributes mActivateSecurityAttributes; + bool mActivatePIN1:1; + bool mActivatePIN2:1; + bool mActivateUPIN:1; + bool mActivateADM:1; + + // Padding out 4 bits + UINT8 mReserved5:4; + + UINT16 mValueLength; + + // This array must be the size specified by mValueLength + // UINT8 mValue[1]; +}; + +// Structure to describe response TLV 0x12 for UIMGetFileAttributes() +struct sUIMGetFileAttributesResponse_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x13 for UIMGetFileAttributes() +struct sUIMGetFileAttributesResponse_FileStatus +{ + eQMIUIMFilesStatus mFileStatus; +}; + +// Structure to describe indication TLV 0x01 for UIM GetFileAttributesIndication +struct sUIMGetFileAttributesIndication_OriginalToken +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x10 for UIM GetFileAttributesIndication +struct sUIMGetFileAttributesIndication_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe indication TLV 0x11 for UIM GetFileAttributesIndication +struct sUIMGetFileAttributesIndication_FileAttributes +{ + UINT16 mFileSize; + UINT16 mFileID; + eQMIUIMFileTypes mFileType; + UINT16 mRecordSize; + UINT16 mRecordCount; + eQMIUIMSecurityAttributes mReadSecurityAttributes; + bool mReadPIN1:1; + bool mReadPIN2:1; + bool mReadUPIN:1; + bool mReadADM:1; + + // Padding out 4 bits + UINT8 mReserved1:4; + + eQMIUIMSecurityAttributes mWriteSecurityAttributes; + bool mWritePIN1:1; + bool mWritePIN2:1; + bool mWriteUPIN:1; + bool mWriteADM:1; + + // Padding out 4 bits + UINT8 mReserved2:4; + + eQMIUIMSecurityAttributes mIncreaseSecurityAttributes; + bool mIncreasePIN1:1; + bool mIncreasePIN2:1; + bool mIncreaseUPIN:1; + bool mIncreaseADM:1; + + // Padding out 4 bits + UINT8 mReserved3:4; + + eQMIUIMSecurityAttributes mDeactivateSecurityAttributes; + bool mDeactivatePIN1:1; + bool mDeactivatePIN2:1; + bool mDeactivateUPIN:1; + bool mDeactivateADM:1; + + // Padding out 4 bits + UINT8 mReserved4:4; + + eQMIUIMSecurityAttributes mActivateSecurityAttributes; + bool mActivatePIN1:1; + bool mActivatePIN2:1; + bool mActivateUPIN:1; + bool mActivateADM:1; + + // Padding out 4 bits + UINT8 mReserved5:4; + + UINT16 mValueLength; + + // This array must be the size specified by mValueLength + // UINT8 mValue[1]; +}; + +// Structure to describe request TLV 0x01 for UIMSetPINProtection() +struct sUIMSetPINProtectionRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMSetPINProtection() +struct sUIMSetPINProtectionRequest_Protection +{ + eQMIUIMPINIDs mID; + eQMIUIMPINOperations mOperation; + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // char mPINValue[1]; +}; + +// Structure to describe request TLV 0x10 for UIMSetPINProtection() +struct sUIMSetPINProtectionRequest_KeyReferenceID +{ + eQMIUIMKeyReferenceID mKeyReferenceID; +}; + +// Structure to describe request TLV 0x11 for UIMSetPINProtection() +struct sUIMSetPINProtectionRequest_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x10 for UIMSetPINProtection() +struct sUIMSetPINProtectionResponse_Retries +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe response TLV 0x11 for UIMSetPINProtection() +struct sUIMSetPINProtectionResponse_EncryptedPIN1 +{ + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // UINT8 mValue[1]; +}; + +// Structure to describe response TLV 0x12 for UIMSetPINProtection() +struct sUIMSetPINProtectionResponse_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x13 for UIMSetPINProtection() +struct sUIMSetPINProtectionResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe indication TLV 0x01 for UIM SetPINProtectionIndication +struct sUIMSetPINProtectionIndication_OriginalToken +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x10 for UIM SetPINProtectionIndication +struct sUIMSetPINProtectionIndication_Retries +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe indication TLV 0x11 for UIM SetPINProtectionIndication +struct sUIMSetPINProtectionIndication_EncryptedPIN1 +{ + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // UINT8 mValue[1]; +}; + +// Structure to describe indication TLV 0x12 for UIM SetPINProtectionIndication +struct sUIMSetPINProtectionIndication_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe request TLV 0x01 for UIMVerifyPIN() +struct sUIMVerifyPINRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMVerifyPIN() +struct sUIMVerifyPINRequest_Verify +{ + eQMIUIMPINIDs mID; + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // char mPINValue[1]; +}; + +// Structure to describe request TLV 0x10 for UIMVerifyPIN() +struct sUIMVerifyPINRequest_EncryptedPIN1 +{ + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // UINT8 mValue[1]; +}; + +// Structure to describe request TLV 0x11 for UIMVerifyPIN() +struct sUIMVerifyPINRequest_KeyReferenceID +{ + eQMIUIMKeyReferenceID mKeyReferenceID; +}; + +// Structure to describe request TLV 0x12 for UIMVerifyPIN() +struct sUIMVerifyPINRequest_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x10 for UIMVerifyPIN() +struct sUIMVerifyPINResponse_Retries +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe response TLV 0x11 for UIMVerifyPIN() +struct sUIMVerifyPINResponse_EncryptedPIN1 +{ + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // UINT8 mValue[1]; +}; + +// Structure to describe response TLV 0x12 for UIMVerifyPIN() +struct sUIMVerifyPINResponse_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x13 for UIMVerifyPIN() +struct sUIMVerifyPINResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe indication TLV 0x01 for UIM VerifyPINIndication +struct sUIMVerifyPINIndication_OriginalToken +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x10 for UIM VerifyPINIndication +struct sUIMVerifyPINIndication_Retries +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe indication TLV 0x11 for UIM VerifyPINIndication +struct sUIMVerifyPINIndication_EncryptedPIN1 +{ + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // UINT8 mValue[1]; +}; + +// Structure to describe indication TLV 0x12 for UIM VerifyPINIndication +struct sUIMVerifyPINIndication_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe request TLV 0x01 for UIMUnblockPIN() +struct sUIMUnblockPINRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMUnblockPIN() +struct sUIMUnblockPINRequest_Unblock1 +{ + eQMIUIMPINIDs mID; + UINT8 mPUKLength; + + // This array must be the size specified by mPUKLength + // char mPUKValue[1]; +}; + +struct sUIMUnblockPINRequest_Unblock2 +{ + UINT8 mNewPINLength; + + // This array must be the size specified by mNewPINLength + // char mNewPINValue[1]; +}; + +struct sUIMUnblockPINRequest_Unblock +{ + sUIMUnblockPINRequest_Unblock1 mUIMUnblockPINRequest_Unblock1; + sUIMUnblockPINRequest_Unblock2 mUIMUnblockPINRequest_Unblock2; +}; + +// Structure to describe request TLV 0x10 for UIMUnblockPIN() +struct sUIMUnblockPINRequest_KeyReferenceID +{ + eQMIUIMKeyReferenceID mKeyReferenceID; +}; + +// Structure to describe request TLV 0x11 for UIMUnblockPIN() +struct sUIMUnblockPINRequest_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x10 for UIMUnblockPIN() +struct sUIMUnblockPINResponse_Retries +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe response TLV 0x11 for UIMUnblockPIN() +struct sUIMUnblockPINResponse_EncryptedPIN1 +{ + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // UINT8 mValue[1]; +}; + +// Structure to describe response TLV 0x12 for UIMUnblockPIN() +struct sUIMUnblockPINResponse_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x13 for UIMUnblockPIN() +struct sUIMUnblockPINResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe indication TLV 0x01 for UIM UnblockPINIndication +struct sUIMUnblockPINIndication_OriginalToken +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x10 for UIM UnblockPINIndication +struct sUIMUnblockPINIndication_Retries +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe indication TLV 0x11 for UIM UnblockPINIndication +struct sUIMUnblockPINIndication_EncryptedPIN1 +{ + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // UINT8 mValue[1]; +}; + +// Structure to describe indication TLV 0x12 for UIM UnblockPINIndication +struct sUIMUnblockPINIndication_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe request TLV 0x01 for UIMChangePIN() +struct sUIMChangePINRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMChangePIN() +struct sUIMChangePINRequest_Change1 +{ + eQMIUIMPINIDs mID; + UINT8 mOldPINLength; + + // This array must be the size specified by mOldPINLength + // char mOldPINValue[1]; +}; + +struct sUIMChangePINRequest_Change2 +{ + UINT8 mNewPINLength; + + // This array must be the size specified by mNewPINLength + // char mNewPINValue[1]; +}; + +struct sUIMChangePINRequest_Change +{ + sUIMChangePINRequest_Change1 mUIMChangePINRequest_Change1; + sUIMChangePINRequest_Change2 mUIMChangePINRequest_Change2; +}; + +// Structure to describe request TLV 0x10 for UIMChangePIN() +struct sUIMChangePINRequest_KeyReferenceID +{ + eQMIUIMKeyReferenceID mKeyReferenceID; +}; + +// Structure to describe request TLV 0x11 for UIMChangePIN() +struct sUIMChangePINRequest_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x10 for UIMChangePIN() +struct sUIMChangePINResponse_Retries +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe response TLV 0x11 for UIMChangePIN() +struct sUIMChangePINResponse_EncryptedPIN1 +{ + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // UINT8 mValue[1]; +}; + +// Structure to describe response TLV 0x12 for UIMChangePIN() +struct sUIMChangePINResponse_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x13 for UIMChangePIN() +struct sUIMChangePINResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe indication TLV 0x01 for UIM ChangePINIndication +struct sUIMChangePINIndication_OriginalToken +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x10 for UIM ChangePINIndication +struct sUIMChangePINIndication_Retries +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe indication TLV 0x11 for UIM ChangePINIndication +struct sUIMChangePINIndication_EncryptedPIN1 +{ + UINT8 mPINLength; + + // This array must be the size specified by mPINLength + // UINT8 mValue[1]; +}; + +// Structure to describe indication TLV 0x12 for UIM ChangePINIndication +struct sUIMChangePINIndication_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe request TLV 0x01 for UIMDepersonalization() +struct sUIMDepersonalizationRequest_Info +{ + eQMIUIMPersonalizationFeatures mFeature; + eQMIUIMCKSessionOperations mOperation; + UINT8 mCKLength; + + // This array must be the size specified by mCKLength + // char mCKValue[1]; +}; + +// Structure to describe response TLV 0x10 for UIMDepersonalization() +struct sUIMDepersonalizationResponse_Retries +{ + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; +}; + +// Structure to describe request TLV 0x01 for UIMRefreshRegister() +struct sUIMRefreshRegisterRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMRefreshRegister() +struct sUIMRefreshRegisterRequest_RefreshInfo +{ + eQMIUIMRegisterFlags mRegisterFlag; + INT8 mVoteForInitialization; + UINT16 mFileCount; + + struct sFile + { + UINT16 mFileID; + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // UINT16 mPath[1]; + }; + + // This array must be the size specified by mFileCount + // sFile mFiles[1]; +}; + +// Structure to describe request TLV 0x01 for UIMRefreshOK() +struct sUIMRefreshOKRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMRefreshOK() +struct sUIMRefreshOKRequest_RefreshOK +{ + INT8 mOKToRefresh; +}; + +// Structure to describe request TLV 0x01 for UIMRefreshComplete() +struct sUIMRefreshCompleteRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMRefreshComplete() +struct sUIMRefreshCompleteRequest_RefreshComplete +{ + INT8 mRefreshSuccessful; +}; + +// Structure to describe request TLV 0x01 for UIMGetLastRefreshEvent() +struct sUIMGetLastRefreshEventRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe response TLV 0x10 for UIMGetLastRefreshEvent() +struct sUIMGetLastRefreshEventResponse_RefreshEvent1 +{ + eQMIUIMRefreshStages mStage; + eQMIUIMRefreshModes mMode; + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +struct sUIMGetLastRefreshEventResponse_RefreshEvent2 +{ + UINT16 mFileCount; + + struct sFile + { + UINT16 mFileID; + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // UINT16 mPath[1]; + }; + + // This array must be the size specified by mFileCount + // sFile mFiles[1]; +}; + +struct sUIMGetLastRefreshEventResponse_RefreshEvent +{ + sUIMGetLastRefreshEventResponse_RefreshEvent1 mUIMGetLastRefreshEventResponse_RefreshEvent1; + sUIMGetLastRefreshEventResponse_RefreshEvent2 mUIMGetLastRefreshEventResponse_RefreshEvent2; +}; + +// Structure to describe request TLV 0x01 for UIMEventRegistration() +struct sUIMEventRegistrationRequest_Mask +{ + bool mCardStatus:1; + bool mSAPConnection:1; + bool mExtendedCardStatus:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; +}; + +// Structure to describe response TLV 0x10 for UIMEventRegistration() +struct sUIMEventRegistrationResponse_Mask +{ + bool mCardStatus:1; + bool mSAPConnection:1; + bool mExtendedCardStatus:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x10 for UIMGetCardStatus() +struct sUIMGetCardStatusRequest_Extended +{ + INT8 mReturnExtendedCardStatus; +}; + +// Structure to describe response TLV 0x10 for UIMGetCardStatus() +struct sUIMGetCardStatusResponse_Status1 +{ + UINT8 mPrimaryGWSlot; + UINT8 mPrimaryGWApplication; + UINT8 mPrimary1XSlot; + UINT8 mPrimary1XApplication; + UINT8 mSecondaryGWSlot; + UINT8 mSecondaryGWApplication; + UINT8 mSecondary1XSlot; + UINT8 mSecondary1XApplication; + UINT8 mSlotsAvailable; + eQMIUIMCardStates mCardState; + eQMIUIMPINStates mUPINState; + UINT8 mRemainingUPINVerifyRetries; + UINT8 mRemainingUPINUnblockRetries; + eQMIUIMCardErrorCodes mCardErrorCode; + UINT8 mApplicationsAvailable; + eQMIUIMApplicationTypes mApplicationType; + eQMIUIMApplicationStates mApplicationState; + eQMIUIMPersonalizationStates mPersonalizationState; + eQMIUIMPersonalizationFeatures mPersonalizationFeature; + UINT8 mRemainingPersonalizationVerifyRetries; + UINT8 mRemainingPersonalizationUnblockRetries; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +struct sUIMGetCardStatusResponse_Status2 +{ + INT8 mUPINReplacesPIN1; + eQMIUIMPINStates mPIN1State; + UINT8 mRemainingPIN1VerifyRetries; + UINT8 mRemainingPIN1UnblockRetries; + eQMIUIMPINStates mPIN2State; + UINT8 mRemainingPIN2VerifyRetries; + UINT8 mRemainingPIN2UnblockRetries; +}; + +struct sUIMGetCardStatusResponse_Status +{ + sUIMGetCardStatusResponse_Status1 mUIMGetCardStatusResponse_Status1; + sUIMGetCardStatusResponse_Status2 mUIMGetCardStatusResponse_Status2; +}; + +// Structure to describe response TLV 0x11 for UIMGetCardStatus() +struct sUIMGetCardStatusResponse_HotSwapStatus +{ + UINT8 mHotSwapLength; + + // This array must be the size specified by mHotSwapLength + // eQMIUIMHotSwap mHotSwap[1]; +}; + +// Structure to describe response TLV 0x12 for UIMGetCardStatus() +struct sUIMGetCardStatusResponse_ValidCardStatus +{ + UINT8 mCardStatusValidCount; + + // This array must be the size specified by mCardStatusValidCount + // INT8 mCardStatusValid[1]; +}; + +// Structure to describe response TLV 0x13 for UIMGetCardStatus() +struct sUIMGetCardStatusResponse_ExtendedStatus1 +{ + UINT8 mGWProvisioningApplications; + + struct sGWProvisioning + { + UINT8 mSlot; + UINT8 mApplication; + }; + + // This array must be the size specified by mGWProvisioningApplications + // sGWProvisioning mGWProvisionings[1]; +}; + +struct sUIMGetCardStatusResponse_ExtendedStatus2 +{ + UINT8 m1XProvisioningApplications; + + struct s1XProvisioning + { + UINT8 mSlot; + UINT8 mApplication; + }; + + // This array must be the size specified by m1XProvisioningApplications + // s1XProvisioning m1XProvisionings[1]; +}; + +struct sUIMGetCardStatusResponse_ExtendedStatus3 +{ + UINT8 mSlotsAvailable; + eQMIUIMCardStates mCardState; + eQMIUIMPINStates mUPINState; + UINT8 mRemainingUPINVerifyRetries; + UINT8 mRemainingUPINUnblockRetries; + eQMIUIMCardErrorCodes mCardErrorCode; + UINT8 mApplicationsAvailable; + eQMIUIMApplicationTypes mApplicationType; + eQMIUIMApplicationStates mApplicationState; + eQMIUIMPersonalizationStates mPersonalizationState; + eQMIUIMPersonalizationFeatures mPersonalizationFeature; + UINT8 mRemainingPersonalizationVerifyRetries; + UINT8 mRemainingPersonalizationUnblockRetries; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +struct sUIMGetCardStatusResponse_ExtendedStatus4 +{ + INT8 mUPINReplacesPIN1; + eQMIUIMPINStates mPIN1State; + UINT8 mRemainingPIN1VerifyRetries; + UINT8 mRemainingPIN1UnblockRetries; + eQMIUIMPINStates mPIN2State; + UINT8 mRemainingPIN2VerifyRetries; + UINT8 mRemainingPIN2UnblockRetries; +}; + +struct sUIMGetCardStatusResponse_ExtendedStatus +{ + sUIMGetCardStatusResponse_ExtendedStatus1 mUIMGetCardStatusResponse_ExtendedStatus1; + sUIMGetCardStatusResponse_ExtendedStatus2 mUIMGetCardStatusResponse_ExtendedStatus2; + sUIMGetCardStatusResponse_ExtendedStatus3 mUIMGetCardStatusResponse_ExtendedStatus3; + sUIMGetCardStatusResponse_ExtendedStatus4 mUIMGetCardStatusResponse_ExtendedStatus4; +}; + +// Structure to describe response TLV 0x14 for UIMGetCardStatus() +struct sUIMGetCardStatusResponse_ExtendedHotSwapStatus +{ + UINT8 mHotSwapLength; + + // This array must be the size specified by mHotSwapLength + // eQMIUIMHotSwap mHotSwap[1]; +}; + +// Structure to describe request TLV 0x01 for UIMPowerDown() +struct sUIMPowerDownRequest_Slot +{ + eQMIUIMSlots mSlot; +}; + +// Structure to describe request TLV 0x01 for UIMPowerUp() +struct sUIMPowerUpRequest_Slot +{ + eQMIUIMSlots mSlot; +}; + +// Structure to describe request TLV 0x10 for UIMPowerUp() +struct sUIMPowerUpRequest_IgnoreHotSwapSwitch +{ + INT8 mIgnoreHotSwapSwitch; +}; + +// Structure to describe indication TLV 0x10 for UIM CardStatusIndication +struct sUIMCardStatusIndication_Status1 +{ + UINT8 mPrimaryGWSlot; + UINT8 mPrimaryGWApplication; + UINT8 mPrimary1XSlot; + UINT8 mPrimary1XApplication; + UINT8 mSecondaryGWSlot; + UINT8 mSecondaryGWApplication; + UINT8 mSecondary1XSlot; + UINT8 mSecondary1XApplication; + UINT8 mSlotsAvailable; + eQMIUIMCardStates mCardState; + eQMIUIMPINStates mUPINState; + UINT8 mRemainingUPINVerifyRetries; + UINT8 mRemainingUPINUnblockRetries; + eQMIUIMCardErrorCodes mCardErrorCode; + UINT8 mApplicationsAvailable; + eQMIUIMApplicationTypes mApplicationType; + eQMIUIMApplicationStates mApplicationState; + eQMIUIMPersonalizationStates mPersonalizationState; + eQMIUIMPersonalizationFeatures mPersonalizationFeature; + UINT8 mRemainingPersonalizationVerifyRetries; + UINT8 mRemainingPersonalizationUnblockRetries; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +struct sUIMCardStatusIndication_Status2 +{ + INT8 mUPINReplacesPIN1; + eQMIUIMPINStates mPIN1State; + UINT8 mRemainingPIN1VerifyRetries; + UINT8 mRemainingPIN1UnblockRetries; + eQMIUIMPINStates mPIN2State; + UINT8 mRemainingPIN2VerifyRetries; + UINT8 mRemainingPIN2UnblockRetries; +}; + +struct sUIMCardStatusIndication_Status +{ + sUIMCardStatusIndication_Status1 mUIMCardStatusIndication_Status1; + sUIMCardStatusIndication_Status2 mUIMCardStatusIndication_Status2; +}; + +// Structure to describe indication TLV 0x11 for UIM CardStatusIndication +struct sUIMCardStatusIndication_ValidCardStatus +{ + UINT8 mCardStatusValidCount; + + // This array must be the size specified by mCardStatusValidCount + // INT8 mCardStatusValid[1]; +}; + +// Structure to describe indication TLV 0x12 for UIM CardStatusIndication +struct sUIMCardStatusIndication_ExtendedStatus1 +{ + UINT8 mGWProvisioningApplications; + + struct sGWProvisioning + { + UINT8 mSlot; + UINT8 mApplication; + }; + + // This array must be the size specified by mGWProvisioningApplications + // sGWProvisioning mGWProvisionings[1]; +}; + +struct sUIMCardStatusIndication_ExtendedStatus2 +{ + UINT8 m1XProvisioningApplications; + + struct s1XProvisioning + { + UINT8 mSlot; + UINT8 mApplication; + }; + + // This array must be the size specified by m1XProvisioningApplications + // s1XProvisioning m1XProvisionings[1]; +}; + +struct sUIMCardStatusIndication_ExtendedStatus3 +{ + UINT8 mSlotsAvailable; + eQMIUIMCardStates mCardState; + eQMIUIMPINStates mUPINState; + UINT8 mRemainingUPINVerifyRetries; + UINT8 mRemainingUPINUnblockRetries; + eQMIUIMCardErrorCodes mCardErrorCode; + UINT8 mApplicationsAvailable; + eQMIUIMApplicationTypes mApplicationType; + eQMIUIMApplicationStates mApplicationState; + eQMIUIMPersonalizationStates mPersonalizationState; + eQMIUIMPersonalizationFeatures mPersonalizationFeature; + UINT8 mRemainingPersonalizationVerifyRetries; + UINT8 mRemainingPersonalizationUnblockRetries; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +struct sUIMCardStatusIndication_ExtendedStatus4 +{ + INT8 mUPINReplacesPIN1; + eQMIUIMPINStates mPIN1State; + UINT8 mRemainingPIN1VerifyRetries; + UINT8 mRemainingPIN1UnblockRetries; + eQMIUIMPINStates mPIN2State; + UINT8 mRemainingPIN2VerifyRetries; + UINT8 mRemainingPIN2UnblockRetries; +}; + +struct sUIMCardStatusIndication_ExtendedStatus +{ + sUIMCardStatusIndication_ExtendedStatus1 mUIMCardStatusIndication_ExtendedStatus1; + sUIMCardStatusIndication_ExtendedStatus2 mUIMCardStatusIndication_ExtendedStatus2; + sUIMCardStatusIndication_ExtendedStatus3 mUIMCardStatusIndication_ExtendedStatus3; + sUIMCardStatusIndication_ExtendedStatus4 mUIMCardStatusIndication_ExtendedStatus4; +}; + +// Structure to describe indication TLV 0x10 for UIM RefreshIndication +struct sUIMRefreshIndication_RefreshEvent1 +{ + eQMIUIMRefreshStages mStage; + eQMIUIMRefreshModes mMode; + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +struct sUIMRefreshIndication_RefreshEvent2 +{ + UINT16 mFileCount; + + struct sFile + { + UINT16 mFileID; + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // UINT16 mPath[1]; + }; + + // This array must be the size specified by mFileCount + // sFile mFiles[1]; +}; + +struct sUIMRefreshIndication_RefreshEvent +{ + sUIMRefreshIndication_RefreshEvent1 mUIMRefreshIndication_RefreshEvent1; + sUIMRefreshIndication_RefreshEvent2 mUIMRefreshIndication_RefreshEvent2; +}; + +// Structure to describe request TLV 0x01 for UIMAuthenticate() +struct sUIMAuthenticateRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMAuthenticate() +struct sUIMAuthenticateRequest_Data +{ + eQMIUIMAuthenticationContexts mContext; + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe request TLV 0x10 for UIMAuthenticate() +struct sUIMAuthenticateRequest_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe response TLV 0x10 for UIMAuthenticate() +struct sUIMAuthenticateResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe response TLV 0x11 for UIMAuthenticate() +struct sUIMAuthenticateResponse_Data +{ + UINT16 mContentLength; + + // This array must be the size specified by mContentLength + // UINT8 mContent[1]; +}; + +// Structure to describe response TLV 0x12 for UIMAuthenticate() +struct sUIMAuthenticateResponse_ResponseInIndication +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x01 for UIM AuthenticateIndication +struct sUIMAuthenticateIndication_OriginalToken +{ + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x10 for UIM AuthenticateIndication +struct sUIMAuthenticateIndication_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe indication TLV 0x11 for UIM AuthenticateIndication +struct sUIMAuthenticateIndication_Data +{ + UINT16 mContentLength; + + // This array must be the size specified by mContentLength + // UINT8 mContent[1]; +}; + +// Structure to describe request TLV 0x01 for UIMCloseSession() +struct sUIMCloseSessionRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x01 for UIMGetServiceStatus() +struct sUIMGetServiceStatusRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMGetServiceStatus() +struct sUIMGetServiceStatusRequest_Mask +{ + bool mFDNStatus:1; + bool mHiddenKeyPINStatus:1; + bool mIndexInTheEFDIR:1; + bool mESNStatus:1; + bool mACLStatus:1; + + // Padding out 27 bits + UINT8 mReserved1:3; + UINT8 mReserved2[3]; +}; + +// Structure to describe response TLV 0x10 for UIMGetServiceStatus() +struct sUIMGetServiceStatusResponse_FDNStatus +{ + eQMIUIMFDNStatusValues mFDNStatus; +}; + +// Structure to describe response TLV 0x11 for UIMGetServiceStatus() +struct sUIMGetServiceStatusResponse_HiddenKeyStatus +{ + eQMIUIMHiddenKeyStatusValues mHiddenKeyStatus; +}; + +// Structure to describe response TLV 0x12 for UIMGetServiceStatus() +struct sUIMGetServiceStatusResponse_Index +{ + UINT8 mEFDIRIndex; +}; + +// Structure to describe response TLV 0x13 for UIMGetServiceStatus() +struct sUIMGetServiceStatusResponse_ESNStatus +{ + INT8 mESNChanged; +}; + +// Structure to describe response TLV 0x14 for UIMGetServiceStatus() +struct sUIMGetServiceStatusResponse_ACLStatus +{ + eQMIUIMACLStatus mACLStatus; +}; + +// Structure to describe request TLV 0x01 for UIMSetServiceStatus() +struct sUIMSetServiceStatusRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x10 for UIMSetServiceStatus() +struct sUIMSetServiceStatusRequest_FDNStatus +{ + INT8 mEnableFDN; +}; + +// Structure to describe request TLV 0x11 for UIMSetServiceStatus() +struct sUIMSetServiceStatusRequest_ACLStatus +{ + INT8 mEnableACL; +}; + +// Structure to describe request TLV 0x01 for UIMChangeProvisioningSession() +struct sUIMChangeProvisioningSessionRequest_SessionChange +{ + eQMIUIMSessionTypes mSessionType; + eQMIUIMCKSessionOperations mOperation; +}; + +// Structure to describe request TLV 0x10 for UIMChangeProvisioningSession() +struct sUIMChangeProvisioningSessionRequest_AppInfo +{ + eQMIUIMSlots mSlot; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x01 for UIMGetLabel() +struct sUIMGetLabelRequest_AppInfo +{ + eQMIUIMSlots mSlot; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe response TLV 0x10 for UIMGetLabel() +struct sUIMGetLabelResponse_AppLabel +{ + UINT8 mLabelLength; + + // This array must be the size specified by mLabelLength + // char mLabelValue[1]; +}; + +// Structure to describe request TLV 0x10 for UIMGetConfiguration() +struct sUIMGetConfigurationRequest_Mask +{ + bool mAutomaticSelection:1; + bool mPersonalizationStatus:1; + bool mHaltSubscription:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; +}; + +// Structure to describe response TLV 0x10 for UIMGetConfiguration() +struct sUIMGetConfigurationResponse_AutoSelection +{ + INT8 mAutomaticProvisioningOn; +}; + +// Structure to describe response TLV 0x11 for UIMGetConfiguration() +struct sUIMGetConfigurationResponse_Personalization +{ + UINT8 mFeatureCount; + + struct sFeature + { + eQMIUIMPersonalizationFeatures mPersonalizationFeature; + UINT8 mRemainingVerifyRetries; + UINT8 mRemainingUnblockRetries; + }; + + // This array must be the size specified by mFeatureCount + // sFeature mFeatures[1]; +}; + +// Structure to describe response TLV 0x12 for UIMGetConfiguration() +struct sUIMGetConfigurationResponse_Subscription +{ + INT8 mPublishSubscription; +}; + +// Structure to describe request TLV 0x01 for UIMSendADPU() +struct sUIMSendADPURequest_Slot +{ + eQMIUIMSlots mSlot; +}; + +// Structure to describe request TLV 0x02 for UIMSendADPU() +struct sUIMSendADPURequest_APDU +{ + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe request TLV 0x10 for UIMSendADPU() +struct sUIMSendADPURequest_LogicalChannel +{ + UINT8 mChannelID; +}; + +// Structure to describe request TLV 0x11 for UIMSendADPU() +struct sUIMSendADPURequest_IntermediateProcedureBytes +{ + eQMIUIMAPDUResponseStatus mIntermediateProcedureBytes; +}; + +// Structure to describe response TLV 0x10 for UIMSendADPU() +struct sUIMSendADPUResponse_APDUResponse +{ + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe response TLV 0x11 for UIMSendADPU() +struct sUIMSendADPUResponse_LongAPDUResponse +{ + UINT16 mTotalLength; + UINT32 mIndicationToken; +}; + +// Structure to describe indication TLV 0x01 for UIM SendADPUIndication +struct sUIMSendADPUIndication_APDUResponseChunk +{ + UINT32 mIndicationToken; + UINT16 mTotalLength; + UINT16 mOffset; + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe request TLV 0x01 for UIMSAPConnection() +struct sUIMSAPConnectionRequest_Slot +{ + eQMIUIMConnectOperations mOperation; + eQMIUIMSlots mSlot; +}; + +// Structure to describe request TLV 0x10 for UIMSAPConnection() +struct sUIMSAPConnectionRequest_DisconnectMode +{ + eQMIUIMDisonnectModes mDisconnectMode; +}; + +// Structure to describe request TLV 0x11 for UIMSAPConnection() +struct sUIMSAPConnectionRequest_IntermediateGetResponse +{ + INT8 mReturnIntermediateGetResponse; +}; + +// Structure to describe request TLV 0x12 for UIMSAPConnection() +struct sUIMSAPConnectionRequest_SAPCondition +{ + eQMIUIMSAPConnectionConditions mSAPConnectionCondition; +}; + +// Structure to describe response TLV 0x10 for UIMSAPConnection() +struct sUIMSAPConnectionResponse_State +{ + eQMIUIMSAPStates mSAPState; +}; + +// Structure to describe request TLV 0x01 for UIMSAP() +struct sUIMSAPRequestRequest_Request +{ + eQMIUIMSAPRequests mSAPRequest; + eQMIUIMSlots mSlot; +}; + +// Structure to describe request TLV 0x10 for UIMSAP() +struct sUIMSAPRequestRequest_APDU +{ + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe response TLV 0x10 for UIMSAPRequest() +struct sUIMSAPRequestResponse_ATR +{ + UINT8 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe response TLV 0x11 for UIMSAPRequest() +struct sUIMSAPRequestResponse_APDU +{ + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe response TLV 0x12 for UIMSAPRequest() +struct sUIMSAPRequestResponse_CardReaderStatus +{ + UINT8 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe indication TLV 0x10 for UIM SAPConnectionIndication +struct sUIMSAPConnectionIndication_CardStatus +{ + eQMIUIMSAPStates mSAPState; + eQMIUIMSlots mSlot; +}; + +// Structure to describe request TLV 0x01 for UIMLogicalChannel() +struct sUIMLogicalChannelRequest_Slot +{ + eQMIUIMSlots mSlot; +}; + +// Structure to describe request TLV 0x10 for UIMLogicalChannel() +struct sUIMLogicalChannelRequest_AID +{ + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x11 for UIMLogicalChannel() +struct sUIMLogicalChannelRequest_LogicalChannel +{ + UINT8 mChannelID; +}; + +// Structure to describe request TLV 0x12 for UIMLogicalChannel() +struct sUIMLogicalChannelRequest_FileControlInformation +{ + eQMIUIMFileControlInformation mFileControlInformation; +}; + +// Structure to describe request TLV 0x13 for UIMLogicalChannel() +struct sUIMLogicalChannelRequest_TerminateApplication +{ + INT8 mTerminateApplication; +}; + +// Structure to describe response TLV 0x10 for UIMLogicalChannel() +struct sUIMLogicalChannelResponse_LogicalChannel +{ + UINT8 mChannelID; +}; + +// Structure to describe response TLV 0x11 for UIMLogicalChannel() +struct sUIMLogicalChannelResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe response TLV 0x12 for UIMLogicalChannel() +struct sUIMLogicalChannelResponse_ResponseToSelectCommand +{ + UINT8 mResponseLength; + + // This array must be the size specified by mResponseLength + // UINT8 mResponse[1]; +}; + +// Structure to describe request TLV 0x01 for UIMSubscriptionOK() +struct sUIMSubscriptionOKRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMSubscriptionOK() +struct sUIMSubscriptionOKRequest_Publish +{ + UINT8 mPathLength; +}; + +// Structure to describe request TLV 0x10 for UIMSubscriptionOK() +struct sUIMSubscriptionOKRequest_EncryptedIMSI +{ + UINT8 mEncryptedIMSILength; + + // This array must be the size specified by mEncryptedIMSILength + // UINT8 mEncryptedIMSI[1]; +}; + +// Structure to describe request TLV 0x01 for UIMGetATR() +struct sUIMGetATRRequest_Slot +{ + eQMIUIMSlots mSlot; +}; + +// Structure to describe response TLV 0x10 for UIMGetATR() +struct sUIMGetATRResponse_ATRValue +{ + UINT8 mATRValueLength; + + // This array must be the size specified by mATRValueLength + // UINT8 mATRValue[1]; +}; + +// Structure to describe request TLV 0x01 for UIMOpenLogicalChannel() +struct sUIMOpenLogicalChannelRequest_Slot +{ + eQMIUIMSlots mSlot; +}; + +// Structure to describe request TLV 0x10 for UIMOpenLogicalChannel() +struct sUIMOpenLogicalChannelRequest_AID +{ + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x11 for UIMOpenLogicalChannel() +struct sUIMOpenLogicalChannelRequest_FileControlInformation +{ + eQMIUIMFileControlInformation mFileControlInformation; +}; + +// Structure to describe response TLV 0x10 for UIMOpenLogicalChannel() +struct sUIMOpenLogicalChannelResponse_LogicalChannel +{ + UINT8 mChannelID; +}; + +// Structure to describe response TLV 0x11 for UIMOpenLogicalChannel() +struct sUIMOpenLogicalChannelResponse_CardResult +{ + UINT8 mSW1; + UINT8 mSW2; +}; + +// Structure to describe response TLV 0x12 for UIMOpenLogicalChannel() +struct sUIMOpenLogicalChannelResponse_ResponseToSelectCommand +{ + UINT8 mResponseLength; + + // This array must be the size specified by mResponseLength + // UINT8 mResponse[1]; +}; + +// Structure to describe indication TLV 0x01 for UIM SessionClosedIndication +struct sUIMSessionClosedIndication_Slot +{ + eQMIUIMSlots mSlot; +}; + +// Structure to describe indication TLV 0x10 for UIM SessionClosedIndication +struct sUIMSessionClosedIndication_AID +{ + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe indication TLV 0x11 for UIM SessionClosedIndication +struct sUIMSessionClosedIndication_LogicalChannel +{ + UINT8 mChannelID; +}; + +// Structure to describe request TLV 0x01 for UIMRefreshRegisterAll() +struct sUIMRefreshRegisterAllRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMRefreshRegisterAll() +struct sUIMRefreshRegisterAllRequest_Refresh +{ + eQMIUIMRegisterFlags mRegisterForRefresh; +}; + +// Structure to describe request TLV 0x10 for UIMRefreshRegisterAll() +struct sUIMRefreshRegisterAllRequest_VoteForInit +{ + INT8 mVoteForInitialization; +}; + +// Structure to describe request TLV 0x01 for UIMSetFileStatus() +struct sUIMSetFileStatusRequest_SessionInfo +{ + eQMIUIMSessionTypes mSessionType; + UINT8 mAIDLength; + + // This array must be the size specified by mAIDLength + // UINT8 mAID[1]; +}; + +// Structure to describe request TLV 0x02 for UIMSetFileStatus() +struct sUIMSetFileStatusRequest_FileID +{ + UINT16 mFileID; + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // UINT16 mPath[1]; +}; + +// Structure to describe request TLV 0x03 for UIMSetFileStatus() +struct sUIMSetFileStatusRequest_FileStatus +{ + eQMIUIMFilesStatus mFileStatus; +}; + +// Structure to describe request TLV 0x01 for PBMSetIndicationRegistrationState() +struct sPBMSetIndicationRegistrationStateRequest_Mask +{ + bool mRecordUpdate:1; + bool mPhonebookReady:1; + bool mEmergencyNumberList:1; + bool mHiddenRecordStatus:1; + bool mAASUpdate:1; + bool mGASUpdate:1; + + // Padding out 26 bits + UINT8 mReserved1:2; + UINT8 mReserved2[3]; +}; + +// Structure to describe response TLV 0x10 for PBMSetIndicationRegistrationState() +struct sPBMSetIndicationRegistrationStateResponse_Mask +{ + bool mRecordUpdate:1; + bool mPhonebookReady:1; + bool mEmergencyNumberList:1; + bool mHiddenRecordStatus:1; + bool mAASUpdate:1; + bool mGASUpdate:1; + + // Padding out 26 bits + UINT8 mReserved1:2; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x01 for PBMGetCapabilities() +struct sPBMGetCapabilitiesRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; +}; + +// Structure to describe response TLV 0x10 for PBMGetCapabilities() +struct sPBMGetCapabilitiesResponse_Basic +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT16 mRecordsUsed; + UINT16 mMaximumRecords; + UINT8 mMaximumNumberLength; + UINT8 mMaximumNameLength; +}; + +// Structure to describe response TLV 0x11 for PBMGetCapabilities() +struct sPBMGetCapabilitiesResponse_Group +{ + UINT8 mMaximumGroupsPossible; + UINT8 mMaximumGroupTagLength; +}; + +// Structure to describe response TLV 0x12 for PBMGetCapabilities() +struct sPBMGetCapabilitiesResponse_AdditionalNumber +{ + UINT8 mMaximumAdditionalNumbersPossible; + UINT8 mMaximumAdditionalNumberLength; + UINT8 mMaximumAdditionalNumberTagLength; +}; + +// Structure to describe response TLV 0x13 for PBMGetCapabilities() +struct sPBMGetCapabilitiesResponse_Email +{ + UINT8 mMaximumEmailsPossible; + UINT8 mMaximumEmailAddressLength; +}; + +// Structure to describe response TLV 0x14 for PBMGetCapabilities() +struct sPBMGetCapabilitiesResponse_SecondName +{ + UINT8 mMaximumSecondNameLength; +}; + +// Structure to describe response TLV 0x15 for PBMGetCapabilities() +struct sPBMGetCapabilitiesResponse_HiddenRecords +{ + INT8 mHiddenEntrySupported; +}; + +// Structure to describe response TLV 0x16 for PBMGetCapabilities() +struct sPBMGetCapabilitiesResponse_GAS +{ + UINT8 mMaximumGASStringLength; +}; + +// Structure to describe response TLV 0x17 for PBMGetCapabilities() +struct sPBMGetCapabilitiesResponse_AAS +{ + UINT8 mMaximumAASStringLength; +}; + +// Structure to describe response TLV 0x18 for PBMGetCapabilities() +struct sPBMGetCapabilitiesResponse_Protection +{ + eQMIPBMProtectionMethods mProtectionMethod; +}; + +// Structure to describe response TLV 0x19 for PBMGetCapabilities() +struct sPBMGetCapabilitiesResponse_Sets +{ + UINT16 mNumberOfPhonebookSets; +}; + +// Structure to describe response TLV 0x10 for PBMGetAllCapabilities() +struct sPBMGetAllCapabilitiesResponse_Basic +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mNumberOfPhonebooks; + + struct sPhonebook + { + eQMIPBMPhonebookTypes mPhonebookType; + UINT16 mRecordsUsed; + UINT16 mMaximumRecords; + UINT8 mMaximumNumberLength; + UINT8 mMaximumNameLength; + }; + + // This array must be the size specified by mNumberOfPhonebooks + // sPhonebook mPhonebooks[1]; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe response TLV 0x11 for PBMGetAllCapabilities() +struct sPBMGetAllCapabilitiesResponse_Group +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mMaximumGroupsPossible; + UINT8 mMaximumGroupTagLength; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe response TLV 0x12 for PBMGetAllCapabilities() +struct sPBMGetAllCapabilitiesResponse_AdditionalNumber +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mMaximumAdditionalNumbersPossible; + UINT8 mMaximumAdditionalNumberLength; + UINT8 mMaximumAdditionalNumberTagLength; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe response TLV 0x13 for PBMGetAllCapabilities() +struct sPBMGetAllCapabilitiesResponse_Email +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mMaximumEmailsPossible; + UINT8 mMaximumEmailAddressLength; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe response TLV 0x14 for PBMGetAllCapabilities() +struct sPBMGetAllCapabilitiesResponse_SecondName +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mMaximumSecondNameLength; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe response TLV 0x15 for PBMGetAllCapabilities() +struct sPBMGetAllCapabilitiesResponse_HiddenRecords +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + INT8 mHiddenEntrySupported; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe response TLV 0x16 for PBMGetAllCapabilities() +struct sPBMGetAllCapabilitiesResponse_GAS +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mMaximumRecords; + UINT8 mRecordsUsed; + UINT8 mMaximumGASStringLength; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe response TLV 0x17 for PBMGetAllCapabilities() +struct sPBMGetAllCapabilitiesResponse_AAS +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mMaximumRecords; + UINT8 mRecordsUsed; + UINT8 mMaximumAASStringLength; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe request TLV 0x01 for PBMReadRecords() +struct sPBMReadRecordsRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT16 mStartingRecordID; + UINT16 mEndingRecordID; +}; + +// Structure to describe response TLV 0x10 for PBMReadRecords() +struct sPBMReadRecordsResponse_RecordsRead +{ + UINT16 mNumberOfRecords; +}; + +// Structure to describe indication TLV 0x01 for PBM ReadRecordsIndication +struct sPBMReadRecordsIndication_Basic +{ + UINT16 mSequenceNumber; + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT8 mNumberOfRecords; + + struct sRecord1 + { + UINT16 mRecordID; + eQMIPBMNumberTypes mNumberType; + eQMIPBMNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + struct sRecord2 + { + UINT8 mNameLength; + + // This array must be the size (in BYTEs) specified by mNameLength + // wchar_t mName[1]; + }; + + struct sRecord + { + sRecord1 mRecord1; + sRecord2 mRecord2; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x10 for PBM ReadRecordsIndication +struct sPBMReadRecordsIndication_SecondName +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mSecondNameLength; + + // This array must be the size (in BYTEs) specified by mSecondNameLength + // wchar_t mSecondName[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x11 for PBM ReadRecordsIndication +struct sPBMReadRecordsIndication_AdditionalNumber +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mAdditionalNumberCount; + + struct sAdditionalNumber1 + { + eQMIPBMNumberTypes mNumberType; + eQMIPBMNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + struct sAdditionalNumber2 + { + UINT8 mTagID; + }; + + struct sAdditionalNumber + { + sAdditionalNumber1 mAdditionalNumber1; + sAdditionalNumber2 mAdditionalNumber2; + }; + + // This array must be the size specified by mAdditionalNumberCount + // sAdditionalNumber mAdditionalNumbers[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x12 for PBM ReadRecordsIndication +struct sPBMReadRecordsIndication_Group +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mGroupCount; + + // This array must be the size specified by mGroupCount + // UINT8 mGroupID[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x13 for PBM ReadRecordsIndication +struct sPBMReadRecordsIndication_Email +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mEmailCount; + + struct sEmail + { + UINT8 mAddressLength; + + // This array must be the size (in BYTEs) specified by mAddressLength + // wchar_t mAddress[1]; + }; + + // This array must be the size specified by mEmailCount + // sEmail mEmails[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x14 for PBM ReadRecordsIndication +struct sPBMReadRecordsIndication_Hidden +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + INT8 mHidden; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe request TLV 0x01 for PBMWriteRecord() +struct sPBMWriteRecordRequest_Info1 +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT16 mRecordID; + eQMIPBMNumberTypes mNumberType; + eQMIPBMNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; +}; + +struct sPBMWriteRecordRequest_Info2 +{ + UINT8 mNameLength; + + // This array must be the size (in BYTEs) specified by mNameLength + // wchar_t mName[1]; +}; + +struct sPBMWriteRecordRequest_Info +{ + sPBMWriteRecordRequest_Info1 mPBMWriteRecordRequest_Info1; + sPBMWriteRecordRequest_Info2 mPBMWriteRecordRequest_Info2; +}; + +// Structure to describe request TLV 0x10 for PBMWriteRecord() +struct sPBMWriteRecordRequest_SecondName +{ + UINT8 mNameLength; + + // This array must be the size (in BYTEs) specified by mNameLength + // wchar_t mName[1]; +}; + +// Structure to describe request TLV 0x11 for PBMWriteRecord() +struct sPBMWriteRecordRequest_AdditionalNumber +{ + UINT8 mAdditionalNumberCount; + + struct sAdditionalNumber1 + { + eQMIPBMNumberTypes mNumberType; + eQMIPBMNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + struct sAdditionalNumber2 + { + UINT8 mTagID; + }; + + struct sAdditionalNumber + { + sAdditionalNumber1 mAdditionalNumber1; + sAdditionalNumber2 mAdditionalNumber2; + }; + + // This array must be the size specified by mAdditionalNumberCount + // sAdditionalNumber mAdditionalNumbers[1]; +}; + +// Structure to describe request TLV 0x12 for PBMWriteRecord() +struct sPBMWriteRecordRequest_Group +{ + UINT8 mGroupCount; + + // This array must be the size specified by mGroupCount + // UINT8 mGroupID[1]; +}; + +// Structure to describe request TLV 0x13 for PBMWriteRecord() +struct sPBMWriteRecordRequest_Email +{ + UINT8 mEmailCount; + + struct sEmail + { + UINT8 mAddressLength; + + // This array must be the size (in BYTEs) specified by mAddressLength + // wchar_t mAddress[1]; + }; + + // This array must be the size specified by mEmailCount + // sEmail mEmails[1]; +}; + +// Structure to describe request TLV 0x14 for PBMWriteRecord() +struct sPBMWriteRecordRequest_Hidden +{ + INT8 mHidden; +}; + +// Structure to describe response TLV 0x10 for PBMWriteRecord() +struct sPBMWriteRecordResponse_Info +{ + UINT16 mRecordID; +}; + +// Structure to describe request TLV 0x01 for PBMDeleteRecord() +struct sPBMDeleteRecordRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT16 mRecordID; +}; + +// Structure to describe response TLV 0x10 for PBMDeleteRecord() +struct sPBMDeleteRecordResponse_Info +{ + UINT16 mRecordID; +}; + +// Structure to describe request TLV 0x01 for PBMDeleteAllRecords() +struct sPBMDeleteAllRecordsRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; +}; + +// Structure to describe request TLV 0x01 for PBMSearchRecords() +struct sPBMSearchRecordsRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; +}; + +// Structure to describe request TLV 0x10 for PBMSearchRecords() +struct sPBMSearchRecordsRequest_Number +{ + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; +}; + +// Structure to describe request TLV 0x11 for PBMSearchRecords() +struct sPBMSearchRecordsRequest_Name +{ + UINT8 mNameLength; + + // This array must be the size (in BYTEs) specified by mNameLength + // wchar_t mName[1]; +}; + +// Structure to describe response TLV 0x10 for PBMSearchRecords() +struct sPBMSearchRecordsResponse_List +{ + UINT16 mNumberOfRecordIDs; + + // This array must be the size specified by mNumberOfRecordIDs + // UINT16 mRecordID[1]; +}; + +// Structure to describe indication TLV 0x01 for PBM RecordUpdateIndication +struct sPBMRecordUpdateIndication_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + eQMIPBMOperations mOperation; + UINT16 mRecordID; +}; + +// Structure to describe indication TLV 0x01 for PBM RefreshIndication +struct sPBMRefreshIndication_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + eQMIPBMRefreshStatus mStatus; +}; + +// Structure to describe indication TLV 0x01 for PBM ReadyIndication +struct sPBMReadyIndication_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; +}; + +// Structure to describe indication TLV 0x01 for PBM EmergencyListIndication +struct sPBMEmergencyListIndication_HardCodedNumbers +{ + UINT8 mNumberCount; + + struct sNumber + { + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; +}; + +// Structure to describe indication TLV 0x10 for PBM EmergencyListIndication +struct sPBMEmergencyListIndication_NVNumbers +{ + UINT8 mNumberCount; + + struct sNumber + { + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; +}; + +// Structure to describe indication TLV 0x11 for PBM EmergencyListIndication +struct sPBMEmergencyListIndication_CardNumbers +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mNumberCount; + + struct sNumber + { + bool mPolice:1; + bool mAmbulance:1; + bool mFireBrigade:1; + bool mMarineGuard:1; + bool mMountainRescue:1; + bool mManualECall:1; + bool mAutomaticECall:1; + bool mSpare:1; + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe indication TLV 0x12 for PBM EmergencyListIndication +struct sPBMEmergencyListIndication_NetworkNumbers +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mNumberCount; + + struct sNumber + { + bool mPolice:1; + bool mAmbulance:1; + bool mFireBrigade:1; + bool mMarineGuard:1; + bool mMountainRescue:1; + bool mManualECall:1; + bool mAutomaticECall:1; + bool mSpare:1; + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe indication TLV 0x13 for PBM EmergencyListIndication +struct sPBMEmergencyListIndication_HardCodedNumbersEx +{ + UINT8 mNumberCount; + + struct sNumber + { + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; +}; + +// Structure to describe indication TLV 0x14 for PBM EmergencyListIndication +struct sPBMEmergencyListIndication_NVNumbersEx +{ + UINT8 mNumberCount; + + struct sNumber + { + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; +}; + +// Structure to describe indication TLV 0x01 for PBM AllReadyIndication +struct sPBMAllReadyIndication_Info +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + bool mAbbreviatedDialingNumber:1; + bool mFixedDialingNumber:1; + bool mMobileSubscriberIntegratedServicesDigitalNetwork:1; + bool mMailBoxDialingNumber:1; + bool mServiceDialingNumber:1; + bool mBarredDialingNumber:1; + bool mLastNumberDialed:1; + bool mMailBoxNumber:1; + + // Padding out 8 bits + UINT8 mReserved1; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe response TLV 0x10 for PBMGetEmergencyList() +struct sPBMGetEmergencyListResponse_HardCodedNumbers +{ + UINT8 mNumberCount; + + struct sNumber + { + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; +}; + +// Structure to describe response TLV 0x11 for PBMGetEmergencyList() +struct sPBMGetEmergencyListResponse_NVNumbers +{ + UINT8 mNumberCount; + + struct sNumber + { + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; +}; + +// Structure to describe response TLV 0x12 for PBMGetEmergencyList() +struct sPBMGetEmergencyListResponse_CardNumbers +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mNumberCount; + + struct sNumber + { + bool mPolice:1; + bool mAmbulance:1; + bool mFireBrigade:1; + bool mMarineGuard:1; + bool mMountainRescue:1; + bool mManualECall:1; + bool mAutomaticECall:1; + bool mSpare:1; + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe response TLV 0x13 for PBMGetEmergencyList() +struct sPBMGetEmergencyListResponse_NetworkNumbers +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mNumberCount; + + struct sNumber + { + bool mPolice:1; + bool mAmbulance:1; + bool mFireBrigade:1; + bool mMarineGuard:1; + bool mMountainRescue:1; + bool mManualECall:1; + bool mAutomaticECall:1; + bool mSpare:1; + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe response TLV 0x14 for PBMGetEmergencyList() +struct sPBMGetEmergencyListResponse_HardCodedNumbersEx +{ + UINT8 mNumberCount; + + struct sNumber + { + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; +}; + +// Structure to describe response TLV 0x15 for PBMGetEmergencyList() +struct sPBMGetEmergencyListResponse_NVNumbersEx +{ + UINT8 mNumberCount; + + struct sNumber + { + UINT8 mEmergencyNumberLength; + + // This array must be the size specified by mEmergencyNumberLength + // char mEmergencyNumber[1]; + }; + + // This array must be the size specified by mNumberCount + // sNumber mNumbers[1]; +}; + +// Structure to describe response TLV 0x10 for PBMGetAllGroups() +struct sPBMGetAllGroupsResponse_Groups +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mGroupCount; + + struct sGroup + { + UINT8 mGroupID; + UINT8 mGroupNameLength; + + // This array must be the size (in BYTEs) specified by mGroupNameLength + // wchar_t mGroupName[1]; + }; + + // This array must be the size specified by mGroupCount + // sGroup mGroups[1]; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe request TLV 0x01 for PBMSetGroupInfo() +struct sPBMSetGroupInfoRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMOperations mOperation; + UINT8 mGroupID; + UINT8 mGroupNameLength; + + // This array must be the size (in BYTEs) specified by mGroupNameLength + // wchar_t mGroupName[1]; +}; + +// Structure to describe response TLV 0x10 for PBMSetGroupInfo() +struct sPBMSetGroupInfoResponse_ID +{ + eQMIPBMSessionTypes mSessionType; + UINT8 mGroupID; +}; + +// Structure to describe request TLV 0x01 for PBMGetState() +struct sPBMGetStateRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; +}; + +// Structure to describe response TLV 0x10 for PBMGetStateInfo() +struct sPBMGetStateInfoResponse_State +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + eQMIPBMStates mState; +}; + +// Structure to describe request TLV 0x01 for PBMReadAllHiddenRecords() +struct sPBMReadAllHiddenRecordsRequest_Info +{ + eQMIPBMSessionTypes mSessionType; +}; + +// Structure to describe response TLV 0x10 for PBMReadAllHiddenRecords() +struct sPBMReadAllHiddenRecordsResponse_Records +{ + UINT16 mNumberOfRecords; +}; + +// Structure to describe indication TLV 0x01 for PBM HiddenRecordStatusIndication +struct sPBMHiddenRecordStatusIndication_Status +{ + eQMIPBMSessionTypes mSessionType; + INT8 mHiddenRecordsValid; +}; + +// Structure to describe request TLV 0x01 for PBMGetNextEmptyRecordID() +struct sPBMGetNextEmptyRecordIDRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT16 mRecordID; +}; + +// Structure to describe response TLV 0x10 for PBMGetNextEmptyRecordID() +struct sPBMGetNextEmptyRecordIDResponse_Info +{ + UINT16 mRecordID; +}; + +// Structure to describe request TLV 0x01 for PBMGetNextRecordID() +struct sPBMGetNextRecordIDRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT16 mRecordID; +}; + +// Structure to describe response TLV 0x10 for PBMGetNextRecordID() +struct sPBMGetNextRecordIDResponse_Info +{ + UINT16 mRecordID; +}; + +// Structure to describe response TLV 0x10 for PBMGetAASList() +struct sPBMGetAASListResponse_List +{ + UINT8 mNumberOfSessions; + + struct sSession + { + eQMIPBMSessionTypes mSessionType; + UINT8 mAASCount; + + struct sAAS + { + UINT8 mAASID; + UINT8 mAlphaStringLength; + + // This array must be the size (in BYTEs) specified by mAlphaStringLength + // wchar_t mAlphaString[1]; + }; + + // This array must be the size specified by mAASCount + // sAAS mAASs[1]; + }; + + // This array must be the size specified by mNumberOfSessions + // sSession mSessions[1]; +}; + +// Structure to describe request TLV 0x10 for PBMSetAAS() +struct sPBMSetAASRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMAASOperations mOperation; + UINT8 mAASID; + UINT8 mAlphaStringLength; + + // This array must be the size (in BYTEs) specified by mAlphaStringLength + // wchar_t mAlphaString[1]; +}; + +// Structure to describe response TLV 0x10 for PBMSetAAS() +struct sPBMSetAASResponse_Info +{ + eQMIPBMSessionTypes mSessionType; + UINT8 mAASID; +}; + +// Structure to describe indication TLV 0x01 for PBM AASChangeIndication +struct sPBMAASChangeIndication_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMOperations mOperation; + UINT8 mAASID; + UINT8 mAlphaStringLength; + + // This array must be the size (in BYTEs) specified by mAlphaStringLength + // wchar_t mAlphaString[1]; +}; + +// Structure to describe indication TLV 0x10 for PBM AASChangeIndication +struct sPBMAASChangeIndication_ExtendedAAS +{ + UINT8 mExtendedStringLength; + + // This array must be the size (in BYTEs) specified by mExtendedStringLength + // wchar_t mExtendedString[1]; +}; + +// Structure to describe indication TLV 0x01 for PBM GASChangeIndication +struct sPBMGASChangeIndication_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMOperations mOperation; + UINT8 mGASID; + UINT8 mGroupNameLength; + + // This array must be the size (in BYTEs) specified by mGroupNameLength + // wchar_t mGroupName[1]; +}; + +// Structure to describe indication TLV 0x10 for PBM GASChangeIndication +struct sPBMGASChangeIndication_ExtendedGAS +{ + UINT8 mExtendedStringLength; + + // This array must be the size (in BYTEs) specified by mExtendedStringLength + // wchar_t mExtendedString[1]; +}; + +// Structure to describe request TLV 0x10 for PBMBindSubscription() +struct sPBMBindSubscriptionRequest_Type +{ + eQMIPBMSubscriptionTypes mSubscriptionType; +}; + +// Structure to describe response TLV 0x10 for PBMGetSubscription() +struct sPBMGetSubscriptionResponse_Type +{ + eQMIPBMSubscriptionTypes mSubscriptionType; +}; + +// Structure to describe request TLV 0x01 for PBMSetCapabilitiesReadOperation() +struct sPBMSetCapabilitiesReadOperationRequest_Session +{ + eQMIPBMSessionTypes mSessionType; +}; + +// Structure to describe request TLV 0x10 for PBMSetCapabilitiesReadOperation() +struct sPBMSetCapabilitiesReadOperationRequest_StartID +{ + UINT16 mStartingSetID; +}; + +// Structure to describe request TLV 0x11 for PBMSetCapabilitiesReadOperation() +struct sPBMSetCapabilitiesReadOperationRequest_EndID +{ + UINT16 mEndingSetID; +}; + +// Structure to describe response TLV 0x10 for PBMSetCapabilitiesReadOperation() +struct sPBMSetCapabilitiesReadOperationResponse_Sets +{ + UINT16 mNumberOfPhonebookSets; +}; + +// Structure to describe indication TLV 0x01 for PBM SetCapabilitiesReadOperationIndication +struct sPBMSetCapabilitiesReadOperationIndication_Data +{ + eQMIPBMSessionTypes mSessionType; + UINT8 mNumberOfPhonebookSets; + + struct sSet + { + UINT16 mSetID; + UINT8 mNumberOfUSIMFiles; + + struct sField + { + eQMIPBMFieldTypes mFieldID; + eQMIPBMMappingTypes mMappingType; + UINT16 mNumberOfRecords; + UINT16 mNumberOfFreeRecords; + UINT16 mRecordLength; + }; + + // This array must be the size specified by mNumberOfUSIMFiles + // sField mFields[1]; + }; + + // This array must be the size specified by mNumberOfPhonebookSets + // sSet mSets[1]; +}; + +// Structure to describe request TLV 0x01 for PBMExtendedReadRecords() +struct sPBMExtendedReadRecordsRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT16 mStartingRecordID; + UINT16 mEndingRecordID; +}; + +// Structure to describe response TLV 0x10 for PBMExtendedReadRecords() +struct sPBMExtendedReadRecordsResponse_RecordsRead +{ + UINT16 mNumberOfRecords; +}; + +// Structure to describe indication TLV 0x01 for PBM ExtendedReadRecordsIndication +struct sPBMExtendedReadRecordsIndication_Basic +{ + UINT16 mSequenceNumber; + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT8 mNumberOfRecords; + + struct sRecord1 + { + UINT16 mRecordID; + eQMIPBMNumberTypes mNumberType; + eQMIPBMNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + struct sRecord2 + { + UINT8 mNameLength; + + // This array must be the size (in BYTEs) specified by mNameLength + // wchar_t mName[1]; + }; + + struct sRecord + { + sRecord1 mRecord1; + sRecord2 mRecord2; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x10 for PBM ExtendedReadRecordsIndication +struct sPBMExtendedReadRecordsIndication_SecondName +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mSecondNameLength; + + // This array must be the size (in BYTEs) specified by mSecondNameLength + // wchar_t mSecondName[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x11 for PBM ExtendedReadRecordsIndication +struct sPBMExtendedReadRecordsIndication_AdditionalNumber +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mAdditionalNumberCount; + + struct sAdditionalNumber1 + { + eQMIPBMNumberTypes mNumberType; + eQMIPBMNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + struct sAdditionalNumber2 + { + UINT8 mTagID; + }; + + struct sAdditionalNumber + { + sAdditionalNumber1 mAdditionalNumber1; + sAdditionalNumber2 mAdditionalNumber2; + }; + + // This array must be the size specified by mAdditionalNumberCount + // sAdditionalNumber mAdditionalNumbers[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x12 for PBM ExtendedReadRecordsIndication +struct sPBMExtendedReadRecordsIndication_Group +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mGroupCount; + + // This array must be the size specified by mGroupCount + // UINT8 mGroupID[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x13 for PBM ExtendedReadRecordsIndication +struct sPBMExtendedReadRecordsIndication_Email +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mEmailCount; + + struct sEmail + { + UINT8 mAddressLength; + + // This array must be the size (in BYTEs) specified by mAddressLength + // wchar_t mAddress[1]; + }; + + // This array must be the size specified by mEmailCount + // sEmail mEmails[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x14 for PBM ExtendedReadRecordsIndication +struct sPBMExtendedReadRecordsIndication_Hidden +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + INT8 mHidden; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe request TLV 0x01 for PBMExtendedWriteRecord() +struct sPBMExtendedWriteRecordRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT16 mRecordID; +}; + +// Structure to describe request TLV 0x10 for PBMExtendedWriteRecord() +struct sPBMExtendedWriteRecordRequest_PrimaryNumber +{ + eQMIPBMNumberTypes mNumberType; + eQMIPBMNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; +}; + +// Structure to describe request TLV 0x11 for PBMExtendedWriteRecord() +struct sPBMExtendedWriteRecordRequest_PrimaryName +{ + UINT8 mNameLength; + + // This array must be the size (in BYTEs) specified by mNameLength + // wchar_t mName[1]; +}; + +// Structure to describe request TLV 0x12 for PBMExtendedWriteRecord() +struct sPBMExtendedWriteRecordRequest_SecondName +{ + UINT8 mNameLength; + + // This array must be the size (in BYTEs) specified by mNameLength + // wchar_t mName[1]; +}; + +// Structure to describe request TLV 0x13 for PBMExtendedWriteRecord() +struct sPBMExtendedWriteRecordRequest_AdditionalNumber +{ + UINT8 mAdditionalNumberCount; + + struct sAdditionalNumber1 + { + eQMIPBMNumberTypes mNumberType; + eQMIPBMNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + struct sAdditionalNumber2 + { + UINT8 mTagID; + }; + + struct sAdditionalNumber + { + sAdditionalNumber1 mAdditionalNumber1; + sAdditionalNumber2 mAdditionalNumber2; + }; + + // This array must be the size specified by mAdditionalNumberCount + // sAdditionalNumber mAdditionalNumbers[1]; +}; + +// Structure to describe request TLV 0x14 for PBMExtendedWriteRecord() +struct sPBMExtendedWriteRecordRequest_Group +{ + UINT8 mGroupCount; + + // This array must be the size specified by mGroupCount + // UINT8 mGroupID[1]; +}; + +// Structure to describe request TLV 0x15 for PBMExtendedWriteRecord() +struct sPBMExtendedWriteRecordRequest_Email +{ + UINT8 mEmailCount; + + struct sEmail + { + UINT8 mAddressLength; + + // This array must be the size (in BYTEs) specified by mAddressLength + // wchar_t mAddress[1]; + }; + + // This array must be the size specified by mEmailCount + // sEmail mEmails[1]; +}; + +// Structure to describe request TLV 0x16 for PBMExtendedWriteRecord() +struct sPBMExtendedWriteRecordRequest_Hidden +{ + INT8 mHidden; +}; + +// Structure to describe response TLV 0x10 for PBMExtendedWriteRecord() +struct sPBMExtendedWriteRecordResponse_Info +{ + UINT16 mRecordID; +}; + +// Structure to describe request TLV 0x01 for PBMExtendedSearchRecords() +struct sPBMExtendedSearchRecordsRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; +}; + +// Structure to describe request TLV 0x10 for PBMExtendedSearchRecords() +struct sPBMExtendedSearchRecordsRequest_Number +{ + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; +}; + +// Structure to describe request TLV 0x11 for PBMExtendedSearchRecords() +struct sPBMExtendedSearchRecordsRequest_Name +{ + UINT8 mNameLength; + + // This array must be the size (in BYTEs) specified by mNameLength + // wchar_t mName[1]; +}; + +// Structure to describe response TLV 0x10 for PBMExtendedSearchRecords() +struct sPBMExtendedSearchRecordsResponse_List +{ + UINT16 mNumberOfRecordIDs; + + // This array must be the size specified by mNumberOfRecordIDs + // UINT16 mRecordID[1]; +}; + +// Structure to describe request TLV 0x01 for PBMExtendedReadAllHiddenRecords() +struct sPBMExtendedReadAllHiddenRecordsRequest_Info +{ + eQMIPBMSessionTypes mSessionType; +}; + +// Structure to describe response TLV 0x10 for PBMExtendedReadAllHiddenRecords() +struct sPBMExtendedReadAllHiddenRecordsResponse_Records +{ + UINT16 mNumberOfRecords; +}; + +// Structure to describe indication TLV 0x01 for PBM SIMInitializationDoneIndication +struct sPBMSIMInitializationDoneIndication_Slot +{ + UINT32 mSlotID; +}; + +// Structure to describe request TLV 0x01 for PBMReadUndecodedRecords() +struct sPBMReadUndecodedRecordsRequest_Info +{ + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT16 mStartingRecordID; + UINT16 mEndingRecordID; +}; + +// Structure to describe response TLV 0x10 for PBMReadUndecodedRecords() +struct sPBMReadUndecodedRecordsResponse_RecordsRead +{ + UINT16 mNumberOfRecords; +}; + +// Structure to describe indication TLV 0x01 for PBM ReadUndecodedRecordsIndication +struct sPBMReadUndecodedRecordsIndication_Basic +{ + UINT16 mSequenceNumber; + eQMIPBMSessionTypes mSessionType; + eQMIPBMPhonebookTypes mPhonebookType; + UINT8 mNumberOfRecords; + + struct sRecord1 + { + UINT16 mRecordID; + eQMIPBMNumberTypes mNumberType; + eQMIPBMNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + struct sRecord2 + { + UINT8 mNameLength; + + // This array must be the size (in BYTEs) specified by mNameLength + // wchar_t mName[1]; + }; + + struct sRecord + { + sRecord1 mRecord1; + sRecord2 mRecord2; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x10 for PBM ReadUndecodedRecordsIndication +struct sPBMReadUndecodedRecordsIndication_SecondName +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mSecondNameLength; + + // This array must be the size (in BYTEs) specified by mSecondNameLength + // wchar_t mSecondName[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x11 for PBM ReadUndecodedRecordsIndication +struct sPBMReadUndecodedRecordsIndication_AdditionalNumber +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mAdditionalNumberCount; + + struct sAdditionalNumber1 + { + eQMIPBMNumberTypes mNumberType; + eQMIPBMNumberPlans mNumberPlan; + UINT8 mNumberLength; + + // This array must be the size specified by mNumberLength + // char mNumber[1]; + }; + + struct sAdditionalNumber2 + { + UINT8 mTagID; + }; + + struct sAdditionalNumber + { + sAdditionalNumber1 mAdditionalNumber1; + sAdditionalNumber2 mAdditionalNumber2; + }; + + // This array must be the size specified by mAdditionalNumberCount + // sAdditionalNumber mAdditionalNumbers[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x12 for PBM ReadUndecodedRecordsIndication +struct sPBMReadUndecodedRecordsIndication_Group +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mGroupCount; + + // This array must be the size specified by mGroupCount + // UINT8 mGroupID[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x13 for PBM ReadUndecodedRecordsIndication +struct sPBMReadUndecodedRecordsIndication_Email +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + UINT8 mEmailCount; + + struct sEmail + { + UINT8 mAddressLength; + + // This array must be the size (in BYTEs) specified by mAddressLength + // wchar_t mAddress[1]; + }; + + // This array must be the size specified by mEmailCount + // sEmail mEmails[1]; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe indication TLV 0x14 for PBM ReadUndecodedRecordsIndication +struct sPBMReadUndecodedRecordsIndication_Hidden +{ + UINT8 mNumberOfRecords; + + struct sRecord + { + UINT16 mRecordID; + INT8 mHidden; + }; + + // This array must be the size specified by mNumberOfRecords + // sRecord mRecords[1]; +}; + +// Structure to describe request TLV 0x01 for LOCClientRevision() +struct sLOCClientRevisionRequest_Revision +{ + UINT32 mRevision; +}; + +// Structure to describe request TLV 0x01 for LOCRegisterEvents() +struct sLOCRegisterEventsRequest_EventRegistrationMask +{ + bool mPositionReport:1; + bool mGNSSSatelliteInfo:1; + bool mNMEA:1; + bool mNINotifyVerifyRequest:1; + bool mInjectTimeRequest:1; + bool mInjectPredictedOrbitsRequest:1; + bool mInjectPositionRequest:1; + bool mEngineState:1; + bool mFixSessionState:1; + bool mWiFiRequest:1; + bool mSensorStreamingReadyStatus:1; + bool mTimeSyncRequest:1; + bool mSetSPIStreamingReport:1; + bool mLocationServerConnectionRequest:1; + bool mNIGeofenceNotification:1; + bool mGeofenceGeneralAlert:1; + bool mGeofenceBreachNotification:1; + bool mPedometerControl:1; + bool mMotionDataControl:1; + + // Padding out 45 bits + UINT8 mReserved1:5; + UINT8 mReserved2[5]; +}; + +// Structure to describe request TLV 0x01 for LOCStart() +struct sLOCStartRequest_SessionID +{ + UINT8 mSessionID; +}; + +// Structure to describe request TLV 0x10 for LOCStart() +struct sLOCStartRequest_FixRecurrenceType +{ + eQMILOCFixRecurrenceType mFixRecurrenceType; +}; + +// Structure to describe request TLV 0x11 for LOCStart() +struct sLOCStartRequest_HorizontalAccuracy +{ + eQMILOCHorizontalAccuracy mHorizontalAccuracy; +}; + +// Structure to describe request TLV 0x12 for LOCStart() +struct sLOCStartRequest_EnableIntermediateReports +{ + eQMILOCIntermediateReportState mEnableIntermediateReports; +}; + +// Structure to describe request TLV 0x13 for LOCStart() +struct sLOCStartRequest_MinimumIntervalBetweenPositionReports +{ + UINT32 mMinimumTimeIntervalMilliseconds; +}; + +// Structure to describe request TLV 0x14 for LOCStart() +struct sLOCStartRequest_ApplicationID1 +{ + UINT8 mApplicationProviderLength; + + // This array must be the size specified by mApplicationProviderLength + // char mApplicationProvider[1]; +}; + +struct sLOCStartRequest_ApplicationID2 +{ + UINT8 mApplicationNameLength; + + // This array must be the size specified by mApplicationNameLength + // char mApplicationName[1]; +}; + +struct sLOCStartRequest_ApplicationID3 +{ + INT8 mApplicationVersionValid; + UINT8 mApplicationVersionLength; + + // This array must be the size specified by mApplicationVersionLength + // char mApplicationVersion[1]; +}; + +struct sLOCStartRequest_ApplicationID +{ + sLOCStartRequest_ApplicationID1 mLOCStartRequest_ApplicationID1; + sLOCStartRequest_ApplicationID2 mLOCStartRequest_ApplicationID2; + sLOCStartRequest_ApplicationID3 mLOCStartRequest_ApplicationID3; +}; + +// Structure to describe request TLV 0x01 for LOCStop() +struct sLOCStopRequest_SessionID +{ + UINT8 mSessionID; +}; + +// Structure to describe indication TLV 0x01 for LOC PositionReportIndication +struct sLOCPositionReportIndication_SessionStatus +{ + eQMILOCSessionStatus mSessionStatus; +}; + +// Structure to describe indication TLV 0x02 for LOC PositionReportIndication +struct sLOCPositionReportIndication_SessionID +{ + UINT8 mSessionID; +}; + +// Structure to describe indication TLV 0x10 for LOC PositionReportIndication +struct sLOCPositionReportIndication_Latitude +{ + double mLatitudeDegrees; +}; + +// Structure to describe indication TLV 0x11 for LOC PositionReportIndication +struct sLOCPositionReportIndication_Longitude +{ + double mLongitudeDegrees; +}; + +// Structure to describe indication TLV 0x12 for LOC PositionReportIndication +struct sLOCPositionReportIndication_HorizontalUncertaintyCircular +{ + float mHorizontalUncertaintyCircularMeters; +}; + +// Structure to describe indication TLV 0x13 for LOC PositionReportIndication +struct sLOCPositionReportIndication_HorizontalUncertaintyEllipticalMinor +{ + float mHorizontalUncertaintyEllipticalMinorMeters; +}; + +// Structure to describe indication TLV 0x14 for LOC PositionReportIndication +struct sLOCPositionReportIndication_HorizontalUncertaintyEllipticalMajor +{ + float mHorizontalUncertaintyEllipticalMajorMeters; +}; + +// Structure to describe indication TLV 0x15 for LOC PositionReportIndication +struct sLOCPositionReportIndication_HorizontalUncertaintyEllipticalAzimuth +{ + float mHorizontalUncertaintyEllipticalAzimuthDecimalDegrees; +}; + +// Structure to describe indication TLV 0x16 for LOC PositionReportIndication +struct sLOCPositionReportIndication_HorizontalConfidence +{ + UINT8 mHorizontalConfidencePercent; +}; + +// Structure to describe indication TLV 0x17 for LOC PositionReportIndication +struct sLOCPositionReportIndication_HorizontalReliability +{ + eQMILOCReliability mHorizontalReliability; +}; + +// Structure to describe indication TLV 0x18 for LOC PositionReportIndication +struct sLOCPositionReportIndication_HorizontalSpeed +{ + float mHorizontalSpeedMetersSecond; +}; + +// Structure to describe indication TLV 0x19 for LOC PositionReportIndication +struct sLOCPositionReportIndication_SpeedUncertainty +{ + float mSpeedUncertaintyMetersSecond; +}; + +// Structure to describe indication TLV 0x1A for LOC PositionReportIndication +struct sLOCPositionReportIndication_AltitudeFromEllipsoid +{ + float mAltitudeFromEllipsoidMeters; +}; + +// Structure to describe indication TLV 0x1B for LOC PositionReportIndication +struct sLOCPositionReportIndication_AltitudeFromSeaLevel +{ + float mAltitudeFromSeaLevelMeters; +}; + +// Structure to describe indication TLV 0x1C for LOC PositionReportIndication +struct sLOCPositionReportIndication_VerticalUncertainty +{ + float mVerticalUncertaintyMeters; +}; + +// Structure to describe indication TLV 0x1D for LOC PositionReportIndication +struct sLOCPositionReportIndication_VerticalConfidence +{ + UINT8 mVerticalConfidencePercent; +}; + +// Structure to describe indication TLV 0x1E for LOC PositionReportIndication +struct sLOCPositionReportIndication_VerticalReliability +{ + eQMILOCReliability mVerticalReliability; +}; + +// Structure to describe indication TLV 0x1F for LOC PositionReportIndication +struct sLOCPositionReportIndication_VerticalSpeed +{ + float mVerticalSpeedMetersSecond; +}; + +// Structure to describe indication TLV 0x20 for LOC PositionReportIndication +struct sLOCPositionReportIndication_Heading +{ + float mHeadingDegrees; +}; + +// Structure to describe indication TLV 0x21 for LOC PositionReportIndication +struct sLOCPositionReportIndication_HeadingUncertainty +{ + float mHeadingUncertaintyDegrees; +}; + +// Structure to describe indication TLV 0x22 for LOC PositionReportIndication +struct sLOCPositionReportIndication_MagneticDeviation +{ + float mMagneticDeviation; +}; + +// Structure to describe indication TLV 0x23 for LOC PositionReportIndication +struct sLOCPositionReportIndication_TechnologyUsed +{ + bool mSatellite:1; + bool mCellular:1; + bool mWiFi:1; + bool mSensors:1; + bool mReferenceLocation:1; + bool mInjectedPosition:1; + bool mAFLT:1; + bool mHybrid:1; + + // Padding out 24 bits + UINT8 mReserved1[3]; +}; + +// Structure to describe indication TLV 0x24 for LOC PositionReportIndication +struct sLOCPositionReportIndication_DilutionOfPrecision +{ + float mPositionDilutionOfPrecision; + float mHorizontalDilutionOfPrecision; + float mVerticalDilutionOfPrecision; +}; + +// Structure to describe indication TLV 0x25 for LOC PositionReportIndication +struct sLOCPositionReportIndication_UTCTimestamp +{ + UINT64 mUTCTimestampMilliseconds; +}; + +// Structure to describe indication TLV 0x26 for LOC PositionReportIndication +struct sLOCPositionReportIndication_LeapSeconds +{ + UINT8 mLeapSeconds; +}; + +// Structure to describe indication TLV 0x27 for LOC PositionReportIndication +struct sLOCPositionReportIndication_GPSTime +{ + UINT16 mGPSWeeks; + UINT32 mGPSTimeOfWeekMilliseconds; +}; + +// Structure to describe indication TLV 0x28 for LOC PositionReportIndication +struct sLOCPositionReportIndication_TimeUncertainty +{ + float mTimeUncertaintyMilliseconds; +}; + +// Structure to describe indication TLV 0x29 for LOC PositionReportIndication +struct sLOCPositionReportIndication_TimeSource +{ + eQMILOCTimeSource mTimeSource; +}; + +// Structure to describe indication TLV 0x2A for LOC PositionReportIndication +struct sLOCPositionReportIndication_SensorDataUsage +{ + bool mAccelerometerUsed:1; + bool mGyroUsed:1; + + // Padding out 30 bits + UINT8 mReserved1:6; + UINT8 mReserved2[3]; + + bool mAidedHeading:1; + bool mAidedSpeed:1; + bool mAidedPosition:1; + bool mAidedVelocity:1; + + // Padding out 28 bits + UINT8 mReserved3:4; + UINT8 mReserved4[3]; +}; + +// Structure to describe indication TLV 0x2B for LOC PositionReportIndication +struct sLOCPositionReportIndication_SessionFixCount +{ + UINT32 mSessionFixCount; +}; + +// Structure to describe indication TLV 0x2C for LOC PositionReportIndication +struct sLOCPositionReportIndication_SatellitesUsed +{ + UINT8 mSatellitesUsedCount; + + // This array must be the size specified by mSatellitesUsedCount + // UINT16 mSatellitesUsed[1]; +}; + +// Structure to describe indication TLV 0x2D for LOC PositionReportIndication +struct sLOCPositionReportIndication_AltitudeAssumed +{ + INT8 mAltitudeAssumed; +}; + +// Structure to describe indication TLV 0x01 for LOC GNSSSatelliteInfoIndication +struct sLOCGNSSSatelliteInfoIndication_AltitudeSource +{ + eQMILOCAltitudeAssumed mAltitudeAssumed; +}; + +// Structure to describe indication TLV 0x10 for LOC GNSSSatelliteInfoIndication +struct sLOCGNSSSatelliteInfoIndication_SatelliteInfo +{ + UINT8 mSatelliteInfoCount; + bool mValidSystem:1; + bool mValidGNSSSatelliteID:1; + bool mValidHealthStatus:1; + bool mValidProcessStatus:1; + bool mValidSatelliteInfoMask:1; + bool mValidElevation:1; + bool mValidAzimuth:1; + bool mValidSignalToNoiseRatio:1; + + // Padding out 24 bits + UINT8 mReserved1[3]; + + eQMILOCSystem mSystem; + UINT16 mGNSSSatelliteID; + eQMILOCHealthStatus mHealthStatus; + eQMILOCSatelliteStatus mSatelliteStatus; + bool mHasEphemeris:1; + bool mHasAlmanac:1; + + // Padding out 6 bits + UINT8 mReserved2:6; + + float mElevationDegrees; + float mAzimuthDegrees; + float mSignalToNoiseRatiodBHz; +}; + +// Structure to describe indication TLV 0x01 for LOC NMEAIndication +struct sLOCNMEAIndication_NMEAString +{ + // String is variable length, but must be size of the container + // char mNMEAString[1]; +}; + +// Structure to describe request TLV 0x01 for LOCNetworkInitiated() +struct sLOCNetworkInitiatedRequestIndication_NotificationType +{ + eQMILOCNotificationType mNotificationType; +}; + +// Structure to describe request TLV 0x10 for LOCNetworkInitiated() +struct sLOCNetworkInitiatedRequestIndication_VxRequest1 +{ + INT8 mPositionQoSIncluded; + UINT8 mPositionQoSTimeoutSeconds; + UINT32 mMaxNumberOfFixes; + UINT32 mTimeBetweenFixesSeconds; + eQMILOCPositionMode mPosistionMode; + eQMILOCEncodingScheme mEncodingScheme; + UINT8 mRequestorIDLength; + + // This array must be the size specified by mRequestorIDLength + // UINT8 mRequestorID[1]; +}; + +struct sLOCNetworkInitiatedRequestIndication_VxRequest2 +{ + UINT16 mUserResponseTimerSeconds; +}; + +struct sLOCNetworkInitiatedRequestIndication_VxRequest +{ + sLOCNetworkInitiatedRequestIndication_VxRequest1 mLOCNetworkInitiatedRequestIndication_VxRequest1; + sLOCNetworkInitiatedRequestIndication_VxRequest2 mLOCNetworkInitiatedRequestIndication_VxRequest2; +}; + +// Structure to describe request TLV 0x11 for LOCNetworkInitiated() +struct sLOCNetworkInitiatedRequestIndication_SUPLRequest1 +{ + bool mValidServerInfo:1; + bool mValidSessionID:1; + bool mValidHash:1; + bool mValidPositionMethod:1; + bool mValidDataCodingScheme:1; + bool mValidRequestorID:1; + bool mValidClientName:1; + bool mValidQualityOfPosition:1; + bool mValidUserResponseTimer:1; + + // Padding out 23 bits + UINT8 mReserved1:7; + UINT8 mReserved2[2]; + + bool mIPv4:1; + bool mIPv6:1; + bool mURL:1; + + // Padding out 5 bits + UINT8 mReserved3:5; + + UINT32 mIPv4Address; + UINT16 mIPv4Port; + UINT8 mIPv6Address[16]; + UINT32 mIPv6Port; + UINT8 mURLAddressLength; + + // This array must be the size specified by mURLAddressLength + // char mURLAddress[1]; +}; + +struct sLOCNetworkInitiatedRequestIndication_SUPLRequest2 +{ + UINT8 mSUPLSessionID[4]; + UINT8 mSUPLHash[8]; + eQMILOCPosition mPositionMethod; + eQMILOCDataCodingScheme mDataCodingScheme; + eQMILOCFormatType mRequestorIDFormatType; + UINT8 mRequestorIDFormattedStringLength; + + // This array must be the size specified by mRequestorIDFormattedStringLength + // UINT8 mRequestorIDFormattedString[1]; +}; + +struct sLOCNetworkInitiatedRequestIndication_SUPLRequest3 +{ + eQMILOCFormatType mClientNameFormatType; + UINT8 mClientNameFormattedStringLength; + + // This array must be the size specified by mClientNameFormattedStringLength + // UINT8 mClientNameFormattedString[1]; +}; + +struct sLOCNetworkInitiatedRequestIndication_SUPLRequest4 +{ + bool mQoPHorizontalAccelerationValid:1; + bool mQoPVerticalAccelerationValid:1; + bool mQoPMaximumAge:1; + bool mQoPDelayValid:1; + + // Padding out 4 bits + UINT8 mReserved4:4; + + UINT8 mHorizontalAccuracyMeters; + UINT8 mVerticalAccuracyMeters; + UINT16 mMaximumLocationAgeSeconds; + UINT8 mDelaySeconds; + UINT16 mUserResponseTimerSeconds; +}; + +struct sLOCNetworkInitiatedRequestIndication_SUPLRequest +{ + sLOCNetworkInitiatedRequestIndication_SUPLRequest1 mLOCNetworkInitiatedRequestIndication_SUPLRequest1; + sLOCNetworkInitiatedRequestIndication_SUPLRequest2 mLOCNetworkInitiatedRequestIndication_SUPLRequest2; + sLOCNetworkInitiatedRequestIndication_SUPLRequest3 mLOCNetworkInitiatedRequestIndication_SUPLRequest3; + sLOCNetworkInitiatedRequestIndication_SUPLRequest4 mLOCNetworkInitiatedRequestIndication_SUPLRequest4; +}; + +// Structure to describe request TLV 0x12 for LOCNetworkInitiated() +struct sLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest1 +{ + bool mValidInvokeID:1; + bool mValidDataCodingScheme:1; + bool mValidNotificationText:1; + bool mValidClientAddress:1; + bool mValidLocationType:1; + bool mValidRequestorID:1; + bool mValidCodewordString:1; + bool mValidServiceTypeMask:1; + bool mValidUserResponseTImer:1; + + // Padding out 7 bits + UINT8 mReserved1:7; + + UINT8 mInvokeID; + eQMILOCDataCodingScheme mDataCodingScheme; + UINT8 mNotificationTextLength; + + // This array must be the size specified by mNotificationTextLength + // UINT8 mNotificationText[1]; +}; + +struct sLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest2 +{ + UINT8 mClientAddressLength; + + // This array must be the size specified by mClientAddressLength + // UINT8 mClientAddress[1]; +}; + +struct sLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest3 +{ + eQMILOCLocationType mLocationType; + eQMILOCDataCodingScheme mRequestorIDDataCodingScheme; + UINT8 mRequestorIDCodedStingLength; + + // This array must be the size specified by mRequestorIDCodedStingLength + // UINT8 mRequestorIDCodedString[1]; +}; + +struct sLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest4 +{ + eQMILOCDataCodingScheme mCodewordStringDataCodingScheme; + UINT8 mCodewordStringCodedStringLength; + + // This array must be the size specified by mCodewordStringCodedStringLength + // UINT8 mCodewordStringCodedString[1]; +}; + +struct sLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest5 +{ + UINT8 mServiceTypeID; + UINT16 mUserResponseTimerSeconds; +}; + +struct sLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest +{ + sLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest1 mLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest1; + sLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest2 mLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest2; + sLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest3 mLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest3; + sLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest4 mLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest4; + sLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest5 mLOCNetworkInitiatedRequestIndication_UMTSControlPlaneRequest5; +}; + +// Structure to describe request TLV 0x13 for LOCNetworkInitiated() +struct sLOCNetworkInitiatedRequestIndication_ServiceInteractionRequest +{ + INT8 mPositionQoSIncluded; + UINT8 mPositionQoSTimeoutSeconds; + UINT32 mMaxNumberOfFixes; + UINT32 mTimeBetweenFixesSeconds; + eQMILOCPositionMode mPosistionMode; + eQMILOCEncodingScheme mEncodingScheme; + UINT8 mRequestorIDLength; + UINT8 mRequestorID; + UINT16 mUserResponseTimerSeconds; + eQMILOCServiceInteractionType mServiceInteractionType; +}; + +// Structure to describe request TLV 0x14 for LOCNetworkInitiated() +struct sLOCNetworkInitiatedRequestIndication_SUPLVersion2Extension +{ + bool mWLAN:1; + bool mGSM:1; + bool mWCDMA:1; + bool mCDMA:1; + bool mHRDP:1; + bool mUMB:1; + bool mLTE:1; + bool mWIMAX:1; + bool mHISTORIC:1; + bool mNONSVRV:1; + + // Padding out 6 bits + UINT8 mReserved1:6; + + eQMILOCTriggerType mTriggerType; + bool mGPS:1; + bool mGLONASS:1; + bool mGALILEO:1; + bool mSBAS:1; + bool mQZSS:1; + bool mMODERNGPS:1; + + // Padding out 10 bits + UINT8 mReserved2:2; + UINT8 mReserved3; +}; + +// Structure to describe request TLV 0x15 for LOCNetworkInitiated() +struct sLOCNetworkInitiatedRequestIndication_SUPLEmergencyNotification +{ + UINT8 mESULPURLLength; + + // This array must be the size specified by mESULPURLLength + // char mESULPURL[1]; +}; + +// Structure to describe indication TLV 0x10 for LOC InjectTimeIndication +struct sLOCInjectTimeIndication_TimeServerInfo +{ + UINT32 mDelayThresholdMilliseconds; + UINT8 mServerListLength; + + struct sServer + { + UINT8 mServerURLLength; + + // This array must be the size specified by mServerURLLength + // char mServerURL[1]; + }; + + // This array must be the size specified by mServerListLength + // sServer mServers[1]; +}; + +// Structure to describe indication TLV 0x01 for LOC InjectPredictedOrbitsIndication +struct sLOCInjectPredictedOrbitsIndication_AllowedSize +{ + UINT32 mMaximumFileSizeBytes; + UINT32 mMaximumPartSizeBytes; +}; + +// Structure to describe indication TLV 0x10 for LOC InjectPredictedOrbitsIndication +struct sLOCInjectPredictedOrbitsIndication_ServerList +{ + UINT8 mServerListLength; + + struct sServer + { + UINT8 mServerURLLength; + + // This array must be the size specified by mServerURLLength + // char mServerURL[1]; + }; + + // This array must be the size specified by mServerListLength + // sServer mServers[1]; +}; + +// Structure to describe indication TLV 0x01 for LOC InjectPositionIndication +struct sLOCInjectPositionIndication_Latitude +{ + double mLatitudeDegrees; +}; + +// Structure to describe indication TLV 0x02 for LOC InjectPositionIndication +struct sLOCInjectPositionIndication_Longitude +{ + double mLongitudeDegrees; +}; + +// Structure to describe indication TLV 0x03 for LOC InjectPositionIndication +struct sLOCInjectPositionIndication_HorizontalUncertaintyCircular +{ + float mHorizontalUncertaintyCircularMeters; +}; + +// Structure to describe indication TLV 0x04 for LOC InjectPositionIndication +struct sLOCInjectPositionIndication_UTCTimestamp +{ + UINT64 mUTCTimestampMilliseconds; +}; + +// Structure to describe indication TLV 0x01 for LOC EngineStateIndication +struct sLOCEngineStateIndication_EngineState +{ + eQMILOCEngineState mEngineState; +}; + +// Structure to describe indication TLV 0x01 for LOC FixSessionStateIndication +struct sLOCFixSessionStateIndication_SessionState +{ + eQMILOCSessionState mSessionState; +}; + +// Structure to describe indication TLV 0x10 for LOC FixSessionStateIndication +struct sLOCFixSessionStateIndication_SessionID +{ + UINT8 mSessionID; +}; + +// Structure to describe request TLV 0x01 for LOCWiFi() +struct sLOCWiFiRequestIndication_RequestType +{ + eQMILOCRequestType mRequestType; +}; + +// Structure to describe request TLV 0x10 for LOCWiFi() +struct sLOCWiFiRequestIndication_TimeBetweenFixes +{ + UINT16 mTimeBetweenFixesMilliseconds; +}; + +// Structure to describe indication TLV 0x10 for LOC SensorStreamingReadyStatusIndication +struct sLOCSensorStreamingReadyStatusIndication_AccelerometerReady +{ + INT8 mReadyForInjection; + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe indication TLV 0x11 for LOC SensorStreamingReadyStatusIndication +struct sLOCSensorStreamingReadyStatusIndication_GyrometerReady +{ + INT8 mReadyForInjection; + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe indication TLV 0x12 for LOC SensorStreamingReadyStatusIndication +struct sLOCSensorStreamingReadyStatusIndication_AccelerometerTempReady +{ + INT8 mReadyForInjection; + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe indication TLV 0x13 for LOC SensorStreamingReadyStatusIndication +struct sLOCSensorStreamingReadyStatusIndication_GyrometerTempReady +{ + INT8 mReadyForInjection; + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe request TLV 0x01 for LOCTimeSync() +struct sLOCTimeSyncRequestIndication_ReferenceCounter +{ + UINT32 mReferenceCounter; +}; + +// Structure to describe indication TLV 0x01 for LOC SetSPIStreamingReportIndication +struct sLOCSetSPIStreamingReportIndication_SPIRequests +{ + INT8 mEnableSPIRequests; +}; + +// Structure to describe request TLV 0x01 for LOCLocationServerConnection() +struct sLOCLocationServerConnectionRequestIndication_ConnectionHandle +{ + UINT32 mConnectionHandle; +}; + +// Structure to describe request TLV 0x02 for LOCLocationServerConnection() +struct sLOCLocationServerConnectionRequestIndication_ConnectionRequestType +{ + eQMILOCConnectionRequestType mConnectionRequestType; +}; + +// Structure to describe request TLV 0x03 for LOCLocationServerConnection() +struct sLOCLocationServerConnectionRequestIndication_WWANType +{ + eQMILOCWWANType mWWANType; +}; + +// Structure to describe indication TLV 0x02 for LOC GetServiceRevisionIndication +struct sLOCGetServiceRevisionIndication_MinorRevision +{ + UINT32 mRevision; +}; + +// Structure to describe indication TLV 0x10 for LOC GetServiceRevisionIndication +struct sLOCGetServiceRevisionIndication_GNSSMeasurementEngineFirmwareVersion +{ + // String is variable length, but must be size of the container + // char mFirmwareVersion[1]; +}; + +// Structure to describe indication TLV 0x11 for LOC GetServiceRevisionIndication +struct sLOCGetServiceRevisionIndication_GNSSHostedSoftwareVersion +{ + // String is variable length, but must be size of the container + // char mSoftwareVersion[1]; +}; + +// Structure to describe indication TLV 0x12 for LOC GetServiceRevisionIndication +struct sLOCGetServiceRevisionIndication_GNSSSoftwareVersion +{ + // String is variable length, but must be size of the container + // char mSoftwareVersion[1]; +}; + +// Structure to describe indication TLV 0x10 for LOC GetFixCriteriaIndication +struct sLOCGetFixCriteriaIndication_HorizontalAccuracy +{ + eQMILOCHorizontalAccuracy mHorizontalAccuracy; +}; + +// Structure to describe indication TLV 0x11 for LOC GetFixCriteriaIndication +struct sLOCGetFixCriteriaIndication_IntermediateFixes +{ + eQMILOCIntermediateReportState mEnableIntermediateReports; +}; + +// Structure to describe indication TLV 0x12 for LOC GetFixCriteriaIndication +struct sLOCGetFixCriteriaIndication_MinimumIntervalBetweenFixes +{ + UINT32 mMinimumTimeIntervalMilliseconds; +}; + +// Structure to describe indication TLV 0x13 for LOC GetFixCriteriaIndication +struct sLOCGetFixCriteriaIndication_ApplicationID1 +{ + UINT8 mApplicationProviderLength; + + // This array must be the size specified by mApplicationProviderLength + // char mApplicationProvider[1]; +}; + +struct sLOCGetFixCriteriaIndication_ApplicationID2 +{ + UINT8 mApplicationNameLength; + + // This array must be the size specified by mApplicationNameLength + // char mApplicationName[1]; +}; + +struct sLOCGetFixCriteriaIndication_ApplicationID3 +{ + INT8 mApplicationVersionValid; + UINT8 mApplicationVersionLength; + + // This array must be the size specified by mApplicationVersionLength + // char mApplicationVersion[1]; +}; + +struct sLOCGetFixCriteriaIndication_ApplicationID +{ + sLOCGetFixCriteriaIndication_ApplicationID1 mLOCGetFixCriteriaIndication_ApplicationID1; + sLOCGetFixCriteriaIndication_ApplicationID2 mLOCGetFixCriteriaIndication_ApplicationID2; + sLOCGetFixCriteriaIndication_ApplicationID3 mLOCGetFixCriteriaIndication_ApplicationID3; +}; + +// Structure to describe request TLV 0x01 for LOCProvideNIUserResponse() +struct sLOCProvideNIUserResponseRequest_UserResponse +{ + eQMILOCUserResponse mUserResponse; +}; + +// Structure to describe request TLV 0x02 for LOCProvideNIUserResponse() +struct sLOCProvideNIUserResponseRequest_NotificationType +{ + eQMILOCNotificationType mNotificationType; +}; + +// Structure to describe request TLV 0x10 for LOCProvideNIUserResponse() +struct sLOCProvideNIUserResponseRequest_VxRequest1 +{ + INT8 mPositionQoSIncluded; + UINT8 mPositionQoSTimeoutSeconds; + UINT32 mMaxNumberOfFixes; + UINT32 mTimeBetweenFixesSeconds; + eQMILOCPositionMode mPosistionMode; + eQMILOCEncodingScheme mEncodingScheme; + UINT8 mRequestorIDLength; + + // This array must be the size specified by mRequestorIDLength + // UINT8 mRequestorID[1]; +}; + +struct sLOCProvideNIUserResponseRequest_VxRequest2 +{ + UINT16 mUserResponseTimerSeconds; +}; + +struct sLOCProvideNIUserResponseRequest_VxRequest +{ + sLOCProvideNIUserResponseRequest_VxRequest1 mLOCProvideNIUserResponseRequest_VxRequest1; + sLOCProvideNIUserResponseRequest_VxRequest2 mLOCProvideNIUserResponseRequest_VxRequest2; +}; + +// Structure to describe request TLV 0x11 for LOCProvideNIUserResponse() +struct sLOCProvideNIUserResponseRequest_SUPLRequest1 +{ + bool mValidServerInfo:1; + bool mValidSessionID:1; + bool mValidHash:1; + bool mValidPositionMethod:1; + bool mValidDataCodingScheme:1; + bool mValidRequestorID:1; + bool mValidClientName:1; + bool mValidQualityOfPosition:1; + bool mValidUserResponseTimer:1; + + // Padding out 23 bits + UINT8 mReserved1:7; + UINT8 mReserved2[2]; + + bool mIPv4:1; + bool mIPv6:1; + bool mURL:1; + + // Padding out 5 bits + UINT8 mReserved3:5; + + UINT32 mIPv4Address; + UINT16 mIPv4Port; + UINT8 mIPv6Address[16]; + UINT32 mIPv6Port; + UINT8 mURLAddressLength; + + // This array must be the size specified by mURLAddressLength + // char mURLAddress[1]; +}; + +struct sLOCProvideNIUserResponseRequest_SUPLRequest2 +{ + UINT8 mSUPLSessionID[4]; + UINT8 mSUPLHash[8]; + eQMILOCPosition mPositionMethod; + eQMILOCDataCodingScheme mDataCodingScheme; + eQMILOCFormatType mRequestorIDFormatType; + UINT8 mRequestorIDFormattedStringLength; + + // This array must be the size specified by mRequestorIDFormattedStringLength + // UINT8 mRequestorIDFormattedString[1]; +}; + +struct sLOCProvideNIUserResponseRequest_SUPLRequest3 +{ + eQMILOCFormatType mClientNameFormatType; + UINT8 mClientNameFormattedStringLength; + + // This array must be the size specified by mClientNameFormattedStringLength + // UINT8 mClientNameFormattedString[1]; +}; + +struct sLOCProvideNIUserResponseRequest_SUPLRequest4 +{ + bool mQoPHorizontalAccelerationValid:1; + bool mQoPVerticalAccelerationValid:1; + bool mQoPMaximumAge:1; + bool mQoPDelayValid:1; + + // Padding out 4 bits + UINT8 mReserved4:4; + + UINT8 mHorizontalAccuracyMeters; + UINT8 mVerticalAccuracyMeters; + UINT16 mMaximumLocationAgeSeconds; + UINT8 mDelaySeconds; + UINT16 mUserResponseTimerSeconds; +}; + +struct sLOCProvideNIUserResponseRequest_SUPLRequest +{ + sLOCProvideNIUserResponseRequest_SUPLRequest1 mLOCProvideNIUserResponseRequest_SUPLRequest1; + sLOCProvideNIUserResponseRequest_SUPLRequest2 mLOCProvideNIUserResponseRequest_SUPLRequest2; + sLOCProvideNIUserResponseRequest_SUPLRequest3 mLOCProvideNIUserResponseRequest_SUPLRequest3; + sLOCProvideNIUserResponseRequest_SUPLRequest4 mLOCProvideNIUserResponseRequest_SUPLRequest4; +}; + +// Structure to describe request TLV 0x12 for LOCProvideNIUserResponse() +struct sLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest1 +{ + bool mValidInvokeID:1; + bool mValidDataCodingScheme:1; + bool mValidNotificationText:1; + bool mValidClientAddress:1; + bool mValidLocationType:1; + bool mValidRequestorID:1; + bool mValidCodewordString:1; + bool mValidServiceTypeMask:1; + bool mValidUserResponseTImer:1; + + // Padding out 7 bits + UINT8 mReserved1:7; + + UINT8 mInvokeID; + eQMILOCDataCodingScheme mDataCodingScheme; + UINT8 mNotificationTextLength; + + // This array must be the size specified by mNotificationTextLength + // UINT8 mNotificationText[1]; +}; + +struct sLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest2 +{ + UINT8 mClientAddressLength; + + // This array must be the size specified by mClientAddressLength + // UINT8 mClientAddress[1]; +}; + +struct sLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest3 +{ + eQMILOCLocationType mLocationType; + eQMILOCDataCodingScheme mRequestorIDDataCodingScheme; + UINT8 mRequestorIDCodedStingLength; + + // This array must be the size specified by mRequestorIDCodedStingLength + // UINT8 mRequestorIDCodedString[1]; +}; + +struct sLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest4 +{ + eQMILOCDataCodingScheme mCodewordStringDataCodingScheme; + UINT8 mCodewordStringCodedStringLength; + + // This array must be the size specified by mCodewordStringCodedStringLength + // UINT8 mCodewordStringCodedString[1]; +}; + +struct sLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest5 +{ + UINT8 mServiceTypeID; + UINT16 mUserResponseTimerSeconds; +}; + +struct sLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest +{ + sLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest1 mLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest1; + sLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest2 mLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest2; + sLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest3 mLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest3; + sLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest4 mLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest4; + sLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest5 mLOCProvideNIUserResponseRequest_UMTSControlPlaneRequest5; +}; + +// Structure to describe request TLV 0x13 for LOCProvideNIUserResponse() +struct sLOCProvideNIUserResponseRequest_ServiceInteractionRequest +{ + INT8 mPositionQoSIncluded; + UINT8 mPositionQoSTimeoutSeconds; + UINT32 mMaxNumberOfFixes; + UINT32 mTimeBetweenFixesSeconds; + eQMILOCPositionMode mPosistionMode; + eQMILOCEncodingScheme mEncodingScheme; + UINT8 mRequestorIDLength; + UINT8 mRequestorID; + UINT16 mUserResponseTimerSeconds; + eQMILOCServiceInteractionType mServiceInteractionType; +}; + +// Structure to describe request TLV 0x14 for LOCProvideNIUserResponse() +struct sLOCProvideNIUserResponseRequest_SUPLVersion2Extension +{ + bool mWLAN:1; + bool mGSM:1; + bool mWCDMA:1; + bool mCDMA:1; + bool mHRDP:1; + bool mUMB:1; + bool mLTE:1; + bool mWIMAX:1; + bool mHISTORIC:1; + bool mNONSVRV:1; + + // Padding out 6 bits + UINT8 mReserved1:6; + + eQMILOCTriggerType mTriggerType; + bool mGPS:1; + bool mGLONASS:1; + bool mGALILEO:1; + bool mSBAS:1; + bool mQZSS:1; + bool mMODERNGPS:1; + + // Padding out 10 bits + UINT8 mReserved2:2; + UINT8 mReserved3; +}; + +// Structure to describe request TLV 0x15 for LOCProvideNIUserResponse() +struct sLOCProvideNIUserResponseRequest_SUPLEmergencyNotification +{ + UINT8 mESULPURLLength; + + // This array must be the size specified by mESULPURLLength + // char mESULPURL[1]; +}; + +// Structure to describe request TLV 0x01 for LOCInjectPredictedOrbitsData() +struct sLOCInjectPredictedOrbitsDataRequest_TotalSize +{ + UINT32 mTotalSize; +}; + +// Structure to describe request TLV 0x02 for LOCInjectPredictedOrbitsData() +struct sLOCInjectPredictedOrbitsDataRequest_TotalParts +{ + UINT16 mTotalParts; +}; + +// Structure to describe request TLV 0x03 for LOCInjectPredictedOrbitsData() +struct sLOCInjectPredictedOrbitsDataRequest_PartNumber +{ + UINT16 mPartNumber; +}; + +// Structure to describe request TLV 0x04 for LOCInjectPredictedOrbitsData() +struct sLOCInjectPredictedOrbitsDataRequest_PartData +{ + UINT16 mPartDataLength; + + // This array must be the size specified by mPartDataLength + // UINT8 mPartData[1]; +}; + +// Structure to describe request TLV 0x10 for LOCInjectPredictedOrbitsData() +struct sLOCInjectPredictedOrbitsDataRequest_FormatType +{ + eQMILOCOrbitsFormatType mOrbitsFormatType; +}; + +// Structure to describe indication TLV 0x10 for LOC InjectPredictedOrbitsDataIndication +struct sLOCInjectPredictedOrbitsDataIndication_PartNumber +{ + UINT16 mPartNumber; +}; + +// Structure to describe indication TLV 0x10 for LOC GetPredictedOrbitsDataSourceIndication +struct sLOCGetPredictedOrbitsDataSourceIndication_AllowedSizes +{ + UINT32 mMaximumFileSizeBytes; + UINT32 mMaximumPartSizeBytes; +}; + +// Structure to describe indication TLV 0x11 for LOC GetPredictedOrbitsDataSourceIndication +struct sLOCGetPredictedOrbitsDataSourceIndication_ServerList +{ + UINT8 mServerListLength; + + struct sServer + { + UINT8 mServerURLLength; + + // This array must be the size specified by mServerURLLength + // char mServerURL[1]; + }; + + // This array must be the size specified by mServerListLength + // sServer mServers[1]; +}; + +// Structure to describe indication TLV 0x10 for LOC GetPredictedOrbitsDataValidityIndication +struct sLOCGetPredictedOrbitsDataValidityIndication_ValidityInfo +{ + UINT64 mStartTimeInUTC; + UINT16 mDurationHours; +}; + +// Structure to describe request TLV 0x01 for LOCInjectUTCTime() +struct sLOCInjectUTCTimeRequest_UTCTime +{ + UINT64 mUTCTimestampMilliseconds; +}; + +// Structure to describe request TLV 0x02 for LOCInjectUTCTime() +struct sLOCInjectUTCTimeRequest_TimeUncertainty +{ + float mTimeUncertaintyMilliseconds; +}; + +// Structure to describe request TLV 0x10 for LOCInjectPosition() +struct sLOCInjectPositionRequest_Latitude +{ + double mLatitudeDegrees; +}; + +// Structure to describe request TLV 0x11 for LOCInjectPosition() +struct sLOCInjectPositionRequest_Longitude +{ + double mLongitudeDegrees; +}; + +// Structure to describe request TLV 0x12 for LOCInjectPosition() +struct sLOCInjectPositionRequest_HorizontalUncertaintyCircular +{ + float mHorizontalUncertaintyCircularMeters; +}; + +// Structure to describe request TLV 0x13 for LOCInjectPosition() +struct sLOCInjectPositionRequest_HorizontalConfidence +{ + UINT8 mHorizontalConfidencePercent; +}; + +// Structure to describe request TLV 0x14 for LOCInjectPosition() +struct sLOCInjectPositionRequest_HorizontalReliability +{ + eQMILOCReliability mHorizontalReliability; +}; + +// Structure to describe request TLV 0x15 for LOCInjectPosition() +struct sLOCInjectPositionRequest_AltitudeFromEllipsoid +{ + float mAltitudeFromEllipsoidMeters; +}; + +// Structure to describe request TLV 0x16 for LOCInjectPosition() +struct sLOCInjectPositionRequest_AltitudeFromSeaLevel +{ + float mAltitudeFromSeaLevelMeters; +}; + +// Structure to describe request TLV 0x17 for LOCInjectPosition() +struct sLOCInjectPositionRequest_VerticalUncertainty +{ + float mVerticalUncertaintyMeters; +}; + +// Structure to describe request TLV 0x18 for LOCInjectPosition() +struct sLOCInjectPositionRequest_VerticalConfidence +{ + UINT8 mVerticalConfidencePercent; +}; + +// Structure to describe request TLV 0x19 for LOCInjectPosition() +struct sLOCInjectPositionRequest_VerticalReliability +{ + eQMILOCReliability mVerticalReliability; +}; + +// Structure to describe request TLV 0x1A for LOCInjectPosition() +struct sLOCInjectPositionRequest_AltitudeSource +{ + eQMILOCAltitudeSource mAltitudeSource; + eQMILOCLinkage mLinkage; + eQMILOCCoverage mCoverage; +}; + +// Structure to describe request TLV 0x1B for LOCInjectPosition() +struct sLOCInjectPositionRequest_UTCTimestamp +{ + UINT64 mUTCTimestampMilliseconds; +}; + +// Structure to describe request TLV 0x1C for LOCInjectPosition() +struct sLOCInjectPositionRequest_PositionAge +{ + UINT32 mAgeTimestampMilliseconds; +}; + +// Structure to describe request TLV 0x1D for LOCInjectPosition() +struct sLOCInjectPositionRequest_PositionSource +{ + eQMILOCPositionSource mPositionSource; +}; + +// Structure to describe request TLV 0x01 for LOCSetEngineLock() +struct sLOCSetEngineLockRequest_LockType +{ + eQMILOCLockType mLockType; +}; + +// Structure to describe indication TLV 0x10 for LOC GetEngineLockIndication +struct sLOCGetEngineLockIndication_LockType +{ + eQMILOCLockType mLockType; +}; + +// Structure to describe request TLV 0x01 for LOCSetSBASConfig() +struct sLOCSetSBASConfigRequest_SBASConfig +{ + INT8 mSBASEnabled; +}; + +// Structure to describe response TLV 0x10 for LOCGetSBASConfig() +struct sLOCGetSBASConfigResponse_SBASConfig +{ + INT8 mSBASEnabled; +}; + +// Structure to describe request TLV 0x01 for LOCSetNMEATypes() +struct sLOCSetNMEATypesRequest_SentenceTypes +{ + bool mGGASentence:1; + bool mRMCSentence:1; + bool mGSVSentence:1; + bool mGSASentence:1; + bool mVTGSentence:1; + bool mPQXFISentence:1; + bool mPSTISSentence:1; + + // Padding out 25 bits + UINT8 mReserved1:1; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x10 for LOC GetNMEATypesIndication +struct sLOCGetNMEATypesIndication_SentenceType +{ + bool mGGASentence:1; + bool mRMCSentence:1; + bool mGSVSentence:1; + bool mGSASentence:1; + bool mVTGSentence:1; + bool mPQXFISentence:1; + bool mPSTISSentence:1; + + // Padding out 25 bits + UINT8 mReserved1:1; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x01 for LOCSetLowPowerMode() +struct sLOCSetLowPowerModeRequest_EnableLPM +{ + INT8 mEnableLowPowerMode; +}; + +// Structure to describe indication TLV 0x10 for LOC GetLowPowerModeIndication +struct sLOCGetLowPowerModeIndication_EnableLPM +{ + INT8 mEnableLowPowerMode; +}; + +// Structure to describe request TLV 0x01 for LOCSetLocationServer() +struct sLOCSetLocationServerRequest_ServerType +{ + eQMILOCLocationServerType mServerType; +}; + +// Structure to describe request TLV 0x10 for LOCSetLocationServer() +struct sLOCSetLocationServerRequest_IPv4Address +{ + UINT32 mIPv4Address; + UINT16 mIPv4Port; +}; + +// Structure to describe request TLV 0x11 for LOCSetLocationServer() +struct sLOCSetLocationServerRequest_IPv6Address +{ + UINT8 mIPv6Address[16]; + UINT32 mIPv6Port; +}; + +// Structure to describe request TLV 0x12 for LOCSetLocationServer() +struct sLOCSetLocationServerRequest_URLAddress +{ + // String is variable length, but must be size of the container + // char mURLAddress[1]; +}; + +// Structure to describe request TLV 0x01 for LOCGetLocationServer() +struct sLOCGetLocationServerRequest_ServerType +{ + eQMILOCLocationServerType mServerType; +}; + +// Structure to describe request TLV 0x10 for LOCGetLocationServer() +struct sLOCGetLocationServerRequest_AddressType +{ + bool mIPv4:1; + bool mIPv6:1; + bool mURL:1; + + // Padding out 5 bits + UINT8 mReserved1:5; +}; + +// Structure to describe indication TLV 0x02 for LOC GetLocationServerIndication +struct sLOCGetLocationServerIndication_ServerType +{ + eQMILOCLocationServerType mServerType; +}; + +// Structure to describe indication TLV 0x10 for LOC GetLocationServerIndication +struct sLOCGetLocationServerIndication_IPv4Address +{ + UINT32 mIPv4Address; + UINT16 mIPv4Port; +}; + +// Structure to describe indication TLV 0x11 for LOC GetLocationServerIndication +struct sLOCGetLocationServerIndication_IPv6Address +{ + UINT8 mIPv6Address[16]; + UINT32 mIPv6Port; +}; + +// Structure to describe indication TLV 0x12 for LOC GetLocationServerIndication +struct sLOCGetLocationServerIndication_URLAddress +{ + // String is variable length, but must be size of the container + // char mURLAddress[1]; +}; + +// Structure to describe request TLV 0x01 for LOCDeleteAssistData() +struct sLOCDeleteAssistDataRequest_DeleteAll +{ + INT8 mDeleteAll; +}; + +// Structure to describe request TLV 0x10 for LOCDeleteAssistData() +struct sLOCDeleteAssistDataRequest_DeleteSatelliteInfo +{ + UINT8 mSatelliteInfoCount; + + struct sSatelliteInfo + { + UINT16 mGNSSSatelliteID; + eQMILOCSystem mSystem; + bool mDeleteEphemeris:1; + bool mDeleteAlmanac:1; + + // Padding out 6 bits + UINT8 mReserved1:6; + }; + + // This array must be the size specified by mSatelliteInfoCount + // sSatelliteInfo mSatelliteInfos[1]; +}; + +// Structure to describe request TLV 0x11 for LOCDeleteAssistData() +struct sLOCDeleteAssistDataRequest_DeleteGNSData +{ + bool mDeleteGPSSatelliteDirectory:1; + bool mDeleteGPSSatelliteSteering:1; + bool mDeleteGPSTime:1; + bool mDeleteGPSAlmanacCorrection:1; + bool mDeleteGLOSatelliteDirectory:1; + bool mDeleteGLOSatelliteSteering:1; + bool mDeleteGLOTime:1; + bool mDeleteGLOAlmanacCorrection:1; + bool mDeleteSBASSatelliteDirectory:1; + bool mDeleteSBASSatelliteSteering:1; + bool mDeletePosition:1; + bool mDeleteTime:1; + bool mDeleteIONO:1; + bool mDeleteUTCTimestamp:1; + bool mDeleteHealth:1; + bool mDeleteSAData:1; + bool mDeleteRTI:1; + bool mDeleteSatelliteNoExist:1; + bool mDeleteFrequencyBiasEstimate:1; + + // Padding out 45 bits + UINT8 mReserved1:5; + UINT8 mReserved2[5]; +}; + +// Structure to describe request TLV 0x12 for LOCDeleteAssistData() +struct sLOCDeleteAssistDataRequest_DeleteCellDatabase +{ + bool mDeletePosition:1; + bool mDeleteLatestGPSPosition:1; + bool mDeleteOTAPosition:1; + bool mDeleteEXTReferencePosition:1; + bool mDeleteTimeTag:1; + bool mDeleteCellID:1; + bool mDeleteCachedCellID:1; + bool mDeleteLastServerCell:1; + bool mDeleteCurrentServerCell:1; + bool mDeleteNeighborInfo:1; + + // Padding out 22 bits + UINT8 mReserved1:6; + UINT8 mReserved2[2]; +}; + +// Structure to describe request TLV 0x13 for LOCDeleteAssistData() +struct sLOCDeleteAssistDataRequest_DeleteClockInfo +{ + bool mDeleteTimeEstimate:1; + bool mDeleteFrequencyEstimate:1; + bool mDeleteWeekNumber:1; + bool mDeleteRTCTime:1; + bool mDeleteTimeTransfer:1; + bool mDeleteGPSTimeEstimate:1; + bool mDeleteGLOTimeEstimate:1; + bool mDeleteGLODayNumber:1; + bool mDeleteGLOYearNumber:1; + bool mDeleteGLORFGroupDelay:1; + bool mDeleteDisableTT:1; + + // Padding out 21 bits + UINT8 mReserved1:5; + UINT8 mReserved2[2]; +}; + +// Structure to describe request TLV 0x01 for LOCSetXTRATSessionControl() +struct sLOCSetXTRATSessionControlRequest_EnableXTRAT +{ + INT8 mEnableXTRAT; +}; + +// Structure to describe indication TLV 0x10 for LOC GetXTRATSessionControlIndication +struct sLOCGetXTRATSessionControlIndication_EnableXTRAT +{ + INT8 mEnableXTRAT; +}; + +// Structure to describe request TLV 0x10 for LOCInjectWiFiPosition() +struct sLOCInjectWiFiPositionRequest_Time +{ + UINT32 mWiFiPositionTime; +}; + +// Structure to describe request TLV 0x11 for LOCInjectWiFiPosition() +struct sLOCInjectWiFiPositionRequest_WiFiPosition +{ + double mLatitudeDegrees; + double mLongitudeDegrees; + UINT16 mHEPEMeters; + UINT8 mNumberOfAccessPointsUsed; + eQMILOCWiFiFixErrorCode mFixErrorCode; +}; + +// Structure to describe request TLV 0x12 for LOCInjectWiFiPosition() +struct sLOCInjectWiFiPositionRequest_AccessPointInformation +{ + UINT8 mNumberOfAccessPoints; + + struct sAccessPointInfo + { + UINT8 mMACAddress[6]; + INT32 mRSSIdBm; + UINT16 mChannel; + bool mBeingUsed:1; + bool mHiddenSSID:1; + bool mPrivate:1; + bool mInfrastructureMode:1; + + // Padding out 4 bits + UINT8 mReserved1:4; + }; + + // This array must be the size specified by mNumberOfAccessPoints + // sAccessPointInfo mAccessPointInfos[1]; +}; + +// Structure to describe request TLV 0x13 for LOCInjectWiFiPosition() +struct sLOCInjectWiFiPositionRequest_HorizontalReliability +{ + eQMILOCReliability mHorizontalReliability; +}; + +// Structure to describe request TLV 0x01 for LOCProvideWiFiStatus() +struct sLOCProvideWiFiStatusRequest_WiFiStatus +{ + eQMILOCWiFiStatus mWiFiStatus; +}; + +// Structure to describe indication TLV 0x10 for LOC GetRegisteredEventsIndication +struct sLOCGetRegisteredEventsIndication_RegistrationMask +{ + bool mPositionReport:1; + bool mGNSSSatelliteInfo:1; + bool mNMEA:1; + bool mNINotifyVerifyRequest:1; + bool mInjectTimeRequest:1; + bool mInjectPredictedOrbitsRequest:1; + bool mInjectPositionRequest:1; + bool mEngineState:1; + bool mFixSessionState:1; + bool mWiFiRequest:1; + bool mSensorStreamingReadyStatus:1; + bool mTimeSyncRequest:1; + bool mSetSPIStreamingReport:1; + bool mLocationServerConnectionRequest:1; + bool mNIGeofenceNotification:1; + bool mGeofenceGeneralAlert:1; + bool mGeofenceBreachNotification:1; + bool mPedometerControl:1; + bool mMotionDataControl:1; + + // Padding out 45 bits + UINT8 mReserved1:5; + UINT8 mReserved2[5]; +}; + +// Structure to describe request TLV 0x01 for LOCSetOperationMode() +struct sLOCSetOperationModeRequest_OperationMode +{ + eQMILOCOperationMode mOperationMode; +}; + +// Structure to describe indication TLV 0x10 for LOC GetOperationModeIndication +struct sLOCGetOperationModeIndication_OperationMode +{ + eQMILOCOperationMode mOperationMode; +}; + +// Structure to describe request TLV 0x01 for LOCSetSPIStatus() +struct sLOCSetSPIStatusRequest_StationaryStatus +{ + INT8 mDeviceIsStationary; +}; + +// Structure to describe request TLV 0x10 for LOCSetSPIStatus() +struct sLOCSetSPIStatusRequest_Confidence +{ + UINT8 mStationaryConfidence; +}; + +// Structure to describe request TLV 0x10 for LOCInjectSensorData() +struct sLOCInjectSensorDataRequest_OpaqueIdentifier +{ + UINT32 mOpaqueIdentifier; +}; + +// Structure to describe request TLV 0x11 for LOCInjectSensorData() +struct sLOCInjectSensorDataRequest_AccelerometerData +{ + UINT32 mTimeOfFirstSampleMilliseconds; + bool mSignReversal:1; + bool mSensorTimeIsModemTime:1; + + // Padding out 6 bits + UINT8 mReserved1:6; + + UINT8 mSensorDataLength; + + struct sSensorData + { + UINT16 mTimeOffsetMilliseconds; + float mXAxis; + float mYAxis; + float mZAxis; + }; + + // This array must be the size specified by mSensorDataLength + // sSensorData mSensorDatas[1]; +}; + +// Structure to describe request TLV 0x12 for LOCInjectSensorData() +struct sLOCInjectSensorDataRequest_GyrometerData +{ + UINT32 mTimeOfFirstSampleMilliseconds; + bool mSignReversal:1; + bool mSensorTimeIsModemTime:1; + + // Padding out 6 bits + UINT8 mReserved1:6; + + UINT8 mSensorDataLength; + + struct sSensorData + { + UINT16 mTimeOffsetMilliseconds; + float mXAxis; + float mYAxis; + float mZAxis; + }; + + // This array must be the size specified by mSensorDataLength + // sSensorData mSensorDatas[1]; +}; + +// Structure to describe request TLV 0x13 for LOCInjectSensorData() +struct sLOCInjectSensorDataRequest_AccelerometerTimeSource +{ + eQMILOCSensorTimeSources mSensorTimeSource; +}; + +// Structure to describe request TLV 0x14 for LOCInjectSensorData() +struct sLOCInjectSensorDataRequest_GyrometerTimeSource +{ + eQMILOCSensorTimeSources mSensorTimeSource; +}; + +// Structure to describe request TLV 0x15 for LOCInjectSensorData() +struct sLOCInjectSensorDataRequest_AccelerometerTempData +{ + eQMILOCSensorTimeSources mSensorTimeSource; + UINT32 mTimeOfFirstSampleMilliseconds; + UINT8 mSensorDataLength; + + struct sSensorData + { + UINT16 mTimeOffsetMilliseconds; + float mSensorTemperature; + }; + + // This array must be the size specified by mSensorDataLength + // sSensorData mSensorDatas[1]; +}; + +// Structure to describe request TLV 0x16 for LOCInjectSensorData() +struct sLOCInjectSensorDataRequest_GyrometerTempData +{ + eQMILOCSensorTimeSources mSensorTimeSource; + UINT32 mTimeOfFirstSampleMilliseconds; + UINT8 mSensorDataLength; + + struct sSensorData + { + UINT16 mTimeOffsetMilliseconds; + float mSensorTemperature; + }; + + // This array must be the size specified by mSensorDataLength + // sSensorData mSensorDatas[1]; +}; + +// Structure to describe indication TLV 0x10 for LOC InjectSensorDataIndication +struct sLOCInjectSensorDataIndication_OpaqueIdentifier +{ + UINT32 mOpaqueIdentifier; +}; + +// Structure to describe indication TLV 0x11 for LOC InjectSensorDataIndication +struct sLOCInjectSensorDataIndication_AccelerometerSampleAccepted +{ + INT8 mAccelerometerSampleAccepted; +}; + +// Structure to describe indication TLV 0x12 for LOC InjectSensorDataIndication +struct sLOCInjectSensorDataIndication_GyrometerSamplesAccepted +{ + INT8 mGyrometerSamplesAccepted; +}; + +// Structure to describe indication TLV 0x13 for LOC InjectSensorDataIndication +struct sLOCInjectSensorDataIndication_AccelerometerTempSamplesAccepted +{ + INT8 mSensorTemperatureSamplesAccepted; +}; + +// Structure to describe indication TLV 0x14 for LOC InjectSensorDataIndication +struct sLOCInjectSensorDataIndication_GyrometerTempSamplesAccepted +{ + INT8 mSensorTemperatureSamplesAccepted; +}; + +// Structure to describe request TLV 0x01 for LOCInjectTimeSyncData() +struct sLOCInjectTimeSyncDataRequest_ReferenceCounter +{ + UINT32 mReferenceCounter; +}; + +// Structure to describe request TLV 0x02 for LOCInjectTimeSyncData() +struct sLOCInjectTimeSyncDataRequest_SensorReceiveTime +{ + UINT32 mProcessRXTimeMilliseconds; +}; + +// Structure to describe request TLV 0x03 for LOCInjectTimeSyncData() +struct sLOCInjectTimeSyncDataRequest_SensorTransmitTime +{ + UINT32 mProcessTXTimeMilliseconds; +}; + +// Structure to describe request TLV 0x01 for LOCSetCradleMountConfig() +struct sLOCSetCradleMountConfigRequest_State +{ + eQMILOCCradleMountState mCradleMountState; +}; + +// Structure to describe request TLV 0x10 for LOCSetCradleMountConfig() +struct sLOCSetCradleMountConfigRequest_Confidence +{ + UINT8 mCradleMountConfidence; +}; + +// Structure to describe indication TLV 0x10 for LOC GetCradleMountConfigIndication +struct sLOCGetCradleMountConfigIndication_State +{ + eQMILOCCradleMountState mCradleMountState; +}; + +// Structure to describe indication TLV 0x11 for LOC GetCradleMountConfigIndication +struct sLOCGetCradleMountConfigIndication_Confidence +{ + UINT8 mCradleMountConfidence; +}; + +// Structure to describe request TLV 0x01 for LOCSetExternalPowerConfig() +struct sLOCSetExternalPowerConfigRequest_PowerState +{ + eQMILOCPowerState mPowerState; +}; + +// Structure to describe indication TLV 0x10 for LOC GetExternalPowerConfigIndication +struct sLOCGetExternalPowerConfigIndication_PowerState +{ + eQMILOCPowerState mPowerState; +}; + +// Structure to describe request TLV 0x01 for LOCProvideConnectionStatus() +struct sLOCProvideConnectionStatusRequest_ConnectionHandle +{ + UINT32 mConnectionHandle; +}; + +// Structure to describe request TLV 0x02 for LOCProvideConnectionStatus() +struct sLOCProvideConnectionStatusRequest_RequestType +{ + eQMILOCConnectionRequestType mConnectionRequestType; +}; + +// Structure to describe request TLV 0x03 for LOCProvideConnectionStatus() +struct sLOCProvideConnectionStatusRequest_ConnectionStatus +{ + eQMILOCConnectionStatus mConnectionStatus; +}; + +// Structure to describe request TLV 0x10 for LOCProvideConnectionStatus() +struct sLOCProvideConnectionStatusRequest_APNProfile +{ + eQMILOCPDNType mPDNType; + UINT8 mAPNNameLength; + + // This array must be the size specified by mAPNNameLength + // char mAPNName[1]; +}; + +// Structure to describe request TLV 0x10 for LOCSetProtocolConfigParameters() +struct sLOCSetProtocolConfigParametersRequest_SUPLSecurity +{ + INT8 mSUPLSecurityEnabled; +}; + +// Structure to describe request TLV 0x11 for LOCSetProtocolConfigParameters() +struct sLOCSetProtocolConfigParametersRequest_VXVersion +{ + eQMILOCVXVersion mVXVersion; +}; + +// Structure to describe request TLV 0x12 for LOCSetProtocolConfigParameters() +struct sLOCSetProtocolConfigParametersRequest_SUPLVersion +{ + eQMILOCSUPLVersion mSUPLVersion; +}; + +// Structure to describe request TLV 0x13 for LOCSetProtocolConfigParameters() +struct sLOCSetProtocolConfigParametersRequest_LPPConfiguration +{ + bool mEnableUserPlane:1; + bool mEnableControlPlane:1; + + // Padding out 30 bits + UINT8 mReserved1:6; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x14 for LOCSetProtocolConfigParameters() +struct sLOCSetProtocolConfigParametersRequest_AssistedGLONASS +{ + bool mRRCCP:1; + bool mRRLPUP:1; + bool mLPPUP:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x15 for LOCSetProtocolConfigParameters() +struct sLOCSetProtocolConfigParametersRequest_SUPLHashAlgorithm +{ + eQMILOCSUPLHashAlgorithms mSUPLHashAlgorithm; +}; + +// Structure to describe request TLV 0x16 for LOCSetProtocolConfigParameters() +struct sLOCSetProtocolConfigParametersRequest_SUPLTLSVersion +{ + eQMILOCSUPLTLSVersions mSUPLTLSVersion; +}; + +// Structure to describe request TLV 0x17 for LOCSetProtocolConfigParameters() +struct sLOCSetProtocolConfigParametersRequest_EmergencyProtocol +{ + eQMILOCEmergencyProtocols mEmergencyProtocol; +}; + +// Structure to describe indication TLV 0x10 for LOC SetProtocolConfigParametersIndication +struct sLOCSetProtocolConfigParametersIndication_FailedParameters +{ + bool mSUPLSecurity:1; + bool mVXVersion:1; + bool mSUPLVersion:1; + bool mLLPConfiguration:1; + bool mAssistedGLONASS:1; + bool mSUPLHashAlgorithm:1; + bool mSUPLTLSVersion:1; + bool mEmergencyProtocol:1; + + // Padding out 56 bits + UINT8 mReserved1[7]; +}; + +// Structure to describe request TLV 0x01 for LOCGetProtocolConfigParameters() +struct sLOCGetProtocolConfigParametersRequest_ConfigParameters +{ + bool mSUPLSecurity:1; + bool mVXVersion:1; + bool mSUPLVersion:1; + bool mLLPConfiguration:1; + bool mAssistedGLONASS:1; + bool mSUPLHashAlgorithm:1; + bool mSUPLTLSVersion:1; + bool mEmergencyProtocol:1; + + // Padding out 56 bits + UINT8 mReserved1[7]; +}; + +// Structure to describe indication TLV 0x10 for LOC GetProtocolConfigParametersIndication +struct sLOCGetProtocolConfigParametersIndication_SUPLSecurity +{ + INT8 mSUPLSecurityEnabled; +}; + +// Structure to describe indication TLV 0x11 for LOC GetProtocolConfigParametersIndication +struct sLOCGetProtocolConfigParametersIndication_VXVersion +{ + eQMILOCVXVersion mVXVersion; +}; + +// Structure to describe indication TLV 0x12 for LOC GetProtocolConfigParametersIndication +struct sLOCGetProtocolConfigParametersIndication_SUPLVersion +{ + eQMILOCSUPLVersion mSUPLVersion; +}; + +// Structure to describe indication TLV 0x13 for LOC GetProtocolConfigParametersIndication +struct sLOCGetProtocolConfigParametersIndication_LPPConfiguration +{ + bool mEnableUserPlane:1; + bool mEnableControlPlane:1; + + // Padding out 30 bits + UINT8 mReserved1:6; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x14 for LOC GetProtocolConfigParametersIndication +struct sLOCGetProtocolConfigParametersIndication_AssistedGLONASS +{ + bool mRRCCP:1; + bool mRRLPUP:1; + bool mLPPUP:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x15 for LOC GetProtocolConfigParametersIndication +struct sLOCGetProtocolConfigParametersIndication_SUPLHashAlgorithm +{ + eQMILOCSUPLHashAlgorithms mSUPLHashAlgorithm; +}; + +// Structure to describe indication TLV 0x16 for LOC GetProtocolConfigParametersIndication +struct sLOCGetProtocolConfigParametersIndication_SUPLTLSVersion +{ + eQMILOCSUPLTLSVersions mSUPLTLSVersion; +}; + +// Structure to describe indication TLV 0x17 for LOC GetProtocolConfigParametersIndication +struct sLOCGetProtocolConfigParametersIndication_EmergencyProtocol +{ + eQMILOCEmergencyProtocols mEmergencyProtocol; +}; + +// Structure to describe request TLV 0x10 for LOCSetSensorControlConfig() +struct sLOCSetSensorControlConfigRequest_SensorUsage +{ + eQMILOCSensorUsage mSensorUsage; +}; + +// Structure to describe indication TLV 0x10 for LOC GetSensorControlConfigIndication +struct sLOCGetSensorControlConfigIndication_SensorUsage +{ + eQMILOCSensorUsage mSensorUsage; +}; + +// Structure to describe request TLV 0x10 for LOCSetSensorProperties() +struct sLOCSetSensorPropertiesRequest_GyroBiasVariance +{ + float mGyroBiasVariance; +}; + +// Structure to describe request TLV 0x11 for LOCSetSensorProperties() +struct sLOCSetSensorPropertiesRequest_VelocityRWSD +{ + float mVelocityRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x12 for LOCSetSensorProperties() +struct sLOCSetSensorPropertiesRequest_AccelerationRWSD +{ + float mAccelerationRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x13 for LOCSetSensorProperties() +struct sLOCSetSensorPropertiesRequest_AngleRWSD +{ + float mAngleRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x14 for LOCSetSensorProperties() +struct sLOCSetSensorPropertiesRequest_RateRWSD +{ + float mRateRandomWalkSpectralDensity; +}; + +// Structure to describe indication TLV 0x10 for LOC SetSensorPropertiesIndication +struct sLOCSetSensorPropertiesIndication_Failures +{ + bool mGyroBiasVariance:1; + bool mVelocityRandomWalkSpectralDensity:1; + bool mAccelerationRandomWalkSpectralDensity:1; + bool mAngleRandomWalkSpectralDensity:1; + bool mRateRandomWalkSpectralDensity:1; + + // Padding out 27 bits + UINT8 mReserved1:3; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x01 for LOCGetSensorProperties() +struct sLOCGetSensorPropertiesRequest_Properties +{ + bool mGyroBiasVariance:1; + bool mVelocityRandomWalkSpectralDensity:1; + bool mAccelerationRandomWalkSpectralDensity:1; + bool mAngleRandomWalkSpectralDensity:1; + bool mRateRandomWalkSpectralDensity:1; + + // Padding out 27 bits + UINT8 mReserved1:3; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x10 for LOC GetSensorPropertiesIndication +struct sLOCGetSensorPropertiesIndication_GyroBiasVariance +{ + float mGyroBiasVariance; +}; + +// Structure to describe indication TLV 0x11 for LOC GetSensorPropertiesIndication +struct sLOCGetSensorPropertiesIndication_VelocityRWSD +{ + float mVelocityRandomWalkSpectralDensity; +}; + +// Structure to describe indication TLV 0x12 for LOC GetSensorPropertiesIndication +struct sLOCGetSensorPropertiesIndication_AccelerationRWSD +{ + float mAccelerationRandomWalkSpectralDensity; +}; + +// Structure to describe indication TLV 0x13 for LOC GetSensorPropertiesIndication +struct sLOCGetSensorPropertiesIndication_AngleRWSD +{ + float mAngleRandomWalkSpectralDensity; +}; + +// Structure to describe indication TLV 0x14 for LOC GetSensorPropertiesIndication +struct sLOCGetSensorPropertiesIndication_RateRWSD +{ + float mRateRandomWalkSpectralDensity; +}; + +// Structure to describe request TLV 0x10 for LOCSetSensorPerformanceConfig() +struct sLOCSetSensorPerformanceConfigRequest_ControlMode +{ + eQMILOCControlMode mControlMode; +}; + +// Structure to describe request TLV 0x11 for LOCSetSensorPerformanceConfig() +struct sLOCSetSensorPerformanceConfigRequest_AccelerometerSampling +{ + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe request TLV 0x12 for LOCSetSensorPerformanceConfig() +struct sLOCSetSensorPerformanceConfigRequest_GyrometerSampling +{ + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe request TLV 0x13 for LOCSetSensorPerformanceConfig() +struct sLOCSetSensorPerformanceConfigRequest_AlgorithmConfig +{ + bool mDisableINSPositioningFilter:1; + + // Padding out 31 bits + UINT8 mReserved1:7; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x14 for LOCSetSensorPerformanceConfig() +struct sLOCSetSensorPerformanceConfigRequest_HDRFAccelerometerSampling +{ + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe request TLV 0x15 for LOCSetSensorPerformanceConfig() +struct sLOCSetSensorPerformanceConfigRequest_HDRFGyroscopeSampling +{ + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe indication TLV 0x10 for LOC SetSensorPerformanceConfigIndication +struct sLOCSetSensorPerformanceConfigIndication_FailedConfiguration +{ + bool mPerformanceMode:1; + bool mAccelerometerSampling:1; + bool mGyrometerSampling:1; + bool mAlgorithmConfig:1; + bool mHDRFAccelerometerSampling:1; + bool mHDRFGyroscopeSampling:1; + + // Padding out 26 bits + UINT8 mReserved1:2; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x10 for LOC GetSensorPerformanceConfigIndication +struct sLOCGetSensorPerformanceConfigIndication_ControlMode +{ + eQMILOCControlMode mControlMode; +}; + +// Structure to describe indication TLV 0x11 for LOC GetSensorPerformanceConfigIndication +struct sLOCGetSensorPerformanceConfigIndication_AccelerometerSampling +{ + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe indication TLV 0x12 for LOC GetSensorPerformanceConfigIndication +struct sLOCGetSensorPerformanceConfigIndication_GyrometerSampling +{ + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe indication TLV 0x13 for LOC GetSensorPerformanceConfigIndication +struct sLOCGetSensorPerformanceConfigIndication_AlgorithmConfig +{ + bool mDisableINSPositioningFilter:1; + + // Padding out 31 bits + UINT8 mReserved1:7; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x14 for LOC GetSensorPerformanceConfigIndication +struct sLOCGetSensorPerformanceConfigIndication_HDRFAccelerometerSampling +{ + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe indication TLV 0x15 for LOC GetSensorPerformanceConfigIndication +struct sLOCGetSensorPerformanceConfigIndication_HDRFGyroscopeSampling +{ + UINT16 mSamplesPerBatch; + UINT16 mBatchesPerSecond; +}; + +// Structure to describe request TLV 0x01 for LOCInjectSUPLCertificate() +struct sLOCInjectSUPLCertificateRequest_ID +{ + UINT8 mSUPLCertificateID; +}; + +// Structure to describe request TLV 0x02 for LOCInjectSUPLCertificate() +struct sLOCInjectSUPLCertificateRequest_Data +{ + UINT16 mSUPLCertificateLength; + + // This array must be the size specified by mSUPLCertificateLength + // UINT8 mSUPLCertificate[1]; +}; + +// Structure to describe request TLV 0x10 for LOCDeleteSUPLCertificate() +struct sLOCDeleteSUPLCertificateRequest_ID +{ + UINT8 mSUPLCertificateID; +}; + +// Structure to describe request TLV 0x10 for LOCSetPositionEngineConfig() +struct sLOCSetPositionEngineConfigRequest_InjectedPosition +{ + INT8 mUseInjectedPositionInCalculations; +}; + +// Structure to describe request TLV 0x11 for LOCSetPositionEngineConfig() +struct sLOCSetPositionEngineConfigRequest_FilterSVUsage +{ + INT8 mFilterUsageOfSVs; +}; + +// Structure to describe request TLV 0x12 for LOCSetPositionEngineConfig() +struct sLOCSetPositionEngineConfigRequest_StoreAssistData +{ + INT8 mStoreAssistanceData; +}; + +// Structure to describe indication TLV 0x10 for LOC SetPositionEngineConfigIndication +struct sLOCSetPositionEngineConfigIndication_FailedParameters +{ + bool mInjectedPosition:1; + bool mFilterSVUsage:1; + bool mStoreAssistData:1; + bool mEnableFasterTTFF:1; + + // Padding out 28 bits + UINT8 mReserved1:4; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x01 for LOCGetPositionEngineConfig() +struct sLOCGetPositionEngineConfigRequest_Parameters +{ + bool mInjectedPosition:1; + bool mFilterSVUsage:1; + bool mStoreAssistData:1; + bool mEnableFasterTTFF:1; + + // Padding out 28 bits + UINT8 mReserved1:4; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x10 for LOC GetPositionEngineConfigIndication +struct sLOCGetPositionEngineConfigIndication_InjectedPosition +{ + INT8 mUseInjectedPositionInCalculations; +}; + +// Structure to describe indication TLV 0x11 for LOC GetPositionEngineConfigIndication +struct sLOCGetPositionEngineConfigIndication_FilterSVUsage +{ + INT8 mFilterUsageOfSVs; +}; + +// Structure to describe indication TLV 0x12 for LOC GetPositionEngineConfigIndication +struct sLOCGetPositionEngineConfigIndication_StoreAssistData +{ + INT8 mStoreAssistanceData; +}; + +// Structure to describe indication TLV 0x01 for LOC NetworkInitiatedGeofenceIndication +struct sLOCNetworkInitiatedGeofenceIndication_GeofenceID +{ + UINT32 mGeofenceID; +}; + +// Structure to describe indication TLV 0x02 for LOC NetworkInitiatedGeofenceIndication +struct sLOCNetworkInitiatedGeofenceIndication_OperationType +{ + eQMILOCGeofenceOperationMode mOperationType; +}; + +// Structure to describe indication TLV 0x01 for LOC EventGeofenceGeneralAlertIndication +struct sLOCEventGeofenceGeneralAlertIndication_GeofenceGeneralAlert +{ + eQMILOCGeofenceGeneralAlert mGeofenceGeneralAlert; +}; + +// Structure to describe indication TLV 0x01 for LOC EventGeofenceBreachIndication +struct sLOCEventGeofenceBreachIndication_GeofenceID +{ + UINT32 mGeofenceID; +}; + +// Structure to describe indication TLV 0x02 for LOC EventGeofenceBreachIndication +struct sLOCEventGeofenceBreachIndication_GeofenceBreachType +{ + eQMILOCGeofenceBreachType mGeofenceBreachType; +}; + +// Structure to describe indication TLV 0x10 for LOC EventGeofenceBreachIndication +struct sLOCEventGeofenceBreachIndication_GeofencePosition +{ + UINT64 mUTCTimestampMilliseconds; + double mLatitudeDegrees; + double mLongitudeDegrees; + float mHorizontalUncertaintyEllipticalMinorMeters; + float mHorizontalUncertaintyEllipticalMajorMeters; + float mHorizontalUncertaintyEllipticalAzimuthDecimalDegrees; + INT8 mHorizontalSpeedValid; + float mHorizontalSpeedMetersSecond; + INT8 mAltitudeEllipsoidValid; + float mAltitudeFromEllipsoidMeters; + INT8 mVerticalUncertaintyValid; + float mVerticalUncertaintyMeters; + INT8 mVerticalSpeedValid; + float mVerticalSpeedMetersSecond; + INT8 mHeadingValid; + float mHeadingDegrees; +}; + +// Structure to describe request TLV 0x01 for LOCAddCircularGeofence() +struct sLOCAddCircularGeofenceRequest_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe request TLV 0x02 for LOCAddCircularGeofence() +struct sLOCAddCircularGeofenceRequest_CircularGeofenceArguments +{ + double mLatitudeDegrees; + double mLongitudeDegrees; + UINT32 mRadiusMeters; +}; + +// Structure to describe request TLV 0x03 for LOCAddCircularGeofence() +struct sLOCAddCircularGeofenceRequest_BreachEventMask +{ + bool mEnteringGeofence:1; + bool mLeavingGeofence:1; + + // Padding out 6 bits + UINT8 mReserved1:6; +}; + +// Structure to describe request TLV 0x04 for LOCAddCircularGeofence() +struct sLOCAddCircularGeofenceRequest_IncludePositionInBreachEvent +{ + INT8 mIncludePositionInBreachEvent; +}; + +// Structure to describe request TLV 0x10 for LOCAddCircularGeofence() +struct sLOCAddCircularGeofenceRequest_Responsiveness +{ + eQMILOCResponsiveness mResponsiveness; +}; + +// Structure to describe request TLV 0x11 for LOCAddCircularGeofence() +struct sLOCAddCircularGeofenceRequest_Confidence +{ + eQMILOCConfidence mConfidence; +}; + +// Structure to describe indication TLV 0x01 for LOC AddCircularGeofenceIndication +struct sLOCAddCircularGeofenceIndication_GeofenceStatus +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe indication TLV 0x10 for LOC AddCircularGeofenceIndication +struct sLOCAddCircularGeofenceIndication_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe indication TLV 0x11 for LOC AddCircularGeofenceIndication +struct sLOCAddCircularGeofenceIndication_GeofenceID +{ + UINT32 mGeofenceID; +}; + +// Structure to describe request TLV 0x01 for LOCDeleteGeofence() +struct sLOCDeleteGeofenceRequest_GeofenceID +{ + UINT32 mGeofenceID; +}; + +// Structure to describe request TLV 0x02 for LOCDeleteGeofence() +struct sLOCDeleteGeofenceRequest_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe indication TLV 0x01 for LOC DeleteGeofenceIndication +struct sLOCDeleteGeofenceIndication_GeofenceStatus +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe indication TLV 0x10 for LOC DeleteGeofenceIndication +struct sLOCDeleteGeofenceIndication_GeofenceID +{ + UINT32 mGeofenceID; +}; + +// Structure to describe indication TLV 0x11 for LOC DeleteGeofenceIndication +struct sLOCDeleteGeofenceIndication_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe request TLV 0x01 for LOCQueryGeofence() +struct sLOCQueryGeofenceRequest_GeofenceID +{ + UINT32 mGeofenceID; +}; + +// Structure to describe request TLV 0x02 for LOCQueryGeofence() +struct sLOCQueryGeofenceRequest_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe indication TLV 0x01 for LOC QueryGeofenceIndication +struct sLOCQueryGeofenceIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe indication TLV 0x10 for LOC QueryGeofenceIndication +struct sLOCQueryGeofenceIndication_GeofenceID +{ + UINT32 mGeofenceID; +}; + +// Structure to describe indication TLV 0x11 for LOC QueryGeofenceIndication +struct sLOCQueryGeofenceIndication_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe indication TLV 0x12 for LOC QueryGeofenceIndication +struct sLOCQueryGeofenceIndication_Origin +{ + eQMILOCGeofenceOrigin mGeofenceOrigin; +}; + +// Structure to describe indication TLV 0x13 for LOC QueryGeofenceIndication +struct sLOCQueryGeofenceIndication_PositionFromGeofence +{ + eQMILOCPositionFromGeofence mPositionFromGeofence; +}; + +// Structure to describe indication TLV 0x14 for LOC QueryGeofenceIndication +struct sLOCQueryGeofenceIndication_Parameters +{ + double mLatitudeDegrees; + double mLongitudeDegrees; + UINT32 mRadiusMeters; +}; + +// Structure to describe indication TLV 0x15 for LOC QueryGeofenceIndication +struct sLOCQueryGeofenceIndication_State +{ + eQMILOCGeofenceState mGeofenceState; +}; + +// Structure to describe request TLV 0x01 for LOCEditGeofence() +struct sLOCEditGeofenceRequest_GeofenceID +{ + UINT32 mGeofenceID; +}; + +// Structure to describe request TLV 0x02 for LOCEditGeofence() +struct sLOCEditGeofenceRequest_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe request TLV 0x10 for LOCEditGeofence() +struct sLOCEditGeofenceRequest_State +{ + eQMILOCGeofenceState mGeofenceState; +}; + +// Structure to describe request TLV 0x11 for LOCEditGeofence() +struct sLOCEditGeofenceRequest_BreachEventMask +{ + bool mEnteringGeofence:1; + bool mLeavingGeofence:1; + + // Padding out 6 bits + UINT8 mReserved1:6; +}; + +// Structure to describe indication TLV 0x01 for LOC EditGeofenceIndication +struct sLOCEditGeofenceIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe indication TLV 0x10 for LOC EditGeofenceIndication +struct sLOCEditGeofenceIndication_GeofenceID +{ + UINT32 mGeofenceID; +}; + +// Structure to describe indication TLV 0x11 for LOC EditGeofenceIndication +struct sLOCEditGeofenceIndication_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe indication TLV 0x12 for LOC EditGeofenceIndication +struct sLOCEditGeofenceIndication_FailedParameters +{ + bool mGeofenceState:1; + bool mBreachMask:1; + + // Padding out 30 bits + UINT8 mReserved1:6; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x01 for LOCGetBestAvailablePosition() +struct sLOCGetBestAvailablePositionRequest_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe indication TLV 0x01 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe indication TLV 0x10 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe indication TLV 0x11 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_Latitude +{ + double mLatitudeDegrees; +}; + +// Structure to describe indication TLV 0x12 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_Longitude +{ + double mLongitudeDegrees; +}; + +// Structure to describe indication TLV 0x13 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_HorizontalUncertaintyCircular +{ + float mHorizontalUncertaintyCircularMeters; +}; + +// Structure to describe indication TLV 0x14 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_AltitudeFromEllipsoid +{ + float mAltitudeFromEllipsoidMeters; +}; + +// Structure to describe indication TLV 0x15 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_VerticalUncertainty +{ + float mVerticalUncertaintyMeters; +}; + +// Structure to describe indication TLV 0x16 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_UTCTimestamp +{ + UINT64 mUTCTimestampMilliseconds; +}; + +// Structure to describe indication TLV 0x17 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_TimeUncertainty +{ + float mTimeUncertaintyMilliseconds; +}; + +// Structure to describe indication TLV 0x18 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_HorizontalUncertaintyEllipticalMinor +{ + float mHorizontalUncertaintyEllipticalMinorMeters; +}; + +// Structure to describe indication TLV 0x19 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_HorizontalUncertaintyEllipticalMajor +{ + float mHorizontalUncertaintyEllipticalMajorMeters; +}; + +// Structure to describe indication TLV 0x1A for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_HorizontalUncertaintyEllipticalAzimuth +{ + float mHorizontalUncertaintyEllipticalAzimuthDecimalDegrees; +}; + +// Structure to describe indication TLV 0x1B for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_HorizontalConfidenceCircular +{ + UINT8 mHorizontalConfidencePercent; +}; + +// Structure to describe indication TLV 0x1C for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_HorizontalConfidenceElliptical +{ + UINT8 mHorizontalConfidencePercent; +}; + +// Structure to describe indication TLV 0x1D for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_HorizontalReliablility +{ + eQMILOCReliability mHorizontalReliability; +}; + +// Structure to describe indication TLV 0x1E for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_HorizontalSpeed +{ + float mHorizontalSpeedMetersSecond; +}; + +// Structure to describe indication TLV 0x1F for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_HorizontalSpeedUncertainty +{ + float mSpeedUncertaintyMetersSecond; +}; + +// Structure to describe indication TLV 0x20 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_AltitudeFromSeaLevel +{ + float mAltitudeFromSeaLevelMeters; +}; + +// Structure to describe indication TLV 0x21 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_VerticalConfidence +{ + UINT8 mVerticalConfidencePercent; +}; + +// Structure to describe indication TLV 0x22 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_VerticalReliability +{ + eQMILOCReliability mVerticalReliability; +}; + +// Structure to describe indication TLV 0x23 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_VerticalSpeed +{ + float mVerticalSpeedMetersSecond; +}; + +// Structure to describe indication TLV 0x24 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_VerticalSpeedUncertainty +{ + float mSpeedUncertaintyMetersSecond; +}; + +// Structure to describe indication TLV 0x25 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_Heading +{ + float mHeadingDegrees; +}; + +// Structure to describe indication TLV 0x26 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_HeadingUncertainty +{ + float mHeadingUncertaintyDegrees; +}; + +// Structure to describe indication TLV 0x27 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_MagneticDeviation +{ + float mMagneticDeviation; +}; + +// Structure to describe indication TLV 0x28 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_TechnologyUsed +{ + bool mSatellite:1; + bool mCellular:1; + bool mWiFi:1; + bool mSensors:1; + bool mReferenceLocation:1; + bool mInjectedPosition:1; + bool mAFLT:1; + bool mHybrid:1; + + // Padding out 24 bits + UINT8 mReserved1[3]; +}; + +// Structure to describe indication TLV 0x29 for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_DilutionOfPrecision +{ + float mPositionDilutionOfPrecision; + float mHorizontalDilutionOfPrecision; + float mVerticalDilutionOfPrecision; +}; + +// Structure to describe indication TLV 0x2A for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_GPSTime +{ + UINT16 mGPSWeeks; + UINT32 mGPSTimeOfWeekMilliseconds; +}; + +// Structure to describe indication TLV 0x2B for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_TimeSource +{ + eQMILOCTimeSource mTimeSource; +}; + +// Structure to describe indication TLV 0x2C for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_SensorDataUsage +{ + bool mAccelerometerUsed:1; + bool mGyroUsed:1; + + // Padding out 30 bits + UINT8 mReserved1:6; + UINT8 mReserved2[3]; + + bool mAidedHeading:1; + bool mAidedSpeed:1; + bool mAidedPosition:1; + bool mAidedVelocity:1; + + // Padding out 28 bits + UINT8 mReserved3:4; + UINT8 mReserved4[3]; +}; + +// Structure to describe indication TLV 0x2D for LOC GetBestAvailablePositionIndication +struct sLOCGetBestAvailablePositionIndication_SatellitesUsed +{ + UINT8 mSatellitesUsedCount; + + // This array must be the size specified by mSatellitesUsedCount + // UINT16 mSatellitesUsed[1]; +}; + +// Structure to describe request TLV 0x01 for LOCInjectMotionData() +struct sLOCInjectMotionDataRequest_MotionData +{ + eQMILOCMotionStates mMotionState; + eQMILOCMotionModes mMotionMode; + float mProbabilityOfState; + UINT16 mAgeMilliseconds; + UINT16 mTimeoutMilliseconds; +}; + +// Structure to describe indication TLV 0x01 for LOC InjectMotionDataIndication +struct sLOCInjectMotionDataIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe request TLV 0x01 for LOCGetNIGeofenceIDList() +struct sLOCGetNIGeofenceIDListRequest_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe indication TLV 0x01 for LOC GetNIGeofenceIDListIndication +struct sLOCGetNIGeofenceIDListIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe indication TLV 0x10 for LOC GetNIGeofenceIDListIndication +struct sLOCGetNIGeofenceIDListIndication_TransactionID +{ + UINT32 mTransactionID; +}; + +// Structure to describe indication TLV 0x11 for LOC GetNIGeofenceIDListIndication +struct sLOCGetNIGeofenceIDListIndication_GeofenceIDList +{ + UINT8 mGeofenceIDCount; + + // This array must be the size specified by mGeofenceIDCount + // UINT32 mGeofenceID[1]; +}; + +// Structure to describe request TLV 0x01 for LOCInjectGSMCellInfo() +struct sLOCInjectGSMCellInfoRequest_GSMCellID +{ + UINT32 mMCC; + UINT32 mMNC; + UINT32 mLAC; + UINT32 mCID; +}; + +// Structure to describe request TLV 0x02 for LOCInjectGSMCellInfo() +struct sLOCInjectGSMCellInfoRequest_Roaming +{ + INT8 mDeviceIsRoaming; +}; + +// Structure to describe indication TLV 0x01 for LOC InjectGSMCellInfoIndication +struct sLOCInjectGSMCellInfoIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe request TLV 0x01 for LOCInjectNetworkInitiatedMessage() +struct sLOCInjectNetworkInitiatedMessageRequest_Type +{ + eQMILOCNetworkInitiatedMessageTypes mMessageType; +}; + +// Structure to describe request TLV 0x02 for LOCInjectNetworkInitiatedMessage() +struct sLOCInjectNetworkInitiatedMessageRequest_Message +{ + UINT16 mMessageLength; + + // This array must be the size specified by mMessageLength + // UINT8 mMessageBody[1]; +}; + +// Structure to describe indication TLV 0x01 for LOC InjectNetworkInitiatedMessageIndication +struct sLOCInjectNetworkInitiatedMessageIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe indication TLV 0x01 for LOC NotifyWWANOutOfServiceIndication +struct sLOCNotifyWWANOutOfServiceIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe indication TLV 0x01 for LOC PedometerControlIndication +struct sLOCPedometerControlIndication_RequestData +{ + INT8 mRequestPedometerData; +}; + +// Structure to describe indication TLV 0x10 for LOC PedometerControlIndication +struct sLOCPedometerControlIndication_ResetStepCount +{ + INT8 mResetStepCount; +}; + +// Structure to describe indication TLV 0x11 for LOC PedometerControlIndication +struct sLOCPedometerControlIndication_StepCountThreshold +{ + UINT32 mStepCountThreshold; +}; + +// Structure to describe indication TLV 0x01 for LOC MotionDataControlIndication +struct sLOCMotionDataControlIndication_RequestData +{ + INT8 mRequestMotionData; +}; + +// Structure to describe request TLV 0x01 for LOCInjectPedometerData() +struct sLOCInjectPedometerDataRequest_TimeSource +{ + eQMILOCSensorTimeSources mSensorTimeSource; +}; + +// Structure to describe request TLV 0x02 for LOCInjectPedometerData() +struct sLOCInjectPedometerDataRequest_Timestamp +{ + UINT32 mTimestampInMilliseconds; +}; + +// Structure to describe request TLV 0x03 for LOCInjectPedometerData() +struct sLOCInjectPedometerDataRequest_TimeInterval +{ + UINT32 mTimeIntervalInMilliseconds; +}; + +// Structure to describe request TLV 0x04 for LOCInjectPedometerData() +struct sLOCInjectPedometerDataRequest_StepCount +{ + UINT32 mStepCount; +}; + +// Structure to describe request TLV 0x10 for LOCInjectPedometerData() +struct sLOCInjectPedometerDataRequest_StepConfidence +{ + UINT8 mStepConfidence; +}; + +// Structure to describe request TLV 0x11 for LOCInjectPedometerData() +struct sLOCInjectPedometerDataRequest_StepCountUncertainty +{ + float mStepCountUncertainty; +}; + +// Structure to describe request TLV 0x12 for LOCInjectPedometerData() +struct sLOCInjectPedometerDataRequest_StepRate +{ + float mStepRate; +}; + +// Structure to describe indication TLV 0x01 for LOC InjectPedometerDataIndication +struct sLOCInjectPedometerDataIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe request TLV 0x01 for LOCInjectWCDMACellInfo() +struct sLOCInjectWCDMACellInfoRequest_CellID +{ + UINT32 mMCC; + UINT32 mMNC; + UINT32 mCID; +}; + +// Structure to describe request TLV 0x02 for LOCInjectWCDMACellInfo() +struct sLOCInjectWCDMACellInfoRequest_Roaming +{ + UINT32 mRoamingStatus; +}; + +// Structure to describe request TLV 0x10 for LOCInjectWCDMACellInfo() +struct sLOCInjectWCDMACellInfoRequest_Frequency +{ + UINT32 mServingCellFrequency; +}; + +// Structure to describe request TLV 0x11 for LOCInjectWCDMACellInfo() +struct sLOCInjectWCDMACellInfoRequest_PSC +{ + UINT32 mPSC; +}; + +// Structure to describe indication TLV 0x01 for LOC InjectWCDMACellInfoIndication +struct sLOCInjectWCDMACellInfoIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe request TLV 0x01 for LOCInjectTDSCDMACellInfo() +struct sLOCInjectTDSCDMACellInfoRequest_CellID +{ + UINT32 mMCC; + UINT32 mMNC; + UINT32 mCID; + UINT32 mLAC; +}; + +// Structure to describe request TLV 0x02 for LOCInjectTDSCDMACellInfo() +struct sLOCInjectTDSCDMACellInfoRequest_Roaming +{ + UINT32 mRoamingStatus; +}; + +// Structure to describe request TLV 0x10 for LOCInjectTDSCDMACellInfo() +struct sLOCInjectTDSCDMACellInfoRequest_Frequency +{ + UINT32 mServingCellFrequency; +}; + +// Structure to describe indication TLV 0x01 for LOC InjectTDSCDMACellInfoIndication +struct sLOCInjectTDSCDMACellInfoIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe request TLV 0x10 for LOCInjectSubscriberID() +struct sLOCInjectSubscriberIDRequest_IMSI +{ + UINT64 mPreferredIMSI; +}; + +// Structure to describe request TLV 0x11 for LOCInjectSubscriberID() +struct sLOCInjectSubscriberIDRequest_MSISDN +{ + UINT64 mPreferredMSISDN; +}; + +// Structure to describe indication TLV 0x01 for LOC InjectSubscriberIDIndication +struct sLOCInjectSubscriberIDIndication_Status +{ + eQMILOCGeofenceStatus mGeofenceStatus; +}; + +// Structure to describe request TLV 0x10 for WDASetDataFormat() +struct sWDASetDataFormatRequest_QoSDataFormat +{ + INT8 mQoSFlowHeaderPresent; +}; + +// Structure to describe request TLV 0x11 for WDASetDataFormat() +struct sWDASetDataFormatRequest_LinkLayerProtocol +{ + eQMIWDALinkProtocols mLinkProtocol; +}; + +// Structure to describe request TLV 0x12 for WDASetDataFormat() +struct sWDASetDataFormatRequest_ULDataAggregationProtocol +{ + eQMIWDADataAggregationProtocols mDataAggregationProtocol; +}; + +// Structure to describe request TLV 0x13 for WDASetDataFormat() +struct sWDASetDataFormatRequest_DLDataAggregationProtocol +{ + eQMIWDADataAggregationProtocols mDataAggregationProtocol; +}; + +// Structure to describe request TLV 0x14 for WDASetDataFormat() +struct sWDASetDataFormatRequest_NDPSignature +{ + UINT32 mNDPSignature; +}; + +// Structure to describe request TLV 0x15 for WDASetDataFormat() +struct sWDASetDataFormatRequest_DLMaxAggregateDatagrams +{ + UINT32 mMaxAggregateDatagrams; +}; + +// Structure to describe request TLV 0x16 for WDASetDataFormat() +struct sWDASetDataFormatRequest_DLMaxAggregateSize +{ + UINT32 mMaxAggregateSizeInBytes; +}; + +// Structure to describe response TLV 0x10 for WDASetDataFormat() +struct sWDASetDataFormatResponse_QoSDataFormat +{ + INT8 mQoSFlowHeaderPresent; +}; + +// Structure to describe response TLV 0x11 for WDASetDataFormat() +struct sWDASetDataFormatResponse_LinkLayerProtocol +{ + eQMIWDALinkProtocols mLinkProtocol; +}; + +// Structure to describe response TLV 0x12 for WDASetDataFormat() +struct sWDASetDataFormatResponse_ULDataAggregationProtocol +{ + eQMIWDADataAggregationProtocols mDataAggregationProtocol; +}; + +// Structure to describe response TLV 0x13 for WDASetDataFormat() +struct sWDASetDataFormatResponse_DLDataAggregationProtocol +{ + eQMIWDADataAggregationProtocols mDataAggregationProtocol; +}; + +// Structure to describe response TLV 0x14 for WDASetDataFormat() +struct sWDASetDataFormatResponse_NDPSignature +{ + UINT32 mNDPSignature; +}; + +// Structure to describe response TLV 0x15 for WDASetDataFormat() +struct sWDASetDataFormatResponse_DLMaxAggregateDatagrams +{ + UINT32 mMaxAggregateDatagrams; +}; + +// Structure to describe response TLV 0x16 for WDASetDataFormat() +struct sWDASetDataFormatResponse_DLMaxAggregateSize +{ + UINT32 mMaxAggregateSizeInBytes; +}; + +// Structure to describe response TLV 0x10 for WDAGetDataFormat() +struct sWDAGetDataFormatResponse_QoSDataFormat +{ + INT8 mQoSFlowHeaderPresent; +}; + +// Structure to describe response TLV 0x11 for WDAGetDataFormat() +struct sWDAGetDataFormatResponse_LinkLayerProtocol +{ + eQMIWDALinkProtocols mLinkProtocol; +}; + +// Structure to describe response TLV 0x12 for WDAGetDataFormat() +struct sWDAGetDataFormatResponse_ULDataAggregationProtocol +{ + eQMIWDADataAggregationProtocols mDataAggregationProtocol; +}; + +// Structure to describe response TLV 0x13 for WDAGetDataFormat() +struct sWDAGetDataFormatResponse_DLDataAggregationProtocol +{ + eQMIWDADataAggregationProtocols mDataAggregationProtocol; +}; + +// Structure to describe response TLV 0x14 for WDAGetDataFormat() +struct sWDAGetDataFormatResponse_NDPSignature +{ + UINT32 mNDPSignature; +}; + +// Structure to describe response TLV 0x15 for WDAGetDataFormat() +struct sWDAGetDataFormatResponse_DLMaxAggregateDatagrams +{ + UINT32 mMaxAggregateDatagrams; +}; + +// Structure to describe response TLV 0x16 for WDAGetDataFormat() +struct sWDAGetDataFormatResponse_DLMaxAggregateSize +{ + UINT32 mMaxAggregateSizeInBytes; +}; + +// Structure to describe request TLV 0x01 for WDAEnablePacketFilter() +struct sWDAEnablePacketFilterRequest_RestrictiveFilter +{ + INT8 mRestrictiveFilter; +}; + +// Structure to describe response TLV 0x10 for WDAGetPacketFilterState() +struct sWDAGetPacketFilterStateResponse_FilterState +{ + INT8 mFilterEnabled; +}; + +// Structure to describe response TLV 0x11 for WDAGetPacketFilterState() +struct sWDAGetPacketFilterStateResponse_RestrictiveFilter +{ + INT8 mRestrictiveFilter; +}; + +// Structure to describe request TLV 0x10 for WDAAddPacketFilterRule() +struct sWDAAddPacketFilterRuleRequest_FilterHandle +{ + UINT32 mFilterHandle; +}; + +// Structure to describe request TLV 0x11 for WDAAddPacketFilterRule() +struct sWDAAddPacketFilterRuleRequest_FilterRule1 +{ + UINT8 mPatternLength; + + // This array must be the size specified by mPatternLength + // UINT8 mPattern[1]; +}; + +struct sWDAAddPacketFilterRuleRequest_FilterRule2 +{ + UINT8 mMaskLength; + + // This array must be the size specified by mMaskLength + // UINT8 mMask[1]; +}; + +struct sWDAAddPacketFilterRuleRequest_FilterRule +{ + sWDAAddPacketFilterRuleRequest_FilterRule1 mWDAAddPacketFilterRuleRequest_FilterRule1; + sWDAAddPacketFilterRuleRequest_FilterRule2 mWDAAddPacketFilterRuleRequest_FilterRule2; +}; + +// Structure to describe request TLV 0x10 for WDADeletePacketFilterRule() +struct sWDADeletePacketFilterRuleRequest_FilterHandle +{ + UINT32 mFilterHandle; +}; + +// Structure to describe response TLV 0x10 for WDADeletePacketFilterRule() +struct sWDADeletePacketFilterRuleResponse_FilterHandle +{ + UINT32 mFilterHandle; +}; + +// Structure to describe response TLV 0x10 for WDAGetPacketFilterRuleHandles() +struct sWDAGetPacketFilterRuleHandlesResponse_FilterHandles +{ + UINT8 mHandleCount; + + // This array must be the size specified by mHandleCount + // UINT32 mFilterHandle[1]; +}; + +// Structure to describe request TLV 0x01 for WDAGetPacketFilterRule() +struct sWDAGetPacketFilterRuleRequest_FilterHandle +{ + UINT32 mFilterHandle; +}; + +// Structure to describe response TLV 0x10 for WDAGetPacketFilterRule() +struct sWDAGetPacketFilterRuleResponse_FilterHandle +{ + UINT32 mFilterHandle; +}; + +// Structure to describe response TLV 0x11 for WDAGetPacketFilterRule() +struct sWDAGetPacketFilterRuleResponse_FilterRule1 +{ + UINT8 mPatternLength; + + // This array must be the size specified by mPatternLength + // UINT8 mPattern[1]; +}; + +struct sWDAGetPacketFilterRuleResponse_FilterRule2 +{ + UINT8 mMaskLength; + + // This array must be the size specified by mMaskLength + // UINT8 mMask[1]; +}; + +struct sWDAGetPacketFilterRuleResponse_FilterRule +{ + sWDAGetPacketFilterRuleResponse_FilterRule1 mWDAGetPacketFilterRuleResponse_FilterRule1; + sWDAGetPacketFilterRuleResponse_FilterRule2 mWDAGetPacketFilterRuleResponse_FilterRule2; +}; + +// Structure to describe request TLV 0x01 for WDASetLoopbackState() +struct sWDASetLoopbackStateRequest_LoopbackState +{ + INT8 mLoopbackStateEnabled; +}; + +// Structure to describe response TLV 0x10 for WDAGetLoopbackState() +struct sWDAGetLoopbackStateResponse_LoopbackState +{ + INT8 mLoopbackStateEnabled; +}; + +// Structure to describe request TLV 0x01 for QCMAPEnable() +struct sQCMAPEnableRequest_IPFamily +{ + eQMIQCMAPIPFamilies mIPFamily; +}; + +// Structure to describe request TLV 0x10 for QCMAPEnable() +struct sQCMAPEnableRequest_IPAddress +{ + UINT8 mSubnetMask[4]; + UINT8 mNATIPAddress[4]; + UINT8 mNATDNSAddress[4]; + UINT8 mUSBIPAddress[4]; + UINT8 mUSBGatewayAddress[4]; + UINT8 mApplicationsIPAddress[4]; + UINT8 mApplicationsGatewayAddress[4]; +}; + +// Structure to describe request TLV 0x11 for QCMAPEnable() +struct sQCMAPEnableRequest_NetworkPolicy +{ + bool m3GPP:1; + bool m3GPP2:1; + + // Padding out 62 bits + UINT8 mReserved1:6; + UINT8 mReserved2[7]; + + UINT8 m3GPP2ProfileID; + UINT8 m3GPPProfileID; +}; + +// Structure to describe request TLV 0x12 for QCMAPEnable() +struct sQCMAPEnableRequest_SSID2IPAddress +{ + UINT8 mIPv4Address[4]; + UINT8 mSubnetMask[4]; +}; + +// Structure to describe request TLV 0x13 for QCMAPEnable() +struct sQCMAPEnableRequest_NATType +{ + eQMIQCMAPNATTypes mNATType; +}; + +// Structure to describe response TLV 0x10 for QCMAPEnable() +struct sQCMAPEnableResponse_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x01 for QCMAPDisable() +struct sQCMAPDisableRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x01 for QCMAPBringUpWWAN() +struct sQCMAPBringUpWWANRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe indication TLV 0x01 for QCMAP BringUpWWANIndication +struct sQCMAPBringUpWWANIndication_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe indication TLV 0x02 for QCMAP BringUpWWANIndication +struct sQCMAPBringUpWWANIndication_IPFamily +{ + eQMIQCMAPIPFamilies mIPFamily; +}; + +// Structure to describe request TLV 0x01 for QCMAPTearDownWWAN() +struct sQCMAPTearDownWWANRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe indication TLV 0x01 for QCMAP TearDownWWANIndication +struct sQCMAPTearDownWWANIndication_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe indication TLV 0x02 for QCMAP TearDownWWANIndication +struct sQCMAPTearDownWWANIndication_IPFamily +{ + eQMIQCMAPIPFamilies mIPFamily; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetWWANStatus() +struct sQCMAPGetWWANStatusRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetWWANStatus() +struct sQCMAPGetWWANStatusResponse_CallEndReason +{ + eQMIQCMAPCallEndReasons mCallEndReason; +}; + +// Structure to describe response TLV 0x11 for QCMAPGetWWANStatus() +struct sQCMAPGetWWANStatusResponse_VerboseCallEndReason +{ + eQMIQCMAPVerboseCallEndReasons mVerboseCallEndReason; +}; + +// Structure to describe response TLV 0x12 for QCMAPGetWWANStatus() +struct sQCMAPGetWWANStatusResponse_PacketServiceStatus +{ + eQMIQCMAPPacketServiceStatus mPacketServiceStatus; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetIPSecVPNPassthrough() +struct sQCMAPGetIPSecVPNPassthroughRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetIPSecVPNPassthrough() +struct sQCMAPGetIPSecVPNPassthroughResponse_Passthrough +{ + INT8 mVPNPassthroughAllowed; +}; + +// Structure to describe request TLV 0x01 for QCMAPSetIPSecVPNPassthrough() +struct sQCMAPSetIPSecVPNPassthroughRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPSetIPSecVPNPassthrough() +struct sQCMAPSetIPSecVPNPassthroughRequest_Passthrough +{ + INT8 mVPNPassthroughAllowed; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetPPTPVPNPassthrough() +struct sQCMAPGetPPTPVPNPassthroughRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetPPTPVPNPassthrough() +struct sQCMAPGetPPTPVPNPassthroughResponse_Passthrough +{ + INT8 mVPNPassthroughAllowed; +}; + +// Structure to describe request TLV 0x01 for QCMAPSetPPTPVPNPassthrough() +struct sQCMAPSetPPTPVPNPassthroughRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPSetPPTPVPNPassthrough() +struct sQCMAPSetPPTPVPNPassthroughRequest_Passthrough +{ + INT8 mVPNPassthroughAllowed; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetL2TPVPNPassthrough() +struct sQCMAPGetL2TPVPNPassthroughRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetL2TPVPNPassthrough() +struct sQCMAPGetL2TPVPNPassthroughResponse_Passthrough +{ + INT8 mVPNPassthroughAllowed; +}; + +// Structure to describe request TLV 0x01 for QCMAPSetL2TPVPNPassthrough() +struct sQCMAPSetL2TPVPNPassthroughRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPSetL2TPVPNPassthrough() +struct sQCMAPSetL2TPVPNPassthroughRequest_Passthrough +{ + INT8 mVPNPassthroughAllowed; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetDynamicNATEntryTimeout() +struct sQCMAPGetDynamicNATEntryTimeoutRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetDynamicNATEntryTimeout() +struct sQCMAPGetDynamicNATEntryTimeoutResponse_Timeout +{ + UINT16 mTimeout; +}; + +// Structure to describe request TLV 0x01 for QCMAPSetDynamicNATEntryTimeout() +struct sQCMAPSetDynamicNATEntryTimeoutRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPSetDynamicNATEntryTimeout() +struct sQCMAPSetDynamicNATEntryTimeoutRequest_Timeout +{ + UINT16 mTimeout; +}; + +// Structure to describe request TLV 0x01 for QCMAPAddStaticNATEntry() +struct sQCMAPAddStaticNATEntryRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPAddStaticNATEntry() +struct sQCMAPAddStaticNATEntryRequest_SNATEntry +{ + UINT8 mPrivateIPAddress[4]; + UINT16 mPrivatePort; + UINT16 mGlobalPort; + UINT8 mProtocol; +}; + +// Structure to describe request TLV 0x01 for QCMAPDeleteStaticNATEntry() +struct sQCMAPDeleteStaticNATEntryRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPDeleteStaticNATEntry() +struct sQCMAPDeleteStaticNATEntryRequest_SNATEntry +{ + UINT8 mPrivateIPAddress[4]; + UINT16 mPrivatePort; + UINT16 mGlobalPort; + UINT8 mProtocol; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetStaticNATEntries() +struct sQCMAPGetStaticNATEntriesRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetStaticNATEntries() +struct sQCMAPGetStaticNATEntriesResponse_SNATEntries +{ + UINT8 mSNATEntriesCount; + + struct sSNATEntry + { + UINT8 mPrivateIPAddress[4]; + UINT16 mPrivatePort; + UINT16 mGlobalPort; + UINT8 mProtocol; + }; + + // This array must be the size specified by mSNATEntriesCount + // sSNATEntry mSNATEntrys[1]; +}; + +// Structure to describe request TLV 0x01 for QCMAPSetDMZ() +struct sQCMAPSetDMZRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPSetDMZ() +struct sQCMAPSetDMZRequest_DMZIPAddress +{ + UINT8 mDMZIPAddress[4]; +}; + +// Structure to describe request TLV 0x01 for QCMAPDeleteDMZ() +struct sQCMAPDeleteDMZRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetDMZ() +struct sQCMAPGetDMZRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetDMZ() +struct sQCMAPGetDMZResponse_DMZIPAddress +{ + UINT8 mDMZIPAddress[4]; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetWWANConfig() +struct sQCMAPGetWWANConfigRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPGetWWANConfig() +struct sQCMAPGetWWANConfigRequest_AddressType +{ + bool mIPv4Address:1; + bool mIPv6Address:1; + bool mIPv4DNSAddress:1; + bool mIPv6DNSAddress:1; + + // Padding out 60 bits + UINT8 mReserved1:4; + UINT8 mReserved2[7]; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetWWANConfig() +struct sQCMAPGetWWANConfigResponse_IPv4Address +{ + UINT8 mIPv4Address[4]; +}; + +// Structure to describe response TLV 0x11 for QCMAPGetWWANConfig() +struct sQCMAPGetWWANConfigResponse_IPv6Address +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x12 for QCMAPGetWWANConfig() +struct sQCMAPGetWWANConfigResponse_IPv4PrimaryDNSAddress +{ + UINT8 mIPv4Address[4]; +}; + +// Structure to describe response TLV 0x13 for QCMAPGetWWANConfig() +struct sQCMAPGetWWANConfigResponse_IPv4SecondaryDNSAddress +{ + UINT8 mIPv4Address[4]; +}; + +// Structure to describe response TLV 0x14 for QCMAPGetWWANConfig() +struct sQCMAPGetWWANConfigResponse_IPv6PrimaryDNSAddress +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe response TLV 0x15 for QCMAPGetWWANConfig() +struct sQCMAPGetWWANConfigResponse_IPv6SecondaryDNSAddress +{ + UINT16 mIPv6Address[8]; +}; + +// Structure to describe request TLV 0x01 for QCMAPEnableFirewallSetting() +struct sQCMAPEnableFirewallSettingRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPEnableFirewallSetting() +struct sQCMAPEnableFirewallSettingRequest_PacketsAllowed +{ + INT8 mPacketsMatchingFirewallRuleAllowed; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetFirewallSetting() +struct sQCMAPGetFirewallSettingRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetFirewallSetting() +struct sQCMAPGetFirewallSettingResponse_FirewallEnabled +{ + INT8 mFirewallEnabled; +}; + +// Structure to describe response TLV 0x11 for QCMAPGetFirewallSetting() +struct sQCMAPGetFirewallSettingResponse_PacketsAllowed +{ + INT8 mPacketsMatchingFirewallRuleAllowed; +}; + +// Structure to describe request TLV 0x01 for QCMAPDisableFirewallSetting() +struct sQCMAPDisableFirewallSettingRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x01 for QCMAPAddFirewallConfig() +struct sQCMAPAddFirewallConfigRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPAddFirewallConfig() +struct sQCMAPAddFirewallConfigRequest_Config +{ + UINT16 mStartingDestinationPort; + UINT16 mEndingDestinationPort; + UINT8 mProtocol; +}; + +// Structure to describe response TLV 0x10 for QCMAPAddFirewallConfig() +struct sQCMAPAddFirewallConfigResponse_FirewallHandle +{ + UINT32 mFirewallHandle; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetFirewallConfig() +struct sQCMAPGetFirewallConfigRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetFirewallConfig() +struct sQCMAPGetFirewallConfigResponse_FirewallEntries +{ + UINT8 mFirewallEntriesCount; + + struct sFirewallEntry + { + UINT32 mFirewallHandle; + UINT16 mStartingDestinationPort; + UINT16 mEndingDestinationPort; + UINT8 mProtocol; + }; + + // This array must be the size specified by mFirewallEntriesCount + // sFirewallEntry mFirewallEntrys[1]; +}; + +// Structure to describe request TLV 0x01 for QCMAPDeleteFirewallConfig() +struct sQCMAPDeleteFirewallConfigRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPDeleteFirewallConfig() +struct sQCMAPDeleteFirewallConfigRequest_FirewallHandle +{ + UINT32 mFirewallHandle; +}; + +// Structure to describe request TLV 0x01 for QCMAPWWANStatusIndicationRegister() +struct sQCMAPWWANStatusIndicationRegisterRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPWWANStatusIndicationRegister() +struct sQCMAPWWANStatusIndicationRegisterRequest_Registration +{ + INT8 mRegisterForIndication; +}; + +// Structure to describe request TLV 0x01 for QCMAPStationModeEnable() +struct sQCMAPStationModeEnableRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x01 for QCMAPStationModeDisable() +struct sQCMAPStationModeDisableRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetStationMode() +struct sQCMAPGetStationModeRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetStationMode() +struct sQCMAPGetStationModeResponse_StationMode +{ + INT8 mStationModeEnabled; +}; + +// Structure to describe indication TLV 0x01 for QCMAP WWANStatusIndication +struct sQCMAPWWANStatusIndication_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe indication TLV 0x02 for QCMAP WWANStatusIndication +struct sQCMAPWWANStatusIndication_IPFamily +{ + eQMIQCMAPIPFamilies mIPFamily; +}; + +// Structure to describe indication TLV 0x03 for QCMAP WWANStatusIndication +struct sQCMAPWWANStatusIndication_PacketServiceStatus +{ + eQMIQCMAPPacketServiceStatus mPacketServiceStatus; +}; + +// Structure to describe indication TLV 0x04 for QCMAP WWANStatusIndication +struct sQCMAPWWANStatusIndication_ReconfigRequired +{ + INT8 mReconfigurationRequired; +}; + +// Structure to describe indication TLV 0x10 for QCMAP WWANStatusIndication +struct sQCMAPWWANStatusIndication_CallEndReason +{ + eQMIQCMAPCallEndReasons mCallEndReason; +}; + +// Structure to describe indication TLV 0x11 for QCMAP WWANStatusIndication +struct sQCMAPWWANStatusIndication_VerboseCallEndReason +{ + eQMIQCMAPVerboseCallEndReasons mVerboseCallEndReason; +}; + +// Structure to describe request TLV 0x01 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_NextHeaderProtocol +{ + eQMIQCMAPNextHeaderProtocols mNextHeaderProtocol; +}; + +// Structure to describe request TLV 0x10 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_TCPUDPSource +{ + UINT16 mPort; + UINT16 mRange; +}; + +// Structure to describe request TLV 0x11 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_TCPUDPDestination +{ + UINT16 mPort; + UINT16 mRange; +}; + +// Structure to describe request TLV 0x12 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_ICMPType +{ + UINT8 mICMPType; +}; + +// Structure to describe request TLV 0x13 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_ICMPCode +{ + UINT8 mICMPCode; +}; + +// Structure to describe request TLV 0x14 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_ESPSPI +{ + UINT32 mESPSPI; +}; + +// Structure to describe request TLV 0x15 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_IPv4SourceAddress +{ + UINT8 mIPv4Address[4]; + UINT8 mSubnetMask[4]; +}; + +// Structure to describe request TLV 0x16 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_IPv4DestinationAddress +{ + UINT8 mIPv4Address[4]; + UINT8 mSubnetMask[4]; +}; + +// Structure to describe request TLV 0x17 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_IPv4TOS +{ + UINT8 mTOSValue; + UINT8 mTOSMask; +}; + +// Structure to describe request TLV 0x18 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_IPv6SourceAddress +{ + UINT16 mIPv6Address[8]; + UINT8 mPrefixLength; +}; + +// Structure to describe request TLV 0x19 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_IPv6DestinationAddress +{ + UINT16 mIPv6Address[8]; + UINT8 mPrefixLength; +}; + +// Structure to describe request TLV 0x1A for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigRequest_IPv6TrafficClass +{ + UINT8 mTrafficClassValue; + UINT8 mTrafficClassMask; +}; + +// Structure to describe response TLV 0x10 for QCMAPAddExtendedFirewallConfig() +struct sQCMAPAddExtendedFirewallConfigResponse_FirewallHandle +{ + UINT32 mFirewallHandle; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x02 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigRequest_FirewallHandle +{ + UINT32 mFirewallHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_NextHeaderProtocol +{ + eQMIQCMAPNextHeaderProtocols mNextHeaderProtocol; +}; + +// Structure to describe response TLV 0x11 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_TCPUDPSource +{ + UINT16 mPort; + UINT16 mRange; +}; + +// Structure to describe response TLV 0x12 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_TCPUDPDestination +{ + UINT16 mPort; + UINT16 mRange; +}; + +// Structure to describe response TLV 0x13 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_ICMPType +{ + UINT8 mICMPType; +}; + +// Structure to describe response TLV 0x14 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_ICMPCode +{ + UINT8 mICMPCode; +}; + +// Structure to describe response TLV 0x15 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_ESPSPI +{ + UINT32 mESPSPI; +}; + +// Structure to describe response TLV 0x16 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_IPv4SourceAddress +{ + UINT8 mIPv4Address[4]; + UINT8 mSubnetMask[4]; +}; + +// Structure to describe response TLV 0x17 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_IPv4DestinationAddress +{ + UINT8 mIPv4Address[4]; + UINT8 mSubnetMask[4]; +}; + +// Structure to describe response TLV 0x18 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_IPv4TOS +{ + UINT8 mTOSValue; + UINT8 mTOSMask; +}; + +// Structure to describe response TLV 0x19 for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_IPv6SourceAddress +{ + UINT16 mIPv6Address[8]; + UINT8 mPrefixLength; +}; + +// Structure to describe response TLV 0x1A for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_IPv6DestinationAddress +{ + UINT16 mIPv6Address[8]; + UINT8 mPrefixLength; +}; + +// Structure to describe response TLV 0x1B for QCMAPGetExtendedFirewallConfig() +struct sQCMAPGetExtendedFirewallConfigResponse_IPv6TrafficClass +{ + UINT8 mTrafficClassValue; + UINT8 mTrafficClassMask; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetFirewallHandles() +struct sQCMAPGetFirewallHandlesRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetFirewallHandles() +struct sQCMAPGetFirewallHandlesResponse_Handles +{ + UINT8 mFirewallHandlesCount; + + // This array must be the size specified by mFirewallHandlesCount + // UINT32 mFirewallHandle[1]; +}; + +// Structure to describe request TLV 0x01 for QCMAPChangeNATType() +struct sQCMAPChangeNATTypeRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe request TLV 0x10 for QCMAPChangeNATType() +struct sQCMAPChangeNATTypeRequest_NATType +{ + eQMIQCMAPNATTypes mNATType; +}; + +// Structure to describe request TLV 0x01 for QCMAPGetNATType() +struct sQCMAPGetNATTypeRequest_Handle +{ + UINT32 mMAPHandle; +}; + +// Structure to describe response TLV 0x10 for QCMAPGetNATType() +struct sQCMAPGetNATTypeResponse_NATType +{ + eQMIQCMAPNATTypes mNATType; +}; + +// Structure to describe request TLV 0x10 for PDCRegisterForIndications() +struct sPDCRegisterForIndicationsRequest_Config +{ + INT8 mEnableReporting; +}; + +// Structure to describe indication TLV 0x01 for PDC ConfigChangeIndication +struct sPDCConfigChangeIndication_Config +{ + eQMIPDCConfigurations mConfigType; + UINT8 mConfigIDLength; + + // This array must be the size specified by mConfigIDLength + // UINT8 mConfigID[1]; +}; + +// Structure to describe request TLV 0x01 for PDCGetSelectedConfig() +struct sPDCGetSelectedConfigRequest_Type +{ + eQMIPDCConfigurations mConfigType; +}; + +// Structure to describe request TLV 0x10 for PDCGetSelectedConfig() +struct sPDCGetSelectedConfigRequest_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x01 for PDC GetSelectedConfigIndication +struct sPDCGetSelectedConfigIndication_Error +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for PDC GetSelectedConfigIndication +struct sPDCGetSelectedConfigIndication_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x11 for PDC GetSelectedConfigIndication +struct sPDCGetSelectedConfigIndication_ActiveID +{ + UINT8 mConfigIDLength; + + // This array must be the size specified by mConfigIDLength + // UINT8 mConfigID[1]; +}; + +// Structure to describe indication TLV 0x12 for PDC GetSelectedConfigIndication +struct sPDCGetSelectedConfigIndication_PendingID +{ + UINT8 mConfigIDLength; + + // This array must be the size specified by mConfigIDLength + // UINT8 mConfigID[1]; +}; + +// Structure to describe request TLV 0x01 for PDCSetSelectedConfig() +struct sPDCSetSelectedConfigRequest_Config +{ + eQMIPDCConfigurations mConfigType; + UINT8 mConfigIDLength; + + // This array must be the size specified by mConfigIDLength + // UINT8 mConfigID[1]; +}; + +// Structure to describe request TLV 0x10 for PDCSetSelectedConfig() +struct sPDCSetSelectedConfigRequest_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x01 for PDC SetSelectedConfigIndication +struct sPDCSetSelectedConfigIndication_Error +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for PDC SetSelectedConfigIndication +struct sPDCSetSelectedConfigIndication_Token +{ + UINT32 mToken; +}; + +// Structure to describe request TLV 0x10 for PDCListConfigs() +struct sPDCListConfigsRequest_Token +{ + UINT32 mToken; +}; + +// Structure to describe request TLV 0x11 for PDCListConfigs() +struct sPDCListConfigsRequest_Type +{ + eQMIPDCConfigurations mConfigType; +}; + +// Structure to describe indication TLV 0x01 for PDC ListConfigsIndication +struct sPDCListConfigsIndication_Error +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for PDC ListConfigsIndication +struct sPDCListConfigsIndication_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x11 for PDC ListConfigsIndication +struct sPDCListConfigsIndication_List +{ + UINT8 mConfigListLength; + + struct sConfig + { + eQMIPDCConfigurations mConfigType; + UINT8 mConfigIDLength; + + // This array must be the size specified by mConfigIDLength + // UINT8 mConfigID[1]; + }; + + // This array must be the size specified by mConfigListLength + // sConfig mConfigs[1]; +}; + +// Structure to describe request TLV 0x01 for PDCDeleteConfig() +struct sPDCDeleteConfigRequest_Type +{ + eQMIPDCConfigurations mConfigType; +}; + +// Structure to describe request TLV 0x10 for PDCDeleteConfig() +struct sPDCDeleteConfigRequest_Token +{ + UINT32 mToken; +}; + +// Structure to describe request TLV 0x11 for PDCDeleteConfig() +struct sPDCDeleteConfigRequest_ID +{ + UINT8 mConfigIDLength; + + // This array must be the size specified by mConfigIDLength + // UINT8 mConfigID[1]; +}; + +// Structure to describe indication TLV 0x01 for PDC DeleteConfigIndication +struct sPDCDeleteConfigIndication_Error +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for PDC DeleteConfigIndication +struct sPDCDeleteConfigIndication_Token +{ + UINT32 mToken; +}; + +// Structure to describe request TLV 0x01 for PDCLoadConfig() +struct sPDCLoadConfigRequest_Frame1 +{ + eQMIPDCConfigurations mConfigType; + UINT8 mConfigIDLength; + + // This array must be the size specified by mConfigIDLength + // UINT8 mConfigID[1]; +}; + +struct sPDCLoadConfigRequest_Frame2 +{ + UINT32 mTotalSize; + UINT16 mFrameSize; + + // This array must be the size specified by mFrameSize + // UINT8 mFrame[1]; +}; + +struct sPDCLoadConfigRequest_Frame +{ + sPDCLoadConfigRequest_Frame1 mPDCLoadConfigRequest_Frame1; + sPDCLoadConfigRequest_Frame2 mPDCLoadConfigRequest_Frame2; +}; + +// Structure to describe request TLV 0x10 for PDCLoadConfig() +struct sPDCLoadConfigRequest_Token +{ + UINT32 mToken; +}; + +// Structure to describe response TLV 0x10 for PDCLoadConfig() +struct sPDCLoadConfigResponse_Reset +{ + INT8 mFrameReset; +}; + +// Structure to describe indication TLV 0x01 for PDC LoadConfigIndication +struct sPDCLoadConfigIndication_Error +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for PDC LoadConfigIndication +struct sPDCLoadConfigIndication_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x11 for PDC LoadConfigIndication +struct sPDCLoadConfigIndication_Received +{ + UINT32 mReceivedSize; +}; + +// Structure to describe indication TLV 0x12 for PDC LoadConfigIndication +struct sPDCLoadConfigIndication_Remaining +{ + UINT32 mRemainingSize; +}; + +// Structure to describe indication TLV 0x13 for PDC LoadConfigIndication +struct sPDCLoadConfigIndication_Reset +{ + INT8 mFrameReset; +}; + +// Structure to describe request TLV 0x01 for PDCActivateConfig() +struct sPDCActivateConfigRequest_Type +{ + eQMIPDCConfigurations mConfigType; +}; + +// Structure to describe request TLV 0x10 for PDCActivateConfig() +struct sPDCActivateConfigRequest_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x01 for PDC ActivateConfigIndication +struct sPDCActivateConfigIndication_Error +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for PDC ActivateConfigIndication +struct sPDCActivateConfigIndication_Token +{ + UINT32 mToken; +}; + +// Structure to describe request TLV 0x01 for PDCGetConfigInfo() +struct sPDCGetConfigInfoRequest_Config +{ + eQMIPDCConfigurations mConfigType; + UINT8 mConfigIDLength; + + // This array must be the size specified by mConfigIDLength + // UINT8 mConfigID[1]; +}; + +// Structure to describe request TLV 0x10 for PDCGetConfigInfo() +struct sPDCGetConfigInfoRequest_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x01 for PDC GetConfigInfoIndication +struct sPDCGetConfigInfoIndication_Error +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for PDC GetConfigInfoIndication +struct sPDCGetConfigInfoIndication_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x11 for PDC GetConfigInfoIndication +struct sPDCGetConfigInfoIndication_Size +{ + UINT32 mTotalSize; +}; + +// Structure to describe indication TLV 0x12 for PDC GetConfigInfoIndication +struct sPDCGetConfigInfoIndication_Description +{ + UINT8 mDescriptionLength; + + // This array must be the size specified by mDescriptionLength + // char mDescription[1]; +}; + +// Structure to describe indication TLV 0x13 for PDC GetConfigInfoIndication +struct sPDCGetConfigInfoIndication_Version +{ + UINT32 mVersion; +}; + +// Structure to describe request TLV 0x01 for PDCGetConfigLimits() +struct sPDCGetConfigLimitsRequest_Type +{ + eQMIPDCConfigurations mConfigType; +}; + +// Structure to describe request TLV 0x10 for PDCGetConfigLimits() +struct sPDCGetConfigLimitsRequest_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x01 for PDC GetConfigLimitsIndication +struct sPDCGetConfigLimitsIndication_Error +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for PDC GetConfigLimitsIndication +struct sPDCGetConfigLimitsIndication_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x11 for PDC GetConfigLimitsIndication +struct sPDCGetConfigLimitsIndication_MaximumSize +{ + UINT64 mMaximumSize; +}; + +// Structure to describe indication TLV 0x12 for PDC GetConfigLimitsIndication +struct sPDCGetConfigLimitsIndication_CurrentSize +{ + UINT64 mCurrentSize; +}; + +// Structure to describe request TLV 0x01 for PDCGetDefaultConfigInfo() +struct sPDCGetDefaultConfigInfoRequest_Type +{ + eQMIPDCConfigurations mConfigType; +}; + +// Structure to describe request TLV 0x10 for PDCGetDefaultConfigInfo() +struct sPDCGetDefaultConfigInfoRequest_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x01 for PDC GetDefaultConfigInfoIndication +struct sPDCGetDefaultConfigInfoIndication_Error +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for PDC GetDefaultConfigInfoIndication +struct sPDCGetDefaultConfigInfoIndication_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x11 for PDC GetDefaultConfigInfoIndication +struct sPDCGetDefaultConfigInfoIndication_Version +{ + UINT32 mVersion; +}; + +// Structure to describe indication TLV 0x12 for PDC GetDefaultConfigInfoIndication +struct sPDCGetDefaultConfigInfoIndication_Size +{ + UINT32 mTotalSize; +}; + +// Structure to describe indication TLV 0x13 for PDC GetDefaultConfigInfoIndication +struct sPDCGetDefaultConfigInfoIndication_Description +{ + UINT8 mDescriptionLength; + + // This array must be the size specified by mDescriptionLength + // char mDescription[1]; +}; + +// Structure to describe request TLV 0x01 for PDCDeactivateConfig() +struct sPDCDeactivateConfigRequest_Type +{ + eQMIPDCConfigurations mConfigType; +}; + +// Structure to describe request TLV 0x10 for PDCDeactivateConfig() +struct sPDCDeactivateConfigRequest_Token +{ + UINT32 mToken; +}; + +// Structure to describe indication TLV 0x01 for PDC DeactivateConfigIndication +struct sPDCDeactivateConfigIndication_Error +{ + eQMIErrors mQMIError; +}; + +// Structure to describe indication TLV 0x10 for PDC DeactivateConfigIndication +struct sPDCDeactivateConfigIndication_Token +{ + UINT32 mToken; +}; + +// Structure to describe request TLV 0x01 for RFRPESetRFMScenario() +struct sRFRPESetRFMScenarioRequest_Scenarios +{ + UINT8 mScenarioCount; + + // This array must be the size specified by mScenarioCount + // UINT32 mScenarioNumber[1]; +}; + +// Structure to describe response TLV 0x10 for RFRPEGetRFMScenario() +struct sRFRPEGetRFMScenarioResponse_Scenarios +{ + UINT8 mScenarioCount; + + // This array must be the size specified by mScenarioCount + // UINT32 mScenarioNumber[1]; +}; + +// Structure to describe response TLV 0x10 for RFRPEGetProvisionedTableRevision() +struct sRFRPEGetProvisionedTableRevisionResponse_Revision +{ + UINT32 mProvisionedTableRevision; +}; + +// Structure to describe response TLV 0x11 for RFRPEGetProvisionedTableRevision() +struct sRFRPEGetProvisionedTableRevisionResponse_Names +{ + UINT8 mProvisionedTableOEMNameLength; + + // This array must be the size specified by mProvisionedTableOEMNameLength + // UINT16 mProvisionedTableOEMName[1]; +}; + +// Structure to describe request TLV 0x10 for CATSetEventReport() +struct sCATSetEventReportRequest_ReportMask +{ + bool mDisplayText:1; + bool mGetInkey:1; + bool mGetInput:1; + bool mSetupMenu:1; + bool mSelectItem:1; + bool mSendSMSAlphaIdentifier:1; + bool mSetupEventUserActivity:1; + bool mSetupEventIdleScreenNotify:1; + bool mSetupEventLanguageSelNotify:1; + bool mSetupIdleModeText:1; + bool mLanguageNotification:1; + bool mRefresh:1; + bool mEndProactiveSession:1; + bool mPlayTone:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mLaunchBrowser:1; + bool mSendSS:1; + bool mSendUSSD:1; + bool mProvideLocalInformationLanguage:1; + bool mBearerIndependentProtocol:1; + bool mSetupEventBrowserTermination:1; + bool mProvideLocalInformationTime:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mActivate:1; + bool mSetupEventHCIConnectivity:1; + + // Padding out 6 bits + UINT8 mReserved2:6; +}; + +// Structure to describe request TLV 0x11 for CATSetEventReport() +struct sCATSetEventReportRequest_DecodeReportMask +{ + bool mDisplayText:1; + bool mGetInkey:1; + bool mGetInput:1; + bool mSetupMenu:1; + bool mSelectItem:1; + bool mSendSMSAlphaIdentifier:1; + bool mSetupEventUserActivity:1; + bool mSetupEventIdleScreenNotify:1; + bool mSetupEventLanguageSelNotify:1; + bool mSetupIdleModeText:1; + bool mLanguageNotification:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mEndProactiveSession:1; + bool mPlayTone:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mLaunchBrowser:1; + bool mSendSS:1; + bool mSendUSSD:1; + bool mProvideLocalInformationLanguage:1; + bool mBearerIndependentProtocol:1; + bool mSetupEventBrowserTermination:1; + + // Padding out 1 bits + UINT8 mReserved2:1; + + bool mSCWSEvent:1; + bool mActivate:1; + bool mSetupEventHCIConnectivity:1; + bool mBearerIndependentProtocolStatus:1; + + // Padding out 5 bits + UINT8 mReserved3:5; +}; + +// Structure to describe request TLV 0x12 for CATSetEventReport() +struct sCATSetEventReportRequest_Slot +{ + bool mSlot1:1; + bool mSlot2:1; + bool mSlot3:1; + bool mSlot4:1; + bool mSlot5:1; + + // Padding out 3 bits + UINT8 mReserved1:3; +}; + +// Structure to describe request TLV 0x13 for CATSetEventReport() +struct sCATSetEventReportRequest_FullFunctionMask +{ + bool mSendSMS:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mSendSS:1; + bool mSendUSSD:1; + + // Padding out 27 bits + UINT8 mReserved1:3; + UINT8 mReserved2[3]; +}; + +// Structure to describe response TLV 0x10 for CATSetEventReport() +struct sCATSetEventReportResponse_RegStatusMask +{ + bool mDisplayText:1; + bool mGetInkey:1; + bool mGetInput:1; + bool mSetupMenu:1; + bool mSelectItem:1; + bool mSendSMSAlphaIdentifier:1; + bool mSetupEventUserActivity:1; + bool mSetupEventIdleScreenNotify:1; + bool mSetupEventLanguageSelNotify:1; + bool mSetupIdleModeText:1; + bool mLanguageNotification:1; + bool mRefresh:1; + bool mEndProactiveSession:1; + bool mPlayTone:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mLaunchBrowser:1; + bool mSendSS:1; + bool mSendUSSD:1; + bool mProvideLocalInformationLanguage:1; + bool mBearerIndependentProtocol:1; + bool mSetupEventBrowserTermination:1; + bool mProvideLocalInformationTime:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mActivate:1; + bool mSetupEventHCIConnectivity:1; + + // Padding out 6 bits + UINT8 mReserved2:6; +}; + +// Structure to describe response TLV 0x11 for CATSetEventReport() +struct sCATSetEventReportResponse_DecodedRegStatusMask +{ + bool mDisplayText:1; + bool mGetInkey:1; + bool mGetInput:1; + bool mSetupMenu:1; + bool mSelectItem:1; + bool mSendSMSAlphaIdentifier:1; + bool mSetupEventUserActivity:1; + bool mSetupEventIdleScreenNotify:1; + bool mSetupEventLanguageSelNotify:1; + bool mSetupIdleModeText:1; + bool mLanguageNotification:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mEndProactiveSession:1; + bool mPlayTone:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mLaunchBrowser:1; + bool mSendSS:1; + bool mSendUSSD:1; + bool mProvideLocalInformationLanguage:1; + bool mBearerIndependentProtocol:1; + bool mSetupEventBrowserTermination:1; + + // Padding out 1 bits + UINT8 mReserved2:1; + + bool mSCWSEvent:1; + bool mActivate:1; + bool mSetupEventHCIConnectivity:1; + bool mBearerIndependentProtocolStatus:1; + + // Padding out 5 bits + UINT8 mReserved3:5; +}; + +// Structure to describe response TLV 0x12 for CATSetEventReport() +struct sCATSetEventReportResponse_FullFunctionFailureMask +{ + bool mSendSMS:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mSendSS:1; + bool mSendUSSD:1; + + // Padding out 27 bits + UINT8 mReserved1:3; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x10 for CAT EventReport +struct sCATEventReportIndication_DisplayTextEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mDisplayTextCommand[1]; +}; + +// Structure to describe indication TLV 0x11 for CAT EventReport +struct sCATEventReportIndication_GetInkeyEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mGetInkeyCommand[1]; +}; + +// Structure to describe indication TLV 0x12 for CAT EventReport +struct sCATEventReportIndication_GetInputEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mGetInputCommand[1]; +}; + +// Structure to describe indication TLV 0x13 for CAT EventReport +struct sCATEventReportIndication_SetupMenuEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupMenuCommand[1]; +}; + +// Structure to describe indication TLV 0x14 for CAT EventReport +struct sCATEventReportIndication_SelectItemEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSelectItemCommand[1]; +}; + +// Structure to describe indication TLV 0x15 for CAT EventReport +struct sCATEventReportIndication_AlphaIDAvailable +{ + eQMICATAlphaIDCommandType mAlphaIDCommandType; + UINT16 mAlphaIDLength; + + // This array must be the size specified by mAlphaIDLength + // UINT8 mAlphaID[1]; +}; + +// Structure to describe indication TLV 0x16 for CAT EventReport +struct sCATEventReportIndication_SetupEventList +{ + bool mUserActivityNotify:1; + bool mIdleScreenAvailable:1; + bool mLanguageSelectionNotify:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; +}; + +// Structure to describe indication TLV 0x17 for CAT EventReport +struct sCATEventReportIndication_SetupIdleModeTextEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupIdleModeTextCommand[1]; +}; + +// Structure to describe indication TLV 0x18 for CAT EventReport +struct sCATEventReportIndication_LanguageNotificationEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mLanguageNotificationCommand[1]; +}; + +// Structure to describe indication TLV 0x19 for CAT EventReport +struct sCATEventReportIndication_RefreshEvent +{ + UINT16 mRefreshMode; + eQMICATRefreshStage mRefreshStage; +}; + +// Structure to describe indication TLV 0x1A for CAT EventReport +struct sCATEventReportIndication_EndProactiveSession +{ + eQMICATProactiveSessionEndType mProactiveSessionEndType; +}; + +// Structure to describe indication TLV 0x1B for CAT EventReport +struct sCATEventReportIndication_DecodedHeaderID +{ + eQMICATCommandID mCommandID; + UINT32 mReferenceID; + UINT8 mCommandNumber; +}; + +// Structure to describe indication TLV 0x1C for CAT EventReport +struct sCATEventReportIndication_TextString +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x1D for CAT EventReport +struct sCATEventReportIndication_HighPriority +{ + eQMICATHighPriority mHighPriority; +}; + +// Structure to describe indication TLV 0x1E for CAT EventReport +struct sCATEventReportIndication_UserControl +{ + eQMICATUserControl mUserControl; +}; + +// Structure to describe indication TLV 0x1F for CAT EventReport +struct sCATEventReportIndication_Icon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe indication TLV 0x20 for CAT EventReport +struct sCATEventReportIndication_Duration +{ + eQMICATTimeUnits mUnits; + UINT8 mInterval; +}; + +// Structure to describe indication TLV 0x21 for CAT EventReport +struct sCATEventReportIndication_ResponseFormat +{ + eQMICATResponseFormat mResponseFormat; +}; + +// Structure to describe indication TLV 0x22 for CAT EventReport +struct sCATEventReportIndication_HelpAvailable +{ + eQMICATHelpAvailable mHelpAvailable; +}; + +// Structure to describe indication TLV 0x23 for CAT EventReport +struct sCATEventReportIndication_ResponsePackingFormat +{ + eQMICATResponsePackingFormat mResponsePackingFormat; +}; + +// Structure to describe indication TLV 0x24 for CAT EventReport +struct sCATEventReportIndication_ResponseLength +{ + UINT8 mMaximumUserInput; + UINT8 mMinimumUserInput; +}; + +// Structure to describe indication TLV 0x25 for CAT EventReport +struct sCATEventReportIndication_ShowUserInput +{ + eQMICATShowUserInput mShowUserInput; +}; + +// Structure to describe indication TLV 0x26 for CAT EventReport +struct sCATEventReportIndication_Tone +{ + eQMICATTone mTone; +}; + +// Structure to describe indication TLV 0x27 for CAT EventReport +struct sCATEventReportIndication_SoftkeySelection +{ + eQMICATSoftkeySelection mSoftkeySelection; +}; + +// Structure to describe indication TLV 0x28 for CAT EventReport +struct sCATEventReportIndication_Items +{ + UINT8 mItemsLength; + + struct sItem + { + UINT8 mItemID; + UINT8 mItemTextLength; + + // This array must be the size specified by mItemTextLength + // UINT8 mItemText[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe indication TLV 0x29 for CAT EventReport +struct sCATEventReportIndication_DefaultItem +{ + UINT8 mDefaultItem; +}; + +// Structure to describe indication TLV 0x2A for CAT EventReport +struct sCATEventReportIndication_NextActionIdentifier +{ + UINT8 mActionsLength; + + // This array must be the size specified by mActionsLength + // eQMICATNextAction mNextAction[1]; +}; + +// Structure to describe indication TLV 0x2B for CAT EventReport +struct sCATEventReportIndication_IconIDList +{ + eQMICATDisplayIconOnly mDisplayIconOnly; + UINT8 mItemsLength; + + struct sItem + { + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe indication TLV 0x2C for CAT EventReport +struct sCATEventReportIndication_Presentation +{ + eQMICATPresentation mPresentation; +}; + +// Structure to describe indication TLV 0x2D for CAT EventReport +struct sCATEventReportIndication_PackingRequired +{ + eQMICATPackingRequired mPackingRequired; +}; + +// Structure to describe indication TLV 0x2E for CAT EventReport +struct sCATEventReportIndication_SMSTPDU +{ + UINT8 mSMSTPDUDataLength; + + // This array must be the size specified by mSMSTPDUDataLength + // UINT8 mSMSTPDUData[1]; +}; + +// Structure to describe indication TLV 0x2F for CAT EventReport +struct sCATEventReportIndication_IsCDMASMS +{ + eQMICATIsCDMASMS mIsCDMASMS; +}; + +// Structure to describe indication TLV 0x30 for CAT EventReport +struct sCATEventReportIndication_Address +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe indication TLV 0x31 for CAT EventReport +struct sCATEventReportIndication_CallSetupRequirement +{ + eQMICATCallSetupRequirement mCallSetupRequirement; +}; + +// Structure to describe indication TLV 0x32 for CAT EventReport +struct sCATEventReportIndication_Redial +{ + eQMICATRedialNecessary mRedialNecessary; + eQMICATTimeUnits mUnits; + UINT8 mInterval; +}; + +// Structure to describe indication TLV 0x33 for CAT EventReport +struct sCATEventReportIndication_Subaddress +{ + UINT8 mSubaddressDataLength; + + struct sSubaddressData + { + UINT8 mSubaddressData1:4; + UINT8 mSubaddressData2:4; + }; + + // This array must be the size specified by mSubaddressDataLength + // sSubaddressData mSubaddressDatas[1]; +}; + +// Structure to describe indication TLV 0x34 for CAT EventReport +struct sCATEventReportIndication_CapabilitiesConfiguration +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe indication TLV 0x35 for CAT EventReport +struct sCATEventReportIndication_DTMF +{ + UINT8 mDTMFDataLength; + + struct sDTMFData + { + UINT8 mDTMFData1:4; + UINT8 mDTMFData2:4; + }; + + // This array must be the size specified by mDTMFDataLength + // sDTMFData mDTMFDatas[1]; +}; + +// Structure to describe indication TLV 0x36 for CAT EventReport +struct sCATEventReportIndication_SpecificLanguageNotification +{ + eQMICATSpecificLanguageNotfication mSpecificLanguageNotification; +}; + +// Structure to describe indication TLV 0x37 for CAT EventReport +struct sCATEventReportIndication_Language +{ + char mLanguage[2]; +}; + +// Structure to describe indication TLV 0x38 for CAT EventReport +struct sCATEventReportIndication_LaunchMode +{ + eQMICATLaunchMode mLaunchMode; +}; + +// Structure to describe indication TLV 0x39 for CAT EventReport +struct sCATEventReportIndication_URL +{ + UINT8 mURLDataLength; + + // This array must be the size specified by mURLDataLength + // char mURLData[1]; +}; + +// Structure to describe indication TLV 0x3A for CAT EventReport +struct sCATEventReportIndication_BrowserID +{ + UINT8 mBrowserID; +}; + +// Structure to describe indication TLV 0x3B for CAT EventReport +struct sCATEventReportIndication_BearerList +{ + UINT8 mBearerListLength; + + // This array must be the size specified by mBearerListLength + // eQMICATBearer mBearerList[1]; +}; + +// Structure to describe indication TLV 0x3C for CAT EventReport +struct sCATEventReportIndication_ProvisioningFile +{ + UINT32 mNumberOfProvisioningFiles; + + struct sFile + { + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // char mPath[1]; + }; + + // This array must be the size specified by mNumberOfProvisioningFiles + // sFile mFiles[1]; +}; + +// Structure to describe indication TLV 0x3D for CAT EventReport +struct sCATEventReportIndication_USSDString +{ + eQMICATUSSDDataCodingScheme mOriginalDataCodingScheme; + eQMICATUSSDDataCodingScheme mDataCodingScheme; + UINT8 mUSSDTextLength; + + // This array must be the size specified by mUSSDTextLength + // UINT8 mUSSDText[1]; +}; + +// Structure to describe indication TLV 0x3E for CAT EventReport +struct sCATEventReportIndication_DefaultText +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x3F for CAT EventReport +struct sCATEventReportIndication_ImmediateResponseRequired +{ + eQMICATImmediateResponse mImmediateResponse; +}; + +// Structure to describe indication TLV 0x40 for CAT EventReport +struct sCATEventReportIndication_UserConfirmationAlpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x41 for CAT EventReport +struct sCATEventReportIndication_SetupCallDisplayAlpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x42 for CAT EventReport +struct sCATEventReportIndication_UserConfirmationIcon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe indication TLV 0x43 for CAT EventReport +struct sCATEventReportIndication_SetupCallDisplayIcon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe indication TLV 0x44 for CAT EventReport +struct sCATEventReportIndication_GatewayProxy +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x45 for CAT EventReport +struct sCATEventReportIndication_Alpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x46 for CAT EventReport +struct sCATEventReportIndication_NotificationRequired +{ + eQMICATNotificationRequired mNotificationRequired; +}; + +// Structure to describe indication TLV 0x47 for CAT EventReport +struct sCATEventReportIndication_PlayToneEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mPlayToneCommand[1]; +}; + +// Structure to describe indication TLV 0x48 for CAT EventReport +struct sCATEventReportIndication_SetupCallEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupCallCommand[1]; +}; + +// Structure to describe indication TLV 0x49 for CAT EventReport +struct sCATEventReportIndication_SendDTMFEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendDTMFCommand[1]; +}; + +// Structure to describe indication TLV 0x4A for CAT EventReport +struct sCATEventReportIndication_LaunchBrowserEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mLaunchBrowserCommand[1]; +}; + +// Structure to describe indication TLV 0x4B for CAT EventReport +struct sCATEventReportIndication_SendSMSEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendSMSCommand[1]; +}; + +// Structure to describe indication TLV 0x4C for CAT EventReport +struct sCATEventReportIndication_SendSSEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendSSCommand[1]; +}; + +// Structure to describe indication TLV 0x4D for CAT EventReport +struct sCATEventReportIndication_SendUSSDEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendUSSDCommand[1]; +}; + +// Structure to describe indication TLV 0x4E for CAT EventReport +struct sCATEventReportIndication_ProvideLocalInformationEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mProvideLocalInformationCommand[1]; +}; + +// Structure to describe indication TLV 0x4F for CAT EventReport +struct sCATEventReportIndication_SetupRawEventList +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupEventListCommand[1]; +}; + +// Structure to describe indication TLV 0x50 for CAT EventReport +struct sCATEventReportIndication_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe indication TLV 0x51 for CAT EventReport +struct sCATEventReportIndication_OpenChannelEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mOpenChannelCommand[1]; +}; + +// Structure to describe indication TLV 0x52 for CAT EventReport +struct sCATEventReportIndication_CloseChannelEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mCloseChannelCommand[1]; +}; + +// Structure to describe indication TLV 0x53 for CAT EventReport +struct sCATEventReportIndication_SendDataEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendDataCommand[1]; +}; + +// Structure to describe indication TLV 0x54 for CAT EventReport +struct sCATEventReportIndication_ReceiveDataEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mReceiveDataCommand[1]; +}; + +// Structure to describe indication TLV 0x55 for CAT EventReport +struct sCATEventReportIndication_OnDemmandLinkEstablish +{ + eQMICATOnDemandLinkEstablish mOnDemandLinkEstablish; +}; + +// Structure to describe indication TLV 0x56 for CAT EventReport +struct sCATEventReportIndication_CSDBearerDescription +{ + UINT8 mSpeed; + eQMICATCSDBearerName mCSDBearerName; + eQMICATConnectionElement mConnectionElement; +}; + +// Structure to describe indication TLV 0x57 for CAT EventReport +struct sCATEventReportIndication_GPRSBearerDescription +{ + UINT8 mPrecedenceClass; + UINT8 mDelayClass; + UINT8 mReliabilityClass; + UINT8 mPeakThroughput; + UINT8 mMeanThroughput; + eQMICATPacketDataProtocol mPacketDataProtocol; +}; + +// Structure to describe indication TLV 0x58 for CAT EventReport +struct sCATEventReportIndication_EUTRANExternalParameterBearerDescription +{ + eQMICATTrafficClass mTrafficClass; + UINT16 mMaxUploadBitrate; + UINT16 mMaxDownloadBitrate; + UINT16 mGuaranteedUploadBitrate; + UINT16 mGuaranteedDownloadBitrate; + eQMICATDeliveryOrder mDeliveryOrder; + UINT8 mMaxSDUSize; + UINT8 mMaxSDUErrorRatio; + UINT8 mResidualBitErrorRatio; + eQMICATDeliverErrorSDU mDeliverErrorSDU; + UINT8 mTransferDelay; + UINT8 mTrafficHandlingPRI; + eQMICATPDPType mPDPType; +}; + +// Structure to describe indication TLV 0x59 for CAT EventReport +struct sCATEventReportIndication_EUTRANExternalMappedUTRANBearerDescription +{ + UINT8 mQCI; + UINT8 mMaxUploadBitrate; + UINT8 mMaxDownloadBitrate; + UINT8 mGuaranteedUploadBitrate; + UINT8 mGuaranteedDownloadBitrate; + UINT8 mMaximumUploadBitrateExt; + UINT8 mMaximumDownloadBitrateExt; + UINT8 mGuaranteedUploadBitrateExt; + UINT8 mGuaranteedDownloadBitrateExt; + eQMICATPDPType mPDPType; +}; + +// Structure to describe indication TLV 0x5A for CAT EventReport +struct sCATEventReportIndication_BufferSize +{ + UINT16 mBufferSize; +}; + +// Structure to describe indication TLV 0x5B for CAT EventReport +struct sCATEventReportIndication_NetworkAccessName +{ + UINT8 mNetworkAccessNameLength; + + // This array must be the size specified by mNetworkAccessNameLength + // UINT8 mNetworkAccessName[1]; +}; + +// Structure to describe indication TLV 0x5C for CAT EventReport +struct sCATEventReportIndication_OtherAddress +{ + eQMICATAddressType mAddressType; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe indication TLV 0x5D for CAT EventReport +struct sCATEventReportIndication_UserLogin +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x5E for CAT EventReport +struct sCATEventReportIndication_UserPassword +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe indication TLV 0x5F for CAT EventReport +struct sCATEventReportIndication_TransportLevel +{ + eQMICATTransportProtocol mTransportProtocol; + UINT16 mPortNumber; +}; + +// Structure to describe indication TLV 0x60 for CAT EventReport +struct sCATEventReportIndication_DataDestinationAddress +{ + eQMICATAddressType mAddressType; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe indication TLV 0x61 for CAT EventReport +struct sCATEventReportIndication_ChannelDataLength +{ + UINT8 mChannelDataLength; +}; + +// Structure to describe indication TLV 0x62 for CAT EventReport +struct sCATEventReportIndication_SendDataImmediately +{ + eQMICATSendDataImmediately mSendDataImmediately; +}; + +// Structure to describe indication TLV 0x63 for CAT EventReport +struct sCATEventReportIndication_ChannelData +{ + UINT16 mChannelDataLength; + + // This array must be the size specified by mChannelDataLength + // UINT8 mChannelData[1]; +}; + +// Structure to describe indication TLV 0x64 for CAT EventReport +struct sCATEventReportIndication_ChannelID +{ + UINT8 mChannelID; +}; + +// Structure to describe indication TLV 0x65 for CAT EventReport +struct sCATEventReportIndication_ItemsWithDCS +{ + UINT8 mItemsLength; + + struct sItem + { + UINT8 mItemID; + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mItemTextLength; + + // This array must be the size specified by mItemTextLength + // UINT8 mItemText[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe indication TLV 0x66 for CAT EventReport +struct sCATEventReportIndication_Activate +{ + UINT32 mReferenceID; + UINT16 mActivateLength; + + // This array must be the size specified by mActivateLength + // UINT8 mActivate[1]; +}; + +// Structure to describe indication TLV 0x67 for CAT EventReport +struct sCATEventReportIndication_ActivateTarget +{ + eQMICATActivateTargets mActivateTarget; +}; + +// Structure to describe indication TLV 0x68 for CAT EventReport +struct sCATEventReportIndication_ResponseType +{ + eQMICATResponseTypes mResponseType; +}; + +// Structure to describe indication TLV 0x69 for CAT EventReport +struct sCATEventReportIndication_BearerIndependentProtocolStatus +{ + UINT8 mChannelID; + eQMICATBearerIndependentProtocolStatus mBearerIndependentProtocolStatus; +}; + +// Structure to describe response TLV 0x01 for CATGetServiceState() +struct sCATGetServiceStateResponse_CATServiceState +{ + bool mCommonDisplayText:1; + bool mCommonGetInkey:1; + bool mCommonGetInput:1; + bool mCommonSetupMenu:1; + bool mCommonSelectItem:1; + bool mCommonSendSMSAlphaIdentifier:1; + bool mCommonSetupEventUserActivity:1; + bool mCommonSetupEventIdleScreenNotify:1; + bool mCommonSetupEventLanguageSelNotify:1; + bool mCommonSetupIdleModeText:1; + bool mCommonLanguageNotification:1; + bool mCommonRefresh:1; + bool mCommonEndProactiveSession:1; + bool mCommonPlayTone:1; + bool mCommonSetupCall:1; + bool mCommonSendDTMF:1; + bool mCommonLaunchBrowser:1; + bool mCommonSendSS:1; + bool mCommonSendUSSD:1; + bool mCommonProvideLocalInformationLanguage:1; + bool mCommonBearerIndependentProtocol:1; + bool mCommonSetupEventBrowserTermination:1; + bool mCommonProvideLocalInformationTime:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mCommonActivate:1; + bool mCommonSetupEventHCIConnectivity:1; + + // Padding out 6 bits + UINT8 mReserved2:6; + + bool mControlDisplayText:1; + bool mControlGetInkey:1; + bool mControlGetInput:1; + bool mControlSetupMenu:1; + bool mControlSelectItem:1; + bool mControlSendSMSAlphaIdentifier:1; + bool mControlSetupEventUserActivity:1; + bool mControlSetupEventIdleScreenNotify:1; + bool mControlSetupEventLanguageSelNotify:1; + bool mControlSetupIdleModeText:1; + bool mControlLanguageNotification:1; + bool mControlRefresh:1; + bool mControlEndProactiveSession:1; + bool mControlPlayTone:1; + bool mControlSetupCall:1; + bool mControlSendDTMF:1; + bool mControlLaunchBrowser:1; + bool mControlSendSS:1; + bool mControlSendUSSD:1; + bool mControlProvideLocalInformationLanguage:1; + bool mControlBearerIndependentProtocol:1; + bool mControlSetupEventBrowserTermination:1; + bool mControlProvideLocalInformationTime:1; + + // Padding out 1 bits + UINT8 mReserved3:1; + + bool mControlActivate:1; + bool mControlSetupEventHCIConnectivity:1; + + // Padding out 6 bits + UINT8 mReserved4:6; +}; + +// Structure to describe response TLV 0x10 for CATGetServiceState() +struct sCATGetServiceStateResponse_DecodedCATServiceState +{ + bool mCommonDisplayText:1; + bool mCommonGetInkey:1; + bool mCommonGetInput:1; + bool mCommonSetupMenu:1; + bool mCommonSelectItem:1; + bool mCommonSendSMSAlphaIdentifier:1; + bool mCommonSetupEventUserActivity:1; + bool mCommonSetupEventIdleScreenNotify:1; + bool mCommonSetupEventLanguageSelNotify:1; + bool mCommonSetupIdleModeText:1; + bool mCommonLanguageNotification:1; + + // Padding out 1 bits + UINT8 mReserved1:1; + + bool mCommonEndProactiveSession:1; + bool mCommonPlayTone:1; + bool mCommonSetupCall:1; + bool mCommonSendDTMF:1; + bool mCommonLaunchBrowser:1; + bool mCommonSendSS:1; + bool mCommonSendUSSD:1; + bool mCommonProvideLocalInformationLanguage:1; + bool mCommonBearerIndependentProtocol:1; + bool mCommonSetupEventBrowserTermination:1; + + // Padding out 1 bits + UINT8 mReserved2:1; + + bool mCommonSCWSEvent:1; + bool mCommonActivate:1; + bool mCommonSetupEventHCIConnectivity:1; + bool mCommonBearerIndependentProtocolStatus:1; + + // Padding out 5 bits + UINT8 mReserved3:5; + + bool mControlDisplayText:1; + bool mControlGetInkey:1; + bool mControlGetInput:1; + bool mControlSetupMenu:1; + bool mControlSelectItem:1; + bool mControlSendSMSAlphaIdentifier:1; + bool mControlSetupEventUserActivity:1; + bool mControlSetupEventIdleScreenNotify:1; + bool mControlSetupEventLanguageSelNotify:1; + bool mControlSetupIdleModeText:1; + bool mControlLanguageNotification:1; + + // Padding out 1 bits + UINT8 mReserved4:1; + + bool mControlEndProactiveSession:1; + bool mControlPlayTone:1; + bool mControlSetupCall:1; + bool mControlSendDTMF:1; + bool mControlLaunchBrowser:1; + bool mControlSendSS:1; + bool mControlSendUSSD:1; + bool mControlProvideLocalInformationLanguage:1; + bool mControlBearerIndependentProtocol:1; + bool mControlSetupEventBrowserTermination:1; + + // Padding out 1 bits + UINT8 mReserved5:1; + + bool mControlSCWSEvent:1; + bool mControlActivate:1; + bool mControlSetupEventHCIConnectivity:1; + bool mControlBearerIndependentProtocolStatus:1; + + // Padding out 5 bits + UINT8 mReserved6:5; +}; + +// Structure to describe response TLV 0x11 for CATGetServiceState() +struct sCATGetServiceStateResponse_FullFunctionServiceState +{ + bool mSendSMS:1; + bool mSetupCall:1; + bool mSendDTMF:1; + bool mSendSS:1; + bool mSendUSSD:1; + + // Padding out 27 bits + UINT8 mReserved1:3; + UINT8 mReserved2[3]; +}; + +// Structure to describe request TLV 0x01 for CATSendTerminalResponse() +struct sCATSendTerminalResponseRequest_TerminalResponseType +{ + UINT32 mReferenceID; + UINT16 mTerminalResponseLength; + + // This array must be the size specified by mTerminalResponseLength + // UINT8 mTerminalResponse[1]; +}; + +// Structure to describe request TLV 0x10 for CATSendTerminalResponse() +struct sCATSendTerminalResponseRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe response TLV 0x10 for CATSendTerminal() +struct sCATSendTerminalResponseResponse_TRResponse +{ + UINT8 mSW1; + UINT8 mSW2; + UINT8 mTerminalResponseLength; + + // This array must be the size specified by mTerminalResponseLength + // UINT8 mTerminalResponseData[1]; +}; + +// Structure to describe request TLV 0x01 for CATEnvelopeCommand() +struct sCATEnvelopeCommandRequest_EnvelopeCommand +{ + eQMICATEnvelopeCommandType mEnvelopeCommandType; + UINT16 mEnvelopeLength; + + // This array must be the size specified by mEnvelopeLength + // UINT8 mEnvelopeData[1]; +}; + +// Structure to describe request TLV 0x10 for CATEnvelopeCommand() +struct sCATEnvelopeCommandRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe response TLV 0x10 for CATEnvelopeCommand() +struct sCATEnvelopeCommandResponse_RawResponse +{ + UINT8 mSW1; + UINT8 mSW2; + UINT8 mEnvelopeResponseLength; + + // This array must be the size specified by mEnvelopeResponseLength + // UINT8 mEnvelopeResponseData[1]; +}; + +// Structure to describe request TLV 0x01 for CATGetEventReport() +struct sCATGetEventReportRequest_CommandInput +{ + UINT32 mCommandID; + eQMICATCommandFormat mCommandFormat; +}; + +// Structure to describe response TLV 0x10 for CATGetEventReport() +struct sCATGetEventReportResponse_DisplayTextEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mDisplayTextCommand[1]; +}; + +// Structure to describe response TLV 0x11 for CATGetEventReport() +struct sCATGetEventReportResponse_GetInkeyEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mGetInkeyCommand[1]; +}; + +// Structure to describe response TLV 0x12 for CATGetEventReport() +struct sCATGetEventReportResponse_GetInputEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mGetInputCommand[1]; +}; + +// Structure to describe response TLV 0x13 for CATGetEventReport() +struct sCATGetEventReportResponse_SetupMenuEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupMenuCommand[1]; +}; + +// Structure to describe response TLV 0x14 for CATGetEventReport() +struct sCATGetEventReportResponse_SelectItemEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSelectItemCommand[1]; +}; + +// Structure to describe response TLV 0x15 for CATGetEventReport() +struct sCATGetEventReportResponse_AlphaIDAvailable +{ + eQMICATAlphaIDCommandType mAlphaIDCommandType; + UINT16 mAlphaIDLength; + + // This array must be the size specified by mAlphaIDLength + // UINT8 mAlphaID[1]; +}; + +// Structure to describe response TLV 0x16 for CATGetEventReport() +struct sCATGetEventReportResponse_SetupEventList +{ + bool mUserActivityNotify:1; + bool mIdleScreenAvailable:1; + bool mLanguageSelectionNotify:1; + + // Padding out 29 bits + UINT8 mReserved1:5; + UINT8 mReserved2[3]; +}; + +// Structure to describe response TLV 0x17 for CATGetEventReport() +struct sCATGetEventReportResponse_SetupIdleModeTextEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupIdleModeTextCommand[1]; +}; + +// Structure to describe response TLV 0x18 for CATGetEventReport() +struct sCATGetEventReportResponse_LanguageNotificationEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mLanguageNotificationCommand[1]; +}; + +// Structure to describe response TLV 0x19 for CATGetEventReport() +struct sCATGetEventReportResponse_RefreshEvent +{ + UINT16 mRefreshMode; + eQMICATRefreshStage mRefreshStage; +}; + +// Structure to describe response TLV 0x1A for CATGetEventReport() +struct sCATGetEventReportResponse_EndProactiveSession +{ + eQMICATProactiveSessionEndType mProactiveSessionEndType; +}; + +// Structure to describe response TLV 0x1B for CATGetEventReport() +struct sCATGetEventReportResponse_DecodedHeaderID +{ + eQMICATCommandID mCommandID; + UINT32 mReferenceID; + UINT8 mCommandNumber; +}; + +// Structure to describe response TLV 0x1C for CATGetEventReport() +struct sCATGetEventReportResponse_TextString +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x1D for CATGetEventReport() +struct sCATGetEventReportResponse_HighPriority +{ + eQMICATHighPriority mHighPriority; +}; + +// Structure to describe response TLV 0x1E for CATGetEventReport() +struct sCATGetEventReportResponse_UserControl +{ + eQMICATUserControl mUserControl; +}; + +// Structure to describe response TLV 0x1F for CATGetEventReport() +struct sCATGetEventReportResponse_Icon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe response TLV 0x20 for CATGetEventReport() +struct sCATGetEventReportResponse_Duration +{ + eQMICATTimeUnits mUnits; + UINT8 mInterval; +}; + +// Structure to describe response TLV 0x21 for CATGetEventReport() +struct sCATGetEventReportResponse_ResponseFormat +{ + eQMICATResponseFormat mResponseFormat; +}; + +// Structure to describe response TLV 0x22 for CATGetEventReport() +struct sCATGetEventReportResponse_HelpAvailable +{ + eQMICATHelpAvailable mHelpAvailable; +}; + +// Structure to describe response TLV 0x23 for CATGetEventReport() +struct sCATGetEventReportResponse_ResponsePackingFormat +{ + eQMICATResponsePackingFormat mResponsePackingFormat; +}; + +// Structure to describe response TLV 0x24 for CATGetEventReport() +struct sCATGetEventReportResponse_ResponseLength +{ + UINT8 mMaximumUserInput; + UINT8 mMinimumUserInput; +}; + +// Structure to describe response TLV 0x25 for CATGetEventReport() +struct sCATGetEventReportResponse_ShowUserInput +{ + eQMICATShowUserInput mShowUserInput; +}; + +// Structure to describe response TLV 0x26 for CATGetEventReport() +struct sCATGetEventReportResponse_Tone +{ + eQMICATTone mTone; +}; + +// Structure to describe response TLV 0x27 for CATGetEventReport() +struct sCATGetEventReportResponse_SoftkeySelection +{ + eQMICATSoftkeySelection mSoftkeySelection; +}; + +// Structure to describe response TLV 0x28 for CATGetEventReport() +struct sCATGetEventReportResponse_Items +{ + UINT8 mItemsLength; + + struct sItem + { + UINT8 mItemID; + UINT8 mItemTextLength; + + // This array must be the size specified by mItemTextLength + // UINT8 mItemText[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe response TLV 0x29 for CATGetEventReport() +struct sCATGetEventReportResponse_DefaultItems +{ + UINT8 mDefaultItem; +}; + +// Structure to describe response TLV 0x2A for CATGetEventReport() +struct sCATGetEventReportResponse_NextActionIdentifier +{ + UINT8 mActionsLength; + + // This array must be the size specified by mActionsLength + // eQMICATNextAction mNextAction[1]; +}; + +// Structure to describe response TLV 0x2B for CATGetEventReport() +struct sCATGetEventReportResponse_IconIDList +{ + eQMICATDisplayIconOnly mDisplayIconOnly; + UINT8 mItemsLength; + + struct sItem + { + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe response TLV 0x2C for CATGetEventReport() +struct sCATGetEventReportResponse_Presentation +{ + eQMICATPresentation mPresentation; +}; + +// Structure to describe response TLV 0x2D for CATGetEventReport() +struct sCATGetEventReportResponse_PackingRequired +{ + eQMICATPackingRequired mPackingRequired; +}; + +// Structure to describe response TLV 0x2E for CATGetEventReport() +struct sCATGetEventReportResponse_SMSTPDU +{ + UINT8 mSMSTPDUDataLength; + + // This array must be the size specified by mSMSTPDUDataLength + // UINT8 mSMSTPDUData[1]; +}; + +// Structure to describe response TLV 0x2F for CATGetEventReport() +struct sCATGetEventReportResponse_IsCDMASMS +{ + eQMICATIsCDMASMS mIsCDMASMS; +}; + +// Structure to describe response TLV 0x30 for CATGetEventReport() +struct sCATGetEventReportResponse_Address +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe response TLV 0x31 for CATGetEventReport() +struct sCATGetEventReportResponse_CallSetupRequirement +{ + eQMICATCallSetupRequirement mCallSetupRequirement; +}; + +// Structure to describe response TLV 0x32 for CATGetEventReport() +struct sCATGetEventReportResponse_Redial +{ + eQMICATRedialNecessary mRedialNecessary; + eQMICATTimeUnits mUnits; + UINT8 mInterval; +}; + +// Structure to describe response TLV 0x33 for CATGetEventReport() +struct sCATGetEventReportResponse_Subaddress +{ + UINT8 mSubaddressDataLength; + + struct sSubaddressData + { + UINT8 mSubaddressData1:4; + UINT8 mSubaddressData2:4; + }; + + // This array must be the size specified by mSubaddressDataLength + // sSubaddressData mSubaddressDatas[1]; +}; + +// Structure to describe response TLV 0x34 for CATGetEventReport() +struct sCATGetEventReportResponse_CapabilityConfiguration +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe response TLV 0x35 for CATGetEventReport() +struct sCATGetEventReportResponse_DTMF +{ + UINT8 mDTMFDataLength; + + struct sDTMFData + { + UINT8 mDTMFData1:4; + UINT8 mDTMFData2:4; + }; + + // This array must be the size specified by mDTMFDataLength + // sDTMFData mDTMFDatas[1]; +}; + +// Structure to describe response TLV 0x36 for CATGetEventReport() +struct sCATGetEventReportResponse_SpecificLanguageNotification +{ + eQMICATSpecificLanguageNotfication mSpecificLanguageNotification; +}; + +// Structure to describe response TLV 0x37 for CATGetEventReport() +struct sCATGetEventReportResponse_Language +{ + char mLanguage[2]; +}; + +// Structure to describe response TLV 0x38 for CATGetEventReport() +struct sCATGetEventReportResponse_LaunchMode +{ + eQMICATLaunchMode mLaunchMode; +}; + +// Structure to describe response TLV 0x39 for CATGetEventReport() +struct sCATGetEventReportResponse_URL +{ + UINT8 mURLDataLength; + + // This array must be the size specified by mURLDataLength + // char mURLData[1]; +}; + +// Structure to describe response TLV 0x3A for CATGetEventReport() +struct sCATGetEventReportResponse_BrowserID +{ + UINT8 mBrowserID; +}; + +// Structure to describe response TLV 0x3B for CATGetEventReport() +struct sCATGetEventReportResponse_BearerList +{ + UINT8 mBearerListLength; + + // This array must be the size specified by mBearerListLength + // eQMICATBearer mBearerList[1]; +}; + +// Structure to describe response TLV 0x3C for CATGetEventReport() +struct sCATGetEventReportResponse_ProvisioningFiles +{ + UINT32 mNumberOfProvisioningFiles; + + struct sFile + { + UINT8 mPathLength; + + // This array must be the size specified by mPathLength + // char mPath[1]; + }; + + // This array must be the size specified by mNumberOfProvisioningFiles + // sFile mFiles[1]; +}; + +// Structure to describe response TLV 0x3D for CATGetEventReport() +struct sCATGetEventReportResponse_USSDString +{ + eQMICATUSSDDataCodingScheme mOriginalDataCodingScheme; + eQMICATUSSDDataCodingScheme mDataCodingScheme; + UINT8 mUSSDTextLength; + + // This array must be the size specified by mUSSDTextLength + // UINT8 mUSSDText[1]; +}; + +// Structure to describe response TLV 0x3E for CATGetEventReport() +struct sCATGetEventReportResponse_DefaultText +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x3F for CATGetEventReport() +struct sCATGetEventReportResponse_ImmediateResponseRequest +{ + eQMICATImmediateResponse mImmediateResponse; +}; + +// Structure to describe response TLV 0x40 for CATGetEventReport() +struct sCATGetEventReportResponse_UserConfirmationAlpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x41 for CATGetEventReport() +struct sCATGetEventReportResponse_SetupCallDisplayAlpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x42 for CATGetEventReport() +struct sCATGetEventReportResponse_UserConfirmationIcon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe response TLV 0x43 for CATGetEventReport() +struct sCATGetEventReportResponse_SetupCallDisplayIcon +{ + eQMICATIconQualifier mIconQualifier; + UINT8 mHeight; + UINT8 mWidth; + eQMICATImageCodingScheme mImageCodingScheme; + UINT8 mRecordNumber; + UINT16 mIconDataLength; + + // This array must be the size specified by mIconDataLength + // UINT8 mIconData[1]; +}; + +// Structure to describe response TLV 0x44 for CATGetEventReport() +struct sCATGetEventReportResponse_GatewayProxy +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x45 for CATGetEventReport() +struct sCATGetEventReportResponse_Alpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x46 for CATGetEventReport() +struct sCATGetEventReportResponse_NotificationRequired +{ + eQMICATNotificationRequired mNotificationRequired; +}; + +// Structure to describe response TLV 0x47 for CATGetEventReport() +struct sCATGetEventReportResponse_PlayToneEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mPlayToneCommand[1]; +}; + +// Structure to describe response TLV 0x48 for CATGetEventReport() +struct sCATGetEventReportResponse_SetupCallEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupCallCommand[1]; +}; + +// Structure to describe response TLV 0x49 for CATGetEventReport() +struct sCATGetEventReportResponse_SendDTMFEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendDTMFCommand[1]; +}; + +// Structure to describe response TLV 0x4A for CATGetEventReport() +struct sCATGetEventReportResponse_LaunchBrowserEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mLaunchBrowserCommand[1]; +}; + +// Structure to describe response TLV 0x4B for CATGetEventReport() +struct sCATGetEventReportResponse_SendSMSEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendSMSCommand[1]; +}; + +// Structure to describe response TLV 0x4C for CATGetEventReport() +struct sCATGetEventReportResponse_SendSSEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendSSCommand[1]; +}; + +// Structure to describe response TLV 0x4D for CATGetEventReport() +struct sCATGetEventReportResponse_SendUSSDEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendUSSDCommand[1]; +}; + +// Structure to describe response TLV 0x4E for CATGetEventReport() +struct sCATGetEventReportResponse_ProvideLocalInformationEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mProvideLocalInformationCommand[1]; +}; + +// Structure to describe response TLV 0x4F for CATGetEventReport() +struct sCATGetEventReportResponse_SetupEventListRawEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSetupEventListCommand[1]; +}; + +// Structure to describe response TLV 0x50 for CATGetEventReport() +struct sCATGetEventReportResponse_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe response TLV 0x51 for CATGetEventReport() +struct sCATGetEventReportResponse_OpenChannelEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mOpenChannelCommand[1]; +}; + +// Structure to describe response TLV 0x52 for CATGetEventReport() +struct sCATGetEventReportResponse_CloseChannelEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mCloseChannelCommand[1]; +}; + +// Structure to describe response TLV 0x53 for CATGetEventReport() +struct sCATGetEventReportResponse_SendDataEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mSendDataCommand[1]; +}; + +// Structure to describe response TLV 0x54 for CATGetEventReport() +struct sCATGetEventReportResponse_ReceiveDataEvent +{ + UINT32 mReferenceID; + UINT16 mCommandLength; + + // This array must be the size specified by mCommandLength + // UINT8 mReceiveDataCommand[1]; +}; + +// Structure to describe response TLV 0x55 for CATGetEventReport() +struct sCATGetEventReportResponse_OnDemandLinkEstablish +{ + eQMICATOnDemandLinkEstablish mOnDemandLinkEstablish; +}; + +// Structure to describe response TLV 0x56 for CATGetEventReport() +struct sCATGetEventReportResponse_CSDBearerDescription +{ + UINT8 mSpeed; + eQMICATCSDBearerName mCSDBearerName; + eQMICATConnectionElement mConnectionElement; +}; + +// Structure to describe response TLV 0x57 for CATGetEventReport() +struct sCATGetEventReportResponse_GPRSBearerDescription +{ + UINT8 mPrecedenceClass; + UINT8 mDelayClass; + UINT8 mReliabilityClass; + UINT8 mPeakThroughput; + UINT8 mMeanThroughput; + eQMICATPacketDataProtocol mPacketDataProtocol; +}; + +// Structure to describe response TLV 0x58 for CATGetEventReport() +struct sCATGetEventReportResponse_EUTRANExternalParameterBearerDescription +{ + eQMICATTrafficClass mTrafficClass; + UINT16 mMaxUploadBitrate; + UINT16 mMaxDownloadBitrate; + UINT16 mGuaranteedUploadBitrate; + UINT16 mGuaranteedDownloadBitrate; + eQMICATDeliveryOrder mDeliveryOrder; + UINT8 mMaxSDUSize; + UINT8 mMaxSDUErrorRatio; + UINT8 mResidualBitErrorRatio; + eQMICATDeliverErrorSDU mDeliverErrorSDU; + UINT8 mTransferDelay; + UINT8 mTrafficHandlingPRI; + eQMICATPDPType mPDPType; +}; + +// Structure to describe response TLV 0x59 for CATGetEventReport() +struct sCATGetEventReportResponse_EUTRANExternalMappedUTRANBearerDescription +{ + UINT8 mQCI; + UINT8 mMaxUploadBitrate; + UINT8 mMaxDownloadBitrate; + UINT8 mGuaranteedUploadBitrate; + UINT8 mGuaranteedDownloadBitrate; + UINT8 mMaximumUploadBitrateExt; + UINT8 mMaximumDownloadBitrateExt; + UINT8 mGuaranteedUploadBitrateExt; + UINT8 mGuaranteedDownloadBitrateExt; + eQMICATPDPType mPDPType; +}; + +// Structure to describe response TLV 0x5A for CATGetEventReport() +struct sCATGetEventReportResponse_BufferSize +{ + UINT16 mBufferSize; +}; + +// Structure to describe response TLV 0x5B for CATGetEventReport() +struct sCATGetEventReportResponse_NetworkAccessName +{ + UINT8 mNetworkAccessNameLength; + + // This array must be the size specified by mNetworkAccessNameLength + // UINT8 mNetworkAccessName[1]; +}; + +// Structure to describe response TLV 0x5C for CATGetEventReport() +struct sCATGetEventReportResponse_OtherAddress +{ + eQMICATAddressType mAddressType; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe response TLV 0x5D for CATGetEventReport() +struct sCATGetEventReportResponse_UserLogin +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x5E for CATGetEventReport() +struct sCATGetEventReportResponse_UserPassword +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x5F for CATGetEventReport() +struct sCATGetEventReportResponse_TransportLevel +{ + eQMICATTransportProtocol mTransportProtocol; + UINT16 mPortNumber; +}; + +// Structure to describe response TLV 0x60 for CATGetEventReport() +struct sCATGetEventReportResponse_DataDestinationAddress +{ + eQMICATAddressType mAddressType; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe response TLV 0x61 for CATGetEventReport() +struct sCATGetEventReportResponse_ChannelDataLength +{ + UINT8 mChannelDataLength; +}; + +// Structure to describe response TLV 0x62 for CATGetEventReport() +struct sCATGetEventReportResponse_SendDataImmediately +{ + eQMICATSendDataImmediately mSendDataImmediately; +}; + +// Structure to describe response TLV 0x63 for CATGetEventReport() +struct sCATGetEventReportResponse_ChannelData +{ + UINT16 mChannelDataLength; + + // This array must be the size specified by mChannelDataLength + // UINT8 mChannelData[1]; +}; + +// Structure to describe response TLV 0x64 for CATGetEventReport() +struct sCATGetEventReportResponse_ChannelID +{ + UINT8 mChannelID; +}; + +// Structure to describe response TLV 0x65 for CATGetEventReport() +struct sCATGetEventReportResponse_ItemsWithDCS +{ + UINT8 mItemsLength; + + struct sItem + { + UINT8 mItemID; + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mItemTextLength; + + // This array must be the size specified by mItemTextLength + // UINT8 mItemText[1]; + }; + + // This array must be the size specified by mItemsLength + // sItem mItems[1]; +}; + +// Structure to describe response TLV 0x66 for CATGetEventReport() +struct sCATGetEventReportResponse_Activate +{ + UINT32 mReferenceID; + UINT16 mActivateLength; + + // This array must be the size specified by mActivateLength + // UINT8 mActivate[1]; +}; + +// Structure to describe response TLV 0x67 for CATGetEventReport() +struct sCATGetEventReportResponse_ActivateTarget +{ + eQMICATActivateTargets mActivateTarget; +}; + +// Structure to describe response TLV 0x68 for CATGetEventReport() +struct sCATGetEventReportResponse_ResponseType +{ + eQMICATResponseTypes mResponseType; +}; + +// Structure to describe response TLV 0x69 for CATGetEventReport() +struct sCATGetEventReportResponse_BearerIndependentProtocolStatus +{ + UINT8 mChannelID; + eQMICATBearerIndependentProtocolStatus mBearerIndependentProtocolStatus; +}; + +// Structure to describe request TLV 0x01 for CATSendDecodedTerminalResponse() +struct sCATSendDecodedTerminalResponseRequest_TerminalResponse +{ + UINT32 mReferenceID; + UINT8 mCommandNumber; + eQMICATResponseCommand mResponseCommand; + UINT8 mGeneralResult; + UINT8 mAdditionalInformationLength; + + // This array must be the size specified by mAdditionalInformationLength + // UINT8 mTerminalResponseAdditionalInformation[1]; +}; + +// Structure to describe request TLV 0x10 for CATSendDecodedTerminalResponse() +struct sCATSendDecodedTerminalResponseRequest_TextString +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe request TLV 0x11 for CATSendDecodedTerminalResponse() +struct sCATSendDecodedTerminalResponseRequest_ItemIdentifier +{ + UINT8 mItemIdentifier; +}; + +// Structure to describe request TLV 0x12 for CATSendDecodedTerminalResponse() +struct sCATSendDecodedTerminalResponseRequest_GetInkeyExtraInfo +{ + eQMICATTimeUnits mUnits; + UINT8 mInterval; + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe request TLV 0x13 for CATSendDecodedTerminalResponse() +struct sCATSendDecodedTerminalResponseRequest_LanguageInfo +{ + char mLanguage[2]; +}; + +// Structure to describe request TLV 0x14 for CATSendDecodedTerminalResponse() +struct sCATSendDecodedTerminalResponseRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x15 for CATSendDecodedTerminalResponse() +struct sCATSendDecodedTerminalResponseRequest_GetInkeyYesInput +{ + eQMICATTimeUnits mUnits; + UINT8 mInterval; + INT8 mGetInkeyYesInput; +}; + +// Structure to describe response TLV 0x10 for CATSendDecodedTerminal() +struct sCATSendDecodedTerminalResponseResponse_TRResponse +{ + UINT8 mSW1; + UINT8 mSW2; + UINT8 mTerminalResponseLength; + + // This array must be the size specified by mTerminalResponseLength + // UINT8 mTerminalResponseData[1]; +}; + +// Structure to describe request TLV 0x01 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_EnvelopeCommand +{ + eQMICATDecodedEnvelopeCommand mEnvelopeCommand; +}; + +// Structure to describe request TLV 0x10 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_ItemIdentifier +{ + UINT8 mItemIdentifier; +}; + +// Structure to describe request TLV 0x11 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_HelpRequest +{ + eQMICATHelpRequest mHelpRequest; +}; + +// Structure to describe request TLV 0x12 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_Language +{ + char mLanguage[2]; +}; + +// Structure to describe request TLV 0x13 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x14 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_Address +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe request TLV 0x15 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_Subaddress +{ + UINT8 mSubaddressDataLength; + + struct sSubaddressData + { + UINT8 mSubaddressData1:4; + UINT8 mSubaddressData2:4; + }; + + // This array must be the size specified by mSubaddressDataLength + // sSubaddressData mSubaddressDatas[1]; +}; + +// Structure to describe request TLV 0x16 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_CapabilityConfigParam1 +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe request TLV 0x17 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_CapabilityConfigParam2 +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe request TLV 0x18 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_USSDString +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe request TLV 0x19 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_PDPContextActivation +{ + UINT8 mPDPContextActivationDataLength; + + // This array must be the size specified by mPDPContextActivationDataLength + // UINT8 mPDPContextActivationData[1]; +}; + +// Structure to describe request TLV 0x1A for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_EPSPDNConnectActivation +{ + UINT8 mEPSPDNConnectActivationDataLength; + + // This array must be the size specified by mEPSPDNConnectActivationDataLength + // UINT8 mEPSPDNConnectActivationData[1]; +}; + +// Structure to describe request TLV 0x1B for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_BrowserTerminationCause +{ + eQMICATBrowserTerminationCauses mBrowserTerminationCause; +}; + +// Structure to describe request TLV 0x1C for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_SMSTPDU +{ + UINT8 mSMSTPDUDataLength; + + // This array must be the size specified by mSMSTPDUDataLength + // UINT8 mSMSTPDUData[1]; +}; + +// Structure to describe request TLV 0x1D for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_IsCDMASMS +{ + eQMICATIsCDMASMS mIsCDMASMS; +}; + +// Structure to describe request TLV 0x1E for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_RAT +{ + eQMICATRadioAccessTechnologies mRadioAccessTechnology; +}; + +// Structure to describe request TLV 0x1F for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_CallType +{ + eQMICATCallTypes mCallType; +}; + +// Structure to describe request TLV 0x20 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_TransactionID +{ + UINT8 mCallTransactionIDLength; + + // This array must be the size specified by mCallTransactionIDLength + // UINT8 mCallTransactionID[1]; +}; + +// Structure to describe request TLV 0x21 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_RPAddress +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe request TLV 0x22 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_TPAddress +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe request TLV 0x23 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandRequest_Cause +{ + UINT8 mCauseLength; + + // This array must be the size specified by mCauseLength + // UINT8 mCause[1]; +}; + +// Structure to describe response TLV 0x10 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_CallControlResult +{ + eQMICATCallControlResult mCallControlResult; +}; + +// Structure to describe response TLV 0x11 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_Address +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe response TLV 0x12 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_Subaddress +{ + UINT8 mSubaddressDataLength; + + struct sSubaddressData + { + UINT8 mSubaddressData1:4; + UINT8 mSubaddressData2:4; + }; + + // This array must be the size specified by mSubaddressDataLength + // sSubaddressData mSubaddressDatas[1]; +}; + +// Structure to describe response TLV 0x13 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_CapabilityConfigParam1 +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe response TLV 0x14 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_CapabilityConfigParam2 +{ + UINT8 mCapabilitesConfigurationLength; + + // This array must be the size specified by mCapabilitesConfigurationLength + // UINT8 mCapabilitiesConfiguration[1]; +}; + +// Structure to describe response TLV 0x15 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_USSDString +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x16 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_PDPContextActivation +{ + UINT8 mPDPContextActivationDataLength; + + // This array must be the size specified by mPDPContextActivationDataLength + // UINT8 mPDPContextActivationData[1]; +}; + +// Structure to describe response TLV 0x17 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_EPSPDNConnectActivation +{ + UINT8 mEPSPDNConnectActivationDataLength; + + // This array must be the size specified by mEPSPDNConnectActivationDataLength + // UINT8 mEPSPDNConnectActivationData[1]; +}; + +// Structure to describe response TLV 0x18 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_Alpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe response TLV 0x19 for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_BCRepeatIndicator +{ + eQMICATBearerCapabilityRepeatIndicator mBearerCapabilityRepeatIndicator; +}; + +// Structure to describe response TLV 0x1A for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_SMSPPDataDownloadUICCACK +{ + UINT8 mSMSPPDataDownloadUICCACKLength; + + // This array must be the size specified by mSMSPPDataDownloadUICCACKLength + // UINT8 mSMSPPDataDownloadUICCACKData[1]; +}; + +// Structure to describe response TLV 0x1B for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_RPAddress +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe response TLV 0x1C for CATSendDecodedEnvelopeCommand() +struct sCATSendDecodedEnvelopeCommandResponse_TPAddress +{ + eQMICATAddressTON mAddressTON; + eQMICATAddressNPI mAddressNPI; + UINT8 mAddressDataLength; + + // This array must be the size specified by mAddressDataLength + // char mAddressData[1]; +}; + +// Structure to describe request TLV 0x10 for CATEventConfirmation() +struct sCATEventConfirmationRequest_UserConfirmed +{ + eQMICATUserConfirmed mUserConfirmed; +}; + +// Structure to describe request TLV 0x11 for CATEventConfirmation() +struct sCATEventConfirmationRequest_IconIsDisplayed +{ + eQMICATIconIsDisplayed mIconIsDisplayed; +}; + +// Structure to describe request TLV 0x12 for CATEventConfirmation() +struct sCATEventConfirmationRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x01 for CATSCWSOpenChannel() +struct sCATSCWSOpenChannelRequest_ChannelStatus +{ + UINT32 mChannelID; + eQMICATChannelState mChannelState; +}; + +// Structure to describe request TLV 0x10 for CATSCWSOpenChannel() +struct sCATSCWSOpenChannelRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe indication TLV 0x10 for CAT SCWSOpenChannelIndication +struct sCATSCWSOpenChannelIndication_OpenChannelInformation +{ + UINT32 mChannelID; + UINT16 mPortNumber; + UINT16 mBufferSize; +}; + +// Structure to describe indication TLV 0x11 for CAT SCWSOpenChannelIndication +struct sCATSCWSOpenChannelIndication_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe indication TLV 0x12 for CAT SCWSOpenChannelIndication +struct sCATSCWSOpenChannelIndication_Alpha +{ + eQMICATDataCodingScheme mDataCodingScheme; + UINT8 mTextDataLength; + + // This array must be the size specified by mTextDataLength + // UINT8 mTextData[1]; +}; + +// Structure to describe request TLV 0x01 for CATSCWSCloseChannel() +struct sCATSCWSCloseChannelRequest_ChannelStatus +{ + UINT32 mChannelID; + eQMICATChannelState mChannelState; +}; + +// Structure to describe request TLV 0x10 for CATSCWSCloseChannel() +struct sCATSCWSCloseChannelRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe indication TLV 0x10 for CAT SCWSCloseChannelIndication +struct sCATSCWSCloseChannelIndication_CloseChannelInfo +{ + UINT32 mChannelID; + eQMICATChannelState mChannelState; +}; + +// Structure to describe response TLV 0x11 for CATSCWSCloseChannel() +struct sCATSCWSCloseChannelResponse_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x01 for CATSCWSSendData() +struct sCATSCWSSendDataRequest_ChannelStatus +{ + UINT32 mChannelID; + eQMICATSendDataResult mDataSendResult; +}; + +// Structure to describe request TLV 0x10 for CATSCWSSendData() +struct sCATSCWSSendDataRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe indication TLV 0x10 for CAT SCWSSendDataIndication +struct sCATSCWSSendDataIndication_SendDataInfo +{ + UINT32 mChannelID; + UINT8 mTotalPackets; + UINT8 mCurrentPacket; + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe indication TLV 0x11 for CAT SCWSSendDataIndication +struct sCATSCWSSendDataIndication_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x01 for CATSCWSDataAvailable() +struct sCATSCWSDataAvailableRequest_RemainingData +{ + UINT32 mChannelID; + UINT16 mDataLength; + + // This array must be the size specified by mDataLength + // UINT8 mData[1]; +}; + +// Structure to describe request TLV 0x02 for CATSCWSDataAvailable() +struct sCATSCWSDataAvailableRequest_RemainingDataLength +{ + UINT16 mDataLength; +}; + +// Structure to describe request TLV 0x10 for CATSCWSDataAvailable() +struct sCATSCWSDataAvailableRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x01 for CATSCWSChannelStatus() +struct sCATSCWSChannelStatusRequest_ChannelStatus +{ + UINT32 mChannelID; + eQMICATChannelState mChannelState; +}; + +// Structure to describe request TLV 0x10 for CATSCWSChannelStatus() +struct sCATSCWSChannelStatusRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe request TLV 0x10 for CATGetTerminalProfile() +struct sCATGetTerminalProfileRequest_Slot +{ + eQMICATSlot mSlot; +}; + +// Structure to describe response TLV 0x10 for CATGetTerminalProfile() +struct sCATGetTerminalProfileResponse_RawData +{ + UINT8 mTerminalProfileLength; + + // This array must be the size specified by mTerminalProfileLength + // UINT8 mTerminalProfileData[1]; +}; + +// Structure to describe request TLV 0x01 for CATSetConfiguration() +struct sCATSetConfigurationRequest_Mode +{ + eQMICATConfigModes mConfigMode; +}; + +// Structure to describe request TLV 0x10 for CATSetConfiguration() +struct sCATSetConfigurationRequest_CustomData +{ + UINT8 mTerminalProfileLength; + + // This array must be the size specified by mTerminalProfileLength + // UINT8 mTerminalProfileData[1]; +}; + +// Structure to describe response TLV 0x10 for CATGetConfiguration() +struct sCATGetConfigurationResponse_Mode +{ + eQMICATConfigModes mConfigMode; +}; + +// Structure to describe response TLV 0x11 for CATGetConfiguration() +struct sCATGetConfigurationResponse_CustomData +{ + UINT8 mTerminalProfileLength; + + // This array must be the size specified by mTerminalProfileLength + // UINT8 mTerminalProfileData[1]; +}; + +// Structure to describe response TLV 0x10 for RMSGetSMSWake() +struct sRMSGetSMSWakeResponse_State +{ + INT8 mSMSWakeEnabled; +}; + +// Structure to describe request TLV 0x11 for RMSGetSMSWake() +struct sRMSGetSMSWakeRequest_Mask +{ + UINT32 mMask; +}; + +// Structure to describe request TLV 0x10 for RMSSetSMSWake() +struct sRMSSetSMSWakeRequest_State +{ + INT8 mSMSWakeEnabled; +}; + +// Structure to describe request TLV 0x11 for RMSSetSMSWake() +struct sRMSSetSMSWakeRequest_Mask +{ + UINT32 mMask; +}; + +// Structure to describe request TLV 0x10 for OMASetEventReport() +struct sOMASetEventReportRequest_NIA +{ + INT8 mReportNetworkInitiatedAlerts; +}; + +// Structure to describe request TLV 0x11 for OMASetEventReport() +struct sOMASetEventReportRequest_Status +{ + INT8 mReportSessionStatus; +}; + +// Structure to describe indication TLV 0x10 for OMA EventReport +struct sOMAEventReportIndication_NIA +{ + eQMIOMASessionTypes mSessionType; + UINT16 mSessionID; +}; + +// Structure to describe indication TLV 0x11 for OMA EventReport +struct sOMAEventReportIndication_Status +{ + eQMIOMASessionStates mSessionState; +}; + +// Structure to describe indication TLV 0x12 for OMA EventReport +struct sOMAEventReportIndication_Failure +{ + eQMIOMASessionFailureReasons mSessionFailure; +}; + +// Structure to describe request TLV 0x10 for OMAStartSession() +struct sOMAStartSessionRequest_Type +{ + eQMIOMASessionTypes mSessionType; +}; + +// Structure to describe response TLV 0x10 for OMAGetSessionInfo() +struct sOMAGetSessionInfoResponse_Info +{ + eQMIOMASessionStates mSessionState; + eQMIOMASessionTypes mSessionType; +}; + +// Structure to describe response TLV 0x11 for OMAGetSessionInfo() +struct sOMAGetSessionInfoResponse_Failure +{ + eQMIOMASessionFailureReasons mSessionFailure; +}; + +// Structure to describe response TLV 0x12 for OMAGetSessionInfo() +struct sOMAGetSessionInfoResponse_Retry +{ + UINT8 mRetryCount; + UINT16 mRetryPauseTimer; + UINT16 mRemainingTime; +}; + +// Structure to describe response TLV 0x13 for OMAGetSessionInfo() +struct sOMAGetSessionInfoResponse_NIA +{ + eQMIOMASessionTypes mSessionType; + UINT16 mSessionID; +}; + +// Structure to describe request TLV 0x10 for OMASendSelection() +struct sOMASendSelectionRequest_Type +{ + eQMIOMASelections mSelection; + UINT16 mSessionID; +}; + +// Structure to describe response TLV 0x10 for OMAGetFeatures() +struct sOMAGetFeaturesResponse_Provisioning +{ + INT8 mDeviceProvisioningServiceUpdateEnabled; +}; + +// Structure to describe response TLV 0x11 for OMAGetFeatures() +struct sOMAGetFeaturesResponse_PRLUpdate +{ + INT8 mPRLServiceUpdateEnabled; +}; + +// Structure to describe response TLV 0x12 for OMAGetFeatures() +struct sOMAGetFeaturesResponse_HFAFeature +{ + INT8 mHFAFeatureEnabled; +}; + +// Structure to describe response TLV 0x13 for OMAGetFeatures() +struct sOMAGetFeaturesResponse_HFADoneState +{ + eQMIOMAHFADoneStates mHFAFeatureDoneState; +}; + +// Structure to describe request TLV 0x10 for OMASetFeatures() +struct sOMASetFeaturesRequest_Provisioning +{ + INT8 mDeviceProvisioningServiceUpdateEnabled; +}; + +// Structure to describe request TLV 0x11 for OMASetFeatures() +struct sOMASetFeaturesRequest_PRLUpdate +{ + INT8 mPRLServiceUpdateEnabled; +}; + +// Structure to describe request TLV 0x12 for OMASetFeatures() +struct sOMASetFeaturesRequest_HFAFeature +{ + INT8 mHFAFeatureEnabled; +}; + + +#pragma pack( pop ) diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtExports.cpp b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtExports.cpp new file mode 100644 index 0000000..fdaaef3 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiConnectionMgmt/GobiConnectionMgmtExports.cpp @@ -0,0 +1,25838 @@ +/*=========================================================================== +FILE: + GobiConnectionMgmtExports.cpp + +DESCRIPTION: + QUALCOMM Gobi 5000 Connection Management API exports + +Copyright (c) 2013, 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 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 "GobiConnectionMgmt.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +/*=========================================================================*/ +// Exported Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + GobiConnect + +DESCRIPTION: + This function connects the CM API library to the specified Gobi + device + +PARAMETERS: + pQMIFile [ I ] - Device interface to connect to + pServicesCount [I/O] - Upon input the number of QMI services to connect to, + upon output the number of QMI services successfully + connected to + pServices [I/O] - Upon input the array of QMI service IDs to connect + to, upon output the array of QMI service IDs + successfully connected to + pHandle [ O ] - The returned Gobi interface handle + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG GobiConnect( + LPCSTR pInterface, + ULONG * pServicesCount, + ULONG * pServices, + GOBIHANDLE * pHandle ) +{ + // Validate arguments + if ( (pInterface == 0) + || (pServicesCount == 0) + || (*pServicesCount == 0) + || (pServices == 0) + || (pHandle == 0) ) + { + return (ULONG)eGOBI_ERR_INVALID_ARG; + } + + GOBIHANDLE handle = gDLL.CreateAPI(); + if (handle == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcCount = *pServicesCount; + *pServicesCount = 0; + *pHandle = 0; + + std::set inSvcs; + std::set outSvcs; + + ULONG s = 0; + for (s = 0; s < svcCount; s++) + { + inSvcs.insert( (eQMIService)pServices[s] ); + } + + outSvcs = pAPI->Connect( pInterface, inSvcs ); + + ULONG outSvcsCount = (ULONG)outSvcs.size(); + if (outSvcsCount > svcCount) + { + outSvcsCount = svcCount; + } + + if (outSvcsCount == 0) + { + ULONG rc = (ULONG)pAPI->GetCorrectedLastError(); + pAPI = 0; + + gDLL.DeleteAPI( handle ); + return rc; + } + + std::set ::const_iterator pOutSvc = outSvcs.begin(); + for (s = 0; s < svcCount; s++) + { + pServices[s] = UCHAR_MAX; + if (s < outSvcsCount) + { + pServices[s] = (ULONG)*pOutSvc++; + } + } + + *pHandle = handle; + *pServicesCount = outSvcsCount; + + return (ULONG)eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + GobiCancel + +DESCRIPTION: + This function cancels the most recent outstanding request for the + specified QMI service + +PARAMETERS: + handle [ I ] - Gobi interface handle + svcID [ I ] - Service whose outstanding request is to be cancelled + pTXID [ O ] - QMI transaction ID of outstanding request + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG GobiCancel( + GOBIHANDLE handle, + ULONG svcID, + ULONG * pTXID ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + return (ULONG)pAPI->CancelSend( svcID, pTXID ); +} + +/*=========================================================================== +METHOD: + GobiDisconnect + +DESCRIPTION: + This function disconnects the CM API library from the currently + connected Gobi device + +PARAMETERS: + handle [ I ] - Gobi interface handle + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG GobiDisconnect( GOBIHANDLE handle ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + bool bDisco = pAPI->Disconnect(); + if (bDisco == false) + { + return (ULONG)pAPI->GetCorrectedLastError(); + } + + return (ULONG)eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + SetGenericCallback + +DESCRIPTION: + This function enables/disables a generic callback + +PARAMETERS: + handle [ I ] - Gobi interface handle + svcID [ I ] - Service ID to monitor + msgID [ I ] - Message ID to look for + pCallback [ I ] - Callback function + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG SetGenericCallback( + GOBIHANDLE handle, + ULONG svcID, + ULONG msgID, + tFNGenericCallback pCallback ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + return (ULONG)pAPI->SetGenericCallback( svcID, + msgID, + pCallback, + handle ); +} + +/*=========================================================================== +METHOD: + WDSReset + +DESCRIPTION: + The function sends 'WDS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 0; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetEventReport + +DESCRIPTION: + The function sends 'WDS/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 1; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSAbort + +DESCRIPTION: + The function sends 'WDS/Abort Request' (0x0002) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSAbort( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 2; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetIndication + +DESCRIPTION: + The function sends 'WDS/Set Indication Request' (0x0003) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetIndication( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 3; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetSupportedMessages + +DESCRIPTION: + The function sends 'WDS/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 30; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetSupportedFields + +DESCRIPTION: + The function sends 'WDS/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 31; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSStartNetworkInterface + +DESCRIPTION: + The function sends 'WDS/Start Network Interface Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSStartNetworkInterface( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSStopNetworkInterface + +DESCRIPTION: + The function sends 'WDS/Stop Network Interface Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSStopNetworkInterface( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetPacketServiceStatus + +DESCRIPTION: + The function sends 'WDS/Get Packet Service Status Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetPacketServiceStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetChannelRates + +DESCRIPTION: + The function sends 'WDS/Get Channel Rates Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetChannelRates( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetPacketStatistics + +DESCRIPTION: + The function sends 'WDS/Get Packet Statistics Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetPacketStatistics( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGoDormant + +DESCRIPTION: + The function sends 'WDS/Go Dormant Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGoDormant( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGoActive + +DESCRIPTION: + The function sends 'WDS/Go Active Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGoActive( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 38; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSCreateProfile + +DESCRIPTION: + The function sends 'WDS/Create Profile Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSCreateProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 39; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSModifyProfile + +DESCRIPTION: + The function sends 'WDS/Modify Profile Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSModifyProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 40; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSDeleteProfile + +DESCRIPTION: + The function sends 'WDS/Delete Profile Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSDeleteProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 41; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetProfileList + +DESCRIPTION: + The function sends 'WDS/Get Profile List Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetProfileList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 42; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetProfileSettings + +DESCRIPTION: + The function sends 'WDS/Get Profile Settings Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetProfileSettings( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 43; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetDefaultSettings + +DESCRIPTION: + The function sends 'WDS/Get Default Settings Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDefaultSettings( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 44; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetCurrentSettings + +DESCRIPTION: + The function sends 'WDS/Get Current Settings Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCurrentSettings( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 45; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetMIPMode + +DESCRIPTION: + The function sends 'WDS/Set MIP Mode Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetMIPMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 46; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetMIPMode + +DESCRIPTION: + The function sends 'WDS/Get MIP Mode Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetMIPMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 47; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetDormancy + +DESCRIPTION: + The function sends 'WDS/Get Dormancy Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDormancy( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 48; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetAutoconnectSetting + +DESCRIPTION: + The function sends 'WDS/Get Autoconnect Setting Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetAutoconnectSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 52; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetDataSessionDuration + +DESCRIPTION: + The function sends 'WDS/Get Data Session Duration Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDataSessionDuration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 53; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetModemStatus + +DESCRIPTION: + The function sends 'WDS/Get Modem Status Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetModemStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 54; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetDataBearerTechnology + +DESCRIPTION: + The function sends 'WDS/Get Data Bearer Technology Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDataBearerTechnology( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 55; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetModemInfo + +DESCRIPTION: + The function sends 'WDS/Get Modem Info Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetModemInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 56; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetActiveMIPProfile + +DESCRIPTION: + The function sends 'WDS/Get Active MIP Profile Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetActiveMIPProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 60; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetActiveMIPProfile + +DESCRIPTION: + The function sends 'WDS/Set Active MIP Profile Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetActiveMIPProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 61; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetMIPProfile + +DESCRIPTION: + The function sends 'WDS/Get MIP Profile Request' (0x003E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetMIPProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 62; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetMIPProfile + +DESCRIPTION: + The function sends 'WDS/Set MIP Profile Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetMIPProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 63; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetMIPParameters + +DESCRIPTION: + The function sends 'WDS/Get MIP Parameters Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetMIPParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 64; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetMIPParameters + +DESCRIPTION: + The function sends 'WDS/Set MIP Parameters Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetMIPParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 65; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetLastMIPStatus + +DESCRIPTION: + The function sends 'WDS/Get Last MIP Status Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLastMIPStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 66; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetANAAAAuthenticationStatus + +DESCRIPTION: + The function sends 'WDS/Get AN-AAA Authentication Status Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetANAAAAuthenticationStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 67; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetCurrentDataBearerTechnology + +DESCRIPTION: + The function sends 'WDS/Get Current Data Bearer Technology Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCurrentDataBearerTechnology( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 68; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetCallList + +DESCRIPTION: + The function sends 'WDS/Get Call List Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCallList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 69; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetCallRecord + +DESCRIPTION: + The function sends 'WDS/Get Call Record Request' (0x0046) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCallRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 70; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSClearCallList + +DESCRIPTION: + The function sends 'WDS/Clear Call List Request' (0x0047) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSClearCallList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 71; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetCallListMaxSize + +DESCRIPTION: + The function sends 'WDS/Get Call List Max Size Request' (0x0048) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCallListMaxSize( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 72; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetDefaultProfileNumber + +DESCRIPTION: + The function sends 'WDS/Get Default Profile Number Request' (0x0049) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDefaultProfileNumber( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 73; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetDefaultProfileNumber + +DESCRIPTION: + The function sends 'WDS/Set Default Profile Number Request' (0x004A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetDefaultProfileNumber( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 74; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSResetProfile + +DESCRIPTION: + The function sends 'WDS/Reset Profile Request' (0x004B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSResetProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 75; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSResetProfileParamToInvalid + +DESCRIPTION: + The function sends 'WDS/Reset Profile Param To Invalid Request' (0x004C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSResetProfileParamToInvalid( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 76; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetIPFamilyPreference + +DESCRIPTION: + The function sends 'WDS/Set IP Family Preference Request' (0x004D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetIPFamilyPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 77; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetFMCTunnelParameters + +DESCRIPTION: + The function sends 'WDS/Set FMC Tunnel Parameters Request' (0x004E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetFMCTunnelParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 78; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSClearFMCTunnelParameters + +DESCRIPTION: + The function sends 'WDS/Clear FMC Tunnel Parameters Request' (0x004F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSClearFMCTunnelParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 79; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetFMCTunnelParameters + +DESCRIPTION: + The function sends 'WDS/Get FMC Tunnel Parameters Request' (0x0050) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetFMCTunnelParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 80; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetAutoconnectSetting + +DESCRIPTION: + The function sends 'WDS/Set Autoconnect Setting Request' (0x0051) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetAutoconnectSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 81; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetDNSSetting + +DESCRIPTION: + The function sends 'WDS/Get DNS Setting Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDNSSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 82; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetDNSSetting + +DESCRIPTION: + The function sends 'WDS/Set DNS Setting Request' (0x0053) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetDNSSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 83; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetCDMAPreDormancySettings + +DESCRIPTION: + The function sends 'WDS/Get CDMA Pre-Dormancy Settings Request' (0x0054) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCDMAPreDormancySettings( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 84; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetCAMTimer + +DESCRIPTION: + The function sends 'WDS/Set CAM Timer Request' (0x0055) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetCAMTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 85; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetCAMTimer + +DESCRIPTION: + The function sends 'WDS/Get CAM Timer Request' (0x0056) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCAMTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 86; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetSCRM + +DESCRIPTION: + The function sends 'WDS/Set SCRM Request' (0x0057) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetSCRM( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 87; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetSCRM + +DESCRIPTION: + The function sends 'WDS/Get SCRM Request' (0x0058) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetSCRM( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 88; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetRDUD + +DESCRIPTION: + The function sends 'WDS/Set RDUD Request' (0x0059) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetRDUD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 89; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetRDUD + +DESCRIPTION: + The function sends 'WDS/Get RDUD Request' (0x005A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetRDUD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 90; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetSIPMIPCallType + +DESCRIPTION: + The function sends 'WDS/Get SIP/MIP Call Type Request' (0x005B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetSIPMIPCallType( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 91; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetEVDOPageMonitorPeriod + +DESCRIPTION: + The function sends 'WDS/Set EV-DO Page Monitor Period Request' (0x005C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetEVDOPageMonitorPeriod( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 92; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetEVDOLongSleep + +DESCRIPTION: + The function sends 'WDS/Set EV-DO Long Sleep Request' (0x005D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetEVDOLongSleep( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 93; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetEVDOPageMonitorPeriod + +DESCRIPTION: + The function sends 'WDS/Get EV-DO Page Monitor Period Request' (0x005E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetEVDOPageMonitorPeriod( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 94; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetCallThrottleInfo + +DESCRIPTION: + The function sends 'WDS/Get Call Throttle Info Request' (0x005F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCallThrottleInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 95; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetNSAPI + +DESCRIPTION: + The function sends 'WDS/Get NSAPI Request' (0x0060) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetNSAPI( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 96; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetDUNCallControlPreference + +DESCRIPTION: + The function sends 'WDS/Set DUN Call Control Preference Request' (0x0061) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetDUNCallControlPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 97; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetDUNCallControlInfo + +DESCRIPTION: + The function sends 'WDS/Get DUN Call Control Info Request' (0x0062) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetDUNCallControlInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 98; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetDUNCallControlEventReport + +DESCRIPTION: + The function sends 'WDS/Set DUN Call Control Event Report Request' (0x0063) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetDUNCallControlEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 99; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSPendingDUNCallControl + +DESCRIPTION: + The function sends 'WDS/Pending DUN Call Control Request' (0x0064) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSPendingDUNCallControl( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 100; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSEMBMSTMGIActivate + +DESCRIPTION: + The function sends 'WDS/EMBMS TMGI Activate Request' (0x0065) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSEMBMSTMGIActivate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 101; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSEMBMSTMGIDeactivate + +DESCRIPTION: + The function sends 'WDS/EMBMS TMGI Deactivate Request' (0x0066) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSEMBMSTMGIDeactivate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 102; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSEMBMSTMGIListQuery + +DESCRIPTION: + The function sends 'WDS/EMBMS TMGI List Query Request' (0x0067) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSEMBMSTMGIListQuery( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 103; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetPreferredDataSystem + +DESCRIPTION: + The function sends 'WDS/Get Preferred Data System Request' (0x0069) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetPreferredDataSystem( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 105; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetLastDataCallStatus + +DESCRIPTION: + The function sends 'WDS/Get Last Data Call Status Request' (0x006A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLastDataCallStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 106; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetCurrentDataSystems + +DESCRIPTION: + The function sends 'WDS/Get Current Data Systems Request' (0x006B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetCurrentDataSystems( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 107; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetPDNThrottleInfo + +DESCRIPTION: + The function sends 'WDS/Get PDN Throttle Info Request' (0x006C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetPDNThrottleInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 108; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetLTEAttachParameters + +DESCRIPTION: + The function sends 'WDS/Get LTE Attach Parameters Request' (0x0085) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLTEAttachParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 133; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSResetPacketStatistics + +DESCRIPTION: + The function sends 'WDS/Reset Packet Statistics Request' (0x0086) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSResetPacketStatistics( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 134; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetFlowControlStatus + +DESCRIPTION: + The function sends 'WDS/Get Flow Control Status Request' (0x0087) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetFlowControlStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 135; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSEMBMSTMGISwitch + +DESCRIPTION: + The function sends 'WDS/EMBMS TMGI Switch Request' (0x0088) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSEMBMSTMGISwitch( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 136; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSBindDataPort + +DESCRIPTION: + The function sends 'WDS/Bind Data Port Request' (0x0089) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSBindDataPort( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 137; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetPDNFilter + +DESCRIPTION: + The function sends 'WDS/Set PDN Filter Request' (0x008A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetPDNFilter( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 138; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSRemovePDNFilter + +DESCRIPTION: + The function sends 'WDS/Remove PDN Filter Request' (0x008B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSRemovePDNFilter( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 139; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSReverseIPTransportConnectionIndication + +DESCRIPTION: + The function sends 'WDS/Reverse IP Transport Connection Indication Request' (0x008D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSReverseIPTransportConnectionIndication( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 141; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetIPSecStaticSAConfig + +DESCRIPTION: + The function sends 'WDS/Get IPSec Static SA Config Request' (0x008F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetIPSecStaticSAConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 143; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSReverseIPTransportConfigComplete + +DESCRIPTION: + The function sends 'WDS/Reverse IP Transport Config Complete Request' (0x0090) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSReverseIPTransportConfigComplete( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 144; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetExtendedDataBearerTechnology + +DESCRIPTION: + The function sends 'WDS/Get Extended Data Bearer Technology Request' (0x0091) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetExtendedDataBearerTechnology( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 145; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetLTEMaximumAttachPDNNumber + +DESCRIPTION: + The function sends 'WDS/Get LTE Maximum Attach PDN Number Request' (0x0092) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLTEMaximumAttachPDNNumber( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 146; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetLTEAttachPDNList + +DESCRIPTION: + The function sends 'WDS/Set LTE Attach PDN List Request' (0x0093) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetLTEAttachPDNList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 147; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetLTEAttachPDNList + +DESCRIPTION: + The function sends 'WDS/Get LTE Attach PDN List Request' (0x0094) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLTEAttachPDNList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 148; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetLTEDataRetry + +DESCRIPTION: + The function sends 'WDS/Set LTE Data Retry Request' (0x0096) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetLTEDataRetry( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 150; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetLTEDataRetry + +DESCRIPTION: + The function sends 'WDS/Get LTE Data Retry Request' (0x0097) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLTEDataRetry( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 151; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSSetLTEAttachType + +DESCRIPTION: + The function sends 'WDS/Set LTE Attach Type Request' (0x0098) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSSetLTEAttachType( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 152; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDSGetLTEAttachType + +DESCRIPTION: + The function sends 'WDS/Get LTE Attach Type Request' (0x0099) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDSGetLTEAttachType( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 1; + ULONG msgID = 153; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSReset + +DESCRIPTION: + The function sends 'DMS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 0; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSSetEventReport + +DESCRIPTION: + The function sends 'DMS/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 1; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetSupportedMessages + +DESCRIPTION: + The function sends 'DMS/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 30; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetSupportedFields + +DESCRIPTION: + The function sends 'DMS/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 31; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetDeviceCapabilities + +DESCRIPTION: + The function sends 'DMS/Get Device Capabilities Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceCapabilities( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetDeviceManfacturer + +DESCRIPTION: + The function sends 'DMS/Get Device Manfacturer Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceManfacturer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetDeviceModel + +DESCRIPTION: + The function sends 'DMS/Get Device Model Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceModel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetDeviceRevision + +DESCRIPTION: + The function sends 'DMS/Get Device Revision Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetDeviceVoiceNumber + +DESCRIPTION: + The function sends 'DMS/Get Device Voice Number Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceVoiceNumber( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetDeviceSerialNumbers + +DESCRIPTION: + The function sends 'DMS/Get Device Serial Numbers Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetDeviceSerialNumbers( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetPowerState + +DESCRIPTION: + The function sends 'DMS/Get Power State Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetPowerState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 38; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSUIMSetPINProtection + +DESCRIPTION: + The function sends 'DMS/UIM Set PIN Protection Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMSetPINProtection( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 39; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSUIMVerifyPIN + +DESCRIPTION: + The function sends 'DMS/UIM Verify PIN Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMVerifyPIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 40; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSUIMUnblockPIN + +DESCRIPTION: + The function sends 'DMS/UIM Unblock PIN Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMUnblockPIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 41; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSUIMChangePIN + +DESCRIPTION: + The function sends 'DMS/UIM Change PIN Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMChangePIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 42; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSUIMGetPINStatus + +DESCRIPTION: + The function sends 'DMS/UIM Get PIN Status Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMGetPINStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 43; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetHardwareRevision + +DESCRIPTION: + The function sends 'DMS/Get Hardware Revision Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetHardwareRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 44; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetOperatingMode + +DESCRIPTION: + The function sends 'DMS/Get Operating Mode Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetOperatingMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 45; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSSetOperatingMode + +DESCRIPTION: + The function sends 'DMS/Set Operating Mode Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetOperatingMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 46; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetTimestamp + +DESCRIPTION: + The function sends 'DMS/Get Timestamp Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetTimestamp( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 47; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetPRLVersion + +DESCRIPTION: + The function sends 'DMS/Get PRL Version Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetPRLVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 48; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetActivationState + +DESCRIPTION: + The function sends 'DMS/Get Activation State Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetActivationState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 49; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSActivateAutomatic + +DESCRIPTION: + The function sends 'DMS/Activate Automatic Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSActivateAutomatic( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 50; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSActivateManual + +DESCRIPTION: + The function sends 'DMS/Activate Manual Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSActivateManual( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 51; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetLockState + +DESCRIPTION: + The function sends 'DMS/Get Lock State Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetLockState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 52; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSSetLockState + +DESCRIPTION: + The function sends 'DMS/Set Lock State Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetLockState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 53; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSSetLockCode + +DESCRIPTION: + The function sends 'DMS/Set Lock Code Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetLockCode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 54; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSReadUserData + +DESCRIPTION: + The function sends 'DMS/Read User Data Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSReadUserData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 55; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSWriteUserData + +DESCRIPTION: + The function sends 'DMS/Write User Data Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSWriteUserData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 56; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSReadERIData + +DESCRIPTION: + The function sends 'DMS/Read ERI Data Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSReadERIData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 57; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSResetFactoryDefaults + +DESCRIPTION: + The function sends 'DMS/Reset Factory Defaults Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSResetFactoryDefaults( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 58; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSValidateSPC + +DESCRIPTION: + The function sends 'DMS/Validate SPC Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSValidateSPC( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 59; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSUIMGetICCID + +DESCRIPTION: + The function sends 'DMS/UIM Get ICCID Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMGetICCID( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 60; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSUIMGetHostLockID + +DESCRIPTION: + The function sends 'DMS/UIM Get Host Lock ID Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMGetHostLockID( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 63; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSUIMGetControlKeyStatus + +DESCRIPTION: + The function sends 'DMS/UIM Get Control Key Status Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMGetControlKeyStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 64; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSUIMSetControlKeyProtection + +DESCRIPTION: + The function sends 'DMS/UIM Set Control Key Protection Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMSetControlKeyProtection( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 65; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSUIMUnblockControlKey + +DESCRIPTION: + The function sends 'DMS/UIM Unblock Control Key Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSUIMUnblockControlKey( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 66; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetIMSI + +DESCRIPTION: + The function sends 'DMS/Get IMSI Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetIMSI( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 67; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetUIMState + +DESCRIPTION: + The function sends 'DMS/Get UIM State Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetUIMState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 68; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetBandCapabilities + +DESCRIPTION: + The function sends 'DMS/Get Band Capabilities Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetBandCapabilities( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 69; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetFactorySerialNumber + +DESCRIPTION: + The function sends 'DMS/Get Factory Serial Number Request' (0x0046) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetFactorySerialNumber( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 70; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSSetDeviceTime + +DESCRIPTION: + The function sends 'DMS/Set Device Time Request' (0x004B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetDeviceTime( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 75; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetSoftwareVersion + +DESCRIPTION: + The function sends 'DMS/Get Software Version Request' (0x0051) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetSoftwareVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 81; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSSetSPC + +DESCRIPTION: + The function sends 'DMS/Set SPC Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSSetSPC( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 82; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetCurrentPRLInfo + +DESCRIPTION: + The function sends 'DMS/Get Current PRL Info Request' (0x0053) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetCurrentPRLInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 83; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSBindSubscription + +DESCRIPTION: + The function sends 'DMS/Bind Subscription Request' (0x0054) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSBindSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 84; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + DMSGetSubscription + +DESCRIPTION: + The function sends 'DMS/Get Subscription Request' (0x0055) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG DMSGetSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 2; + ULONG msgID = 85; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASReset + +DESCRIPTION: + The function sends 'NAS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 0; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASAbort + +DESCRIPTION: + The function sends 'NAS/Abort Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASAbort( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 1; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetEventReport + +DESCRIPTION: + The function sends 'NAS/Set Event Report Request' (0x0002) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 2; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetRegistrationEventReport + +DESCRIPTION: + The function sends 'NAS/Set Registration Event Report Request' (0x0003) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetRegistrationEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 3; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetSupportedMessages + +DESCRIPTION: + The function sends 'NAS/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 30; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetSupportedFields + +DESCRIPTION: + The function sends 'NAS/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 31; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetSignalStrength + +DESCRIPTION: + The function sends 'NAS/Get Signal Strength Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSignalStrength( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASPerformNetworkScan + +DESCRIPTION: + The function sends 'NAS/Perform Network Scan Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASPerformNetworkScan( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASInitiateNetworkRegister + +DESCRIPTION: + The function sends 'NAS/Initiate Network Register Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASInitiateNetworkRegister( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASInitiateAttach + +DESCRIPTION: + The function sends 'NAS/Initiate Attach Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASInitiateAttach( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetServingSystem + +DESCRIPTION: + The function sends 'NAS/Get Serving System Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetServingSystem( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetHomeNetwork + +DESCRIPTION: + The function sends 'NAS/Get Home Network Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetHomeNetwork( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetPreferredNetworks + +DESCRIPTION: + The function sends 'NAS/Get Preferred Networks Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetPreferredNetworks( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 38; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetPreferredNetworks + +DESCRIPTION: + The function sends 'NAS/Set Preferred Networks Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetPreferredNetworks( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 39; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetForbiddenNetworks + +DESCRIPTION: + The function sends 'NAS/Get Forbidden Networks Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetForbiddenNetworks( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 40; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetForbiddenNetworks + +DESCRIPTION: + The function sends 'NAS/Set Forbidden Networks Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetForbiddenNetworks( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 41; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetTechnologyPreference + +DESCRIPTION: + The function sends 'NAS/Set Technology Preference Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetTechnologyPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 42; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetTechnologyPreference + +DESCRIPTION: + The function sends 'NAS/Get Technology Preference Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetTechnologyPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 43; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetACCOLC + +DESCRIPTION: + The function sends 'NAS/Get ACCOLC Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetACCOLC( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 44; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetACCOLC + +DESCRIPTION: + The function sends 'NAS/Set ACCOLC Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetACCOLC( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 45; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetSystemPreference + +DESCRIPTION: + The function sends 'NAS/Get System Preference' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSystemPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 46; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetNetworkParameters + +DESCRIPTION: + The function sends 'NAS/Get Network Parameters Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetNetworkParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 47; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetNetworkParameters + +DESCRIPTION: + The function sends 'NAS/Set Network Parameters Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetNetworkParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 48; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetRFInfo + +DESCRIPTION: + The function sends 'NAS/Get RF Info Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetRFInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 49; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetANAAAAuthenticationStatus + +DESCRIPTION: + The function sends 'NAS/Get AN-AAA Authentication Status Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetANAAAAuthenticationStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 50; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetSystemSelectionPref + +DESCRIPTION: + The function sends 'NAS/Set System Selection Pref Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetSystemSelectionPref( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 51; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetSystemSelectionPref + +DESCRIPTION: + The function sends 'NAS/Get System Selection Pref Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSystemSelectionPref( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 52; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetDDTMPreference + +DESCRIPTION: + The function sends 'NAS/Set DDTM Preference Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetDDTMPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 55; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetDDTMPreference + +DESCRIPTION: + The function sends 'NAS/Get DDTM Preference Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetDDTMPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 56; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetOperatorNameData + +DESCRIPTION: + The function sends 'NAS/Get Operator Name Data Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetOperatorNameData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 57; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetCSPPLMNMode + +DESCRIPTION: + The function sends 'NAS/Get CSP PLMN Mode Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetCSPPLMNMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 59; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASUpdateAKEY + +DESCRIPTION: + The function sends 'NAS/Update AKEY Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASUpdateAKEY( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 61; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGet3GPP2SubscriptionInfo + +DESCRIPTION: + The function sends 'NAS/Get 3GPP2 Subscription Info Request' (0x003E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGet3GPP2SubscriptionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 62; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSet3GPP2SubscriptionInfo + +DESCRIPTION: + The function sends 'NAS/Set 3GPP2 Subscription Info Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSet3GPP2SubscriptionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 63; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetMobileCAIRevision + +DESCRIPTION: + The function sends 'NAS/Get Mobile CAI Revision Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetMobileCAIRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 64; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetRTREConfig + +DESCRIPTION: + The function sends 'NAS/Get RTRE Config Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetRTREConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 65; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetRTREConfig + +DESCRIPTION: + The function sends 'NAS/Set RTRE Config Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetRTREConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 66; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetCellLocationInfo + +DESCRIPTION: + The function sends 'NAS/Get Cell Location Info Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetCellLocationInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 67; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetPLMNName + +DESCRIPTION: + The function sends 'NAS/Get PLMN Name Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetPLMNName( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 68; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASBindSubscription + +DESCRIPTION: + The function sends 'NAS/Bind Subscription Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASBindSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 69; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetModePref + +DESCRIPTION: + The function sends 'NAS/Get Mode Pref Request' (0x0049) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetModePref( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 73; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetDualStandbyPreference + +DESCRIPTION: + The function sends 'NAS/Set Dual Standby Preference Request' (0x004B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetDualStandbyPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 75; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetSystemInfo + +DESCRIPTION: + The function sends 'NAS/Get System Info Request' (0x004D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSystemInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 77; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetSignalInfo + +DESCRIPTION: + The function sends 'NAS/Get Signal Info Request' (0x004F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSignalInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 79; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASConfigureSignalInfo + +DESCRIPTION: + The function sends 'NAS/Configure Signal Info Request' (0x0050) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASConfigureSignalInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 80; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetErrorRate + +DESCRIPTION: + The function sends 'NAS/Get Error Rate Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetErrorRate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 82; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetEVDOProtocolSubtype + +DESCRIPTION: + The function sends 'NAS/Get EV-DO Protocol Subtype Request' (0x0056) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetEVDOProtocolSubtype( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 86; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetEVDOColorCode + +DESCRIPTION: + The function sends 'NAS/Get EV-DO Color Code Request' (0x0057) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetEVDOColorCode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 87; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetAcquisitionSystemMode + +DESCRIPTION: + The function sends 'NAS/Get Acquisition System Mode Request' (0x0058) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetAcquisitionSystemMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 88; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetRXDiversity + +DESCRIPTION: + The function sends 'NAS/Set RX Diversity Request' (0x0059) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetRXDiversity( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 89; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetRXTXInfo + +DESCRIPTION: + The function sends 'NAS/Get RX/TX Info Request' (0x005A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetRXTXInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 90; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASUpdateAKEYExtended + +DESCRIPTION: + The function sends 'NAS/Update A-KEY Extended Request' (0x005B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASUpdateAKEYExtended( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 91; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetDualStandbyPreference + +DESCRIPTION: + The function sends 'NAS/Get Dual Standby Preference Request' (0x005C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetDualStandbyPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 92; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASDetachLTE + +DESCRIPTION: + The function sends 'NAS/Detach LTE Request' (0x005D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASDetachLTE( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 93; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASBlockLTEPLMN + +DESCRIPTION: + The function sends 'NAS/Block LTE PLMN Request' (0x005E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASBlockLTEPLMN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 94; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASUnblockLTEPLMN + +DESCRIPTION: + The function sends 'NAS/Unblock LTE PLMN Request' (0x005F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASUnblockLTEPLMN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 95; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASResetLTEPLMNBlock + +DESCRIPTION: + The function sends 'NAS/Reset LTE PLMN Block Request' (0x0060) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASResetLTEPLMNBlock( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 96; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASConfigureEMBMS + +DESCRIPTION: + The function sends 'NAS/Configure EMBMS Request' (0x0062) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASConfigureEMBMS( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 98; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetEMBMSStatus + +DESCRIPTION: + The function sends 'NAS/Get EMBMS Status Request' (0x0063) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetEMBMSStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 99; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetCDMAPositionInfo + +DESCRIPTION: + The function sends 'NAS/Get CDMA Position Info Request' (0x0065) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetCDMAPositionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 101; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASForceNetworkSearch + +DESCRIPTION: + The function sends 'NAS/Force Network Search Request' (0x0067) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASForceNetworkSearch( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 103; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetManagedRoamingConfig + +DESCRIPTION: + The function sends 'NAS/Get Managed Roaming Config Request' (0x0069) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetManagedRoamingConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 105; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetCentralizedEONSSupport + +DESCRIPTION: + The function sends 'NAS/Get Centralized EONS Support Request' (0x006B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetCentralizedEONSSupport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 107; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASConfigureSignalInfo2 + +DESCRIPTION: + The function sends 'NAS/Configure Signal Info 2 Request' (0x006C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASConfigureSignalInfo2( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 108; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetTDSCDMACellInfo + +DESCRIPTION: + The function sends 'NAS/Get TD-SCDMA Cell Info Request' (0x006D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetTDSCDMACellInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 109; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetHPLMNIRATSearchTimer + +DESCRIPTION: + The function sends 'NAS/Set HPLMN IRAT Search Timer Request' (0x006E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetHPLMNIRATSearchTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 110; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetEMBMSSignalQuality + +DESCRIPTION: + The function sends 'NAS/Get EMBMS Signal Quality Request' (0x006F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetEMBMSSignalQuality( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 111; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASLimitSystemInfoIndications + +DESCRIPTION: + The function sends 'NAS/Limit System Info Indications Request' (0x0070) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASLimitSystemInfoIndications( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 112; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetSystemInfoIndicationLimits + +DESCRIPTION: + The function sends 'NAS/Get System Info Indication Limits Request' (0x0071) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSystemInfoIndicationLimits( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 113; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASUpdateIMSStatus + +DESCRIPTION: + The function sends 'NAS/Update IMS Status Request' (0x0072) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASUpdateIMSStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 114; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetIMSPreference + +DESCRIPTION: + The function sends 'NAS/Get IMS Preference Request' (0x0073) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetIMSPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 115; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASConfigurePLMNNameIndication + +DESCRIPTION: + The function sends 'NAS/Configure PLMN Name Indication Request' (0x0075) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASConfigurePLMNNameIndication( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 117; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASCDMAAvoidSystem + +DESCRIPTION: + The function sends 'NAS/CDMA Avoid System Request' (0x0076) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASCDMAAvoidSystem( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 118; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetCDMAAvoidSystemList + +DESCRIPTION: + The function sends 'NAS/Get CDMA Avoid System List Request' (0x0077) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetCDMAAvoidSystemList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 119; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetHPLMNSearchTimer + +DESCRIPTION: + The function sends 'NAS/Set HPLMN Search Timer Request' (0x0078) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetHPLMNSearchTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 120; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetHPLMNSearchTimer + +DESCRIPTION: + The function sends 'NAS/Get HPLMN Search Timer Request' (0x0079) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetHPLMNSearchTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 121; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASSetE911State + +DESCRIPTION: + The function sends 'NAS/Set E911 State Request' (0x007A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASSetE911State( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 122; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetSubscriptionInfo + +DESCRIPTION: + The function sends 'NAS/Get Subscription Info Request' (0x007C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetSubscriptionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 124; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetNetworkTime + +DESCRIPTION: + The function sends 'NAS/Get Network Time Request' (0x007D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetNetworkTime( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 125; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + NASGetLTESIB16NetworkTime + +DESCRIPTION: + The function sends 'NAS/Get LTE SIB16 Network Time Request' (0x007E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG NASGetLTESIB16NetworkTime( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 3; + ULONG msgID = 126; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSReset + +DESCRIPTION: + The function sends 'WMS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 0; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetEventReport + +DESCRIPTION: + The function sends 'WMS/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 1; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetSupportedMessages + +DESCRIPTION: + The function sends 'WMS/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 30; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetSupportedFields + +DESCRIPTION: + The function sends 'WMS/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 31; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSRawSend + +DESCRIPTION: + The function sends 'WMS/Raw Send Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSRawSend( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSRawWrite + +DESCRIPTION: + The function sends 'WMS/Raw Write Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSRawWrite( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSRawRead + +DESCRIPTION: + The function sends 'WMS/Raw Read Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSRawRead( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSModifyTag + +DESCRIPTION: + The function sends 'WMS/Modify Tag Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSModifyTag( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSDelete + +DESCRIPTION: + The function sends 'WMS/Delete Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSDelete( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetMessageProtocol + +DESCRIPTION: + The function sends 'WMS/Get Message Protocol Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetMessageProtocol( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 48; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSListMessages + +DESCRIPTION: + The function sends 'WMS/List Messages Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSListMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 49; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetRoutes + +DESCRIPTION: + The function sends 'WMS/Set Routes Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetRoutes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 50; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetRoutes + +DESCRIPTION: + The function sends 'WMS/Get Routes Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetRoutes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 51; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetSMSCAddress + +DESCRIPTION: + The function sends 'WMS/Get SMSC Address Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetSMSCAddress( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 52; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetSMSCAddress + +DESCRIPTION: + The function sends 'WMS/Set SMSC Address Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetSMSCAddress( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 53; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetStorageMaxSize + +DESCRIPTION: + The function sends 'WMS/Get Storage Max Size Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetStorageMaxSize( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 54; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSendACK + +DESCRIPTION: + The function sends 'WMS/Send ACK Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSendACK( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 55; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetRetryPeriod + +DESCRIPTION: + The function sends 'WMS/Set Retry Period Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetRetryPeriod( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 56; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetRetryInterval + +DESCRIPTION: + The function sends 'WMS/Set Retry Interval Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetRetryInterval( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 57; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetDCDisconnectTimer + +DESCRIPTION: + The function sends 'WMS/Set DC Disconnect Timer Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetDCDisconnectTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 58; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetMemoryStatus + +DESCRIPTION: + The function sends 'WMS/Set Memory Status Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetMemoryStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 59; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetBroadcastActivation + +DESCRIPTION: + The function sends 'WMS/Set Broadcast Activation Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetBroadcastActivation( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 60; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetBroadcastConfig + +DESCRIPTION: + The function sends 'WMS/Set Broadcast Config Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetBroadcastConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 61; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetBroadcastConfig + +DESCRIPTION: + The function sends 'WMS/Get Broadcast Config Request' (0x003E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetBroadcastConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 62; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetDomainPreference + +DESCRIPTION: + The function sends 'WMS/Get Domain Preference Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetDomainPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 64; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetDomainPreference + +DESCRIPTION: + The function sends 'WMS/Set Domain Preference Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetDomainPreference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 65; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSendFromMemoryStore + +DESCRIPTION: + The function sends 'WMS/Send From Memory Store Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSendFromMemoryStore( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 66; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetWaitingMessage + +DESCRIPTION: + The function sends 'WMS/Get Waiting Message Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetWaitingMessage( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 67; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetPrimaryClient + +DESCRIPTION: + The function sends 'WMS/Set Primary Client Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetPrimaryClient( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 69; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSIndicatorRegistration + +DESCRIPTION: + The function sends 'WMS/Indicator Registration Request' (0x0047) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSIndicatorRegistration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 71; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetTransportLayerInfo + +DESCRIPTION: + The function sends 'WMS/Get Transport Layer Info Request' (0x0048) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetTransportLayerInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 72; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetNetworkRegistrationInfo + +DESCRIPTION: + The function sends 'WMS/Get Network Registration Info Request' (0x004A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetNetworkRegistrationInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 74; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSBindSubscription + +DESCRIPTION: + The function sends 'WMS/Bind Subscription Request' (0x004C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSBindSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 76; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetIndicatorRegistration + +DESCRIPTION: + The function sends 'WMS/Get Indicator Registration Request' (0x004D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetIndicatorRegistration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 77; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetSMSParameters + +DESCRIPTION: + The function sends 'WMS/Get SMS Parameters Request' (0x004E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetSMSParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 78; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetSMSParameters + +DESCRIPTION: + The function sends 'WMS/Set SMS Parameters Request' (0x004F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetSMSParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 79; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetDomainPreferenceConfig + +DESCRIPTION: + The function sends 'WMS/Get Domain Preference Config Request' (0x0051) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetDomainPreferenceConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 81; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetDomainPreferenceConfig + +DESCRIPTION: + The function sends 'WMS/Set Domain Preference Config Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetDomainPreferenceConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 82; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetRetryPeriod + +DESCRIPTION: + The function sends 'WMS/Get Retry Period Request' (0x0053) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetRetryPeriod( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 83; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetRetryInterval + +DESCRIPTION: + The function sends 'WMS/Get Retry Interval Request' (0x0054) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetRetryInterval( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 84; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetDCDisconnectTimer + +DESCRIPTION: + The function sends 'WMS/Get DC Disconnect Timer Request' (0x0055) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetDCDisconnectTimer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 85; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetMemoryStatus + +DESCRIPTION: + The function sends 'WMS/Get Memory Status Request' (0x0056) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetMemoryStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 86; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetPrimaryClient + +DESCRIPTION: + The function sends 'WMS/Get Primary Client Request' (0x0057) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetPrimaryClient( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 87; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetSubscriptionBinding + +DESCRIPTION: + The function sends 'WMS/Get Subscription Binding Request' (0x0058) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetSubscriptionBinding( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 88; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSAsyncRawSend + +DESCRIPTION: + The function sends 'WMS/Async Raw Send Request' (0x0059) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSAsyncRawSend( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 89; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSAsyncSendACK + +DESCRIPTION: + The function sends 'WMS/Async Send ACK Request' (0x005A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSAsyncSendACK( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 90; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSAsyncSendFromMemoryStore + +DESCRIPTION: + The function sends 'WMS/Async Send From Memory Store Request' (0x005B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSAsyncSendFromMemoryStore( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 91; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSGetServiceReadyStatus + +DESCRIPTION: + The function sends 'WMS/Get Service Ready Status Request' (0x005C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSGetServiceReadyStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 92; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WMSSetWaitingMessage + +DESCRIPTION: + The function sends 'WMS/Set Waiting Message Request' (0x005F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WMSSetWaitingMessage( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 5; + ULONG msgID = 95; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSReset + +DESCRIPTION: + The function sends 'PDS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 0; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetEventReport + +DESCRIPTION: + The function sends 'PDS/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 1; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetServiceState + +DESCRIPTION: + The function sends 'PDS/Get Service State Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetServiceState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetServiceState + +DESCRIPTION: + The function sends 'PDS/Set Service State Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetServiceState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSStartTrackingSession + +DESCRIPTION: + The function sends 'PDS/Start Tracking Session Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSStartTrackingSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetTrackingSessionInfo + +DESCRIPTION: + The function sends 'PDS/Get Tracking Session Info Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetTrackingSessionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSFixPosition + +DESCRIPTION: + The function sends 'PDS/Fix Position Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSFixPosition( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSEndTrackingSession + +DESCRIPTION: + The function sends 'PDS/End Tracking Session Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSEndTrackingSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetNMEAConfig + +DESCRIPTION: + The function sends 'PDS/Get NMEA Config Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetNMEAConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 38; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetNMEAConfig + +DESCRIPTION: + The function sends 'PDS/Set NMEA Config Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetNMEAConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 39; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectTimeReference + +DESCRIPTION: + The function sends 'PDS/Inject Time Reference Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectTimeReference( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 40; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetDefaults + +DESCRIPTION: + The function sends 'PDS/Get Defaults Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetDefaults( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 41; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetDefaults + +DESCRIPTION: + The function sends 'PDS/Set Defaults Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetDefaults( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 42; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetXTRAParameters + +DESCRIPTION: + The function sends 'PDS/Get XTRA Parameters Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetXTRAParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 43; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetXTRAParameters + +DESCRIPTION: + The function sends 'PDS/Set XTRA Parameters Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetXTRAParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 44; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSForceXTRADownload + +DESCRIPTION: + The function sends 'PDS/Force XTRA Download Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSForceXTRADownload( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 45; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetAGPSConfig + +DESCRIPTION: + The function sends 'PDS/Get AGPS Config Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetAGPSConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 46; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetAGPSConfig + +DESCRIPTION: + The function sends 'PDS/Set AGPS Config Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetAGPSConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 47; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetServiceAutoTrackingState + +DESCRIPTION: + The function sends 'PDS/Get Service Auto-Tracking State Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetServiceAutoTrackingState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 48; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetServiceAutoTrackingState + +DESCRIPTION: + The function sends 'PDS/Set Service Auto-Tracking State Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetServiceAutoTrackingState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 49; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetCOMPortAutoTrackingConfig + +DESCRIPTION: + The function sends 'PDS/Get COM Port Auto-Tracking Config Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetCOMPortAutoTrackingConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 50; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetCOMPortAutoTrackingConfig + +DESCRIPTION: + The function sends 'PDS/Set COM Port Auto-Tracking Config Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetCOMPortAutoTrackingConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 51; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSResetPDSData + +DESCRIPTION: + The function sends 'PDS/Reset PDS Data Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSResetPDSData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 52; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSinglePositionFix + +DESCRIPTION: + The function sends 'PDS/Single Position Fix Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSinglePositionFix( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 53; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetServiceVersion + +DESCRIPTION: + The function sends 'PDS/Get Service Version Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetServiceVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 54; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectXTRAData + +DESCRIPTION: + The function sends 'PDS/Inject XTRA Data Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectXTRAData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 55; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectPositionData + +DESCRIPTION: + The function sends 'PDS/Inject Position Data Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectPositionData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 56; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectWiFiPositionData + +DESCRIPTION: + The function sends 'PDS/Inject Wi-Fi Position Data Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectWiFiPositionData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 57; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetSBASConfig + +DESCRIPTION: + The function sends 'PDS/Get SBAS Config Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSBASConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 58; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetSBASConfig + +DESCRIPTION: + The function sends 'PDS/Set SBAS Config Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSBASConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 59; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSendNetworkInitiatedResponse + +DESCRIPTION: + The function sends 'PDS/Send Network Initiated Response Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSendNetworkInitiatedResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 60; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectAbsoluteTime + +DESCRIPTION: + The function sends 'PDS/Inject Absolute Time Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectAbsoluteTime( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 61; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectEFSData + +DESCRIPTION: + The function sends 'PDS/Inject EFS Data Request' (0x003E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectEFSData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 62; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetDPOConfig + +DESCRIPTION: + The function sends 'PDS/Get DPO Config Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetDPOConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 63; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetDPOConfig + +DESCRIPTION: + The function sends 'PDS/Set DPO Config Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetDPOConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 64; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetODPConfig + +DESCRIPTION: + The function sends 'PDS/Get ODP Config Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetODPConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 65; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetODPConfig + +DESCRIPTION: + The function sends 'PDS/Set ODP Config Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetODPConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 66; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSCancelSinglePositionFix + +DESCRIPTION: + The function sends 'PDS/Cancel Single Position Fix Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSCancelSinglePositionFix( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 67; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetGPSState + +DESCRIPTION: + The function sends 'PDS/Get GPS State Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetGPSState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 68; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetPPMEventReport + +DESCRIPTION: + The function sends 'PDS/Set PPM Event Report Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetPPMEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 69; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetSPIStreamingReport + +DESCRIPTION: + The function sends 'PDS/Set SPI Streaming Report Request' (0x0046) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSPIStreamingReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 70; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetSPIStatus + +DESCRIPTION: + The function sends 'PDS/Set SPI Status Request' (0x0047) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSPIStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 71; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetPPMReportingState + +DESCRIPTION: + The function sends 'PDS/Set PPM Reporting State Request' (0x0048) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetPPMReportingState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 72; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSForceReceiverOff + +DESCRIPTION: + The function sends 'PDS/Force Receiver Off Request' (0x0049) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSForceReceiverOff( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 73; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetPositionMethodsState + +DESCRIPTION: + The function sends 'PDS/Get Position Methods State Request' (0x0050) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetPositionMethodsState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 80; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetPositionMethodsState + +DESCRIPTION: + The function sends 'PDS/Set Position Methods State Request' (0x0051) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetPositionMethodsState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 81; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectSensorData + +DESCRIPTION: + The function sends 'PDS/Inject Sensor Data Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectSensorData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 82; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectTimeSyncData + +DESCRIPTION: + The function sends 'PDS/Inject Time Sync Data Request' (0x0053) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectTimeSyncData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 83; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetSensorConfig + +DESCRIPTION: + The function sends 'PDS/Get Sensor Config Request' (0x0054) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSensorConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 84; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetSensorConfig + +DESCRIPTION: + The function sends 'PDS/Set Sensor Config Request' (0x0055) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSensorConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 85; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetSensorNavigation + +DESCRIPTION: + The function sends 'PDS/Get Sensor Navigation Request' (0x0056) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSensorNavigation( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 86; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetNavigationConfig + +DESCRIPTION: + The function sends 'PDS/Set Navigation Config Request' (0x0057) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetNavigationConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 87; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetWLANBlanking + +DESCRIPTION: + The function sends 'PDS/Set WLAN Blanking Request' (0x005A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetWLANBlanking( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 90; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetSecurityChallengeReport + +DESCRIPTION: + The function sends 'PDS/Set Security Challenge Report Request' (0x005B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSecurityChallengeReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 91; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetSecurityChallenge + +DESCRIPTION: + The function sends 'PDS/Set Security Challenge Request' (0x005C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSecurityChallenge( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 92; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetSecurityEncryptionConfig + +DESCRIPTION: + The function sends 'PDS/Get Security Encryption Config Request' (0x005D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSecurityEncryptionConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 93; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetSecurityUpdateRate + +DESCRIPTION: + The function sends 'PDS/Set Security Update Rate Request' (0x005E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSecurityUpdateRate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 94; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetCellDatabaseControl + +DESCRIPTION: + The function sends 'PDS/Set Cell Database Control Request' (0x005F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetCellDatabaseControl( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 95; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectMotionData + +DESCRIPTION: + The function sends 'PDS/Inject Motion Data Request' (0x0061) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectMotionData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 97; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetGNSSEngineErrorRecoveryReport + +DESCRIPTION: + The function sends 'PDS/Set GNSS Engine Error Recovery Report Request' (0x0062) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetGNSSEngineErrorRecoveryReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 98; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSResetLocationService + +DESCRIPTION: + The function sends 'PDS/Reset Location Service Request' (0x0063) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSResetLocationService( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 99; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectTestData + +DESCRIPTION: + The function sends 'PDS/Inject Test Data Request' (0x0064) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectTestData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 100; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetGNSSRFConfig + +DESCRIPTION: + The function sends 'PDS/Set GNSS RF Config Request' (0x0065) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetGNSSRFConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 101; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectCourseOverGroundData + +DESCRIPTION: + The function sends 'PDS/Inject Course Over Ground Data Request' (0x0066) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectCourseOverGroundData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 102; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectSUPLCertificate + +DESCRIPTION: + The function sends 'PDS/Inject SUPL Certificate Request' (0x0067) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectSUPLCertificate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 103; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSDeleteSUPLCertificate + +DESCRIPTION: + The function sends 'PDS/Delete SUPL Certificate Request' (0x0068) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSDeleteSUPLCertificate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 104; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetIS801OverSUPLIndicator + +DESCRIPTION: + The function sends 'PDS/Get IS-801 Over SUPL Indicator Request' (0x0069) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetIS801OverSUPLIndicator( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 105; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetIS801OverSUPLIndicator + +DESCRIPTION: + The function sends 'PDS/Set IS-801 Over SUPL Indicator Request' (0x006A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetIS801OverSUPLIndicator( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 106; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetSUPLHashAlgorithm + +DESCRIPTION: + The function sends 'PDS/Get SUPL Hash Algorithm Request' (0x006B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSUPLHashAlgorithm( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 107; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetSUPLHashAlgorithm + +DESCRIPTION: + The function sends 'PDS/Set SUPL Hash Algorithm Request' (0x006C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSUPLHashAlgorithm( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 108; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetSUPLMaximumVersion + +DESCRIPTION: + The function sends 'PDS/Get SUPL Maximum Version Request' (0x006D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSUPLMaximumVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 109; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetSUPLMaximumVersion + +DESCRIPTION: + The function sends 'PDS/Set SUPL Maximum Version Request' (0x006E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSUPLMaximumVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 110; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetSUPLSecurity + +DESCRIPTION: + The function sends 'PDS/Get SUPL Security Request' (0x006F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSUPLSecurity( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 111; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetSUPLSecurity + +DESCRIPTION: + The function sends 'PDS/Set SUPL Security Request' (0x0070) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSUPLSecurity( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 112; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetSUPLTLSVersion + +DESCRIPTION: + The function sends 'PDS/Get SUPL TLS Version Request' (0x0071) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetSUPLTLSVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 113; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetSUPLTLSVersion + +DESCRIPTION: + The function sends 'PDS/Set SUPL TLS Version Request' (0x0072) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetSUPLTLSVersion( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 114; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetAGNSSPositioningModes + +DESCRIPTION: + The function sends 'PDS/Get AGNSS Positioning Modes Request' (0x0073) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetAGNSSPositioningModes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 115; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetAGNSSPositioningModes + +DESCRIPTION: + The function sends 'PDS/Set AGNSS Positioning Modes Request' (0x0074) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetAGNSSPositioningModes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 116; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetEmergencyProtocolConfig + +DESCRIPTION: + The function sends 'PDS/Get Emergency Protocol Config Request' (0x0075) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetEmergencyProtocolConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 117; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetEmergencyProtocolConfig + +DESCRIPTION: + The function sends 'PDS/Set Emergency Protocol Config Request' (0x0076) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetEmergencyProtocolConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 118; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetAPNProfiles + +DESCRIPTION: + The function sends 'PDS/Get APN Profiles Request' (0x0077) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetAPNProfiles( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 119; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetAPNProfiles + +DESCRIPTION: + The function sends 'PDS/Set APN Profiles Request' (0x0078) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetAPNProfiles( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 120; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSGetHomeSUPLAddress + +DESCRIPTION: + The function sends 'PDS/Get Home SUPL Address Request' (0x0079) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSGetHomeSUPLAddress( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 121; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSSetHomeSUPLAddress + +DESCRIPTION: + The function sends 'PDS/Set Home SUPL Address Request' (0x007A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSSetHomeSUPLAddress( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 122; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectVehicleSensorData + +DESCRIPTION: + The function sends 'PDS/Inject Vehicle Sensor Data Request' (0x007B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectVehicleSensorData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 123; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDSInjectPedometerData + +DESCRIPTION: + The function sends 'PDS/Inject Pedometer Data Request' (0x007C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDSInjectPedometerData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 6; + ULONG msgID = 124; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + AUTHStartEAPSession + +DESCRIPTION: + The function sends 'AUTH/Start EAP Session Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG AUTHStartEAPSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 7; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + AUTHSendEAPPacket + +DESCRIPTION: + The function sends 'AUTH/Send EAP Packet Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG AUTHSendEAPPacket( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 7; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + AUTHGetEAPSessionKeys + +DESCRIPTION: + The function sends 'AUTH/Get EAP Session Keys Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG AUTHGetEAPSessionKeys( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 7; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + AUTHEndEAPSession + +DESCRIPTION: + The function sends 'AUTH/End EAP Session Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG AUTHEndEAPSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 7; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + AUTHRunAKA + +DESCRIPTION: + The function sends 'AUTH/Run AKA Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG AUTHRunAKA( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 7; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceIndicationRegistration + +DESCRIPTION: + The function sends 'Voice/Indication Registration Request' (0x0003) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceIndicationRegistration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 3; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetSupportedMessages + +DESCRIPTION: + The function sends 'Voice/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 30; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetSupportedFields + +DESCRIPTION: + The function sends 'Voice/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 31; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceCallOriginate + +DESCRIPTION: + The function sends 'Voice/Call Originate Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceCallOriginate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceCallEnd + +DESCRIPTION: + The function sends 'Voice/Call End Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceCallEnd( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceCallAnswer + +DESCRIPTION: + The function sends 'Voice/Call Answer Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceCallAnswer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetCallInfo + +DESCRIPTION: + The function sends 'Voice/Get Call Info Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCallInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceSendFlash + +DESCRIPTION: + The function sends 'Voice/Send Flash Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceSendFlash( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 39; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceBurstDTMF + +DESCRIPTION: + The function sends 'Voice/Burst DTMF Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceBurstDTMF( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 40; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceStartContinuousDTMF + +DESCRIPTION: + The function sends 'Voice/Start Continuous DTMF Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceStartContinuousDTMF( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 41; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceStopContinuousDTMF + +DESCRIPTION: + The function sends 'Voice/Stop Continuous DTMF Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceStopContinuousDTMF( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 42; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceSetPreferredPrivacy + +DESCRIPTION: + The function sends 'Voice/Set Preferred Privacy Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceSetPreferredPrivacy( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 44; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetAllCallInfo + +DESCRIPTION: + The function sends 'Voice/Get All Call Info Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetAllCallInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 47; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceManageCalls + +DESCRIPTION: + The function sends 'Voice/Manage Calls Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceManageCalls( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 49; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceSetSupplementaryService + +DESCRIPTION: + The function sends 'Voice/Set Supplementary Service Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceSetSupplementaryService( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 51; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetCallWaiting + +DESCRIPTION: + The function sends 'Voice/Get Call Waiting Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCallWaiting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 52; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetCallBarring + +DESCRIPTION: + The function sends 'Voice/Get Call Barring Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCallBarring( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 53; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetCLIP + +DESCRIPTION: + The function sends 'Voice/Get CLIP Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCLIP( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 54; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetCLIR + +DESCRIPTION: + The function sends 'Voice/Get CLIR Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCLIR( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 55; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetCallForwarding + +DESCRIPTION: + The function sends 'Voice/Get Call Forwarding Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCallForwarding( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 56; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceSetCallBarringPassword + +DESCRIPTION: + The function sends 'Voice/Set Call Barring Password Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceSetCallBarringPassword( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 57; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceInitiateUSSD + +DESCRIPTION: + The function sends 'Voice/Initiate USSD Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceInitiateUSSD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 58; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceAnswerUSSD + +DESCRIPTION: + The function sends 'Voice/Answer USSD Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceAnswerUSSD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 59; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceCancelUSSD + +DESCRIPTION: + The function sends 'Voice/Cancel USSD Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceCancelUSSD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 60; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceSetConfig + +DESCRIPTION: + The function sends 'Voice/Set Config Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceSetConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 64; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetConfig + +DESCRIPTION: + The function sends 'Voice/Get Config Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 65; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceAsyncInitiateUSSD + +DESCRIPTION: + The function sends 'Voice/Async Initiate USSD Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceAsyncInitiateUSSD( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 67; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceBindSubscription + +DESCRIPTION: + The function sends 'Voice/Bind Subscription Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceBindSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 68; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceALSSetLineSwitching + +DESCRIPTION: + The function sends 'Voice/ALS Set Line Switching Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceALSSetLineSwitching( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 69; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceALSSelectLine + +DESCRIPTION: + The function sends 'Voice/ALS Select Line Request' (0x0046) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceALSSelectLine( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 70; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceAOCResetACM + +DESCRIPTION: + The function sends 'Voice/AOC Reset ACM Request' (0x0047) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceAOCResetACM( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 71; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceAOCSetACMMaximum + +DESCRIPTION: + The function sends 'Voice/AOC Set ACM Maximum Request' (0x0048) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceAOCSetACMMaximum( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 72; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceAOCGetCallMeterInfo + +DESCRIPTION: + The function sends 'Voice/AOC Get Call Meter Info Request' (0x0049) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceAOCGetCallMeterInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 73; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetCOLP + +DESCRIPTION: + The function sends 'Voice/Get COLP Request' (0x004B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCOLP( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 75; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetCOLR + +DESCRIPTION: + The function sends 'Voice/Get COLR Request' (0x004C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCOLR( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 76; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceGetCNAP + +DESCRIPTION: + The function sends 'Voice/Get CNAP Request' (0x004D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceGetCNAP( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 77; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceManageIPCalls + +DESCRIPTION: + The function sends 'Voice/Manage IP Calls Request' (0x004E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceManageIPCalls( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 78; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceALSGetLineSwitchingStatus + +DESCRIPTION: + The function sends 'Voice/ALS Get Line Switching Status Request' (0x004F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceALSGetLineSwitchingStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 79; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + VoiceALSGetSelectedLine + +DESCRIPTION: + The function sends 'Voice/ALS Get Selected Line Request' (0x0050) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG VoiceALSGetSelectedLine( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 9; + ULONG msgID = 80; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2Reset + +DESCRIPTION: + The function sends 'CAT2/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2Reset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 0; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2SetEventReport + +DESCRIPTION: + The function sends 'CAT2/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 1; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2GetSupportedMessages + +DESCRIPTION: + The function sends 'CAT2/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 30; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2GetSupportedFields + +DESCRIPTION: + The function sends 'CAT2/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 31; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2GetServiceState + +DESCRIPTION: + The function sends 'CAT2/Get Service State Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetServiceState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2SendTerminalResponse + +DESCRIPTION: + The function sends 'CAT2/Send Terminal Response Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SendTerminalResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2EnvelopeCommand + +DESCRIPTION: + The function sends 'CAT2/Envelope Command Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2EnvelopeCommand( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2GetEventReport + +DESCRIPTION: + The function sends 'CAT2/Get Event Report Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2SendDecodedTerminalResponse + +DESCRIPTION: + The function sends 'CAT2/Send Decoded Terminal Response Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SendDecodedTerminalResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2SendDecodedEnvelopeCommand + +DESCRIPTION: + The function sends 'CAT2/Send Decoded Envelope Command Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SendDecodedEnvelopeCommand( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2EventConfirmation + +DESCRIPTION: + The function sends 'CAT2/Event Confirmation Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2EventConfirmation( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 38; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2SCWSOpenChannel + +DESCRIPTION: + The function sends 'CAT2/SCWS Open Channel Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SCWSOpenChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 39; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2SCWSCloseChannel + +DESCRIPTION: + The function sends 'CAT2/SCWS Close Channel Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SCWSCloseChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 40; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2SCWSSendData + +DESCRIPTION: + The function sends 'CAT2/SCWS Send Data Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SCWSSendData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 41; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2SCWSDataAvailable + +DESCRIPTION: + The function sends 'CAT2/SCWS Data Available Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SCWSDataAvailable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 42; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2SCWSChannelStatus + +DESCRIPTION: + The function sends 'CAT2/SCWS Channel Status Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SCWSChannelStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 43; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2GetTerminalProfile + +DESCRIPTION: + The function sends 'CAT2/Get Terminal Profile Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetTerminalProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 44; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2SetConfiguration + +DESCRIPTION: + The function sends 'CAT2/Set Configuration Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2SetConfiguration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 45; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CAT2GetConfiguration + +DESCRIPTION: + The function sends 'CAT2/Get Configuration Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CAT2GetConfiguration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 10; + ULONG msgID = 46; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMReset + +DESCRIPTION: + The function sends 'UIM/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 0; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMGetSupportedMessages + +DESCRIPTION: + The function sends 'UIM/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 30; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMGetSupportedFields + +DESCRIPTION: + The function sends 'UIM/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 31; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMReadTransparent + +DESCRIPTION: + The function sends 'UIM/Read Transparent Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMReadTransparent( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMReadRecord + +DESCRIPTION: + The function sends 'UIM/Read Record Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMReadRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMWriteTransparent + +DESCRIPTION: + The function sends 'UIM/Write Transparent Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMWriteTransparent( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMWriteRecord + +DESCRIPTION: + The function sends 'UIM/Write Record Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMWriteRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMGetFileAttributes + +DESCRIPTION: + The function sends 'UIM/Get File Attributes Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetFileAttributes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMSetPINProtection + +DESCRIPTION: + The function sends 'UIM/Set PIN Protection Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSetPINProtection( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMVerifyPIN + +DESCRIPTION: + The function sends 'UIM/Verify PIN Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMVerifyPIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 38; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMUnblockPIN + +DESCRIPTION: + The function sends 'UIM/Unblock PIN Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMUnblockPIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 39; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMChangePIN + +DESCRIPTION: + The function sends 'UIM/Change PIN Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMChangePIN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 40; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMDepersonalization + +DESCRIPTION: + The function sends 'UIM/Depersonalization Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMDepersonalization( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 41; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMRefreshRegister + +DESCRIPTION: + The function sends 'UIM/Refresh Register Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMRefreshRegister( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 42; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMRefreshOK + +DESCRIPTION: + The function sends 'UIM/Refresh OK Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMRefreshOK( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 43; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMRefreshComplete + +DESCRIPTION: + The function sends 'UIM/Refresh Complete Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMRefreshComplete( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 44; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMGetLastRefreshEvent + +DESCRIPTION: + The function sends 'UIM/Get Last Refresh Event Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetLastRefreshEvent( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 45; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMEventRegistration + +DESCRIPTION: + The function sends 'UIM/Event Registration Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMEventRegistration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 46; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMGetCardStatus + +DESCRIPTION: + The function sends 'UIM/Get Card Status Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetCardStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 47; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMPowerDown + +DESCRIPTION: + The function sends 'UIM/Power Down Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMPowerDown( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 48; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMPowerUp + +DESCRIPTION: + The function sends 'UIM/Power Up Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMPowerUp( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 49; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMAuthenticate + +DESCRIPTION: + The function sends 'UIM/Authenticate Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMAuthenticate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 52; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMCloseSession + +DESCRIPTION: + The function sends 'UIM/Close Session Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMCloseSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 53; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMGetServiceStatus + +DESCRIPTION: + The function sends 'UIM/Get Service Status Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetServiceStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 54; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMSetServiceStatus + +DESCRIPTION: + The function sends 'UIM/Set Service Status Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSetServiceStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 55; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMChangeProvisioningSession + +DESCRIPTION: + The function sends 'UIM/Change Provisioning Session Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMChangeProvisioningSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 56; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMGetLabel + +DESCRIPTION: + The function sends 'UIM/Get Label Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetLabel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 57; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMGetConfiguration + +DESCRIPTION: + The function sends 'UIM/Get Configuration Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetConfiguration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 58; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMSendADPU + +DESCRIPTION: + The function sends 'UIM/Send ADPU Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSendADPU( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 59; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMSAPConnection + +DESCRIPTION: + The function sends 'UIM/SAP Connection Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSAPConnection( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 60; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMSAPRequest + +DESCRIPTION: + The function sends 'UIM/SAP Request Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSAPRequest( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 61; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMLogicalChannel + +DESCRIPTION: + The function sends 'UIM/Logical Channel Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMLogicalChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 63; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMSubscriptionOK + +DESCRIPTION: + The function sends 'UIM/Subscription OK Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSubscriptionOK( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 64; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMGetATR + +DESCRIPTION: + The function sends 'UIM/Get ATR Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMGetATR( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 65; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMOpenLogicalChannel + +DESCRIPTION: + The function sends 'UIM/Open Logical Channel Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMOpenLogicalChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 66; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMRefreshRegisterAll + +DESCRIPTION: + The function sends 'UIM/Refresh Register All Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMRefreshRegisterAll( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 68; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + UIMSetFileStatus + +DESCRIPTION: + The function sends 'UIM/Set File Status Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG UIMSetFileStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 11; + ULONG msgID = 69; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMSetIndicationRegistrationState + +DESCRIPTION: + The function sends 'PBM/Set Indication Registration State Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMSetIndicationRegistrationState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 1; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMGetCapabilities + +DESCRIPTION: + The function sends 'PBM/Get Capabilities Request' (0x0002) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetCapabilities( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 2; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMGetAllCapabilities + +DESCRIPTION: + The function sends 'PBM/Get All Capabilities Request' (0x0003) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetAllCapabilities( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 3; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMReadRecords + +DESCRIPTION: + The function sends 'PBM/Read Records Request' (0x0004) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMReadRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 4; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMWriteRecord + +DESCRIPTION: + The function sends 'PBM/Write Record Request' (0x0005) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMWriteRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 5; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMDeleteRecord + +DESCRIPTION: + The function sends 'PBM/Delete Record Request' (0x0006) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMDeleteRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 6; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMDeleteAllRecords + +DESCRIPTION: + The function sends 'PBM/Delete All Records Request' (0x0007) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMDeleteAllRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 7; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMSearchRecords + +DESCRIPTION: + The function sends 'PBM/Search Records Request' (0x0008) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMSearchRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 8; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMGetEmergencyList + +DESCRIPTION: + The function sends 'PBM/Get Emergency List Request' (0x000E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetEmergencyList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 14; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMGetAllGroups + +DESCRIPTION: + The function sends 'PBM/Get All Groups Request' (0x000F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetAllGroups( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 15; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMSetGroupInfo + +DESCRIPTION: + The function sends 'PBM/Set Group Info Request' (0x0010) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMSetGroupInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 16; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMGetState + +DESCRIPTION: + The function sends 'PBM/Get State Request' (0x0011) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 17; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMReadAllHiddenRecords + +DESCRIPTION: + The function sends 'PBM/Read All Hidden Records Request' (0x0012) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMReadAllHiddenRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 18; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMGetNextEmptyRecordID + +DESCRIPTION: + The function sends 'PBM/Get Next Empty Record ID Request' (0x0014) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetNextEmptyRecordID( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 20; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMGetNextRecordID + +DESCRIPTION: + The function sends 'PBM/Get Next Record ID Request' (0x0015) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetNextRecordID( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 21; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMGetAASList + +DESCRIPTION: + The function sends 'PBM/Get AAS List Request' (0x0016) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetAASList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 22; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMSetAAS + +DESCRIPTION: + The function sends 'PBM/Set AAS Request' (0x0017) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMSetAAS( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 23; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMBindSubscription + +DESCRIPTION: + The function sends 'PBM/Bind Subscription Request' (0x001A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMBindSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 26; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMGetSubscription + +DESCRIPTION: + The function sends 'PBM/Get Subscription Request' (0x001B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMGetSubscription( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 27; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMSetCapabilitiesReadOperation + +DESCRIPTION: + The function sends 'PBM/Set Capabilities Read Operation Request' (0x001C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMSetCapabilitiesReadOperation( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 28; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMExtendedReadRecords + +DESCRIPTION: + The function sends 'PBM/Extended Read Records Request' (0x001D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMExtendedReadRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 29; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMExtendedWriteRecord + +DESCRIPTION: + The function sends 'PBM/Extended Write Record Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMExtendedWriteRecord( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 30; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMExtendedSearchRecords + +DESCRIPTION: + The function sends 'PBM/Extended Search Records Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMExtendedSearchRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 31; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMExtendedReadAllHiddenRecords + +DESCRIPTION: + The function sends 'PBM/Extended Read All Hidden Records Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMExtendedReadAllHiddenRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PBMReadUndecodedRecords + +DESCRIPTION: + The function sends 'PBM/Read Undecoded Records Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PBMReadUndecodedRecords( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 12; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetSupportedMessages + +DESCRIPTION: + The function sends 'LOC/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 30; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetSupportedFields + +DESCRIPTION: + The function sends 'LOC/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 31; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCClientRevision + +DESCRIPTION: + The function sends 'LOC/Client Revision Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCClientRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCRegisterEvents + +DESCRIPTION: + The function sends 'LOC/Register Events Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCRegisterEvents( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCStart + +DESCRIPTION: + The function sends 'LOC/Start Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCStart( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCStop + +DESCRIPTION: + The function sends 'LOC/Stop Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCStop( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetServiceRevision + +DESCRIPTION: + The function sends 'LOC/Get Service Revision Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetServiceRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 50; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetFixCriteria + +DESCRIPTION: + The function sends 'LOC/Get Fix Criteria Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetFixCriteria( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 51; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCProvideNIUserResponse + +DESCRIPTION: + The function sends 'LOC/Provide NI User Response Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCProvideNIUserResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 52; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectPredictedOrbitsData + +DESCRIPTION: + The function sends 'LOC/Inject Predicted Orbits Data Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectPredictedOrbitsData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 53; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetPredictedOrbitsDataSource + +DESCRIPTION: + The function sends 'LOC/Get Predicted Orbits Data Source Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetPredictedOrbitsDataSource( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 54; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetPredictedOrbitsDataValidity + +DESCRIPTION: + The function sends 'LOC/Get Predicted Orbits Data Validity Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetPredictedOrbitsDataValidity( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 55; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectUTCTime + +DESCRIPTION: + The function sends 'LOC/Inject UTC Time Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectUTCTime( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 56; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectPosition + +DESCRIPTION: + The function sends 'LOC/Inject Position Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectPosition( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 57; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetEngineLock + +DESCRIPTION: + The function sends 'LOC/Set Engine Lock Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetEngineLock( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 58; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetEngineLock + +DESCRIPTION: + The function sends 'LOC/Get Engine Lock Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetEngineLock( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 59; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetSBASConfig + +DESCRIPTION: + The function sends 'LOC/Set SBAS Config Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetSBASConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 60; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetSBASConfig + +DESCRIPTION: + The function sends 'LOC/Get SBAS Config Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSBASConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 61; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetNMEATypes + +DESCRIPTION: + The function sends 'LOC/Set NMEA Types Request' (0x003E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetNMEATypes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 62; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetNMEATypes + +DESCRIPTION: + The function sends 'LOC/Get NMEA Types Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetNMEATypes( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 63; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetLowPowerMode + +DESCRIPTION: + The function sends 'LOC/Set Low Power Mode Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetLowPowerMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 64; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetLowPowerMode + +DESCRIPTION: + The function sends 'LOC/Get Low Power Mode Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetLowPowerMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 65; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetLocationServer + +DESCRIPTION: + The function sends 'LOC/Set Location Server Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetLocationServer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 66; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetLocationServer + +DESCRIPTION: + The function sends 'LOC/Get Location Server Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetLocationServer( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 67; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCDeleteAssistData + +DESCRIPTION: + The function sends 'LOC/Delete Assist Data Request' (0x0044) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCDeleteAssistData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 68; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetXTRATSessionControl + +DESCRIPTION: + The function sends 'LOC/Set XTRA-T Session Control Request' (0x0045) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetXTRATSessionControl( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 69; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOC + +DESCRIPTION: + The function sends 'LOC' (0x0046) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOC( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 70; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectWiFiPosition + +DESCRIPTION: + The function sends 'LOC/Inject Wi-Fi Position Request' (0x0047) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectWiFiPosition( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 71; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCProvideWiFiStatus + +DESCRIPTION: + The function sends 'LOC/Provide Wi-Fi Status Request' (0x0048) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCProvideWiFiStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 72; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetRegisteredEvents + +DESCRIPTION: + The function sends 'LOC/Get Registered Events Request' (0x0049) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetRegisteredEvents( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 73; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetOperationMode + +DESCRIPTION: + The function sends 'LOC/Set Operation Mode Request' (0x004A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetOperationMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 74; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetOperationMode + +DESCRIPTION: + The function sends 'LOC/Get Operation Mode Request' (0x004B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetOperationMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 75; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetSPIStatus + +DESCRIPTION: + The function sends 'LOC/Set SPI Status Request' (0x004C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetSPIStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 76; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectSensorData + +DESCRIPTION: + The function sends 'LOC/Inject Sensor Data Request' (0x004D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectSensorData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 77; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectTimeSyncData + +DESCRIPTION: + The function sends 'LOC/Inject Time Sync Data Request' (0x004E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectTimeSyncData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 78; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetCradleMountConfig + +DESCRIPTION: + The function sends 'LOC/Set Cradle Mount Config Request' (0x004F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetCradleMountConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 79; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetCradleMountConfig + +DESCRIPTION: + The function sends 'LOC/Get Cradle Mount Config Request' (0x0050) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetCradleMountConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 80; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetExternalPowerConfig + +DESCRIPTION: + The function sends 'LOC/Set External Power Config Request' (0x0051) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetExternalPowerConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 81; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetExternalPowerConfig + +DESCRIPTION: + The function sends 'LOC/Get External Power Config Request' (0x0052) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetExternalPowerConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 82; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCProvideConnectionStatus + +DESCRIPTION: + The function sends 'LOC/Provide Connection Status Request' (0x0053) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCProvideConnectionStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 83; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetProtocolConfigParameters + +DESCRIPTION: + The function sends 'LOC/Set Protocol Config Parameters Request' (0x0054) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetProtocolConfigParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 84; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetProtocolConfigParameters + +DESCRIPTION: + The function sends 'LOC/Get Protocol Config Parameters Request' (0x0055) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetProtocolConfigParameters( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 85; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetSensorControlConfig + +DESCRIPTION: + The function sends 'LOC/Set Sensor Control Config Request' (0x0056) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetSensorControlConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 86; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetSensorControlConfig + +DESCRIPTION: + The function sends 'LOC/Get Sensor Control Config Request' (0x0057) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSensorControlConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 87; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetSensorProperties + +DESCRIPTION: + The function sends 'LOC/Set Sensor Properties Request' (0x0058) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetSensorProperties( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 88; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetSensorProperties + +DESCRIPTION: + The function sends 'LOC/Get Sensor Properties Request' (0x0059) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSensorProperties( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 89; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetSensorPerformanceConfig + +DESCRIPTION: + The function sends 'LOC/Set Sensor Performance Config Request' (0x005A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetSensorPerformanceConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 90; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetSensorPerformanceConfig + +DESCRIPTION: + The function sends 'LOC/Get Sensor Performance Config Request' (0x005B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetSensorPerformanceConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 91; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectSUPLCertificate + +DESCRIPTION: + The function sends 'LOC/Inject SUPL Certificate Request' (0x005C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectSUPLCertificate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 92; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCDeleteSUPLCertificate + +DESCRIPTION: + The function sends 'LOC/Delete SUPL Certificate Request' (0x005D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCDeleteSUPLCertificate( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 93; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCSetPositionEngineConfig + +DESCRIPTION: + The function sends 'LOC/Set Position Engine Config Request' (0x005E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCSetPositionEngineConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 94; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetPositionEngineConfig + +DESCRIPTION: + The function sends 'LOC/Get Position Engine Config Request' (0x005F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetPositionEngineConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 95; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCAddCircularGeofence + +DESCRIPTION: + The function sends 'LOC/Add Circular Geofence Request' (0x0063) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCAddCircularGeofence( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 99; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCDeleteGeofence + +DESCRIPTION: + The function sends 'LOC/Delete Geofence Request' (0x0064) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCDeleteGeofence( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 100; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCQueryGeofence + +DESCRIPTION: + The function sends 'LOC/Query Geofence Request' (0x0065) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCQueryGeofence( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 101; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCEditGeofence + +DESCRIPTION: + The function sends 'LOC/Edit Geofence Request' (0x0066) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCEditGeofence( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 102; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetBestAvailablePosition + +DESCRIPTION: + The function sends 'LOC/Get Best Available Position Request' (0x0067) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetBestAvailablePosition( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 103; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectMotionData + +DESCRIPTION: + The function sends 'LOC/Inject Motion Data Request' (0x0068) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectMotionData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 104; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCGetNIGeofenceIDList + +DESCRIPTION: + The function sends 'LOC/Get NI Geofence ID List Request' (0x0069) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCGetNIGeofenceIDList( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 105; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectGSMCellInfo + +DESCRIPTION: + The function sends 'LOC/Inject GSM Cell Info Request' (0x006A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectGSMCellInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 106; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectNetworkInitiatedMessage + +DESCRIPTION: + The function sends 'LOC/Inject Network Initiated Message Request' (0x006B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectNetworkInitiatedMessage( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 107; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCNotifyWWANOutOfService + +DESCRIPTION: + The function sends 'LOC/Notify WWAN Out Of Service Request' (0x006C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCNotifyWWANOutOfService( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 108; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectPedometerData + +DESCRIPTION: + The function sends 'LOC/Inject Pedometer Data Request' (0x006F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectPedometerData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 111; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectWCDMACellInfo + +DESCRIPTION: + The function sends 'LOC/Inject WCDMA Cell Info Request' (0x0070) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectWCDMACellInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 112; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectTDSCDMACellInfo + +DESCRIPTION: + The function sends 'LOC/Inject TD-SCDMA Cell Info Request' (0x0071) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectTDSCDMACellInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 113; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + LOCInjectSubscriberID + +DESCRIPTION: + The function sends 'LOC/Inject Subscriber ID Request' (0x0072) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG LOCInjectSubscriberID( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 16; + ULONG msgID = 114; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDAGetSupportedMessages + +DESCRIPTION: + The function sends 'WDA/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 30; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDAGetSupportedFields + +DESCRIPTION: + The function sends 'WDA/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 31; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDASetDataFormat + +DESCRIPTION: + The function sends 'WDA/Set Data Format Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDASetDataFormat( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDAGetDataFormat + +DESCRIPTION: + The function sends 'WDA/Get Data Format Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetDataFormat( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDAEnablePacketFilter + +DESCRIPTION: + The function sends 'WDA/Enable Packet Filter Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAEnablePacketFilter( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDADisablePacketFilter + +DESCRIPTION: + The function sends 'WDA/Disable Packet Filter Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDADisablePacketFilter( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDAGetPacketFilterState + +DESCRIPTION: + The function sends 'WDA/Get Packet Filter State Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetPacketFilterState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDAAddPacketFilterRule + +DESCRIPTION: + The function sends 'WDA/Add Packet Filter Rule Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAAddPacketFilterRule( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDADeletePacketFilterRule + +DESCRIPTION: + The function sends 'WDA/Delete Packet Filter Rule Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDADeletePacketFilterRule( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 38; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDAGetPacketFilterRuleHandles + +DESCRIPTION: + The function sends 'WDA/Get Packet Filter Rule Handles Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetPacketFilterRuleHandles( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 39; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDAGetPacketFilterRule + +DESCRIPTION: + The function sends 'WDA/Get Packet Filter Rule Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetPacketFilterRule( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 40; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDASetLoopbackState + +DESCRIPTION: + The function sends 'WDA/Set Loopback State Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDASetLoopbackState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 41; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + WDAGetLoopbackState + +DESCRIPTION: + The function sends 'WDA/Get Loopback State Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG WDAGetLoopbackState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 26; + ULONG msgID = 42; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPEnable + +DESCRIPTION: + The function sends 'QCMAP/Enable Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPEnable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPDisable + +DESCRIPTION: + The function sends 'QCMAP/Disable Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPDisable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPBringUpWWAN + +DESCRIPTION: + The function sends 'QCMAP/Bring Up WWAN Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPBringUpWWAN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPTearDownWWAN + +DESCRIPTION: + The function sends 'QCMAP/Tear Down WWAN Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPTearDownWWAN( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetWWANStatus + +DESCRIPTION: + The function sends 'QCMAP/Get WWAN Status Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetWWANStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetIPSecVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Get IPSec VPN Passthrough Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetIPSecVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPSetIPSecVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Set IPSec VPN Passthrough Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPSetIPSecVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 38; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetPPTPVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Get PPTP VPN Passthrough Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetPPTPVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 39; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPSetPPTPVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Set PPTP VPN Passthrough Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPSetPPTPVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 40; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetL2TPVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Get L2TP VPN Passthrough Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetL2TPVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 41; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPSetL2TPVPNPassthrough + +DESCRIPTION: + The function sends 'QCMAP/Set L2TP VPN Passthrough Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPSetL2TPVPNPassthrough( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 42; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetDynamicNATEntryTimeout + +DESCRIPTION: + The function sends 'QCMAP/Get Dynamic NAT Entry Timeout Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetDynamicNATEntryTimeout( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 43; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPSetDynamicNATEntryTimeout + +DESCRIPTION: + The function sends 'QCMAP/Set Dynamic NAT Entry Timeout Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPSetDynamicNATEntryTimeout( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 44; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPAddStaticNATEntry + +DESCRIPTION: + The function sends 'QCMAP/Add Static NAT Entry Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPAddStaticNATEntry( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 45; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPDeleteStaticNATEntry + +DESCRIPTION: + The function sends 'QCMAP/Delete Static NAT Entry Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPDeleteStaticNATEntry( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 46; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetStaticNATEntries + +DESCRIPTION: + The function sends 'QCMAP/Get Static NAT Entries Request' (0x002F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetStaticNATEntries( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 47; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPSetDMZ + +DESCRIPTION: + The function sends 'QCMAP/Set DMZ Request' (0x0030) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPSetDMZ( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 48; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPDeleteDMZ + +DESCRIPTION: + The function sends 'QCMAP/Delete DMZ Request' (0x0031) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPDeleteDMZ( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 49; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetDMZ + +DESCRIPTION: + The function sends 'QCMAP/Get DMZ Request' (0x0032) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetDMZ( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 50; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetWWANConfig + +DESCRIPTION: + The function sends 'QCMAP/Get WWAN Config Request' (0x0033) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetWWANConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 51; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPEnableFirewallSetting + +DESCRIPTION: + The function sends 'QCMAP/Enable Firewall Setting Request' (0x0034) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPEnableFirewallSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 52; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetFirewallSetting + +DESCRIPTION: + The function sends 'QCMAP/Get Firewall Setting Request' (0x0035) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetFirewallSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 53; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPDisableFirewallSetting + +DESCRIPTION: + The function sends 'QCMAP/Disable Firewall Setting Request' (0x0036) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPDisableFirewallSetting( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 54; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPAddFirewallConfig + +DESCRIPTION: + The function sends 'QCMAP/Add Firewall Config Request' (0x0037) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPAddFirewallConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 55; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetFirewallConfig + +DESCRIPTION: + The function sends 'QCMAP/Get Firewall Config Request' (0x0038) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetFirewallConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 56; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPDeleteFirewallConfig + +DESCRIPTION: + The function sends 'QCMAP/Delete Firewall Config Request' (0x0039) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPDeleteFirewallConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 57; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPWWANStatusIndicationRegister + +DESCRIPTION: + The function sends 'QCMAP/WWAN Status Indication Register Request' (0x003A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPWWANStatusIndicationRegister( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 58; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPStationModeEnable + +DESCRIPTION: + The function sends 'QCMAP/Station Mode Enable Request' (0x003B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPStationModeEnable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 59; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPStationModeDisable + +DESCRIPTION: + The function sends 'QCMAP/Station Mode Disable Request' (0x003C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPStationModeDisable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 60; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetStationMode + +DESCRIPTION: + The function sends 'QCMAP/Get Station Mode Request' (0x003D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetStationMode( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 61; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPAddExtendedFirewallConfig + +DESCRIPTION: + The function sends 'QCMAP/Add Extended Firewall Config Request' (0x003F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPAddExtendedFirewallConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 63; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetExtendedFirewallConfig + +DESCRIPTION: + The function sends 'QCMAP/Get Extended Firewall Config Request' (0x0040) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetExtendedFirewallConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 64; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetFirewallHandles + +DESCRIPTION: + The function sends 'QCMAP/Get Firewall Handles Request' (0x0041) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetFirewallHandles( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 65; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPChangeNATType + +DESCRIPTION: + The function sends 'QCMAP/Change NAT Type Request' (0x0042) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPChangeNATType( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 66; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + QCMAPGetNATType + +DESCRIPTION: + The function sends 'QCMAP/Get NAT Type Request' (0x0043) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG QCMAPGetNATType( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 30; + ULONG msgID = 67; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCReset + +DESCRIPTION: + The function sends 'PDC/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 0; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCRegisterForIndications + +DESCRIPTION: + The function sends 'PDC/Register For Indications Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCRegisterForIndications( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCGetSelectedConfig + +DESCRIPTION: + The function sends 'PDC/Get Selected Config Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCGetSelectedConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCSetSelectedConfig + +DESCRIPTION: + The function sends 'PDC/Set Selected Config Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCSetSelectedConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCListConfigs + +DESCRIPTION: + The function sends 'PDC/List Configs Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCListConfigs( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCDeleteConfig + +DESCRIPTION: + The function sends 'PDC/Delete Config Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCDeleteConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCLoadConfig + +DESCRIPTION: + The function sends 'PDC/Load Config Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCLoadConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 38; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCActivateConfig + +DESCRIPTION: + The function sends 'PDC/Activate Config Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCActivateConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 39; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCGetConfigInfo + +DESCRIPTION: + The function sends 'PDC/Get Config Info Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCGetConfigInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 40; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCGetConfigLimits + +DESCRIPTION: + The function sends 'PDC/Get Config Limits Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCGetConfigLimits( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 41; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCGetDefaultConfigInfo + +DESCRIPTION: + The function sends 'PDC/Get Default Config Info Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCGetDefaultConfigInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 42; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + PDCDeactivateConfig + +DESCRIPTION: + The function sends 'PDC/Deactivate Config Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG PDCDeactivateConfig( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 36; + ULONG msgID = 43; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + RFRPESetRFMScenario + +DESCRIPTION: + The function sends 'RFRPE/Set RFM Scenario Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RFRPESetRFMScenario( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 41; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + RFRPEGetRFMScenario + +DESCRIPTION: + The function sends 'RFRPE/Get RFM Scenario Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RFRPEGetRFMScenario( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 41; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + RFRPEGetProvisionedTableRevision + +DESCRIPTION: + The function sends 'RFRPE/Get Provisioned Table Revision Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RFRPEGetProvisionedTableRevision( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 41; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATReset + +DESCRIPTION: + The function sends 'CAT/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 0; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATSetEventReport + +DESCRIPTION: + The function sends 'CAT/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 1; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATGetSupportedMessages + +DESCRIPTION: + The function sends 'CAT/Get Supported Messages Request' (0x001E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetSupportedMessages( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 30; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATGetSupportedFields + +DESCRIPTION: + The function sends 'CAT/Get Supported Fields Request' (0x001F) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetSupportedFields( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 31; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATGetServiceState + +DESCRIPTION: + The function sends 'CAT/Get Service State Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetServiceState( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATSendTerminalResponse + +DESCRIPTION: + The function sends 'CAT/Send Terminal Response Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSendTerminalResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATEnvelopeCommand + +DESCRIPTION: + The function sends 'CAT/Envelope Command Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATEnvelopeCommand( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATGetEventReport + +DESCRIPTION: + The function sends 'CAT/Get Event Report Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATSendDecodedTerminalResponse + +DESCRIPTION: + The function sends 'CAT/Send Decoded Terminal Response Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSendDecodedTerminalResponse( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATSendDecodedEnvelopeCommand + +DESCRIPTION: + The function sends 'CAT/Send Decoded Envelope Command Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSendDecodedEnvelopeCommand( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATEventConfirmation + +DESCRIPTION: + The function sends 'CAT/Event Confirmation Request' (0x0026) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATEventConfirmation( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 38; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATSCWSOpenChannel + +DESCRIPTION: + The function sends 'CAT/SCWS Open Channel Request' (0x0027) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSCWSOpenChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 39; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATSCWSCloseChannel + +DESCRIPTION: + The function sends 'CAT/SCWS Close Channel Request' (0x0028) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSCWSCloseChannel( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 40; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATSCWSSendData + +DESCRIPTION: + The function sends 'CAT/SCWS Send Data Request' (0x0029) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSCWSSendData( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 41; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATSCWSDataAvailable + +DESCRIPTION: + The function sends 'CAT/SCWS Data Available Request' (0x002A) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSCWSDataAvailable( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 42; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATSCWSChannelStatus + +DESCRIPTION: + The function sends 'CAT/SCWS Channel Status Request' (0x002B) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSCWSChannelStatus( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 43; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATGetTerminalProfile + +DESCRIPTION: + The function sends 'CAT/Get Terminal Profile Request' (0x002C) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetTerminalProfile( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 44; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATSetConfiguration + +DESCRIPTION: + The function sends 'CAT/Set Configuration Request' (0x002D) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATSetConfiguration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 45; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + CATGetConfiguration + +DESCRIPTION: + The function sends 'CAT/Get Configuration Request' (0x002E) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG CATGetConfiguration( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 224; + ULONG msgID = 46; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + RMSReset + +DESCRIPTION: + The function sends 'RMS/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RMSReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 225; + ULONG msgID = 0; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + RMSGetSMSWake + +DESCRIPTION: + The function sends 'RMS/Get SMS Wake Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RMSGetSMSWake( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 225; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + RMSSetSMSWake + +DESCRIPTION: + The function sends 'RMS/Set SMS Wake Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG RMSSetSMSWake( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 225; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + OMAReset + +DESCRIPTION: + The function sends 'OMA/Reset Request' (0x0000) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMAReset( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 226; + ULONG msgID = 0; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + OMASetEventReport + +DESCRIPTION: + The function sends 'OMA/Set Event Report Request' (0x0001) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMASetEventReport( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 226; + ULONG msgID = 1; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + OMAStartSession + +DESCRIPTION: + The function sends 'OMA/Start Session Request' (0x0020) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMAStartSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 226; + ULONG msgID = 32; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + OMACancelSession + +DESCRIPTION: + The function sends 'OMA/Cancel Session Request' (0x0021) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMACancelSession( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 226; + ULONG msgID = 33; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + OMAGetSessionInfo + +DESCRIPTION: + The function sends 'OMA/Get Session Info Request' (0x0022) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMAGetSessionInfo( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 226; + ULONG msgID = 34; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + OMASendSelection + +DESCRIPTION: + The function sends 'OMA/Send Selection Request' (0x0023) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMASendSelection( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 226; + ULONG msgID = 35; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + OMAGetFeatures + +DESCRIPTION: + The function sends 'OMA/Get Features Request' (0x0024) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Reserved for future use (set to 0) + pIn [ I ] - Reserved for future use (set to 0) + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMAGetFeatures( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 226; + ULONG msgID = 36; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + +/*=========================================================================== +METHOD: + OMASetFeatures + +DESCRIPTION: + The function sends 'OMA/Set Features Request' (0x0025) + and returns the response + +PARAMETERS: + handle [ I ] - Gobi interface handle + to [ I ] - Timeout for transaction (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + ULONG - Return code +===========================================================================*/ +ULONG OMASetFeatures( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + cGobiConnectionMgmt * pAPI = gDLL.GetAPI( handle ); + if (pAPI == 0) + { + return (ULONG)eGOBI_ERR_INTERNAL; + } + + ULONG svcID = 226; + ULONG msgID = 37; + return pAPI->Send( svcID, msgID, to, inLen, pIn, pOutLen, pOut ); +} + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMCallback.cpp b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMCallback.cpp new file mode 100644 index 0000000..b3aa866 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMCallback.cpp @@ -0,0 +1,308 @@ +/*=========================================================================== +FILE: + GobiCMCallback.cpp + +DESCRIPTION: + Contains the implementation of each Gobi CM callback function. + +Copyright (c) 2013, 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 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 "SampleCM.h" +#include "GobiCMCallback.h" +#include + +/*=========================================================================*/ +// Free Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + WDSEventReportCallback (Free Method) + +DESCRIPTION: + Function called by WDS event report callback + +PARAMETERS: + svcID [ I ] - QMI service ID + msgID [ I ] - QMI message ID + handle [ I ] - Handle to Gobi API connection + outLen [ I ] - Length of indication buffer + pOut [ I ] - Indication buffer + +RETURN VALUE: + None +===========================================================================*/ +void WDSEventReportCallback( + ULONG svcID, + ULONG msgID, + GOBIHANDLE /* handle */, + ULONG outLen, + const BYTE * pOut ) +{ + if (gpCM == 0 || svcID != 1 || msgID != 1) + { + return; + } + + std::map tlvs = GetTLVs( &pOut[0], outLen ); + std::map ::const_iterator pIter = tlvs.find( 0x17 ); + if (pIter != tlvs.end()) + { + const sQMIRawContentHeader * pTmp = pIter->second; + if (pTmp->mLength >= sizeof (sWDSEventReportIndication_DataBearerTechnology)) + { + pTmp++; + const sWDSEventReportIndication_DataBearerTechnology * pDBT = + (const sWDSEventReportIndication_DataBearerTechnology *)pTmp; + + gpCM->OnDataBearerCBNotification( pDBT->mDataBearerTechnology ); + } + } + + ULONGLONG txTotalBytes = ULLONG_MAX; + ULONGLONG rxTotalBytes = ULLONG_MAX; + + pIter = tlvs.find( 0x19 ); + if (pIter != tlvs.end()) + { + const sQMIRawContentHeader * pTmp = pIter->second; + if (pTmp->mLength >= sizeof (sWDSEventReportIndication_TXBytes)) + { + pTmp++; + const sWDSEventReportIndication_TXBytes * pTX = + (const sWDSEventReportIndication_TXBytes *)pTmp; + + txTotalBytes = pTX->mTXByteTotal; + } + } + + pIter = tlvs.find( 0x1A ); + if (pIter != tlvs.end()) + { + const sQMIRawContentHeader * pTmp = pIter->second; + if (pTmp->mLength >= sizeof (sWDSEventReportIndication_RXBytes)) + { + pTmp++; + const sWDSEventReportIndication_RXBytes * pRX = + (const sWDSEventReportIndication_RXBytes *)pTmp; + + rxTotalBytes = pRX->mRXByteTotal; + } + } + + if (txTotalBytes != ULLONG_MAX || rxTotalBytes != ULLONG_MAX) + { + gpCM->OnByteTotalsNotification( rxTotalBytes, txTotalBytes ); + } +} + +/*=========================================================================== +METHOD: + WDSSessionStateCallback (Free Method) + +DESCRIPTION: + Function called by WDS packet service status callback + +PARAMETERS: + svcID [ I ] - QMI service ID + msgID [ I ] - QMI message ID + handle [ I ] - Handle to Gobi API connection + outLen [ I ] - Length of indication buffer + pOut [ I ] - Indication buffer + +RETURN VALUE: + None +===========================================================================*/ +void WDSSessionStateCallback( + ULONG svcID, + ULONG msgID, + GOBIHANDLE /* handle */, + ULONG outLen, + const BYTE * pOut ) +{ + if (gpCM == 0 || svcID != 1 || msgID != 34) + { + return; + } + + ULONG state = ULONG_MAX; + + std::map tlvs = GetTLVs( &pOut[0], outLen ); + std::map ::const_iterator pIter = tlvs.find( 0x01 ); + if (pIter != tlvs.end()) + { + const sQMIRawContentHeader * pTmp = pIter->second; + if (pTmp->mLength >= sizeof (sWDSPacketServiceStatusReportIndication_Status)) + { + pTmp++; + const sWDSPacketServiceStatusReportIndication_Status * pState = + (const sWDSPacketServiceStatusReportIndication_Status *)pTmp; + + state = pState->mConnectionStatus; + } + } + + if (state != ULONG_MAX) + { + gpCM->OnSessionStateCBNotification( state ); + } +} + +/*=========================================================================== +METHOD: + NASEventReportCallback (Free Method) + +DESCRIPTION: + Function called by NAS event report callback + +PARAMETERS: + svcID [ I ] - QMI service ID + msgID [ I ] - QMI message ID + handle [ I ] - Handle to Gobi API connection + outLen [ I ] - Length of indication buffer + pOut [ I ] - Indication buffer + +RETURN VALUE: + None +===========================================================================*/ +void NASEventReportCallback( + ULONG svcID, + ULONG msgID, + GOBIHANDLE /* handle */, + ULONG outLen, + const BYTE * pOut ) +{ + if (gpCM == 0 || svcID != 3 || msgID != 2) + { + return; + } + + std::map tlvs = GetTLVs( &pOut[0], outLen ); + std::map ::const_iterator pIter = tlvs.find( 0x10 ); + if (pIter == tlvs.end()) + { + return; + } + + const sQMIRawContentHeader * pTmp = pIter->second; + if (pTmp->mLength >= sizeof (sNASEventReportIndication_SignalStrength)) + { + pTmp++; + const sNASEventReportIndication_SignalStrength * pSS = + (const sNASEventReportIndication_SignalStrength *)pTmp; + + gpCM->OnSignalStrengthCBNotificaion( pSS->mSignalStrengthdBm, + pSS->mRadioInterface ); + } +} + +/*=========================================================================== +METHOD: + NASServingSystemCallback (Free Method) + +DESCRIPTION: + Function called by NAS serving system callback + +PARAMETERS: + svcID [ I ] - QMI service ID + msgID [ I ] - QMI message ID + handle [ I ] - Handle to Gobi API connection + outLen [ I ] - Length of indication buffer + pOut [ I ] - Indication buffer + +RETURN VALUE: + None +===========================================================================*/ +void NASServingSystemCallback( + ULONG svcID, + ULONG msgID, + GOBIHANDLE /* handle */, + ULONG outLen, + const BYTE * pOut ) +{ + if (gpCM == 0 || svcID != 3 || msgID != 36) + { + return; + } + + std::map tlvs = GetTLVs( &pOut[0], outLen ); + std::map ::const_iterator pIter = tlvs.find( 0x10 ); + if (pIter != tlvs.end()) + { + const sQMIRawContentHeader * pTmp = pIter->second; + if (pTmp->mLength >= sizeof (sNASServingSystemIndication_RoamingIndicator)) + { + pTmp++; + const sNASServingSystemIndication_RoamingIndicator * pRI = + (const sNASServingSystemIndication_RoamingIndicator *)pTmp; + + BYTE roam = pRI->mRoamingIndicator; + if (roam == 0xFF) + { + gpCM->SetRoam( "Unknown" ); + } + else + { + std::ostringstream roamStr; + roamStr << roam; + gpCM->SetRoam( roamStr.str() ); + } + } + } + + pIter = tlvs.find( 0x11 ); + if (pIter != tlvs.end()) + { + const sQMIRawContentHeader * pTmp = pIter->second; + ULONG tlvLen = (ULONG)pTmp->mLength; + ULONG dsLen = (ULONG)sizeof( sNASServingSystemIndication_DataServices ); + if (tlvLen < dsLen) + { + return; + } + + pTmp++; + const sNASServingSystemIndication_DataServices * pDS = + (const sNASServingSystemIndication_DataServices *)pTmp; + + ULONG dcCount = (ULONG)pDS->mNumberOfDataCapabilities; + ULONG dcSz = (ULONG)sizeof( eQMINASDataServiceCapabilities2 ); + dsLen += dcCount * dcSz; + if (tlvLen < dsLen) + { + return; + } + + pDS++; + gpCM->OnDataCapsNotification( dcCount, + (eQMINASDataServiceCapabilities2 *)pDS ); + } +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMCallback.h b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMCallback.h new file mode 100644 index 0000000..6ebb99c --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMCallback.h @@ -0,0 +1,82 @@ +/*=========================================================================== +FILE: + GobiCMCallback.h + +DESCRIPTION: + Contains the declaration of each Gobi CM callback function, + structures needed for these callbacks and message IDs for + each callback + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "GobiCMDLL.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +// WDS event report callback +void WDSEventReportCallback( + ULONG svcID, + ULONG msgID, + GOBIHANDLE handle, + ULONG outLen, + const BYTE * pOut ); + +// WDS packet service status callback +void WDSSessionStateCallback( + ULONG svcID, + ULONG msgID, + GOBIHANDLE handle, + ULONG outLen, + const BYTE * pOut ); + +// NAS event report callback +void NASEventReportCallback( + ULONG svcID, + ULONG msgID, + GOBIHANDLE handle, + ULONG outLen, + const BYTE * pOut ); + +// NAS serving system callback +void NASServingSystemCallback( + ULONG svcID, + ULONG msgID, + GOBIHANDLE handle, + ULONG outLen, + const BYTE * pOut ); + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMDLL.cpp b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMDLL.cpp new file mode 100644 index 0000000..2295b49 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMDLL.cpp @@ -0,0 +1,1238 @@ +/*=========================================================================== +FILE: + GobiCMDLL.cpp + +DESCRIPTION: + Simple class to load and interface to the Gobi CM DLL + +PUBLIC CLASSES AND METHODS: + cGobiCMDLL + This class loads the Gobi CM DLL and then interfaces to it + +Copyright (c) 2013, 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 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 "GobiCMDLL.h" +#include "GobiConnectionMgmtAPIStructs.h" +#include "Gobi3000Translation.h" +#include + +/*=========================================================================*/ +// cGobiCMDLL Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + GetString (Internal Method) + +DESCRIPTION: + Call a Gobi CM API function that returns a string + +PARAMETERS: + mpFnString [ I ] - Gobi CM API function pointer + tlvID [ I ] - ID of response TLV that contains the string + strSz [ I ] - Max string size (including NULL terminator) + pStr [ O ] - Buffer to hold the string + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetString( + tFNGobiInputOutput mpFnString, + BYTE tlvID, + BYTE strSz, + CHAR * pStr ) +{ + // Assume failure + if (strSz > 0 && pStr != 0) + { + pStr[0] = 0; + } + + // Query for string? + ULONG status = eGOBI_ERR_GENERAL; + if (mpFnString == 0 || mhGobi == 0) + { + return status; + } + + ULONG lo = 1024; + BYTE rsp[1024] = { 0 }; + status = mpFnString( mhGobi, 2000, 0, 0, &lo, &rsp[0] ); + if (status != 0) + { + return status; + } + + std::map tlvs = GetTLVs( &rsp[0], lo ); + std::map ::const_iterator pIter = tlvs.find( tlvID ); + if (pIter == tlvs.end()) + { + return eGOBI_ERR_GENERAL; + } + + const sQMIRawContentHeader * pTmp = pIter->second; + ULONG strLen = (ULONG)pTmp->mLength; + pTmp++; + + if (strLen != 0 && strSz > 0 && pStr != 0) + { + ULONG needLen = strLen; + if (needLen + 1 > strSz) + { + needLen = strSz - 1; + } + + memcpy( pStr, pTmp, needLen ); + pStr[needLen] = 0; + } + + return status; +} + +/*=========================================================================== +METHOD: + Connect (Public Method) + +DESCRIPTION: + Calls GobiConnect + +PARAMETERS: + pInterface [ I ] - Interace to connect to + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::Connect( LPCSTR pInterface ) +{ + // Connect to WDS, DMS, and NAS services + ULONG svc[3] = { 1, 2, 3 }; + ULONG svcCount = 3; + GOBIHANDLE handle = 0; + ULONG status = GobiConnect( pInterface, &svcCount, &svc[0], &handle ); + if (status == 0) + { + if (svcCount == 3) + { + mhGobi = handle; + } + else + { + // We require WDS, DMS, and NAS services + Disconnect(); + status = eGOBI_ERR_GENERAL; + } + } + + return status; +} + +/*=========================================================================== +METHOD: + Disconnect (Public Method) + +DESCRIPTION: + Calls GobiDisconnect + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::Disconnect() +{ + if (mhGobi == 0) + { + return eGOBI_ERR_GENERAL; + } + + return GobiDisconnect( mhGobi ); +} + +/*=========================================================================== +ETHOD: + StartDataSession (Public Method) + +DESCRIPTION: + Calls WDSStartNetworkInterface + +PARAMETERS: + pAPN [ I ] - Access point name + pUser [ I ] - Username + pPwd [ I ] - Password + pSessionID [ O ] - Session ID + pFailureCode [ O ] - Failure code (if present) + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::StartDataSession( + LPCSTR pAPN, + LPCSTR pUser, + LPCSTR pPwd, + ULONG * pSessionID, + ULONG * pFailureCode ) +{ + // Assume failure + if (pSessionID != 0) + { + *pSessionID = 0xFFFFFFFF; + } + + // Start a data session? + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + UINT8 req[1024] = { 0 }; + UINT8 * pData = (UINT8 *)&req[0]; + + sQMIRawContentHeader * pTLV = (sQMIRawContentHeader *)pData; + pTLV->mTypeID = 0x16; + pTLV->mLength + = (UINT16)sizeof( sWDSStartNetworkInterfaceRequest_Authentication ); + pData += sizeof( sQMIRawContentHeader ); + + sWDSStartNetworkInterfaceRequest_Authentication * pAuth = + (sWDSStartNetworkInterfaceRequest_Authentication *)pData; + pAuth->mEnablePAP = 1; + pAuth->mEnableCHAP = 1; + pData += sizeof( sWDSStartNetworkInterfaceRequest_Authentication ); + + if (pAPN != 0 && pAPN[0] != 0) + { + size_t len = strnlen( pAPN, 256 ); + + pTLV = (sQMIRawContentHeader *)pData; + pTLV->mTypeID = 0x14; + pTLV->mLength = (UINT16)len; + pData += sizeof( sQMIRawContentHeader ); + + memcpy( pData, pAPN, len ); + pData += len; + } + + if (pUser != 0 && pUser[0] != 0) + { + size_t len = strnlen( pUser, 256 ); + + pTLV = (sQMIRawContentHeader *)pData; + pTLV->mTypeID = 0x17; + pTLV->mLength = (UINT16)len; + pData += sizeof( sQMIRawContentHeader ); + + memcpy( pData, pUser, len ); + pData += len; + } + + if (pPwd != 0 && pPwd[0] != 0) + { + size_t len = strnlen( pPwd, 256 ); + + pTLV = (sQMIRawContentHeader *)pData; + pTLV->mTypeID = 0x18; + pTLV->mLength = (UINT16)len; + pData += sizeof( sQMIRawContentHeader ); + + memcpy( pData, pPwd, len ); + pData += len; + } + + ULONG li = (ULONG)pData - (ULONG)&req[0]; + ULONG lo = 1024; + BYTE rsp[1024] = { 0 }; + status = WDSStartNetworkInterface( mhGobi, 300000, li, &req[0], &lo, &rsp[0] ); + + // On success pSessionID is valid, on failure pFailureCode is valid + ULONG status2 = ParseStartDataSession( lo, &rsp[0], pSessionID, pFailureCode ); + + if (status == eGOBI_ERR_NONE) + { + return status2; + } + + return status; +} + +/*=========================================================================== +METHOD: + CancelDataSession (Public Method) + +DESCRIPTION: + Calls GobiCancel/WDSAbort + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::CancelDataSession() +{ + // Cancel outstanding API request? + if (mhGobi == 0) + { + return eGOBI_ERR_GENERAL; + } + + // Cancel the request with the API + ULONG svcID = 1; + ULONG txID = 0xFFFFFFFF; + ULONG status = GobiCancel( mhGobi, svcID, &txID ); + if (status != 0 || txID == 0xFFFFFFFF) + { + return eGOBI_ERR_GENERAL; + } + + UINT8 req[256] = { 0 }; + UINT8 * pData = (UINT8 *)&req[0]; + + sQMIRawContentHeader * pTLV = (sQMIRawContentHeader *)pData; + pTLV->mTypeID = 0x01; + pTLV->mLength = (UINT16)sizeof( sAbortRequest_TransactionID ); + pData += sizeof( sQMIRawContentHeader ); + + sAbortRequest_TransactionID * pID = + (sAbortRequest_TransactionID *)pData; + pID->mTransactionID = (UINT16)txID; + pData += sizeof( sAbortRequest_TransactionID ); + + // Cancel the request with the device + ULONG li = (ULONG)pData - (ULONG)&req[0]; + status = WDSAbort( mhGobi, 2000, li, &req[0], 0, 0 ); + return status; +} + +/*=========================================================================== +METHOD: + StopDataSession (Public Method) + +DESCRIPTION: + Calls WDSStopNetworkInterface + +PARAMETERS: + sessionID [ I ] - Session ID + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::StopDataSession( ULONG sessionID ) +{ + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + UINT8 req[256] = { 0 }; + ULONG li = 256; + + status = PackStopDataSession( &li, &req[0], sessionID ); + if (status != 0) + { + return status; + } + + // Stop data session + status = WDSStopNetworkInterface( mhGobi, 2000, li, &req[0], 0, 0 ); + return status; +} + +/*=========================================================================== +METHOD: + GetSessionState (Public Method) + +DESCRIPTION: + Calls WDSGetPacketServiceStatus + +PARAMETERS: + pSessionState [ O ] - Current session state + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetSessionState( ULONG * pSessionState ) +{ + // Assume failure + if (pSessionState != 0) + { + *pSessionState = 0xFFFFFFFF; + } + + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + ULONG lo = 1024; + BYTE rsp[1024] = { 0 }; + status = WDSGetPacketServiceStatus( mhGobi, 2000, 0, 0, &lo, &rsp[0] ); + if (status != 0) + { + return status; + } + + status = ParseGetSessionState( lo, &rsp[0], pSessionState ); + return status; +} + +/*=========================================================================== +METHOD: + GetSessionDuration (Public Method) + +DESCRIPTION: + Calls WDSGetDataSessionDuration + +PARAMETERS: + pSessionDuration [ O ] - Session duration + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetSessionDuration( ULONGLONG * pSessionDuration ) +{ + // Assume failure + if (pSessionDuration != 0) + { + *pSessionDuration = 0xFFFFFFFF; + } + + // Query for session duration + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + ULONG lo = 1024; + BYTE rsp[1024] = { 0 }; + status = WDSGetDataSessionDuration( mhGobi, 2000, 0, 0, &lo, &rsp[0] ); + if (status != 0) + { + return status; + } + + status = ParseGetSessionDuration( lo, &rsp[0], pSessionDuration ); + return status; +} + +/*=========================================================================== +METHOD: + GetDataBearerTechnology (Public Method) + +DESCRIPTION: + Calls WDSGetDataBearerTechnology + +PARAMETERS: + pDataBearerTech [ O ] - Data bearer technology + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetDataBearerTechnology( ULONG * pDataBearerTech ) +{ + // Assume failure + if (pDataBearerTech != 0) + { + *pDataBearerTech = 0xFFFFFFFF; + } + + // Query for data bearer duration? + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + ULONG lo = 1024; + BYTE rsp[1024] = { 0 }; + status = WDSGetDataBearerTechnology( mhGobi, 2000, 0, 0, &lo, &rsp[0] ); + if (status != 0) + { + return status; + } + + status = ParseGetDataBearerTechnology( lo, &rsp[0], pDataBearerTech ); + return status; +} + +/*=========================================================================== +METHOD: + GetConnectionRate (Public Method) + +DESCRIPTION: + Calls WDSGetChannelRates + +PARAMETERS: + pCurTX [ O ] - Current TX rate + pCurRX [ O ] - Current RX rate + pMaxTX [ O ] - Max TX rate + pMaxRX [ O ] - Max RX rate + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetConnectionRate( + ULONG * pCurTX, + ULONG * pCurRX, + ULONG * pMaxTX, + ULONG * pMaxRX ) +{ + // Assume failure + pCurTX != 0 ? *pCurTX = 0xFFFFFFFF : 0; + pCurRX != 0 ? *pCurRX = 0xFFFFFFFF : 0; + pMaxTX != 0 ? *pMaxTX = 0xFFFFFFFF : 0; + pMaxRX != 0 ? *pMaxRX = 0xFFFFFFFF : 0; + + // Query for rates? + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + ULONG lo = 1024; + BYTE rsp[1024] = { 0 }; + status = WDSGetChannelRates( mhGobi, 2000, 0, 0, &lo, &rsp[0] ); + if (status != 0) + { + return status; + } + + status = ParseGetConnectionRate( lo, + &rsp[0], + pCurTX, + pCurRX, + pMaxTX, + pMaxRX ); + return status; +} + +/*=========================================================================== +METHOD: + GetFirmwareRevision (Public Method) + +DESCRIPTION: + Calls DMSGetDeviceRevision + +PARAMETERS: + strSz [ I ] - Maximum number of characters + pStr [ O ] - Firmware revision string + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetFirmwareRevision( + BYTE strSz, + CHAR * pStr ) +{ + return GetString( DMSGetDeviceRevision, 0x01, strSz, pStr ); +} + +/*=========================================================================== +METHOD: + GetManufacturer (Public Method) + +DESCRIPTION: + Calls DMSGetDeviceManfacturer + +PARAMETERS: + strSz [ I ] - Maximum string size + pStr [ O ] - Manufacturer string + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetManufacturer( + BYTE strSz, + CHAR * pStr ) +{ + return GetString( DMSGetDeviceManfacturer, 0x01, strSz, pStr ); +} + +/*=========================================================================== +METHOD: + GetModelID (Public Method) + +DESCRIPTION: + Calls GetModelID + +PARAMETERS: + strSz [ I ] - Max string size + pStr [ O ] - Model ID string + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetModelID( + BYTE strSz, + CHAR * pStr ) +{ + return GetString( DMSGetDeviceModel, 0x01, strSz, pStr ); +} + +/*=========================================================================== +METHOD: + GetHardwareRevision (Public Method) + +DESCRIPTION: + Calls DMSGetHardwareRevision + +PARAMETERS: + strSz [ I ] - Max size of string + pStr [ O ] - Hardware revision string + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetHardwareRevision( + BYTE strSz, + CHAR * pStr ) +{ + return GetString( DMSGetHardwareRevision, 0x01, strSz, pStr ); +} + +/*=========================================================================== +METHOD: + GetVoiceNumber (Public Method) + +DESCRIPTION: + Calls GetVoiceNumber + +PARAMETERS: + voiceSz [ I ] - Max characters in voice string + pVoiceStr [ O ] - Voice number string + minSz [ I ] - Max characters in MIN string + pMINStr [ O ] - MIN string + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetVoiceNumber( + BYTE voiceSz, + CHAR * pVoiceStr, + BYTE minSz, + CHAR * pMINStr ) +{ + // Assume failure + if (voiceSz > 0 && pVoiceStr != 0) + { + pVoiceStr[0] = 0; + } + + if (minSz > 0 && pMINStr != 0) + { + pMINStr[0] = 0; + } + + // Query for voice numbers? + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + ULONG lo = 1024; + BYTE rsp[1024] = { 0 }; + status = DMSGetDeviceVoiceNumber( mhGobi, 2000, 0, 0, &lo, &rsp[0] ); + if (status != 0) + { + return status; + } + + status = ParseGetVoiceNumber( lo, + &rsp[0], + voiceSz, + pVoiceStr, + minSz, + pMINStr ); + return status; +} + +/*=========================================================================== +METHOD: + GetSerialNumbers (Public Method) + +DESCRIPTION: + Calls DMSGetDeviceSerialNumbers + +PARAMETERS: + esnSz [ I ] - ESN size + pESNStr [ O ] - ESN string + imeiSz [ I ] - IMEI size + pIMEIStr [ O ] - IMSI string + meidSz [ I ] - MEID size + pMEIDStr [ O ] - MEID string + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetSerialNumbers( + BYTE esnSz, + CHAR * pESNStr, + BYTE imeiSz, + CHAR * pIMEIStr, + BYTE meidSz, + CHAR * pMEIDStr ) +{ + // Assume failure + if (esnSz > 0 && pESNStr != 0) + { + pESNStr[0] = 0; + } + + if (imeiSz > 0 && pIMEIStr != 0) + { + pIMEIStr[0] = 0; + } + + if (meidSz > 0 && pMEIDStr != 0) + { + pMEIDStr[0] = 0; + } + + // Query for serial numbers? + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + ULONG lo = 1024; + BYTE rsp[1024] = { 0 }; + status = DMSGetDeviceSerialNumbers( mhGobi, 2000, 0, 0, &lo, &rsp[0] ); + if (status != 0) + { + return status; + } + + status = ParseGetSerialNumbers( lo, + &rsp[0], + esnSz, + pESNStr, + imeiSz, + pIMEIStr, + meidSz, + pMEIDStr ); + return status; +} + +/*=========================================================================== +METHOD: + GetIMSI (Public Method) + +DESCRIPTION: + Get IMSI + +PARAMETERS: + imsiSz [ I ] - IMSI size + pIMSIStr [ O ] - IMSI string + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetIMSI( + BYTE imsiSz, + CHAR * pIMSIStr ) +{ + return GetString( DMSGetDeviceVoiceNumber, 0x11, imsiSz, pIMSIStr ); +} + +/*=========================================================================== +METHOD: + GetSignalStrengths (Public Method) + +DESCRIPTION: + Calls NASGetSignalStrength + +PARAMETERS: + pSigStrengths [ O ] - Received signal strength + pRadioInterfaces [ O ] - Radio interface technology + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetSignalStrengths( + INT8 * pSigStrengths, + ULONG * pRadioInterfaces ) +{ + // Assume failure + for (ULONG s = 0; s < MAX_SIGNALS; s++) + { + pSigStrengths[s] = 0; + pRadioInterfaces[s] = 0xFFFFFFFF; + } + + // Query for signal strengths? + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + ULONG lo = 1024; + BYTE rsp[1024] = { 0 }; + status = NASGetSignalStrength( mhGobi, 2000, 0, 0, &lo, &rsp[0] ); + if (status != 0) + { + return status; + } + + status = ParseGetSignalStrength( lo, + &rsp[0], + pSigStrengths, + pRadioInterfaces ); + return status; +} + +/*=========================================================================== +METHOD: + GetServingNetwork (Public Method) + +DESCRIPTION: + Calls NASGetServingSystem + +PARAMETERS: + pDataCapabilities [ O ] - Data capabilities + pMCC [ O ] - Mobile country code + pMNC [ O ] - Mobile network code + nameSize [ I ] - Network name max size + pName [ O ] - Network name + pSID [ O ] - System ID + pNID [ O ] - Network ID + pRoam [ O ] - Roaming indicator + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetServingNetwork( + ULONG * pDataCapabilities, + WORD * pMCC, + WORD * pMNC, + BYTE nameSize, + CHAR * pName, + WORD * pSID, + WORD * pNID, + ULONG * pRoam ) +{ + // Assume failure + for (ULONG d = 0; d < MAX_DATA_CAPABILITIES; d++) + { + pDataCapabilities[d] = 0xFFFFFFFF; + } + + if (nameSize > 0 && pName != 0) + { + pName[0] = 0; + } + + pMCC != 0 ? *pMCC = 0xFFFF : 0; + pMNC != 0 ? *pMNC = 0xFFFF : 0; + pRoam != 0 ? *pRoam = 0xFFFFFFFF : 0; + pSID != 0 ? *pSID = 0xFFFF : 0; + pNID != 0 ? *pNID = 0xFFFF : 0; + + // Query for serving system? + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + ULONG lo = 8096; + BYTE rsp[8096] = { 0 }; + status = NASGetServingSystem( mhGobi, 2000, 0, 0, &lo, &rsp[0] ); + if (status != 0) + { + return status; + } + + std::map tlvs = GetTLVs( &rsp[0], lo ); + std::map ::const_iterator pIter = tlvs.find( 0x11 ); + if (pIter != tlvs.end()) + { + const sQMIRawContentHeader * pTmp = pIter->second; + ULONG tlvLen = (ULONG)pTmp->mLength; + ULONG dsLen = (ULONG)sizeof( sNASGetServingSystemResponse_DataServices ); + if (tlvLen < dsLen) + { + return eGOBI_ERR_GENERAL; + } + + pTmp++; + const sNASGetServingSystemResponse_DataServices * pDS = + (const sNASGetServingSystemResponse_DataServices *)pTmp; + + ULONG dcCount = (ULONG)pDS->mNumberOfDataCapabilities; + ULONG dcSz = (ULONG)sizeof( eQMINASDataServiceCapabilities2 ); + dsLen += dcCount * dcSz; + if (tlvLen < dsLen) + { + return eGOBI_ERR_GENERAL; + } + + pDS++; + eQMINASDataServiceCapabilities2 * pCap = (eQMINASDataServiceCapabilities2 *)pDS; + if (dcCount > MAX_DATA_CAPABILITIES) + { + dcCount = MAX_DATA_CAPABILITIES; + } + + for (ULONG i = 0; i < dcCount; i++) + { + pDataCapabilities[i] = (ULONG)*pCap++; + } + } + + pIter = tlvs.find( 0x12 ); + if (pIter != tlvs.end()) + { + const sQMIRawContentHeader * pTmp = pIter->second; + ULONG tlvLen = (ULONG)pTmp->mLength; + ULONG plmnLen = (ULONG)sizeof( sNASGetServingSystemResponse_CurrentPLMN ); + if (tlvLen < plmnLen) + { + return eGOBI_ERR_GENERAL; + } + + pTmp++; + const sNASGetServingSystemResponse_CurrentPLMN * pPLMN = + (const sNASGetServingSystemResponse_CurrentPLMN *)pTmp; + + ULONG strLen = (ULONG)pPLMN->mDescriptionLength; + plmnLen += strLen; + if (tlvLen < plmnLen) + { + return eGOBI_ERR_GENERAL; + } + + pMCC != 0 ? *pMCC = (ULONG)pPLMN->mMobileCountryCode : 0; + pMNC != 0 ? *pMNC = (ULONG)pPLMN->mMobileNetworkCode : 0; + pPLMN++; + + if (strLen != 0 && nameSize > 0 && pName != 0) + { + ULONG needLen = strLen; + if (needLen + 1 > nameSize) + { + needLen = nameSize - 1; + } + + memcpy( pName, pPLMN, needLen ); + pName[needLen] = 0; + } + } + + pIter = tlvs.find( 0x13 ); + if (pIter != tlvs.end()) + { + const sQMIRawContentHeader * pTmp = pIter->second; + ULONG tlvLen = (ULONG)pTmp->mLength; + ULONG sysLen = (ULONG)sizeof( sNASGetServingSystemResponse_SystemID ); + if (tlvLen < sysLen) + { + return eGOBI_ERR_GENERAL; + } + + pTmp++; + const sNASGetServingSystemResponse_SystemID * pSys = + (const sNASGetServingSystemResponse_SystemID *)pTmp; + + pSID != 0 ? *pSID = (ULONG)pSys->mSystemID : 0; + pNID != 0 ? *pNID = (ULONG)pSys->mNetworkID : 0; + } + + pIter = tlvs.find( 0x16 ); + if (pIter != tlvs.end()) + { + const sQMIRawContentHeader * pTmp = pIter->second; + ULONG tlvLen = (ULONG)pTmp->mLength; + ULONG roamLen = (ULONG)sizeof( sNASGetServingSystemResponse_DefaultRoaming ); + if (tlvLen < roamLen) + { + return eGOBI_ERR_GENERAL; + } + + pTmp++; + const sNASGetServingSystemResponse_DefaultRoaming * pDR = + (const sNASGetServingSystemResponse_DefaultRoaming *)pTmp; + + pRoam != 0 ? *pRoam = (ULONG)pDR->mRoamingIndicator : 0; + } + + return status; +} + +/*=========================================================================== +METHOD: + GetHomeNetwork (Public Method) + +DESCRIPTION: + Calls NASGetHomeNetwork + +PARAMETERS: + pHomeMCC [ O ] - Mobile country code + pHomeMNC [ O ] - Mobile network code + homeNameSize [ I ] - Max name size + pHomeName [ O ] - Home network name + pSID [ O ] - System ID + pNID [ O ] - Network ID + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::GetHomeNetwork( + WORD * pHomeMCC, + WORD * pHomeMNC, + BYTE homeNameSize, + CHAR * pHomeName, + WORD * pSID, + WORD * pNID ) +{ + // Assume failure + if (homeNameSize > 0 && pHomeName != 0) + { + pHomeName[0] = 0; + } + + pHomeMCC != 0 ? *pHomeMCC = 0xFFFF : 0; + pHomeMNC != 0 ? *pHomeMNC = 0xFFFF : 0; + pSID != 0 ? *pSID = 0xFFFF : 0; + pNID != 0 ? *pNID = 0xFFFF : 0; + + // Query for home system? + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + ULONG lo = 8096; + BYTE rsp[8096] = { 0 }; + status = NASGetHomeNetwork( mhGobi, 2000, 0, 0, &lo, &rsp[0] ); + if (status != 0) + { + return status; + } + + status = ParseGetHomeNetwork( lo, + &rsp[0], + pHomeMCC, + pHomeMNC, + homeNameSize, + pHomeName, + pSID, + pNID ); + return status; +} + +/*=========================================================================== +METHOD: + SetWDSEventReportCB (Public Method) + +DESCRIPTION: + Calls WDSSetEventReport/SetGenericCallback + +PARAMETERS: + pCallback [ I ] - Callback function pointer + interval [ I ] - Interval (in seconds) for transfer statistics + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::SetWDSEventReportCB( + tFNGenericCallback pCallback, + BYTE interval ) +{ + // Set WDS event callback? + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + // Configure the QMI service + UINT8 req[1024] = { 0 }; + UINT8 * pData = (UINT8 *)&req[0]; + + sQMIRawContentHeader * pTLV = (sQMIRawContentHeader *)pData; + pTLV->mTypeID = 0x11; + pTLV->mLength = (UINT16)sizeof( sWDSSetEventReportRequest_TransferStatisticsIndicator ); + pData += sizeof( sQMIRawContentHeader ); + + sWDSSetEventReportRequest_TransferStatisticsIndicator * pTS = + (sWDSSetEventReportRequest_TransferStatisticsIndicator *)pData; + pTS->mTransferStatisticsIntervalSeconds = interval; + pTS->mReportTXPacketSuccesses = 0; + pTS->mReportRXPacketSuccesses = 0; + pTS->mReportTXPacketErrors = 0; + pTS->mReportRXPacketErrors = 0; + pTS->mReportTXOverflows = 0; + pTS->mReportRXOverflows = 0; + pTS->mTXByteTotal = 1; + pTS->mRXByteTotal = 1; + pData += sizeof( sWDSSetEventReportRequest_TransferStatisticsIndicator ); + + pTLV = (sQMIRawContentHeader *)pData; + pTLV->mTypeID = 0x12; + pTLV->mLength = (UINT16)sizeof( sWDSSetEventReportRequest_DataBearerTechnologyIndicator ); + pData += sizeof( sQMIRawContentHeader ); + + sWDSSetEventReportRequest_DataBearerTechnologyIndicator * pTI = + (sWDSSetEventReportRequest_DataBearerTechnologyIndicator *)pData; + pTI->mReportDataBearerTechnology = 1; + pData += sizeof( sWDSSetEventReportRequest_DataBearerTechnologyIndicator ); + + ULONG li = (ULONG)pData - (ULONG)&req[0]; + status = WDSSetEventReport( mhGobi, 2000, li, &req[0], 0, 0 ); + if (status != 0) + { + return status; + } + + // Configure the callback with the API + status = SetGenericCallback( mhGobi, 1, 1, pCallback ); + return status; +} + +/*=========================================================================== +METHOD: + SetWDSSessionStateCB (Public Method) + +DESCRIPTION: + Calls SetGenericCallback + +PARAMETERS: + pCallback [ I ] - Callback function pointer + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::SetWDSSessionStateCB( tFNGenericCallback pCallback ) +{ + // Set WDS packet service status callback? + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + // Configure the callback with the API + status = SetGenericCallback( mhGobi, 1, 34, pCallback ); + return status; +} + +/*=========================================================================== +METHOD: + SetNASEventReportCB (Public Method) + +DESCRIPTION: + Calls NASSetEventReport/SetGenericCallback + +PARAMETERS: + pCallback [ I ] - Callback function pointer + thresholdsSize [ I ] - Threshold size + pThresholds [ I ] - Array of thresholds + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::SetNASEventReportCB( + tFNGenericCallback pCallback, + BYTE thresholdsSize, + INT8 * pThresholds ) +{ + // Set NAS event report callback request? + ULONG status = eGOBI_ERR_GENERAL; + if ( (mhGobi == 0) + || (thresholdsSize > 0 && pThresholds == 0) ) + { + return status; + } + + // Configure the QMI service + UINT8 req[1024] = { 0 }; + UINT8 * pData = (UINT8 *)&req[0]; + + sQMIRawContentHeader * pTLV = (sQMIRawContentHeader *)pData; + pTLV->mTypeID = 0x10; + pTLV->mLength = (UINT16)sizeof( sNASSetEventReportRequest_SignalIndicator ); + pTLV->mLength += (UINT16)thresholdsSize; + pData += sizeof( sQMIRawContentHeader ); + + sNASSetEventReportRequest_SignalIndicator * pSI = + (sNASSetEventReportRequest_SignalIndicator *)pData; + pSI->mReportSignalStrength = 1; + pSI->mNumberOfThresholds = thresholdsSize; + pData += sizeof( sNASSetEventReportRequest_SignalIndicator ); + + for (UINT8 i = 0; i < thresholdsSize; i++) + { + INT8 * pThresh = (INT8 *)pData; + *pThresh = pThresholds[i]; + pData++; + } + + ULONG li = (ULONG)pData - (ULONG)&req[0]; + status = NASSetEventReport( mhGobi, 2000, li, &req[0], 0, 0 ); + if (status != 0) + { + return status; + } + + // Configure the callback with the API + status = SetGenericCallback( mhGobi, 3, 2, pCallback ); + return status; +} + +/*=========================================================================== +METHOD: + SetNASServingSystemCB (Public Method) + +DESCRIPTION: + Calls SetGenericCallback + +PARAMETERS: + pCallback [ I ] - Callback function pointer + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cGobiCMDLL::SetNASServingSystemCB( tFNGenericCallback pCallback ) +{ + // Set NAS serving system request? + ULONG status = eGOBI_ERR_GENERAL; + if (mhGobi == 0) + { + return status; + } + + // Configure the callback with the API + status = SetGenericCallback( mhGobi, 3, 36, pCallback ); + return status; +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMDLL.h b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMDLL.h new file mode 100644 index 0000000..728c9a2 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/GobiCMDLL.h @@ -0,0 +1,265 @@ +/*=========================================================================== +FILE: + GobiCMDLL.h + +DESCRIPTION: + Simple class to load and interface to the Gobi CM DLL + +PUBLIC CLASSES AND METHODS: + cGobiCMDLL + This class loads the Gobi CM DLL and then interfaces to it + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "GobiConnectionMgmtAPI.h" +#include "GobiConnectionMgmtAPIStructs.h" +#include + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- +// Handle to Gobi API +typedef ULONG_PTR GOBIHANDLE; + +// The maximum number of signals +const ULONG MAX_SIGNALS = 12; + +// The maximum number of data capabilities +const ULONG MAX_DATA_CAPABILITIES = 12; + +// Gobi input/output function pointer +typedef ULONG (* tFNGobiInputOutput)( + GOBIHANDLE handle, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + +/*=========================================================================*/ +// Free Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + GetTLVs (Internal Method) + +DESCRIPTION: + Convert response buffer to a TLV map + +PARAMETERS: + pRsp [ I ] - The response buffer + rspSz [ I ] - The size of the above buffer + +RETURN VALUE: + std::map +===========================================================================*/ +inline std::map GetTLVs( + const UINT8 * pRsp, + ULONG rspSz ) +{ + std::map retMap; + + ULONG dataProcessed = 0; + const UINT8 * pData = &pRsp[0]; + while (dataProcessed < rspSz) + { + dataProcessed += (ULONG)sizeof( sQMIRawContentHeader ); + if (dataProcessed > rspSz) + { + break; + } + + const sQMIRawContentHeader * pTLV = (const sQMIRawContentHeader *)pData; + dataProcessed += (ULONG)pTLV->mLength; + if (dataProcessed > rspSz) + { + break; + } + + retMap[pTLV->mTypeID] = pTLV; + pData = &pRsp[dataProcessed]; + } + + return retMap; +}; + +/*=========================================================================*/ +// Class cGobiCMDLL +/*=========================================================================*/ +class cGobiCMDLL +{ + public: + // Constructor + cGobiCMDLL() + : mhGobi( 0 ) + { } + + // Destructor + ~cGobiCMDLL() + { } + + // Connect + ULONG Connect( LPCSTR pInterface ); + + // Disconnect + ULONG Disconnect(); + + // Start data session + ULONG StartDataSession( + LPCSTR pAPN, + LPCSTR pUser, + LPCSTR pPwd, + ULONG * pSessionID, + ULONG * pFailureCode ); + + // Cancel data session + ULONG CancelDataSession(); + + // Stop data session + ULONG StopDataSession( ULONG sessionID ); + + // Get session state + ULONG GetSessionState( ULONG * pSessionState ); + + // Get session duration + ULONG GetSessionDuration( ULONGLONG * pSessionDuration ); + + // Get data bearer technology + ULONG GetDataBearerTechnology( ULONG * pDataBearerTech ); + + // Get connection rate + ULONG GetConnectionRate( + ULONG * pCurTX, + ULONG * pCurRX, + ULONG * pMaxTX, + ULONG * pMaxRX ); + + // Get firmware revision + ULONG GetFirmwareRevision( + BYTE strSz, + CHAR * pStr ); + + // Get manufacturer + ULONG GetManufacturer( + BYTE strSz, + CHAR * pStr ); + + // Get model ID + ULONG GetModelID( + BYTE strSz, + CHAR * pStr ); + + // Get hardware revision + ULONG GetHardwareRevision( + BYTE strSz, + CHAR * pStr ); + + // Get voice number + ULONG GetVoiceNumber( + BYTE voiceSz, + CHAR * pVoiceStr, + BYTE minSz, + CHAR * pMINStr ); + + // Get serial numbers + ULONG GetSerialNumbers( + BYTE esnSz, + CHAR * pESNStr, + BYTE imeiSz, + CHAR * pIMEIStr, + BYTE meidSz, + CHAR * pMEIDStr ); + + // Get IMSI + ULONG GetIMSI( + BYTE imsiSz, + CHAR * pIMSIStr ); + + // Get signal strengths + ULONG GetSignalStrengths( + INT8 * pSigStrengths, + ULONG * pRadioInterfaces ); + + // Get serving network + ULONG GetServingNetwork( + ULONG * pDataCapabilities, + WORD * pMCC, + WORD * pMNC, + BYTE nameSize, + CHAR * pName, + WORD * pSID, + WORD * pNID, + ULONG * pRoam ); + + // Get home network + ULONG GetHomeNetwork( + WORD * pHomeMCC, + WORD * pHomeMNC, + BYTE homeNameSize, + CHAR * pHomeName, + WORD * pSID, + WORD * pNID ); + + // Set WDS event report callback + ULONG SetWDSEventReportCB( + tFNGenericCallback pCallback, + BYTE interval ); + + // Set WDS packet service status callback + ULONG SetWDSSessionStateCB( tFNGenericCallback pCallback ); + + // Set NAS event report callback + ULONG SetNASEventReportCB( + tFNGenericCallback pCallback, + BYTE thresholdsSize, + INT8 * pThresholds ); + + // Set NAS serving system callback + ULONG SetNASServingSystemCB( tFNGenericCallback pCallback ); + + protected: + + // Call a Gobi CM API function that returns a string + ULONG GetString( + tFNGobiInputOutput mpFnString, + BYTE tlvID, + BYTE strSz, + CHAR * pStr ); + + /* Handle to Gobi API */ + GOBIHANDLE mhGobi; +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/QTSampleCM.cpp b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/QTSampleCM.cpp new file mode 100644 index 0000000..57cf1e9 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/QTSampleCM.cpp @@ -0,0 +1,315 @@ +/*=========================================================================== +FILE: + QTSampleCM.cpp + +DESCRIPTION: + QT implementation of the Sample CM + +PUBLIC CLASSES AND METHODS: + cQTSampleCM + QT implementation of the Sample CM + +Copyright (c) 2013, 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 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 "QTSampleCM.h" + +/*=========================================================================*/ +// Free Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + AsyncConnectThread (Free Method) + +DESCRIPTION: + Start a data session + +PARAMETERS: + pData [ I ] - cQTSampleCM object + +RETURN VALUE: + void * - always NULL +===========================================================================*/ +void * AsyncConnectThread( void * pData ) +{ + cQTSampleCM * pCM = (cQTSampleCM*)pData; + if (pCM == NULL) + { + return NULL; + } + + // Open the dialog window, disable the info and connection stats buttons + pCM->mView.rootContext()->setContextProperty( "dialogText", + "Connecting, please wait..." ); + pCM->mView.rootContext()->setContextProperty( "windowState", + "connectingDialog" ); + + ULONG failureCode = 0xFFFFFFFF; + ULONG rc = pCM->OnStartDataSession( &failureCode ); + if (rc != eGOBI_ERR_NONE) + { + std::ostringstream error; + error << "Failed to connect, error " << rc; + + TRACE( "rc %lu, failure code %lu", rc, failureCode ); + + // Show failure code, if present + if (rc == 1014 && failureCode != 0xFFFFFFFF) + { + error << "\nCall failure reason " << failureCode; + } + + pCM->mView.rootContext()->setContextProperty( "dialogText", + error.str().c_str() ); + + pCM->SetConnectButtonText( "Connect" ); + } + else + { + pCM->mView.rootContext()->setContextProperty( "dialogText", "Success!" ); + + // Connect button should be updated by state change indication + } + + // Leave the dialog up for 2s + sleep( 2 ); + + pCM->mView.rootContext()->setContextProperty( "windowState", "" ); + + return NULL; +} + +/*=========================================================================== +METHOD: + OnInfosButton (Free Method) + +DESCRIPTION: + Move to the info stats page + +PARAMETERS: + pCM [ I ] - cQTSampleCM object + +RETURN VALUE: + QVariant - always 0 +===========================================================================*/ +QVariant OnInfosButton( cQTSampleCM * pCM ) +{ + pCM->mView.rootContext()->setContextProperty( "windowState", "infos" ); + + return 0; +} + +/*=========================================================================== +METHOD: + OnConnectionsButton (Free Method) + +DESCRIPTION: + Move to the connection stats page + +PARAMETERS: + pCM [ I ] - cQTSampleCM object + +RETURN VALUE: + QVariant - always 0 +===========================================================================*/ +QVariant OnConnectionsButton( cQTSampleCM * pCM ) +{ + // "" is the default state (connection stats page) + pCM->mView.rootContext()->setContextProperty( "windowState", "" ); + + return 0; +} + +/*=========================================================================== +METHOD: + OnConnectButton (Free Method) + +DESCRIPTION: + Start, cancel, or disconnect from a data session + + NOTE: The UI is not updated until this function returns, so the connection + will be established asynchronously + +PARAMETERS: + pCM [ I ] - cQTSampleCM object + +RETURN VALUE: + QVariant - always 0 +===========================================================================*/ +QVariant OnConnectButton( cQTSampleCM * pCM ) +{ + // Double check if there a device connected + if (pCM->mDeviceID.size() == 0 + || pCM->mConnectButtonText.compare( "No Device" ) == 0) + { + TRACE( "No Device" ); + return 0; + } + + // Start a connection + if (pCM->mConnectButtonText.compare( "Connect" ) == 0) + { + pCM->SetConnectButtonText( "Cancel" ); + + // Create a detached thread to start the connection asynchronously + pthread_attr_t attributes; + pthread_attr_init( &attributes ); + pthread_attr_setdetachstate( &attributes, PTHREAD_CREATE_DETACHED ); + + pthread_create( &pCM->mAsyncConnectThreadID, + &attributes, + AsyncConnectThread, + pCM ); + } + else if (pCM->mConnectButtonText.compare( "Cancel" ) == 0) + { + pCM->OnCancelDataSession(); + + pCM->SetConnectButtonText( "Connect" ); + } + else if (pCM->mConnectButtonText.compare( "Disconnect" ) == 0) + { + pCM->OnStopDataSession(); + + pCM->SetConnectButtonText( "Connect" ); + } + else + { + // Externally connected, etc + TRACE( "Unknown connect button state %s", + pCM->mConnectButtonText.c_str() ); + } + + return 0; +} + +/*=========================================================================*/ +// cQTSampleCM Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + Init (Public Method) + +DESCRIPTION: + Initialize GUI + +RETURN VALUE: + bool +===========================================================================*/ +bool cQTSampleCM::Init() +{ + // Use the current screen orientation + mView.setOrientation( QmlApplicationViewer::ScreenOrientationAuto ); + + // The buttons + mView.rootContext()->setContextProperty( "connectButton", + &mConnectButton ); + mView.rootContext()->setContextProperty( "infosButton", + &mInfosButton ); + mView.rootContext()->setContextProperty( "connectionsButton", + &mConnectionsButton ); + + // The input fields + mView.rootContext()->setContextProperty( "apnNameText", &mAPNText ); + mView.rootContext()->setContextProperty( "usernameText", &mUsernameText ); + mView.rootContext()->setContextProperty( "passwordText", &mPasswordText ); + + // Default button value + SetConnectButtonText( "No Device" ); + + // Default state + mView.rootContext()->setContextProperty( "windowState", "" ); + mView.rootContext()->setContextProperty( "dialogText", "" ); + + bool bRC = cSampleCM::Init(); + + mView.setMainQmlFile( "qml/GobiSampleCM/main.qml" ); + mView.show(); + + return bRC; +} + +/*=========================================================================== +METHOD: + Run (Public Method) + +DESCRIPTION: + Run the GUI (blocks until exit) + +RETURN VALUE: + bool +===========================================================================*/ +int cQTSampleCM::Run() +{ + return mApp.exec(); +} + +/*=========================================================================== +METHOD: + Disconnect (Public Method) + +DESCRIPTION: + Calls GobiDisconnect + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cQTSampleCM::Disconnect() +{ + SetConnectButtonText( "No device" ); + + return cSampleCM::Disconnect(); +} + +/*=========================================================================== +ETHOD: + OnStartDataSession (Public Method) + +DESCRIPTION: + Updates apn, username, and password input field values before starting + a data session + +PARAMETERS: + pFailureCode [ O ] - Call failure code, if provided + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cQTSampleCM::OnStartDataSession( ULONG * pFailureCode ) +{ + // Grab the APN, username, and password + mAPN = mAPNText.getText().toUtf8().constData(); + mUsername = mUsernameText.getText().toUtf8().constData(); + mPassword = mPasswordText.getText().toUtf8().constData(); + + return cSampleCM::OnStartDataSession( pFailureCode ); +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/QTSampleCM.h b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/QTSampleCM.h new file mode 100644 index 0000000..37d5993 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/QTSampleCM.h @@ -0,0 +1,458 @@ +/*=========================================================================== +FILE: + QTSampleCM.h + +DESCRIPTION: + QT implementation of the Sample CM + +PUBLIC CLASSES AND METHODS: + cButton + Generic clickable button for QT + cTextInput + Generic text input field for QT + cQTSampleCM + QT implementation of the Sample CM + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include +#include "qmlapplicationviewer.h" +#include +#include + +#include "SampleCM.h" + +// Prototypes +class cQTSampleCM; +void * AsyncConnectThread( void * pData ); +QVariant OnInfosButton( cQTSampleCM * pCM ); +QVariant OnConnectionsButton( cQTSampleCM * pCM ); +QVariant OnConnectButton( cQTSampleCM * pCM ); + +/*=========================================================================*/ +// Class cButton +// Generic clickable button for QT +/*=========================================================================*/ +class cButton : public QObject +{ + Q_OBJECT + +public: + + // Constructor + cButton( cQTSampleCM * pCM, + QVariant (*pOnClick)( cQTSampleCM * ) ) + { + mpCM = pCM; + mpOnClick = pOnClick; + } + +public slots: + + // Function to be run on a click event + QVariant Click() + { + if (mpOnClick != 0) + { + return mpOnClick( mpCM ); + } + + return ""; + } + +protected: + + /* The main object */ + cQTSampleCM * mpCM; + + /* Function to run when clicked */ + QVariant (* mpOnClick)( cQTSampleCM * ); +}; + +/*=========================================================================*/ +// cTextInput +// Generic text input field for QT +/*=========================================================================*/ +class cTextInput : public QObject +{ + Q_OBJECT + Q_PROPERTY( QString text READ getText WRITE setText ) + +public slots: + + // Get the value + QString getText() const + { + return mText; + } + + // Set the value + void setText( const QString & text ) + { + mText = text; + } + +private: + + /* The text */ + QString mText; +}; + +/*=========================================================================*/ +// Class cQTSampleCM +/*=========================================================================*/ +class cQTSampleCM : public cSampleCM +{ + public: + // Constructor + cQTSampleCM( int argc, char ** argv ) + : mApp( argc, argv ), + mConnectButtonText( "No Device" ), + mConnectButton( this, OnConnectButton ), + mInfosButton( this, OnInfosButton ), + mConnectionsButton( this, OnConnectionsButton ) + { } + + // Initialize UI, begin waiting for devices + bool Init(); + + // Run the GUI (blocks until exit) + int Run(); + + // Disconnect + ULONG Disconnect(); + + // Process a start data session request + ULONG OnStartDataSession( ULONG * pFailureCode ); + + // Set mState and the connection button + void SetState( const std::string & state ) + { + cSampleCM::SetState( state ); + + // Update the connection button as well + switch (mSessionState) + { + case eQMIConnectionStatus_Disconnected: + { + SetConnectButtonText( "Connect" ); + + if (mInitialState != eQMIConnectionStatus_Disconnected + && mInitialState != eQMIConnectionStatus_Suspended) + { + // Clear the initial state + mInitialState = eQMIConnectionStatus_Disconnected; + } + } + break; + + case eQMIConnectionStatus_Connected: + { + if (mInitialState != eQMIConnectionStatus_Disconnected + && mInitialState != eQMIConnectionStatus_Suspended) + { + SetConnectButtonText( "External Con" ); + } + else + { + SetConnectButtonText( "Disconnect" ); + } + } + break; + + case eQMIConnectionStatus_Authenticating: + { + if (mInitialState != eQMIConnectionStatus_Disconnected + && mInitialState != eQMIConnectionStatus_Suspended) + { + SetConnectButtonText( "Ext Connecting" ); + } + else + { + SetConnectButtonText( "Cancel" ); + } + } + break; + + case eQMIConnectionStatus_Suspended: + default: + break; + } + + // No more than 12 characters + if (mState.size() > 12) + { + mState.resize( 12 ); + } + + // Note: "state" is already a property, can't duplicate + // using "status" instead + mView.rootContext()->setContextProperty( "status", mState.c_str() ); + } + + // Set mRSSI + void SetRSSI( const std::string & rssi ) + { + cSampleCM::SetRSSI( rssi ); + + mView.rootContext()->setContextProperty( "rssi", mRSSI.c_str() ); + } + + // Set mTech + void SetTech( const std::string & tech ) + { + cSampleCM::SetTech( tech ); + + // No more than 12 characters + if (mTech.size() > 12) + { + mTech.resize( 12 ); + } + + mView.rootContext()->setContextProperty( "tech", mTech.c_str() ); + } + + // Set mRx + void SetRx( const std::string & rx ) + { + cSampleCM::SetRx( rx ); + + mView.rootContext()->setContextProperty( "rx", mRx.c_str() ); + } + + // Set mTx + void SetTx( const std::string & tx ) + { + cSampleCM::SetTx( tx ); + + mView.rootContext()->setContextProperty( "tx", mTx.c_str() ); + } + + // Set mMaxRx + void SetMaxRx( const std::string & maxRx ) + { + cSampleCM::SetMaxRx( maxRx ); + + mView.rootContext()->setContextProperty( "maxRx", mMaxRx.c_str() ); + } + + // Set mMaxTx + void SetMaxTx( const std::string & maxTx ) + { + cSampleCM::SetMaxTx( maxTx ); + + mView.rootContext()->setContextProperty( "maxTx", mMaxTx.c_str() ); + } + + // Set mRoam + void SetRoam( const std::string & roam ) + { + cSampleCM::SetRoam( roam ); + + mView.rootContext()->setContextProperty( "roam", mRoam.c_str() ); + } + + // Set mDuration + void SetDuration( const std::string & duration ) + { + cSampleCM::SetDuration( duration ); + + mView.rootContext()->setContextProperty( "duration", mDuration.c_str() ); + } + + // Set mLifeDuration + void SetLifeDuration( const std::string & lifeDuration ) + { + cSampleCM::SetLifeDuration( lifeDuration ); + + mView.rootContext()->setContextProperty( "lifeDuration", mLifeDuration.c_str() ); + } + + // Set mLifeRx + void SetLifeRx( const std::string & lifeRx ) + { + cSampleCM::SetLifeRx( lifeRx ); + + mView.rootContext()->setContextProperty( "lifeRx", mLifeRx.c_str() ); + } + + // Set mLifeTx + void SetLifeTx( const std::string & lifeTx ) + { + cSampleCM::SetLifeTx( lifeTx ); + + mView.rootContext()->setContextProperty( "lifeTx", mLifeTx.c_str() ); + } + + // Set mManufact + void SetManufact( const std::string & manufact ) + { + cSampleCM::SetManufact( manufact ); + + mView.rootContext()->setContextProperty( "manufact", mManufact.c_str() ); + } + + // Set mModel + void SetModel( const std::string & model ) + { + cSampleCM::SetModel( model ); + + // No more than 20 characters + if (mModel.size() > 20) + { + mModel.resize( 20 ); + } + + mView.rootContext()->setContextProperty( "model", mModel.c_str() ); + } + + // Set mHardware + void SetHardware( const std::string & hardware ) + { + cSampleCM::SetHardware( hardware ); + + mView.rootContext()->setContextProperty( "hardware", mHardware.c_str() ); + } + + // Set mFirmware + void SetFirmware( const std::string & firmware ) + { + cSampleCM::SetFirmware( firmware ); + + // No more than 20 characters + if (mFirmware.size() > 20) + { + mFirmware.resize( 20 ); + } + + mView.rootContext()->setContextProperty( "firmware", mFirmware.c_str() ); + } + + // Set mMDN + void SetMDN( const std::string & mdn ) + { + cSampleCM::SetMDN( mdn ); + + mView.rootContext()->setContextProperty( "mdn", mMDN.c_str() ); + } + + // Set mMIN + void SetMIN( const std::string & min ) + { + cSampleCM::SetMIN( min ); + + mView.rootContext()->setContextProperty( "min", mMIN.c_str() ); + } + + // Set mESN + void SetESN( const std::string & esn ) + { + cSampleCM::SetESN( esn ); + + mView.rootContext()->setContextProperty( "esn", mESN.c_str() ); + } + + // Set mMEID + void SetMEID( const std::string & meid ) + { + cSampleCM::SetMEID( meid ); + + mView.rootContext()->setContextProperty( "meid", mMEID.c_str() ); + } + + // Set mIMEI + void SetIMEI( const std::string & imei ) + { + cSampleCM::SetIMEI( imei ); + + mView.rootContext()->setContextProperty( "imei", mIMEI.c_str() ); + } + + // Set mIMSI + void SetIMSI( const std::string & imsi ) + { + cSampleCM::SetIMSI( imsi ); + + mView.rootContext()->setContextProperty( "imsi", mIMSI.c_str() ); + } + + // Set mConnectButtonText + void SetConnectButtonText( const std::string & connectButtonText ) + { + mConnectButtonText = connectButtonText; + + mView.rootContext()->setContextProperty( "connectButtonText", + connectButtonText.c_str() ); + } + + protected: + + /* QApplication object */ + QApplication mApp; + + /* QmlApplicationViewer object */ + QmlApplicationViewer mView; + + /* APN text input field */ + cTextInput mAPNText; + + /* Username text input field */ + cTextInput mUsernameText; + + /* Password text input field */ + cTextInput mPasswordText; + + /* "Connect" button's text */ + std::string mConnectButtonText; + + /* "Connect" button */ + cButton mConnectButton; + + /* "Info Stats" button */ + cButton mInfosButton; + + /* "Connection Stats" button */ + cButton mConnectionsButton; + + /* Async connection thread ID */ + pthread_t mAsyncConnectThreadID; + + // Friend functions + friend void * AsyncConnectThread( void * pData ); + friend QVariant OnInfosButton( cQTSampleCM * pCM ); + friend QVariant OnConnectionsButton( cQTSampleCM * pCM ); + friend QVariant OnConnectButton( cQTSampleCM * pCM ); +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/SampleCM.cpp b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/SampleCM.cpp new file mode 100644 index 0000000..d54a02d --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/SampleCM.cpp @@ -0,0 +1,1734 @@ +/*=========================================================================== +FILE: + SampleCM.cpp + +DESCRIPTION: + Generic class to act as Sample CM interface + +PUBLIC CLASSES AND METHODS: + cSampleCM + Generic class to act as Sample CM interface + +Copyright (c) 2013, 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 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 "SampleCM.h" +#include "GobiCMDLL.h" +#include "GobiCMCallback.h" +#include "GobiConnectionMgmtAPIStructs.h" + +#include +#include +#include +#include +#include + +// Global pointer for callbacks to reference +class cSampleCM * gpCM; + +/*=========================================================================*/ +// Free Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + GetTickCount (Free Method) + +DESCRIPTION: + Provide a number for sequencing reference, similar to the windows + ::GetTickCount(). + + NOTE: This number is based on the time since epoc, not + uptime. + +PARAMETERS: + +RETURN VALUE: + ULONGLONG - Number of milliseconds system has been up +===========================================================================*/ +ULONGLONG GetTickCount() +{ + timespec curtime; + clock_gettime( CLOCK_REALTIME, &curtime ); + + ULONGLONG outtime = curtime.tv_sec * 1000LL; + outtime += curtime.tv_nsec / 1000000LL; + + return outtime; +} + +/*=========================================================================== +METHOD: + DeviceDetectionThread (Free Method) + +DESCRIPTION: + Scans for and detects devices + +PARAMETERS: + pData [ I ] - cSampleCM object + +RETURN VALUE: + void * - always NULL +===========================================================================*/ +void * DeviceDetectionThread( void * pData ) +{ + cSampleCM * pCM = (cSampleCM *)pData; + if (pCM == NULL) + { + return NULL; + } + + // Get inotify handle + int inotify = inotify_init(); + if (inotify == -1) + { + TRACE( "inotify_init failed\n" ); + return NULL; + } + + // Start a watch on the /dev directory + int inotifyFlags = IN_CREATE | IN_MODIFY | IN_DELETE; + int watchD = inotify_add_watch( inotify, "/dev/", inotifyFlags ); + if (watchD == -1) + { + TRACE( "inotify_add_watch failed\n" ); + close( inotify ); + return NULL; + } + + // Does a device already exist? + dirent ** ppDevFiles; + + // Yes, scandir really takes a triple pointer for its second param + int numDevs = scandir( "/dev/", &ppDevFiles, NULL, NULL ); + for (int i = 0; i < numDevs; i++) + { + std::string deviceID = "/dev/"; + deviceID += ppDevFiles[i]->d_name; + free( ppDevFiles[i] ); + + if (deviceID.find( "qcqmi" ) != std::string::npos) + { + pCM->Connect( deviceID.c_str() ); + break; + } + } + + // Cleanup from scandir + if (numDevs != -1) + { + free( ppDevFiles ); + } + else + { + TRACE( "Scandir failed\n" ); + } + + // Begin async reading + fd_set inputSet, outputSet; + FD_ZERO( &inputSet ); + FD_SET( pCM->mDeviceDetectionStopPipe[READING], &inputSet ); + FD_SET( inotify, &inputSet ); + int largestFD = std::max( pCM->mDeviceDetectionStopPipe[READING], inotify ); + + while (true) + { + // No FD_COPY() available in android + memcpy( &outputSet, &inputSet, sizeof( fd_set ) ); + + // Wait for data on either the inotify or the stop pipe + int status = select( largestFD + 1, &outputSet, NULL, NULL, NULL ); + if (status <= 0) + { + break; + } + else if (FD_ISSET( pCM->mDeviceDetectionStopPipe[READING], &outputSet ) == true) + { + // Time to close + break; + } + else if (FD_ISSET( inotify, &outputSet ) == true) + { + // Perform a read + BYTE buffer[1024] = { 0 }; + int rc = read( inotify, &buffer[0], 1024 ); + if (rc < (int)sizeof( inotify_event )) + { + continue; + } + + // Typecast the buffer to an inotify event + struct inotify_event * pIEvent = (struct inotify_event *)&buffer[0]; + + // Check the length of the name + if (pIEvent->len < 5) + { + continue; + } + + // Is this a matching device? + if (strncmp( pIEvent->name, "qcqmi", 5 ) != 0) + { + continue; + } + + std::string deviceID = "/dev/"; + deviceID += pIEvent->name; + + if (pIEvent->mask & IN_CREATE + || pIEvent->mask & IN_MODIFY) + { + pCM->Connect( deviceID.c_str() ); + } + + if (pIEvent->mask & IN_DELETE) + { + // Was it the connected device which was removed? + if (pCM->mDeviceID.compare( deviceID ) == 0) + { + pCM->Disconnect(); + } + } + } + } + + // Cleanup + inotify_rm_watch( inotify, watchD ); + close( inotify ); + + return NULL; +} + +/*=========================================================================== +METHOD: + UpdateNetworkInfoThread (Free Method) + +DESCRIPTION: + Updates the network stats every 1s (while device is present) + +PARAMETERS: + pData [ I ] - cSampleCM object + +RETURN VALUE: + void * - always NULL +===========================================================================*/ +void * UpdateNetworkInfoThread( void * pData ) +{ + cSampleCM * pCM = (cSampleCM*)pData; + if (pCM == NULL) + { + return NULL; + } + + // Update once + pCM->CheckConnectedStats(); + + int rc; + do + { + // Update rates and times every 1s + pCM->UpdateRateDisplay(); + pCM->UpdateTimeDisplay(); + + DWORD temp; + rc = pCM->mUpdateNetworkInfoEvent.Wait( 1000, temp ); + + } while (rc == ETIME); + + return NULL; +} + +/*=========================================================================== +METHOD: + ParseStats (Free Method) + +DESCRIPTION: + Parse the stats file and obtain the TX/RX bytes and connection duration + + NOTE: The stats text file consists of one line in the following format: + Total RX Bytes; Total TX Bytes; Total Duration + +PARAMETERS: + line [ I ] - Line to parse + lifeTotalRX [ O ] - Total RX bytes + lifeTotalTX [ O ] - Total TX bytes + lifeTotalDuration [ O ] - Total connection duration + +RETURN VALUE: + bool +===========================================================================*/ +bool ParseStats( + std::istringstream & line, + ULONGLONG & lifeTotalRX, + ULONGLONG & lifeTotalTX, + ULONGLONG & lifeTotalDuration ) +{ + + ULONGLONG temp1, temp2, temp3; + char c1, c2; + + // Attempt to parse into temp variables, skipping whitespace + line >> std::skipws >> temp1 >> c1 >> temp2 >> c2 >> temp3; + + // Was parsing successful? + if (line.fail() == true) + { + TRACE( "failed to parse stats file\n" ); + return false; + } + else + { + TRACE( "read %llu, %llu, %llu", temp1, temp2, temp3 ); + lifeTotalRX = temp1; + lifeTotalTX = temp2; + lifeTotalDuration = temp3; + + return true; + } +} + +/*=========================================================================*/ +// cSampleCM Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + ~cSampleCM (Public Method) + +DESCRIPTION: + Destructor - Stops the data session, + Stops device detection thread, + Writes stats to file + +RETURN VALUE: + None +===========================================================================*/ +cSampleCM::~cSampleCM() +{ + // These functions will most likely fail. That's ok. + OnCancelDataSession(); + OnStopDataSession(); + + Disconnect(); + + // Close device detection thread, if open + if (mDeviceDetectionStopPipe[WRITING] != -1) + { + if (mDeviceDetectionThreadID != 0) + { + BYTE byte = 1; + write( mDeviceDetectionStopPipe[WRITING], &byte, 1 ); + + pthread_join( mDeviceDetectionThreadID, NULL ); + + mDeviceDetectionThreadID = 0; + } + + close( mDeviceDetectionStopPipe[WRITING] ); + close( mDeviceDetectionStopPipe[READING] ); + mDeviceDetectionStopPipe[READING] = -1; + mDeviceDetectionStopPipe[WRITING] = -1; + } + + // Write stats to file + std::string config = getenv( "HOME" ); + config += "/.GobiSampleCMStats.txt"; + + int flags = O_CREAT | O_TRUNC | O_WRONLY; + mode_t mode = S_IRUSR | S_IWUSR; + int statsFile = open( config.c_str(), flags, mode ); + if (statsFile < 0) + { + TRACE( "Unable to create stats file\n" ); + } + else + { + std::ostringstream out; + out << mLifeTotalRX << "; " + << mLifeTotalTX << "; " + << mLifeTotalDuration; + + int rc = write( statsFile, out.str().c_str(), out.str().size() ); + if (rc < 0) + { + TRACE( "Unable to write stats to file\n" ); + } + + close( statsFile ); + } +} + +/*=========================================================================== +METHOD: + Init (Public Method) + +DESCRIPTION: + Initialize GUI, begin waiting for devices + +RETURN VALUE: + bool +===========================================================================*/ +bool cSampleCM::Init() +{ + Disconnect(); + + // Read in the stats file + std::string config = getenv( "HOME" ); + config += "/.GobiSampleCMStats.txt"; + + int statsFile = open( config.c_str(), O_RDONLY ); + if (statsFile < 0) + { + // Non-fatal error + TRACE( "Unable to open config file %s", config.c_str() ); + } + else + { + CHAR buf[100]; + int len = read( statsFile, &buf[0], 100 ); + if (len < 0) + { + // Non-fatal error + TRACE( "failed to read from file\n" ); + } + else + { + std::string asString( &buf[0], len ); + std::istringstream line( asString ); + + ULONGLONG lrx, ltx, ld; + if (ParseStats( line, lrx, ltx, ld ) == true) + { + mLifeTotalRX = lrx; + mLifeTotalTX = ltx; + mLifeTotalDuration = ld; + } + } + + close( statsFile ); + } + + // Life totals will just be zeros if the file was not present + std::ostringstream tmp; + tmp << mLifeTotalRX; + SetLifeRx( tmp.str() ); + + tmp.str( "" ); + tmp << mLifeTotalTX; + SetLifeTx( tmp.str() ); + + tmp.str( "" ); + tmp << std::setfill( '0' ) << std::setw( 2 ) << (mLifeTotalDuration / 3600) % 60 + << std::setw( 1 ) << ":" + << std::setfill( '0' ) << std::setw( 2 ) << (mLifeTotalDuration / 60) % 60 + << std::setw( 1 ) << ":" + << std::setfill( '0' ) << std::setw( 2 ) << mLifeTotalDuration % 60; + SetLifeDuration( tmp.str() ); + + // Set the global pointer, used by callbacks + gpCM = this; + + // Initialize command pipe + int ret = pipe( mDeviceDetectionStopPipe ); + if (ret != 0) + { + // Should never happen, but just in case... + return false; + } + + // Begin scanning for devices + ret = pthread_create( &mDeviceDetectionThreadID, + 0, + DeviceDetectionThread, + this ); + if (ret != 0) + { + return false; + } + + return true; +} + +/*=========================================================================== +METHOD: + Connect (Public Method) + +DESCRIPTION: + Initializes the Gobi API to the current device + +PARAMETERS: + pInterface [ I ] - Interace to connect to + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cSampleCM::Connect( LPCSTR pInterface ) +{ + // Are we already connected to a device? + if (mDeviceID.size() != 0) + { + return eGOBI_ERR_MULTIPLE_DEVICES; + } + + // Connect to the device + ULONG rc = mGobi.Connect( pInterface ); + if (rc != eGOBI_ERR_NONE) + { + TRACE( "GobiConnect error %lu\n", rc ); + return rc; + } + + UpdateDeviceInfo(); + UpdateConnectionInfo(); + + // Any connection at this point is an external connection + UpdateSessionState( true, mSessionState ); + + // Success + mDeviceID = pInterface; + return rc; +} + +/*=========================================================================== +METHOD: + Disconnect (Public Method) + +DESCRIPTION: + Calls GobiDisconnect + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cSampleCM::Disconnect() +{ + // Stop a data session, if present + OnCancelDataSession(); + OnStopDataSession(); + + mGobi.Disconnect(); + + // Reset state + mSessionID = 0xFFFFFFFF; + mInitialState = 0xFFFFFFFF; + mDataBearerTech = 0; + + // Store life total + mLifeTotalDuration += mTotalDuration; + + // Reset all totals + mStartTime = 0; + mPreviousRX = 0; + mPreviousTX = 0; + mTotalRX = 0; + mTotalTX = 0; + mTotalDuration = 0; + + SetState( "No Device" ); + SetRSSI( "Unknown" ); + SetTech( "Unknown" ); + SetRx( "Unknown" ); + SetTx( "Unknown" ); + SetMaxRx( "Unknown" ); + SetMaxTx( "Unknown" ); + SetRoam( "Unknown" ); + SetDuration( "Unknown" ); + SetLifeDuration( "Unknown" ); + SetLifeRx( "Unknown" ); + SetLifeTx( "Unknown" ); + SetManufact( "Unknown" ); + SetModel( "Unknown" ); + SetHardware( "Unknown" ); + SetFirmware( "Unknown" ); + SetMDN( "Unknown" ); + SetMIN( "Unknown" ); + SetESN( "Unknown" ); + SetMEID( "Unknown" ); + SetIMEI( "Unknown" ); + SetIMSI( "Unknown" ); + + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +ETHOD: + OnStartDataSession (Public Method) + +DESCRIPTION: + Starts a data session + +PARAMETERS: + pFailureCode [ O ] - Call failure code, if provided + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cSampleCM::OnStartDataSession( ULONG * pFailureCode ) +{ + mbInitiatedStartDataSession = true; + + // Use provided values, if not empty strings + LPCSTR pAPN = (mAPN.size() == 0) ? 0 : mAPN.c_str(); + LPCSTR pUsername = (mUsername.size() == 0) ? 0 : mUsername.c_str(); + LPCSTR pPassword = (mPassword.size() == 0) ? 0 : mPassword.c_str(); + + ULONG rc = mGobi.StartDataSession( pAPN, + pUsername, + pPassword, + &mSessionID, + pFailureCode ); + if (rc == eGOBI_ERR_NONE) + { + mPreviousRX = 0; + mPreviousTX = 0; + mTotalRX = 0; + mTotalTX = 0; + mTotalDuration = 0; + mStartTime = GetTickCount(); + } + else + { + mbInitiatedStartDataSession = false; + } + + return rc; +} + +/*=========================================================================== +METHOD: + CancelDataSession (Public Method) + +DESCRIPTION: + Cancels an in progress data session request + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cSampleCM::OnCancelDataSession() +{ + return mGobi.CancelDataSession(); +} + +/*=========================================================================== +METHOD: + OnStopDataSession (Public Method) + +DESCRIPTION: + Calls WDSStopNetworkInterface + +RETURN VALUE: + ULONG +===========================================================================*/ +ULONG cSampleCM::OnStopDataSession() +{ + if (mSessionID == 0xFFFFFFFF) + { + return eGOBI_ERR_GENERAL; + } + + mbInitiatedStopDataSession = true; + mDataBearerTech = 0; + + ULONG rc = mGobi.StopDataSession( mSessionID ); + mSessionID = 0xFFFFFFFF; + + return rc; +} + +/*=========================================================================== +METHOD: + OnSignalStrengthCBNotification (Internal Method) + +DESCRIPTION: + Handle signal strength callback notification + +PARAMETERS: + signalStr [ I ] - Signal strength + radioInterface [ I ] - Radio interface +===========================================================================*/ +void cSampleCM::OnSignalStrengthCBNotificaion( + INT8 signalStr, + ULONG radioInterface ) +{ + // Update mServiceSignals + mServiceSignals[radioInterface] = signalStr; + + if (mSessionState == eQMIConnectionStatus_Connected) + { + mDataBearerTech = 0; + } + + UpdateSignalAndTech(); +} + +/*=========================================================================== +METHOD: + OnSessionStateCBNotification (Internal Method) + +DESCRIPTION: + Handle session state callback notification + +PARAMETERS: + state [ I ] - Session state +===========================================================================*/ +void cSampleCM::OnSessionStateCBNotification( ULONG state ) +{ + // Was the state change triggered externally? + bool bStateChangeExternal = false; + + // Save session state + if (state == eQMIConnectionStatus_Connected) + { + // Started externally + if (mbInitiatedStartDataSession == false) + { + bStateChangeExternal = true; + mStartTime = GetTickCount(); + } + } + else + { + mDataBearerTech = 0; + + // Stopped externally + if (mbInitiatedStopDataSession == false) + { + // Store all life total variables + mLifeTotalDuration += mTotalDuration; + + // Reset all totals + bStateChangeExternal = true; + mStartTime = 0; + mPreviousRX = 0; + mPreviousTX = 0; + mTotalRX = 0; + mTotalTX = 0; + mTotalDuration = 0; + } + } + + // Update the session state + UpdateSessionState( bStateChangeExternal, state ); + + // Update the signal strength and technology + UpdateSignalAndTech(); + + // Reset to false + mbInitiatedStartDataSession = false; + mbInitiatedStopDataSession = false; +} + +/*=========================================================================== +METHOD: + OnDataBearerCBNotification (Internal Method) + +DESCRIPTION: + Handle data bearer callback notification + +PARAMETERS: + dataBearerTech [ I ] - Data bearer technology +===========================================================================*/ +void cSampleCM::OnDataBearerCBNotification( ULONG dataBearerTech ) +{ + if (dataBearerTech != eQMIDataBearerTechnologies_Unknown) + { + mDataBearerTech = dataBearerTech; + UpdateSignalAndTech(); + } +} + +/*=========================================================================== +METHOD: + OnDataCapsNotification (Internal Method) + +DESCRIPTION: + Handle data capabilities callback notification + +PARAMETERS: + numDataCaps [ I ] - Number of data capabilities + pDataCaps [ I ] - Data Capabilites +===========================================================================*/ +void cSampleCM::OnDataCapsNotification( + ULONG numDataCaps, + eQMINASDataServiceCapabilities2 * pDataCaps ) +{ + // Clear saved data capabilities in order to update + mDataCapabilities.clear(); + + // Populate list with new capabilities + for (ULONG c = 0; c < numDataCaps; c++) + { + ULONG dataCaps = pDataCaps[c]; + if ( (dataCaps != 0xFFFFFFFF) + && (dataCaps != 0) ) + { + mDataCapabilities.push_back( pDataCaps[c] ); + } + } + + UpdateSignalAndTech(); +} + +/*=========================================================================== +METHOD: + OnByteTotalsNotification (Internal Method) + +DESCRIPTION: + Handle byte totals callback notification + +PARAMETERS: + rx [ I ] - received bytes + tx [ I ] - transmitted bytes +===========================================================================*/ +void cSampleCM::OnByteTotalsNotification( ULONGLONG rx, ULONGLONG tx ) +{ + mTotalTX = tx; + mTotalRX = rx; +} + +/*=========================================================================== +METHOD: + UpdateSignalAndTech (Public Method) + +DESCRIPTION: + Update the signal strength and technology display +===========================================================================*/ +void cSampleCM::UpdateSignalAndTech() +{ + std::string radioStr = "Unknown"; + std::string ssStr = "Unknown"; + ULONG radioVal = eQMINASRadioInterfaces_NoneNoService; + + // If connected, use data bearer + if (mDataBearerTech != 0) + { + switch (mDataBearerTech) + { + case eQMIDataBearerTechnologies_CDMA20001x: + radioStr = "CDMA 1xRTT"; + radioVal = eQMINASRadioInterfaces_CDMA20001x; + break; + + case eQMIDataBearerTechnologies_CDMA20001xEVDORev0: + radioStr = "CDMA 1xEVDO Rev 0"; + radioVal = eQMINASRadioInterfaces_CDMA2000HRPD; + break; + + case eQMIDataBearerTechnologies_GPRS: + radioStr = "GRPS"; + radioVal = eQMINASRadioInterfaces_GSM; + break; + + case eQMIDataBearerTechnologies_WCDMA: + radioStr = "WCDMA"; + radioVal = eQMINASRadioInterfaces_UMTS; + break; + + case eQMIDataBearerTechnologies_CDMA20001xEVDORevA: + radioStr = "CDMA 1xEVDO Rev A"; + radioVal = eQMINASRadioInterfaces_CDMA2000HRPD; + break; + + case eQMIDataBearerTechnologies_EGPRS: + radioStr = "EDGE"; + radioVal = eQMINASRadioInterfaces_GSM; + break; + + case eQMIDataBearerTechnologies_HSDPAWCDMA: + radioStr = "HSDPA DL, WCDMA UL"; + radioVal = eQMINASRadioInterfaces_UMTS; + break; + + case eQMIDataBearerTechnologies_WCDMAHSUPA: + radioStr = "WCDMA DL, HSUPA UL"; + radioVal = eQMINASRadioInterfaces_UMTS; + break; + + case eQMIDataBearerTechnologies_HSDPAHSUPA: + radioStr = "HSDPA DL, HSUPA UL"; + radioVal = eQMINASRadioInterfaces_UMTS; + break; + + case eQMIDataBearerTechnologies_LTE: + radioStr = "LTE"; + radioVal = eQMINASRadioInterfaces_LTE; + break; + + case eQMIDataBearerTechnologies_CDMA2000EHRPD: + radioStr = "CDMA 1xEVDO eHRPD"; + radioVal = eQMINASRadioInterfaces_CDMA2000HRPD; + break; + + case eQMIDataBearerTechnologies_HSDPAPlusWCDMA: + radioStr = "HSDPA+ DL, WCDMA UL"; + radioVal = eQMINASRadioInterfaces_UMTS; + break; + + case eQMIDataBearerTechnologies_HSDPAPlusHSUPA: + radioStr = "HSDPA+ DL, HSUPA UL"; + radioVal = eQMINASRadioInterfaces_UMTS; + break; + + case eQMIDataBearerTechnologies_DualCellHSDPAPlusWCDMA: + radioStr = "Dual Cell HSDPA+ DL, WCDMA UL"; + radioVal = eQMINASRadioInterfaces_UMTS; + break; + + case eQMIDataBearerTechnologies_DualCellHSDPAPlusHSUPA: + radioStr = "Dual Cell HSDPA+ DL, HSUPA UL"; + radioVal = eQMINASRadioInterfaces_UMTS; + break; + } + + if ( (radioVal != eQMINASRadioInterfaces_NoneNoService) + && (mServiceSignals.find( radioVal ) != mServiceSignals.end()) + && (mServiceSignals[radioVal] != SCHAR_MAX) ) + { + std::ostringstream temp; + temp << (INT)mServiceSignals[radioVal]; + ssStr = temp.str(); + } + } + else + { + // When not connected we have to pick the most preferred data capability + eQMINASDataServiceCapabilities2 mostPreferredCap + = (eQMINASDataServiceCapabilities2)0xff; + std::list ::const_iterator pIter; + std::list ::const_iterator pDataCapsItr; + + pIter = mPreferredServices.begin(); + + bool bDone = false; + while ( (pIter != mPreferredServices.end()) + && (bDone != true) ) + { + pDataCapsItr = mDataCapabilities.begin(); + while (pDataCapsItr != mDataCapabilities.end()) + { + if (*pIter == *pDataCapsItr) + { + mostPreferredCap = (eQMINASDataServiceCapabilities2)*pIter; + bDone = true; + break; + } + + pDataCapsItr++; + } + + pIter++; + } + + // Determine the best radio interface reported + eQMINASRadioInterfaces preferredRadioIf; + preferredRadioIf = eQMINASRadioInterfaces_NoneNoService; + + if (mServiceSignals.find( eQMINASRadioInterfaces_LTE ) != mServiceSignals.end()) + { + preferredRadioIf = eQMINASRadioInterfaces_LTE; + } + else if (mServiceSignals.find( eQMINASRadioInterfaces_CDMA2000HRPD ) != mServiceSignals.end()) + { + preferredRadioIf = eQMINASRadioInterfaces_CDMA2000HRPD; + } + else if (mServiceSignals.find( eQMINASRadioInterfaces_CDMA20001x ) != mServiceSignals.end()) + { + preferredRadioIf = eQMINASRadioInterfaces_CDMA20001x; + } + else if (mServiceSignals.find( eQMINASRadioInterfaces_UMTS ) != mServiceSignals.end()) + { + preferredRadioIf = eQMINASRadioInterfaces_UMTS; + } + else if (mServiceSignals.find( eQMINASRadioInterfaces_GSM ) != mServiceSignals.end()) + { + preferredRadioIf = eQMINASRadioInterfaces_GSM; + } + + radioStr = "Unknown"; + ssStr = "Unknown"; + radioVal = eQMINASRadioInterfaces_NoneNoService; + + // Determine sig strength and radio interface to display based on + // most preferred data capabilities + switch (preferredRadioIf) + { + case eQMINASRadioInterfaces_CDMA2000HRPD: + radioStr = "CDMA 1xEVDO"; + if ( (mostPreferredCap == eQMINASDataServiceCapabilities2_CDMA1xEVDORevB) + || (mostPreferredCap == eQMINASDataServiceCapabilities2_CDMA1xEVDORevA) + || (mostPreferredCap == eQMINASDataServiceCapabilities2_CDMA1xEVDORev0) ) + { + radioVal = eQMINASRadioInterfaces_CDMA2000HRPD; + if ( (mServiceSignals.find( radioVal ) != mServiceSignals.end()) + && (mServiceSignals[radioVal] != SCHAR_MAX) ) + { + std::ostringstream temp; + temp << (INT)mServiceSignals[radioVal]; + ssStr = temp.str(); + } + } + break; + + case eQMINASRadioInterfaces_CDMA20001x: + radioStr = "CDMA 1xRTT"; + if (mostPreferredCap == eQMINASDataServiceCapabilities2_CDMA) + { + radioVal = eQMINASRadioInterfaces_CDMA20001x; + if ( (mServiceSignals.find( radioVal ) != mServiceSignals.end()) + && (mServiceSignals[radioVal] != SCHAR_MAX) ) + { + std::ostringstream temp; + temp << (INT)mServiceSignals[radioVal]; + ssStr = temp.str(); + } + } + break; + + case eQMINASRadioInterfaces_UMTS: + radioStr = "WCDMA"; + if ( (mostPreferredCap == eQMINASDataServiceCapabilities2_DCHSDPAPlus) + || (mostPreferredCap == eQMINASDataServiceCapabilities2_HSDPAPlus) + || (mostPreferredCap == eQMINASDataServiceCapabilities2_HSDPA) + || (mostPreferredCap == eQMINASDataServiceCapabilities2_HSUPA) + || (mostPreferredCap == eQMINASDataServiceCapabilities2_WCDMA) ) + { + radioVal = eQMINASRadioInterfaces_UMTS; + if ( (mServiceSignals.find( radioVal ) != mServiceSignals.end()) + && (mServiceSignals[radioVal] != SCHAR_MAX) ) + { + std::ostringstream temp; + temp << (INT)mServiceSignals[radioVal]; + ssStr = temp.str(); + } + } + break; + + case eQMINASRadioInterfaces_GSM: + radioStr = "GSM"; + if ( (mostPreferredCap == eQMINASDataServiceCapabilities2_GPRS) + || (mostPreferredCap == eQMINASDataServiceCapabilities2_EGPRS) + || (mostPreferredCap == eQMINASDataServiceCapabilities2_GSM) ) + { + radioVal = eQMINASRadioInterfaces_GSM; + if ( (mServiceSignals.find( radioVal ) != mServiceSignals.end()) + && (mServiceSignals[radioVal] != SCHAR_MAX) ) + { + std::ostringstream temp; + temp << (INT)mServiceSignals[radioVal]; + ssStr = temp.str(); + } + } + break; + + case eQMINASRadioInterfaces_LTE: + radioStr = "LTE"; + if (mostPreferredCap == eQMINASDataServiceCapabilities2_LTE) + { + radioVal = eQMINASRadioInterfaces_LTE; + if ( (mServiceSignals.find( radioVal ) != mServiceSignals.end()) + && (mServiceSignals[radioVal] != SCHAR_MAX) ) + { + std::ostringstream temp; + temp << (INT)mServiceSignals[radioVal]; + ssStr = temp.str(); + } + } + break; + + case eQMINASRadioInterfaces_NoneNoService: + if ( (mServiceSignals.find( eQMINASRadioInterfaces_CDMA2000HRPD ) != mServiceSignals.end()) + && (mServiceSignals[eQMINASRadioInterfaces_CDMA2000HRPD] != SCHAR_MAX) ) + { + radioStr = "CDMA 1xEVDO"; + std::ostringstream temp; + temp << (INT)mServiceSignals[eQMINASRadioInterfaces_CDMA2000HRPD]; + ssStr = temp.str(); + } + else if ( (mServiceSignals.find( eQMINASRadioInterfaces_CDMA20001x ) != mServiceSignals.end()) + && (mServiceSignals[eQMINASRadioInterfaces_CDMA20001x] != SCHAR_MAX) ) + { + radioStr = "CDMA 1xRTT"; + std::ostringstream temp; + temp << (INT)mServiceSignals[eQMINASRadioInterfaces_CDMA20001x]; + ssStr = temp.str(); + } + else if ( (mServiceSignals.find( eQMINASRadioInterfaces_UMTS ) != mServiceSignals.end()) + && (mServiceSignals[eQMINASRadioInterfaces_UMTS] != SCHAR_MAX) ) + { + radioStr = "WCDMA"; + std::ostringstream temp; + temp << (INT)mServiceSignals[eQMINASRadioInterfaces_UMTS]; + ssStr = temp.str(); + } + else if ( (mServiceSignals.find( eQMINASRadioInterfaces_GSM ) != mServiceSignals.end()) + && (mServiceSignals[eQMINASRadioInterfaces_GSM] != SCHAR_MAX) ) + { + radioStr = "GSM"; + std::ostringstream temp; + temp << (INT)mServiceSignals[eQMINASRadioInterfaces_GSM]; + ssStr = temp.str(); + } + else if ( (mServiceSignals.find( eQMINASRadioInterfaces_LTE ) != mServiceSignals.end()) + && (mServiceSignals[eQMINASRadioInterfaces_LTE] != SCHAR_MAX) ) + { + radioStr = "LTE"; + std::ostringstream temp; + temp << (INT)mServiceSignals[eQMINASRadioInterfaces_LTE]; + ssStr = temp.str(); + } + break; + + default: + radioStr = "Unknown"; + ssStr = "Unknown"; + } + } + + SetRSSI( ssStr ); + SetTech( radioStr ); +} + +/*=========================================================================== +METHOD: + UpdateSessionState (Public Method) + +DESCRIPTION: + Update the session state display + Start/stop UpdateNetworkInfo thread + +PARAMETERS: + bExternal [ I ] - Was the state change triggered externally + state [ I ] - State of session + +RETURN VALUE: + None +===========================================================================*/ +void cSampleCM::UpdateSessionState( + bool bExternal, + ULONG state ) +{ + mSessionState = state; + + if (bExternal == true) + { + mInitialState = state; + } + + LPCSTR pState = "Unknown"; + switch (state) + { + // Disconnected + case 1: + { + pState = "Disconnected"; + + // Stop the network info thread, if running + if (mUpdateNetworkInfoThreadID != 0) + { + mUpdateNetworkInfoEvent.Set( 0 ); + + pthread_join( mUpdateNetworkInfoThreadID, NULL ); + mUpdateNetworkInfoThreadID = 0; + + mLifeTotalDuration += mTotalDuration; + } + + // Reset all totals + mPreviousRX = 0; + mPreviousTX = 0; + mTotalRX = 0; + mTotalTX = 0; + mTotalDuration = 0; + mStartTime = 0; + + UpdateRateDisplay(); + UpdateTimeDisplay(); + } + break; + + // Connected + case 2: + { + if (bExternal == true) + { + pState = "External Con"; + } + else + { + pState = "Connected"; + } + + // Start the network info thread, if not running + if (mUpdateNetworkInfoThreadID == 0) + { + // Begin updating network info + int rc = pthread_create( &mUpdateNetworkInfoThreadID, + 0, + UpdateNetworkInfoThread, + this ); + if (rc != 0) + { + TRACE( "error starting network info thread\n" ); + } + } + } + break; + + // Suspended + case 3: + pState = "Suspended"; + break; + + // Connecting + case 4: + if (bExternal == true) + { + pState = "Ext Connecting"; + } + else + { + pState = "Connecting"; + } + break; + } + + SetState( pState ); +} + +/*=========================================================================== +METHOD: + UpdateRateDisplay (Public Method) + +DESCRIPTION: + Calculate and update the tx, rx rates being displayed + +PARAMETERS: + None + +RETURN VALUE: + None +===========================================================================*/ +void cSampleCM::UpdateRateDisplay() +{ + // Update TX/RX Bytes + ULONGLONG deltaRX = 0; + ULONGLONG deltaTX = 0; + + // Only update rates if connected + if (mSessionState == eQMIConnectionStatus_Connected) + { + // First time through, don't use the deltas + if (mTotalRX != 0) + { + deltaRX = mTotalRX - mPreviousRX; + } + + if (mTotalTX != 0) + { + deltaTX = mTotalTX - mPreviousTX; + } + + // Update life total byte variables + mLifeTotalRX += deltaRX; + mLifeTotalTX += deltaTX; + + mPreviousRX = mTotalRX; + mPreviousTX = mTotalTX; + } + + std::ostringstream tmp; + tmp << deltaRX; + SetRx( tmp.str() ); + + tmp.str( "" ); + tmp << deltaTX; + SetTx( tmp.str() ); + + tmp.str( "" ); + tmp << mLifeTotalRX; + SetLifeRx( tmp.str() ); + + tmp.str( "" ); + tmp << mLifeTotalTX; + SetLifeTx( tmp.str() ); +} + +/*=========================================================================== +METHOD: + UpdateTimeDisplay (Public Method) + +DESCRIPTION: + Calculate and update the connection time being displayed + +PARAMETERS: + None + +RETURN VALUE: + None +===========================================================================*/ +void cSampleCM::UpdateTimeDisplay() +{ + DWORD elapsedTime = 0; + DWORD lifeTotalTime = 0; + + // Update session duration + if ( (mSessionState == eQMIConnectionStatus_Connected) + && (mStartTime != 0) ) + { + // Convert ms to seconds + mTotalDuration = (GetTickCount() - mStartTime) / 1000; + elapsedTime = (DWORD)mTotalDuration; + lifeTotalTime = (DWORD)(mLifeTotalDuration + mTotalDuration); + } + else + { + elapsedTime = 0; + lifeTotalTime = (DWORD)mLifeTotalDuration; + } + + std::ostringstream timeStr; + + // Format both into hh:mm:ss + // "%02d:%02d:%02d" + timeStr << std::setfill( '0' ) << std::setw( 2 ) << (elapsedTime / 3600) % 60 + << std::setw( 1 ) << ":" + << std::setfill( '0' ) << std::setw( 2 ) << (elapsedTime / 60) % 60 + << std::setw( 1 ) << ":" + << std::setfill( '0' ) << std::setw( 2 ) << elapsedTime % 60; + SetDuration( timeStr.str() ); + + timeStr.str( "" ); + timeStr << std::setfill( '0' ) << std::setw( 2 ) << (lifeTotalTime / 3600) % 60 + << std::setw( 1 ) << ":" + << std::setfill( '0' ) << std::setw( 2 ) << (lifeTotalTime / 60) % 60 + << std::setw( 1 ) << ":" + << std::setfill( '0' ) << std::setw( 2 ) << lifeTotalTime % 60; + SetLifeDuration( timeStr.str() ); +} + +/*=========================================================================== +METHOD: + CheckConnectedStats (Public Method) + +DESCRIPTION: + Check stats which are only valid during a connection +===========================================================================*/ +void cSampleCM::CheckConnectedStats() +{ + ULONG rc = mGobi.GetDataBearerTechnology( &mDataBearerTech ); + if (rc != eGOBI_ERR_NONE || mDataBearerTech == ULONG_MAX) + { + TRACE( "GetDataBearerTechnology error %lu\n", rc ); + return; + } + + ULONGLONG duration; + rc = mGobi.GetSessionDuration( &duration ); + if (rc != eGOBI_ERR_NONE) + { + TRACE( "GetSessionDuration error %lu\n", rc ); + return; + } + + mStartTime = GetTickCount() - duration; + + UpdateSignalAndTech(); +} + +/*=========================================================================== +METHOD: + UpdateDeviceInfo (Public Method) + +DESCRIPTION: + Update the device info stats +===========================================================================*/ +void cSampleCM::UpdateDeviceInfo() +{ + ULONG status = 0; + + BYTE strSz1 = 255; + BYTE strSz2 = 255; + BYTE strSz3 = 255; + CHAR str1[255]; + CHAR str2[255]; + CHAR str3[255]; + str1[0] = 0; + str2[0] = 0; + str3[0] = 0; + + // Get manufacturer + status = mGobi.GetManufacturer( strSz1, str1 ); + if (status != 0) + { + TRACE( "GetManufacturer() = %lu\n", status ); + return; + } + + if (str1[0] != 0) + { + SetManufact( &str1[0] ); + } + + // Get model ID + str1[0] = 0; + status = mGobi.GetModelID( strSz1, str1 ); + if (status != 0) + { + TRACE( "GetModelID() = %lu\n", status ); + return; + } + + if (str1[0] != 0) + { + std::ostringstream tmp; + if (strncmp( "88", &str1[0], 2 ) == 0) + { + tmp << "Gobi MDM-1000"; + } + else if (strncmp( "12", &str1[0], 2 ) == 0) + { + tmp << "Gobi MDM-2000"; + } + else + { + tmp << "Unknown (" << &str1[0] << ")"; + } + + SetModel( tmp.str() ); + } + + // Get firmware revision + str1[0] = 0; + status = mGobi.GetFirmwareRevision( strSz1, str1 ); + if (status != 0) + { + TRACE( "GetFirmwareRevision() = %lu\n", status ); + return; + } + + if (str1[0] != 0) + { + SetFirmware( &str1[0] ); + } + + // Get hardware revision + str1[0] = 0; + status = mGobi.GetHardwareRevision( strSz1, str1 ); + if (status != 0) + { + TRACE( "GetHardwareRevision() = %lu\n", status ); + return; + } + + if (str1[0] != 0) + { + SetHardware( &str1[0] ); + } + + // Get MDN/MIN + str1[0] = 0; + str2[0] = 0; + status = mGobi.GetVoiceNumber( strSz1, str1, strSz2, str2 ); + if (status != 0) + { + if (status == 1016) + { + // Not provisioned + SetMDN( "Not provisioned" ); + SetMIN( "Not provisioned" ); + } + else + { + TRACE( "GetVoiceNumber() = %lu\n", status ); + return; + } + } + + if (str1[0] != 0) + { + SetMDN( &str1[0] ); + } + + if (str2[0] != 0) + { + SetMIN( &str2[0] ); + } + + // Get ESN/IMEI/MEID + str1[0] = 0; + str2[0] = 0; + str3[0] = 0; + status = mGobi.GetSerialNumbers( strSz1, + str1, + strSz2, + str2, + strSz3, + str3 ); + if (status != 0) + { + if (status == 1016) + { + // Not provisioned + SetESN( "Not provisioned" ); + SetIMEI( "Not provisioned" ); + SetMEID( "Not provisioned" ); + } + else + { + TRACE( "GetSerialNumbers() = %lu\n", status ); + return; + } + } + + if (str1[0] != 0) + { + SetESN( &str1[0] ); + } + + if (str2[0] != 0) + { + SetIMEI( &str2[0] ); + } + + if (str3[0] != 0) + { + SetMEID( &str3[0] ); + } + + // Get IMSI + str1[0] = 0; + status = mGobi.GetIMSI( strSz1, str1 ); + if (status != 0) + { + if (status == 1016) + { + // Not provisioned + SetIMSI( "Not provisioned" ); + } + else + { + TRACE( "GetIMSI() = %lu\n", status ); + return; + } + } + + if (str1[0] != 0) + { + SetIMSI( &str1[0] ); + } +} + +/*=========================================================================== +METHOD: + UpdateConnectionInfo (Public Method) + +DESCRIPTION: + Update the connection info stats +===========================================================================*/ +void cSampleCM::UpdateConnectionInfo() +{ + // Re-usable buffer + std::ostringstream tmp; + + // Get session state + ULONG rc = mGobi.GetSessionState( &mSessionState ); + if (rc != eGOBI_ERR_NONE || mSessionState == ULONG_MAX) + { + TRACE( "GetSessionState error %lu\n", rc ); + return; + } + + UpdateSessionState( mSessionID != 0xFFFFFFFF, mSessionState ); + + // If connected, refresh data bearer technology and session duration + if (mSessionState == eQMIConnectionStatus_Connected) + { + CheckConnectedStats(); + } + + INT8 signalStrengths[MAX_SIGNALS]; + ULONG radioInterfaces[MAX_SIGNALS]; + + // Get the signal strengths + rc = mGobi.GetSignalStrengths( &signalStrengths[0], + &radioInterfaces[0] ); + if (rc != eGOBI_ERR_NONE && rc != eGOBI_ERR_NO_SIGNAL) + { + TRACE( "GetSignalStrengths error %lu\n", rc ); + return; + } + + // Map signal strengths to RadioIf types + for (ULONG s = 0; s < MAX_SIGNALS; s++) + { + INT8 signal = signalStrengths[s]; + + switch (radioInterfaces[s]) + { + case eQMINASRadioInterfaces_NoneNoService: + mServiceSignals[eQMINASRadioInterfaces_NoneNoService] = signal; + break; + + case eQMINASRadioInterfaces_CDMA20001x: + mServiceSignals[eQMINASRadioInterfaces_CDMA20001x] = signal; + break; + + case eQMINASRadioInterfaces_CDMA2000HRPD: + mServiceSignals[eQMINASRadioInterfaces_CDMA2000HRPD] = signal; + break; + + case eQMINASRadioInterfaces_AMPS: + mServiceSignals[eQMINASRadioInterfaces_AMPS] = signal; + break; + + case eQMINASRadioInterfaces_GSM: + mServiceSignals[eQMINASRadioInterfaces_GSM] = signal; + break; + + case eQMINASRadioInterfaces_UMTS: + mServiceSignals[eQMINASRadioInterfaces_UMTS] = signal; + break; + + case eQMINASRadioInterfaces_LTE: + mServiceSignals[eQMINASRadioInterfaces_LTE] = signal; + break; + } + } + + ULONG curTX = 0; + ULONG curRX = 0; + ULONG maxTX = 0; + ULONG maxRX = 0; + + // Get the connection rate + rc = mGobi.GetConnectionRate( &curTX, &curRX, &maxTX, &maxRX ); + if (rc != 0) + { + TRACE( "GetConnectionRate error %lu\n", rc ); + return; + } + + // Store the max data rates + tmp.str( "" ); + tmp << maxRX; + SetMaxRx( tmp.str() ); + + tmp.str( "" ); + tmp << maxTX; + SetMaxTx( tmp.str() ); + + + + ULONG dataCapabilities[MAX_DATA_CAPABILITIES]; + WORD srvMCC = 0; + WORD srvMNC = 0; + BYTE srvNameSize = 255; + CHAR srvName[255]; + srvName[0] = 0; + WORD sid = 0; + WORD nid = 0; + ULONG roam = 0; + + // Get the serving network info + rc = mGobi.GetServingNetwork( &dataCapabilities[0], + &srvMCC, + &srvMNC, + srvNameSize, + &srvName[0], + &sid, + &nid, + &roam ); + if (rc != 0) + { + TRACE( "GetServingNetwork error %lu\n", rc ); + return; + } + + // Store data capabilities + for (ULONG c = 0; c < MAX_DATA_CAPABILITIES; c++) + { + if ( (dataCapabilities[c] != ULONG_MAX) + && (dataCapabilities[c] != 0) ) + { + mDataCapabilities.push_back( dataCapabilities[c] ); + } + } + + if (roam == 0xFFFFFFFF) + { + SetRoam( "Unknown" ); + } + else + { + tmp.str( "" ); + tmp << roam; + SetRoam( tmp.str() ); + } + + // Update the signal strength and technology fields + if (mSessionState != eQMIConnectionStatus_Connected) + { + mDataBearerTech = 0; + } + + UpdateSignalAndTech(); + + // Setup callbacks + rc = mGobi.SetWDSEventReportCB( WDSEventReportCallback, 1 ); + if (rc != eGOBI_ERR_NONE) + { + TRACE( "SetWDSEventReportCB error %lu\n", rc ); + return; + } + + rc = mGobi.SetWDSSessionStateCB( WDSSessionStateCallback ); + if (rc != eGOBI_ERR_NONE) + { + TRACE( "SetWDSSessionStateCB error %lu\n", rc ); + return; + } + + BYTE thresSz = 5; + INT8 thres[5] = {-90, -85, -80, -75, -70}; + rc = mGobi.SetNASEventReportCB( NASEventReportCallback, + thresSz, + &thres[0] ); + if (rc != eGOBI_ERR_NONE) + { + TRACE( "SetNASEventReportCB error %lu\n", rc ); + return; + } + + rc = mGobi.SetNASServingSystemCB( NASServingSystemCallback ); + if (rc != eGOBI_ERR_NONE) + { + TRACE( "SetNASServingSystemCB error %lu\n", rc ); + return; + } +} diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/SampleCM.h b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/SampleCM.h new file mode 100644 index 0000000..b116fea --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/SampleCM.h @@ -0,0 +1,397 @@ +/*=========================================================================== +FILE: + SampleCM.h + +DESCRIPTION: + Generic class to act as Sample CM interface + +PUBLIC CLASSES AND METHODS: + cSampleCM + Generic class to act as Sample CM interface + +Copyright (c) 2013, 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 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. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "StdAfx.h" +#include "GobiCMDLL.h" +#include "Event.h" + +#include +#include +#include + +// Prototypes +void * DeviceDetectionThread( void * pData ); +void * UpdateNetworkInfo( void * pData ); + +// A global pointer to the CM, used by the callbacks +extern class cSampleCM * gpCM; + +/*=========================================================================*/ +// Class cSampleCM +/*=========================================================================*/ +class cSampleCM +{ + public: + // Constructor + cSampleCM() + : mDeviceID(), + mSessionState( 0 ), + mSessionID( 0xFFFFFFFF ), + mInitialState( 0xFFFFFFFF ), + mStartTime( 0 ), + mPreviousRX( 0 ), + mPreviousTX( 0 ), + mTotalRX( 0 ), + mTotalTX( 0 ), + mLifeTotalRX( 0 ), + mLifeTotalTX( 0 ), + mCurrentDuration( 0 ), + mTotalDuration( 0 ), + mLifeTotalDuration( 0 ), + mbInitiatedStartDataSession( false ), + mbInitiatedStopDataSession( false ), + mDataBearerTech( eQMIDataBearerTechnologies_Unknown ), + mDeviceDetectionThreadID( 0 ), + mUpdateNetworkInfoThreadID( 0 ) + { + mDeviceDetectionStopPipe[READING] = -1; + mDeviceDetectionStopPipe[WRITING] = -1; + + // Create an ordered list of service preferences + mPreferredServices.push_back( eQMINASDataServiceCapabilities2_CDMA1xEVDORevB ); + mPreferredServices.push_back( eQMINASDataServiceCapabilities2_CDMA1xEVDORevA ); + mPreferredServices.push_back( eQMINASDataServiceCapabilities2_CDMA1xEVDORev0 ); + mPreferredServices.push_back( eQMINASDataServiceCapabilities2_CDMA ); + mPreferredServices.push_back( eQMINASDataServiceCapabilities2_DCHSDPAPlus ); + mPreferredServices.push_back( eQMINASDataServiceCapabilities2_HSDPAPlus ); + mPreferredServices.push_back( eQMINASDataServiceCapabilities2_HSDPA ); + mPreferredServices.push_back( eQMINASDataServiceCapabilities2_WCDMA ); + mPreferredServices.push_back( eQMINASDataServiceCapabilities2_EGPRS ); + mPreferredServices.push_back( eQMINASDataServiceCapabilities2_GPRS ); + mPreferredServices.push_back( eQMINASDataServiceCapabilities2_GSM ); + } + + // Destructor + ~cSampleCM(); + + // Initialize UI, begin waiting for devices + virtual bool Init(); + + // Connect to a device and send initial callback registrations + virtual ULONG Connect( LPCSTR pInterface ); + + // Disconnect from a device and set members as "Unknown" + virtual ULONG Disconnect(); + + // Process a start data session request + virtual ULONG OnStartDataSession( ULONG * pFailureCode ); + + // Process a cancel data session request + virtual ULONG OnCancelDataSession(); + + // Process a stop data session request + virtual ULONG OnStopDataSession(); + + // Set mState + virtual void SetState( const std::string & state ) + { + mState = state; + } + + // Set mRSSI + virtual void SetRSSI( const std::string & rssi ) + { + mRSSI = rssi; + } + + // Set mTech + virtual void SetTech( const std::string & tech ) + { + mTech = tech; + } + + // Set mRx + virtual void SetRx( const std::string & rx ) + { + mRx = rx; + } + + // Set mTx + virtual void SetTx( const std::string & tx ) + { + mTx = tx; + } + + // Set mMaxRx + virtual void SetMaxRx( const std::string & maxRx ) + { + mMaxRx = maxRx; + } + + // Set mMaxTx + virtual void SetMaxTx( const std::string & maxTx ) + { + mMaxTx = maxTx; + } + + // Set mRoam + virtual void SetRoam( const std::string & roam ) + { + mRoam = roam; + } + + // Set mDuration + virtual void SetDuration( const std::string & duration ) + { + mDuration = duration; + } + + // Set mLifeDuration + virtual void SetLifeDuration( const std::string & lifeDuration ) + { + mLifeDuration = lifeDuration; + } + + // Set mLifeRx + virtual void SetLifeRx( const std::string & lifeRx ) + { + mLifeRx = lifeRx; + } + + // Set mLifeTx + virtual void SetLifeTx( const std::string & lifeTx ) + { + mLifeTx = lifeTx; + } + + // Set mManufact + virtual void SetManufact( const std::string & manufact ) + { + mManufact = manufact; + } + + // Set mModel + virtual void SetModel( const std::string & model ) + { + mModel = model; + } + + // Set mHardware + virtual void SetHardware( const std::string & hardware ) + { + mHardware = hardware; + } + + // Set mFirmware + virtual void SetFirmware( const std::string & firmware ) + { + mFirmware = firmware; + } + + // Set mMDN + virtual void SetMDN( const std::string & mdn ) + { + mMDN = mdn; + } + + // Set mMIN + virtual void SetMIN( const std::string & min ) + { + mMIN = min; + } + + // Set mESN + virtual void SetESN( const std::string & esn ) + { + mESN = esn; + } + + // Set mMEID + virtual void SetMEID( const std::string & meid ) + { + mMEID = meid; + } + + // Set mIMEI + virtual void SetIMEI( const std::string & imei ) + { + mIMEI = imei; + } + + // Set mIMSI + virtual void SetIMSI( const std::string & imsi ) + { + mIMSI = imsi; + } + + // Handle signal strength callback notification + void OnSignalStrengthCBNotificaion( + INT8 signalStr, + ULONG radioInterface ); + + // Handle session state callback notification + void OnSessionStateCBNotification( ULONG state ); + + // Handle data bearer callback notification + void OnDataBearerCBNotification( ULONG dataBearerTech ); + + // Handle data capabilities callback notification + void OnDataCapsNotification( + ULONG numDataCaps, + eQMINASDataServiceCapabilities2 * pDataCaps ); + + // Handle byte totals callback notification + void OnByteTotalsNotification( ULONGLONG rx, ULONGLONG tx ); + + // Update the signal strength and technology + void UpdateSignalAndTech(); + + // Update the session state + void UpdateSessionState( + bool bExternal, + ULONG state ); + + // Calculate and update the connection time being displayed + void UpdateTimeDisplay(); + + // Calculate and update the tx and rx rates being displayed + void UpdateRateDisplay(); + + // Check data bearer and duration, which are only available while + // connected + void CheckConnectedStats(); + + // Update the device info stats + void UpdateDeviceInfo(); + + // Update the Connection Stats + void UpdateConnectionInfo(); + + protected: + + /* Class for interfacing with Gobi API */ + cGobiCMDLL mGobi; + + /* Connected device's ID */ + std::string mDeviceID; + + /* All the display elements */ + std::string mState; + std::string mRSSI; + std::string mTech; + std::string mRx; + std::string mTx; + std::string mMaxRx; + std::string mMaxTx; + std::string mRoam; + std::string mDuration; + std::string mLifeDuration; + std::string mLifeRx; + std::string mLifeTx; + std::string mManufact; + std::string mModel; + std::string mHardware; + std::string mFirmware; + std::string mMDN; + std::string mMIN; + std::string mESN; + std::string mMEID; + std::string mIMEI; + std::string mIMSI; + + /* All the input elements */ + std::string mAPN; + std::string mUsername; + std::string mPassword; + + /* Session state */ + ULONG mSessionState; + + /* Data session ID */ + ULONG mSessionID; + + /* Initial state, used to determine if the connection + was initiated internally or externally */ + ULONG mInitialState; + + /* Preferred service order */ + std::list mPreferredServices; + + /* Stores the time that connection was started */ + ULONGLONG mStartTime; + + /* Stores the connection rates updated by callbacks */ + ULONGLONG mPreviousRX; + ULONGLONG mPreviousTX; + ULONGLONG mTotalRX; + ULONGLONG mTotalTX; + ULONGLONG mLifeTotalRX; + ULONGLONG mLifeTotalTX; + + // Current and total durations + ULONGLONG mCurrentDuration; + ULONGLONG mTotalDuration; + ULONGLONG mLifeTotalDuration; + + /* Did we initiate a start data session? */ + bool mbInitiatedStartDataSession; + + /* Did we initiate a stop data session? */ + bool mbInitiatedStopDataSession; + + /* Current signal map */ + std::map mServiceSignals; + + /* Current data bearer technology */ + ULONG mDataBearerTech; + + /* Current data capabilities */ + std::list mDataCapabilities; + + /* Handle to the device detection thread */ + pthread_t mDeviceDetectionThreadID; + int mDeviceDetectionStopPipe[2]; + + // Device detection "thread" + friend void * DeviceDetectionThread( void * pData ); + + /* Handle to the UpdateNetworkInfo thread */ + pthread_t mUpdateNetworkInfoThreadID; + cEvent mUpdateNetworkInfoEvent; + + // Async Network info updater + friend void * UpdateNetworkInfoThread( void * pData ); +}; diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/android/assets/qml/GobiSampleCM/Connect.png b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/android/assets/qml/GobiSampleCM/Connect.png new file mode 100644 index 0000000000000000000000000000000000000000..903d85fe601c40b376942188fcb3d27dc48ad379 GIT binary patch literal 5581 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 boqhfnT$(B@a*X!*00000NkvXXu0mjfc8Rt) literal 0 HcmV?d00001 diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/android/assets/qml/GobiSampleCM/Info.png b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/android/assets/qml/GobiSampleCM/Info.png new file mode 100644 index 0000000000000000000000000000000000000000..69d7cbbdcb5ac6aaf314f4ba7aece8f3dfb1f7aa GIT binary patch literal 5300 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 literal 0 HcmV?d00001 diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/android/res/drawable/logo.png b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/android/res/drawable/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8366c4f673d28c0b0e83d53eb3e458df76ff1a56 GIT binary patch literal 427576 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%0A4XKa-U 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
%^pd)1- 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 b*F=c{nR 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

PrIF)>E; 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 boqhfnT$(B@a*X!*00000NkvXXu0mjfc8Rt) literal 0 HcmV?d00001 diff --git a/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/qml/GobiSampleCM/Info.png b/gobi-api/GobiAPI_2013-07-31-1347/GobiSampleCM/qml/GobiSampleCM/Info.png new file mode 100644 index 0000000000000000000000000000000000000000..69d7cbbdcb5ac6aaf314f4ba7aece8f3dfb1f7aa GIT binary patch literal 5300 zcmV;l6ie%gP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyo3 z4g(66@WsRc02DMyL_t(|+QplDv|Uwo#(!(=bM8Ag_vS%>Bs`Kx2q6g&Km?Hz5D*Mf zbhJKz;eaZl)FHNmqShzSf>n`JQ9Fc6u&pm>r8-1H<)PFlZxn<;cqD|tO>&dm+{Za* zueE0XSZnXS_Br<^AwheRJ@(n>?(>*)e&3vP%{iA65n(SLB7#!NKX;b;ldBlL>!0a8 z?`u@19bEc5KsxXo^(XIU^vQcjUwMvn@MY}qc3f(3qHv<1Z4$|(eMqLvqmQ}_#Ea>D&x+E$W54|#Bft6%^%ow& zjSk@i#3>{b+WE6{;2c=1a2Biu=M+-yrhUJ;Og`$ZOn=+?bnbu9>!OG~Qb6{lV(O%8 z?q$cy3vt^wpek*s-u>wRWe7@Z`0tccgFfb5Ixz%vZr@_x*^2S5QRT-spr z#kbS8csX`(9m6-DPx}07#7QnVctM3=S@CDW*&{$T9bPfUXvBfB8k;&CZS*WSmP0Q8 z3f;5k?vWC9TLHP%ZA#;TTNwWKMd+RiWM3!_eZbL7{`hLlx(C^Q%`vEI1yLG=VD+FV z=id@5KmsMK^9m}Ip>rBI=apb>K!}C3p{Q*gWZ`GN#mskHfUZ_wlOkRl0>mEiIYy$glGQ&+$wl86`yg>&~e_0bQbiM?;|mlls?9 zs_0vE3`bmlD@j}1>xY0$n{MkmhHp3p*|HX;6Ho#9*#}LVM`hu18ms;Z+A6tj1O+0V z9V>j2a4K z6xMiZ7~_?fboFr5id*SDbjhA0Aa{0~)-d+9<6&%ju)5@?&lS=7vBj&>ih|e|Nahoy z;JG-8kZ3(ZY@mTi5IRsI_X$A()@qbe=+17A{^n2UIe7j~k+4$)h&7B}H5(ZoKxzL0 zN=Ym|iq;R70{=nya0bMQ7hV*&fQZNmIss=K&I!&+pn}G^1R*KHVF-^V^+-sq!lo)9 z#Vfqh+s6q%dWcF__wFM=#Q#)D#~8crNM!I?k90+@#TW&VE?TirQh?-CC?UW(j|^2s zdS;-yXQ28If=M%=qtBzDK7!f0iN?T-*ln9>48Dq~H?Rh*t9Ty}e1S<7&gnosp<~8O z-njA}DqY=((1L_k1c)F?(fI!RF%PdqDGjQCP=Z(!(ue?oo3ix{Z{TIk$pwl>DXD{o}~ z)6d;G1w;f!w@|xoF*5QhN~uC{6@r>70IznUfsFG-G;l}?$+Az99Crz7@+^Nxu!;l) zsOWkAn}YSTv$HNJ!(y%AfOL2pJMO=oO}BiJbYu);t0l-+diy!Y4O(@lyYe0&{{xy#gq>1KUHfN-Y;lzsObx-e(X`Ir(ccEg!h~Z zCxzD93mp7S{zEhW6A-9$_T0ly2w zSnIH9%C>uc%)qy=E`F#8W^|M{egD@?ns-x*t?6BMF4I4HjbDKVnkAi` zJiX%6#4_vbOWdY4xaWWA3l1tkQ%Tbg3ke|EEk(wcADO>Up#OX&`jo47Tkt%uP(EyC z{-ES-o9GbJB|fl*?xiQO&*dvnRlhb+TC?MchZ%nU>HPQT-1=*Ofi!jm>v;>R=nGXw z3EkxFLWI!XFMG=yL7i{~YRP%92lW=Eim+MObsQzC@e{H9;T-LA7Sea|=R>|B*s&2d zt-ia6HWHjb{S$?A(Yf{G`0o$T;Z|QD*;5Ph=F3rUy_UTxSUKlP2ykHy9f!l%2RQ4n z*5-#XrZ}u)c=alVZn`SuAckf4Z}N^Ez&&vr*f`sh0C82YLHQ&;_V}^z`LcJ)fv7iM zf!d2wV+;ISc*ywaxEdc#;wE`EsP+zYrHxJZ-4T31I)+=n zI$!4ISs#Tjkj&{cQ!vX7f?rTe-i4Zde4bP6Nv*NPvWi_hQ8jT`jz2@UchdIu3qdJ{ z*E~i#I*ew^TG;kt;Il+Y5k)iz(2o(RniQfsdf?P+v*hBn3mt^C>wbe9dS&O%ZBMCX z4V5ELLQUO|`oPQ7Hok*Fyrf;UUsH zKSAwty_i*>LACb~RsiEIGWMKWNV&txitAKlCCGx;GaO;1A7$JGnrBs%$nAidCjyA`uO-O_`ap=>}!~XKe)HiLU zB3sr{xQeFbqH106D;>wY@aUfb`!C(SCW=zH^{bJ)u0Wo-7pVm1&0b1!#y@Rov?xLjLKz{OJcdlEWAXV+7>Ki~ z^5Apu^##a7H~Qjf^qt8Cx1lG`DldZKTtFr&w>9PAO(@8OFCoJTVjVK$07kZMr9wJ3 zPB~NUns3=Hoqf=~&$!hVUl3BT{(kuG8PFK^tEKq+dS{{Mo?33QHW#Uo^6QcC68~$m zbS``Z|NOeUk2I;GV|K-*tD>P1b#=z`{vCb(Xc9jEu>-$HZaEE=4iid&;j{djfw%lU zv`=a>R!qad_Vh`;zsuYbW4}^g2UnM#uqR2&WB8>*dX2lyd>?QE3HKhn<_)V5a=TZn^k7BxSb`3QWRN2n@qPR9KZh_YyVXD`Y8 zvvQ5Z(2sv`i(pNw!Cav5JQmV9=dCZU_sQuuBPT-r}+93e?a*(K(OkmHW!J9td$ir&=?lo4tJ#hhrq<*RiFgKtu~_ ztYh+=`Di`!sG@-(!4rpISPm;iq{#aF0w~h}X9~@m8uIjiA_@5fNY(%)Yk*pTgHLI( ze6yeqSBm4#6{Yc#ql@^Rd-+3^hLLov zSgwu?Aj1QQsNAaldG2C;@nzO=E#ebko6Gy`ub>VYx5Fe*KHadz;4M~#ZydTfW3C2;;(;A`?(!a$c`c0lehaKM{2_T8gV-Moa{3_65Qw@uC~1#o}z@M zC7H3sd1z>eyMA#uZ$IZ8zVwyrm^*KtZ;hG2_aLM--ulLx{5mx$OO`Cj`;a;d%*leY zpxPa!tbT$cA8-iytiH==keE;=mUeiPjDo!UxyF%a4{;l*N!#ro4hyGByN{evjnjPx?X$O%2f4FXWyd z9((+89)IK!+B@3wEOlgLgem<~ys$3fzq2j=pufMLzW%;E#m{?#3g|fdOSn-Rg}}@q z#_6z%!lNp#8+F{uGmxQ;i0I;dE_SHJJg|^p?z|FL+u_4!h}q4FOU&OiOry8ugTFC`G)*yS@qBb-l%>ZkE%gj^yn;(+9zpe_4sGKg5oeMWX)9tFaC$$W@4H2&>8TnJsw$xQRYMnvfC?d8KC`3Upp&&OJy zf{*9 zW8at~q0wm2NDW5 z^J|N7_Y07~QGbD2{yChrxIlriT8%_&zO!;AH+}1yw0E@Up%EadRJrEbFEY7zGL5uB zqmk12*xj6Z$z}A+IdsC`S=pHcdddOx{mp%B{qjjjV+2aGI_&14WL#a=#h|q4(u{DC zfeP+d-$j0RFP!~p$oi#{I^}#In-0&m%pk=E3GX<4 z>g}e^LylOETX+htcN%GJjO|;uVoZv$mPV~Xy-~-hgdS3ohwrB2534!q%5O4l>6>>s zmA2da1=0;qu;r^~;8H z(LRA_0a)x6lJbU$Z0AU}Pe6h~GFn*c!>F+eXB5^rj7<=g6suC_z#2N|FX6~9{|BAZ zX6*L1ncd$qljZVCvH8ZoqW<7*p%kVk>{J()Z>=vh?-|MvArS(+@F9ON{+x}&7kd>Q zx~-l56VGJH=f8mpzw?i>XDDu3)L(dnO<#W>=G8T*YG-rrDjJiIbBAUh5Qdp;q=-`T z6|C<3u8<5BnQ*RAqix^W9De1E^dG)7|81{jJZH}~PG$qnz}BCBm7zOUV7F~V>7+Cy z9b2EQE*MpnW5FffA(CyJvKlMJ4zYaV+*#WCr?cO=7x9J*KVF_c_+#%IY#Dd}%=Q7s z);`F_FTWcaHK?{1J4B@T;l*xIO55dJlr>tXk+31kMcZUVz}4%hYL$go|0`1#9Zmbx zefCQDy;8uqJIe%yetSFHes%-(^-p1kx8bY_!^L`>O;RBWl=cc{&=;(6kW{JkOs4C= zL)ibF7cpbmaw?&k^Z&kgcp^jy(AfME>85pzta*fipWjSl%>$5B5LNM&IFfvqm<`Pm zYX#eIn1-R_kfqEz=K}f`ETLoH*>vt(jM%?k!oRKx*ww=d)Lwj&(U+dZZXKXDv<*_@ zT}4u*+B2C-{|vfj&!c + For x86, run: + make + +------------------------------------------------------------------------------- + + + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiError.h b/gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiError.h new file mode 100644 index 0000000..c08e42e --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiError.h @@ -0,0 +1,136 @@ +/*=========================================================================== +FILE: + GobiError.h + +DESCRIPTION: + QUALCOMM Gobi Errors + +Copyright (c) 2013, 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 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. +==========================================================================*/ + +/*=========================================================================*/ +// Pragmas +/*=========================================================================*/ +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "QMIEnum.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- + +/*=========================================================================*/ +// eGobiError Enumeration +// Gobi API Error Enumeration +/*=========================================================================*/ +enum eGobiError +{ + eGOBI_ERR_ENUM_BEGIN = -1, + + eGOBI_ERR_NONE, // 00 Success + eGOBI_ERR_GENERAL, // 01 General error + eGOBI_ERR_INTERNAL, // 02 Internal error + eGOBI_ERR_MEMORY, // 03 Memory error + eGOBI_ERR_INVALID_ARG, // 04 Invalid argument + eGOBI_ERR_BUFFER_SZ, // 05 Buffer too small + eGOBI_ERR_NO_DEVICE, // 06 Unable to detect device + eGOBI_ERR_INVALID_DEVID, // 07 Invalid device ID + eGOBI_ERR_NO_CONNECTION, // 08 No connection to device + eGOBI_ERR_IFACE, // 09 Unable to obtain required interace + eGOBI_ERR_CONNECT, // 10 Unable to connect to interface + eGOBI_ERR_REQ_SCHEDULE, // 11 Unable to schedule request + eGOBI_ERR_REQUEST, // 12 Error sending request + eGOBI_ERR_RESPONSE, // 13 Error receiving response + eGOBI_ERR_REQUEST_TO, // 14 Timeout while sending request + eGOBI_ERR_RESPONSE_TO, // 15 Timeout while receiving response + eGOBI_ERR_MALFORMED_RSP, // 16 Malformed response received + eGOBI_ERR_INVALID_RSP, // 17 Invalid/error response received + eGOBI_ERR_INVALID_FILE, // 18 Invalid file path + eGOBI_ERR_FILE_OPEN, // 19 Unable to open file + eGOBI_ERR_FILE_COPY, // 20 Unable to copy file + eGOBI_ERR_QDL_SCM, // 21 Unable to open service control mgr + eGOBI_ERR_NO_QDL_SVC, // 22 Unable to detect QDL service + eGOBI_ERR_NO_QDL_SVC_INFO, // 23 Unable to obtain QDL service info + eGOBI_ERR_NO_QDL_SVC_PATH, // 24 Unable to locate QSL service + eGOBI_ERR_QDL_SVC_CFG, // 25 Unable to reconfigure QDL service + eGOBI_ERR_QDL_SVC_IFACE, // 26 Unable to interface to QDL service + eGOBI_ERR_OFFLINE, // 27 Unable to set device offline + eGOBI_ERR_RESET, // 28 Unable to reset device + eGOBI_ERR_NO_SIGNAL, // 29 No available signal + eGOBI_ERR_MULTIPLE_DEVICES, // 30 Multiple devices detected + eGOBI_ERR_DRIVER, // 31 Error interfacing to driver + eGOBI_ERR_NO_CANCELABLE_OP, // 32 No cancelable operation is pending + eGOBI_ERR_CANCEL_OP, // 33 Error canceling outstanding operation + eGOBI_ERR_QDL_CRC, // 34 QDL image data CRC error + eGOBI_ERR_QDL_PARSING, // 35 QDL image data parsing error + eGOBI_ERR_QDL_AUTH, // 36 QDL image authentication error + eGOBI_ERR_QDL_WRITE, // 37 QDL image write error + eGOBI_ERR_QDL_OPEN_SIZE, // 38 QDL image size error + eGOBI_ERR_QDL_OPEN_TYPE, // 39 QDL image type error + eGOBI_ERR_QDL_OPEN_PROT, // 40 QDL memory protection error + eGOBI_ERR_QDL_OPEN_SKIP, // 41 QDL image not required + eGOBI_ERR_QDL_ERR_GENERAL, // 42 QDL general error + eGOBI_ERR_QDL_BAR_MODE, // 43 QDL BAR mode error + + eGOBI_ERR_ENUM_END, + + // Offset from which mapped QMI error codes start from (see eQMIErrorCode) + eGOBI_ERR_QMI_OFFSET = 1000, +}; + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eGobiError validity check + +PARAMETERS: + ec [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eGobiError ec ) +{ + bool retVal = false; + if (ec > eGOBI_ERR_ENUM_BEGIN && ec < eGOBI_ERR_ENUM_END) + { + retVal = true; + } + + if (ec >= eGOBI_ERR_QMI_OFFSET) + { + ULONG tmp = (ULONG)ec - (ULONG)eGOBI_ERR_QMI_OFFSET; + retVal = ::IsValid( (eQMIErrorCode)tmp ); + } + + return retVal; +}; \ No newline at end of file diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiQMICore.cpp b/gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiQMICore.cpp new file mode 100644 index 0000000..14d21f9 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiQMICore.cpp @@ -0,0 +1,533 @@ +/*=========================================================================== +FILE: + GobiQMICore.cpp + +DESCRIPTION: + QUALCOMM Gobi QMI Based API Core + +PUBLIC CLASSES AND FUNCTIONS: + cGobiQMICore + +Copyright (c) 2013, 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 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" +#include "ProtocolNotification.h" + +/*=========================================================================*/ +// cGobiQMICore Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cGobiQMICore (Public Method) + +DESCRIPTION: + Constructor + +RETURN VALUE: + None +===========================================================================*/ +cGobiQMICore::cGobiQMICore() + : mLastError( eGOBI_ERR_NONE ) +{ + mInterface[0] = 0; +} + +/*=========================================================================== +METHOD: + ~cGobiQMICore (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + BOOL +===========================================================================*/ +cGobiQMICore::~cGobiQMICore() +{ + Cleanup(); +} + +/*=========================================================================== +METHOD: + Initialize (Public Method) + +DESCRIPTION: + Initialize the object + +RETURN VALUE: + bool +===========================================================================*/ +bool cGobiQMICore::Initialize() +{ + return true; +} + +/*=========================================================================== +METHOD: + Cleanup (Public Method) + +DESCRIPTION: + Cleanup the object + +RETURN VALUE: + bool +===========================================================================*/ +bool cGobiQMICore::Cleanup() +{ + Disconnect(); + return true; +} + +/*=========================================================================== +METHOD: + Connect (Public Method) + +DESCRIPTION: + Connect to the specified Gobi device + +PARAMETERS: + pQMIFile [ I ] - Gobi device interface to connect to + services [ I ] - QMI services to connect to + +RETURN VALUE: + std::set - Services successfuly configured +===========================================================================*/ +std::set cGobiQMICore::Connect( + LPCSTR pInterface, + std::set & services ) +{ + // The services we successfully connected to + std::set retServices; + + // Clear last error recorded + ClearLastError(); + + size_t ifaceLen = strnlen( pInterface, MAX_PATH ) + 1; + if (ifaceLen >= (size_t)MAX_PATH) + { + mLastError = eGOBI_ERR_INVALID_ARG; + return retServices; + } + + // Allocate configured QMI servers + std::set ::const_iterator pIter = services.begin(); + while (pIter != services.end()) + { + cQMIProtocolServer * pSvr = 0; + pSvr = new cQMIProtocolServer( *pIter, 8192, 512 ); + if (pSvr != 0) + { + // Initialize server (we don't care about the return code + // since the following Connect() call will fail if we are + // unable to initialize the server) + pSvr->Initialize(); + + bool bRC = pSvr->Connect( pInterface ); + if (bRC == true) + { + sServerInfo si( pSvr ); + std::pair entry( *pIter, si ); + mServers.insert( entry ); + + retServices.insert( *pIter ); + } + } + + pIter++; + } + + // All servers fail? + if (retServices.size() == 0) + { + // Yes, disconnect them all + Disconnect(); + + // ... and set the error code + mLastError = eGOBI_ERR_CONNECT; + } + + memcpy( mInterface, pInterface, ifaceLen ); + return retServices; +} + +/*=========================================================================== +METHOD: + Disconnect (Public Method) + +DESCRIPTION: + Disconnect from the currently connected Gobi device + +RETURN VALUE: + bool +===========================================================================*/ +bool cGobiQMICore::Disconnect() +{ + // Clear last error recorded + ClearLastError(); + + // Clear device interface + mInterface[0] = 0; + + // Assume failure + bool bRC = false; + if (mServers.size() == 0) + { + mLastError = eGOBI_ERR_NO_CONNECTION; + return bRC; + } + + // Disconnect/clean-up all configured QMI servers + std::map ::iterator pIter; + pIter = mServers.begin(); + + while (pIter != mServers.end()) + { + sServerInfo & si = pIter->second; + cQMIProtocolServer * pSvr = si.mpServer; + if (pSvr != 0) + { + pSvr->Disconnect(); + pSvr->Exit(); + + delete pSvr; + } + + si.mLogsProcessed = 0; + pIter++; + } + + mServers.clear(); + + bRC = true; + return bRC; +} + +/*=========================================================================== +METHOD: + Send (Public Method) + +DESCRIPTION: + Send a request using the specified QMI protocol server and wait for (and + then return) the response + +PARAMETERS: + svcID [ I ] - QMI service type + msgID [ I ] - QMI message ID + to [ I ] - Timeout value (in milliseconds) + inLen [ I ] - Length of input buffer + pIn [ I ] - Input buffer + pOutLen [I/O] - Upon input the maximum number of BYTEs pOut can + contain, upon output the number of BYTEs copied + to pOut + pOut [ O ] - Output buffer + +RETURN VALUE: + eGobiError - The result +===========================================================================*/ +eGobiError cGobiQMICore::Send( + ULONG svcID, + ULONG msgID, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ) +{ + // Clear last error recorded + ClearLastError(); + + if (msgID > 0xffff) + { + mLastError = eGOBI_ERR_INVALID_ARG; + return mLastError; + } + + sSharedBuffer * pRequest = 0; + pRequest = sQMIServiceBuffer::BuildBuffer( (eQMIService)svcID, + (WORD)msgID, + false, + false, + pIn, + inLen ); + + if (pRequest == 0) + { + mLastError = eGOBI_ERR_MEMORY; + return mLastError; + } + + // We use the event based notification approach + cSyncQueue evts( 12, true ); + cProtocolQueueNotification pn( &evts ); + + // Build the request object + sProtocolRequest req( pRequest, 0, to, 1, 1, &pn ); + if (to == 0) + { + mLastError = eGOBI_ERR_INTERNAL; + return mLastError; + } + + // Grab the server + std::map ::iterator pSvrIter; + pSvrIter = mServers.find( (eQMIService)svcID ); + if (pSvrIter == mServers.end()) + { + mLastError = eGOBI_ERR_NO_CONNECTION; + return mLastError; + } + + sServerInfo & si = pSvrIter->second; + cQMIProtocolServer * pSvr = si.mpServer; + if (pSvr == 0 || pSvr->IsConnected() == false) + { + mLastError = eGOBI_ERR_NO_CONNECTION; + return mLastError; + } + + // Grab the log from the server + const cProtocolLog & protocolLog = pSvr->GetLog(); + + // Schedule the request + ULONG reqID = pSvr->AddRequest( req ); + if (reqID == INVALID_REQUEST_ID) + { + mLastError = eGOBI_ERR_REQ_SCHEDULE; + return mLastError; + } + + // Store for external cancel + si.mRequestID = reqID; + + bool bReq = false; + bool bExit = false; + DWORD idx; + + // Returned response + sProtocolBuffer rsp; + + // Process up to the indicated timeout + cEvent & sigEvt = evts.GetSignalEvent(); + while (bExit == false) + { + int wc = sigEvt.Wait( to, idx ); + if (wc == ETIME) + { + if (bReq == true) + { + mLastError = eGOBI_ERR_RESPONSE_TO; + } + else + { + mLastError = eGOBI_ERR_REQUEST_TO; + } + break; + } + else if (wc != 0) + { + mLastError = eGOBI_ERR_INTERNAL; + break; + } + + sProtocolNotificationEvent evt; + bool bEvt = evts.GetElement( idx, evt ); + if (bEvt == false) + { + mLastError = eGOBI_ERR_INTERNAL; + bExit = true; + break; + } + + switch (evt.mEventType) + { + case ePROTOCOL_EVT_REQ_ERR: + mLastError = eGOBI_ERR_REQUEST; + bExit = true; + break; + + case ePROTOCOL_EVT_RSP_ERR: + mLastError = eGOBI_ERR_RESPONSE; + bExit = true; + break; + + case ePROTOCOL_EVT_REQ_SENT: + { + // Grab the as-sent request + DWORD id = evt.mParam2; + sProtocolBuffer tmpReq = protocolLog.GetBuffer( id ); + sSharedBuffer * pTmpRequest = tmpReq.GetSharedBuffer(); + if (pTmpRequest != 0) + { + // Grab the transaction ID + sQMIServiceBuffer actualReq( pTmpRequest ); + si.mRequestTXID = actualReq.GetTransactionID(); + } + + bReq = true; + } + break; + + case ePROTOCOL_EVT_RSP_RECV: + // Success! + rsp = protocolLog.GetBuffer( evt.mParam2 ); + bExit = true; + break; + + default: + break; + } + } + + if ( (mLastError == eGOBI_ERR_INTERNAL) + || (mLastError == eGOBI_ERR_REQUEST_TO) + || (mLastError == eGOBI_ERR_RESPONSE_TO) ) + { + // Remove the request as our protocol notification object is + // about to go out of scope and hence be destroyed + pSvr->RemoveRequest( reqID ); + } + + if (rsp.IsValid() == false) + { + return GetCorrectedLastError(); + } + + // Did we receive a valid QMI response? + sQMIServiceBuffer qmiRsp( rsp.GetSharedBuffer() ); + if (qmiRsp.IsValid() == false) + { + mLastError = eGOBI_ERR_MALFORMED_RSP; + return mLastError; + } + + // Caller might not be interested in actual output (beyond error code) + ULONG maxSz = 0; + if (pOutLen != 0) + { + maxSz = *pOutLen; + } + + if (maxSz > 0) + { + // TLV 2 is always present + ULONG needSz = 0; + const BYTE * pData = (const BYTE *)qmiRsp.GetRawContents( needSz ); + if (needSz == 0 || pData == 0) + { + return eGOBI_ERR_INVALID_RSP; + } + + *pOutLen = needSz; + if (needSz > maxSz) + { + return eGOBI_ERR_BUFFER_SZ; + } + + memcpy( pOut, pData, needSz ); + } + + // Check the mandatory QMI result TLV for success + ULONG rc = 0; + ULONG ec = 0; + bool bResult = qmiRsp.GetResult( rc, ec ); + if (bResult == false) + { + mLastError = eGOBI_ERR_MALFORMED_RSP; + return mLastError; + } + else if (rc != 0) + { + return GetCorrectedQMIError( ec ); + } + + // Success! + return eGOBI_ERR_NONE; +} + +/*=========================================================================== +METHOD: + CancelSend (Public Method) + +DESCRIPTION: + Cancel the most recent in-progress Send() based operation + +PARAMETERS: + svcID [ I ] - Service whose outstanding request is to be cancelled + pTXID [ O ] - QMI transaction ID of outstanding request + +RETURN VALUE: + eGobiError - The result +===========================================================================*/ +eGobiError cGobiQMICore::CancelSend( + ULONG svcID, + ULONG * pTXID ) +{ + // Grab the server + std::map ::iterator pSvrIter; + pSvrIter = mServers.find( (eQMIService)svcID ); + if (pSvrIter == mServers.end()) + { + mLastError = eGOBI_ERR_NO_CONNECTION; + return mLastError; + } + + sServerInfo & si = pSvrIter->second; + cQMIProtocolServer * pSvr = si.mpServer; + if (pSvr == 0) + { + return eGOBI_ERR_INTERNAL; + } + + if (si.mRequestID == 0xffffffff) + { + return eGOBI_ERR_NO_CANCELABLE_OP; + } + + bool bRemove = pSvr->RemoveRequest( si.mRequestID ); + if (bRemove == false) + { + return eGOBI_ERR_CANCEL_OP; + } + + if (pTXID != 0) + { + *pTXID = si.mRequestTXID; + } + + return eGOBI_ERR_NONE; +} + + + diff --git a/gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiQMICore.h b/gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiQMICore.h new file mode 100644 index 0000000..f9a1522 --- /dev/null +++ b/gobi-api/GobiAPI_2013-07-31-1347/Shared/GobiQMICore.h @@ -0,0 +1,191 @@ +/*=========================================================================== +FILE: + GobiQMICore.h + +DESCRIPTION: + QUALCOMM Gobi QMI Based API Core + +PUBLIC CLASSES AND FUNCTIONS: + cGobiQMICore + +Copyright (c) 2013, 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 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. +==========================================================================*/ + +/*=========================================================================*/ +// Pragmas +/*=========================================================================*/ +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "ProtocolBuffer.h" +#include "QMIProtocolServer.h" +#include "SyncQueue.h" +#include "GobiError.h" + +/*=========================================================================*/ +// Class cGobiQMICore +/*=========================================================================*/ +class cGobiQMICore +{ + public: + // Constructor + cGobiQMICore(); + + // Destructor + virtual ~cGobiQMICore(); + + // Initialize the object + virtual bool Initialize(); + + // Cleanup the object + virtual bool Cleanup(); + + // (Inline) Return the server as determined by the service type + cQMIProtocolServer * GetServer( eQMIService svc ) + { + cQMIProtocolServer * pSvr = 0; + + std::map ::const_iterator pIter; + pIter = mServers.find( svc ); + + if (pIter != mServers.end()) + { + const sServerInfo & si = pIter->second; + pSvr = si.mpServer; + } + + return pSvr; + }; + + // (Inline) Clear last error recorded + void ClearLastError() + { + mLastError = eGOBI_ERR_NONE; + }; + + // (Inline) Get last error recorded + eGobiError GetLastError() + { + return mLastError; + }; + + // (Inline) Return the last recorded error (if this happens to indicate + // that no error occurred then return eGOBI_ERR_INTERNAL) + eGobiError GetCorrectedLastError() + { + eGobiError ec = GetLastError(); + if (ec == eGOBI_ERR_NONE) + { + ec = eGOBI_ERR_INTERNAL; + } + + return ec; + }; + + // (Inline) Return the correct QMI error (if this happens to indicate + // that no error occurred then return the mapped eQMI_ERR_INTERNAL + // value) + eGobiError GetCorrectedQMIError( ULONG qmiErrorCode ) + { + ULONG ec = (ULONG)eQMI_ERR_INTERNAL + (ULONG)eGOBI_ERR_QMI_OFFSET; + if (qmiErrorCode != (ULONG)eQMI_ERR_NONE) + { + ec = qmiErrorCode + (ULONG)eGOBI_ERR_QMI_OFFSET; + } + + return (eGobiError)ec; + }; + + // Connect to the specified Gobi device interface + virtual std::set Connect( + LPCSTR pInterface, + std::set & services ); + + // Disconnect from the currently connected device interface + virtual bool Disconnect(); + + // Send a request using the specified QMI protocol server and wait + // for (and then return) the response + eGobiError Send( + ULONG svcID, + ULONG msgID, + ULONG to, + ULONG inLen, + const BYTE * pIn, + ULONG * pOutLen, + BYTE * pOut ); + + // Cancel the most recent in-progress Send() based operation + eGobiError CancelSend( + ULONG svcID, + ULONG * pTXID ); + + protected: + /* Device interface */ + CHAR mInterface[MAX_PATH]; + + /* QMI protocol server/protocol server log count */ + struct sServerInfo + { + public: + // Constructor (default) + sServerInfo() + : mpServer( 0 ), + mLogsProcessed( 0 ), + mRequestID( 0xffffffff ), + mRequestTXID( 0xffffffff ) + { }; + + // Constructor (parameterized) + sServerInfo( cQMIProtocolServer * pServer ) + : mpServer( pServer ), + mLogsProcessed( 0 ), + mRequestID( 0xffffffff ), + mRequestTXID( 0xffffffff ) + { }; + + /* Protocol server */ + cQMIProtocolServer * mpServer; + + /* Protocol server logs processed */ + ULONG mLogsProcessed; + + /* Last scheduled request ID */ + ULONG mRequestID; + + /* Last schedule request QMI transaction ID */ + ULONG mRequestTXID; + }; + + /* QMI protocol servers */ + std::map mServers; + + /* Last error recorded */ + eGobiError mLastError; +};