diff --git a/.gitupstream b/.gitupstream
new file mode 100644
index 0000000..fe4ecc8
--- /dev/null
+++ b/.gitupstream
@@ -0,0 +1 @@
+https://git.codelinaro.org/clo/la/platform/hardware/qcom/wlan
diff --git a/Android.mk b/Android.mk
index 6695cef..3c542ca 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,6 +1,10 @@
+ifeq ($(call my-dir),$(call project-path-for,qcom-wlan))
+
 # TODO:  Find a better way to separate build configs for ADP vs non-ADP devices
 QCOM_WLAN_ROOT := $(call my-dir)
 
 ifneq ($(BOARD_IS_AUTOMOTIVE),true)
 include $(call all-subdir-makefiles)
 endif
+
+endif
diff --git a/qcwcn/wifi_hal/Android.mk b/qcwcn/wifi_hal/Android.mk
index 2e2c489..d4a7087 100644
--- a/qcwcn/wifi_hal/Android.mk
+++ b/qcwcn/wifi_hal/Android.mk
@@ -38,7 +38,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_CFLAGS := -Wno-unused-parameter
-ifeq ($(TARGET_BUILD_VARIANT),userdebug)
+ifeq ($(TARGET_BUILD_VARIANT),eng)
 LOCAL_CFLAGS += "-DLOG_NDEBUG=0"
 endif
 
diff --git a/qcwcn/wifi_hal/common.cpp b/qcwcn/wifi_hal/common.cpp
index 263043b..8aea253 100644
--- a/qcwcn/wifi_hal/common.cpp
+++ b/qcwcn/wifi_hal/common.cpp
@@ -239,6 +239,7 @@
 lowi_cb_table_t *LowiWifiHalApi = NULL;
 /* LowiSupportedCapabilities read */
 u32 lowiSupportedCapabilities = 0;
+bool lowiUnsupported = false;
 
 int compareLowiVersion(u16 major, u16 minor, u16 micro)
 {
@@ -269,21 +270,27 @@
     *lowi_wifihal_api = NULL;
     *lowi_get_capa_supported = false;
 
+    if (lowiUnsupported) {
+        return WIFI_ERROR_NOT_SUPPORTED;
+    }
+
 #if __WORDSIZE == 64
     void* lowi_handle = dlopen("/vendor/lib64/liblowi_wifihal.so", RTLD_NOW);
 #else
     void* lowi_handle = dlopen("/vendor/lib/liblowi_wifihal.so", RTLD_NOW);
 #endif
     if (!lowi_handle) {
-        ALOGE("%s: NULL lowi_handle, err: %s", __FUNCTION__, dlerror());
-        return WIFI_ERROR_UNKNOWN;
+        ALOGV("%s: NULL lowi_handle, err: %s", __FUNCTION__, dlerror());
+        retVal = WIFI_ERROR_NOT_SUPPORTED;
+        goto cleanup;
     }
 
     lowiCbTable = (getCbTable_t*)dlsym(lowi_handle,
                                        "lowi_wifihal_get_cb_table");
     if (!lowiCbTable) {
         ALOGE("%s: NULL lowi callback table", __FUNCTION__);
-        return WIFI_ERROR_UNKNOWN;
+        retVal = WIFI_ERROR_NOT_SUPPORTED;
+        goto cleanup;
     }
 
     *lowi_wifihal_api = lowiCbTable();
@@ -344,6 +351,7 @@
 cleanup:
     if (retVal) {
         *lowi_wifihal_api = NULL;
+        lowiUnsupported = true;
     }
     return retVal;
 }
@@ -353,6 +361,10 @@
     int ret = WIFI_SUCCESS;
     bool lowi_get_capabilities_support = false;
 
+    if (lowiUnsupported) {
+        return NULL;
+    }
+
     if (LowiWifiHalApi == NULL) {
         ALOGV("%s: LowiWifiHalApi Null, Initialize Lowi",
               __FUNCTION__);
@@ -366,7 +378,7 @@
         /* Initialize LOWI if it isn't up already. */
         ret = LowiWifiHalApi->init();
         if (ret) {
-            ALOGE("%s: failed lowi initialization. "
+            ALOGW("%s: failed lowi initialization. "
                 "Returned error:%d. Exit.", __FUNCTION__, ret);
             goto cleanup;
         }
@@ -398,10 +410,12 @@
 
 cleanup:
     if (LowiWifiHalApi && LowiWifiHalApi->destroy) {
+        ALOGI("%s: Cleaning up Lowi due to failure. Return NULL", __FUNCTION__);
         ret = LowiWifiHalApi->destroy();
     }
     LowiWifiHalApi = NULL;
     lowiSupportedCapabilities = 0;
+    lowiUnsupported = true;
     return LowiWifiHalApi;
 }
 
diff --git a/qcwcn/wifi_hal/llstats.cpp b/qcwcn/wifi_hal/llstats.cpp
index 728fac4..86c372b 100644
--- a/qcwcn/wifi_hal/llstats.cpp
+++ b/qcwcn/wifi_hal/llstats.cpp
@@ -967,7 +967,7 @@
                 {
                     if (!tb_vendor[QCA_WLAN_VENDOR_ATTR_LL_STATS_NUM_RADIOS])
                     {
-                        ALOGE("%s: QCA_WLAN_VENDOR_ATTR_LL_STATS_NUM_RADIOS"
+                        ALOGD("%s: QCA_WLAN_VENDOR_ATTR_LL_STATS_NUM_RADIOS"
                               " not found", __FUNCTION__);
                         return WIFI_ERROR_INVALID_ARGS;
                     }
@@ -978,7 +978,7 @@
                         QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_NUM_CHANNELS
                         ])
                     {
-                        ALOGE("%s:"
+                        ALOGD("%s:"
                             "QCA_WLAN_VENDOR_ATTR_LL_STATS_RADIO_NUM_CHANNELS"
                             " not found", __FUNCTION__);
                         status = WIFI_ERROR_INVALID_ARGS;
diff --git a/qcwcn/wifi_hal/tdls.cpp b/qcwcn/wifi_hal/tdls.cpp
index c794a56..54555e2 100644
--- a/qcwcn/wifi_hal/tdls.cpp
+++ b/qcwcn/wifi_hal/tdls.cpp
@@ -123,9 +123,15 @@
                             __FUNCTION__);
                     return WIFI_ERROR_INVALID_ARGS;
                 }
+                if (nla_len(tb_vendor[QCA_WLAN_VENDOR_ATTR_TDLS_MAC_ADDR]) != sizeof(mac_addr))
+                {
+                    ALOGE("%s: QCA_WLAN_VENDOR_ATTR_TDLS_MAC_ADDR Invalid mac addr lenght",
+                            __FUNCTION__);
+                    return WIFI_ERROR_INVALID_ARGS;
+                }
                 memcpy(addr,
                   (u8 *)nla_data(tb_vendor[QCA_WLAN_VENDOR_ATTR_TDLS_MAC_ADDR]),
-                  nla_len(tb_vendor[QCA_WLAN_VENDOR_ATTR_TDLS_MAC_ADDR]));
+                  sizeof(mac_addr));
 
                 ALOGV(MAC_ADDR_STR, MAC_ADDR_ARRAY(addr));
 
diff --git a/qcwcn/wifi_hal/wifi_hal.cpp b/qcwcn/wifi_hal/wifi_hal.cpp
index 940469b..50f8691 100644
--- a/qcwcn/wifi_hal/wifi_hal.cpp
+++ b/qcwcn/wifi_hal/wifi_hal.cpp
@@ -147,6 +147,7 @@
 wifi_error
     wifi_init_tcp_param_change_event_handler(wifi_interface_handle iface);
 
+wifi_error wifi_set_voip_mode(wifi_interface_handle iface, wifi_voip_mode mode);
 #ifndef TARGET_SUPPORTS_WEARABLES
 wifi_error wifi_get_supported_iface_combination(wifi_interface_handle iface_handle);
 
@@ -604,6 +605,15 @@
     struct nlattr *nl_attr_unsafe_chan = NULL;
     struct nlattr *unsafe_channels_attr = NULL;
     hal_info *info = NULL;
+    int freq_cnt = 0;
+    u32 *freq = (u32 *) malloc(sizeof(u32) * num_channels);
+    u32 *power_cap_dbm = (u32 *) malloc(sizeof(u32) * num_channels);
+
+    if (!freq || !power_cap_dbm) {
+        ALOGE("%s: Failed to allocate memory", __FUNCTION__);
+        ret = WIFI_ERROR_OUT_OF_MEMORY;
+        goto cleanup;
+    }
 
     if (!handle) {
          ALOGE("%s: Error, wifi_handle NULL", __FUNCTION__);
@@ -652,6 +662,25 @@
     }
     ALOGD("%s: num_channels:%d, restrictions:%x", __FUNCTION__, num_channels,
           restrictions);
+    for (int i = 0; i < num_channels; i++)
+    {
+        u32 frequency = get_frequency_from_channel(unsafeChannels[i].channel,
+                unsafeChannels[i].band);
+        if (frequency != 0)
+        {
+          freq[freq_cnt] = frequency;
+          power_cap_dbm[freq_cnt] = unsafeChannels[i].power_cap_dbm;
+          freq_cnt++;
+          ALOGV("%s: channel:%d, freq:%d, power_cap_dbm:%d, band:%d",
+               __FUNCTION__, unsafeChannels[i].channel, frequency,
+               unsafeChannels[i].power_cap_dbm, unsafeChannels[i].band);
+        }
+        else {
+            ALOGV("%s: Invalid channel found, channel:%d, power_cap_dbm:%d, band:%d",
+               __FUNCTION__, unsafeChannels[i].channel,
+               unsafeChannels[i].power_cap_dbm, unsafeChannels[i].band);
+        }
+    }
     if (num_channels == 0) {
          unsafe_channels_attr = cmd->attr_start(0);
          if (!unsafe_channels_attr) {
@@ -683,61 +712,59 @@
             ret = WIFI_ERROR_INVALID_ARGS;
             goto cleanup;
         }
-    }
-    for (int i = 0; i < num_channels; i++) {
-         unsafe_channels_attr = cmd->attr_start(i);
-         if (!unsafe_channels_attr) {
-              ALOGE("%s: failed attr_start for unsafe_channels_attr of"
+
+        if(freq_cnt == 0)
+        {
+            ALOGE("%s: No valid frequency, ignore channel list", __FUNCTION__);
+            ret = WIFI_ERROR_INVALID_ARGS;
+            goto cleanup;
+        }
+        for (int i = 0; i < freq_cnt; i++) {
+            unsafe_channels_attr = cmd->attr_start(i);
+            if (!unsafe_channels_attr) {
+                ALOGE("%s: failed attr_start for unsafe_channels_attr of"
                     " index:%d", __FUNCTION__, i);
-              ret = WIFI_ERROR_OUT_OF_MEMORY;
-              goto cleanup;
-         }
-         u32 freq = get_frequency_from_channel(unsafeChannels[i].channel,
-               unsafeChannels[i].band);
-         if (!freq) {
-              ALOGE("%s: Failed to get frequency of band:%d, channel:%d",
-                        __FUNCTION__, (int)unsafeChannels[i].band,
-                        unsafeChannels[i].channel);
-              ret = WIFI_ERROR_INVALID_ARGS;
-              goto cleanup;
-         }
-         ret = cmd->put_u32(
-               QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_START, freq);
-         if (ret != WIFI_SUCCESS) {
-              ALOGE("%s: Failed to put frequency start, ret:%d",
+                ret = WIFI_ERROR_OUT_OF_MEMORY;
+                goto cleanup;
+            }
+
+            ret = cmd->put_u32(
+                  QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_START, freq[i]);
+            if (ret != WIFI_SUCCESS) {
+                ALOGE("%s: Failed to put frequency start, ret:%d",
+                      __FUNCTION__, ret);
+                goto cleanup;
+            }
+            ret = cmd->put_u32(
+                QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_END, freq[i]);
+            if (ret != WIFI_SUCCESS) {
+                ALOGE("%s: Failed to put frequency end, ret:%d",
                     __FUNCTION__, ret);
-              goto cleanup;
-         }
-         ret = cmd->put_u32(
-               QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_END, freq);
-         if (ret != WIFI_SUCCESS) {
-              ALOGE("%s: Failed to put frequency end, ret:%d",
-                    __FUNCTION__, ret);
-              goto cleanup;
-         }
-         /**
-          * WIFI_COEX_NO_POWER_CAP (0x7FFFFFF) is specific to android
-          * framework, this value denotes that framework/wifihal is not
-          * providing any power cap and allow driver/firmware to operate on
-          * current power cap dbm. As driver is supposed to work on with
-          * LA/LE etc, we are skipping to send 0x7FFFFFF down to driver,
-          * hence driver will be operating as per current power cap calculated
-          * based on regulatory or other constraints.
-          */
-         if (unsafeChannels[i].power_cap_dbm != WIFI_COEX_NO_POWER_CAP) {
-             ret = cmd->put_s32(
-                   QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_POWER_CAP_DBM,
-                   unsafeChannels[i].power_cap_dbm);
-             if (ret != WIFI_SUCCESS) {
-                 ALOGE("%s: Failed to put power_cap_dbm, ret:%d",
-                       __FUNCTION__, ret);
-                 goto cleanup;
-             }
-         }
-         cmd->attr_end(unsafe_channels_attr);
-         ALOGD("%s: channel:%d, freq:%d, power_cap_dbm:%d, band:%d",
-               __FUNCTION__, unsafeChannels[i].channel, freq,
-               unsafeChannels[i].power_cap_dbm, unsafeChannels[i].band);
+                goto cleanup;
+            }
+            /**
+             * WIFI_COEX_NO_POWER_CAP (0x7FFFFFF) is specific to android
+             * framework, this value denotes that framework/wifihal is not
+             * providing any power cap and allow driver/firmware to operate on
+             * current power cap dbm. As driver is supposed to work on with
+             * LA/LE etc, we are skipping to send 0x7FFFFFF down to driver,
+             * hence driver will be operating as per current power cap calculated
+             * based on regulatory or other constraints.
+             */
+            if (power_cap_dbm[i] != WIFI_COEX_NO_POWER_CAP) {
+                ret = cmd->put_s32(
+                      QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_POWER_CAP_DBM,
+                      power_cap_dbm[i]);
+                if (ret != WIFI_SUCCESS) {
+                    ALOGE("%s: Failed to put power_cap_dbm, ret:%d",
+                          __FUNCTION__, ret);
+                    goto cleanup;
+                }
+            }
+            ALOGD("%s: freq:%d, power_cap_dbm:%d",
+                   __FUNCTION__, freq[i], power_cap_dbm[i]);
+            cmd->attr_end(unsafe_channels_attr);
+        }
     }
     cmd->attr_end(nl_attr_unsafe_chan);
     if (num_channels > 0) {
@@ -761,6 +788,10 @@
 cleanup:
     if (cmd)
         delete cmd;
+    if (freq)
+        free (freq);
+    if (power_cap_dbm)
+        free (power_cap_dbm);
     return ret;
 }
 
@@ -1096,6 +1127,7 @@
     fn->wifi_multi_sta_set_use_case = wifi_multi_sta_set_use_case;
     fn->wifi_set_coex_unsafe_channels = wifi_set_coex_unsafe_channels;
     fn->wifi_set_dtim_config = wifi_set_dtim_config;
+    fn->wifi_set_voip_mode = wifi_set_voip_mode;
     fn->wifi_get_usable_channels = wifi_get_usable_channels;
     fn->wifi_get_supported_radio_combinations_matrix =
                                 wifi_get_supported_radio_combinations_matrix;
@@ -1506,14 +1538,12 @@
     if (fd < 0) {
         ALOGE("Failed to open driver state control param at %s",
               WIFI_DRIVER_STATE_CTRL_PARAM);
-        close(fd);
         return -1;
     }
     len = strlen(state) + 1;
     if (TEMP_FAILURE_RETRY(write(fd, state, len)) != len) {
         ALOGE("Failed to write driver state control param at %s",
               WIFI_DRIVER_STATE_CTRL_PARAM);
-        close(fd);
         ret = -1;
     }
     close(fd);
@@ -3449,7 +3479,7 @@
     return buf;
 
 error:
-    ALOGE("snprintf() error res=%d, write length=%d", res, end - pos);
+    ALOGE("snprintf() error res=%d, write length=%d", res, static_cast<int>(end - pos));
     return NULL;
 }
 
diff --git a/qcwcn/wifi_hal/wificonfig.cpp b/qcwcn/wifi_hal/wificonfig.cpp
index 475dd74..4b2a35f 100644
--- a/qcwcn/wifi_hal/wificonfig.cpp
+++ b/qcwcn/wifi_hal/wificonfig.cpp
@@ -1665,3 +1665,77 @@
     delete wifiConfigCommand;
     return (wifi_error)ret;
 }
