blob: ca0bd6eb71c79c4c453928184489c8eb784f3be1 [file] [log] [blame]
/*-----------------------------------------------------------------------------------------------*/
/**
@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 == MBTK_RADIO_STATE_FULL_FUNC)
{
ql_info = QL_DM_AIR_PLANE_MODE_OFF;
}
if(mbtk_info == MBTK_RADIO_STATE_DIS_RF)
{
ql_info = QL_DM_AIR_PLANE_MODE_ON;
}
if(mbtk_info != MBTK_RADIO_STATE_FULL_FUNC && mbtk_info !=MBTK_RADIO_STATE_DIS_RF)
{
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
{
ql_info_handle = NULL;
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)
{
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 == 0 )
{
*modem_state = QL_DM_MODEM_STATE_OFFLINE;
}
else if(tmp_rf == 1)
{
*modem_state = QL_DM_MODEM_STATE_ONLINE;
}
else
{
*modem_state = QL_DM_MODEM_STATE_UNKNOWN;
}
return QL_ERR_OK;
}
/*-----------------------------------------------------------------------------------------------*/
/**
@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
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 == MBTK_RADIO_STATE_FULL_FUNC )
{
*p_info = QL_DM_AIR_PLANE_MODE_OFF;
}
else if(tmp_rf == MBTK_RADIO_STATE_DIS_RF || tmp_rf == MBTK_RADIO_STATE_MINI_FUNC)
{
*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 = MBTK_RADIO_STATE_DIS_RF;
}
if(air_plane_mode == QL_DM_AIR_PLANE_MODE_OFF)
{
rf_mode = LYNQ_AIR_PLANE_MODE_OFF;
}
if (rf_mode != MBTK_RADIO_STATE_DIS_RF && rf_mode != MBTK_RADIO_STATE_FULL_FUNC)
{
LOGE("Input mode is error!");
return QL_ERR_OP_UNSUPPORTED;
}
ret = mbtk_radio_state_set(ql_info_handle, rf_mode, 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