/*===========================================================================
FILE: 
   GobiConnectionMgmtAPIStructs.h

DESCRIPTION:
   Declaration of the Gobi API structures

Copyright (c) 2011, Code Aurora Forum. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of Code Aurora Forum nor
      the names of its contributors may be used to endorse or promote
      products derived from this software without specific prior written
      permission.


THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
==========================================================================*/

#pragma once

// Include the enumerations
#include "GobiConnectionMgmtAPIEnums.h"

#pragma pack( push, 1 )

// Struct 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 TLV 0x02, the Result Code
// It is common for all Responses
struct sResultCode
{
   eQMIResults  mQMIResult;
   eQMIErrors   mQMIError;
};

// 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;

   // Padding out 24 bits
   UINT8 mReserved1[3];
};

// 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 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;
      
         // Padding out 28 bits
         UINT8 mReserved1:5;
         UINT8 mReserved2[2];
         UINT8 mReserved3:7;
      
         bool mNullBearer:1;
      
         // The following union is for handing both mCDMA1x and mCDMA1xEvDORevA
         union uValOfCDMA1x_or_CDMA1xEvDORevA
         {
            // 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 mCDMA1xEvDORevA == 1
            struct sCDMA1xEvDORevAIs1
            {
               bool mCDMA1xEvDORevADPA:1;
               bool mCDMA1xEvDORevAMFPA:1;
               bool mCDMA1xEvDORevAEMPA:1;
               bool mCDMA1xEvDORevAEMPAEHRPD:1;
            
               // Padding out 28 bits
               UINT8 mReserved6:4;
               UINT8 mReserved7[3];
            };
      
            sCDMA1xEvDORevAIs1 mCDMA1xEvDORevAIs1;
      
            // Padding out 32 bits
            UINT8 mReserved8[4];
         };
      
         uValOfCDMA1x_or_CDMA1xEvDORevA mValOfCDMA1x_or_CDMA1xEvDORevA;
      };

      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;
      
         // Padding out 23 bits
         UINT8 mReserved9[2];
         UINT8 mReserved10:7;
      
         bool mNullBearer:1;
      };

      sNetworkTypeIs2 mNetworkTypeIs2;

      // Padding out 64 bits
      UINT8 mReserved11[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 request TLV 0x01 for WDSAbort()
struct sWDSAbortRequest_TransactionID
{
   UINT16 mTransactionID;
};

// 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 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 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;

   // Padding out 24 bits
   UINT8 mReserved1[3];
};