+
+/**
+ * Invoked to set voip optimization mode for the provided STA iface
+ */
+ wifi_error wifi_set_voip_mode(wifi_interface_handle iface, wifi_voip_mode mode)
+{
+    int requestId;
+    WiFiConfigCommand *wifiConfigCommand;
+    wifi_error ret;
+
+    struct nlattr *nlData;
+    interface_info *ifaceInfo = getIfaceInfo(iface);
+
+    wifi_handle wifiHandle = getWifiHandle(iface);
+    if (!wifiHandle) {
+        ALOGE("%s: Error wifi_handle NULL", __FUNCTION__);
+        return WIFI_ERROR_UNKNOWN;
+    }
+
+    requestId = get_requestid();
+    ALOGV("%s: voip mode=%d", __FUNCTION__, mode);
+    wifiConfigCommand = new WiFiConfigCommand(
+                            wifiHandle,
+                            requestId,
+                            OUI_QCA,
+                            QCA_NL80211_VENDOR_SUBCMD_SET_WIFI_CONFIGURATION);
+
+    if (wifiConfigCommand == NULL) {
+        ALOGE("%s: Error wifiConfigCommand NULL", __FUNCTION__);
+        return WIFI_ERROR_UNKNOWN;
+    }
+
+    /* Create the NL message. */
+    ret = wifiConfigCommand->create();
+    if (ret < 0) {
+        ALOGE("%s: failed to create NL msg. Error:%d", __FUNCTION__, ret);
+        goto cleanup;
+    }
+
+    /* Set the interface Id of the message. */
+    ret = wifiConfigCommand->set_iface_id(ifaceInfo->name);
+    if (ret < 0) {
+        ALOGE("%s: failed to set iface id. Error:%d", __FUNCTION__, ret);
+        goto cleanup;
+    }
+
+    /* Add the vendor specific attributes for the NL command. */
+    nlData = wifiConfigCommand->attr_start(NL80211_ATTR_VENDOR_DATA);
+    if (!nlData) {
+        ALOGE("%s: failed attr_start for VENDOR_DATA", __FUNCTION__);
+        ret = WIFI_ERROR_UNKNOWN;
+        goto cleanup;
+    }
+
+    if (wifiConfigCommand->put_u8(QCA_WLAN_VENDOR_ATTR_CONFIG_WFC_STATE,
+        (mode==WIFI_VOIP_MODE_ON) ? 1 : 0)) {
+        ALOGE("%s: failed to put vendor data", __FUNCTION__);
+        ret = WIFI_ERROR_UNKNOWN;
+        goto cleanup;
+    }
+    wifiConfigCommand->attr_end(nlData);
+
+    /* Send the NL msg. */
+    wifiConfigCommand->waitForRsp(false);
+    ret = wifiConfigCommand->requestEvent();
+    if (ret != 0) {
+        ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret);
+        goto cleanup;
+    }
+
+cleanup:
+    delete wifiConfigCommand;
+    return ret;
+}
diff --git a/qcwcn/wifi_hal/wifilogger_diag.cpp b/qcwcn/wifi_hal/wifilogger_diag.cpp
index 2b2021a..96202c4 100644
--- a/qcwcn/wifi_hal/wifilogger_diag.cpp
+++ b/qcwcn/wifi_hal/wifilogger_diag.cpp
@@ -2781,7 +2781,7 @@
         if (!info->cldctx) {
             if ((wnl->nlh.nlmsg_len <= sizeof(tAniNlHdr)) ||
                 (wnl->nlh.nlmsg_len < (sizeof(tAniNlHdr) + ntohs(wnl->clh.wmsg.length)))) {
-                ALOGE("Received UMAC message with insufficent length: %d",
+                ALOGV("Received UMAC message with insufficent length: %d",
                       wnl->nlh.nlmsg_len);
                 return WIFI_ERROR_UNKNOWN;
             }
diff --git a/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c b/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c
index 00cdae7..daced34 100644
--- a/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c
+++ b/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c
@@ -2831,7 +2831,7 @@
 		   twt_setup_params->min_wake_duration);
 	wpa_printf(MSG_DEBUG, "TWT: max wake duration: %d ",
 		   twt_setup_params->max_wake_duration);
-	wpa_printf(MSG_DEBUG, "TWT: wake tsf: 0x%llx ",
+	wpa_printf(MSG_DEBUG, "TWT: wake tsf: 0x%lx ",
 		   twt_setup_params->wake_tsf);
 	wpa_printf(MSG_DEBUG, "TWT: announce timeout(in us): %u",
 		   twt_setup_params->announce_timeout_us);
@@ -5701,7 +5701,7 @@
 		return NL_SKIP;
 	}
 	ret = os_snprintf(info->reply_buf, info->reply_buf_len,
-			  "tsf_value:%llu host_time:%llu", tsf_value, host_time);
+			  "tsf_value:%lul host_time:%lul", tsf_value, host_time);
 	if (os_snprintf_error(info->reply_buf_len, ret)) {
 		wpa_printf(MSG_ERROR, "%s:Fail to print buffer", __func__);
 		return -ENOMEM;
diff --git a/wcnss-service/Android.mk b/wcnss-service/Android.mk
index ab866a3..9eab85b 100644
--- a/wcnss-service/Android.mk
+++ b/wcnss-service/Android.mk
@@ -9,18 +9,27 @@
 LOCAL_SRC_FILES := wcnss_service.c
 LOCAL_SHARED_LIBRARIES := libc libcutils libutils liblog
 ifeq ($(strip $(TARGET_USES_QCOM_WCNSS_QMI)),true)
-LOCAL_CFLAGS += -DWCNSS_QMI
+ifeq ($(TARGET_USES_WCNSS_MAC_ADDR_REV),true)
+LOCAL_CFLAGS += -DWCNSS_QMI_MAC_ADDR_REV
+endif
+ifeq ($(TARGET_PROVIDES_WCNSS_QMI),true)
+LOCAL_CFLAGS += -DWCNSS_QMI_OSS
+LOCAL_SHARED_LIBRARIES += libdl
+else
+LOCAL_CFLAGS += -DWCNSS_QMI -DMDM_DETECT
+LOCAL_HEADER_LIBRARIES += libmdmdetect_headers
 ifeq ($(filter 10% Q% q%,$(TARGET_PLATFORM_VERSION)),)
 #For Android R and above, assuming not compiling on Q and lower
 LOCAL_HEADER_LIBRARIES += libqmi_common_headers
 else
 LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/qmi-framework/inc
 endif
-LOCAL_SRC_FILES += wcnss_qmi_client.c
-LOCAL_SHARED_LIBRARIES += libqmiservices libqmi_cci
+LOCAL_SRC_FILES += wcnss_qmi_client.c device_management_service_v01.c
+LOCAL_SHARED_LIBRARIES += libqmi_cci libqmi_common_so
 LOCAL_HEADER_LIBRARIES += libmdmdetect_headers
 LOCAL_SHARED_LIBRARIES += libmdmdetect
 LOCAL_HEADER_LIBRARIES += libril-qc-qmi-services-headers
+endif #TARGET_PROVIDES_WCNSS_QMI
 endif #TARGET_USES_QCOM_WCNSS_QMI
 LOCAL_MODULE_TAGS := optional
 LOCAL_CFLAGS += -Wall -Werror
diff --git a/wcnss-service/device_management_service_v01.c b/wcnss-service/device_management_service_v01.c
new file mode 100644
index 0000000..cb3c392
--- /dev/null
+++ b/wcnss-service/device_management_service_v01.c
@@ -0,0 +1,1729 @@
+/*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*
+
+                        D E V I C E _ M A N A G E M E N T _ S E R V I C E _ V 0 1  . C
+
+GENERAL DESCRIPTION
+  This is the file which defines the dms service Data structures.
+
+  Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+  SPDX-License-Identifier: BSD-3-Clause-Clear
+
+  $Header$
+ *====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*/
+/*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*
+ *THIS IS AN AUTO GENERATED FILE. DO NOT ALTER IN ANY WAY
+ *====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*/
+
+/* This file was generated with Tool version 6.2
+   It was generated on: Fri Oct 25 2013 (Spin 0)
+   From IDL File: device_management_service_v01.idl */
+
+#include "stdint.h"
+#include "qmi_idl_lib_internal.h"
+#include "device_management_service_v01.h"
+#include "common_v01.h"
+
+
+/*Type Definitions*/
+static const uint8_t dms_battery_lvl_limits_type_data_v01[] = {
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_battery_lvl_limits_type_v01, battery_lvl_lower_limit),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_battery_lvl_limits_type_v01, battery_lvl_upper_limit),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_power_state_type_data_v01[] = {
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_power_state_type_v01, power_status),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_power_state_type_v01, battery_lvl),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_pin_status_type_data_v01[] = {
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_pin_status_type_v01, status),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pin_status_type_v01, verify_retries_left),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pin_status_type_v01, unblock_retries_left),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_subs_config_type_data_v01[] = {
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_subs_config_type_v01, max_active),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(dms_subs_config_type_v01, subscription_list),
+  QMI_DMS_MAX_SUBSCRIPTION_LIST_LEN_V01,
+  QMI_IDL_OFFSET8(dms_subs_config_type_v01, subscription_list) - QMI_IDL_OFFSET8(dms_subs_config_type_v01, subscription_list_len),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_multisim_capability_type_data_v01[] = {
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_multisim_capability_type_v01, max_subscriptions),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_multisim_capability_type_v01, subscription_config_list),
+  QMI_DMS_MAX_CONFIG_LIST_LEN_V01,
+  QMI_IDL_OFFSET8(dms_multisim_capability_type_v01, subscription_config_list) - QMI_IDL_OFFSET8(dms_multisim_capability_type_v01, subscription_config_list_len),
+  QMI_IDL_TYPE88(0, 3),
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_device_capabilities_type_data_v01[] = {
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(dms_device_capabilities_type_v01, max_tx_channel_rate),
+
+  QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(dms_device_capabilities_type_v01, max_rx_channel_rate),
+
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_device_capabilities_type_v01, data_service_capability),
+
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_device_capabilities_type_v01, sim_capability),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_device_capabilities_type_v01, radio_if_list),
+  QMI_DMS_RADIO_IF_LIST_MAX_V01,
+  QMI_IDL_OFFSET8(dms_device_capabilities_type_v01, radio_if_list) - QMI_IDL_OFFSET8(dms_device_capabilities_type_v01, radio_if_list_len),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_pin_protection_info_type_data_v01[] = {
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_pin_protection_info_type_v01, pin_id),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pin_protection_info_type_v01, protection_setting_enabled),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pin_protection_info_type_v01, pin_value),
+  QMI_DMS_PIN_VALUE_MAX_V01,
+  QMI_IDL_OFFSET8(dms_pin_protection_info_type_v01, pin_value) - QMI_IDL_OFFSET8(dms_pin_protection_info_type_v01, pin_value_len),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_pin_retries_status_type_data_v01[] = {
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pin_retries_status_type_v01, verify_retries_left),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pin_retries_status_type_v01, unblock_retries_left),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_pin_info_type_data_v01[] = {
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_pin_info_type_v01, pin_id),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pin_info_type_v01, pin_value),
+  QMI_DMS_PIN_VALUE_MAX_V01,
+  QMI_IDL_OFFSET8(dms_pin_info_type_v01, pin_value) - QMI_IDL_OFFSET8(dms_pin_info_type_v01, pin_value_len),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_pin_unblock_info_type_data_v01[] = {
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_pin_unblock_info_type_v01, unblock_pin_id),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pin_unblock_info_type_v01, puk_value),
+  QMI_DMS_PUK_VALUE_MAX_V01,
+  QMI_IDL_OFFSET8(dms_pin_unblock_info_type_v01, puk_value) - QMI_IDL_OFFSET8(dms_pin_unblock_info_type_v01, puk_value_len),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pin_unblock_info_type_v01, new_pin_value),
+  QMI_DMS_PUK_VALUE_MAX_V01,
+  QMI_IDL_OFFSET8(dms_pin_unblock_info_type_v01, new_pin_value) - QMI_IDL_OFFSET8(dms_pin_unblock_info_type_v01, new_pin_value_len),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_pin_change_info_type_data_v01[] = {
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_pin_change_info_type_v01, pin_id),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pin_change_info_type_v01, old_pin_value),
+  QMI_DMS_PIN_VALUE_MAX_V01,
+  QMI_IDL_OFFSET8(dms_pin_change_info_type_v01, old_pin_value) - QMI_IDL_OFFSET8(dms_pin_change_info_type_v01, old_pin_value_len),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pin_change_info_type_v01, new_pin_value),
+  QMI_DMS_PIN_VALUE_MAX_V01,
+  QMI_IDL_OFFSET8(dms_pin_change_info_type_v01, new_pin_value) - QMI_IDL_OFFSET8(dms_pin_change_info_type_v01, new_pin_value_len),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_device_time_type_data_v01[] = {
+  QMI_IDL_FLAGS_IS_ARRAY |QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_device_time_type_v01, time_count),
+  6,
+
+  QMI_IDL_2_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_device_time_type_v01, time_source),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_activation_code_type_data_v01[] = {
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_activation_code_type_v01, act_code),
+  QMI_DMS_ACTIVATION_CODE_MAX_V01,
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_manual_act_data_type_data_v01[] = {
+  QMI_IDL_FLAGS_IS_ARRAY |QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_manual_act_data_type_v01, spc),
+  QMI_DMS_SPC_LEN_V01,
+
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(dms_manual_act_data_type_v01, sid),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_manual_act_data_type_v01, mdn),
+  QMI_DMS_MDN_MAX_V01,
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_manual_act_data_type_v01, min),
+  QMI_DMS_MIN_MAX_V01,
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_mn_ha_key_type_data_v01[] = {
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_mn_ha_key_type_v01, mn_ha_key),
+  QMI_DMS_HA_KEY_MAX_V01,
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_mn_aaa_key_type_data_v01[] = {
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_mn_aaa_key_type_v01, mn_aaa_key),
+  QMI_DMS_AAA_KEY_MAX_V01,
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_pref_roaming_list_type_data_v01[] = {
+  QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(dms_pref_roaming_list_type_v01, prl_total_len),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_FLAGS_FIRST_EXTENDED |  QMI_IDL_FLAGS_SZ_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_FLAGS_ARRAY_LENGTH_ONLY,
+  QMI_IDL_OFFSET8(dms_pref_roaming_list_type_v01, prl),
+  ((QMI_DMS_PRL_DATA_MAX_V01) & 0xFF), ((QMI_DMS_PRL_DATA_MAX_V01) >> 8),
+  QMI_IDL_OFFSET8(dms_pref_roaming_list_type_v01, prl) - QMI_IDL_OFFSET8(dms_pref_roaming_list_type_v01, prl_len),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_pref_roaming_list_type_v01, prl_seg_num),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_FLAGS_FIRST_EXTENDED |  QMI_IDL_FLAGS_SZ_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_FLAGS_ARRAY_DATA_ONLY,
+  QMI_IDL_OFFSET8(dms_pref_roaming_list_type_v01, prl),
+  ((QMI_DMS_PRL_DATA_MAX_V01) & 0xFF), ((QMI_DMS_PRL_DATA_MAX_V01) >> 8),
+  QMI_IDL_OFFSET8(dms_pref_roaming_list_type_v01, prl) - QMI_IDL_OFFSET8(dms_pref_roaming_list_type_v01, prl_len),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_user_lock_state_info_type_data_v01[] = {
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_user_lock_state_info_type_v01, lock_state),
+
+  QMI_IDL_FLAGS_IS_ARRAY |QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_user_lock_state_info_type_v01, lock_code),
+  QMI_DMS_LOCK_CODE_LEN_V01,
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_user_lock_set_info_type_data_v01[] = {
+  QMI_IDL_FLAGS_IS_ARRAY |QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_user_lock_set_info_type_v01, cur_code),
+  QMI_DMS_LOCK_CODE_LEN_V01,
+
+  QMI_IDL_FLAGS_IS_ARRAY |QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_user_lock_set_info_type_v01, new_code),
+  QMI_DMS_LOCK_CODE_LEN_V01,
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_user_data_type_data_v01[] = {
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_SZ_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_user_data_type_v01, data),
+  ((QMI_DMS_USER_DATA_MAX_V01) & 0xFF), ((QMI_DMS_USER_DATA_MAX_V01) >> 8),
+  QMI_IDL_OFFSET8(dms_user_data_type_v01, data) - QMI_IDL_OFFSET8(dms_user_data_type_v01, data_len),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_eri_data_type_data_v01[] = {
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_SZ_IS_16 | QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_eri_data_type_v01, eri_data),
+  ((QMI_DMS_ERI_DATA_MAX_V01) & 0xFF), ((QMI_DMS_ERI_DATA_MAX_V01) >> 8),
+  QMI_IDL_OFFSET8(dms_eri_data_type_v01, eri_data) - QMI_IDL_OFFSET8(dms_eri_data_type_v01, eri_data_len),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_facility_state_info_type_data_v01[] = {
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_facility_state_info_type_v01, facility_state),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_facility_state_info_type_v01, verify_reties_left),
+
+  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_facility_state_info_type_v01, unblock_retries_left),
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_facility_set_ck_info_type_data_v01[] = {
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_facility_set_ck_info_type_v01, facility),
+
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_facility_set_ck_info_type_v01, facility_state),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_facility_set_ck_info_type_v01, facility_ck),
+  QMI_DMS_FACILITY_CK_MAX_V01,
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+static const uint8_t dms_facility_unblock_info_type_data_v01[] = {
+  QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_facility_unblock_info_type_v01, facility),
+
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_facility_unblock_info_type_v01, facility_unblock_ck),
+  QMI_DMS_FACILITY_UNBLOCK_CK_MAX_V01,
+
+  QMI_IDL_FLAG_END_VALUE
+};
+
+/*Message Definitions*/
+/*
+ * dms_reset_req_msg is empty
+ * static const uint8_t dms_reset_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_reset_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_reset_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_set_event_report_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_power_state) - QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_power_state_valid)),
+  0x10,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_power_state),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, lvl_limits) - QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, lvl_limits_valid)),
+  0x11,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, lvl_limits),
+  QMI_IDL_TYPE88(0, 0),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_pin_state) - QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_pin_state_valid)),
+  0x12,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_pin_state),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_activation_state) - QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_activation_state_valid)),
+  0x13,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_activation_state),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_oprt_mode_state) - QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_oprt_mode_state_valid)),
+  0x14,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_oprt_mode_state),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_uim_state) - QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_uim_state_valid)),
+  0x15,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_uim_state),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_wireless_disable_state) - QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_wireless_disable_state_valid)),
+  0x16,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_wireless_disable_state),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_prl_init) - QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_prl_init_valid)),
+  0x17,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_prl_init),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_cdma_lock_mode) - QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_cdma_lock_mode_valid)),
+  0x18,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_cdma_lock_mode),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_device_multisim_info) - QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_device_multisim_info_valid)),
+  0x19,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_event_report_req_msg_v01, report_device_multisim_info)
+};
+
+static const uint8_t dms_set_event_report_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_event_report_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_event_report_ind_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, power_state) - QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, power_state_valid)),
+  0x10,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, power_state),
+  QMI_IDL_TYPE88(0, 1),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, pin1_status) - QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, pin1_status_valid)),
+  0x11,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, pin1_status),
+  QMI_IDL_TYPE88(0, 2),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, pin2_status) - QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, pin2_status_valid)),
+  0x12,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, pin2_status),
+  QMI_IDL_TYPE88(0, 2),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, activation_state) - QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, activation_state_valid)),
+  0x13,
+   QMI_IDL_2_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, activation_state),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, operating_mode) - QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, operating_mode_valid)),
+  0x14,
+   QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, operating_mode),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, uim_state) - QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, uim_state_valid)),
+  0x15,
+   QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, uim_state),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, wireless_disable_state) - QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, wireless_disable_state_valid)),
+  0x16,
+   QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, wireless_disable_state),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, prl_init) - QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, prl_init_valid)),
+  0x17,
+   QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, prl_init),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, cdma_lock_mode_state) - QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, cdma_lock_mode_state_valid)),
+  0x18,
+   QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, cdma_lock_mode_state),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, multisim_capability) - QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, multisim_capability_valid)),
+  0x19,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_event_report_ind_msg_v01, multisim_capability),
+  QMI_IDL_TYPE88(0, 4)
+};
+
+/*
+ * dms_get_device_cap_req_msg is empty
+ * static const uint8_t dms_get_device_cap_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_device_cap_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, device_capabilities),
+  QMI_IDL_TYPE88(0, 5),
+
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, device_service_capability) - QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, device_service_capability_valid)),
+  0x10,
+   QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, device_service_capability),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, voice_support_capability) - QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, voice_support_capability_valid)),
+  0x11,
+   QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, voice_support_capability),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, simul_voice_and_data_capability) - QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, simul_voice_and_data_capability_valid)),
+  0x12,
+   QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, simul_voice_and_data_capability),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, multisim_capability) - QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, multisim_capability_valid)),
+  0x13,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_device_cap_resp_msg_v01, multisim_capability),
+  QMI_IDL_TYPE88(0, 4)
+};
+
+/*
+ * dms_get_device_mfr_req_msg is empty
+ * static const uint8_t dms_get_device_mfr_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_device_mfr_resp_msg_data_v01[] = {
+  0x01,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_device_mfr_resp_msg_v01, device_manufacturer),
+  QMI_DMS_DEVICE_MANUFACTURER_MAX_V01,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_device_mfr_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_device_model_id_req_msg is empty
+ * static const uint8_t dms_get_device_model_id_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_device_model_id_resp_msg_data_v01[] = {
+  0x01,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_SZ_IS_16 |   QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_device_model_id_resp_msg_v01, device_model_id),
+  ((QMI_DMS_DEVICE_MODEL_ID_MAX_V01) & 0xFF), ((QMI_DMS_DEVICE_MODEL_ID_MAX_V01) >> 8),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(dms_get_device_model_id_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_device_rev_id_req_msg is empty
+ * static const uint8_t dms_get_device_rev_id_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_device_rev_id_resp_msg_data_v01[] = {
+  0x01,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_SZ_IS_16 |   QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_device_rev_id_resp_msg_v01, device_rev_id),
+  ((QMI_DMS_DEVICE_REV_ID_MAX_V01) & 0xFF), ((QMI_DMS_DEVICE_REV_ID_MAX_V01) >> 8),
+
+  0x02,
+   QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(dms_get_device_rev_id_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(dms_get_device_rev_id_resp_msg_v01, boot_code_rev) - QMI_IDL_OFFSET16RELATIVE(dms_get_device_rev_id_resp_msg_v01, boot_code_rev_valid)),
+  0x10,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_STRING,
+  QMI_IDL_OFFSET16ARRAY(dms_get_device_rev_id_resp_msg_v01, boot_code_rev),
+  QMI_DMS_BOOT_CODE_REV_MAX_V01,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET16RELATIVE(dms_get_device_rev_id_resp_msg_v01, pri_rev) - QMI_IDL_OFFSET16RELATIVE(dms_get_device_rev_id_resp_msg_v01, pri_rev_valid)),
+  0x11,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_STRING,
+  QMI_IDL_OFFSET16ARRAY(dms_get_device_rev_id_resp_msg_v01, pri_rev),
+  QMI_DMS_PRI_REV_MAX_V01
+};
+
+/*
+ * dms_get_msisdn_req_msg is empty
+ * static const uint8_t dms_get_msisdn_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_msisdn_resp_msg_data_v01[] = {
+  0x01,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_msisdn_resp_msg_v01, voice_number),
+  QMI_DMS_VOICE_NUMBER_MAX_V01,
+
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_msisdn_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_msisdn_resp_msg_v01, mobile_id_number) - QMI_IDL_OFFSET8(dms_get_msisdn_resp_msg_v01, mobile_id_number_valid)),
+  0x10,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_msisdn_resp_msg_v01, mobile_id_number),
+  QMI_DMS_MOBILE_ID_NUMBER_MAX_V01,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_msisdn_resp_msg_v01, imsi) - QMI_IDL_OFFSET8(dms_get_msisdn_resp_msg_v01, imsi_valid)),
+  0x11,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_msisdn_resp_msg_v01, imsi),
+  QMI_DMS_IMSI_MAX_V01
+};
+
+/*
+ * dms_get_device_serial_numbers_req_msg is empty
+ * static const uint8_t dms_get_device_serial_numbers_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_device_serial_numbers_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, esn) - QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, esn_valid)),
+  0x10,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, esn),
+  QMI_DMS_ESN_MAX_V01,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, imei) - QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, imei_valid)),
+  0x11,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, imei),
+  QMI_DMS_IMEI_MAX_V01,
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, meid) - QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, meid_valid)),
+  0x12,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, meid),
+  QMI_DMS_MEID_MAX_V01,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, imeisv_svn) - QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, imeisv_svn_valid)),
+  0x13,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_device_serial_numbers_resp_msg_v01, imeisv_svn),
+  QMI_DMS_IMEISV_MAX_V01
+};
+
+/*
+ * dms_get_power_state_req_msg is empty
+ * static const uint8_t dms_get_power_state_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_power_state_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_power_state_resp_msg_v01, power_state),
+  QMI_IDL_TYPE88(0, 1),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_power_state_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_uim_set_pin_protection_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_set_pin_protection_req_msg_v01, pin_protection_info),
+  QMI_IDL_TYPE88(0, 6)
+};
+
+static const uint8_t dms_uim_set_pin_protection_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_set_pin_protection_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_uim_set_pin_protection_resp_msg_v01, pin_retries_status) - QMI_IDL_OFFSET8(dms_uim_set_pin_protection_resp_msg_v01, pin_retries_status_valid)),
+  0x10,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_set_pin_protection_resp_msg_v01, pin_retries_status),
+  QMI_IDL_TYPE88(0, 7)
+};
+
+static const uint8_t dms_uim_verify_pin_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_verify_pin_req_msg_v01, pin_info),
+  QMI_IDL_TYPE88(0, 8)
+};
+
+static const uint8_t dms_uim_verify_pin_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_verify_pin_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_uim_verify_pin_resp_msg_v01, pin_retries_status) - QMI_IDL_OFFSET8(dms_uim_verify_pin_resp_msg_v01, pin_retries_status_valid)),
+  0x10,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_verify_pin_resp_msg_v01, pin_retries_status),
+  QMI_IDL_TYPE88(0, 7)
+};
+
+static const uint8_t dms_uim_unblock_pin_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_unblock_pin_req_msg_v01, pin_unblock_info),
+  QMI_IDL_TYPE88(0, 9)
+};
+
+static const uint8_t dms_uim_unblock_pin_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_unblock_pin_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_uim_unblock_pin_resp_msg_v01, pin_retries_status) - QMI_IDL_OFFSET8(dms_uim_unblock_pin_resp_msg_v01, pin_retries_status_valid)),
+  0x10,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_unblock_pin_resp_msg_v01, pin_retries_status),
+  QMI_IDL_TYPE88(0, 7)
+};
+
+static const uint8_t dms_uim_change_pin_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_change_pin_req_msg_v01, pin_change_info),
+  QMI_IDL_TYPE88(0, 10)
+};
+
+static const uint8_t dms_uim_change_pin_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_change_pin_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_uim_change_pin_resp_msg_v01, pin_retries_status) - QMI_IDL_OFFSET8(dms_uim_change_pin_resp_msg_v01, pin_retries_status_valid)),
+  0x10,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_change_pin_resp_msg_v01, pin_retries_status),
+  QMI_IDL_TYPE88(0, 7)
+};
+
+/*
+ * dms_uim_get_pin_status_req_msg is empty
+ * static const uint8_t dms_uim_get_pin_status_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_uim_get_pin_status_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_get_pin_status_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_uim_get_pin_status_resp_msg_v01, pin1_status) - QMI_IDL_OFFSET8(dms_uim_get_pin_status_resp_msg_v01, pin1_status_valid)),
+  0x11,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_get_pin_status_resp_msg_v01, pin1_status),
+  QMI_IDL_TYPE88(0, 2),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_uim_get_pin_status_resp_msg_v01, pin2_status) - QMI_IDL_OFFSET8(dms_uim_get_pin_status_resp_msg_v01, pin2_status_valid)),
+  0x12,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_get_pin_status_resp_msg_v01, pin2_status),
+  QMI_IDL_TYPE88(0, 2)
+};
+
+/*
+ * dms_get_device_hardware_rev_req_msg is empty
+ * static const uint8_t dms_get_device_hardware_rev_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_device_hardware_rev_resp_msg_data_v01[] = {
+  0x01,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN | QMI_IDL_FLAGS_SZ_IS_16 |   QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_device_hardware_rev_resp_msg_v01, hardware_rev),
+  ((QMI_DMS_HARDWARE_REV_MAX_V01) & 0xFF), ((QMI_DMS_HARDWARE_REV_MAX_V01) >> 8),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(dms_get_device_hardware_rev_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_operating_mode_req_msg is empty
+ * static const uint8_t dms_get_operating_mode_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_operating_mode_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_get_operating_mode_resp_msg_v01, operating_mode),
+
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_operating_mode_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_operating_mode_resp_msg_v01, offline_reason) - QMI_IDL_OFFSET8(dms_get_operating_mode_resp_msg_v01, offline_reason_valid)),
+  0x10,
+   QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(dms_get_operating_mode_resp_msg_v01, offline_reason),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_operating_mode_resp_msg_v01, hardware_controlled_mode) - QMI_IDL_OFFSET8(dms_get_operating_mode_resp_msg_v01, hardware_controlled_mode_valid)),
+  0x11,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_get_operating_mode_resp_msg_v01, hardware_controlled_mode)
+};
+
+static const uint8_t dms_set_operating_mode_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_set_operating_mode_req_msg_v01, operating_mode)
+};
+
+static const uint8_t dms_set_operating_mode_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_operating_mode_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_time_req_msg is empty
+ * static const uint8_t dms_get_time_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_time_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_time_resp_msg_v01, device_time),
+  QMI_IDL_TYPE88(0, 11),
+
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_time_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_time_resp_msg_v01, sys_time_in_ms) - QMI_IDL_OFFSET8(dms_get_time_resp_msg_v01, sys_time_in_ms_valid)),
+  0x10,
+   QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(dms_get_time_resp_msg_v01, sys_time_in_ms),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_time_resp_msg_v01, user_time_in_ms) - QMI_IDL_OFFSET8(dms_get_time_resp_msg_v01, user_time_in_ms_valid)),
+  0x11,
+   QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(dms_get_time_resp_msg_v01, user_time_in_ms)
+};
+
+/*
+ * dms_get_prl_ver_req_msg is empty
+ * static const uint8_t dms_get_prl_ver_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_prl_ver_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(dms_get_prl_ver_resp_msg_v01, prl_version),
+
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_prl_ver_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_prl_ver_resp_msg_v01, prl_only) - QMI_IDL_OFFSET8(dms_get_prl_ver_resp_msg_v01, prl_only_valid)),
+  0x10,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_get_prl_ver_resp_msg_v01, prl_only)
+};
+
+/*
+ * dms_get_activation_state_req_msg is empty
+ * static const uint8_t dms_get_activation_state_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_activation_state_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_2_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_get_activation_state_resp_msg_v01, activation_state),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_activation_state_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_activate_automatic_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_activate_automatic_req_msg_v01, activation_code),
+  QMI_IDL_TYPE88(0, 12)
+};
+
+static const uint8_t dms_activate_automatic_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_activate_automatic_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_activate_manual_req_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_activate_manual_req_msg_v01, activation_data),
+  QMI_IDL_TYPE88(0, 13),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_activate_manual_req_msg_v01, mn_ha_key) - QMI_IDL_OFFSET8(dms_activate_manual_req_msg_v01, mn_ha_key_valid)),
+  0x11,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_activate_manual_req_msg_v01, mn_ha_key),
+  QMI_IDL_TYPE88(0, 14),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_activate_manual_req_msg_v01, mn_aaa_key) - QMI_IDL_OFFSET8(dms_activate_manual_req_msg_v01, mn_aaa_key_valid)),
+  0x12,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_activate_manual_req_msg_v01, mn_aaa_key),
+  QMI_IDL_TYPE88(0, 15),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_activate_manual_req_msg_v01, pref_roaming_list) - QMI_IDL_OFFSET8(dms_activate_manual_req_msg_v01, pref_roaming_list_valid)),
+  0x13,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_activate_manual_req_msg_v01, pref_roaming_list),
+  QMI_IDL_TYPE88(0, 16)
+};
+
+static const uint8_t dms_activate_manual_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_activate_manual_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_user_lock_state_req_msg is empty
+ * static const uint8_t dms_get_user_lock_state_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_user_lock_state_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_get_user_lock_state_resp_msg_v01, lock_enabled),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_user_lock_state_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_set_user_lock_state_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_user_lock_state_req_msg_v01, lock_info),
+  QMI_IDL_TYPE88(0, 17)
+};
+
+static const uint8_t dms_set_user_lock_state_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_user_lock_state_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_set_user_lock_code_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_user_lock_code_req_msg_v01, lock_info),
+  QMI_IDL_TYPE88(0, 18)
+};
+
+static const uint8_t dms_set_user_lock_code_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_user_lock_code_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_read_user_data_req_msg is empty
+ * static const uint8_t dms_read_user_data_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_read_user_data_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_read_user_data_resp_msg_v01, user_data),
+  QMI_IDL_TYPE88(0, 19),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(dms_read_user_data_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_write_user_data_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_write_user_data_req_msg_v01, user_data),
+  QMI_IDL_TYPE88(0, 19)
+};
+
+static const uint8_t dms_write_user_data_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_write_user_data_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_read_eri_file_req_msg is empty
+ * static const uint8_t dms_read_eri_file_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_read_eri_file_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_read_eri_file_resp_msg_v01, eri_file),
+  QMI_IDL_TYPE88(0, 20),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_FLAGS_OFFSET_IS_16 | QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET16ARRAY(dms_read_eri_file_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_restore_factory_defaults_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_FLAGS_IS_ARRAY |  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_restore_factory_defaults_req_msg_v01, spc),
+  QMI_DMS_SPC_LEN_V01
+};
+
+static const uint8_t dms_restore_factory_defaults_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_restore_factory_defaults_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_validate_service_programming_code_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_FLAGS_IS_ARRAY |  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_validate_service_programming_code_req_msg_v01, spc),
+  QMI_DMS_SPC_LEN_V01
+};
+
+static const uint8_t dms_validate_service_programming_code_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_validate_service_programming_code_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_uim_get_iccid_req_msg is empty
+ * static const uint8_t dms_uim_get_iccid_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_uim_get_iccid_resp_msg_data_v01[] = {
+  0x01,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_uim_get_iccid_resp_msg_v01, uim_id),
+  QMI_DMS_UIM_ID_MAX_V01,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_get_iccid_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_uim_get_ck_status_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_uim_get_ck_status_req_msg_v01, facility)
+};
+
+static const uint8_t dms_uim_get_ck_status_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_get_ck_status_resp_msg_v01, facility_info),
+  QMI_IDL_TYPE88(0, 21),
+
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_get_ck_status_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_uim_get_ck_status_resp_msg_v01, operation_blocking) - QMI_IDL_OFFSET8(dms_uim_get_ck_status_resp_msg_v01, operation_blocking_valid)),
+  0x10,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_uim_get_ck_status_resp_msg_v01, operation_blocking)
+};
+
+static const uint8_t dms_uim_set_ck_protection_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_set_ck_protection_req_msg_v01, facility_set_ck_info),
+  QMI_IDL_TYPE88(0, 22)
+};
+
+static const uint8_t dms_uim_set_ck_protection_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_set_ck_protection_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_uim_set_ck_protection_resp_msg_v01, verify_retries_left) - QMI_IDL_OFFSET8(dms_uim_set_ck_protection_resp_msg_v01, verify_retries_left_valid)),
+  0x10,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_uim_set_ck_protection_resp_msg_v01, verify_retries_left)
+};
+
+static const uint8_t dms_uim_unblock_ck_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_unblock_ck_req_msg_v01, facility_unblock_info),
+  QMI_IDL_TYPE88(0, 23)
+};
+
+static const uint8_t dms_uim_unblock_ck_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_unblock_ck_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_uim_unblock_ck_resp_msg_v01, unblock_retries_left) - QMI_IDL_OFFSET8(dms_uim_unblock_ck_resp_msg_v01, unblock_retries_left_valid)),
+  0x10,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_uim_unblock_ck_resp_msg_v01, unblock_retries_left)
+};
+
+/*
+ * dms_uim_get_imsi_req_msg is empty
+ * static const uint8_t dms_uim_get_imsi_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_uim_get_imsi_resp_msg_data_v01[] = {
+  0x01,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_uim_get_imsi_resp_msg_v01, imsi),
+  QMI_DMS_IMSI_MAX_V01,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_get_imsi_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_uim_get_state_req_msg is empty
+ * static const uint8_t dms_uim_get_state_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_uim_get_state_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_1_BYTE_ENUM,
+  QMI_IDL_OFFSET8(dms_uim_get_state_resp_msg_v01, uim_state),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_uim_get_state_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_band_capability_req_msg is empty
+ * static const uint8_t dms_get_band_capability_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_band_capability_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(dms_get_band_capability_resp_msg_v01, band_capability),
+
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_band_capability_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_band_capability_resp_msg_v01, lte_band_capability) - QMI_IDL_OFFSET8(dms_get_band_capability_resp_msg_v01, lte_band_capability_valid)),
+  0x10,
+   QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(dms_get_band_capability_resp_msg_v01, lte_band_capability),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_band_capability_resp_msg_v01, tds_band_capability) - QMI_IDL_OFFSET8(dms_get_band_capability_resp_msg_v01, tds_band_capability_valid)),
+  0x11,
+   QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(dms_get_band_capability_resp_msg_v01, tds_band_capability)
+};
+
+/*
+ * dms_get_factory_sku_req_msg is empty
+ * static const uint8_t dms_get_factory_sku_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_factory_sku_resp_msg_data_v01[] = {
+  0x01,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_factory_sku_resp_msg_v01, factory_serial_number),
+  QMI_DMS_FACTORY_SN_MAX_V01,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_factory_sku_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_set_time_req_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_GENERIC_8_BYTE,
+  QMI_IDL_OFFSET8(dms_set_time_req_msg_v01, time_in_ms),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_time_req_msg_v01, time_reference_type) - QMI_IDL_OFFSET8(dms_set_time_req_msg_v01, time_reference_type_valid)),
+  0x10,
+   QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(dms_set_time_req_msg_v01, time_reference_type)
+};
+
+static const uint8_t dms_set_time_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_time_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_alt_net_config_req_msg is empty
+ * static const uint8_t dms_get_alt_net_config_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_alt_net_config_resp_msg_data_v01[] = {
+  0x01,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_get_alt_net_config_resp_msg_v01, alt_net_config),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_alt_net_config_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_set_alt_net_config_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_alt_net_config_req_msg_v01, alt_net_config)
+};
+
+static const uint8_t dms_set_alt_net_config_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_alt_net_config_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_sw_version_req_msg is empty
+ * static const uint8_t dms_get_sw_version_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_sw_version_resp_msg_data_v01[] = {
+  0x01,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_get_sw_version_resp_msg_v01, sw_version),
+  QMI_DMS_SW_VERSION_MAX_V01,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_sw_version_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+static const uint8_t dms_set_spc_req_msg_data_v01[] = {
+  0x01,
+  QMI_IDL_FLAGS_IS_ARRAY |  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_spc_req_msg_v01, curr_spc),
+  QMI_DMS_SPC_LEN_V01,
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+  QMI_IDL_FLAGS_IS_ARRAY |  QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_set_spc_req_msg_v01, new_spc),
+  QMI_DMS_SPC_LEN_V01
+};
+
+static const uint8_t dms_set_spc_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_spc_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_current_prl_info_req_msg is empty
+ * static const uint8_t dms_get_current_prl_info_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_current_prl_info_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_current_prl_info_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_current_prl_info_resp_msg_v01, prl_version) - QMI_IDL_OFFSET8(dms_get_current_prl_info_resp_msg_v01, prl_version_valid)),
+  0x10,
+   QMI_IDL_GENERIC_2_BYTE,
+  QMI_IDL_OFFSET8(dms_get_current_prl_info_resp_msg_v01, prl_version),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_current_prl_info_resp_msg_v01, prl_only) - QMI_IDL_OFFSET8(dms_get_current_prl_info_resp_msg_v01, prl_only_valid)),
+  0x11,
+   QMI_IDL_GENERIC_1_BYTE,
+  QMI_IDL_OFFSET8(dms_get_current_prl_info_resp_msg_v01, prl_only)
+};
+
+static const uint8_t dms_bind_subscription_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+   QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(dms_bind_subscription_req_msg_v01, bind_subs)
+};
+
+static const uint8_t dms_bind_subscription_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_bind_subscription_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_bind_subscription_req_msg is empty
+ * static const uint8_t dms_get_bind_subscription_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_bind_subscription_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_bind_subscription_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_bind_subscription_resp_msg_v01, bind_subscription) - QMI_IDL_OFFSET8(dms_get_bind_subscription_resp_msg_v01, bind_subscription_valid)),
+  0x10,
+   QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(dms_get_bind_subscription_resp_msg_v01, bind_subscription)
+};
+
+static const uint8_t dms_set_ap_sw_version_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x01,
+  QMI_IDL_FLAGS_IS_ARRAY | QMI_IDL_FLAGS_IS_VARIABLE_LEN |  QMI_IDL_STRING,
+  QMI_IDL_OFFSET8(dms_set_ap_sw_version_req_msg_v01, ap_sw_version),
+  QMI_DMS_SW_VERSION_MAX_V01
+};
+
+static const uint8_t dms_set_ap_sw_version_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_ap_sw_version_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_cdma_lock_mode_req_msg is empty
+ * static const uint8_t dms_get_cdma_lock_mode_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_cdma_lock_mode_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_cdma_lock_mode_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_cdma_lock_mode_resp_msg_v01, cdma_lock_mode_status) - QMI_IDL_OFFSET8(dms_get_cdma_lock_mode_resp_msg_v01, cdma_lock_mode_status_valid)),
+  0x10,
+   QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(dms_get_cdma_lock_mode_resp_msg_v01, cdma_lock_mode_status)
+};
+
+static const uint8_t dms_set_test_config_req_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_set_test_config_req_msg_v01, tds_config) - QMI_IDL_OFFSET8(dms_set_test_config_req_msg_v01, tds_config_valid)),
+  0x10,
+   QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(dms_set_test_config_req_msg_v01, tds_config)
+};
+
+static const uint8_t dms_set_test_config_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_set_test_config_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/*
+ * dms_get_test_config_req_msg is empty
+ * static const uint8_t dms_get_test_config_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_get_test_config_resp_msg_data_v01[] = {
+  0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_get_test_config_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0),
+
+  QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_test_config_resp_msg_v01, active_tds_config) - QMI_IDL_OFFSET8(dms_get_test_config_resp_msg_v01, active_tds_config_valid)),
+  0x10,
+   QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(dms_get_test_config_resp_msg_v01, active_tds_config),
+
+  QMI_IDL_TLV_FLAGS_LAST_TLV | QMI_IDL_TLV_FLAGS_OPTIONAL | (QMI_IDL_OFFSET8(dms_get_test_config_resp_msg_v01, desired_tds_config) - QMI_IDL_OFFSET8(dms_get_test_config_resp_msg_v01, desired_tds_config_valid)),
+  0x11,
+   QMI_IDL_GENERIC_4_BYTE,
+  QMI_IDL_OFFSET8(dms_get_test_config_resp_msg_v01, desired_tds_config)
+};
+
+/*
+ * dms_clear_test_config_req_msg is empty
+ * static const uint8_t dms_clear_test_config_req_msg_data_v01[] = {
+ * };
+ */
+
+static const uint8_t dms_clear_test_config_resp_msg_data_v01[] = {
+  QMI_IDL_TLV_FLAGS_LAST_TLV | 0x02,
+   QMI_IDL_AGGREGATE,
+  QMI_IDL_OFFSET8(dms_clear_test_config_resp_msg_v01, resp),
+  QMI_IDL_TYPE88(1, 0)
+};
+
+/* Type Table */
+static const qmi_idl_type_table_entry  dms_type_table_v01[] = {
+  {sizeof(dms_battery_lvl_limits_type_v01), dms_battery_lvl_limits_type_data_v01},
+  {sizeof(dms_power_state_type_v01), dms_power_state_type_data_v01},
+  {sizeof(dms_pin_status_type_v01), dms_pin_status_type_data_v01},
+  {sizeof(dms_subs_config_type_v01), dms_subs_config_type_data_v01},
+  {sizeof(dms_multisim_capability_type_v01), dms_multisim_capability_type_data_v01},
+  {sizeof(dms_device_capabilities_type_v01), dms_device_capabilities_type_data_v01},
+  {sizeof(dms_pin_protection_info_type_v01), dms_pin_protection_info_type_data_v01},
+  {sizeof(dms_pin_retries_status_type_v01), dms_pin_retries_status_type_data_v01},
+  {sizeof(dms_pin_info_type_v01), dms_pin_info_type_data_v01},
+  {sizeof(dms_pin_unblock_info_type_v01), dms_pin_unblock_info_type_data_v01},
+  {sizeof(dms_pin_change_info_type_v01), dms_pin_change_info_type_data_v01},
+  {sizeof(dms_device_time_type_v01), dms_device_time_type_data_v01},
+  {sizeof(dms_activation_code_type_v01), dms_activation_code_type_data_v01},
+  {sizeof(dms_manual_act_data_type_v01), dms_manual_act_data_type_data_v01},
+  {sizeof(dms_mn_ha_key_type_v01), dms_mn_ha_key_type_data_v01},
+  {sizeof(dms_mn_aaa_key_type_v01), dms_mn_aaa_key_type_data_v01},
+  {sizeof(dms_pref_roaming_list_type_v01), dms_pref_roaming_list_type_data_v01},
+  {sizeof(dms_user_lock_state_info_type_v01), dms_user_lock_state_info_type_data_v01},
+  {sizeof(dms_user_lock_set_info_type_v01), dms_user_lock_set_info_type_data_v01},
+  {sizeof(dms_user_data_type_v01), dms_user_data_type_data_v01},
+  {sizeof(dms_eri_data_type_v01), dms_eri_data_type_data_v01},
+  {sizeof(dms_facility_state_info_type_v01), dms_facility_state_info_type_data_v01},
+  {sizeof(dms_facility_set_ck_info_type_v01), dms_facility_set_ck_info_type_data_v01},
+  {sizeof(dms_facility_unblock_info_type_v01), dms_facility_unblock_info_type_data_v01}
+};
+
+/* Message Table */
+static const qmi_idl_message_table_entry dms_message_table_v01[] = {
+  {sizeof(dms_reset_req_msg_v01), 0},
+  {sizeof(dms_reset_resp_msg_v01), dms_reset_resp_msg_data_v01},
+  {sizeof(dms_set_event_report_req_msg_v01), dms_set_event_report_req_msg_data_v01},
+  {sizeof(dms_set_event_report_resp_msg_v01), dms_set_event_report_resp_msg_data_v01},
+  {sizeof(dms_event_report_ind_msg_v01), dms_event_report_ind_msg_data_v01},
+  {sizeof(dms_get_device_cap_req_msg_v01), 0},
+  {sizeof(dms_get_device_cap_resp_msg_v01), dms_get_device_cap_resp_msg_data_v01},
+  {sizeof(dms_get_device_mfr_req_msg_v01), 0},
+  {sizeof(dms_get_device_mfr_resp_msg_v01), dms_get_device_mfr_resp_msg_data_v01},
+  {sizeof(dms_get_device_model_id_req_msg_v01), 0},
+  {sizeof(dms_get_device_model_id_resp_msg_v01), dms_get_device_model_id_resp_msg_data_v01},
+  {sizeof(dms_get_device_rev_id_req_msg_v01), 0},
+  {sizeof(dms_get_device_rev_id_resp_msg_v01), dms_get_device_rev_id_resp_msg_data_v01},
+  {sizeof(dms_get_msisdn_req_msg_v01), 0},
+  {sizeof(dms_get_msisdn_resp_msg_v01), dms_get_msisdn_resp_msg_data_v01},
+  {sizeof(dms_get_device_serial_numbers_req_msg_v01), 0},
+  {sizeof(dms_get_device_serial_numbers_resp_msg_v01), dms_get_device_serial_numbers_resp_msg_data_v01},
+  {sizeof(dms_get_power_state_req_msg_v01), 0},
+  {sizeof(dms_get_power_state_resp_msg_v01), dms_get_power_state_resp_msg_data_v01},
+  {sizeof(dms_uim_set_pin_protection_req_msg_v01), dms_uim_set_pin_protection_req_msg_data_v01},
+  {sizeof(dms_uim_set_pin_protection_resp_msg_v01), dms_uim_set_pin_protection_resp_msg_data_v01},
+  {sizeof(dms_uim_verify_pin_req_msg_v01), dms_uim_verify_pin_req_msg_data_v01},
+  {sizeof(dms_uim_verify_pin_resp_msg_v01), dms_uim_verify_pin_resp_msg_data_v01},
+  {sizeof(dms_uim_unblock_pin_req_msg_v01), dms_uim_unblock_pin_req_msg_data_v01},
+  {sizeof(dms_uim_unblock_pin_resp_msg_v01), dms_uim_unblock_pin_resp_msg_data_v01},
+  {sizeof(dms_uim_change_pin_req_msg_v01), dms_uim_change_pin_req_msg_data_v01},
+  {sizeof(dms_uim_change_pin_resp_msg_v01), dms_uim_change_pin_resp_msg_data_v01},
+  {sizeof(dms_uim_get_pin_status_req_msg_v01), 0},
+  {sizeof(dms_uim_get_pin_status_resp_msg_v01), dms_uim_get_pin_status_resp_msg_data_v01},
+  {sizeof(dms_get_device_hardware_rev_req_msg_v01), 0},
+  {sizeof(dms_get_device_hardware_rev_resp_msg_v01), dms_get_device_hardware_rev_resp_msg_data_v01},
+  {sizeof(dms_get_operating_mode_req_msg_v01), 0},
+  {sizeof(dms_get_operating_mode_resp_msg_v01), dms_get_operating_mode_resp_msg_data_v01},
+  {sizeof(dms_set_operating_mode_req_msg_v01), dms_set_operating_mode_req_msg_data_v01},
+  {sizeof(dms_set_operating_mode_resp_msg_v01), dms_set_operating_mode_resp_msg_data_v01},
+  {sizeof(dms_get_time_req_msg_v01), 0},
+  {sizeof(dms_get_time_resp_msg_v01), dms_get_time_resp_msg_data_v01},
+  {sizeof(dms_get_prl_ver_req_msg_v01), 0},
+  {sizeof(dms_get_prl_ver_resp_msg_v01), dms_get_prl_ver_resp_msg_data_v01},
+  {sizeof(dms_get_activation_state_req_msg_v01), 0},
+  {sizeof(dms_get_activation_state_resp_msg_v01), dms_get_activation_state_resp_msg_data_v01},
+  {sizeof(dms_activate_automatic_req_msg_v01), dms_activate_automatic_req_msg_data_v01},
+  {sizeof(dms_activate_automatic_resp_msg_v01), dms_activate_automatic_resp_msg_data_v01},
+  {sizeof(dms_activate_manual_req_msg_v01), dms_activate_manual_req_msg_data_v01},
+  {sizeof(dms_activate_manual_resp_msg_v01), dms_activate_manual_resp_msg_data_v01},
+  {sizeof(dms_get_user_lock_state_req_msg_v01), 0},
+  {sizeof(dms_get_user_lock_state_resp_msg_v01), dms_get_user_lock_state_resp_msg_data_v01},
+  {sizeof(dms_set_user_lock_state_req_msg_v01), dms_set_user_lock_state_req_msg_data_v01},
+  {sizeof(dms_set_user_lock_state_resp_msg_v01), dms_set_user_lock_state_resp_msg_data_v01},
+  {sizeof(dms_set_user_lock_code_req_msg_v01), dms_set_user_lock_code_req_msg_data_v01},
+  {sizeof(dms_set_user_lock_code_resp_msg_v01), dms_set_user_lock_code_resp_msg_data_v01},
+  {sizeof(dms_read_user_data_req_msg_v01), 0},
+  {sizeof(dms_read_user_data_resp_msg_v01), dms_read_user_data_resp_msg_data_v01},
+  {sizeof(dms_write_user_data_req_msg_v01), dms_write_user_data_req_msg_data_v01},
+  {sizeof(dms_write_user_data_resp_msg_v01), dms_write_user_data_resp_msg_data_v01},
+  {sizeof(dms_read_eri_file_req_msg_v01), 0},
+  {sizeof(dms_read_eri_file_resp_msg_v01), dms_read_eri_file_resp_msg_data_v01},
+  {sizeof(dms_restore_factory_defaults_req_msg_v01), dms_restore_factory_defaults_req_msg_data_v01},
+  {sizeof(dms_restore_factory_defaults_resp_msg_v01), dms_restore_factory_defaults_resp_msg_data_v01},
+  {sizeof(dms_validate_service_programming_code_req_msg_v01), dms_validate_service_programming_code_req_msg_data_v01},
+  {sizeof(dms_validate_service_programming_code_resp_msg_v01), dms_validate_service_programming_code_resp_msg_data_v01},
+  {sizeof(dms_uim_get_iccid_req_msg_v01), 0},
+  {sizeof(dms_uim_get_iccid_resp_msg_v01), dms_uim_get_iccid_resp_msg_data_v01},
+  {sizeof(dms_uim_get_ck_status_req_msg_v01), dms_uim_get_ck_status_req_msg_data_v01},
+  {sizeof(dms_uim_get_ck_status_resp_msg_v01), dms_uim_get_ck_status_resp_msg_data_v01},
+  {sizeof(dms_uim_set_ck_protection_req_msg_v01), dms_uim_set_ck_protection_req_msg_data_v01},
+  {sizeof(dms_uim_set_ck_protection_resp_msg_v01), dms_uim_set_ck_protection_resp_msg_data_v01},
+  {sizeof(dms_uim_unblock_ck_req_msg_v01), dms_uim_unblock_ck_req_msg_data_v01},
+  {sizeof(dms_uim_unblock_ck_resp_msg_v01), dms_uim_unblock_ck_resp_msg_data_v01},
+  {sizeof(dms_uim_get_imsi_req_msg_v01), 0},
+  {sizeof(dms_uim_get_imsi_resp_msg_v01), dms_uim_get_imsi_resp_msg_data_v01},
+  {sizeof(dms_uim_get_state_req_msg_v01), 0},
+  {sizeof(dms_uim_get_state_resp_msg_v01), dms_uim_get_state_resp_msg_data_v01},
+  {sizeof(dms_get_band_capability_req_msg_v01), 0},
+  {sizeof(dms_get_band_capability_resp_msg_v01), dms_get_band_capability_resp_msg_data_v01},
+  {sizeof(dms_get_factory_sku_req_msg_v01), 0},
+  {sizeof(dms_get_factory_sku_resp_msg_v01), dms_get_factory_sku_resp_msg_data_v01},
+  {sizeof(dms_set_time_req_msg_v01), dms_set_time_req_msg_data_v01},
+  {sizeof(dms_set_time_resp_msg_v01), dms_set_time_resp_msg_data_v01},
+  {sizeof(dms_get_alt_net_config_req_msg_v01), 0},
+  {sizeof(dms_get_alt_net_config_resp_msg_v01), dms_get_alt_net_config_resp_msg_data_v01},
+  {sizeof(dms_set_alt_net_config_req_msg_v01), dms_set_alt_net_config_req_msg_data_v01},
+  {sizeof(dms_set_alt_net_config_resp_msg_v01), dms_set_alt_net_config_resp_msg_data_v01},
+  {sizeof(dms_get_sw_version_req_msg_v01), 0},
+  {sizeof(dms_get_sw_version_resp_msg_v01), dms_get_sw_version_resp_msg_data_v01},
+  {sizeof(dms_set_spc_req_msg_v01), dms_set_spc_req_msg_data_v01},
+  {sizeof(dms_set_spc_resp_msg_v01), dms_set_spc_resp_msg_data_v01},
+  {sizeof(dms_get_current_prl_info_req_msg_v01), 0},
+  {sizeof(dms_get_current_prl_info_resp_msg_v01), dms_get_current_prl_info_resp_msg_data_v01},
+  {sizeof(dms_bind_subscription_req_msg_v01), dms_bind_subscription_req_msg_data_v01},
+  {sizeof(dms_bind_subscription_resp_msg_v01), dms_bind_subscription_resp_msg_data_v01},
+  {sizeof(dms_get_bind_subscription_req_msg_v01), 0},
+  {sizeof(dms_get_bind_subscription_resp_msg_v01), dms_get_bind_subscription_resp_msg_data_v01},
+  {sizeof(dms_set_ap_sw_version_req_msg_v01), dms_set_ap_sw_version_req_msg_data_v01},
+  {sizeof(dms_set_ap_sw_version_resp_msg_v01), dms_set_ap_sw_version_resp_msg_data_v01},
+  {sizeof(dms_get_cdma_lock_mode_req_msg_v01), 0},
+  {sizeof(dms_get_cdma_lock_mode_resp_msg_v01), dms_get_cdma_lock_mode_resp_msg_data_v01},
+  {sizeof(dms_set_test_config_req_msg_v01), dms_set_test_config_req_msg_data_v01},
+  {sizeof(dms_set_test_config_resp_msg_v01), dms_set_test_config_resp_msg_data_v01},
+  {sizeof(dms_get_test_config_req_msg_v01), 0},
+  {sizeof(dms_get_test_config_resp_msg_v01), dms_get_test_config_resp_msg_data_v01},
+  {sizeof(dms_clear_test_config_req_msg_v01), 0},
+  {sizeof(dms_clear_test_config_resp_msg_v01), dms_clear_test_config_resp_msg_data_v01}
+};
+
+/* Range Table */
+/* No Ranges Defined in IDL */
+
+/* Predefine the Type Table Object */
+static const qmi_idl_type_table_object dms_qmi_idl_type_table_object_v01;
+
+/*Referenced Tables Array*/
+static const qmi_idl_type_table_object *dms_qmi_idl_type_table_object_referenced_tables_v01[] =
+{&dms_qmi_idl_type_table_object_v01, &common_qmi_idl_type_table_object_v01};
+
+/*Type Table Object*/
+static const qmi_idl_type_table_object dms_qmi_idl_type_table_object_v01 = {
+  sizeof(dms_type_table_v01)/sizeof(qmi_idl_type_table_entry ),
+  sizeof(dms_message_table_v01)/sizeof(qmi_idl_message_table_entry),
+  1,
+  dms_type_table_v01,
+  dms_message_table_v01,
+  dms_qmi_idl_type_table_object_referenced_tables_v01,
+  NULL
+};
+
+/*Arrays of service_message_table_entries for commands, responses and indications*/
+static const qmi_idl_service_message_table_entry dms_service_command_messages_v01[] = {
+  {QMI_DMS_RESET_REQ_V01, QMI_IDL_TYPE16(0, 0), 0},
+  {QMI_DMS_SET_EVENT_REPORT_REQ_V01, QMI_IDL_TYPE16(0, 2), 41},
+  {QMI_DMS_GET_SUPPORTED_MSGS_REQ_V01, QMI_IDL_TYPE16(1, 0), 0},
+  {QMI_DMS_GET_SUPPORTED_FIELDS_REQ_V01, QMI_IDL_TYPE16(1, 2), 5},
+  {QMI_DMS_GET_DEVICE_CAP_REQ_V01, QMI_IDL_TYPE16(0, 5), 0},
+  {QMI_DMS_GET_DEVICE_MFR_REQ_V01, QMI_IDL_TYPE16(0, 7), 0},
+  {QMI_DMS_GET_DEVICE_MODEL_ID_REQ_V01, QMI_IDL_TYPE16(0, 9), 0},
+  {QMI_DMS_GET_DEVICE_REV_ID_REQ_V01, QMI_IDL_TYPE16(0, 11), 0},
+  {QMI_DMS_GET_MSISDN_REQ_V01, QMI_IDL_TYPE16(0, 13), 0},
+  {QMI_DMS_GET_DEVICE_SERIAL_NUMBERS_REQ_V01, QMI_IDL_TYPE16(0, 15), 0},
+  {QMI_DMS_GET_POWER_STATE_REQ_V01, QMI_IDL_TYPE16(0, 17), 0},
+  {QMI_DMS_UIM_SET_PIN_PROTECTION_REQ_V01, QMI_IDL_TYPE16(0, 19), 22},
+  {QMI_DMS_UIM_VERIFY_PIN_REQ_V01, QMI_IDL_TYPE16(0, 21), 21},
+  {QMI_DMS_UIM_UNBLOCK_PIN_REQ_V01, QMI_IDL_TYPE16(0, 23), 38},
+  {QMI_DMS_UIM_CHANGE_PIN_REQ_V01, QMI_IDL_TYPE16(0, 25), 38},
+  {QMI_DMS_UIM_GET_PIN_STATUS_REQ_V01, QMI_IDL_TYPE16(0, 27), 0},
+  {QMI_DMS_GET_DEVICE_HARDWARE_REV_REQ_V01, QMI_IDL_TYPE16(0, 29), 0},
+  {QMI_DMS_GET_OPERATING_MODE_REQ_V01, QMI_IDL_TYPE16(0, 31), 0},
+  {QMI_DMS_SET_OPERATING_MODE_REQ_V01, QMI_IDL_TYPE16(0, 33), 4},
+  {QMI_DMS_GET_TIME_REQ_V01, QMI_IDL_TYPE16(0, 35), 0},
+  {QMI_DMS_GET_PRL_VER_REQ_V01, QMI_IDL_TYPE16(0, 37), 0},
+  {QMI_DMS_GET_ACTIVATION_STATE_REQ_V01, QMI_IDL_TYPE16(0, 39), 0},
+  {QMI_DMS_ACTIVATE_AUTOMATIC_REQ_V01, QMI_IDL_TYPE16(0, 41), 85},
+  {QMI_DMS_ACTIVATE_MANUAL_REQ_V01, QMI_IDL_TYPE16(0, 43), 1627},
+  {QMI_DMS_GET_USER_LOCK_STATE_REQ_V01, QMI_IDL_TYPE16(0, 45), 0},
+  {QMI_DMS_SET_USER_LOCK_STATE_REQ_V01, QMI_IDL_TYPE16(0, 47), 8},
+  {QMI_DMS_SET_USER_LOCK_CODE_REQ_V01, QMI_IDL_TYPE16(0, 49), 11},
+  {QMI_DMS_READ_USER_DATA_REQ_V01, QMI_IDL_TYPE16(0, 51), 0},
+  {QMI_DMS_WRITE_USER_DATA_REQ_V01, QMI_IDL_TYPE16(0, 53), 517},
+  {QMI_DMS_READ_ERI_FILE_REQ_V01, QMI_IDL_TYPE16(0, 55), 0},
+  {QMI_DMS_RESTORE_FACTORY_DEFAULTS_REQ_V01, QMI_IDL_TYPE16(0, 57), 9},
+  {QMI_DMS_VALIDATE_SERVICE_PROGRAMMING_CODE_REQ_V01, QMI_IDL_TYPE16(0, 59), 9},
+  {QMI_DMS_UIM_GET_ICCID_REQ_V01, QMI_IDL_TYPE16(0, 61), 0},
+  {QMI_DMS_UIM_GET_CK_STATUS_REQ_V01, QMI_IDL_TYPE16(0, 63), 4},
+  {QMI_DMS_UIM_SET_CK_PROTECTION_REQ_V01, QMI_IDL_TYPE16(0, 65), 14},
+  {QMI_DMS_UIM_UNBLOCK_CK_REQ_V01, QMI_IDL_TYPE16(0, 67), 13},
+  {QMI_DMS_UIM_GET_IMSI_REQ_V01, QMI_IDL_TYPE16(0, 69), 0},
+  {QMI_DMS_UIM_GET_STATE_REQ_V01, QMI_IDL_TYPE16(0, 71), 0},
+  {QMI_DMS_GET_BAND_CAPABILITY_REQ_V01, QMI_IDL_TYPE16(0, 73), 0},
+  {QMI_DMS_GET_FACTORY_SKU_REQ_V01, QMI_IDL_TYPE16(0, 75), 0},
+  {QMI_DMS_SET_TIME_REQ_V01, QMI_IDL_TYPE16(0, 77), 18},
+  {QMI_DMS_GET_ALT_NET_CONFIG_REQ_V01, QMI_IDL_TYPE16(0, 79), 0},
+  {QMI_DMS_SET_ALT_NET_CONFIG_REQ_V01, QMI_IDL_TYPE16(0, 81), 4},
+  {QMI_DMS_GET_SW_VERSION_REQ_V01, QMI_IDL_TYPE16(0, 83), 0},
+  {QMI_DMS_SET_SPC_REQ_V01, QMI_IDL_TYPE16(0, 85), 18},
+  {QMI_DMS_GET_CURRENT_PRL_INFO_REQ_V01, QMI_IDL_TYPE16(0, 87), 0},
+  {QMI_DMS_BIND_SUBSCRIPTION_REQ_V01, QMI_IDL_TYPE16(0, 89), 7},
+  {QMI_DMS_GET_BIND_SUBSCRIPTION_REQ_V01, QMI_IDL_TYPE16(0, 91), 0},
+  {QMI_DMS_SET_AP_SW_VERSION_REQ_V01, QMI_IDL_TYPE16(0, 93), 35},
+  {QMI_DMS_GET_CDMA_LOCK_MODE_REQ_V01, QMI_IDL_TYPE16(0, 95), 0},
+  {QMI_DMS_SET_TEST_CONFIG_REQ_V01, QMI_IDL_TYPE16(0, 97), 7},
+  {QMI_DMS_GET_TEST_CONFIG_REQ_V01, QMI_IDL_TYPE16(0, 99), 0},
+  {QMI_DMS_CLEAR_TEST_CONFIG_REQ_V01, QMI_IDL_TYPE16(0, 101), 0}
+};
+
+static const qmi_idl_service_message_table_entry dms_service_response_messages_v01[] = {
+  {QMI_DMS_RESET_RESP_V01, QMI_IDL_TYPE16(0, 1), 7},
+  {QMI_DMS_SET_EVENT_REPORT_RESP_V01, QMI_IDL_TYPE16(0, 3), 7},
+  {QMI_DMS_GET_SUPPORTED_MSGS_RESP_V01, QMI_IDL_TYPE16(1, 1), 8204},
+  {QMI_DMS_GET_SUPPORTED_FIELDS_RESP_V01, QMI_IDL_TYPE16(1, 3), 115},
+  {QMI_DMS_GET_DEVICE_CAP_RESP_V01, QMI_IDL_TYPE16(0, 6), 1675},
+  {QMI_DMS_GET_DEVICE_MFR_RESP_V01, QMI_IDL_TYPE16(0, 8), 138},
+  {QMI_DMS_GET_DEVICE_MODEL_ID_RESP_V01, QMI_IDL_TYPE16(0, 10), 266},
+  {QMI_DMS_GET_DEVICE_REV_ID_RESP_V01, QMI_IDL_TYPE16(0, 12), 543},
+  {QMI_DMS_GET_MSISDN_RESP_V01, QMI_IDL_TYPE16(0, 14), 112},
+  {QMI_DMS_GET_DEVICE_SERIAL_NUMBERS_RESP_V01, QMI_IDL_TYPE16(0, 16), 370},
+  {QMI_DMS_GET_POWER_STATE_RESP_V01, QMI_IDL_TYPE16(0, 18), 12},
+  {QMI_DMS_UIM_SET_PIN_PROTECTION_RESP_V01, QMI_IDL_TYPE16(0, 20), 12},
+  {QMI_DMS_UIM_VERIFY_PIN_RESP_V01, QMI_IDL_TYPE16(0, 22), 12},
+  {QMI_DMS_UIM_UNBLOCK_PIN_RESP_V01, QMI_IDL_TYPE16(0, 24), 12},
+  {QMI_DMS_UIM_CHANGE_PIN_RESP_V01, QMI_IDL_TYPE16(0, 26), 12},
+  {QMI_DMS_UIM_GET_PIN_STATUS_RESP_V01, QMI_IDL_TYPE16(0, 28), 19},
+  {QMI_DMS_GET_DEVICE_HARDWARE_REV_RESP_V01, QMI_IDL_TYPE16(0, 30), 266},
+  {QMI_DMS_GET_OPERATING_MODE_RESP_V01, QMI_IDL_TYPE16(0, 32), 20},
+  {QMI_DMS_SET_OPERATING_MODE_RESP_V01, QMI_IDL_TYPE16(0, 34), 7},
+  {QMI_DMS_GET_TIME_RESP_V01, QMI_IDL_TYPE16(0, 36), 40},
+  {QMI_DMS_GET_PRL_VER_RESP_V01, QMI_IDL_TYPE16(0, 38), 16},
+  {QMI_DMS_GET_ACTIVATION_STATE_RESP_V01, QMI_IDL_TYPE16(0, 40), 12},
+  {QMI_DMS_ACTIVATE_AUTOMATIC_RESP_V01, QMI_IDL_TYPE16(0, 42), 7},
+  {QMI_DMS_ACTIVATE_MANUAL_RESP_V01, QMI_IDL_TYPE16(0, 44), 7},
+  {QMI_DMS_GET_USER_LOCK_STATE_RESP_V01, QMI_IDL_TYPE16(0, 46), 11},
+  {QMI_DMS_SET_USER_LOCK_STATE_RESP_V01, QMI_IDL_TYPE16(0, 48), 7},
+  {QMI_DMS_SET_USER_LOCK_CODE_RESP_V01, QMI_IDL_TYPE16(0, 50), 7},
+  {QMI_DMS_READ_USER_DATA_RESP_V01, QMI_IDL_TYPE16(0, 52), 524},
+  {QMI_DMS_WRITE_USER_DATA_RESP_V01, QMI_IDL_TYPE16(0, 54), 7},
+  {QMI_DMS_READ_ERI_FILE_RESP_V01, QMI_IDL_TYPE16(0, 56), 1036},
+  {QMI_DMS_RESTORE_FACTORY_DEFAULTS_RESP_V01, QMI_IDL_TYPE16(0, 58), 7},
+  {QMI_DMS_VALIDATE_SERVICE_PROGRAMMING_CODE_RESP_V01, QMI_IDL_TYPE16(0, 60), 7},
+  {QMI_DMS_UIM_GET_ICCID_RESP_V01, QMI_IDL_TYPE16(0, 62), 30},
+  {QMI_DMS_UIM_GET_CK_STATUS_RESP_V01, QMI_IDL_TYPE16(0, 64), 17},
+  {QMI_DMS_UIM_SET_CK_PROTECTION_RESP_V01, QMI_IDL_TYPE16(0, 66), 11},
+  {QMI_DMS_UIM_UNBLOCK_CK_RESP_V01, QMI_IDL_TYPE16(0, 68), 11},
+  {QMI_DMS_UIM_GET_IMSI_RESP_V01, QMI_IDL_TYPE16(0, 70), 42},
+  {QMI_DMS_UIM_GET_STATE_RESP_V01, QMI_IDL_TYPE16(0, 72), 11},
+  {QMI_DMS_GET_BAND_CAPABILITY_RESP_V01, QMI_IDL_TYPE16(0, 74), 40},
+  {QMI_DMS_GET_FACTORY_SKU_RESP_V01, QMI_IDL_TYPE16(0, 76), 138},
+  {QMI_DMS_SET_TIME_RESP_V01, QMI_IDL_TYPE16(0, 78), 7},
+  {QMI_DMS_GET_ALT_NET_CONFIG_RESP_V01, QMI_IDL_TYPE16(0, 80), 11},
+  {QMI_DMS_SET_ALT_NET_CONFIG_RESP_V01, QMI_IDL_TYPE16(0, 82), 7},
+  {QMI_DMS_GET_SW_VERSION_RESP_V01, QMI_IDL_TYPE16(0, 84), 42},
+  {QMI_DMS_SET_SPC_RESP_V01, QMI_IDL_TYPE16(0, 86), 7},
+  {QMI_DMS_GET_CURRENT_PRL_INFO_RESP_V01, QMI_IDL_TYPE16(0, 88), 16},
+  {QMI_DMS_BIND_SUBSCRIPTION_RESP_V01, QMI_IDL_TYPE16(0, 90), 7},
+  {QMI_DMS_GET_BIND_SUBSCRIPTION_RESP_V01, QMI_IDL_TYPE16(0, 92), 14},
+  {QMI_DMS_SET_AP_SW_VERSION_RESP_V01, QMI_IDL_TYPE16(0, 94), 7},
+  {QMI_DMS_GET_CDMA_LOCK_MODE_RESP_V01, QMI_IDL_TYPE16(0, 96), 14},
+  {QMI_DMS_SET_TEST_CONFIG_RESP_V01, QMI_IDL_TYPE16(0, 98), 7},
+  {QMI_DMS_GET_TEST_CONFIG_RESP_V01, QMI_IDL_TYPE16(0, 100), 21},
+  {QMI_DMS_CLEAR_TEST_CONFIG_RESP_V01, QMI_IDL_TYPE16(0, 102), 7}
+};
+
+static const qmi_idl_service_message_table_entry dms_service_indication_messages_v01[] = {
+  {QMI_DMS_EVENT_REPORT_IND_V01, QMI_IDL_TYPE16(0, 4), 1650}
+};
+
+/*Service Object*/
+struct qmi_idl_service_object dms_qmi_idl_service_object_v01 = {
+  0x06,
+  0x01,
+  0x02,
+  8204,
+  { sizeof(dms_service_command_messages_v01)/sizeof(qmi_idl_service_message_table_entry),
+    sizeof(dms_service_response_messages_v01)/sizeof(qmi_idl_service_message_table_entry),
+    sizeof(dms_service_indication_messages_v01)/sizeof(qmi_idl_service_message_table_entry) },
+  { dms_service_command_messages_v01, dms_service_response_messages_v01, dms_service_indication_messages_v01},
+  &dms_qmi_idl_type_table_object_v01,
+  0x1F,
+  NULL
+};
+
+/* Service Object Accessor */
+qmi_idl_service_object_type dms_get_service_object_internal_v01
+ ( int32_t idl_maj_version, int32_t idl_min_version, int32_t library_version ){
+  if ( DMS_V01_IDL_MAJOR_VERS != idl_maj_version || DMS_V01_IDL_MINOR_VERS != idl_min_version
+       || DMS_V01_IDL_TOOL_VERS != library_version)
+  {
+    return NULL;
+  }
+  return (qmi_idl_service_object_type)&dms_qmi_idl_service_object_v01;
+}
+
diff --git a/wcnss-service/device_management_service_v01.h b/wcnss-service/device_management_service_v01.h
new file mode 100644
index 0000000..f696511
--- /dev/null
+++ b/wcnss-service/device_management_service_v01.h
@@ -0,0 +1,3111 @@
+#ifndef DMS_SERVICE_01_H
+#define DMS_SERVICE_01_H
+/**
+  @file device_management_service_v01.h
+
+  @brief This is the public header file which defines the dms service Data structures.
+
+  This header file defines the types and structures that were defined in
+  dms. It contains the constant values defined, enums, structures,
+  messages, and service message IDs (in that order) Structures that were
+  defined in the IDL as messages contain mandatory elements, optional
+  elements, a combination of mandatory and optional elements (mandatory
+  always come before optionals in the structure), or nothing (null message)
+
+  An optional element in a message is preceded by a uint8_t value that must be
+  set to true if the element is going to be included. When decoding a received
+  message, the uint8_t values will be set to true or false by the decode
+  routine, and should be checked before accessing the values that they
+  correspond to.
+
+  Variable sized arrays are defined as static sized arrays with an unsigned
+  integer (32 bit) preceding it that must be set to the number of elements
+  in the array that are valid. For Example:
+
+  uint32_t test_opaque_len;
+  uint8_t test_opaque[16];
+
+  If only 4 elements are added to test_opaque[] then test_opaque_len must be
+  set to 4 before sending the message.  When decoding, the _len value is set
+  by the decode routine and should be checked so that the correct number of
+  elements in the array will be accessed.
+
+*/
+/*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*
+  Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+  SPDX-License-Identifier: BSD-3-Clause-Clear
+
+  $Header$
+ *====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*/
+/*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*
+ *THIS IS AN AUTO GENERATED FILE. DO NOT ALTER IN ANY WAY
+ *====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*/
+
+/* This file was generated with Tool version 6.2
+   It was generated on: Fri Oct 25 2013 (Spin 0)
+   From IDL File: device_management_service_v01.idl */
+
+/** @defgroup dms_qmi_consts Constant values defined in the IDL */
+/** @defgroup dms_qmi_msg_ids Constant values for QMI message IDs */
+/** @defgroup dms_qmi_enums Enumerated types used in QMI messages */
+/** @defgroup dms_qmi_messages Structures sent as QMI messages */
+/** @defgroup dms_qmi_aggregates Aggregate types used in QMI messages */
+/** @defgroup dms_qmi_accessor Accessor for QMI service object */
+/** @defgroup dms_qmi_version Constant values for versioning information */
+
+#include <stdint.h>
+#include "qmi_idl_lib.h"
+#include "common_v01.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @addtogroup dms_qmi_version
+    @{
+  */
+/** Major Version Number of the IDL used to generate this file */
+#define DMS_V01_IDL_MAJOR_VERS 0x01
+/** Revision Number of the IDL used to generate this file */
+#define DMS_V01_IDL_MINOR_VERS 0x1F
+/** Major Version Number of the qmi_idl_compiler used to generate this file */
+#define DMS_V01_IDL_TOOL_VERS 0x06
+/** Maximum Defined Message ID */
+#define DMS_V01_MAX_MESSAGE_ID 0x005A;
+/**
+    @}
+  */
+
+
+/** @addtogroup dms_qmi_consts
+    @{
+  */
+#define QMI_DMS_POWER_SOURCE_BATTERY_V01 0
+#define QMI_DMS_POWER_SOURCE_EXT_SOURCE_V01 1
+#define QMI_DMS_RADIO_IF_LIST_MAX_V01 20
+#define QMI_DMS_DEVICE_MANUFACTURER_MAX_V01 128
+#define QMI_DMS_DEVICE_MODEL_ID_MAX_V01 256
+#define QMI_DMS_DEVICE_REV_ID_MAX_V01 256
+#define QMI_DMS_VOICE_NUMBER_MAX_V01 32
+#define QMI_DMS_MOBILE_ID_NUMBER_MAX_V01 32
+#define QMI_DMS_ESN_MAX_V01 32
+#define QMI_DMS_IMEI_MAX_V01 32
+#define QMI_DMS_MEID_MAX_V01 32
+#define QMI_DMS_PUK_VALUE_MAX_V01 16
+#define QMI_DMS_PIN_VALUE_MAX_V01 16
+#define QMI_DMS_HARDWARE_REV_MAX_V01 256
+#define QMI_DMS_UIM_ID_MAX_V01 20
+#define QMI_DMS_FACILITY_CK_MAX_V01 8
+#define QMI_DMS_FACILITY_UNBLOCK_CK_MAX_V01 8
+#define QMI_DMS_IMSI_MAX_V01 32
+#define QMI_DMS_BOOT_CODE_REV_MAX_V01 255
+#define QMI_DMS_PRI_REV_MAX_V01 16
+#define QMI_DMS_IMEISV_MAX_V01 255
+#define QMI_DMS_SW_VERSION_MAX_V01 32
+#define QMI_DMS_SPC_LEN_V01 6
+#define QMI_DMS_LOCK_CODE_LEN_V01 4
+#define QMI_DMS_MDN_MAX_V01 15
+#define QMI_DMS_MIN_MAX_V01 15
+#define QMI_DMS_HA_KEY_MAX_V01 16
+#define QMI_DMS_AAA_KEY_MAX_V01 16
+#define QMI_DMS_USER_DATA_MAX_V01 512
+#define QMI_DMS_ERI_DATA_MAX_V01 1024
+#define QMI_DMS_PRL_DATA_MAX_V01 1536
+#define QMI_DMS_FACTORY_SN_MAX_V01 128
+#define QMI_DMS_ACTIVATION_CODE_MAX_V01 81
+#define QMI_DMS_MAX_CONFIG_LIST_LEN_V01 32
+#define QMI_DMS_MAX_SUBSCRIPTION_LIST_LEN_V01 6
+/**
+    @}
+  */
+
+typedef uint8_t dms_power_status_mask_v01;
+#define QMI_DMS_MASK_POWER_SOURCE_V01 ((dms_power_status_mask_v01)0x01)
+#define QMI_DMS_MASK_BATTERY_CONNECTED_V01 ((dms_power_status_mask_v01)0x02)
+#define QMI_DMS_MASK_BATTERY_CHARGING_V01 ((dms_power_status_mask_v01)0x04)
+#define QMI_DMS_MASK_POWER_FAULT_V01 ((dms_power_status_mask_v01)0x08)
+typedef uint16_t dms_offline_reason_mask_v01;
+#define QMI_DMS_MASK_OFFLINE_REASON_HOST_IMAGE_V01 ((dms_offline_reason_mask_v01)0x0001)
+#define QMI_DMS_MASK_OFFLINE_REASON_PRI_IMAGE_V01 ((dms_offline_reason_mask_v01)0x0002)
+#define QMI_DMS_MASK_OFFLINE_REASON_PRI_VERSION_V01 ((dms_offline_reason_mask_v01)0x0004)
+#define QMI_DMS_MASK_OFFLINE_REASON_DEVICE_MEMORY_V01 ((dms_offline_reason_mask_v01)0x0008)
+typedef uint64_t dms_band_capability_mask_v01;
+#define QMI_DMS_MASK_BAND_PREF_BC0_A_V01 ((dms_band_capability_mask_v01)0x0000000000000001ull)
+#define QMI_DMS_MASK_BAND_PREF_BC0_B_V01 ((dms_band_capability_mask_v01)0x0000000000000002ull)
+#define QMI_DMS_MASK_BAND_PREF_BC1_V01 ((dms_band_capability_mask_v01)0x0000000000000004ull)
+#define QMI_DMS_MASK_BAND_PREF_BC2_V01 ((dms_band_capability_mask_v01)0x0000000000000008ull)
+#define QMI_DMS_MASK_BAND_PREF_BC3_V01 ((dms_band_capability_mask_v01)0x0000000000000010ull)
+#define QMI_DMS_MASK_BAND_PREF_BC4_V01 ((dms_band_capability_mask_v01)0x0000000000000020ull)
+#define QMI_DMS_MASK_BAND_PREF_BC5_V01 ((dms_band_capability_mask_v01)0x0000000000000040ull)
+#define QMI_DMS_MASK_BAND_PREF_GSM_DCS_1800_V01 ((dms_band_capability_mask_v01)0x0000000000000080ull)
+#define QMI_DMS_MASK_BAND_PREF_GSM_EGSM_900_V01 ((dms_band_capability_mask_v01)0x0000000000000100ull)
+#define QMI_DMS_MASK_BAND_PREF_GSM_PGSM_900_V01 ((dms_band_capability_mask_v01)0x0000000000000200ull)
+#define QMI_DMS_MASK_BAND_PREF_BC6_V01 ((dms_band_capability_mask_v01)0x0000000000000400ull)
+#define QMI_DMS_MASK_BAND_PREF_BC7_V01 ((dms_band_capability_mask_v01)0x0000000000000800ull)
+#define QMI_DMS_MASK_BAND_PREF_BC8_V01 ((dms_band_capability_mask_v01)0x0000000000001000ull)
+#define QMI_DMS_MASK_BAND_PREF_BC9_V01 ((dms_band_capability_mask_v01)0x0000000000002000ull)
+#define QMI_DMS_MASK_BAND_PREF_BC10_V01 ((dms_band_capability_mask_v01)0x0000000000004000ull)
+#define QMI_DMS_MASK_BAND_PREF_BC11_V01 ((dms_band_capability_mask_v01)0x0000000000008000ull)
+#define QMI_DMS_MASK_BAND_PREF_GSM_450_V01 ((dms_band_capability_mask_v01)0x0000000000010000ull)
+#define QMI_DMS_MASK_BAND_PREF_GSM_480_V01 ((dms_band_capability_mask_v01)0x0000000000020000ull)
+#define QMI_DMS_MASK_BAND_PREF_GSM_750_V01 ((dms_band_capability_mask_v01)0x0000000000040000ull)
+#define QMI_DMS_MASK_BAND_PREF_GSM_850_V01 ((dms_band_capability_mask_v01)0x0000000000080000ull)
+#define QMI_DMS_MASK_BAND_PREF_GSM_RGSM_900_V01 ((dms_band_capability_mask_v01)0x0000000000100000ull)
+#define QMI_DMS_MASK_BAND_PREF_GSM_PCS_1900_V01 ((dms_band_capability_mask_v01)0x0000000000200000ull)
+#define QMI_DMS_MASK_BAND_PREF_WCDMA_IMT_2100_V01 ((dms_band_capability_mask_v01)0x0000000000400000ull)
+#define QMI_DMS_MASK_BAND_PREF_WCDMA_PCS_1900_V01 ((dms_band_capability_mask_v01)0x0000000000800000ull)
+#define QMI_DMS_MASK_BAND_PREF_WCDMA_1800_V01 ((dms_band_capability_mask_v01)0x0000000001000000ull)
+#define QMI_DMS_MASK_BAND_PREF_WCDMA_1700_US_V01 ((dms_band_capability_mask_v01)0x0000000002000000ull)
+#define QMI_DMS_MASK_BAND_PREF_WCDMA_850_V01 ((dms_band_capability_mask_v01)0x0000000004000000ull)
+#define QMI_DMS_MASK_BAND_PREF_WCDMA_800_V01 ((dms_band_capability_mask_v01)0x0000000008000000ull)
+#define QMI_DMS_MASK_BAND_PREF_BC12_V01 ((dms_band_capability_mask_v01)0x0000000010000000ull)
+#define QMI_DMS_MASK_BAND_PREF_B14_V01 ((dms_band_capability_mask_v01)0x0000000020000000ull)
+#define QMI_DMS_MASK_BAND_PREF_B15_V01 ((dms_band_capability_mask_v01)0x0000000080000000ull)
+#define QMI_DMS_MASK_BAND_PREF_WCDMA_2600_V01 ((dms_band_capability_mask_v01)0x0001000000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_WCDMA_900_V01 ((dms_band_capability_mask_v01)0x0002000000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_WCDMA_1700_JPN_V01 ((dms_band_capability_mask_v01)0x0004000000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_BC16_V01 ((dms_band_capability_mask_v01)0x0100000000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_BC17_V01 ((dms_band_capability_mask_v01)0x0200000000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_BC18_V01 ((dms_band_capability_mask_v01)0x0400000000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_BC19_V01 ((dms_band_capability_mask_v01)0x0800000000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_WCDMA_XIX_850_V01 ((dms_band_capability_mask_v01)0x1000000000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_WCDMA_XI_1500_V01 ((dms_band_capability_mask_v01)0x2000000000000000ull)
+typedef uint64_t dms_lte_band_capability_mask_v01;
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB1_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000001ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB2_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000002ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB3_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000004ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB4_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000008ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB5_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000010ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB6_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000020ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB7_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000040ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB8_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000080ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB9_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000100ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB10_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000200ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB11_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000400ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB12_V01 ((dms_lte_band_capability_mask_v01)0x0000000000000800ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB13_V01 ((dms_lte_band_capability_mask_v01)0x0000000000001000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB14_V01 ((dms_lte_band_capability_mask_v01)0x0000000000002000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB17_V01 ((dms_lte_band_capability_mask_v01)0x0000000000010000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB18_V01 ((dms_lte_band_capability_mask_v01)0x0000000000020000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB19_V01 ((dms_lte_band_capability_mask_v01)0x0000000000040000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB20_V01 ((dms_lte_band_capability_mask_v01)0x0000000000080000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB21_V01 ((dms_lte_band_capability_mask_v01)0x0000000000100000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB23_V01 ((dms_lte_band_capability_mask_v01)0x0000000000400000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB24_V01 ((dms_lte_band_capability_mask_v01)0x0000000000800000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB25_V01 ((dms_lte_band_capability_mask_v01)0x0000000001000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB26_V01 ((dms_lte_band_capability_mask_v01)0x0000000002000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB28_V01 ((dms_lte_band_capability_mask_v01)0x0000000008000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB29_V01 ((dms_lte_band_capability_mask_v01)0x0000000010000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB30_V01 ((dms_lte_band_capability_mask_v01)0x0000000020000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB33_V01 ((dms_lte_band_capability_mask_v01)0x0000000100000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB34_V01 ((dms_lte_band_capability_mask_v01)0x0000000200000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB35_V01 ((dms_lte_band_capability_mask_v01)0x0000000400000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB36_V01 ((dms_lte_band_capability_mask_v01)0x0000000800000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB37_V01 ((dms_lte_band_capability_mask_v01)0x0000001000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB38_V01 ((dms_lte_band_capability_mask_v01)0x0000002000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB39_V01 ((dms_lte_band_capability_mask_v01)0x0000004000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB40_V01 ((dms_lte_band_capability_mask_v01)0x0000008000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB41_V01 ((dms_lte_band_capability_mask_v01)0x0000010000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB42_V01 ((dms_lte_band_capability_mask_v01)0x0000020000000000ull)
+#define QMI_DMS_MASK_BAND_PREF_LTE_EB43_V01 ((dms_lte_band_capability_mask_v01)0x0000040000000000ull)
+typedef uint64_t dms_tds_band_capability_mask_v01;
+#define QMI_DMS_MASK_BAND_PREF_TDS_BANDA_V01 ((dms_tds_band_capability_mask_v01)0x0000000000000001ull)
+#define QMI_DMS_MASK_BAND_PREF_TDS_BANDB_V01 ((dms_tds_band_capability_mask_v01)0x0000000000000002ull)
+#define QMI_DMS_MASK_BAND_PREF_TDS_BANDC_V01 ((dms_tds_band_capability_mask_v01)0x0000000000000004ull)
+#define QMI_DMS_MASK_BAND_PREF_TDS_BANDD_V01 ((dms_tds_band_capability_mask_v01)0x0000000000000008ull)
+#define QMI_DMS_MASK_BAND_PREF_TDS_BANDE_V01 ((dms_tds_band_capability_mask_v01)0x0000000000000010ull)
+#define QMI_DMS_MASK_BAND_PREF_TDS_BANDF_V01 ((dms_tds_band_capability_mask_v01)0x0000000000000020ull)
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_reset_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Resets the DMS state variables of the requesting
+           control point. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_reset_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint8_t battery_lvl_lower_limit;
+  /**<   The battery level is reported to the control point if the battery
+       level falls below this lower limit (specified as percentage of
+       remaining battery power from 0 to 100).
+  */
+
+  uint8_t battery_lvl_upper_limit;
+  /**<   The battery level is reported to the control point if the battery
+       level rises above the upper limit (specified as percentage of
+       remaining battery power from 0 to 100).
+   */
+}dms_battery_lvl_limits_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Sets the device management state reporting conditions
+           for the requesting control point. */
+typedef struct {
+
+  /* Optional */
+  /*  Power State Reporting  */
+  uint8_t report_power_state_valid;  /**< Must be set to true if report_power_state is being passed */
+  uint8_t report_power_state;
+  /**<   Values: \n
+       - 0 -- Do not report \n
+       - 1 -- Report on change in power state
+  */
+
+  /* Optional */
+  /*  Battery Level Report Limits */
+  uint8_t lvl_limits_valid;  /**< Must be set to true if lvl_limits is being passed */
+  dms_battery_lvl_limits_type_v01 lvl_limits;
+
+  /* Optional */
+  /*  PIN State Reporting */
+  uint8_t report_pin_state_valid;  /**< Must be set to true if report_pin_state is being passed */
+  uint8_t report_pin_state;
+  /**<   Values: \n
+       - 0 -- Do not report \n
+       - 1 -- Report on change in PIN state
+  */
+
+  /* Optional */
+  /*  Activation State Reporting */
+  uint8_t report_activation_state_valid;  /**< Must be set to true if report_activation_state is being passed */
+  uint8_t report_activation_state;
+  /**<   Values: \n
+       - 0 -- Do not report \n
+       - 1 -- Report activation state changes
+  */
+
+  /* Optional */
+  /*  Operating Mode Reporting */
+  uint8_t report_oprt_mode_state_valid;  /**< Must be set to true if report_oprt_mode_state is being passed */
+  uint8_t report_oprt_mode_state;
+  /**<   Values: \n
+       - 0 -- Do not report \n
+       - 1 -- Report operating mode changes
+  */
+
+  /* Optional */
+  /*  UIM State Reporting */
+  uint8_t report_uim_state_valid;  /**< Must be set to true if report_uim_state is being passed */
+  uint8_t report_uim_state;
+  /**<   Values: \n
+       - 0 -- Do not report \n
+       - 1 -- Report UIM state changes
+  */
+
+  /* Optional */
+  /*  Wireless Disable State Reporting */
+  uint8_t report_wireless_disable_state_valid;  /**< Must be set to true if report_wireless_disable_state is being passed */
+  uint8_t report_wireless_disable_state;
+  /**<   Values: \n
+       - 0 -- Do not report \n
+       - 1 -- Report wireless disable state changes
+  */
+
+  /* Optional */
+  /*  PRL Init Reporting */
+  uint8_t report_prl_init_valid;  /**< Must be set to true if report_prl_init is being passed */
+  uint8_t report_prl_init;
+  /**<   Values: \n
+       - 0 -- Do not report \n
+       - 1 -- Report PRL initialized notification
+  */
+
+  /* Optional */
+  /*  CDMA Lock Mode Reporting */
+  uint8_t report_cdma_lock_mode_valid;  /**< Must be set to true if report_cdma_lock_mode is being passed */
+  uint8_t report_cdma_lock_mode;
+  /**<   Values: \n
+       - 0 -- Do not report (default value) \n
+       - 1 -- Report CDMA Lock mode state changes
+  */
+
+  /* Optional */
+  /*  Device Multisim info */
+  uint8_t report_device_multisim_info_valid;  /**< Must be set to true if report_device_multisim_info is being passed */
+  uint8_t report_device_multisim_info;
+  /**<   Values: \n
+       - 0 -- Do not report (default value) \n
+       - 1 -- Report device multisim changes
+  */
+}dms_set_event_report_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Sets the device management state reporting conditions
+           for the requesting control point. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_set_event_report_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  dms_power_status_mask_v01 power_status;
+  /**<   Power status flags. Values:  \n
+       Bit 0 -- Power source  \n
+       - 0 -- Powered by battery \n
+       - 1 -- Powered by external source \n
+
+       Bit 1 -- Battery connected \n
+       - 0 -- Not connected \n
+       - 1 -- Connected \n
+
+       Bit 2 -- Battery charging \n
+       - 0 -- Not charging \n
+       - 1 -- Charging \n
+
+       Bit 3 -- Power fault \n
+       - 0 -- No power fault \n
+       - 1 -- Recognized power fault, calls inhibited
+  */
+
+  uint8_t battery_lvl;
+  /**<   Level of the battery. Values: \n
+       - 0x00 -- Battery is exhausted or the mobile device does not have a
+                battery connected \n
+       - 1 through 100 (0x64) -- Percentage of battery capacity remaining
+  */
+}dms_power_state_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_PIN_STATUS_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_PIN_STATUS_NOT_INITIALIZED_V01 = 0x00,
+  DMS_PIN_STATUS_ENABLED_NOT_VERIFIED_V01 = 0x01,
+  DMS_PIN_STATUS_ENABLED_VERIFIED_V01 = 0x02,
+  DMS_PIN_STATUS_DISABLED_V01 = 0x03,
+  DMS_PIN_STATUS_BLOCKED_V01 = 0x04,
+  DMS_PIN_STATUS_PERMANENTLY_BLOCKED_V01 = 0x05,
+  DMS_PIN_STATUS_UNBLOCKED_V01 = 0x06,
+  DMS_PIN_STATUS_CHANGED_V01 = 0x07,
+  DMS_PIN_STATUS_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_pin_status_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  dms_pin_status_enum_v01 status;
+  /**<   Current status of the PIN. Values: \n
+       - 0 -- PIN is not initialized \n
+       - 1 -- PIN is enabled, not verified \n
+       - 2 -- PIN is enabled, verified \n
+       - 3 -- PIN is disabled \n
+       - 4 -- PIN is blocked \n
+       - 5 -- PIN is permanently blocked \n
+       - 6 -- PIN is unblocked \n
+       - 7 -- PIN is changed
+  */
+
+  uint8_t verify_retries_left;
+  /**<   Number of retries left, after which the PIN is blocked. */
+
+  uint8_t unblock_retries_left;
+  /**<   Number of unblock retries left, after which the PIN is
+       permanently blocked, i.e., the UIM is unusable.
+  */
+}dms_pin_status_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_OPERATING_MODE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_OP_MODE_ONLINE_V01 = 0x00,
+  DMS_OP_MODE_LOW_POWER_V01 = 0x01,
+  DMS_OP_MODE_FACTORY_TEST_MODE_V01 = 0x02,
+  DMS_OP_MODE_OFFLINE_V01 = 0x03,
+  DMS_OP_MODE_RESETTING_V01 = 0x04,
+  DMS_OP_MODE_SHUTTING_DOWN_V01 = 0x05,
+  DMS_OP_MODE_PERSISTENT_LOW_POWER_V01 = 0x06,
+  DMS_OP_MODE_MODE_ONLY_LOW_POWER_V01 = 0x07,
+  DMS_OP_MODE_NET_TEST_GW_V01 = 0x08,
+  DMS_OPERATING_MODE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_operating_mode_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_UIM_STATE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_UIM_INITIALIZATION_COMPLETED_V01 = 0x00,
+  DMS_UIM_INITIALIZATION_FAILED_V01 = 0x01,
+  DMS_UIM_NOT_PRESENT_V01 = 0x02,
+  DMS_UIM_STATE_UNAVAILABLE_V01 = -1,
+  DMS_UIM_STATE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_uim_state_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_ACTIVATION_STATE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_ACTIVATION_NOT_ACTIVATED_V01 = 0x00,
+  DMS_ACTIVATION_ACTIVATED_V01 = 0x01,
+  DMS_ACTIVATION_CONNECTING_V01 = 0x02,
+  DMS_ACTIVATION_CONNECTED_V01 = 0x03,
+  DMS_ACTIVATION_OTASP_SEC_AUTHENTICATED_V01 = 0x4,
+  DMS_ACTIVATION_OTASP_NAM_DOWNLOADED_V01 = 0x05,
+  DMS_ACTIVATION_OTASP_MDN_DOWNLOADED_V01 = 0x06,
+  DMS_ACTIVATION_OTASP_IMSI_DOWNLOADED_V01 = 0x07,
+  DMS_ACTIVATION_OTASP_PRL_DOWNLOADED_V01 = 0x08,
+  DMS_ACTIVATION_OTASP_SPC_DOWNLOADED_V01 = 0x09,
+  DMS_ACTIVATION_OTASP_SETTINGS_COMMITTED_V01 = 0x0A,
+  DMS_ACTIVATION_STATE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_activation_state_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_WIRELESS_DISABLE_STATE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_WIRELESS_DISABLE_OFF_V01 = 0x00,
+  DMS_WIRELESS_DISABLE_ON_V01 = 0x01,
+  DMS_WIRELESS_DISABLE_STATE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_wireless_disable_state_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_PRL_INIT_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_PRL_INIT_COMPLETED_V01 = 0x01,
+  DMS_PRL_INIT_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_prl_init_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_CDMA_LOCK_MODE_STATE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_CDMA_LOCK_MODE_OFF_V01 = 0, /**<  Phone is not CDMA locked  */
+  DMS_CDMA_LOCK_MODE_ON_V01 = 1, /**<  Phone is CDMA locked  */
+  DMS_CDMA_LOCK_MODE_STATE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_cdma_lock_mode_state_enum_v01;
+/**
+    @}
+  */
+
+typedef uint64_t dms_subs_capability_mask_type_v01;
+#define DMS_SUBS_CAPABILITY_AMPS_V01 ((dms_subs_capability_mask_type_v01)0x00000001ull)
+#define DMS_SUBS_CAPABILITY_CDMA_V01 ((dms_subs_capability_mask_type_v01)0x00000002ull)
+#define DMS_SUBS_CAPABILITY_HDR_V01 ((dms_subs_capability_mask_type_v01)0x00000004ull)
+#define DMS_SUBS_CAPABILITY_GSM_V01 ((dms_subs_capability_mask_type_v01)0x00000008ull)
+#define DMS_SUBS_CAPABILITY_WCDMA_V01 ((dms_subs_capability_mask_type_v01)0x00000010ull)
+#define DMS_SUBS_CAPABILITY_LTE_V01 ((dms_subs_capability_mask_type_v01)0x00000020ull)
+#define DMS_SUBS_CAPABILITY_TDS_V01 ((dms_subs_capability_mask_type_v01)0x00000040ull)
+#define DMS_SUBS_CAPABILTIY_SGLTE_V01 ((dms_subs_capability_mask_type_v01)0x00000080ull)
+#define DMS_SUBS_CAPABILTIY_SVLTE_V01 ((dms_subs_capability_mask_type_v01)0x00000100ull)
+#define DMS_SUBS_CAPABILITY_SVDO_V01 ((dms_subs_capability_mask_type_v01)0x00000200ull)
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint8_t max_active;
+  /**<   The maximum number of subscriptions listed in this configuration that can be
+       simultaneously active. If this number is less than max_subscriptions it implies
+       that any combination of the subscriptions in this configuration can be active
+       and the remaining can be in standby */
+
+  uint32_t subscription_list_len;  /**< Must be set to # of elements in subscription_list */
+  dms_subs_capability_mask_type_v01 subscription_list[QMI_DMS_MAX_SUBSCRIPTION_LIST_LEN_V01];
+  /**<   An array of max_subscriptions entries where each entry is a mask of capabilities.
+ The client ignores any bits in the mask that it does not recognize. Values:
+      - DMS_SUBS_CAPABILITY_AMPS (0x00000001) --
+      - DMS_SUBS_CAPABILITY_CDMA (0x00000002) --
+      - DMS_SUBS_CAPABILITY_HDR (0x00000004) --
+      - DMS_SUBS_CAPABILITY_GSM (0x00000008) --
+      - DMS_SUBS_CAPABILITY_WCDMA (0x00000010) --
+      - DMS_SUBS_CAPABILITY_LTE (0x00000020) --
+      - DMS_SUBS_CAPABILITY_TDS (0x00000040) --
+      - DMS_SUBS_CAPABILTIY_SGLTE (0x00000080) --
+      - DMS_SUBS_CAPABILTIY_SVLTE (0x00000100) --
+      - DMS_SUBS_CAPABILITY_SVDO (0x00000200) --  */
+}dms_subs_config_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint8_t max_subscriptions;
+  /**<   The maximum number of subscriptions that can be supported simultaneously. */
+
+  uint32_t subscription_config_list_len;  /**< Must be set to # of elements in subscription_config_list */
+  dms_subs_config_type_v01 subscription_config_list[QMI_DMS_MAX_CONFIG_LIST_LEN_V01];
+  /**<   List of supported multi-SIM configurations. */
+}dms_multisim_capability_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Indication Message; Sets the device management state reporting conditions
+           for the requesting control point. */
+typedef struct {
+
+  /* Optional */
+  /*  Power State */
+  uint8_t power_state_valid;  /**< Must be set to true if power_state is being passed */
+  dms_power_state_type_v01 power_state;
+
+  /* Optional */
+  /*  PIN 1 Status */
+  uint8_t pin1_status_valid;  /**< Must be set to true if pin1_status is being passed */
+  dms_pin_status_type_v01 pin1_status;
+
+  /* Optional */
+  /*  PIN 2 Status */
+  uint8_t pin2_status_valid;  /**< Must be set to true if pin2_status is being passed */
+  dms_pin_status_type_v01 pin2_status;
+
+  /* Optional */
+  /*  Activation State */
+  uint8_t activation_state_valid;  /**< Must be set to true if activation_state is being passed */
+  dms_activation_state_enum_v01 activation_state;
+  /**<   Service activation state. Values: \n
+       - 0x00 -- Service is not activated \n
+       - 0x01 -- Service is activated \n
+       - 0x02 -- Activation connecting -- Network
+                connection is in progress for automatic activation of service \n
+       - 0x03 -- Activation connected -- Network
+                connection is connected for automatic activation of service \n
+       - 0x04 -- OTASP security is authenticated \n
+       - 0x05 - OTASP NAM is downloaded \n
+       - 0x06 - OTASP MDN is downloaded \n
+       - 0x07 - OTASP IMSI downloaded \n
+       - 0x08 - OTASP PRL is downloaded \n
+       - 0x09 - OTASP SPC is downloaded \n
+       - 0x0A - OTASP settings are committed
+  */
+
+  /* Optional */
+  /*  Operating Mode */
+  uint8_t operating_mode_valid;  /**< Must be set to true if operating_mode is being passed */
+  dms_operating_mode_enum_v01 operating_mode;
+  /**<   Current operating mode. Values: \n
+       - 0 -- Online \n
+       - 1 -- Low power \n
+       - 2 -- Factory Test mode \n
+       - 3 -- Offline \n
+       - 4 -- Resetting \n
+       - 5 -- Shutting down \n
+       - 6 -- Persistent low power \n
+       - 7 -- Mode-only low power \n
+       - 8 -- Conducting network test for GSM/WCDMA
+  */
+
+  /* Optional */
+  /*  UIM State */
+  uint8_t uim_state_valid;  /**< Must be set to true if uim_state is being passed */
+  dms_uim_state_enum_v01 uim_state;
+  /**<   UIM state. Values: \n
+       - 0x00 -- UIM initialization completed \n
+       - 0x01 -- UIM failed \n
+       - 0x02 -- UIM is not present \n
+       - 0xFF -- UIM state is currently unavailable
+  */
+
+  /* Optional */
+  /*  Wireless Disable State */
+  uint8_t wireless_disable_state_valid;  /**< Must be set to true if wireless_disable_state is being passed */
+  dms_wireless_disable_state_enum_v01 wireless_disable_state;
+  /**<   Wireless disable state. Values: \n
+       - 0x00 -- Wireless disable switch is turned off \n
+       - 0x01 -- Wireless disable switch is turned on
+  */
+
+  /* Optional */
+  /*  PRL Init Notification */
+  uint8_t prl_init_valid;  /**< Must be set to true if prl_init is being passed */
+  dms_prl_init_enum_v01 prl_init;
+  /**<   PRL initialized. Values: \n
+       - 0x01 -- PRL is completely loaded into the device
+       (could be the default PRL).
+  */
+
+  /* Optional */
+  /*  CDMA Lock Mode State */
+  uint8_t cdma_lock_mode_state_valid;  /**< Must be set to true if cdma_lock_mode_state is being passed */
+  dms_cdma_lock_mode_state_enum_v01 cdma_lock_mode_state;
+  /**<   CDMA Lock mode state. Values: \n
+      - DMS_CDMA_LOCK_MODE_OFF (0) --  Phone is not CDMA locked
+      - DMS_CDMA_LOCK_MODE_ON (1) --  Phone is CDMA locked
+ */
+
+  /* Optional */
+  /*  Device Multisim Capability */
+  uint8_t multisim_capability_valid;  /**< Must be set to true if multisim_capability is being passed */
+  dms_multisim_capability_type_v01 multisim_capability;
+  /**<   \n Device capability for supporting multiple simultaneously active radio interfaces.
+  */
+}dms_event_report_ind_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_device_cap_req_msg_v01;
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_DATA_SERVICE_CAPABILITY_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_DATA_CAP_NONE_V01 = 0x00,
+  DMS_DATA_CAP_CS_ONLY_V01 = 0x01,
+  DMS_DATA_CAP_PS_ONLY_V01 = 0x02,
+  DMS_DATA_CAP_SIMUL_CS_AND_PS_V01 = 0x03,
+  DMS_DATA_CAP_NONSIMUL_CS_AND_PS_V01 = 0x04,
+  DMS_DATA_SERVICE_CAPABILITY_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_data_service_capability_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_SIM_CAPABILITY_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_SIM_NOT_SUPPORTED_V01 = 0x01,
+  DMS_SIM_SUPPORTED_V01 = 0x02,
+  DMS_SIM_CAPABILITY_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_sim_capability_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_RADIO_IF_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_RADIO_IF_1X_V01 = 0x01,
+  DMS_RADIO_IF_1X_EVDO_V01 = 0x02,
+  DMS_RADIO_IF_GSM_V01 = 0x04,
+  DMS_RADIO_IF_UMTS_V01 = 0x05,
+  DMS_RADIO_IF_LTE_V01 = 0x08,
+  DMS_RADIO_IF_TDS_V01 = 0x09,
+  DMS_RADIO_IF_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_radio_if_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_DEVICE_SERVICE_CAPABILITY_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_DEVICE_CAP_DATA_ONLY_V01 = 0x01,
+  DMS_DEVICE_CAP_VOICE_ONLY_V01 = 0x02,
+  DMS_DEVICE_CAP_SIMUL_VOICE_AND_DATA_V01 = 0x03,
+  DMS_DEVICE_CAP_NONSIMUL_VOICE_AND_DATA_V01 = 0x04,
+  DMS_DEVICE_SERVICE_CAPABILITY_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_device_service_capability_enum_v01;
+/**
+    @}
+  */
+
+typedef uint64_t dms_voice_support_capability_mask_v01;
+#define QMI_DMS_MASK_VOICE_SUPPORT_GW_CSFB_CAPABLE_V01 ((dms_voice_support_capability_mask_v01)0x0001ull)
+#define QMI_DMS_MASK_VOICE_SUPPORT_1x_CSFB_CAPABLE_V01 ((dms_voice_support_capability_mask_v01)0x0002ull)
+#define QMI_DMS_MASK_VOICE_SUPPORT_VOLTE_CAPABLE_V01 ((dms_voice_support_capability_mask_v01)0x0004ull)
+typedef uint64_t dms_simul_voice_and_data_capability_mask_v01;
+#define QMI_DMS_MASK_SVLTE_CAPABLE_V01 ((dms_simul_voice_and_data_capability_mask_v01)0x0001ull)
+#define QMI_DMS_MASK_SVDO_CAPABLE_V01 ((dms_simul_voice_and_data_capability_mask_v01)0x0002ull)
+#define QMI_DMS_MASK_SGLTE_CAPABLE_V01 ((dms_simul_voice_and_data_capability_mask_v01)0x0004ull)
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint32_t max_tx_channel_rate;
+  /**<   Maximum Tx transmission rate in bits per second (bps) supported
+       by the device. The value 0xFFFFFFFF implies a rate greater than
+       or equal to 0xFFFFFFFF (4 Gbps). In multitechnology devices, this
+       value is the greatest rate among all supported technologies.
+  */
+
+  uint32_t max_rx_channel_rate;
+  /**<   Maximum Rx transmission rate in bits per second (bps) supported
+       by the device. The value 0xFFFFFFFF implies rate greater than or
+       equal to 0xFFFFFFFF (4 Gbps). In multitechnology devices, this
+       value is the greatest rate among all supported technologies.
+  */
+
+  /*  Note: Below data item is deprecated from QMI DMS version 1.11 in favor of device_service_capability TLV */
+  dms_data_service_capability_enum_v01 data_service_capability;
+  /**<   Values: \n
+       - 0 -- No data services supported \n
+       - 1 -- Only circuit-switched (CS) services are supported \n
+       - 2 -- Only packet-switched (PS) services are supported \n
+       - 3 -- Simultaneous CS and PS \n
+       - 4 -- Nonsimultaneous CS and PS
+  */
+
+  dms_sim_capability_enum_v01 sim_capability;
+  /**<   Values: \n
+       - 1 -- SIM is not supported \n
+       - 2 -- SIM is supported
+  */
+
+  uint32_t radio_if_list_len;  /**< Must be set to # of elements in radio_if_list */
+  dms_radio_if_enum_v01 radio_if_list[QMI_DMS_RADIO_IF_LIST_MAX_V01];
+  /**<   List of N one-byte elements describing the radio interfaces
+       supported by the device. Values: \n
+       - 1 -- CDMA2000 1X \n
+       - 2 -- CDMA2000 HRPD (1xEV-DO) \n
+       - 4 -- GSM \n
+       - 5 -- UMTS \n
+       - 8 -- LTE \n
+       - 9 -- TDS
+  */
+}dms_device_capabilities_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests the device capabilities. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Device Capabilities */
+  dms_device_capabilities_type_v01 device_capabilities;
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  Device Service Capability */
+  uint8_t device_service_capability_valid;  /**< Must be set to true if device_service_capability is being passed */
+  dms_device_service_capability_enum_v01 device_service_capability;
+  /**<   Values: \n
+       - 1 -- Only data services are supported \n
+       - 2 -- Only voice services are supported \n
+       - 3 -- Simultaneous voice and data \n
+       - 4 -- Nonsimultaneous voice and data
+  */
+
+  /* Optional */
+  /*  Voice Support Capability */
+  uint8_t voice_support_capability_valid;  /**< Must be set to true if voice_support_capability is being passed */
+  dms_voice_support_capability_mask_v01 voice_support_capability;
+  /**<   Bitmask of voice support available on device. Values: \n
+       Bit 0 -- GW CSFB        \n
+       - 0 -- Not capable      \n
+       - 1 -- Capable          \n
+       Bit 1 -- 1x CSFB        \n
+       - 0 -- Not capable      \n
+       - 1 -- Capable          \n
+       Bit 2 -- VoLTE          \n
+       - 0 -- Not capable      \n
+       - 1 -- Capable
+  */
+
+  /* Optional */
+  /*  Simultaneous Voice and Data Capability */
+  uint8_t simul_voice_and_data_capability_valid;  /**< Must be set to true if simul_voice_and_data_capability is being passed */
+  dms_simul_voice_and_data_capability_mask_v01 simul_voice_and_data_capability;
+  /**<   Bitmask of simultaneous voice and data support available on the device. Values: \n
+       - Bit 0 -- SVLTE capability \n
+       - Bit 1 -- SVDO capability  \n
+       - Bit 2 -- SGLTE capability  \n
+       Note: Zero bits set means that none of the defined capabilities are supported.
+  */
+
+  /* Optional */
+  /*  Device Multisim Capability */
+  uint8_t multisim_capability_valid;  /**< Must be set to true if multisim_capability is being passed */
+  dms_multisim_capability_type_v01 multisim_capability;
+  /**<   \n Device capability for supporting multiple simultaneously active radio interfaces.
+  */
+}dms_get_device_cap_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_device_mfr_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests the device the manufacturer information. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Device Manufacturer */
+  char device_manufacturer[QMI_DMS_DEVICE_MANUFACTURER_MAX_V01 + 1];
+  /**<   String identifying the device manufacturer. */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_get_device_mfr_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_device_model_id_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests the device model identification. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Device Model */
+  char device_model_id[QMI_DMS_DEVICE_MODEL_ID_MAX_V01 + 1];
+  /**<   String identifying the device model. */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_get_device_model_id_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_device_rev_id_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests the device firmware revision identification. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Revision ID   */
+  char device_rev_id[QMI_DMS_DEVICE_REV_ID_MAX_V01 + 1];
+  /**<   String containing the device revision ID. */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  Boot Code Revision */
+  uint8_t boot_code_rev_valid;  /**< Must be set to true if boot_code_rev is being passed */
+  char boot_code_rev[QMI_DMS_BOOT_CODE_REV_MAX_V01 + 1];
+  /**<   String containing the boot code revision.
+  */
+
+  /* Optional */
+  /*  PRI Revision */
+  uint8_t pri_rev_valid;  /**< Must be set to true if pri_rev is being passed */
+  char pri_rev[QMI_DMS_PRI_REV_MAX_V01 + 1];
+  /**<   String containing the device PRI revision.
+  */
+}dms_get_device_rev_id_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_msisdn_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests the assigned voice number. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Voice Number */
+  char voice_number[QMI_DMS_VOICE_NUMBER_MAX_V01 + 1];
+  /**<   String containing the voice number in use by the device. */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  Mobile ID */
+  uint8_t mobile_id_number_valid;  /**< Must be set to true if mobile_id_number is being passed */
+  char mobile_id_number[QMI_DMS_MOBILE_ID_NUMBER_MAX_V01 + 1];
+  /**<   String containing the mobile ID number of the device. */
+
+  /* Optional */
+  /*  International Mobile Subscriber ID */
+  uint8_t imsi_valid;  /**< Must be set to true if imsi is being passed */
+  char imsi[QMI_DMS_IMSI_MAX_V01 + 1];
+  /**<   String containing the international mobile subscriber ID of the device.
+  */
+}dms_get_msisdn_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_device_serial_numbers_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests the serial numbers of the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  ESN */
+  uint8_t esn_valid;  /**< Must be set to true if esn is being passed */
+  char esn[QMI_DMS_ESN_MAX_V01 + 1];
+  /**<   String containing the Electronic Serial Number (ESN) of the device. */
+
+  /* Optional */
+  /*  IMEI */
+  uint8_t imei_valid;  /**< Must be set to true if imei is being passed */
+  char imei[QMI_DMS_IMEI_MAX_V01 + 1];
+  /**<   String containing the International Mobile Equipment Identity
+      (IMEI) of the device.
+  */
+
+  /* Optional */
+  /*  MEID */
+  uint8_t meid_valid;  /**< Must be set to true if meid is being passed */
+  char meid[QMI_DMS_MEID_MAX_V01 + 1];
+  /**<   String containing the Mobile Equipment Identifier (MEID) of the device. */
+
+  /* Optional */
+  /*  IMEI SVN */
+  uint8_t imeisv_svn_valid;  /**< Must be set to true if imeisv_svn is being passed */
+  char imeisv_svn[QMI_DMS_IMEISV_MAX_V01 + 1];
+  /**<   IMEI software version number
+  */
+}dms_get_device_serial_numbers_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_power_state_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests the power status of the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Power State */
+  dms_power_state_type_v01 power_state;
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_get_power_state_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_PIN_ID_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_QMI_PIN_ID_PIN_1_V01 = 0x01,
+  DMS_QMI_PIN_ID_PIN_2_V01 = 0x02,
+  DMS_PIN_ID_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_pin_id_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  dms_pin_id_enum_v01 pin_id;
+  /**<   Specifies the ID of the PIN to be enabled or disabled. Values: \n
+       - 1 -- PIN1 (also called PIN) \n
+       - 2 -- PIN2
+  */
+
+  uint8_t protection_setting_enabled;
+  /**<   Specifies whether the PIN is enabled. Values: \n
+     - 0 -- Disable PIN \n
+     - 1 -- Enable PIN
+  */
+
+  uint32_t pin_value_len;  /**< Must be set to # of elements in pin_value */
+  uint8_t pin_value[QMI_DMS_PIN_VALUE_MAX_V01];
+  /**<   Specifies the PIN value of the PIN to be enabled/disabled. The
+       protection setting is only changed if this value is
+       successfully verified by the SIM.
+  */
+}dms_pin_protection_info_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Enables or disables protection of UIM contents by a
+           specified PIN. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  PIN Protection Information */
+  dms_pin_protection_info_type_v01 pin_protection_info;
+}dms_uim_set_pin_protection_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint8_t verify_retries_left;
+  /**<   Number of retries left, after which the PIN is blocked. */
+
+  uint8_t unblock_retries_left;
+  /**<   Number of unblock retries left, after which the PIN is
+       permanently blocked, i.e., the UIM is unusable.
+  */
+}dms_pin_retries_status_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Enables or disables protection of UIM contents by a
+           specified PIN. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  Pin Retries Status */
+  uint8_t pin_retries_status_valid;  /**< Must be set to true if pin_retries_status is being passed */
+  dms_pin_retries_status_type_v01 pin_retries_status;
+}dms_uim_set_pin_protection_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  dms_pin_id_enum_v01 pin_id;
+  /**<   Specifies the ID of the PIN to be enabled or disabled. Values: \n
+       - 1 -- PIN1 (also called PIN) \n
+       - 2 -- PIN2
+  */
+
+  uint32_t pin_value_len;  /**< Must be set to # of elements in pin_value */
+  uint8_t pin_value[QMI_DMS_PIN_VALUE_MAX_V01];
+  /**<   Specifies the PIN value of the PIN to be verified; the
+       protection setting is only changed if this value is
+       successfully verified by the SIM.
+  */
+}dms_pin_info_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Verifies the PIN before accessing the UIM contents. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  PIN Value */
+  dms_pin_info_type_v01 pin_info;
+}dms_uim_verify_pin_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Verifies the PIN before accessing the UIM contents. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  PIN Retries Status */
+  uint8_t pin_retries_status_valid;  /**< Must be set to true if pin_retries_status is being passed */
+  dms_pin_retries_status_type_v01 pin_retries_status;
+}dms_uim_verify_pin_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  dms_pin_id_enum_v01 unblock_pin_id;
+  /**<   Specifies the ID of the PIN to be unblocked. Values: \n
+       - 1 -- PIN1 (also called PIN) \n
+       - 2 -- PIN2
+  */
+
+  uint32_t puk_value_len;  /**< Must be set to # of elements in puk_value */
+  uint8_t puk_value[QMI_DMS_PUK_VALUE_MAX_V01];
+  /**<   Specifies the PUK value (password) of the PIN to be unblocked. */
+
+  uint32_t new_pin_value_len;  /**< Must be set to # of elements in new_pin_value */
+  uint8_t new_pin_value[QMI_DMS_PUK_VALUE_MAX_V01];
+  /**<   Specifies the new PIN value (password) for the PIN to be unblocked. */
+}dms_pin_unblock_info_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Unblocks a blocked PIN. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  PIN Unblock Information */
+  dms_pin_unblock_info_type_v01 pin_unblock_info;
+}dms_uim_unblock_pin_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Unblocks a blocked PIN. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  PIN Retries Status */
+  uint8_t pin_retries_status_valid;  /**< Must be set to true if pin_retries_status is being passed */
+  dms_pin_retries_status_type_v01 pin_retries_status;
+}dms_uim_unblock_pin_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  dms_pin_id_enum_v01 pin_id;
+  /**<   Specifies the ID of the PIN to be changed. Values: \n
+       - 1 -- PIN1 (also called PIN) \n
+       - 2 -- PIN2
+  */
+
+  uint32_t old_pin_value_len;  /**< Must be set to # of elements in old_pin_value */
+  uint8_t old_pin_value[QMI_DMS_PIN_VALUE_MAX_V01];
+  /**<   Specifies the old PIN value (old password) of the PIN. */
+
+  uint32_t new_pin_value_len;  /**< Must be set to # of elements in new_pin_value */
+  uint8_t new_pin_value[QMI_DMS_PIN_VALUE_MAX_V01];
+  /**<   Specifies the new PIN value (new password) of the PIN. */
+}dms_pin_change_info_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Changes the PIN value. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  PIN Change Information */
+  dms_pin_change_info_type_v01 pin_change_info;
+}dms_uim_change_pin_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Changes the PIN value. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  PIN Retries Status */
+  uint8_t pin_retries_status_valid;  /**< Must be set to true if pin_retries_status is being passed */
+  dms_pin_retries_status_type_v01 pin_retries_status;
+}dms_uim_change_pin_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_uim_get_pin_status_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Gets the status of a PIN. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  PIN 1 Status */
+  uint8_t pin1_status_valid;  /**< Must be set to true if pin1_status is being passed */
+  dms_pin_status_type_v01 pin1_status;
+
+  /* Optional */
+  /*  PIN 2 Status */
+  uint8_t pin2_status_valid;  /**< Must be set to true if pin2_status is being passed */
+  dms_pin_status_type_v01 pin2_status;
+}dms_uim_get_pin_status_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_device_hardware_rev_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the hardware revision of the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Hardware Revision */
+  char hardware_rev[QMI_DMS_HARDWARE_REV_MAX_V01 + 1];
+  /**<   String containing the hardware revision of the device. */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_get_device_hardware_rev_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_operating_mode_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the current operating mode of the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Operating Mode */
+  dms_operating_mode_enum_v01 operating_mode;
+  /**<   Selected operating mode. Values: \n
+       - 0 -- Online \n
+       - 1 -- Low power \n
+       - 2 -- Factory Test mode \n
+       - 3 -- Offline \n
+       - 4 -- Resetting \n
+       - 5 -- Shutting down \n
+       - 6 -- Persistent low power \n
+       - 8 -- Conducting network test for GSM/WCDMA
+  */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  Offline Reason */
+  uint8_t offline_reason_valid;  /**< Must be set to true if offline_reason is being passed */
+  dms_offline_reason_mask_v01 offline_reason;
+  /**<   Offline reason bitmask. All unlisted bits are reserved for
+       future use and are ignored. Values: \n
+       - 0x0001 -- Host image misconfiguration \n
+       - 0x0002 -- PRI image misconfiguration \n
+       - 0x0004 -- PRI version incompatible \n
+       - 0x0008 -- Device memory is full, cannot copy PRI information
+
+  */
+
+  /* Optional */
+  /*  Hardware-Restricted Mode */
+  uint8_t hardware_controlled_mode_valid;  /**< Must be set to true if hardware_controlled_mode is being passed */
+  uint8_t hardware_controlled_mode;
+  /**<   Hardware-Restricted mode. Values: \n
+       - 0x01 -- TRUE
+  */
+}dms_get_operating_mode_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Sets the operating mode of the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Operating Mode */
+  dms_operating_mode_enum_v01 operating_mode;
+  /**<   Selected operating mode. Values:  \n
+       - 0 -- Online \n
+       - 1 -- Low power \n
+       - 2 -- Factory Test mode \n
+       - 3 -- Offline \n
+       - 4 -- Resetting \n
+       - 5 -- Shutting down \n
+       - 6 -- Persistent low power \n
+       - 7 -- Mode-only low power
+  */
+}dms_set_operating_mode_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Sets the operating mode of the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_set_operating_mode_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_time_req_msg_v01;
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_TIME_SOURCE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_TIME_SOURCE_DEVICE_CLOCK_V01 = 0x00,
+  DMS_TIME_SOURCE_CDMA_V01 = 0x01,
+  DMS_TIME_SOURCE_HDR_V01 = 0x02,
+  DMS_TIME_SOURCE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_time_source_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint8_t time_count[6];
+  /**<   Count of 1.25 ms that have elapsed from the start of GPS Epoch
+       time (January 6, 1980). A 6-byte integer in little-endian format.
+  */
+
+  dms_time_source_enum_v01 time_source;
+  /**<   Source of the timestamp. Values: \n
+       - 0 -- 32 kHz device clock \n
+       - 1 -- CDMA network \n
+       - 2 -- HDR network
+  */
+}dms_device_time_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the current time of the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Device Time */
+  dms_device_time_type_v01 device_time;
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  System Time in Milliseconds */
+  uint8_t sys_time_in_ms_valid;  /**< Must be set to true if sys_time_in_ms is being passed */
+  uint64_t sys_time_in_ms;
+  /**<   Count of system time in milliseconds that have
+       elapsed from the start of GPS Epoch time
+       (Jan 6, 1980).
+  */
+
+  /* Optional */
+  /*  User Time in Milliseconds */
+  uint8_t user_time_in_ms_valid;  /**< Must be set to true if user_time_in_ms is being passed */
+  uint64_t user_time_in_ms;
+  /**<   Count of user time in milliseconds that have
+       elapsed from the start of GPS Epoch time
+       (Jan 6, 1980).
+  */
+}dms_get_time_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_prl_ver_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the version of the active Preferred Roaming
+           List (PRL) of the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  PRL Version */
+  uint16_t prl_version;
+  /**<   PRL version.*/
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  PRL-Only Preference */
+  uint8_t prl_only_valid;  /**< Must be set to true if prl_only is being passed */
+  uint8_t prl_only;
+  /**<   Values: \n
+       - 0 -- Unset \n
+       - 1 -- Set
+  */
+}dms_get_prl_ver_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_activation_state_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the activation state of the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Activation State */
+  dms_activation_state_enum_v01 activation_state;
+  /**<   Service activation state. Values: \n
+       - 0x00 -- Service is not activated \n
+       - 0x01 --Service is activated \n
+       - 0x02 -- Activation is connecting - Network
+                connection in progress for automatic activation of service \n
+       - 0x03 -- Activation is connected - Network
+                connection is connected for automatic activation of service \n
+       - 0x04 -- OTASP security is authenticated \n
+       - 0x05 -- OTASP NAM is downloaded \n
+       - 0x06 -- OTASP MDN is downloaded \n
+       - 0x07 -- OTASP IMSI is downloaded \n
+       - 0x08 -- OTASP PRL is downloaded \n
+       - 0x09 -- OTASP SPC is downloaded \n
+       - 0x0A -- OTASP settings are committed
+  */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_get_activation_state_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  char act_code[QMI_DMS_ACTIVATION_CODE_MAX_V01 + 1];
+  /**<   Activation code to be used by the default activation type
+       for the device in ASCII format (maximum 81 bytes).
+  */
+}dms_activation_code_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Requests that the device perform automatic
+           service activation. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Activation Code */
+  dms_activation_code_type_v01 activation_code;
+}dms_activate_automatic_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests that the device perform automatic
+           service activation. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_activate_automatic_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  char spc[QMI_DMS_SPC_LEN_V01];
+  /**<   Service programming code in ASCII format (digits 0 to 9 only).
+  */
+
+  uint16_t sid;
+  /**<   System identification number
+  */
+
+  char mdn[QMI_DMS_MDN_MAX_V01 + 1];
+  /**<   String containing the mobile directory number (maximum 15 bytes).
+  */
+
+  char min[QMI_DMS_MIN_MAX_V01 + 1];
+  /**<   String containing the mobile identification number (maximum 15 bytes).
+  */
+}dms_manual_act_data_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  char mn_ha_key[QMI_DMS_HA_KEY_MAX_V01 + 1];
+  /**<   String containing the MN-HA key (maximum 16 bytes).*/
+}dms_mn_ha_key_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  char mn_aaa_key[QMI_DMS_AAA_KEY_MAX_V01 + 1];
+  /**<   String containing the MN-AAA key (maximum 16 bytes).*/
+}dms_mn_aaa_key_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint16_t prl_total_len;
+  /**<    PRL total length (maximum 16384)*/
+
+  uint8_t prl_seg_num;
+  /**<   PRL segment sequence number*/
+
+  uint32_t prl_len;  /**< Must be set to # of elements in prl */
+  uint8_t prl[QMI_DMS_PRL_DATA_MAX_V01];
+  /**<   PRL segment data*/
+}dms_pref_roaming_list_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Requests that the device perform manual service activation. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Manual Activation Data */
+  dms_manual_act_data_type_v01 activation_data;
+
+  /* Optional */
+  /*  MN-HA Key */
+  uint8_t mn_ha_key_valid;  /**< Must be set to true if mn_ha_key is being passed */
+  dms_mn_ha_key_type_v01 mn_ha_key;
+
+  /* Optional */
+  /*  MN-AAA Key */
+  uint8_t mn_aaa_key_valid;  /**< Must be set to true if mn_aaa_key is being passed */
+  dms_mn_aaa_key_type_v01 mn_aaa_key;
+
+  /* Optional */
+  /*  Preferred Roaming List */
+  uint8_t pref_roaming_list_valid;  /**< Must be set to true if pref_roaming_list is being passed */
+  dms_pref_roaming_list_type_v01 pref_roaming_list;
+}dms_activate_manual_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests that the device perform manual service activation. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_activate_manual_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_user_lock_state_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the state of the user lock maintained by the
+           device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  User Lock State */
+  uint8_t lock_enabled;
+  /**<   Current state of the lock. Values: \n
+       - 0 -- Disabled \n
+       - 1 -- Enabled
+  */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_get_user_lock_state_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_LOCK_STATE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_LOCK_DISABLED_V01 = 0x00,
+  DMS_LOCK_ENABLED_V01 = 0x01,
+  DMS_LOCK_STATE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_lock_state_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  dms_lock_state_enum_v01 lock_state;
+  /**<   Current state of the lock. Values: \n
+       - 0 -- Disabled \n
+       - 1 -- Enabled
+  */
+
+  char lock_code[QMI_DMS_LOCK_CODE_LEN_V01];
+  /**<   4-byte code set for the lock in ASCII format (digits 0 to 9 only). */
+}dms_user_lock_state_info_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Sets the user lock state maintained by the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  User Lock State */
+  dms_user_lock_state_info_type_v01 lock_info;
+}dms_set_user_lock_state_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Sets the user lock state maintained by the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_set_user_lock_state_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  char cur_code[QMI_DMS_LOCK_CODE_LEN_V01];
+  /**<   Current 4-byte code to use for the lock in ASCII format (digits 0 to
+       9 only).
+  */
+
+  char new_code[QMI_DMS_LOCK_CODE_LEN_V01];
+  /**<   New 4-byte code to use for the lock in ASCII format (digits 0 to
+       9 only).
+  */
+}dms_user_lock_set_info_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Sets the user lock code maintained by the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  User Lock Code */
+  dms_user_lock_set_info_type_v01 lock_info;
+}dms_set_user_lock_code_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Sets the user lock code maintained by the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_set_user_lock_code_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_read_user_data_req_msg_v01;
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint32_t data_len;  /**< Must be set to # of elements in data */
+  uint8_t data[QMI_DMS_USER_DATA_MAX_V01];
+  /**<   User data from/to persistent storage (maximum 512).*/
+}dms_user_data_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the user data maintained by the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  User Data */
+  dms_user_data_type_v01 user_data;
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_read_user_data_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Writes user data maintained by the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  User Data */
+  dms_user_data_type_v01 user_data;
+}dms_write_user_data_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Writes user data maintained by the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_write_user_data_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_read_eri_file_req_msg_v01;
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  uint32_t eri_data_len;  /**< Must be set to # of elements in eri_data */
+  uint8_t eri_data[QMI_DMS_ERI_DATA_MAX_V01];
+  /**<   ERI data read from persistent storage (maximum 1024).*/
+}dms_eri_data_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the Extended Roaming Indicator (ERI) file stored on the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  ERI File */
+  dms_eri_data_type_v01 eri_file;
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_read_eri_file_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Requests that the device reset all settings to
+           factory defined values. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Service Programming Code */
+  char spc[QMI_DMS_SPC_LEN_V01];
+  /**<   Service programming code in ASCII format (digits 0 to 9 only).
+  */
+}dms_restore_factory_defaults_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests that the device reset all settings to
+           factory defined values. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_restore_factory_defaults_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Requests the device to validate a specified service
+           programming code. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Programming Code */
+  char spc[QMI_DMS_SPC_LEN_V01];
+  /**<   Service programming code in ASCII format (digits 0 to 9 only). */
+}dms_validate_service_programming_code_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests the device to validate a specified service
+           programming code. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_validate_service_programming_code_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_uim_get_iccid_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the Integrated Circuit Card ID (ICCID) of the UIM for the device. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  UIM ICCID */
+  char uim_id[QMI_DMS_UIM_ID_MAX_V01 + 1];
+  /**<   String containing the UIM ICCID. */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_uim_get_iccid_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_GSM_PERSO_FACILITY_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_PERSO_FACILITY_NETWORK_V01 = 0x00,
+  DMS_PERSO_FACILITY_NETWORK_SUBSET_V01 = 0x01,
+  DMS_PERSO_FACILITY_SERVICE_PROVIDER_V01 = 0x02,
+  DMS_PERSO_FACILITY_CORPORATE_V01 = 0x03,
+  DMS_PERSO_FACILITY_UIM_V01 = 0x04,
+  DMS_GSM_PERSO_FACILITY_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_gsm_perso_facility_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Queries the status of a UIM facility control key. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  UIM Personalization Facility */
+  dms_gsm_perso_facility_enum_v01 facility;
+  /**<   MT or network facility (corresponding AT+CLCK value). Values: \n
+       - 0 -- Network personalization (PN) \n
+       - 1 -- Network subset personalization (PU) \n
+       - 2 -- Service provider personalization (PP) \n
+       - 3 -- Corporate personalization (PC) \n
+       - 4 -- UIM personalization (PF)
+  */
+}dms_uim_get_ck_status_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_FACILITY_STATE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_FACILITY_DEACTIVATED_V01 = 0x00,
+  DMS_FACILITY_ACTIVATED_V01 = 0x01,
+  DMS_FACILITY_BLOCKED_V01 = 0x02,
+  DMS_FACILITY_STATE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_facility_state_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  dms_facility_state_enum_v01 facility_state;
+  /**<   UIM facility state. Values: \n
+       - 0 -- Deactivated \n
+       - 1 -- Activated \n
+       - 2 -- Blocked
+  */
+
+  uint8_t verify_reties_left;
+  /**<   Indicates the number of retries left, after which the CK is blocked. */
+
+  uint8_t unblock_retries_left;
+  /**<   Number of unblock retries left, after which the CK is permanently blocked.
+   */
+}dms_facility_state_info_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the status of a UIM facility control key. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  Facility CK Status */
+  dms_facility_state_info_type_v01 facility_info;
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  Operation Blocking Facility */
+  uint8_t operation_blocking_valid;  /**< Must be set to true if operation_blocking is being passed */
+  uint8_t operation_blocking;
+  /**<   Presence of this TLV indicates that this facility is currently
+       blocking normal operation of the device. This value can be
+       returned only if the facility_state is not 0 (deactivated).
+
+       Note: This value is set to 1 when the TLV is provided.
+  */
+}dms_uim_get_ck_status_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  dms_gsm_perso_facility_enum_v01 facility;
+  /**<   UIM Personalization facility (corresponding AT+CLCK value). Values: \n
+       - 0 -- Network personalization (PN) \n
+       - 1 -- Network subset personalization (PU) \n
+       - 2 -- Service provider personalization (PP) \n
+       - 3 -- Corporate personalization (PC) \n
+       - 4 -- UIM personalization (PF)
+  */
+
+  dms_facility_state_enum_v01 facility_state;
+  /**<   UIM facility state. Values: \n
+       - 0 -- Deactivated
+  */
+
+  char facility_ck[QMI_DMS_FACILITY_CK_MAX_V01 + 1];
+  /**<   Facility depersonalization control key string in ASCII text
+       (maximum 8 bytes).
+   */
+}dms_facility_set_ck_info_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Sets the protection of a UIM facility control key. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  UIM Personalization Facility */
+  dms_facility_set_ck_info_type_v01 facility_set_ck_info;
+}dms_uim_set_ck_protection_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Sets the protection of a UIM facility control key. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  Facility CK Retry Status */
+  uint8_t verify_retries_left_valid;  /**< Must be set to true if verify_retries_left is being passed */
+  uint8_t verify_retries_left;
+  /**<   Number of retries left, after which the CK is blocked.
+   */
+}dms_uim_set_ck_protection_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_aggregates
+    @{
+  */
+typedef struct {
+
+  dms_gsm_perso_facility_enum_v01 facility;
+  /**<   UIM personalization facility (corresponding AT+CLCK value). Values:\n
+       - 0 -- Network personalization (PN) \n
+       - 1 -- Network subset personalization (PU) \n
+       - 2 -- Service provider personalization (PP) \n
+       - 3 -- Corporate personalization (PC) \n
+       - 4 -- UIM personalization (PF)
+  */
+
+  char facility_unblock_ck[QMI_DMS_FACILITY_UNBLOCK_CK_MAX_V01 + 1];
+  /**<   Facility control key string in ASCII text (maximum 8 bytes). */
+}dms_facility_unblock_info_type_v01;  /* Type */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Unblocks a UIM facility control key. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  UIM Personalization Facility */
+  dms_facility_unblock_info_type_v01 facility_unblock_info;
+}dms_uim_unblock_ck_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Unblocks a UIM facility control key. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  Facility CK Retry Status */
+  uint8_t unblock_retries_left_valid;  /**< Must be set to true if unblock_retries_left is being passed */
+  uint8_t unblock_retries_left;
+  /**<   Number of unblock retries left, after which the CK is
+       permanently blocked.
+   */
+}dms_uim_unblock_ck_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_uim_get_imsi_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the International Mobile Station Identity (IMSI)
+           of the UIM for the device. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  International Mobile Subscriber ID */
+  char imsi[QMI_DMS_IMSI_MAX_V01 + 1];
+  /**<   String containing the international mobile subscriber ID. */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_uim_get_imsi_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_uim_get_state_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the state of the UIM. (Deprecated) */
+typedef struct {
+
+  /* Mandatory */
+  /*  UIM State */
+  dms_uim_state_enum_v01 uim_state;
+  /**<   UIM state. Values: \n
+       - 0x00 -- UIM initialization completed \n
+       - 0x01 -- UIM is locked or the UIM failed \n
+       - 0x02 -- UIM is not present \n
+       - 0x03 -- Reserved \n
+       - 0xFF -- UIM state is currently unavailable
+  */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_uim_get_state_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_band_capability_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the band capability of the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Band Capability */
+  dms_band_capability_mask_v01 band_capability;
+  /**<   Bitmask of bands supported by the device; see Appendix
+  \ref{app:BandCapability} for the definition of these
+       values.
+  */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  LTE Band Capability */
+  uint8_t lte_band_capability_valid;  /**< Must be set to true if lte_band_capability is being passed */
+  dms_lte_band_capability_mask_v01 lte_band_capability;
+  /**<   This TLV is present on devices that support LTE bands.
+       Bitmask of LTE bands supported by the device; see Appendix
+       \ref{app:LTEBandCapability} for the definition of these
+       values.
+  */
+
+  /* Optional */
+  /*  TDS Band Capability */
+  uint8_t tds_band_capability_valid;  /**< Must be set to true if tds_band_capability is being passed */
+  dms_tds_band_capability_mask_v01 tds_band_capability;
+  /**<   This TLV is present on devices that support TDS bands.
+       Bitmask of TDS bands supported by the device.
+       Values: \n
+       - Bit 0 -- TDS Band A 1900 to 1920 MHz, 2010 to 2020 MHz \n
+       - Bit 1 -- TDS Band B 1850 to 1910 MHz, 1930 to 1990 MHz \n
+       - Bit 2 -- TDS Band C 1910 to 1930 MHz \n
+       - Bit 3 -- TDS Band D 2570 to 2620 MHz \n
+       - Bit 4 -- TDS Band E 2300 to 2400 MHz \n
+       - Bit 5 -- TDS Band F 1880 to 1920 MHz
+  */
+}dms_get_band_capability_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_factory_sku_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the factory provisioned Stock Keeping
+           Unit (SKU). */
+typedef struct {
+
+  /* Mandatory */
+  /*  Factory SKU */
+  char factory_serial_number[QMI_DMS_FACTORY_SN_MAX_V01 + 1];
+  /**<   Factory serial number string in ASCII format (maximum 128 bytes).
+  */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_get_factory_sku_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_TIME_REF_TYPE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_TIME_REF_TYPE_USER_V01 = 0x00000000,
+  DMS_TIME_REF_TYPE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_time_ref_type_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Sets the time on the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Time */
+  uint64_t time_in_ms;
+  /**<   Count of time in milliseconds that have elapsed
+         from the start of GPS Epoch time (Jan 6, 1980).
+   */
+
+  /* Optional */
+  /*  Time Reference Type */
+  uint8_t time_reference_type_valid;  /**< Must be set to true if time_reference_type is being passed */
+  dms_time_ref_type_enum_v01 time_reference_type;
+  /**<   Time reference used while setting the time. Values: \n
+       - 0x00000000 -- User time \n
+       - 0x00000001 to 0xFFFFFFFF -- Reserved for
+         future extension
+  */
+}dms_set_time_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Sets the time on the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+  /**<   Standard response type. */
+}dms_set_time_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_alt_net_config_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the alternative network interface configuration
+           used for the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Alternative Net Configuration */
+  uint8_t alt_net_config;
+  /**<   Alternative network interface configuration. If not provisioned, the
+       Disabled setting is used by the device as default. Values: \n
+       - 0 -- Disabled \n
+       - 1 -- Enabled
+    */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_get_alt_net_config_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Sets the alternative network interface configuration
+           used for the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Alternative Net Configuration */
+  uint8_t alt_net_config;
+  /**<   Alternative network interface configuration. Values: \n
+       - 0 -- Disabled \n
+       - 1 -- Enabled
+  */
+}dms_set_alt_net_config_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Sets the alternative network interface configuration
+           used for the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_set_alt_net_config_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_sw_version_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the software version from the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Software Version Information */
+  char sw_version[QMI_DMS_SW_VERSION_MAX_V01 + 1];
+  /**<   String representing the software version information.
+  */
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_get_sw_version_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Changes the service programming code of the device
+           after authentication. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Current SPC */
+  char curr_spc[QMI_DMS_SPC_LEN_V01];
+  /**<   SPC for authentication in ASCII format (digits 0 to 9 only).
+  */
+
+  /* Mandatory */
+  /*  New SPC */
+  char new_spc[QMI_DMS_SPC_LEN_V01];
+  /**<   New SPC in ASCII format (digits 0 to 9 only).
+  */
+}dms_set_spc_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Changes the service programming code of the device
+           after authentication. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_set_spc_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_current_prl_info_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the currently active PRL information of the device. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  PRL Version */
+  uint8_t prl_version_valid;  /**< Must be set to true if prl_version is being passed */
+  uint16_t prl_version;
+  /**<   PRL version */
+
+  /* Optional */
+  /*  PRL Only Preference */
+  uint8_t prl_only_valid;  /**< Must be set to true if prl_only is being passed */
+  uint8_t prl_only;
+  /**<   Values: \n
+       - 0 -- Unset \n
+       - 1 -- Set
+  */
+}dms_get_current_prl_info_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_BIND_SUBSCRIPTION_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_PRIMARY_SUBS_V01 = 0x0001, /**<  Primary \n  */
+  DMS_SECONDARY_SUBS_V01 = 0x0002, /**<  Secondary \n  */
+  DMS_TERTIARY_SUBS_V01 = 0x0003, /**<  Tertiary   */
+  DMS_BIND_SUBSCRIPTION_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_bind_subscription_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Associates the requesting control point with the requested subscription. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Bind Subscription */
+  dms_bind_subscription_enum_v01 bind_subs;
+  /**<   Subscription to which to bind. Values: \n
+      - DMS_PRIMARY_SUBS (0x0001) --  Primary \n
+      - DMS_SECONDARY_SUBS (0x0002) --  Secondary \n
+      - DMS_TERTIARY_SUBS (0x0003) --  Tertiary
+ */
+}dms_bind_subscription_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Associates the requesting control point with the requested subscription. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_bind_subscription_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_bind_subscription_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Queries the subscription associated with the control point. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  Bound Subscription */
+  uint8_t bind_subscription_valid;  /**< Must be set to true if bind_subscription is being passed */
+  dms_bind_subscription_enum_v01 bind_subscription;
+  /**<   Values: \n
+      - DMS_PRIMARY_SUBS (0x0001) --  Primary \n
+      - DMS_SECONDARY_SUBS (0x0002) --  Secondary \n
+      - DMS_TERTIARY_SUBS (0x0003) --  Tertiary
+ */
+}dms_get_bind_subscription_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Sets the AP software version on the modem required for an
+           Auto Register Short message. */
+typedef struct {
+
+  /* Mandatory */
+  /*  AP Software Version */
+  char ap_sw_version[QMI_DMS_SW_VERSION_MAX_V01 + 1];
+  /**<   String representing the AP software version information.
+  */
+}dms_set_ap_sw_version_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Sets the AP software version on the modem required for an
+           Auto Register Short message. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_set_ap_sw_version_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_cdma_lock_mode_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Requests the CDMA Lock mode status. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  CDMA Lock Mode */
+  uint8_t cdma_lock_mode_status_valid;  /**< Must be set to true if cdma_lock_mode_status is being passed */
+  dms_cdma_lock_mode_state_enum_v01 cdma_lock_mode_status;
+  /**<   CDMA Lock mode status. Values: \n
+      - DMS_CDMA_LOCK_MODE_OFF (0) --  Phone is not CDMA locked
+      - DMS_CDMA_LOCK_MODE_ON (1) --  Phone is CDMA locked
+ */
+}dms_get_cdma_lock_mode_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_enums
+    @{
+  */
+typedef enum {
+  DMS_TEST_CONFIG_TDS_ENUM_MIN_ENUM_VAL_V01 = -2147483647, /**< To force a 32 bit signed enum.  Do not change or use*/
+  DMS_TEST_CONFIG_TDS_PRODUCTION_V01 = 0, /**<  Use the configuration applicable in production
+                                       (in the field) \n  */
+  DMS_TEST_CONFIG_TDS_LAB_V01 = 1, /**<  Use the configuration applicable in the
+                                  lab \n  */
+  DMS_TEST_CONFIG_TDS_USER_V01 = 2, /**<  Use the user-defined configuration   */
+  DMS_TEST_CONFIG_TDS_ENUM_MAX_ENUM_VAL_V01 = 2147483647 /**< To force a 32 bit signed enum.  Do not change or use*/
+}dms_test_config_tds_enum_v01;
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Request Message; Sets the configuration type used while testing. */
+typedef struct {
+
+  /* Optional */
+  /*  TDS CDMA Configuration */
+  uint8_t tds_config_valid;  /**< Must be set to true if tds_config is being passed */
+  dms_test_config_tds_enum_v01 tds_config;
+  /**<   Configuration parameters to be used for TDS CDMA. Values: \n
+      - DMS_TEST_CONFIG_TDS_PRODUCTION (0) --  Use the configuration applicable in production
+                                       (in the field) \n
+      - DMS_TEST_CONFIG_TDS_LAB (1) --  Use the configuration applicable in the
+                                  lab \n
+      - DMS_TEST_CONFIG_TDS_USER (2) --  Use the user-defined configuration
+ */
+}dms_set_test_config_req_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Sets the configuration type used while testing. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_set_test_config_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_get_test_config_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Gets the configuration type used for testing. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+
+  /* Optional */
+  /*  Active TDS CDMA Configuration */
+  uint8_t active_tds_config_valid;  /**< Must be set to true if active_tds_config is being passed */
+  dms_test_config_tds_enum_v01 active_tds_config;
+  /**<   Configuration parameters currently used for TDS CDMA. Values: \n
+      - DMS_TEST_CONFIG_TDS_PRODUCTION (0) --  Use the configuration applicable in production
+                                       (in the field) \n
+      - DMS_TEST_CONFIG_TDS_LAB (1) --  Use the configuration applicable in the
+                                  lab \n
+      - DMS_TEST_CONFIG_TDS_USER (2) --  Use the user-defined configuration
+ */
+
+  /* Optional */
+  /*  Desired TDS CDMA Configuration */
+  uint8_t desired_tds_config_valid;  /**< Must be set to true if desired_tds_config is being passed */
+  dms_test_config_tds_enum_v01 desired_tds_config;
+  /**<   Configuration parameters for TDS CDMA that were set using the last
+ QMI_DMS_SET_TEST_CONFIG command. Values: \n
+      - DMS_TEST_CONFIG_TDS_PRODUCTION (0) --  Use the configuration applicable in production
+                                       (in the field) \n
+      - DMS_TEST_CONFIG_TDS_LAB (1) --  Use the configuration applicable in the
+                                  lab \n
+      - DMS_TEST_CONFIG_TDS_USER (2) --  Use the user-defined configuration
+ */
+}dms_get_test_config_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+typedef struct {
+  /* This element is a placeholder to prevent the declaration of
+     an empty struct.  DO NOT USE THIS FIELD UNDER ANY CIRCUMSTANCE */
+  char __placeholder;
+}dms_clear_test_config_req_msg_v01;
+
+/** @addtogroup dms_qmi_messages
+    @{
+  */
+/** Response Message; Resets the modem configuration to production values. */
+typedef struct {
+
+  /* Mandatory */
+  /*  Result Code */
+  qmi_response_type_v01 resp;
+}dms_clear_test_config_resp_msg_v01;  /* Message */
+/**
+    @}
+  */
+
+/*Service Message Definition*/
+/** @addtogroup dms_qmi_msg_ids
+    @{
+  */
+#define QMI_DMS_RESET_REQ_V01 0x0000
+#define QMI_DMS_RESET_RESP_V01 0x0000
+#define QMI_DMS_SET_EVENT_REPORT_REQ_V01 0x0001
+#define QMI_DMS_SET_EVENT_REPORT_RESP_V01 0x0001
+#define QMI_DMS_EVENT_REPORT_IND_V01 0x0001
+#define QMI_DMS_GET_SUPPORTED_MSGS_REQ_V01 0x001E
+#define QMI_DMS_GET_SUPPORTED_MSGS_RESP_V01 0x001E
+#define QMI_DMS_GET_SUPPORTED_FIELDS_REQ_V01 0x001F
+#define QMI_DMS_GET_SUPPORTED_FIELDS_RESP_V01 0x001F
+#define QMI_DMS_GET_DEVICE_CAP_REQ_V01 0x0020
+#define QMI_DMS_GET_DEVICE_CAP_RESP_V01 0x0020
+#define QMI_DMS_GET_DEVICE_MFR_REQ_V01 0x0021
+#define QMI_DMS_GET_DEVICE_MFR_RESP_V01 0x0021
+#define QMI_DMS_GET_DEVICE_MODEL_ID_REQ_V01 0x0022
+#define QMI_DMS_GET_DEVICE_MODEL_ID_RESP_V01 0x0022
+#define QMI_DMS_GET_DEVICE_REV_ID_REQ_V01 0x0023
+#define QMI_DMS_GET_DEVICE_REV_ID_RESP_V01 0x0023
+#define QMI_DMS_GET_MSISDN_REQ_V01 0x0024
+#define QMI_DMS_GET_MSISDN_RESP_V01 0x0024
+#define QMI_DMS_GET_DEVICE_SERIAL_NUMBERS_REQ_V01 0x0025
+#define QMI_DMS_GET_DEVICE_SERIAL_NUMBERS_RESP_V01 0x0025
+#define QMI_DMS_GET_POWER_STATE_REQ_V01 0x0026
+#define QMI_DMS_GET_POWER_STATE_RESP_V01 0x0026
+#define QMI_DMS_UIM_SET_PIN_PROTECTION_REQ_V01 0x0027
+#define QMI_DMS_UIM_SET_PIN_PROTECTION_RESP_V01 0x0027
+#define QMI_DMS_UIM_VERIFY_PIN_REQ_V01 0x0028
+#define QMI_DMS_UIM_VERIFY_PIN_RESP_V01 0x0028
+#define QMI_DMS_UIM_UNBLOCK_PIN_REQ_V01 0x0029
+#define QMI_DMS_UIM_UNBLOCK_PIN_RESP_V01 0x0029
+#define QMI_DMS_UIM_CHANGE_PIN_REQ_V01 0x002A
+#define QMI_DMS_UIM_CHANGE_PIN_RESP_V01 0x002A
+#define QMI_DMS_UIM_GET_PIN_STATUS_REQ_V01 0x002B
+#define QMI_DMS_UIM_GET_PIN_STATUS_RESP_V01 0x002B
+#define QMI_DMS_GET_DEVICE_HARDWARE_REV_REQ_V01 0x002C
+#define QMI_DMS_GET_DEVICE_HARDWARE_REV_RESP_V01 0x002C
+#define QMI_DMS_GET_OPERATING_MODE_REQ_V01 0x002D
+#define QMI_DMS_GET_OPERATING_MODE_RESP_V01 0x002D
+#define QMI_DMS_SET_OPERATING_MODE_REQ_V01 0x002E
+#define QMI_DMS_SET_OPERATING_MODE_RESP_V01 0x002E
+#define QMI_DMS_GET_TIME_REQ_V01 0x002F
+#define QMI_DMS_GET_TIME_RESP_V01 0x002F
+#define QMI_DMS_GET_PRL_VER_REQ_V01 0x0030
+#define QMI_DMS_GET_PRL_VER_RESP_V01 0x0030
+#define QMI_DMS_GET_ACTIVATION_STATE_REQ_V01 0x0031
+#define QMI_DMS_GET_ACTIVATION_STATE_RESP_V01 0x0031
+#define QMI_DMS_ACTIVATE_AUTOMATIC_REQ_V01 0x0032
+#define QMI_DMS_ACTIVATE_AUTOMATIC_RESP_V01 0x0032
+#define QMI_DMS_ACTIVATE_MANUAL_REQ_V01 0x0033
+#define QMI_DMS_ACTIVATE_MANUAL_RESP_V01 0x0033
+#define QMI_DMS_GET_USER_LOCK_STATE_REQ_V01 0x0034
+#define QMI_DMS_GET_USER_LOCK_STATE_RESP_V01 0x0034
+#define QMI_DMS_SET_USER_LOCK_STATE_REQ_V01 0x0035
+#define QMI_DMS_SET_USER_LOCK_STATE_RESP_V01 0x0035
+#define QMI_DMS_SET_USER_LOCK_CODE_REQ_V01 0x0036
+#define QMI_DMS_SET_USER_LOCK_CODE_RESP_V01 0x0036
+#define QMI_DMS_READ_USER_DATA_REQ_V01 0x0037
+#define QMI_DMS_READ_USER_DATA_RESP_V01 0x0037
+#define QMI_DMS_WRITE_USER_DATA_REQ_V01 0x0038
+#define QMI_DMS_WRITE_USER_DATA_RESP_V01 0x0038
+#define QMI_DMS_READ_ERI_FILE_REQ_V01 0x0039
+#define QMI_DMS_READ_ERI_FILE_RESP_V01 0x0039
+#define QMI_DMS_RESTORE_FACTORY_DEFAULTS_REQ_V01 0x003A
+#define QMI_DMS_RESTORE_FACTORY_DEFAULTS_RESP_V01 0x003A
+#define QMI_DMS_VALIDATE_SERVICE_PROGRAMMING_CODE_REQ_V01 0x003B
+#define QMI_DMS_VALIDATE_SERVICE_PROGRAMMING_CODE_RESP_V01 0x003B
+#define QMI_DMS_UIM_GET_ICCID_REQ_V01 0x003C
+#define QMI_DMS_UIM_GET_ICCID_RESP_V01 0x003C
+#define QMI_DMS_UIM_GET_CK_STATUS_REQ_V01 0x0040
+#define QMI_DMS_UIM_GET_CK_STATUS_RESP_V01 0x0040
+#define QMI_DMS_UIM_SET_CK_PROTECTION_REQ_V01 0x0041
+#define QMI_DMS_UIM_SET_CK_PROTECTION_RESP_V01 0x0041
+#define QMI_DMS_UIM_UNBLOCK_CK_REQ_V01 0x0042
+#define QMI_DMS_UIM_UNBLOCK_CK_RESP_V01 0x0042
+#define QMI_DMS_UIM_GET_IMSI_REQ_V01 0x0043
+#define QMI_DMS_UIM_GET_IMSI_RESP_V01 0x0043
+#define QMI_DMS_UIM_GET_STATE_REQ_V01 0x0044
+#define QMI_DMS_UIM_GET_STATE_RESP_V01 0x0044
+#define QMI_DMS_GET_BAND_CAPABILITY_REQ_V01 0x0045
+#define QMI_DMS_GET_BAND_CAPABILITY_RESP_V01 0x0045
+#define QMI_DMS_GET_FACTORY_SKU_REQ_V01 0x0046
+#define QMI_DMS_GET_FACTORY_SKU_RESP_V01 0x0046
+#define QMI_DMS_SET_TIME_REQ_V01 0x004B
+#define QMI_DMS_SET_TIME_RESP_V01 0x004B
+#define QMI_DMS_GET_ALT_NET_CONFIG_REQ_V01 0x004D
+#define QMI_DMS_GET_ALT_NET_CONFIG_RESP_V01 0x004D
+#define QMI_DMS_SET_ALT_NET_CONFIG_REQ_V01 0x004E
+#define QMI_DMS_SET_ALT_NET_CONFIG_RESP_V01 0x004E
+#define QMI_DMS_GET_SW_VERSION_REQ_V01 0x0051
+#define QMI_DMS_GET_SW_VERSION_RESP_V01 0x0051
+#define QMI_DMS_SET_SPC_REQ_V01 0x0052
+#define QMI_DMS_SET_SPC_RESP_V01 0x0052
+#define QMI_DMS_GET_CURRENT_PRL_INFO_REQ_V01 0x0053
+#define QMI_DMS_GET_CURRENT_PRL_INFO_RESP_V01 0x0053
+#define QMI_DMS_BIND_SUBSCRIPTION_REQ_V01 0x0054
+#define QMI_DMS_BIND_SUBSCRIPTION_RESP_V01 0x0054
+#define QMI_DMS_GET_BIND_SUBSCRIPTION_REQ_V01 0x0055
+#define QMI_DMS_GET_BIND_SUBSCRIPTION_RESP_V01 0x0055
+#define QMI_DMS_SET_AP_SW_VERSION_REQ_V01 0x0056
+#define QMI_DMS_SET_AP_SW_VERSION_RESP_V01 0x0056
+#define QMI_DMS_GET_CDMA_LOCK_MODE_REQ_V01 0x0057
+#define QMI_DMS_GET_CDMA_LOCK_MODE_RESP_V01 0x0057
+#define QMI_DMS_SET_TEST_CONFIG_REQ_V01 0x0058
+#define QMI_DMS_SET_TEST_CONFIG_RESP_V01 0x0058
+#define QMI_DMS_GET_TEST_CONFIG_REQ_V01 0x0059
+#define QMI_DMS_GET_TEST_CONFIG_RESP_V01 0x0059
+#define QMI_DMS_CLEAR_TEST_CONFIG_REQ_V01 0x005A
+#define QMI_DMS_CLEAR_TEST_CONFIG_RESP_V01 0x005A
+/**
+    @}
+  */
+
+/* Service Object Accessor */
+/** @addtogroup wms_qmi_accessor
+    @{
+  */
+/** This function is used internally by the autogenerated code.  Clients should use the
+   macro dms_get_service_object_v01( ) that takes in no arguments. */
+qmi_idl_service_object_type dms_get_service_object_internal_v01
+ ( int32_t idl_maj_version, int32_t idl_min_version, int32_t library_version );
+
+/** This macro should be used to get the service object */
+#define dms_get_service_object_v01( ) \
+          dms_get_service_object_internal_v01( \
+            DMS_V01_IDL_MAJOR_VERS, DMS_V01_IDL_MINOR_VERS, \
+            DMS_V01_IDL_TOOL_VERS )
+/**
+    @}
+  */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
diff --git a/wcnss-service/wcnss_service.c b/wcnss-service/wcnss_service.c
index c817be1..70f9970 100644
--- a/wcnss-service/wcnss_service.c
+++ b/wcnss-service/wcnss_service.c
@@ -37,13 +37,19 @@
 #include <utime.h>
 #include <sys/stat.h>
 #include <sys/sendfile.h>
