Add basic change for v1453
Change-Id: I9497a61bbc3717f66413794a4e7dee0347c0bc33
diff --git a/mbtk/libql_lib_v2_rilv2/ql_dm.c b/mbtk/libql_lib_v2_rilv2/ql_dm.c
new file mode 100755
index 0000000..867c4fd
--- /dev/null
+++ b/mbtk/libql_lib_v2_rilv2/ql_dm.c
@@ -0,0 +1,882 @@
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @file ql_dm.h
+ @brief device management API
+*/
+/*-----------------------------------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------------------------------
+ Copyright (c) 2019 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
+ Quectel Wireless Solution Proprietary and Confidential.
+-------------------------------------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------------------------------
+ EDIT HISTORY
+ This section contains comments describing changes made to the file.
+ Notice that changes are listed in reverse chronological order.
+ $Header: $
+ when who what, where, why
+ -------- --- ----------------------------------------------------------
+ 20200316 stan.li Optimize the ql_dm_get_modem_state interface
+ 20191224 stan.li Add radio on/off API
+ 20190625 stan.li Created .
+-------------------------------------------------------------------------------------------------*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <stdio.h>
+#include <stdbool.h>
+#include <pthread.h>
+
+#include "mbtk_ril_api.h"
+#include "ql_type.h"
+#include "ql_dm.h"
+
+
+
+#define LYNQ_AIR_PLANE_MODE_ON 4 //at+cfun = 4
+#define LYNQ_AIR_PLANE_MODE_OFF 1 // at+cfun = 1
+
+
+#define MBTK_RILD_ERR -1
+#define IMEI_VALID 1
+
+static mbtk_ril_handle* ql_info_handle = NULL;
+static mbtk_ril_handle* g_md_version_handle = NULL;
+
+static ql_dm_air_plane_mode_ind_cb g_air_plane_mode_cb = NULL;
+static ql_dm_service_error_cb_f global_dm_error_cb = NULL;
+static ql_dm_modem_state_ind_cb global_dm_modem_cb = NULL;
+
+
+static pthread_t g_air_plane_mode_thread;
+static pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER;
+static bool g_thread_running = false;
+
+
+static void mbtk_send_singnal()
+{
+ pthread_mutex_lock(&g_mutex);
+ pthread_cond_signal(&g_cond);
+ pthread_mutex_unlock(&g_mutex);
+
+}
+
+static void mbtk_dm_set_service_error_func(const void* data,int data_len)
+{
+ if(data !=NULL && data_len == sizeof(int))
+ {
+ const int *state = (const int*)(data);
+ if(*state)
+ {
+ if(global_dm_error_cb)
+ {
+ global_dm_error_cb(MBTK_RILD_ERR);
+ }
+
+ }
+ }
+
+}
+
+static void mbtk_modem_state_change_cb(const void* data, int data_len)
+{
+ uint8 *ptr = (uint8*)data;
+ if(global_dm_modem_cb)
+ {
+ global_dm_modem_cb(*ptr);
+ }
+
+}
+
+void* air_plane_mode_monitor(void* arg)
+{
+ int ql_info = 0;
+ int ret = -1;
+ mbtk_radio_state_enum mbtk_info;
+
+ while (g_thread_running)
+ {
+ pthread_mutex_lock(&g_mutex);
+ pthread_cond_wait(&g_cond, &g_mutex);
+ ret = mbtk_radio_state_get(ql_info_handle, &mbtk_info);
+ if (ret != 0)
+ {
+ LOGE("mbtk_radio_state_get fail.");
+ return NULL;
+ }
+
+ if(mbtk_info == LYNQ_AIR_PLANE_MODE_OFF)
+ {
+ ql_info = QL_DM_AIR_PLANE_MODE_OFF;
+ }
+
+ if(mbtk_info == LYNQ_AIR_PLANE_MODE_ON)
+ {
+ ql_info = QL_DM_AIR_PLANE_MODE_ON;
+ }
+
+ if(mbtk_info != LYNQ_AIR_PLANE_MODE_OFF && mbtk_info !=LYNQ_AIR_PLANE_MODE_ON)
+ {
+
+ ql_info = QL_DM_AIR_PLANE_MODE_UNKNOWN;
+ }
+
+ if(g_air_plane_mode_cb)
+ {
+
+ g_air_plane_mode_cb(ql_info);
+ }
+
+ pthread_mutex_unlock(&g_mutex);
+ }
+
+ return NULL;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief Initialize DM service.
+ @note You must call this function before other functions can be used in this module.
+ @return Whether the DM service was successfully intialized.
+ @retval QL_ERR_OK successful.
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
+ @retval Other error code defined by ql_type.h.
+ */
+/*-----------------------------------------------------------------------------------------------*/
+
+int ql_dm_init(void)
+{
+
+ if(ql_info_handle == NULL)
+ {
+
+ mbtk_log_init("syslog", "QL_DM");
+
+ ql_info_handle = mbtk_ril_open(MBTK_AT_PORT_DEF);
+ if(ql_info_handle)
+ {
+
+ return QL_ERR_OK;
+ }
+ else
+ {
+ LOGE("mbtk_info_handle_get() fail.");
+ return QL_ERR_FAILED;
+ }
+
+ }
+ else
+ {
+ LOGE("No need init again");
+ return QL_ERR_FAILED;
+ }
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief Denitialize DM service.
+ @return Whether the DM service was successfully deintialized.
+ @retval QL_ERR_OK successful.
+ @retval Other error code defined by ql_type.h.
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_deinit(void)
+{
+ if(ql_info_handle)
+ {
+
+ int ret = mbtk_ril_close(MBTK_AT_PORT_DEF);
+ if(ret != 0)
+ {
+ LOGE("mbtk_info_handle_free fail.");
+ return QL_ERR_FAILED;
+ }
+ else
+ {
+ LOGI("mbtk_info_handle_free success");
+ return QL_ERR_OK;
+ }
+ }
+ else
+ {
+ LOGE("DM not inited.");
+ return QL_ERR_NOT_INIT;
+ }
+
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get device software version.
+ @param[out] soft_ver Return software version
+ @param[in] soft_ver_len The length of soft_ver
+ @return Whether to successfully get the software version
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+
+int ql_dm_get_software_version(char *soft_ver, int soft_ver_len)
+{
+
+ int ret = -1;
+ if(soft_ver == NULL || soft_ver_len <= 0)
+ {
+ LOGE("Bad parameters ");
+ return QL_ERR_FAILED;
+ }
+ if(ql_info_handle != NULL)
+ {
+
+ ret = mbtk_version_get(ql_info_handle,soft_ver);
+ if(ret != 0)
+ {
+ LOGE("ql_dm_get_software_version error.");
+ return QL_ERR_FAILED;
+ }
+ }
+ else
+ {
+ mbtk_ril_handle* mbtk_info_handle = NULL;
+ mbtk_info_handle = mbtk_ril_open(MBTK_AT_PORT_DEF);
+ if(mbtk_info_handle == NULL)
+ {
+ LOGE("mbtk_info_handle_get fail.");
+ return QL_ERR_FAILED;
+ }
+ ret = mbtk_version_get(mbtk_info_handle,soft_ver);
+ if(ret != 0)
+ {
+ LOGE("ql_dm_get_software_version error.");
+
+ }
+ ret = mbtk_ril_close(MBTK_AT_PORT_DEF);
+ if(ret != 0)
+ {
+ LOGE("mbtk_info_handle_free fail.");
+ return QL_ERR_FAILED;
+ }
+
+ }
+ return QL_ERR_OK;
+
+
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get modem state.
+ @details QL_DM_MODEM_STATE_ONLINE,if modem starts normally.
+ @details QL_DM_MODEM_STATE_OFFLINE,in modem starts abnormally.
+ @details QL_DM_MODEM_STATE_UNKNOWN,unknown error.
+ @param[out] modem_state The state of modem
+ @return Whether to successfully get the modem state
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_modem_state(QL_DM_MODEM_STATE_TYPE_E *modem_state);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief register modem state event.
+ @param[in] cb_func modem state indication callback function
+ @return Whether the modem state event was successfully registered.
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+
+int ql_dm_set_modem_state_change_ind_cb(ql_dm_modem_state_ind_cb cb_func)
+{
+
+ int ret =-1;
+
+ global_dm_modem_cb = cb_func;
+
+ if(ql_info_handle != NULL)
+ {
+
+ ret = mbtk_radio_state_change_cb_reg(mbtk_modem_state_change_cb);
+ if(ret != 0)
+ {
+ LOGE("call mbtk_radio_state_change_cb_reg failed");
+ return QL_ERR_FAILED;
+ }
+ }
+ else
+ {
+ if(g_md_version_handle == NULL)
+ {
+ g_md_version_handle = mbtk_ril_open(MBTK_AT_PORT_DEF);
+ if(g_md_version_handle == NULL)
+ {
+ LOGE("g_md_version_handle get fail.");
+ return QL_ERR_FAILED;
+ }
+ }
+
+ ret = mbtk_radio_state_change_cb_reg(mbtk_modem_state_change_cb);
+ if(ret != 0)
+ {
+
+ ret = mbtk_ril_close(MBTK_AT_PORT_DEF);
+ if(ret < 0)
+ {
+ LOGE("mbtk_info_handle_free fail.");
+ return QL_ERR_FAILED;
+ }
+
+ LOGE("call mbtk_radio_state_change_cb_reg failed");
+ return QL_ERR_FAILED;
+ }
+
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get module temperature.
+ @param[out] temperature The current temperature
+ @return Whether to successfully get the temperature
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_temperature(float *temperature);
+
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get device serial numbers.
+ @param[out] p_info Pointer that point to ql_dm_device_serial_numbers_info_t
+ @return Whether to successfully get the serial numbers
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_device_serial_numbers(ql_dm_device_serial_numbers_info_t *p_info)
+{
+ int ret = -1;
+ if(ql_info_handle == NULL )
+ {
+ LOGE("DM no init");
+ return QL_ERR_NOT_INIT;
+ }
+
+ ret = mbtk_imei_get(ql_info_handle, p_info->imei);
+ if(ret != 0)
+ {
+ LOGE("Error : %d\n", ret);
+ return QL_ERR_FAILED;
+ }
+ if(strlen(p_info->imei) > 0)
+ {
+ p_info->imei_valid = IMEI_VALID;
+ }
+
+
+ return QL_ERR_OK;
+
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get device firmware revision identification.
+ @param[out] firmware_rev_id Return device firmware revision id
+ @param[in] firmware_rev_id_len The length of firmware_rev_id
+ @return Whether to successfully get the firmware revision id
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_device_firmware_rev_id(char *firmware_rev_id, int firmware_rev_id_len)
+{
+ int ret = -1;
+
+ if(ql_info_handle == NULL)
+ {
+ LOGE("DM no init");
+ return QL_ERR_NOT_INIT;
+ }
+
+ //ret = mbtk_get_modem_version(ql_info_handle, (void *)firmware_rev_id);
+ //mbtk_v2 do not have function
+ ret = -1;
+ if(ret < 0)
+ {
+ LOGE("get modem version failed");
+ return QL_ERR_FAILED;
+ }
+ return 0;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get air plane mode.
+ @param[out] p_info Pointer that point to QL_DM_AIR_PLANE_MODE_TYPE_E
+ @return Whether to successfully get the air plane mode
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_air_plane_mode(QL_DM_AIR_PLANE_MODE_TYPE_E *p_info)
+{
+
+ int ret = -1;
+ mbtk_radio_state_enum tmp_rf;
+ if(ql_info_handle == NULL)
+ {
+ LOGE("DM no init");
+ return QL_ERR_NOT_INIT;
+ }
+ ret = mbtk_radio_state_get(ql_info_handle, &tmp_rf);
+ if (ret != 0)
+ {
+ LOGE("mbtk_radio_state_get fail.");
+ return QL_ERR_FAILED;
+ }
+ if(tmp_rf == LYNQ_AIR_PLANE_MODE_OFF)
+ {
+ *p_info = QL_DM_AIR_PLANE_MODE_OFF;
+ }
+ else if(tmp_rf == LYNQ_AIR_PLANE_MODE_ON)
+ {
+ *p_info = QL_DM_AIR_PLANE_MODE_ON;
+ }
+
+ return 0;
+
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief set air plane mode.
+ @param[in] air_plane_mode 1:ON, 2:OFF
+ @return Whether to successfully set the air plane mode
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+
+
+int ql_dm_set_air_plane_mode(QL_DM_AIR_PLANE_MODE_TYPE_E air_plane_mode)
+{
+ mbtk_radio_state_enum radio = MBTK_RADIO_STATE_MINI_FUNC;
+ int reset = 0;
+ int rf_mode = -1;
+ int ret = -1;
+
+ if(ql_info_handle == NULL)
+ {
+ LOGE("DM no init");
+ return QL_ERR_NOT_INIT;
+ }
+ if(air_plane_mode == QL_DM_AIR_PLANE_MODE_ON)
+ {
+ rf_mode = LYNQ_AIR_PLANE_MODE_ON;
+ }
+
+ if(air_plane_mode == QL_DM_AIR_PLANE_MODE_OFF)
+ {
+ rf_mode = LYNQ_AIR_PLANE_MODE_OFF;
+
+ }
+
+ if (rf_mode != LYNQ_AIR_PLANE_MODE_ON && rf_mode != LYNQ_AIR_PLANE_MODE_OFF)
+ {
+ LOGE("Input mode is error!");
+ return QL_ERR_OP_UNSUPPORTED;
+ }
+
+
+ ret = mbtk_radio_state_set(ql_info_handle, radio, reset);
+ if(ret != 0)
+ {
+ LOGE("ql_dm_set_air_plane_mode failed");
+ }
+ mbtk_send_singnal();
+ return QL_ERR_OK;
+
+
+}
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief register air plane mode event.
+ @param[in] cb_func Air plane mode indication callback function
+ @return Whether the air plane mode event was successfully registered.
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+
+int ql_dm_set_air_plane_mode_ind_cb(ql_dm_air_plane_mode_ind_cb cb_func)
+{
+ if(ql_info_handle == NULL)
+ {
+ LOGE("No init ");
+ return QL_ERR_NOT_INIT;
+ }
+
+ g_air_plane_mode_cb = cb_func;
+
+ if (!g_thread_running)
+ {
+ g_thread_running = true;
+ if (pthread_create(&g_air_plane_mode_thread, NULL, air_plane_mode_monitor, NULL) != 0)
+ {
+ LOGE("Failed to create air plane mode monitor thread");
+ g_thread_running = false;
+ return QL_ERR_FAILED;
+ }
+ }
+
+ return QL_ERR_OK;
+}
+
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get cpu occupancy.
+ @param[out] cpu_occupancy The percentage of cpu occupancy
+ @return Whether to successfully get the cpu occupancy
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_cpu_occupancy(float *cpu_occupancy);
+
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get mem usage.
+ @param[out] mem_use The percentage of mem usage
+ @return Whether to successfully get the memory usage
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_mem_usage(float *mem_use);
+
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get NV item value.
+ @param[in] nv_item_name The NV item name that is either NV item id or NV item path
+ @param[out] nv_item_value The NV value buf of nv_item_name
+ param[in] nv_item_value_len The length of nv_item_value
+ param[out] nv_len The real length of nv_item_name
+ @return Whether to successfully get the NV value
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_nv_item_value(char *nv_item_name, unsigned char *nv_item_value, int nv_item_value_len,
+ int *nv_len);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief set NV item value.
+ @param[in] nv_item_name The NV item name that is either NV item id or NV item path
+ @param[in] nv_item_value The NV value of nv_item_name
+ @param[in] nv_item_value_len The length of nv_item_value
+ param[out] nv_len The real length of nv_item_name
+ @return Whether to successfully set the NV value
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_set_nv_item_value(char *nv_item_name, unsigned char *nv_item_value, int nv_item_value_len,
+ int *nv_len);
+
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief set radio on, its function is the same as at+cfun=1.
+ @return Whether to successfully set the radio on
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_set_radio_on(void);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief set radio off, its function is the same as at+cfun=0.
+ @return Whether to successfully set the radio off
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_set_radio_off(void);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get modem mem and CPU utilization.
+ @param[out] mem_use The percentage of modem utilization
+ @return Whether to successfully get the modem utilization
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_modem_cpu_occupancy(float *cpu_occupancy);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get modem mem utilization.
+ @param[out] mem_use The percentage of modem utilization
+ @return Whether to successfully get the modem utilization
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_modem_mem_usage(float *mem_use);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get QOOS enable state
+ @param[out] enable The enable state of QOOS
+ @return Whether to successfully get the QOOS enable state
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_qoos_enable(char *enable);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief set QOOS enable state
+ @param[in] enable The enable state of QOOS
+ @return Whether to successfully set the QOOS enable state
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_set_qoos_enable(char enable);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get QOOS configuration
+ @param[out] config The configuration of QOOS
+ @return Whether to successfully get the QOOS configuration
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+//int ql_dm_get_qoos_config(ql_dm_qoos_config_t *config);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief set QOOS configuration
+ @param[in] config The configuration of QOOS
+ @return Whether to successfully set the QOOS configuration
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+//int ql_dm_set_qoos_config(ql_dm_qoos_config_t config);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get MSSR(Modem SubSysem Reset) level.
+ @param[out] p_level The MSSR level
+ @return Whether to successfully get the MSSR level
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_mssr_level(int *p_level);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief set MSSR(Modem SubSysem Reset) level.
+ @param[in] level The MSSR level
+ @return Whether to successfully set the MSSR level
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_set_mssr_level(int level);
+
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief bind subscription
+ @param[in] sub_type subscription type
+ @return Whether to successfully bind subscription.
+ @retval QL_ERR_OK successful
+ @retval QL_ERR_NOT_INIT uninitialized
+ @retval QL_ERR_SERVICE_NOT_READY service is not ready
+ @retval QL_ERR_INVALID_ARG Invalid arguments
+ @retval Other error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_bind_subscription(QL_DM_BIND_SUB_TYPE_E sub_type);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief Registration server error callback. Currently, only if the server exits abnormally,
+ the callback function will be executed, and the error code is QL_ERR_ABORTED;
+ @param[in] cb Callback function
+ @return
+ QL_ERR_OK - successful
+ Other - error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_set_service_error_cb(ql_dm_service_error_cb_f cb)
+{
+ int ret = -1;
+ if(ql_info_handle == NULL)
+ {
+ LOGE("DM no init ");
+ return QL_ERR_NOT_INIT;
+
+ }
+ global_dm_error_cb = cb;
+ ret = mbtk_ril_ser_state_change_cb_reg(mbtk_dm_set_service_error_func);
+ if(ret != 0)
+ {
+ LOGE("call mbtk_ril_server_state_change_reg failed");
+ return QL_ERR_FAILED;
+ }
+
+ return QL_ERR_OK;
+}
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief Get module the last time shutdown reason
+ @param[out] shutdown_reason the shutdown reason
+ @return
+ QL_ERR_OK - successful
+ Other - error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_shutdown_reason(QL_DM_SHUTDOWN_REASON_E *shutdown_reason);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief Get module this time bootup reason
+ @param[out] bootup_reason the bootup reason
+ @return
+ QL_ERR_OK - successful
+ Other - error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_bootup_reason(QL_DM_BOOT_UP_REASON_E *bootup_reason);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief set oos config
+ @param[out] oos param
+ @return
+ QL_ERR_OK - successful
+ Other - error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_set_qoos_config(int p1, int p2, int p3);
+
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief get oos config
+ @param[out] oos param
+ @return
+ QL_ERR_OK - successful
+ Other - error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_get_qoos_config(int *p1, int *p2, int *p3);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief set oos enable
+ @param[out] oos param
+ @return
+ QL_ERR_OK - successful
+ Other - error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_dm_set_qoos_enable(char enable);
+#ifdef __cplusplus
+}
+#endif
+
+
+