// 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 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 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 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 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 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 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 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 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 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;

   // Padding out 14 bits
   UINT8 mReserved1:6;
   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 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;
      
         // Padding out 28 bits
         UINT8 mReserved1:5;
         UINT8 mReserved2[2];
         UINT8 mReserved3:7;
      
         bool mNullBearer:1;
      
         // The following union is for handing both mCDMA1x and mCDMA1xEvDORevA
         union uValOfCDMA1x_or_CDMA1xEvDORevA
         {
            // 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 mCDMA1xEvDORevA == 1
            struct sCDMA1xEvDORevAIs1
            {
               bool mCDMA1xEvDORevADPA:1;
               bool mCDMA1xEvDORevAMFPA:1;
               bool mCDMA1xEvDORevAEMPA:1;
               bool mCDMA1xEvDORevAEMPAEHRPD:1;
            
               // Padding out 28 bits
               UINT8 mReserved6:4;
               UINT8 mReserved7[3];
            };
      
            sCDMA1xEvDORevAIs1 mCDMA1xEvDORevAIs1;
      
            // Padding out 32 bits
            UINT8 mReserved8[4];
         };
      
         uValOfCDMA1x_or_CDMA1xEvDORevA mValOfCDMA1x_or_CDMA1xEvDORevA;
      };

      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;
      
         // Padding out 23 bits
         UINT8 mReserved9[2];
         UINT8 mReserved10:7;
      
         bool mNullBearer:1;
      };

      sNetworkTypeIs2 mNetworkTypeIs2;

      // Padding out 64 bits
      UINT8 mReserved11[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;
      
         // Padding out 28 bits
         UINT8 mReserved1:5;
         UINT8 mReserved2[2];
         UINT8 mReserved3:7;
      
         bool mNullBearer:1;
      
         // The following union is for handing both mCDMA1x and mCDMA1xEvDORevA
         union uValOfCDMA1x_or_CDMA1xEvDORevA
         {
            // 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 mCDMA1xEvDORevA == 1
            struct sCDMA1xEvDORevAIs1
            {
               bool mCDMA1xEvDORevADPA:1;
               bool mCDMA1xEvDORevAMFPA:1;
               bool mCDMA1xEvDORevAEMPA:1;
               bool mCDMA1xEvDORevAEMPAEHRPD:1;
            
               // Padding out 28 bits
               UINT8 mReserved6:4;
               UINT8 mReserved7[3];
            };
      
            sCDMA1xEvDORevAIs1 mCDMA1xEvDORevAIs1;
      
            // Padding out 32 bits
            UINT8 mReserved8[4];
         };
      
         uValOfCDMA1x_or_CDMA1xEvDORevA mValOfCDMA1x_or_CDMA1xEvDORevA;
      };

      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;
      
         // Padding out 23 bits
         UINT8 mReserved9[2];
         UINT8 mReserved10:7;
      
         bool mNullBearer:1;
      };

      sNetworkTypeIs2 mNetworkTypeIs2;

      // Padding out 64 bits
      UINT8 mReserved11[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 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 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 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 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 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 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 0x01 for NASAbort()
struct sNASAbortRequest_TransactionID
{
   UINT16 mTransactionID;
};

// 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 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 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 0x10 for NASGetSignalStrength()
struct sNASGetSignalStrengthRequest_RequestMask
{
   bool mQueryRSSI:1;
   bool mQueryECIO:1;
   bool mQueryIO:1;
   bool mQuerySINR:1;
   bool mQueryErrorRate:1;

   // Padding out 11 bits
   UINT8 mReserved1:3;
   UINT8 mReserved2;
};

// 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 request TLV 0x10 for NASPerformNetworkScan()
struct sNASPerformNetworkScanRequest_NetworkMask
{
   bool mGSM:1;
   bool mUMTS:1;
   bool mLTE:1;

   // Padding out 5 bits
   UINT8 mReserved1:5;
};

// 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 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;
   UINT32 mLatitude;
   UINT32 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 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;
   UINT32 mLatitude;
   UINT32 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 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 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 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 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;

   // Padding out 11 bits
   UINT8 mReserved1:3;
   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 11 bits
   UINT8 mReserved2:3;
   UINT8 mReserved3;

   bool mEUTRABand33:1;
   bool mEUTRABand34:1;
   bool mEUTRABand35:1;
   bool mEUTRABand36:1;
   bool mEUTRABand37:1;
   bool mEUTRABand38:1;
   bool mEUTRABand39:1;
   bool mEUTRABand40:1;
};

// 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 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 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;

   // Padding out 11 bits
   UINT8 mReserved1:3;
   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 11 bits
   UINT8 mReserved2:3;
   UINT8 mReserved3;

   bool mEUTRABand33:1;
   bool mEUTRABand34:1;
   bool mEUTRABand35:1;
   bool mEUTRABand36:1;
   bool mEUTRABand37:1;
   bool mEUTRABand38:1;
   bool mEUTRABand39:1;
   bool mEUTRABand40:1;
};

// 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 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;

   // Padding out 11 bits
   UINT8 mReserved1:3;
   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 11 bits
   UINT8 mReserved2:3;
   UINT8 mReserved3;

   bool mEUTRABand33:1;
   bool mEUTRABand34:1;
   bool mEUTRABand35:1;
   bool mEUTRABand36:1;
   bool mEUTRABand37:1;
   bool mEUTRABand38:1;
   bool mEUTRABand39:1;
   bool mEUTRABand40:1;
};