+#include <unistd.h>
 #define LOG_TAG "wcnss_service"
 #include <cutils/log.h>
 #include <cutils/properties.h>
 #ifdef WCNSS_QMI
 #include "wcnss_qmi_client.h"
+#ifdef MDM_DETECT
 #include "mdm_detect.h"
 #endif
+#endif
+#ifdef WCNSS_QMI_OSS
+#include <dlfcn.h>
+#endif
 
 #define SUCCESS 0
 #define FAILED -1
@@ -72,7 +78,6 @@
 #define WLAN_INI_FILE_SOURCE "/vendor/etc/wifi/WCNSS_qcom_cfg.ini"
 #define WCNSS_HAS_CAL_DATA\
 		"/sys/module/wcnsscore/parameters/has_calibrated_data"
-#define WLAN_DRIVER_ATH_DEFAULT_VAL "0"
 
 #define ASCII_A		65
 #define ASCII_a		97
@@ -80,7 +85,7 @@
 #define HEXA_A		10
 #define HEX_BASE		16
 
-#ifdef WCNSS_QMI
+#if defined (WCNSS_QMI) || defined(WCNSS_QMI_OSS)
 #define WLAN_ADDR_SIZE   6
 unsigned char wlan_nv_mac_addr[WLAN_ADDR_SIZE];
 #define MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
