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.bp b/Android.bp
new file mode 100644
index 0000000..9515b25
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,2 @@
+soong_namespace {
+}
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/cld80211-lib/Android.bp b/cld80211-lib/Android.bp
new file mode 100644
index 0000000..8879830
--- /dev/null
+++ b/cld80211-lib/Android.bp
@@ -0,0 +1,19 @@
+cc_library_headers {
+    name: "libcld80211_headers",
+    vendor: true,
+    export_include_dirs: ["."],
+}
+
+cc_library_shared {
+    name: "libcld80211",
+    vendor: true,
+
+    header_libs: ["libcld80211_headers"],
+    shared_libs: ["libcutils", "libnl", "liblog"],
+    cflags: [
+        "-Wall",
+        "-Werror",
+        "-Wno-unused-parameter",
+    ],
+    srcs: ["cld80211_lib.c"],
+}
diff --git a/cld80211-lib/Android.mk b/cld80211-lib/Android.mk
deleted file mode 100644
index 404c116..0000000
--- a/cld80211-lib/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-# =================================
-# copy header
-# =================================
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libcld80211_headers
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
-LOCAL_VENDOR_MODULE := true
-include $(BUILD_HEADER_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libcld80211
-LOCAL_CLANG := true
-LOCAL_MODULE_TAGS := optional
-LOCAL_C_INCLUDES += $(LOCAL_PATH) \
-	external/libnl/include
-LOCAL_SHARED_LIBRARIES := libcutils libnl liblog
-LOCAL_SRC_FILES := cld80211_lib.c
-LOCAL_CFLAGS += -Wall -Werror -Wno-unused-parameter
-LOCAL_HEADER_LIBRARIES := libcld80211_headers
-LOCAL_VENDOR_MODULE := true
-include $(BUILD_SHARED_LIBRARY)
-
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..9e1a6a0 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_VOICE) ? 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 b628abb..397f0c7 100644
--- a/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c
+++ b/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c
@@ -2821,7 +2821,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);
@@ -5673,7 +5673,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;
 }