// 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 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 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 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 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 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;
   INT16 mECIO;
   UINT8 mUTRAUMTSMonitoredCellCount;

   struct sUMTSMonitoredCell
   {
      UINT16 mUTRAAbsoluteRFChannelNumber;
      UINT16 mPrimaryScramblingCode;
      INT16 mReceivedSignalCodePower;
      INT16 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;
   UINT32 mLatitude;
   UINT32 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 request TLV 0x01 for NASGetPLMNName()
struct sNASGetPLMNNameRequest_PLMN
{
   UINT16 mMobileCountryCode;
   UINT16 mMobileNetworkCode;
};

// 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 request TLV 0x01 for NASBindSubscription()
struct sNASBindSubscriptionRequest_SubscriptionType
{
   eQMINASSubscriptionType mSubscriptionType;
};

// 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 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 response TLV 0x10 for NASGetModePref()
struct sNASGetModePrefResponse_ModePreferenceForIDX0
{
   bool mCDMA1x:1;
   bool mCDMA1xEVDO:1;
   bool mGSM:1;
   bool mUMTS:1;
   bool mLTE:1;

   // Padding out 11 bits
   UINT8 mReserved1:3;
   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;

   // Padding out 11 bits
   UINT8 mReserved1:3;
   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 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 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;
   UINT32 mLatitude;
   UINT32 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 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;
   UINT32 mLatitude;
   UINT32 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 response TLV 0x10 for NASGetSignalInfo()
struct sNASGetSignalInfoResponse_CDMASignalInfo
{
   INT8 mRSSI;
   INT16 mECIO;
};

// Structure to describe response TLV 0x11 for NASGetSignalInfo()
struct sNASGetSignalInfoResponse_CDMA1xEVDOSignalInfo
{
   INT8 mRSSI;
   INT16 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;
   INT16 mECIO;
};

// Structure to describe response TLV 0x14 for NASGetSignalInfo()
struct sNASGetSignalInfoResponse_LTESignalInfo
{
   INT8 mRSSI;
   INT8 mRSRQ;
   INT16 mRSRP;
   INT16 mSNR;
};

// 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 indication TLV 0x10 for NAS SignalInfoIndication
struct sNASSignalInfoIndication_CDMASignalInfo
{
   INT8 mRSSI;
   INT16 mECIO;
};

// Structure to describe indication TLV 0x11 for NAS SignalInfoIndication
struct sNASSignalInfoIndication_CDMA1xEVDOSignalInfo
{
   INT8 mRSSI;
   INT16 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;
   INT16 mECIO;
};

// Structure to describe indication TLV 0x14 for NAS SignalInfoIndication
struct sNASSignalInfoIndication_LTESignalInfo
{
   INT8 mRSSI;
   INT8 mRSRQ;
   INT16 mRSRP;
   INT16 mSNR;
};

// 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 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 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 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 request TLV 0x10 for WMSSetEventReport()
struct sWMSSetEventReportRequest_NewMTMessageIndicator
{
   INT8 mReportNewMTMessages;
};

// 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 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 response TLV 0x01 for WMSRawSend()
struct sWMSRawSendResponse_MessageID
{
   UINT16 mMessageID;
};

// Structure to describe response TLV 0x10 for WMSRawSend()
struct sWMSRawSendResponse_CauseCode
{
   UINT16 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
{
   UINT16 mGSMWCDMARPCause;
   UINT8 mGSMWCDMATPCause;
};

// Structure to describe response TLV 0x13 for WMSRawSend()
struct sWMSRawSendResponse_MessageDeliveryFailureType
{
   eQMIWMSMessageDeliveryFailureType mMessageDeliveryFailureType;
};

// 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 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
{
   UINT8 mGSMWCDMARPCause;
   UINT8 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 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
   {
      UINT16 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
   {
      UINT16 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
{
   UINT16 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
{
   UINT16 mGSMWCDMARPCause;
   UINT8 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 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 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 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 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 response TLV 0x01 for PDSGetServiceState()
struct sPDSGetServiceStateResponse_State
{
   INT8 mServiceEnabled;
   eQMIPDSTrackingSessionStates mTrackingSessionState;
};

// Structure to describe indication TLV 0x01 for PDS ServiceStateIndication
struct sPDSServiceStateIndication_State
{
   INT8 mServiceEnabled;
   eQMIPDSTrackingSessionStates mTrackingSessionState;
};

// Structure to describe request TLV 0x01 for PDSSetServiceState()
struct sPDSSetServiceStateRequest_State
{
   INT8 mServiceEnabled;
};

// 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 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 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 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 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 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;

   // Padding out 30 bits
   UINT8 mReserved1:6;
   UINT8 mReserved2[3];
};

// 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;

   // Padding out 30 bits
   UINT8 mReserved1:6;
   UINT8 mReserved2[3];
};

// 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 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 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 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 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 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 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 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 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 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 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;
      UINT8 mCallEndReason;
   };

   // 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 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;
      UINT8 mCallEndReason;
   };

   // 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 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
{
   UINT16 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 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 response TLV 0x10 for VoiceSetSupplementaryService()
struct sVoiceSetSupplementaryServiceResponse_FailureCause
{
   UINT16 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 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 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
{
   UINT16 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 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 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
{
   UINT16 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 0x10 for VoiceGetCLIP()
struct sVoiceGetCLIPResponse_Status
{
   INT8 mCLIPActive;
   INT8 mCLIPProvisioned;
};

// Structure to describe response TLV 0x11 for VoiceGetCLIP()
struct sVoiceGetCLIPResponse_FailureCause
{
   UINT16 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
{
   UINT16 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 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
{
   UINT16 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 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
{
   UINT16 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 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 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 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 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 response TLV 0x10 for VoiceManageIPCalls()
struct sVoiceManageIPCallsResponse_CallID
{
   UINT8 mCallID;
};

// 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 9 bits
   UINT8 mReserved1:1;
   UINT8 mReserved2;
};

// 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;

   // Padding out 2 bits
   UINT8 mReserved2:2;

   bool mSCWSEvent:1;

   // Padding out 8 bits
   UINT8 mReserved3;
};

// Structure to describe request TLV 0x12 for CAT2SetEventReport()
struct sCAT2SetEventReportRequest_Slot
{
   bool mSlot1:1;
   bool mSlot2:1;

   // Padding out 6 bits
   UINT8 mReserved1:6;
};

// 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 9 bits
   UINT8 mReserved1:1;
   UINT8 mReserved2;
};

// 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;

   // Padding out 2 bits
   UINT8 mReserved2:2;

   bool mSCWSEvent:1;

   // Padding out 8 bits
   UINT8 mReserved3;
};

// 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 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 9 bits
   UINT8 mReserved1:1;
   UINT8 mReserved2;

   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 9 bits
   UINT8 mReserved3:1;
   UINT8 mReserved4;
};

// 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;

   // Padding out 2 bits
   UINT8 mReserved2:2;

   bool mCommonSCWSEvent:1;

   // Padding out 8 bits
   UINT8 mReserved3;

   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;

   // Padding out 2 bits
   UINT8 mReserved5:2;

   bool mControlSCWSEvent:1;

   // Padding out 8 bits
   UINT8 mReserved6;
};

// 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 0x10 for UIMGetFileAttributes()
struct sUIMGetFileAttributesRequest_ResponseInIndication
{
   UINT32 mIndicationToken;
};

// 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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;

   // Padding out 30 bits
   UINT8 mReserved1:6;
   UINT8 mReserved2[3];
};

// Structure to describe response TLV 0x10 for UIMEventRegistration()
struct sUIMEventRegistrationResponse_Mask
{
   bool mCardStatus:1;
   bool mSAPConnection:1;

   // Padding out 30 bits
   UINT8 mReserved1:6;
   UINT8 mReserved2[3];
};

// 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 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 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 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 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 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 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 0x10 for UIMSendADPU()
struct sUIMSendADPURequest_LogicalChannel
{
   UINT8 mChannelID;
};

// 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 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 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 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 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 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 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 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 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 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 request TLV 0x10 for PBMBindSubscription()
struct sPBMBindSubscriptionRequest_Type
{
   eQMIPBMSubscriptionTypes mSubscriptionType;
};

// Structure to describe response TLV 0x10 for PBMBindSubscription()
struct sPBMBindSubscriptionResponse_ResultCode
{
   eQMIResults mQMIResult;
   eQMIErrors mQMIError;
};

// 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;

   // Padding out 50 bits
   UINT8 mReserved1:2;
   UINT8 mReserved2[6];
};

// 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 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 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;

   // Padding out 29 bits
   UINT8 mReserved1:5;
   UINT8 mReserved2[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 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 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 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 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 0x03 for LOCLocationServerConnection()
struct sLOCLocationServerConnectionRequestIndication_WWANType
{
   eQMILOCWWANType mWWANType;
};

// 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 request TLV 0x01 for LOCProvideNIUserResponse()
struct sLOCProvideNIUserResponseRequest_UserResponse
{
   eQMILOCUserResponse mUserResponse;
};

// 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 0x01 for LOCInjectPredictedOrbitsData()
struct sLOCInjectPredictedOrbitsDataRequest_TotalSize
{
   UINT32 mTotalSize;
};

// 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 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 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;

   // Padding out 27 bits
   UINT8 mReserved1:3;
   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;

   // Padding out 27 bits
   UINT8 mReserved1:3;
   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 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;

   // Padding out 50 bits
   UINT8 mReserved1:2;
   UINT8 mReserved2[6];
};

// 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;

   // Padding out 7 bits
   UINT8 mReserved1:7;

   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;

   // Padding out 7 bits
   UINT8 mReserved1:7;

   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 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 request TLV 0x01 for LOCInjectTimeSyncData()
struct sLOCInjectTimeSyncDataRequest_ReferenceCounter
{
   UINT32 mReferenceCounter;
};

// 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 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 indication TLV 0x10 for LOC SetProtocolConfigParametersIndication
struct sLOCSetProtocolConfigParametersIndication_FailedParameters
{
   bool mSUPLSecurity:1;
   bool mVXVersion:1;
   bool mSUPLVersion:1;

   // Padding out 61 bits
   UINT8 mReserved1:5;
   UINT8 mReserved2[7];
};

// Structure to describe request TLV 0x01 for LOCGetProtocolConfigParameters()
struct sLOCGetProtocolConfigParametersRequest_ConfigParameters
{
   bool mSUPLSecurity:1;
   bool mVXVersion:1;
   bool mSUPLVersion:1;

   // Padding out 61 bits
   UINT8 mReserved1:5;
   UINT8 mReserved2[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 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 indication TLV 0x10 for LOC GetSensorPropertiesIndication
struct sLOCGetSensorPropertiesIndication_GyroBiasVariance
{
   float mGyroBiasVariance;
};

// 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 indication TLV 0x10 for LOC SetSensorPerformanceConfigIndication
struct sLOCSetSensorPerformanceConfigIndication_FailedConfiguration
{
   bool mPerformanceMode:1;
   bool mAccelerometerSampling:1;
   bool mGyrometerSampling:1;

   // Padding out 29 bits
   UINT8 mReserved1:5;
   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 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 9 bits
   UINT8 mReserved1:1;
   UINT8 mReserved2;
};

// 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;

   // Padding out 2 bits
   UINT8 mReserved2:2;

   bool mSCWSEvent:1;

   // Padding out 8 bits
   UINT8 mReserved3;
};

// Structure to describe request TLV 0x12 for CATSetEventReport()
struct sCATSetEventReportRequest_Slot
{
   bool mSlot1:1;
   bool mSlot2:1;

   // Padding out 6 bits
   UINT8 mReserved1:6;
};

// 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 9 bits
   UINT8 mReserved1:1;
   UINT8 mReserved2;
};

// 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;

   // Padding out 2 bits
   UINT8 mReserved2:2;

   bool mSCWSEvent:1;

   // Padding out 8 bits
   UINT8 mReserved3;
};

// 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 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 9 bits
   UINT8 mReserved1:1;
   UINT8 mReserved2;

   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 9 bits
   UINT8 mReserved3:1;
   UINT8 mReserved4;
};

// 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;

   // Padding out 2 bits
   UINT8 mReserved2:2;

   bool mCommonSCWSEvent:1;

   // Padding out 8 bits
   UINT8 mReserved3;

   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;

   // Padding out 2 bits
   UINT8 mReserved5:2;

   bool mControlSCWSEvent:1;

   // Padding out 8 bits
   UINT8 mReserved6;
};

// 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 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 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 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 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 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 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 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 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 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 )