@@ -389,17 +394,15 @@
 }
 
 
-#ifdef WCNSS_QMI
+#if defined(WCNSS_QMI) || defined(WCNSS_QMI_OSS)
 void setup_wcnss_parameters(int *cal, int nv_mac_addr)
 #else
 void setup_wcnss_parameters(int *cal)
 #endif
 {
 	char msg[WCNSS_MAX_CMD_LEN];
-	char serial[PROPERTY_VALUE_MAX];
 	int fd, rc, pos = 0;
 	struct stat st;
-	unsigned int serial_num = 0;
 
 	fd = open(WCNSS_CTRL, O_WRONLY);
 	if (fd < 0) {
@@ -407,26 +410,7 @@
 		return;
 	}
 
-	rc = property_get("ro.serialno", serial, "");
-	if (rc) {
-		serial_num = convert_string_to_hex(serial);
-		ALOGE("Serial Number is  %x", serial_num);
-
-		msg[pos++] = WCNSS_USR_SERIAL_NUM >> BYTE_1;
-		msg[pos++] = WCNSS_USR_SERIAL_NUM >> BYTE_0;
-		msg[pos++] = serial_num >> BYTE_3;
-		msg[pos++] = serial_num >> BYTE_2;
-		msg[pos++] = serial_num >> BYTE_1;
-		msg[pos++] = serial_num >> BYTE_0;
-
-		if (write(fd, msg, pos) < 0) {
-			ALOGE("Failed to write to %s : %s", WCNSS_CTRL,
-					strerror(errno));
-			goto fail;
-		}
-	}
-
-#ifdef WCNSS_QMI
+#if defined(WCNSS_QMI) || defined (WCNSS_QMI_OSS)
 	if (SUCCESS == nv_mac_addr)
 	{
 		pos = 0;
@@ -493,12 +477,7 @@
 	return;
 }
 
-void setup_wlan_driver_ath_prop()
-{
-	property_set("vendor.wlan.driver.ath", WLAN_DRIVER_ATH_DEFAULT_VAL);
-}
-
-#ifdef WCNSS_QMI
+#ifdef MDM_DETECT
 int check_modem_compatability(struct dev_info *mdm_detect_info)
 {
 	char args[MODEM_BASEBAND_PROPERTY_SIZE] = {0};
@@ -720,20 +699,99 @@
 
 }
 
+#ifdef WCNSS_QMI_OSS
+static void *wcnss_qmi_handle = NULL;
+static int (*wcnss_init_qmi)(void) = NULL;
+static int (*wcnss_qmi_get_wlan_address)(unsigned char *) = NULL;
+static void (*wcnss_qmi_deinit)(void) = NULL;
+
+static int setup_wcnss_qmi(void)
+{
+	const char *error = NULL;
+
+	/* initialize the DMS client and request the wlan mac address */
+	wcnss_qmi_handle = dlopen("libwcnss_qmi.so", RTLD_NOW);
+	if (!wcnss_qmi_handle) {
+		ALOGE("Failed to open libwcnss_qmi.so: %s", dlerror());
+		goto dlopen_err;
+	}
+
+	dlerror();
+
+	wcnss_init_qmi = dlsym(wcnss_qmi_handle, "wcnss_init_qmi");
+	if ((error = dlerror()) != NULL) {
+		ALOGE("Failed to resolve function: %s: %s",
+				"wcnss_init_qmi", error);
+		goto dlsym_err;
+	}
+
+	dlerror();
+
+	wcnss_qmi_get_wlan_address = dlsym(wcnss_qmi_handle,
+			"wcnss_qmi_get_wlan_address");
+	if ((error = dlerror()) != NULL) {
+		ALOGE("Failed to resolve function: %s: %s",
+				"wcnss_qmi_get_wlan_address", error);
+		goto dlsym_err;
+	}
+
+	dlerror();
+
+	wcnss_qmi_deinit = dlsym(wcnss_qmi_handle, "wcnss_qmi_deinit");
+	if ((error = dlerror()) != NULL) {
+		ALOGE("Failed to resolve function: %s: %s",
+				"wcnss_qmi_deinit", error);
+		goto dlsym_err;
+	}
+
+	return SUCCESS;
+
+dlsym_err:
+	dlclose(wcnss_qmi_handle);
+dlopen_err:
+	return FAILED;
+}
+#endif
+
 int main(int argc, char *argv[])
 {
 	UNUSED(argc), UNUSED(argv);
 	int rc;
 	int fd_dev, ret_cal;
-#ifdef WCNSS_QMI
+#if defined(WCNSS_QMI) || defined(WCNSS_QMI_OSS)
 	int nv_mac_addr = FAILED;
+#ifdef MDM_DETECT
 	struct dev_info mdm_detect_info;
 	int nom = 0;
 #endif
+#endif
 
 	setup_wlan_config_file();
 
+#ifdef WCNSS_QMI_OSS
+	/* dlopen WCNSS QMI lib */
+
+	rc = setup_wcnss_qmi();
+	if (rc == SUCCESS) {
+		if (SUCCESS == (*wcnss_init_qmi)()) {
+			rc = (*wcnss_qmi_get_wlan_address)(wlan_nv_mac_addr);
+			if (rc == SUCCESS) {
+				nv_mac_addr = SUCCESS;
+				ALOGE("WLAN MAC Addr:" MAC_ADDRESS_STR,
+						MAC_ADDR_ARRAY(wlan_nv_mac_addr));
+			} else
+				ALOGE("Failed to Get MAC addr from modem");
+
+			(*wcnss_qmi_deinit)();
+		}
+		else
+			ALOGE("Failed to Initialize wcnss QMI Interface");
+	} else {
+		ALOGE("Failed to Initialize wcnss QMI interface library");
+	}
+#endif
 #ifdef WCNSS_QMI
+#ifdef MDM_DETECT
 	/* Call ESOC API to get the number of modems.
 	   If the number of modems is not zero, only then proceed
 	   with the eap_proxy intialization.*/
@@ -755,6 +813,7 @@
 		ALOGE("wcnss_service: Target does not have external modem");
 		goto nomodem;
 	}
+#endif
 
 	/* initialize the DMS client and request the wlan mac address */
 
@@ -779,7 +838,7 @@
 
 	dynamic_nv_replace();
 
-#ifdef WCNSS_QMI
+#if defined(WCNSS_QMI) || defined(WCNSS_QMI_OSS)
 	setup_wcnss_parameters(&ret_cal, nv_mac_addr);
 #else
 	setup_wcnss_parameters(&ret_cal);
@@ -800,8 +859,6 @@
 			ALOGE("Cal data is successfully written to WCNSS");
 	}
 
-	setup_wlan_driver_ath_prop();
-
 	rc = wcnss_read_and_store_cal_data(fd_dev);
 	if (rc != SUCCESS)
 		ALOGE("Failed to read and save cal data %d", rc);
@@ -811,5 +868,9 @@
 
 	close(fd_dev);
 
+#ifdef WCNSS_QMI_OSS
+	dlclose(wcnss_qmi_handle);
+#endif
+
 	return rc;
 }
