[Feature]Merge MP1_MR1 from MTK
Change-Id: I3fc364555acf14f1c308b6be7b05f21f92757fd0
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/CMakeLists.txt b/src/telephonyware/3.0/hardware/ril/fusion/libril/CMakeLists.txt
old mode 100644
new mode 100755
index 09c4886..01e30d6
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/CMakeLists.txt
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/CMakeLists.txt
@@ -20,6 +20,7 @@
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/rilmipc/telephony/radio/")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/rilmipc/telephony/sim/")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/rilmipc/telephony/call/")
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}/rilmipc/telephony/ecall/")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/rilmipc/telephony/ss/")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/rilmipc/telephony/sms/")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/rilmipc/telephony/stk/")
@@ -76,6 +77,7 @@
rilmipc/telephony/sim/RpSimController.cpp
rilmipc/telephony/call/GsmUtil.cpp
rilmipc/telephony/call/RpCallController.cpp
+ rilmipc/telephony/ecall/RpEcallController.cpp
rilmipc/telephony/ss/RpSsController.cpp
rilmipc/telephony/ss/RpSsUtils.cpp
rilmipc/telephony/sms/RpSmsController.cpp
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp
old mode 100644
new mode 100755
index d439436..17802d4
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp
@@ -728,11 +728,6 @@
return rild;
}
-extern "C"
-void RIL_setRilSocketName(const char * s) {
- strncpy(rild, s, MAX_SOCKET_NAME_LENGTH);
-}
-
static char *
strdupReadString(Parcel &p) {
size_t stringlen;
@@ -8593,9 +8588,6 @@
status = p.readInt32(&t);
eCallReqMsg.ecall_variant = (RIL_ECall_Variant)t;
- status = p.readInt32(&t);
- eCallReqMsg.ivs_mode = (RIL_ECall_Ivs_Config_Mode)t;
-
eCallReqMsg.address = strdupReadString(p);
//debug
@@ -8620,8 +8612,8 @@
}
startRequest;
- appendPrintBuf("%secall_cat=%d,ecall_variant=%d,ivs_mode=%d,address=%s,length=%d", printBuf,
- eCallReqMsg.ecall_cat, eCallReqMsg.ecall_variant, eCallReqMsg.ivs_mode, (char*)eCallReqMsg.address,\
+ appendPrintBuf("%secall_cat=%d,ecall_variant=%d,address=%s,length=%d", printBuf,
+ eCallReqMsg.ecall_cat, eCallReqMsg.ecall_variant, (char*)eCallReqMsg.address,\
eCallReqMsg.length
);
closeRequest;
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/framework/core/RfxControllerFactory.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/framework/core/RfxControllerFactory.cpp
old mode 100644
new mode 100755
index 9355c16..22b783d
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/framework/core/RfxControllerFactory.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/framework/core/RfxControllerFactory.cpp
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
@@ -56,6 +57,7 @@
#include "RpStkController.h"
#include "RpNwController.h"
#include "RpImsController.h"
+#include "RpEcallController.h"
/*****************************************************************************
* Define
@@ -80,6 +82,7 @@
RFX_CONTROLLER_CREATION_ENTRY(RpStkController),
RFX_CONTROLLER_CREATION_ENTRY(RpNwController),
RFX_CONTROLLER_CREATION_ENTRY(RpImsController),
+ RFX_CONTROLLER_CREATION_ENTRY(RpEcallController),
};
const RfxCreateControllerFuncptr RfxControllerFactory::s_non_slot_controllers[] = {
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RmcDataDefs.h b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RmcDataDefs.h
old mode 100644
new mode 100755
index a0e3e6f..c0477b7
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RmcDataDefs.h
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RmcDataDefs.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
@@ -141,6 +142,8 @@
#define ESM_CAUSE_END ESM_CAUSE_BASE + 0xFF
#define PAM_CAUSE_BASE 0x1200 // PAM cause
#define PAM_CAUSE_END PAM_CAUSE_BASE + 0xC9
+#define FIVESMGSM_CAUSE_BASE 0x1A00 // 5GSM cause
+#define FIVESMGSM_CAUSE_END FIVESMGSM_CAUSE_BASE + 0xFF
#define CME_CAUSE_BASE_V14 0x64 // Defined in 3GPP TS 27.007 V14
#define CME_CAUSE_END_V14 CME_CAUSE_BASE_V14 + 0x64
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.cpp
old mode 100644
new mode 100755
index 0fe027c..edc24af
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.cpp
@@ -214,12 +214,75 @@
}
}
+void mipc_data_get_retry_timer_cb(mipc_sim_ps_id_enum sim_ps_id,
+ mipc_data_get_retry_timer_struct_v *result_ptr, void *cb_priv_ptr) {
+ Get_Retry_timer_call_back_priv* cb_priv = (Get_Retry_timer_call_back_priv*)cb_priv_ptr;
+ Parcel * parcel = NULL;
+ int ret = 0;
+
+ RpDataController * dataController = RpDataController::getInstance(sim_ps_id - 1);
+
+ if (dataController == NULL){
+ RFX_LOG_E(RFX_LOG_TAG, "[%s][%d] sim_ps_id[%d] NULL dataController", __FUNCTION__, __LINE__ ,sim_ps_id);
+ goto error;
+ }
+ if (cb_priv == NULL || cb_priv->response == NULL) {
+ RFX_LOG_E(RFX_LOG_TAG, "[%s][%d] sim_ps_id[%d] NULL cb_priv && response", __FUNCTION__, __LINE__ ,sim_ps_id);
+ goto error;
+ }
+
+ parcel = new Parcel();
+ if (parcel == NULL){
+ RFX_LOG_E(RFX_LOG_TAG, "[%s][%d] sim_ps_id[%d] NULL dataController", __FUNCTION__, __LINE__ ,sim_ps_id);
+ goto error;
+ }
+ if (result_ptr != NULL) {
+ cb_priv->response->suggestedRetryTime = result_ptr->retry_timer;
+ } else {
+ cb_priv->response->suggestedRetryTime = -1;
+ }
+
+ ret = responseDataCallListV11(*parcel, cb_priv->response, sizeof(MTK_RIL_Data_Call_Response_v11));
+ if (ret != 0){
+ RFX_LOG_E(RFX_LOG_TAG, "[%s][%d] sim_ps_id[%d] NULL dataController", __FUNCTION__, __LINE__ ,sim_ps_id);
+ goto error;
+ }
+
+ goto finish;
+
+error:
+ if (parcel != NULL){
+ delete(parcel);
+ parcel = NULL;
+ }
+ RFX_LOG_E(RFX_LOG_TAG, "%s:%d notify failure", __FUNCTION__ , __LINE__);
+finish:
+ RFX_LOG_D(RFX_LOG_TAG, "%s:%d notify response", __FUNCTION__ , __LINE__);
+ if (parcel == NULL)
+ rfx_enqueue_response_message(NULL, cb_priv->token, mipc_sim_id_to_slot_id(sim_ps_id), RIL_E_GENERIC_FAILURE);
+ else
+ rfx_enqueue_response_message(parcel, cb_priv->token, mipc_sim_id_to_slot_id(sim_ps_id), RIL_E_SUCCESS);
+
+ if (cb_priv->response != NULL) {
+ dataController->freeDataResponse(cb_priv->response);
+ FREEIF(cb_priv->response);
+ FREEIF(cb_priv);
+ }
+ RFX_LOG_D(RFX_LOG_TAG, "[%s] finish", __FUNCTION__);
+
+}
+
void mipc_data_call_act_cb(mipc_sim_ps_id_enum sim_ps_id,
mipc_data_call_act_struct *result_ptr, void *cb_priv_ptr) {
MTK_RIL_Data_Call_Response_v11* response = NULL;
Parcel * parcel = NULL;
int ret = 0;
+ mipc_api_result_enum result = MIPC_API_RESULT_SUCCESS;
+ char *apn = NULL;
+ Act_Data_call_back_priv* data_cb_priv = (Act_Data_call_back_priv*)cb_priv_ptr;
+ Get_Retry_timer_call_back_priv* retry_timer_cb_priv = NULL;
+ RIL_DataCallFailCause dataCallFailCause = PDP_FAIL_NONE;
RFX_LOG_D(RFX_LOG_TAG,"%s %d sim_ps_id[%d] result_ptr[%p] cb_priv_ptr[%p]",__FUNCTION__, __LINE__, sim_ps_id, \
result_ptr, cb_priv_ptr);
@@ -250,15 +313,51 @@
if (result_ptr->result_code != MIPC_API_RESULT_SUCCESS) {
RFX_LOG_E(RFX_LOG_TAG, "[%s][%d] sim_ps_id[%d] MIPC_API_RESULT_FAIL", __FUNCTION__, __LINE__ ,sim_ps_id);
- response->status = result_ptr->result_code;
- dataController->setGprsFailureCause((int)result_ptr->result_code);
- goto error;
+ if (result_ptr->apn == NULL || strlen((char*)result_ptr->apn) <= 0) {
+ if (data_cb_priv != NULL) {
+ RFX_LOG_E(RFX_LOG_TAG, "[%s][%d] sim_ps_id[%d] cb apn %s", __FUNCTION__, __LINE__ , sim_ps_id, data_cb_priv->apn);
+ asprintf(&apn, "%s", data_cb_priv->apn);
+ }
+ } else {
+ apn = (char*)result_ptr->apn;
+ }
+ pPdnManager->clearPdnInfo(result_ptr->id);
+ } else {
+ pPdnManager->fillPdnInfoByMipcDataCallAct(result_ptr);
}
- pPdnManager->fillPdnInfoByMipcDataCallAct(result_ptr);
dataController->createDataResponse(dataController->calculateTransIntfId(result_ptr->id, result_ptr->interface_id), IPV4V6, response);
- RFX_LOG_D(RFX_LOG_TAG, "[%d][%s] %s", sim_ps_id, __FUNCTION__, dataController->responsesToString(response, 1).string());
+
+ if (result_ptr->result_code != MIPC_API_RESULT_SUCCESS) {
+ dataCallFailCause = dataController->convertFailCauseToRilStandard((int)result_ptr->result_code);
+ if (dataCallFailCause == PDP_FAIL_NONE) {
+ RFX_LOG_E(RFX_LOG_TAG, "[%d][%s] NO CAUSE(0) but mipc_data_call_act_req failed",
+ sim_ps_id, __FUNCTION__);
+ dataCallFailCause = PDP_FAIL_ERROR_UNSPECIFIED;
+ } else {
+ RFX_LOG_E(RFX_LOG_TAG, "[%d][%s] FAIL CAUSE: %X",
+ sim_ps_id, __FUNCTION__, dataCallFailCause);
+ }
+ response->status = dataCallFailCause;
+ dataController->setGprsFailureCause((int)dataCallFailCause);
+ retry_timer_cb_priv = (Get_Retry_timer_call_back_priv*)calloc(1, sizeof(Get_Retry_timer_call_back_priv));
+ if (retry_timer_cb_priv != NULL) {
+ retry_timer_cb_priv->token = data_cb_priv->token;
+ retry_timer_cb_priv->response = response;
+ RFX_LOG_E(RFX_LOG_TAG, "[%s][%d] sim_ps_id[%d] MIPC_API_RESULT_FAIL [%s]", __FUNCTION__, __LINE__ ,sim_ps_id,(char*)result_ptr->apn);
+ result = mipc_data_get_retry_timer_async(sim_ps_id, mipc_data_get_retry_timer_cb, (void*)retry_timer_cb_priv, apn);
+ if (result != MIPC_API_RESULT_SUCCESS) {
+ RFX_LOG_E(RFX_LOG_TAG, "[%s][%d] sim_ps_id[%d] mipc_data_get_retry_timer_sync fail", __FUNCTION__, __LINE__ ,sim_ps_id);
+ }
+ FREEIF(apn);
+ FREEIF(data_cb_priv);
+ return;
+ } else {
+ RFX_LOG_E(RFX_LOG_TAG, "[%s][%d] sim_ps_id[%d] null calloc",__FUNCTION__,__LINE__, sim_ps_id);
+ }
+ FREEIF(apn);
+ }
parcel = new Parcel();
if (parcel == NULL){
RFX_LOG_E(RFX_LOG_TAG, "[%s][%d] sim_ps_id[%d] NULL dataController", __FUNCTION__, __LINE__ ,sim_ps_id);
@@ -281,14 +380,15 @@
finish:
RFX_LOG_D(RFX_LOG_TAG, "%s:%d notify response", __FUNCTION__ , __LINE__);
if (parcel == NULL)
- rfx_enqueue_response_message(NULL, cb_priv_ptr, mipc_sim_id_to_slot_id(sim_ps_id), RIL_E_GENERIC_FAILURE);
+ rfx_enqueue_response_message(NULL, data_cb_priv->token, mipc_sim_id_to_slot_id(sim_ps_id), RIL_E_GENERIC_FAILURE);
else
- rfx_enqueue_response_message(parcel, cb_priv_ptr, mipc_sim_id_to_slot_id(sim_ps_id), RIL_E_SUCCESS);
+ rfx_enqueue_response_message(parcel, data_cb_priv->token, mipc_sim_id_to_slot_id(sim_ps_id), RIL_E_SUCCESS);
if (response != NULL) {
dataController->freeDataResponse(response);
FREEIF(response);
}
+ FREEIF(data_cb_priv);
RFX_LOG_D(RFX_LOG_TAG, "[%s] finish", __FUNCTION__);
}
@@ -383,6 +483,7 @@
void mipc_data_call_deact_ind_cb(mipc_sim_ps_id_enum sim_ps_id,
mipc_data_call_deact_struct *result_ptr, void *cb_priv_ptr) {
+ PdnInfo pdn_info;
RFX_LOG_D(RFX_LOG_TAG,"%s %d sim_ps_id[%d] result_ptr[%p]",__FUNCTION__, __LINE__, sim_ps_id, result_ptr);
@@ -397,8 +498,18 @@
return;
}
- RFX_LOG_D(RFX_LOG_TAG,"%s %d:sim_ps_id %d result_code %d",__FUNCTION__, __LINE__,
- sim_ps_id,result_ptr->result_code);
+ RmcDcPdnManager* pPdnManager = dataController->m_pPdnManager;
+
+ if (pPdnManager == NULL){
+ RFX_LOG_E(RFX_LOG_TAG, "[%s][%d] sim_ps_id[%d] NULL m_pPdnManager", __FUNCTION__, __LINE__ ,sim_ps_id);
+ return;
+ }
+
+ pdn_info = pPdnManager->getPdnInfo(result_ptr->id);
+ pdn_info.deactReason = dataController->convertFailCauseToRilStandard(result_ptr->network_error);
+ pPdnManager->setPdnInfo(result_ptr->id, &pdn_info);
+ RFX_LOG_D(RFX_LOG_TAG,"%s %d:sim_ps_id %d result_code %d, deactReason %d",__FUNCTION__, __LINE__,
+ sim_ps_id,result_ptr->result_code, pdn_info.deactReason);
dataController->sendDataCallListResponse(result_ptr->id);
}
@@ -830,28 +941,39 @@
s_dataSetting[m_slot_id][DOMESTIC_ROAMING_DATA] == SKIP_DATA_SETTINGS &&
s_dataSetting[m_slot_id][INTERNATIONAL_ROAMING_DATA] == SKIP_DATA_SETTINGS) {
result = mipc_data_set_config_sync(mipc_sim_ps_id_enum(request->getSlotId()), &dataConfigResult, (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][MOBILE_DATA], \
- (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][DOMESTIC_ROAMING_DATA], MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
- MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][INTERNATIONAL_ROAMING_DATA]);
+ MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ (mipc_data_config_type_const_enum)imsTestMode, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE);
} else if (s_dataSetting[m_slot_id][MOBILE_DATA] == SKIP_DATA_SETTINGS &&
s_dataSetting[m_slot_id][DOMESTIC_ROAMING_DATA] != SKIP_DATA_SETTINGS &&
s_dataSetting[m_slot_id][INTERNATIONAL_ROAMING_DATA] == SKIP_DATA_SETTINGS) {
- result = mipc_data_set_config_sync(mipc_sim_ps_id_enum(request->getSlotId()), &dataConfigResult, (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][MOBILE_DATA], \
- (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][DOMESTIC_ROAMING_DATA], MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
- MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][INTERNATIONAL_ROAMING_DATA]);
+ result = mipc_data_set_config_sync(mipc_sim_ps_id_enum(request->getSlotId()), &dataConfigResult, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ MIPC_DATA_CONFIG_TYPE_NO_CHANGE, (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][DOMESTIC_ROAMING_DATA], MIPC_DATA_CONFIG_TYPE_NO_CHANGE);
} else if (s_dataSetting[m_slot_id][MOBILE_DATA] == SKIP_DATA_SETTINGS &&
s_dataSetting[m_slot_id][DOMESTIC_ROAMING_DATA] == SKIP_DATA_SETTINGS &&
s_dataSetting[m_slot_id][INTERNATIONAL_ROAMING_DATA] != SKIP_DATA_SETTINGS) {
+ result = mipc_data_set_config_sync(mipc_sim_ps_id_enum(request->getSlotId()), &dataConfigResult, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ (mipc_data_config_type_const_enum)imsTestMode, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][INTERNATIONAL_ROAMING_DATA]);
// RFX_LOG_I(RFX_LOG_TAG, "Enter ECNCFG, only international on/off");
//p_response = atSendCommand(String8::format("AT+ECNCFG=,,,%d,,%d",
// imsTestMode, s_dataSetting[m_slot_id][INTERNATIONAL_ROAMING_DATA]));
} else if (s_dataSetting[m_slot_id][MOBILE_DATA] == SKIP_DATA_SETTINGS &&
s_dataSetting_resend[m_slot_id][DOMESTIC_ROAMING_DATA] != SKIP_DATA_SETTINGS &&
s_dataSetting_resend[m_slot_id][INTERNATIONAL_ROAMING_DATA] != SKIP_DATA_SETTINGS) {
+ result = mipc_data_set_config_sync(mipc_sim_ps_id_enum(request->getSlotId()), &dataConfigResult, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ (mipc_data_config_type_const_enum)imsTestMode, (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][DOMESTIC_ROAMING_DATA], \
+ (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][INTERNATIONAL_ROAMING_DATA]);
// RFX_LOG_I(RFX_LOG_TAG, "Enter ECNCFG, domestic and international on/off");
//p_response = atSendCommand(String8::format("AT+ECNCFG=,,,%d,%d,%d",
// imsTestMode, s_dataSetting_resend[m_slot_id][DOMESTIC_ROAMING_DATA],
// s_dataSetting_resend[m_slot_id][INTERNATIONAL_ROAMING_DATA]));
} else {
+ result = mipc_data_set_config_sync(mipc_sim_ps_id_enum(request->getSlotId()), &dataConfigResult, (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][MOBILE_DATA], \
+ MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ (mipc_data_config_type_const_enum)imsTestMode, (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][DOMESTIC_ROAMING_DATA], \
+ (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][INTERNATIONAL_ROAMING_DATA]);
// RFX_LOG_I(RFX_LOG_TAG, "Enter ECNCFG,else ");
//p_response = atSendCommand(String8::format("AT+ECNCFG=%d,,,%d,%d,%d",
// s_dataSetting[m_slot_id][MOBILE_DATA],imsTestMode,
@@ -864,27 +986,39 @@
// AT+ECNCFG=<mobile_data>,<data_roaming>,[<volte>,<ims_test_mode>]
if (s_dataSetting[m_slot_id][MOBILE_DATA] != SKIP_DATA_SETTINGS &&
s_dataSetting[m_slot_id][ROAMING_DATA] == SKIP_DATA_SETTINGS) {
+ result = mipc_data_set_config_sync(mipc_sim_ps_id_enum(request->getSlotId()), &dataConfigResult, (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][MOBILE_DATA], \
+ MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ (mipc_data_config_type_const_enum)imsTestMode, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE);
//p_response = atSendCommand(String8::format("AT+ECNCFG=%d,,,%d,,",
// s_dataSetting[m_slot_id][MOBILE_DATA],imsTestMode));
} else if (s_dataSetting[m_slot_id][MOBILE_DATA] == SKIP_DATA_SETTINGS &&
s_dataSetting[m_slot_id][ROAMING_DATA] != SKIP_DATA_SETTINGS) {
+ result = mipc_data_set_config_sync(mipc_sim_ps_id_enum(request->getSlotId()), &dataConfigResult, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][ROAMING_DATA], MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ (mipc_data_config_type_const_enum)imsTestMode, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE);
//p_response = atSendCommand(String8::format("AT+ECNCFG=,%d,,%d,,",
// s_dataSetting[m_slot_id][ROAMING_DATA], imsTestMode));
} else {
+ result = mipc_data_set_config_sync(mipc_sim_ps_id_enum(request->getSlotId()), &dataConfigResult, (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][MOBILE_DATA], \
+ (mipc_data_config_type_const_enum)s_dataSetting[m_slot_id][ROAMING_DATA], MIPC_DATA_CONFIG_TYPE_NO_CHANGE, \
+ (mipc_data_config_type_const_enum)imsTestMode, MIPC_DATA_CONFIG_TYPE_NO_CHANGE, MIPC_DATA_CONFIG_TYPE_NO_CHANGE);
// p_response = atSendCommand(String8::format("AT+ECNCFG=%d,%d,,%d,,",
// s_dataSetting[m_slot_id][MOBILE_DATA], s_dataSetting[m_slot_id][ROAMING_DATA],
// imsTestMode));
}
}
- RFX_LOG_D(RFX_LOG_TAG, "[%d][%s] End", rid, __FUNCTION__);
+ RFX_LOG_D(RFX_LOG_TAG, "[%d][%s] End result: %d", rid, __FUNCTION__, result);
-error:
- RFX_LOG_E(RFX_LOG_TAG, "%s:%d notify failure", __FUNCTION__ , __LINE__);
finish:
RFX_LOG_D(RFX_LOG_TAG, "%s:%d notify response", __FUNCTION__ , __LINE__);
+ rfx_enqueue_response_message(NULL, request->getRilToken(),(RIL_SOCKET_ID)request->getSlotId(), RIL_E_SUCCESS);
FREEIF(pReqData);
return;
+error:
+ RFX_LOG_E(RFX_LOG_TAG, "%s:%d notify failure", __FUNCTION__ , __LINE__);
+ rfx_enqueue_response_message(NULL, request->getRilToken(),(RIL_SOCKET_ID)request->getSlotId(), RIL_E_GENERIC_FAILURE);
+ return;
}
@@ -1086,7 +1220,7 @@
goto error;
}
result = mipc_apn_profile_update_sync(slot_id_to_mipc_sim_id(request->getSlotId()), &apnProfiles, i+1, mccmnc, \
- dataProfiles[i].apn, (uint32_t)dataProfiles[i].profileId, apnPdpType, MIPC_APN_ENUM_PDP_TYPE_IPV4V6, (mipc_apn_auth_type_enum)dataProfiles[i].authType, \
+ dataProfiles[i].apn, (uint32_t)dataProfiles[i].supportedTypesBitmask, apnPdpType, MIPC_APN_ENUM_PDP_TYPE_IPV4V6, (mipc_apn_auth_type_enum)dataProfiles[i].authType, \
dataProfiles[i].user, dataProfiles[i].password, 0xffffffff, MIPC_APN_ENUM_COMPRESSION_ENABLE);
RFX_LOG_D(RFX_LOG_TAG,"%s %d2 apn[%s] result[%d] apnProfiles.result_code[%d], apnProfiles.apn_list_count[%d]", __FUNCTION__, __LINE__, dataProfiles[i].apn, result, apnProfiles.result_code, apnProfiles.apn_list_count);
if (result != MIPC_API_RESULT_SUCCESS) {
@@ -1449,10 +1583,120 @@
rfx_enqueue_response_message(NULL, request->getRilToken(),(RIL_SOCKET_ID)request->getSlotId(), RIL_E_GENERIC_FAILURE);
}
+RIL_DataCallFailCause RpDataController::convertFailCauseToRilStandard(int cause) {
+ int rid = m_slot_id;
+
+ if (cause > MIPC_RESULT_PDN_EXT_NETWORK_ERROR_BEGIN /*0x140000*/ &&
+ cause < MIPC_RESULT_PDN_EXT_NETWORK_ERROR_END) {
+ cause -= MIPC_RESULT_PDN_EXT_NETWORK_ERROR_BEGIN;
+ if (cause > SM_CAUSE_BASE && cause < SM_CAUSE_END) {
+ cause -= SM_CAUSE_BASE;
+ } else if (cause > ESM_CAUSE_BASE && cause < ESM_CAUSE_END) {
+ RFX_LOG_E(RFX_LOG_TAG, "[%d][%s] ESM CAUSE: %X",
+ rid, __FUNCTION__, cause);
+ cause -= ESM_CAUSE_BASE;
+ } else if (cause > PAM_CAUSE_BASE && cause < PAM_CAUSE_END) {
+ RFX_LOG_E(RFX_LOG_TAG, "[%d][%s] PAM CAUSE: %X",
+ rid, __FUNCTION__, cause);
+ cause -= PAM_CAUSE_BASE;
+ } else if (cause > FIVESMGSM_CAUSE_BASE && cause < FIVESMGSM_CAUSE_END) {
+ RFX_LOG_E(RFX_LOG_TAG, "[%d][%s] 5GSM CAUSE: %X",
+ rid, __FUNCTION__, cause);
+ cause -= FIVESMGSM_CAUSE_BASE;
+ } else if (cause > CME_CAUSE_BASE_V14 && cause < CME_CAUSE_END_V14) {
+ RFX_LOG_E(RFX_LOG_TAG, "[%d][%s] CME CAUSE: %X",
+ rid, __FUNCTION__, cause);
+ if (cause == 149) {//CME_PDP_AUTHENTICATION_FAILED = 149
+ return PDP_FAIL_USER_AUTHENTICATION;
+ } else {
+ cause -= CME_CAUSE_BASE_V14;
+ }
+ }
+
+ switch (cause) {
+ case 0: return PDP_FAIL_NONE;
+ case 0x08: return PDP_FAIL_OPERATOR_BARRED;
+ case 0x0E: return PDP_FAIL_NAS_SIGNALLING;
+ case 0x18: return PDP_FAIL_MBMS_CAPABILITIES_INSUFFICIENT;
+ case 0x19: return PDP_FAIL_LLC_SNDCP;
+ case 0x1A: return PDP_FAIL_INSUFFICIENT_RESOURCES;
+ case 0x1B: return PDP_FAIL_MISSING_UKNOWN_APN;
+ case 0x1C: return PDP_FAIL_UNKNOWN_PDP_ADDRESS_TYPE;
+ case 0x1D: return PDP_FAIL_USER_AUTHENTICATION;
+ case 0x1E: return PDP_FAIL_ACTIVATION_REJECT_GGSN;
+ case 0x1F: return PDP_FAIL_ACTIVATION_REJECT_UNSPECIFIED;
+ case 0x20: return PDP_FAIL_SERVICE_OPTION_NOT_SUPPORTED;
+ case 0x21: return PDP_FAIL_SERVICE_OPTION_NOT_SUBSCRIBED;
+ case 0x22: return PDP_FAIL_SERVICE_OPTION_OUT_OF_ORDER;
+ case 0x23: return PDP_FAIL_NSAPI_IN_USE;
+ case 0x24: return PDP_FAIL_REGULAR_DEACTIVATION;
+ case 0x25: return PDP_FAIL_QOS_NOT_ACCEPTED;
+ case 0x26: return PDP_FAIL_NETWORK_FAILURE;
+ case 0x27: return PDP_FAIL_UMTS_REACTIVATION_REQ;
+ case 0x28: return PDP_FAIL_FEATURE_NOT_SUPP;
+ case 0x29: return PDP_FAIL_TFT_SEMANTIC_ERROR;
+ case 0x2A: return PDP_FAIL_TFT_SYTAX_ERROR;
+ case 0x2B: return PDP_FAIL_UNKNOWN_PDP_CONTEXT;
+ case 0x2C: return PDP_FAIL_FILTER_SEMANTIC_ERROR;
+ case 0x2D: return PDP_FAIL_FILTER_SYTAX_ERROR;
+ case 0x2E: return PDP_FAIL_PDP_WITHOUT_ACTIVE_TFT;
+ case 0x2F: return PDP_FAIL_MULTICAST_GROUP_MEMBERSHIP_TIMEOUT;
+ case 0x30: return PDP_FAIL_BCM_VIOLATION;
+ case 0x31: return PDP_FAIL_LAST_PDN_DISC_NOT_ALLOWED;
+ case 0x32: return PDP_FAIL_ONLY_IPV4_ALLOWED;
+ case 0x33: return PDP_FAIL_ONLY_IPV6_ALLOWED;
+ case 0x34: return PDP_FAIL_ONLY_SINGLE_BEARER_ALLOWED;
+ case 0x35: return PDP_FAIL_ESM_INFO_NOT_RECEIVED;
+ case 0x36: return PDP_FAIL_PDN_CONN_DOES_NOT_EXIST;
+ case 0x37: return PDP_FAIL_MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED;
+ case 0x38: return PDP_FAIL_COLLISION_WITH_NW_INITIATED_REQUEST;
+ case 0x3B: return PDP_FAIL_ESM_UNSUPPORTED_QCI_VALUE;
+ case 0x3C: return PDP_FAIL_BEARER_HANDLING_NOT_SUPPORT;
+ case 0x41: return PDP_FAIL_MAX_ACTIVE_PDP_CONTEXT_REACHED;
+ case 0x42: return PDP_FAIL_UNSUPPORTED_APN_IN_CURRENT_PLMN;
+ case 0x51: return PDP_FAIL_INVALID_TRANSACTION_ID;
+ case 0x5F: return PDP_FAIL_MESSAGE_INCORRECT_SEMANTIC;
+ case 0x60: return PDP_FAIL_INVALID_MANDATORY_INFO;
+ case 0x61: return PDP_FAIL_MESSAGE_TYPE_UNSUPPORTED;
+ case 0x62: return PDP_FAIL_MSG_TYPE_NONCOMPATIBLE_STATE;
+ case 0x63: return PDP_FAIL_UNKNOWN_INFO_ELEMENT;
+ case 0x64: return PDP_FAIL_CONDITIONAL_IE_ERROR;
+ case 0x65: return PDP_FAIL_MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE;
+ case 0x6F: return PDP_FAIL_PROTOCOL_ERRORS;
+ case 0x70: return PDP_FAIL_APN_TYPE_CONFLICT;
+ case 0x71: return PDP_FAIL_INVALID_PCSCF_ADDR;
+ case 0x72: return PDP_FAIL_INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN;
+ case 0x73: return PDP_FAIL_EMM_ACCESS_BARRED;
+ case 0x74: return PDP_FAIL_EMERGENCY_IFACE_ONLY;
+ case 0x75: return PDP_FAIL_IFACE_MISMATCH;
+ case 0x76: return PDP_FAIL_COMPANION_IFACE_IN_USE;
+ case 0x77: return PDP_FAIL_IP_ADDRESS_MISMATCH;
+ case 0x78: return PDP_FAIL_IFACE_AND_POL_FAMILY_MISMATCH;
+ case 0x79: return PDP_FAIL_EMM_ACCESS_BARRED_INFINITE_RETRY;
+ case 0x7A: return PDP_FAIL_AUTH_FAILURE_ON_EMERGENCY_CALL;
+ case 0x0E0F: return PDP_FAIL_LOCAL_REJECT_ACT_REQ_DUE_TO_REACH_RETRY_COUNTER;
+ case 0x0F47: return PDP_FAIL_TCM_ESM_TIMER_TIMEOUT;
+ case 0x1402: return PDP_FAIL_PAM_ATT_PDN_ACCESS_REJECT_IMS_PDN_BLOCK_TEMP;
+ case 0x1671: return PDP_FAIL_DATA_NOT_ALLOW;
+ case -1: return PDP_FAIL_VOICE_REGISTRATION_FAIL;
+ case -2: return PDP_FAIL_DATA_REGISTRATION_FAIL;
+ case -3: return PDP_FAIL_SIGNAL_LOST;
+ case -4: return PDP_FAIL_PREF_RADIO_TECH_CHANGED;
+ case -5: return PDP_FAIL_RADIO_POWER_OFF;
+ case -6: return PDP_FAIL_TETHERED_CALL_ACTIVE;
+ default: return PDP_FAIL_ERROR_UNSPECIFIED;
+ }
+ } else {
+ return PDP_FAIL_ERROR_UNSPECIFIED;
+ }
+}
+
void RpDataController::handleGetLastFailCauseRequest(const sp<RfxMessage>& request) {
Parcel * parcel = NULL;
+ int lastFailCause = 0;
RFX_LOG_D(RFX_LOG_TAG, "[%d][%s][%d] m_nGprsFailureCause[%d]", m_slot_id, __FUNCTION__, __LINE__, m_nGprsFailureCause);
+
parcel = new Parcel();
if (parcel == NULL){
@@ -1460,19 +1704,19 @@
request->getSlotId(), request->getClientId(), request->getToken());
goto error;
}
-
+ lastFailCause = getGprsFailureCause();
+ parcel->writeInt32(1);
+ parcel->writeInt32(lastFailCause);
+ RFX_LOG_D(RFX_LOG_TAG, "[%d][%s][%d] lastFailCause[%d]", m_slot_id, __FUNCTION__, __LINE__, lastFailCause);
+ rfx_enqueue_response_message(parcel, request->getRilToken(),(RIL_SOCKET_ID)request->getSlotId(), RIL_E_SUCCESS);
+ return;
error:
if (parcel != NULL){
delete(parcel);
parcel = NULL;
}
RFX_LOG_E(RFX_LOG_TAG, "%s:%d notify failure", __FUNCTION__ , __LINE__);
-
- if (parcel == NULL)
- rfx_enqueue_response_message(NULL, request->getRilToken(),(RIL_SOCKET_ID)request->getSlotId(), RIL_E_GENERIC_FAILURE);
- else
- rfx_enqueue_response_message(parcel, request->getRilToken(),(RIL_SOCKET_ID)request->getSlotId(), RIL_E_SUCCESS);
- return;
+ rfx_enqueue_response_message(NULL, request->getRilToken(),(RIL_SOCKET_ID)request->getSlotId(), RIL_E_GENERIC_FAILURE);
}
@@ -1737,6 +1981,7 @@
mipc_api_result_enum result = MIPC_API_RESULT_SUCCESS;
Parcel * parcel = NULL;
Parcel *p = NULL;
+ Act_Data_call_back_priv* data_call_cb = NULL;
memset(&dataCallAct, 0, sizeof(dataCallAct));
@@ -1834,7 +2079,17 @@
mapPdpTypeFromStringToEnum(pStrings[6], &pdpType);
- result = mipc_data_call_act_async(slot_id_to_mipc_sim_id(request->getSlotId()), mipc_data_call_act_cb, (void *)request->getRilToken(), pStrings[2], \
+ data_call_cb = (Act_Data_call_back_priv*)calloc(1, sizeof(Act_Data_call_back_priv));
+ if (data_call_cb == NULL) {
+ RFX_LOG_E(RFX_LOG_TAG, "%s:%d slotid[%d] clientid[%d] token[%d] NULL calloc", __FUNCTION__ , __LINE__, \
+ request->getSlotId(), request->getClientId(), request->getToken());
+ goto error;
+ }
+ data_call_cb->token = request->getRilToken();
+ memset(data_call_cb->apn, 0, MAX_APN_NAME_LENGTH);
+ strncpy(data_call_cb->apn, pStrings[2], strlen(pStrings[2]));
+
+ result = mipc_data_call_act_async(slot_id_to_mipc_sim_id(request->getSlotId()), mipc_data_call_act_cb, (void *)data_call_cb, pStrings[2], \
apnType, pdpType, pdpType, authType, pStrings[3], pStrings[4], \
MIPC_DATA_ENUM_FALLBACK_TYPE_IPV4_FIRST, 0xffffffff);
error:
@@ -1922,3 +2177,7 @@
m_nGprsFailureCause = gprsFailureCause;
}
+int RpDataController::getGprsFailureCause(){
+ return m_nGprsFailureCause;
+}
+
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.h b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.h
old mode 100644
new mode 100755
index 4f530c0..790cf9e
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.h
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.h
@@ -61,6 +61,15 @@
#define SKIP_DATA_SETTINGS -2
+typedef struct Act_Data_call_back_priv {
+ RIL_Token token;
+ char apn[MAX_APN_NAME_LENGTH];
+} Act_Data_call_back_priv;
+
+typedef struct Get_Retry_timer_call_back_priv {
+ RIL_Token token;
+ MTK_RIL_Data_Call_Response_v11* response;
+} Get_Retry_timer_call_back_priv;
/*****************************************************************************
* Class RpDataController
@@ -117,6 +126,9 @@
bool validateAid(int aid);
String8 responsesToString(MTK_RIL_Data_Call_Response_v11* responses, int num);
void setGprsFailureCause(int gprsFailureCause);
+ int getGprsFailureCause();
+ RIL_DataCallFailCause convertFailCauseToRilStandard(int cause);
+
protected:
int m_nGprsFailureCause;
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/ecall/RpEcallController.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/ecall/RpEcallController.cpp
new file mode 100755
index 0000000..1bbdc29
--- /dev/null
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/ecall/RpEcallController.cpp
Binary files differ
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/ecall/RpEcallController.h b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/ecall/RpEcallController.h
new file mode 100755
index 0000000..dfd52af
--- /dev/null
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/ecall/RpEcallController.h
@@ -0,0 +1,81 @@
+// SPDX-License-Identifier: MediaTekProprietary
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* Copyright (c) [2020], MediaTek Inc. All rights reserved.
+* This software/firmware and related documentation ("MediaTek Software") are
+* protected under relevant copyright laws.
+*
+* The information contained herein is confidential and proprietary to
+* MediaTek Inc. and/or its licensors. Except as otherwise provided in the
+* applicable licensing terms with MediaTek Inc. and/or its licensors, any
+* reproduction, modification, use or disclosure of MediaTek Software, and
+* information contained herein, in whole or in part, shall be strictly
+* prohibited.
+*****************************************************************************/
+
+#ifndef __RP_ECALL_CONTROLLER_H__
+#define __RP_ECALL_CONTROLLER_H__
+
+#include <string>
+
+#include "RfxController.h"
+#include "RpUtils.h"
+#include "RilParcelUtils.h"
+#include <telephony/mtk_ril_request_info.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include "mipc_ecall_api.h"
+#include "mipc_msg_tlv_const.h"
+#ifdef __cplusplus
+}
+#endif
+
+/*****************************************************************************
+ * Class RpEcallController
+ *****************************************************************************/
+class RpEcallController : public RfxController {
+ RFX_DECLARE_CLASS(RpEcallController); // Required: declare this class
+
+public:
+ RpEcallController();
+
+ virtual ~RpEcallController();
+
+// Override
+protected:
+
+ virtual void onInit();
+ virtual void onDeinit();
+ virtual bool onHandleRequest(const sp<RfxMessage>& message);
+
+private:
+ std::string mLog_tag;
+ String8 mEccListWithCard;
+ String8 mEccListNoCard;
+ bool mIsSimInsert;
+ String8 mGsmEcc;
+
+private:
+ void registerInd(mipc_sim_ps_id_enum sim_ps_id,void *cb_priv_ptr);
+
+ void handleEcallFastMakeEcall(const sp<RfxMessage> &request);
+ void handleEcallUpdateMsd(const sp<RfxMessage>& request);
+ void handleEcallResetIvs(const sp<RfxMessage>& request);
+ void handleEcallSetRegState(const sp<RfxMessage>& request);
+ int handleEcallGetSimInfo();
+ void handleEcallSetTestAddr(const sp<RfxMessage>& request);
+ void handleEcallSetReconfAddr(const sp<RfxMessage> &request);
+ void handleEcallSetAddrPri(const sp<RfxMessage> &request);
+
+ void checkEccNumberAndServiceCategory(char* number, const sp<RfxMessage> &request);
+ bool isEmergencyNumber(String8 number);
+ int getServiceCategory(String8 number);
+ bool isEccMatchInList(String8 number, String8 eccList);
+
+ std::string IdToString(int request);
+};
+
+#endif /* __RP_ECALL_CONTROLLER_H__ */
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp
old mode 100644
new mode 100755
index cea50da..c643c1c
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp
@@ -1,3 +1,4 @@
+//SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
@@ -118,6 +119,7 @@
int prefNwType[RIL_SOCKET_NUM];
int mCurPreferedNetWorkType[RIL_SOCKET_NUM];
int mPhoneMode[RIL_SOCKET_NUM];
+bool mHasSetRat[RIL_SOCKET_NUM];
/*****************************************************************************
* Class RfxNwController
* The class is created if the slot is single mode, LWG or C,
@@ -649,7 +651,7 @@
writeStringToParcel(p,responseStr[i]);
free(responseStr[i]);
}
- rfx_enqueue_urc_message(RIL_UNSOL_RESPONSE_CS_NETWORK_STATE_CHANGED,p,mipc_sim_id_to_slot_id(sim_ps_id),RIL_E_SUCCESS);
+ rfx_enqueue_urc_message(RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED,p,mipc_sim_id_to_slot_id(sim_ps_id),RIL_E_SUCCESS);
isNeedNotifyStateChanged(mipc_sim_id_to_slot_id(sim_ps_id));
}
}
@@ -861,6 +863,28 @@
updatePhoneMode(mipc_sim_id_to_slot_id(sim_ps_id));
}
+void mipc_unsol_nw_etxpwr_ind_cb(mipc_msg_t *msg_ptr, void *cb_priv_ptr) {
+ mipc_sim_ps_id_enum sim_ps_id;
+ uint32_t act = 0;
+ int32_t tx_power = 0;
+
+ sim_ps_id = (mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id;
+ act = mipc_nw_etxpwr_ind_get_act(msg_ptr,0);
+ tx_power = mipc_nw_etxpwr_ind_get_tx_power(msg_ptr,0);
+ RFX_LOG_D(RFX_LOG_TAG,"mipc_unsol_nw_etxpwr_ind_cb act=%d, tx_power=%d\n", act, tx_power);
+
+ Parcel *p = new Parcel();
+ if(p != NULL) {
+ p->writeInt32(2);
+ p->writeUint32(act);
+ p->writeInt32(tx_power);
+ rfx_enqueue_urc_message(RIL_UNSOL_TX_POWER, p, mipc_sim_id_to_slot_id(sim_ps_id), RIL_E_SUCCESS);
+
+ } else {
+ RFX_LOG_E(RFX_LOG_TAG,"mipc_unsol_nw_cs_ind_cb new parcel error!");
+ }
+}
+
}
void RpNwController::onInit() {
@@ -872,6 +896,7 @@
mCurPreferedNetWorkType[getSlotId()] = -1;
prefNwType[getSlotId()] = -1;
mPhoneMode[getSlotId()] = RADIO_TECH_UNKNOWN;
+ mHasSetRat[getSlotId()] = false;
const int request_id_list[] = {
RIL_REQUEST_SIGNAL_STRENGTH, // 19
@@ -906,6 +931,7 @@
mipc_nw_ciev_ind_register(slot_id_to_mipc_sim_id(getSlotId()),mipc_unsol_nw_ciev_ind_cb,NULL);
mipc_nw_egmss_ind_register(slot_id_to_mipc_sim_id(getSlotId()),mipc_unsol_nw_egmss_ind_cb,NULL);
mipc_nw_psbearer_ind_register(slot_id_to_mipc_sim_id(getSlotId()),mipc_unsol_nw_psbearer_ind_cb,NULL);
+ mipc_nw_etxpwr_ind_register(slot_id_to_mipc_sim_id(getSlotId()),mipc_unsol_nw_etxpwr_ind_cb,NULL);
// register request id list
registerToHandleRequest(request_id_list,
@@ -1450,6 +1476,9 @@
} else if (nt_type == 6 && prefer_type == 0) {
//4G/3G/2G(Auto) item
return_type = PREF_NET_TYPE_LTE_GSM_WCDMA;
+ } else if (nt_type == 6 && prefer_type == 128) {
+ //4G/3G/2G(Auto) item
+ return_type = PREF_NET_TYPE_LTE_GSM_WCDMA;
} else if (nt_type == 14) {
// LTE CDMA EVDO GSM/WCDMA mode
return_type = PREF_NET_TYPE_LTE_CMDA_EVDO_GSM_WCDMA;
@@ -1699,6 +1728,11 @@
mCurPreferedNetWorkType[slotid] = prefNwType[slotid];
updatePhoneMode(mipc_sim_id_to_slot_id(sim_ps_id));
}
+
+ mHasSetRat[mipc_sim_id_to_slot_id(sim_ps_id)] = true;
+ RFX_LOG_D(RFX_LOG_TAG,"mipc_set_prefer_network_cb set mHasSetRat[%d]=%d\n",
+ mipc_sim_id_to_slot_id(sim_ps_id),
+ mHasSetRat[mipc_sim_id_to_slot_id(sim_ps_id)]);
}
if (cb_priv_ptr == NULL) {
@@ -2042,6 +2076,23 @@
int ret = 0;
rfx_property_get(mccMncKey.c_str(), value, "");
RFX_LOG_D(RFX_LOG_TAG, "handleGetOperator plmnid[%s]",value);
+
+ // Handle for test SIM, always return 00101
+ if (strcmp(value, "00101") == 0) {
+ Parcel * p = new Parcel();
+ if(p == NULL) {
+ rfx_enqueue_response_message(NULL,request->getRilToken(),(RIL_SOCKET_ID)request->getSlotId(),RIL_E_GENERIC_FAILURE);
+ return;
+ }
+ p->writeInt32(3); //number of strings
+ writeStringToParcel(p,value);
+ writeStringToParcel(p,value);
+ writeStringToParcel(p,value);
+ RFX_LOG_D(RFX_LOG_TAG,"%s plmn_id[%s],shortname[%s]", __FUNCTION__, value, value);
+ rfx_enqueue_response_message(p,request->getRilToken(),(RIL_SOCKET_ID)request->getSlotId(),RIL_E_SUCCESS);
+ return;
+ }
+
//get operator name with plmnid
mipc_nw_provider_name_get_async(slot_id_to_mipc_sim_id(request->getSlotId()), mipc_get_Operator_cb,
(void *)request->getRilToken(), value);
@@ -2238,8 +2289,8 @@
p->readInt32(&pInt[1]);
p->readInt32(&pInt[2]);
}
- int req, err, gsm_band, umts_band;
- unsigned int lte_band_1_32=0,lte_band_33_64=0;
+ int req, err;
+ unsigned int gsm_band=0, umts_band=0, lte_band_1_32=0, lte_band_33_64=0;
req = pInt[0];
switch (req) {
case BM_AUTO_MODE: //"unspecified" (selected by baseband automatically)
@@ -2312,12 +2363,13 @@
}
}
mipc_nw_band_mode_struct BandMode;
+ memset(&BandMode, 0, sizeof(BandMode));
BandMode.GSM_band_mode=gsm_band;
- BandMode.GSM_band_mode=umts_band;
+ BandMode.UMTS_band_mode=umts_band;
BandMode.LTE_band[0]=lte_band_1_32;
BandMode.LTE_band[1]=lte_band_33_64;
- RFX_LOG_D(RFX_LOG_TAG, "gsm_band:%d, umts_band : %d, lte_band_1_32 : %d, lte_band_33_64: %d, req: %d ",
- gsm_band, umts_band, lte_band_1_32, lte_band_33_64, req);
+ RFX_LOG_D(RFX_LOG_TAG, "GSM_band_mode:%d, UMTS_band_mode: %d, LTE_band[0]: %d, LTE_band[1]: %d, req: %d",
+ BandMode.GSM_band_mode, BandMode.UMTS_band_mode, BandMode.LTE_band[0], BandMode.LTE_band[1], req);
mipc_nw_band_mode_set_async(slot_id_to_mipc_sim_id(request->getSlotId()), mipc_band_set_network_cb, (void *)request->getRilToken(),&BandMode);
}
@@ -2383,21 +2435,29 @@
RFX_UNUSED(key);
RFX_UNUSED(old_value);
- int rat = 6, rat1 = 4; //6: GSM + UMTS + LTE, 4: LTE prefer
-
if (value.asBool() == true) {
int newCardType = getStatusManager(slotId)->getIntValue(RFX_STATUS_KEY_CARD_TYPE, CARD_TYPE_NONE);
- RFX_LOG_D(RFX_LOG_TAG, "[%d]%s get slotId[%d] RFX_STATUS_KEY_CARD_TYPE = %d",
- getSlotId(), __FUNCTION__, slotId, newCardType);
+ //RFX_LOG_D(RFX_LOG_TAG, "[%d]%s get slotId[%d] RFX_STATUS_KEY_CARD_TYPE = %d",
+ // getSlotId(), __FUNCTION__, slotId, newCardType);
- /// M: there is no sim card, that mean: card has been plugout.
- /// M: Send global rat mode
- if (newCardType == CARD_TYPE_NONE) {
- RFX_LOG_D(RFX_LOG_TAG, "[%d]%s send RAT mode for slotid=%d: no sim card state = %d, rat=%d, rat1=%d",
- getSlotId(), __FUNCTION__, slotId, newCardType, rat, rat1);
+ /// M: Must set rat mode when first time boot (Never set RAT before)
+ if ((newCardType == CARD_TYPE_NONE) && (mHasSetRat[getSlotId()] == false)) {
+ mipc_nw_get_rat_struct cur_rat;
+ mipc_nw_get_rat_sync(slot_id_to_mipc_sim_id(getSlotId()), &cur_rat);
+
+ RFX_LOG_D(RFX_LOG_TAG, "[%d]%s send RAT mode for slotid=%d: no sim card state = %d, rat=%d, prefer_rat=%d",
+ getSlotId(), __FUNCTION__, slotId, newCardType, cur_rat.rat, cur_rat.prefer_rat);
+
+ if (0 > cur_rat.rat || 30 < cur_rat.rat) {
+ //6: GSM + UMTS + LTE, 4: LTE prefer
+ cur_rat.rat = 6;
+ cur_rat.prefer_rat = 4;
+ RFX_LOG_D(RFX_LOG_TAG, "[%d]%s Update as rat=%d, prefer_rat=%d",
+ getSlotId(), __FUNCTION__, cur_rat.rat, cur_rat.prefer_rat);
+ }
mipc_nw_set_rat_async(slot_id_to_mipc_sim_id(getSlotId()), mipc_set_prefer_network_cb, NULL,
- (uint8_t)rat,(uint8_t)rat1);
+ (uint8_t)cur_rat.rat,(uint8_t)cur_rat.prefer_rat);
}
}
}
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/radio/RpRadioController.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/radio/RpRadioController.cpp
old mode 100644
new mode 100755
index b83f8bc..6e70ad6
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/radio/RpRadioController.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/radio/RpRadioController.cpp
@@ -94,10 +94,11 @@
RFX_OBJ_GET_INSTANCE(RfxRootController)->getStatusManager(mipc_sim_id_to_slot_id(sim_ps_id))->setIntValue(RFX_STATUS_KEY_RADIO_LOCK, RADIO_LOCK_IDLE);
//retry set radio status
- if(result_ptr->result_code != MIPC_RESULT_SUCCESS) {
+ if(result_ptr->result_code != MIPC_RESULT_SUCCESS ||
+ result_ptr->sw_radio_state != mPendingRequest[mipc_sim_id_to_slot_id(sim_ps_id)]) {
RFX_OBJ_GET_INSTANCE(RfxRootController)->getStatusManager(mipc_sim_id_to_slot_id(sim_ps_id))->setIntValue(RFX_STATUS_KEY_RADIO_LOCK, RADIO_LOCK_BY_RADIO);
int radio_state = mPendingRequest[mipc_sim_id_to_slot_id(sim_ps_id)];
- RFX_LOG_D(getTag(sim_ps_id).c_str(), "%s, set radio fail, start retry, radio_state", __FUNCTION__, radio_state);
+ RFX_LOG_D(getTag(sim_ps_id).c_str(), "%s, set radio fail or not equal pending, start retry, radio_state", __FUNCTION__, radio_state);
int ret = mipc_nw_radio_state_set_async(
sim_ps_id,
mipc_nw_radio_state_booup_set_cb,
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sim/RpSimController.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sim/RpSimController.cpp
old mode 100644
new mode 100755
index 0fa766a..6615766
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sim/RpSimController.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sim/RpSimController.cpp
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/*****************************************************************************
* Copyright Statement:
* --------------------
@@ -281,12 +282,32 @@
}
}
+int transferMipcSimResultCode(mipc_result_enum result_code) {
+ switch(result_code) {
+ case MIPC_RESULT_SIM_NOT_INSERTED:
+ return RIL_E_SIM_ABSENT;
+ case MIPC_RESULT_PIN_REQUIRED:
+ case MIPC_RESULT_PIN_DISABLED:
+ return RIL_E_PASSWORD_INCORRECT;
+ case MIPC_RESULT_BUSY:
+ return RIL_E_SIM_BUSY;
+ case MIPC_RESULT_BAD_SIM:
+ return RIL_E_SIM_ERR;
+ case MIPC_RESULT_FAILURE:
+ return RIL_E_GENERIC_FAILURE;
+ default:
+ return result_code;
+ }
+}
static void mipc_sim_status_get_cb(mipc_sim_ps_id_enum sim_ps_id, mipc_sim_status_struct *result_ptr, void *cb_priv_ptr) {
RFX_LOG_D(getTag(sim_ps_id).c_str(),"%s, %s", __FUNCTION__, dump_mipc_sim_status(result_ptr,cb_priv_ptr).c_str());
- if(cb_priv_ptr && (result_ptr->result_code != MIPC_RESULT_SUCCESS)) {
- //result code to ril error transfer
- rfx_enqueue_response_message(NULL,cb_priv_ptr,mipc_sim_id_to_slot_id(sim_ps_id),result_ptr->result_code);
+ if(cb_priv_ptr &&
+ !(result_ptr->result_code == MIPC_RESULT_SUCCESS ||
+ result_ptr->result_code == MIPC_RESULT_SIM_NOT_INSERTED ||
+ result_ptr->result_code == MIPC_RESULT_PIN_REQUIRED ||
+ result_ptr->result_code == MIPC_RESULT_PIN_DISABLED)) {
+ rfx_enqueue_response_message(NULL,cb_priv_ptr,mipc_sim_id_to_slot_id(sim_ps_id),transferMipcSimResultCode(result_ptr->result_code));
} else {
if(result_ptr->gsm_app_idx >= 0 && result_ptr->gsm_app_idx < result_ptr->app_count){
handleCardType(result_ptr->app_list[result_ptr->gsm_app_idx].app_type,sim_ps_id);
@@ -478,6 +499,24 @@
return str;
}
+const char HEX_DIGITS[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+
+unsigned char* byteArrayToHexString(unsigned char* array,int length)
+{
+ unsigned char* buf = (unsigned char*)calloc(1, length*2+1);
+ assert(buf != NULL);
+ int bufIndex = 0;
+ int i = 0;
+ for (i = 0 ; i < length; i++)
+ {
+ unsigned char b = array[i];
+ buf[bufIndex++] = HEX_DIGITS[(b >> 4) & 0x0F];
+ buf[bufIndex++] = HEX_DIGITS[b & 0x0F];
+ }
+ buf[bufIndex] = '\0';
+ return buf;
+}
+
static void mipc_sim_channel_restricted_access_cb(mipc_sim_ps_id_enum sim_ps_id, mipc_sim_apdu_access_struct *result_ptr, void *cb_priv_ptr) {
RFX_LOG_D(getTag(sim_ps_id).c_str(),"%s, %s", __FUNCTION__, dump_sim_channel_restricted_access(result_ptr,cb_priv_ptr).c_str());
if(result_ptr->result_code != MIPC_RESULT_SUCCESS) {
@@ -493,7 +532,14 @@
sscanf(out.c_str(), "%02x%02x", &(sw1), &(sw2));
p->writeInt32(sw1);
p->writeInt32(sw2);
- writeStringToParcel(p, string(strlen(result_ptr->resp_apdu) == 0 ? "" : result_ptr->resp_apdu).c_str());
+
+ char* temp = (char*)byteArrayToHexString((unsigned char*)result_ptr->resp_apdu, result_ptr->resp_len);
+ RFX_LOG_D(getTag(sim_ps_id).c_str(),"%s, temp %s", __FUNCTION__, temp);
+ writeStringToParcel(p, string(strlen(temp) == 0 ? "" : temp).c_str());
+ if (temp != NULL) {
+ free(temp);
+ }
+
rfx_enqueue_response_message(p,cb_priv_ptr,mipc_sim_id_to_slot_id(sim_ps_id),RIL_E_SUCCESS);
}
}
@@ -527,7 +573,13 @@
sscanf(out.c_str(), "%02x%02x", &(sw1), &(sw2));
p->writeInt32(sw1);
p->writeInt32(sw2);
- writeStringToParcel(p, string(strlen(result_ptr->resp_apdu) == 0 ? "" : result_ptr->resp_apdu).c_str());
+
+ char* temp = (char*)byteArrayToHexString((unsigned char*)result_ptr->resp_apdu, result_ptr->resp_len);
+ RFX_LOG_D(getTag(sim_ps_id).c_str(),"%s, temp %s", __FUNCTION__, temp);
+ writeStringToParcel(p, string(strlen(temp) == 0 ? "" : temp).c_str());
+ if (temp != NULL) {
+ free(temp);
+ }
rfx_enqueue_response_message(p,cb_priv_ptr,mipc_sim_id_to_slot_id(sim_ps_id),RIL_E_SUCCESS);
}
}
@@ -583,8 +635,15 @@
sscanf(out.c_str(), "%02x%02x", &(sw1), &(sw2));
p->writeInt32(sw1);
p->writeInt32(sw2);
+ writeStringToParcel(p, string(strlen(result_ptr->resp) == 0 ? "" : result_ptr->resp).c_str());
+ } else { //RIL_REQUEST_ISIM_AUTHENTICATION
+ char* temp = (char*)byteArrayToHexString((unsigned char*)result_ptr->resp, result_ptr->resp_len);
+ RFX_LOG_D(getTag(sim_ps_id).c_str(),"%s, temp %s", __FUNCTION__, temp);
+ writeStringToParcel(p, string(strlen(temp) == 0 ? "" : temp).c_str());
+ if (temp != NULL) {
+ free(temp);
+ }
}
- writeStringToParcel(p, string(strlen(result_ptr->resp) == 0 ? "" : result_ptr->resp).c_str());
rfx_enqueue_response_message(p,cb_priv_ptr,mipc_sim_id_to_slot_id(sim_ps_id),RIL_E_SUCCESS);
}
}
@@ -776,7 +835,7 @@
Parcel *parcel = new Parcel();
parcel->writeInt32(result_ptr->sim_refresh_result);
parcel->writeInt32((result_ptr->ef_id == UINT32_MAX) ? -1:result_ptr->ef_id);
- writeStringToParcel(parcel, ((strlen(result_ptr->aid) == 0) ? "": result_ptr->aid));
+ writeStringToParcel(parcel, ((result_ptr->aid == NULL || (result_ptr->aid != NULL && strlen(result_ptr->aid) == 0)) ? "": result_ptr->aid));
rfx_enqueue_urc_message(RIL_UNSOL_SIM_REFRESH,parcel,mipc_sim_id_to_slot_id(sim_ps_id),err);
}
@@ -1279,28 +1338,43 @@
p3 = (int)t;
data_ptr = strdupReadString(p);
- if(string(data_ptr).empty()) {
- RFX_LOG_D(mLog_tag.c_str(), "%s data_ptr = NULL", __FUNCTION__);
- if(data_ptr) {
- free(data_ptr);
+ if (data_ptr != NULL) {
+ RFX_LOG_E(mLog_tag.c_str(), "data_ptr %d", __FUNCTION__,data_ptr);
+ if(string(data_ptr).empty()) {
+ RFX_LOG_D(mLog_tag.c_str(), "%s data_ptr = NULL", __FUNCTION__);
+ if(data_ptr) {
+ free(data_ptr);
+ }
+ data_ptr = NULL;
}
- data_ptr = NULL;
+ } else {
+ RFX_LOG_E(mLog_tag.c_str(), "data_ptr NULL", __FUNCTION__);
}
pin2 = strdupReadString(p);
- if(string(pin2).empty()) {
- RFX_LOG_D(mLog_tag.c_str(), "%s pin2 = NULL", __FUNCTION__);
- if(pin2) {
- free(pin2);
+ if (pin2 != NULL) {
+ RFX_LOG_E(mLog_tag.c_str(), "pin2 %d", __FUNCTION__,pin2);
+ if(string(pin2).empty()) {
+ RFX_LOG_D(mLog_tag.c_str(), "%s pin2 = NULL", __FUNCTION__);
+ if(pin2) {
+ free(pin2);
+ }
+ pin2 = NULL;
}
- pin2 = NULL;
+ } else {
+ RFX_LOG_E(mLog_tag.c_str(), "pin2 NULL", __FUNCTION__);
}
aidPtr = strdupReadString(p);
- if(string(aidPtr).empty()) {
- RFX_LOG_D(mLog_tag.c_str(), "%s aidPtr = NULL", __FUNCTION__);
- if(aidPtr) {
- free(aidPtr);
+ if (aidPtr != NULL) {
+ RFX_LOG_E(mLog_tag.c_str(), "aidPtr %d", __FUNCTION__,aidPtr);
+ if(string(aidPtr).empty()) {
+ RFX_LOG_D(mLog_tag.c_str(), "%s aidPtr = NULL", __FUNCTION__);
+ if(aidPtr) {
+ free(aidPtr);
+ }
+ aidPtr = NULL;
}
- aidPtr = NULL;
+ } else {
+ RFX_LOG_E(mLog_tag.c_str(), "aidPtr NULL", __FUNCTION__);
}
app_id = queryAppTypeId(aidPtr==NULL? "": aidPtr);
RFX_LOG_D(mLog_tag.c_str(), "cmd:%d, file_id:%d,path:%s,p1=%d,p2=%d,p3=%u,data=%s,pin2=%s,aid=%s, app_id=%d", cmd, file_id,
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/stk/RpStkController.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/stk/RpStkController.cpp
old mode 100644
new mode 100755
index 5216fd3..322860b
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/stk/RpStkController.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/stk/RpStkController.cpp
@@ -877,7 +877,7 @@
//Todo: Add the data structure for RIL_SimRefreshResponse_v7
parcel->writeInt32(simRefreshRspV7.result);
parcel->writeInt32((simRefreshRspV7.ef_id == UINT32_MAX) ? -1:simRefreshRspV7.ef_id);
- writeStringToParcel(parcel, ((strlen(simRefreshRspV7.aid) == 0) ? "": simRefreshRspV7.aid));
+ writeStringToParcel(parcel, ((simRefreshRspV7.aid != NULL && strlen(simRefreshRspV7.aid) == 0) ? "": simRefreshRspV7.aid));
rfx_enqueue_urc_message(RIL_UNSOL_SIM_REFRESH,parcel,mipc_sim_id_to_slot_id(sim_ps_id),err);
readIdx += 4; // go to next EFID
}
@@ -885,7 +885,7 @@
//Todo: Add the data structure for RIL_SimRefreshResponse_v7
parcel->writeInt32(simRefreshRspV7.result);
parcel->writeInt32((simRefreshRspV7.ef_id == UINT32_MAX) ? -1:simRefreshRspV7.ef_id);
- writeStringToParcel(parcel, ((strlen(simRefreshRspV7.aid) == 0) ? "": simRefreshRspV7.aid));
+ writeStringToParcel(parcel, ((simRefreshRspV7.aid != NULL && strlen(simRefreshRspV7.aid) == 0) ? "": simRefreshRspV7.aid));
rfx_enqueue_urc_message(RIL_UNSOL_SIM_REFRESH,parcel,mipc_sim_id_to_slot_id(sim_ps_id),err);
}
@@ -914,6 +914,24 @@
}
}
+static void mipc_stk_pac_set_cb(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_stk_pac_set_struct *result_ptr,
+ void *cb_priv_ptr)
+{
+ int i = 0;
+ if (result_ptr != NULL) {
+ RFX_LOG_D(RFX_LOG_TAG,"mipc_stk_pac_set_cb result_code %d\n", result_ptr->result_code);
+ for (i = 0; i < 32; i++) {
+ RFX_LOG_D(RFX_LOG_TAG,"pac[%d][%d][%d][%d][%d][%d][%d][%d]\n",
+ result_ptr->pac_profile[(8*i)],result_ptr->pac_profile[(8*i)+1],result_ptr->pac_profile[(8*i)+2],result_ptr->pac_profile[(8*i)+3],
+ result_ptr->pac_profile[(8*i)+4],result_ptr->pac_profile[(8*i)+5],result_ptr->pac_profile[(8*i)+6],result_ptr->pac_profile[(8*i)+7]);
+ }
+ } else {
+ RFX_LOG_E(RFX_LOG_TAG,"mipc_stk_pac_set_cb result_code NULL\n");
+ }
+}
+
static void mipc_stk_send_envelope_cb(
mipc_sim_ps_id_enum sim_ps_id,
mipc_stk_envelope_struct *result_ptr,
@@ -1077,7 +1095,7 @@
stkController->handleStkCommand(cmd, CMD_TYPE_NOTIFY, sim_ps_id);
break;
- case CMD_YPE_SESSIONEND:
+ case CMD_TYPE_SESSIONEND:
rfx_enqueue_urc_message(RIL_UNSOL_STK_SESSION_END,NULL,mipc_sim_id_to_slot_id(sim_ps_id),err);
break;
}
@@ -1098,6 +1116,9 @@
RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING,//103
RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS //107
};
+ uint8_t value[32];
+ uint8_t len = 32;
+ memset(value, 0xFF, len);
sInstance[getSlotId()] = this;
// register request id list
@@ -1105,7 +1126,7 @@
sizeof(request_id_list) / sizeof(int));
slotid = getSlotId();
mipc_stk_pac_ind_register(slot_id_to_mipc_sim_id(slotid), mipc_stk_proactive_notification_command_cb, NULL);
-
+ mipc_stk_pac_set_async(slot_id_to_mipc_sim_id(slotid), mipc_stk_pac_set_cb, NULL, value);
RFX_LOG_D(RFX_LOG_TAG, "RpStkController onInit done");
}
@@ -1360,7 +1381,7 @@
switch(cmdType) {
case CMD_REFRESH:
//handle sim refresh
- handleSimRefresh(&(cmd[type_pos - 6]), sim_ps_id);
+ //L5 has handled it and we use mipc_stk_sim_refresh_ind_cb to report the sim refresh command.
break;
case CMD_SETUP_CALL:
//handle setup call
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/stk/RpStkController.h b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/stk/RpStkController.h
old mode 100644
new mode 100755
index f1335a0..5441330
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/stk/RpStkController.h
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/stk/RpStkController.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
@@ -92,7 +93,7 @@
typedef enum {
CMD_TYPE_PROACTIVE = 0x00,
CMD_TYPE_NOTIFY = 0x01,
- CMD_YPE_SESSIONEND = 0x02
+ CMD_TYPE_SESSIONEND = 0x02
} sat_cmd_type_num;
typedef struct {
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sys/RpSysController.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sys/RpSysController.cpp
old mode 100644
new mode 100755
index 2d07983..00d321e
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sys/RpSysController.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sys/RpSysController.cpp
@@ -875,7 +875,7 @@
mipc_sys_mapping_struct sys_mapping;
uint8_t mapping_list_count = getSimCount();
- mipc_sys_mapping_struct4 ps_list[4];
+ mipc_sys_mapping_struct4 ps_list[4] = {0};
if (m_new_main_slot == 0) {
// PS1 on SIM1
diff --git a/src/telephonyware/3.0/hardware/ril/include/telephony/mtk_ril_ivt.h b/src/telephonyware/3.0/hardware/ril/include/telephony/mtk_ril_ivt.h
old mode 100644
new mode 100755
index 7d787f6..a13482f
--- a/src/telephonyware/3.0/hardware/ril/include/telephony/mtk_ril_ivt.h
+++ b/src/telephonyware/3.0/hardware/ril/include/telephony/mtk_ril_ivt.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
@@ -54,15 +55,9 @@
ECALL_RECONFIG = 3, /* Reconfiguration eCall */
}RIL_ECall_Variant;
-typedef enum{
- ECALL_PSAP_PULL_MODE = 1, /* PSAP will PULL the data */
- ECALL_IVS_PUSH_MODE = 2, /* IVS should request PSAP to PULL the data */
-}RIL_ECall_Ivs_Config_Mode;
-
typedef struct{
RIL_ECall_Category ecall_cat;
RIL_ECall_Variant ecall_variant;
- RIL_ECall_Ivs_Config_Mode ivs_mode;
char* address;
unsigned int length;
unsigned char* msd_data;
@@ -89,6 +84,8 @@
RIL_UNSOL_ECALL_IMS_IN_BAND_TRANSFER = 22,
RIL_UNSOL_ECALL_IMS_MSD_NACK = 23,
RIL_UNSOL_ECALL_IMS_SRVCC = 24,
+ RIL_UNSOL_ECALL_ONLY_DEREGISTRATION = 31,
+ RIL_UNSOL_ECALL_MAY_DEREGISTER = 32,
RIL_UNSOL_ECALL_UNSPECIFIED = 0xffff,
}RIL_ECall_Indication;
diff --git a/src/telephonyware/3.0/hardware/ril/include/telephony/ril.h b/src/telephonyware/3.0/hardware/ril/include/telephony/ril.h
old mode 100644
new mode 100755
index 88bf56f..c769602
--- a/src/telephonyware/3.0/hardware/ril/include/telephony/ril.h
+++ b/src/telephonyware/3.0/hardware/ril/include/telephony/ril.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/*
* Copyright (C) 2006 The Android Open Source Project
*
@@ -1127,6 +1128,7 @@
PDP_FAIL_AUTH_FAILURE_ON_EMERGENCY_CALL = 0x7A,
PDP_FAIL_LOCAL_REJECT_ACT_REQ_DUE_TO_REACH_RETRY_COUNTER = 0x0E0F, /* M */
+ PDP_FAIL_TCM_ESM_DETACH = 0x0F45, /* M */
PDP_FAIL_TCM_ESM_TIMER_TIMEOUT = 0x0F46, /* M */
PDP_FAIL_TCM_ESM_DEACT_DUE_TO_DRB_RELEASE = 0x0F8E, /* M */
PDP_FAIL_PAM_ATT_PDN_ACCESS_REJECT_IMS_PDN_BLOCK_TEMP = 0x1402, /* M */
diff --git a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/CMakeLists.txt b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/CMakeLists.txt
old mode 100644
new mode 100755
index 63e5d21..662945a
--- a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/CMakeLists.txt
+++ b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/CMakeLists.txt
@@ -27,6 +27,7 @@
lib/src/api/mipc_stk_api.c
lib/src/api/mipc_sys_api.c
lib/src/api/mipc_call_api.c
+ lib/src/api/mipc_ecall_api.c
lib/src/api/mipc_radio_api.c)
add_library(mipc_api SHARED ${api_src_files})
diff --git a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/include/api/mipc_data_api.h b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/include/api/mipc_data_api.h
old mode 100644
new mode 100755
index c05afc4..6c3ec31
--- a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/include/api/mipc_data_api.h
+++ b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/include/api/mipc_data_api.h
@@ -136,7 +136,7 @@
/** @brief id */
uint8_t id;
- mipc_data_error_enum network_error;
+ uint32_t network_error;
} mipc_data_call_deact_struct;
/** @brief pco info. */
@@ -176,6 +176,11 @@
mipc_result_enum result_code;
} mipc_data_set_data_config_struct_v;
+typedef struct {
+ /** @brief result code*/
+ mipc_result_enum result_code;
+ uint32_t retry_timer;
+} mipc_data_get_retry_timer_struct_v;
/** @brief packet filter*/
@@ -695,7 +700,37 @@
mipc_data_config_type_const_enum data_international_roaming
);
+typedef void (*MIPC_DATA_RETRY_TIMER_CB)(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_data_get_retry_timer_struct_v *result_ptr,
+ void *cb_priv_ptr
+);
+/**
+ *@brief function for async. packet filter get operation
+ *@param[in] sim_ps_id indicate which sim or ps received the event (the value is decided by what is used when doing register operation)
+ *@param[in] result_ptr point to the execution result
+ *@param[in] apnName apn name
+*/
+mipc_api_result_enum mipc_data_get_retry_timer_sync(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_data_get_retry_timer_struct_v *result_ptr,
+ char* apnName
+);
+
+/**
+ *@brief function for async. packet filter get operation
+ *@param[in] sim_ps_id indicate which sim or ps received the event (the value is decided by what is used when doing register operation)
+ *@param[in] cb which callback function will be invoked after the operation completion
+ *@param[in] cb_priv_ptr point to the callback private data
+ *@param[in] apnName apn name
+*/
+mipc_api_result_enum mipc_data_get_retry_timer_async(
+ mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_DATA_RETRY_TIMER_CB cb,
+ void *cb_priv_ptr,
+ char* apnName
+);
/*!
@}
diff --git a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/include/api/mipc_ecall_api.h b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/include/api/mipc_ecall_api.h
new file mode 100755
index 0000000..226c9d2
--- /dev/null
+++ b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/include/api/mipc_ecall_api.h
@@ -0,0 +1,477 @@
+// SPDX-License-Identifier: MediaTekProprietary
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* Copyright (c) [2020], MediaTek Inc. All rights reserved.
+* This software/firmware and related documentation ("MediaTek Software") are
+* protected under relevant copyright laws.
+*
+* The information contained herein is confidential and proprietary to
+* MediaTek Inc. and/or its licensors. Except as otherwise provided in the
+* applicable licensing terms with MediaTek Inc. and/or its licensors, any
+* reproduction, modification, use or disclosure of MediaTek Software, and
+* information contained herein, in whole or in part, shall be strictly
+* prohibited.
+*****************************************************************************/
+
+#ifndef MIPC_ECALL_INTERFACE_H_
+#define MIPC_ECALL_INTERFACE_H_
+
+#include "mipc_api.h"
+#include "mipc_msg_host.h"
+#include "mipc_msg_tlv_const.h"
+
+/** @brief mipc ecall make an ecall */
+typedef struct {
+ /** @brief result code*/
+ mipc_result_enum result_code;
+} mipc_call_ivs_onekey_ecall_struct;
+
+/**
+ *@brief callback function prototype for async. SIM status get operation
+ *@param[in] sim_ps_id indicate which sim or ps completed the operation (the value is decided by what is used when doing aysnc. operation)
+ *@param[in] result_ptr point to the execution result
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+*/
+typedef void (*MIPC_CALL_IVS_ONEKEY_ECALL_CB)(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_call_ivs_onekey_ecall_struct *result_ptr,
+ void *cb_priv_ptr
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] result_ptr point to the execution result
+ *@param[in] ecall_type
+ *@param[in] ecall_format
+ *@param[in] msd_length
+ *@param[in] msd_data
+*/
+mipc_api_result_enum mipc_call_ivs_onekey_ecall_sync(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_call_ivs_onekey_ecall_struct *result_ptr,
+ mipc_ecall_type_const_enum ecall_type,
+ mipc_ecall_msd_format_const_enum ecall_format,
+ unsigned int msd_length,
+ unsigned char* msd_data
+);
+
+/**
+ *@brief function for async.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] cb
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+ *@param[in] ecall_type
+ *@param[in] ecall_format
+ *@param[in] msd_length
+ *@param[in] msd_data
+*/
+mipc_api_result_enum mipc_call_ivs_onekey_ecall_async(
+ mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_CALL_IVS_ONEKEY_ECALL_CB cb,
+ void *cb_priv_ptr,
+ mipc_ecall_type_const_enum ecall_type,
+ mipc_ecall_msd_format_const_enum ecall_format,
+ unsigned int msd_length,
+ unsigned char* msd_data
+);
+
+/** @brief mipc ecall update msd struct */
+typedef struct {
+ /** @brief result code*/
+ mipc_result_enum result_code;
+} mipc_ecall_ivs_update_msd_struct;
+
+/**
+ *@brief callback function prototype for async. SIM status get operation
+ *@param[in] sim_ps_id indicate which sim or ps completed the operation (the value is decided by what is used when doing aysnc. operation)
+ *@param[in] result_ptr point to the execution result
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+*/
+typedef void (*MIPC_ECALL_IVS_UPDATE_MSD_CB)(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_update_msd_struct *result_ptr,
+ void *cb_priv_ptr
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] result_ptr point to the execution result
+ *@param[in] ecall_type
+ *@param[in] ecall_format
+ *@param[in] msd_length
+ *@param[in] msd_data
+*/
+mipc_api_result_enum mipc_ecall_ivs_update_msd_sync(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_update_msd_struct *result_ptr,
+ mipc_ecall_msd_format_const_enum msd_format,
+ unsigned int msd_length,
+ unsigned char* msd_data
+);
+
+/**
+ *@brief function for async.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] cb
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+ *@param[in] ecall_type
+ *@param[in] ecall_format
+ *@param[in] msd_length
+ *@param[in] msd_data
+*/
+mipc_api_result_enum mipc_ecall_ivs_update_msd_async(
+ mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_UPDATE_MSD_CB cb,
+ void *cb_priv_ptr,
+ mipc_ecall_msd_format_const_enum msd_format,
+ unsigned int msd_length,
+ unsigned char* msd_data
+);
+
+/** @brief mipc ecall reset ivs struct */
+typedef struct {
+ /** @brief result code*/
+ mipc_result_enum result_code;
+} mipc_ecall_ivs_reset_struct;
+
+/**
+ *@brief callback function prototype for async. SIM status get operation
+ *@param[in] sim_ps_id indicate which sim or ps completed the operation (the value is decided by what is used when doing aysnc. operation)
+ *@param[in] result_ptr point to the execution result
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+*/
+typedef void (*MIPC_ECALL_IVS_RESET_CB)(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_reset_struct *result_ptr,
+ void *cb_priv_ptr
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] result_ptr point to the execution result
+*/
+mipc_api_result_enum mipc_ecall_ivs_reset_sync(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_reset_struct *result_ptr
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] result_ptr point to the execution result
+ *@param[in] dail_address dail address
+ *@param[in] dial_addr_type
+ *@param[in] type, isn't mandatory, default voice
+ *@param[in] domain isn't mandatory,default auto
+ *@param[in] ecc_retry_domain isn't mandatory,default auto
+ *@param[in] ecc_category isn't mandatory,default 0
+ *@param[in] clir isn't mandatory,default false
+*/
+mipc_api_result_enum mipc_ecall_ivs_reset_async(
+ mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_RESET_CB cb,
+ void *cb_priv_ptr
+);
+
+
+/** @brief mipc ecall get sim info resp struct*/
+typedef struct {
+ /** @brief result code*/
+ mipc_result_enum result_code;
+ mipc_ecall_sim_type_const_enum sim_type;
+ char* usim_test_ecall_uri;
+ char* usim_test_ecall_num;
+ char* usim_reconf_ecall_uri;
+ char* usim_reconf_ecall_num;
+} mipc_ecall_ivs_get_sim_info_struct;
+
+/**
+ *@brief callback function prototype for async. SIM status get operation
+ *@param[in] sim_ps_id indicate which sim or ps completed the operation (the value is decided by what is used when doing aysnc. operation)
+ *@param[in] result_ptr point to the execution result
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+*/
+typedef void (*MIPC_ECALL_IVS_GET_SIM_INFO_CB)(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_get_sim_info_struct *result_ptr,
+ void *cb_priv_ptr
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] result_ptr point to the execution result
+ *@param[in] test_address test address
+ *@param[in] num
+ *@param[in] type
+*/
+mipc_api_result_enum mipc_ecall_ivs_get_sim_info_sync(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_get_sim_info_struct *result_ptr
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] cb
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+ *@param[in] test_address test address
+ *@param[in] num
+ *@param[in] type
+*/
+mipc_api_result_enum mipc_ecall_ivs_get_sim_info_async(
+ mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_GET_SIM_INFO_CB cb,
+ void *cb_priv_ptr
+);
+
+
+/** @brief mipc ecall set reg state resp struct*/
+typedef struct {
+ /** @brief result code*/
+ mipc_result_enum result_code;
+} mipc_ecall_ivs_set_reg_state_struct;
+
+
+/**
+ *@brief callback function prototype for async. SIM status get operation
+ *@param[in] sim_ps_id indicate which sim or ps completed the operation (the value is decided by what is used when doing aysnc. operation)
+ *@param[in] result_ptr point to the execution result
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+*/
+typedef void (*MIPC_ECALL_IVS_SET_REG_STATE_CB)(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_reg_state_struct *result_ptr,
+ void *cb_priv_ptr
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] result_ptr point to the execution result
+ *@param[in] test_address test address
+ *@param[in] num
+ *@param[in] type
+*/
+mipc_api_result_enum mipc_ecall_ivs_set_reg_state_sync(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_reg_state_struct *result_ptr,
+ mipc_nw_register_mode_const_enum reg_state
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] cb
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+ *@param[in] test_address test address
+ *@param[in] num
+ *@param[in] type
+*/
+mipc_api_result_enum mipc_ecall_ivs_set_reg_state_async(
+ mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_SET_REG_STATE_CB cb,
+ void *cb_priv_ptr,
+ mipc_nw_register_mode_const_enum reg_state
+);
+
+
+/** @brief mipc ecall set test addr resp struct*/
+typedef struct {
+ /** @brief result code*/
+ mipc_result_enum result_code;
+} mipc_ecall_ivs_set_test_addr_struct;
+
+
+/**
+ *@brief callback function prototype for async. SIM status get operation
+ *@param[in] sim_ps_id indicate which sim or ps completed the operation (the value is decided by what is used when doing aysnc. operation)
+ *@param[in] result_ptr point to the execution result
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+*/
+typedef void (*MIPC_ECALL_IVS_SET_TEST_ADDR_CB)(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_test_addr_struct *result_ptr,
+ void *cb_priv_ptr
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] result_ptr point to the execution result
+ *@param[in] test_address test address
+ *@param[in] num
+ *@param[in] type
+*/
+mipc_api_result_enum mipc_ecall_ivs_set_test_addr_sync(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_test_addr_struct *result_ptr,
+ char *test_address,
+ mipc_call_dial_address_type_const_enum address_type
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] cb
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+ *@param[in] test_address test address
+ *@param[in] num
+ *@param[in] type
+*/
+mipc_api_result_enum mipc_ecall_ivs_set_test_addr_async(
+ mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_SET_TEST_ADDR_CB cb,
+ void *cb_priv_ptr,
+ char *test_address,
+ mipc_call_dial_address_type_const_enum address_type
+);
+
+/** @brief mipc ecall set reconf addr resp struct*/
+typedef struct {
+ /** @brief result code*/
+ mipc_result_enum result_code;
+} mipc_ecall_ivs_set_reconf_addr_struct;
+
+
+/**
+ *@brief callback function prototype for async. SIM status get operation
+ *@param[in] sim_ps_id indicate which sim or ps completed the operation (the value is decided by what is used when doing aysnc. operation)
+ *@param[in] result_ptr point to the execution result
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+*/
+typedef void (*MIPC_ECALL_IVS_SET_RECONF_ADDR_CB)(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_reconf_addr_struct *result_ptr,
+ void *cb_priv_ptr
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] result_ptr point to the execution result
+ *@param[in] test_address test address
+ *@param[in] num
+ *@param[in] type
+*/
+mipc_api_result_enum mipc_ecall_ivs_set_reconf_addr_sync(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_reconf_addr_struct *result_ptr,
+ char *reconf_address,
+ mipc_call_dial_address_type_const_enum address_type
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] cb
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+ *@param[in] test_address test address
+ *@param[in] num
+ *@param[in] type
+*/
+mipc_api_result_enum mipc_ecall_ivs_set_reconf_addr_async(
+ mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_SET_RECONF_ADDR_CB cb,
+ void *cb_priv_ptr,
+ char *reconf_address,
+ mipc_call_dial_address_type_const_enum address_type
+);
+
+/** @brief mipc ecall addr pri resp struct*/
+typedef struct {
+ /** @brief result code*/
+ mipc_result_enum result_code;
+} mipc_ecall_ivs_set_addr_pri_struct;
+
+
+/**
+ *@brief callback function prototype for async. SIM status get operation
+ *@param[in] sim_ps_id indicate which sim or ps completed the operation (the value is decided by what is used when doing aysnc. operation)
+ *@param[in] result_ptr point to the execution result
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+*/
+typedef void (*MIPC_ECALL_IVS_SET_ADDR_PRI_CB)(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_addr_pri_struct *result_ptr,
+ void *cb_priv_ptr
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] result_ptr point to the execution result
+ *@param[in] test_address test address
+ *@param[in] num
+ *@param[in] type
+*/
+mipc_api_result_enum mipc_ecall_ivs_set_addr_pri_sync(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_addr_pri_struct *result_ptr,
+ mipc_ecall_address_priority_class_const_enum first_pri,
+ mipc_ecall_address_priority_class_const_enum second_pri,
+ mipc_ecall_address_priority_class_const_enum third_pri,
+ mipc_ecall_address_priority_class_const_enum fourth_pri
+);
+
+/**
+ *@brief function for sync.
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in, out] cb
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+ *@param[in] test_address test address
+ *@param[in] num
+ *@param[in] type
+*/
+mipc_api_result_enum mipc_ecall_ivs_set_addr_pri_async(
+ mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_SET_ADDR_PRI_CB cb,
+ void *cb_priv_ptr,
+ mipc_ecall_address_priority_class_const_enum first_pri,
+ mipc_ecall_address_priority_class_const_enum second_pri,
+ mipc_ecall_address_priority_class_const_enum third_pri,
+ mipc_ecall_address_priority_class_const_enum fourth_pri
+);
+
+/////////////////////////////////INDICATIONS////////////////////////////////////////////
+typedef struct {
+ /** @brief result code*/
+ mipc_result_enum result_code;
+ /** @brief ecall state list*/
+ mipc_ecall_status_const_enum state;
+ uint8_t callid;
+} mipc_ecall_status_ind_struct;
+
+
+/**
+ *@brief callback function prototype for call status changed notification operation
+ * This function will be called when radio state changed.
+ *@param[in] sim_ps_id indicate which sim or ps received the event (the value is decided by what is used when doing register operation)
+ *@param[in] result_ptr point to the execution result
+ *@param[in] cb_priv_ptr point to the private data assigned when doing async. operation
+*/
+typedef void (*MIPC_ECALL_STATUS_IND_CB)(
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_status_ind_struct *result_ptr,
+ void *cb_priv_ptr
+);
+
+/**
+ *@brief function to register callback function for call status changed
+ *@param[in] sim_ps_id indicate which sim or ps is assigned to do the operation
+ *@param[in] cb which callback function will be invoked after the operation completion
+ *@param[in] cb_priv_ptr point to the callback private data
+*/
+mipc_api_result_enum mipc_ecall_status_register(
+ mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_STATUS_IND_CB cb,
+ void *cb_priv_ptr
+);
+
+
+#endif /* MIPC_ECALL_INTERFACE_H_ */
+
diff --git a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/include/api/mipc_nw_api.h b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/include/api/mipc_nw_api.h
old mode 100644
new mode 100755
index ec05943..40e7099
--- a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/include/api/mipc_nw_api.h
+++ b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/include/api/mipc_nw_api.h
@@ -1,3 +1,4 @@
+//SPDX-License-Identifier: MediaTekProprietary
/*****************************************************************************
* Copyright Statement:
* --------------------
@@ -866,6 +867,11 @@
MIPC_MSG_CB cb,
void *cb_priv_ptr);
+mipc_api_result_enum mipc_nw_etxpwr_ind_register(
+ mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_MSG_CB cb,
+ void *cb_priv_ptr);
+
/**
*@brief callback function prototype for async. home provider set operation
*@param[in] sim_ps_id indicate which sim or ps completed the operation (the value is decided by what is used when doing aysnc. operation)
@@ -1423,6 +1429,7 @@
mipc_api_result_enum mipc_nw_band_mode_set_async(mipc_sim_ps_id_enum sim_ps_id, MIPC_NW_BAND_MODE_SET_CB cb, void *cb_priv_ptr,mipc_nw_band_mode_struct *band_mode);
mipc_api_result_enum mipc_nw_set_rat_async(mipc_sim_ps_id_enum sim_ps_id, MIPC_NW_SET_RAT_CB cb, void *cb_priv_ptr, uint8_t rat,uint8_t prefer_rat);
mipc_api_result_enum mipc_nw_get_rat_async(mipc_sim_ps_id_enum sim_ps_id, MIPC_NW_GET_RAT_CB cb, void *cb_priv_ptr);
+mipc_api_result_enum mipc_nw_get_rat_sync(mipc_sim_ps_id_enum sim_ps_id, mipc_nw_get_rat_struct *cb_priv_ptr);
mipc_api_result_enum mipc_nw_data_get_async(mipc_sim_ps_id_enum sim_ps_id, MIPC_NW_DATA_GET_CB cb, void *cb_priv_ptr);
mipc_api_result_enum mipc_nw_band_mode_get_async(mipc_sim_ps_id_enum sim_ps_id, MIPC_NW_BAND_MODE_GET_CB cb, void *cb_priv_ptr);
mipc_api_result_enum mipc_nw_band_mode_get_sync(mipc_sim_ps_id_enum sim_ps_id, mipc_nw_band_mode_struct *cb_priv_ptr);
diff --git a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_data_api.c b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_data_api.c
old mode 100644
new mode 100755
index 3db527e..7d56c73
--- a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_data_api.c
+++ b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_data_api.c
@@ -17,6 +17,10 @@
#include "mipc_msg.h"
#include "mipc_msg_host.h"
#include "mipc_data_api.h"
+#include "mipc_msg_tlv_api.h"
+#include "mtk_log.h"
+
+#define LOG_TAG "MIPC_DATA_API"
#define mipc_msg_address_decode(addr_len, count, type, addrs)\
do{val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, type, NULL);\
@@ -234,9 +238,9 @@
val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_DATA_DEACT_CALL_IND_T_ID, NULL);
if (NULL == val_ptr) break;
result_ptr->id = *((uint8_t*)val_ptr);
- val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_DATA_DEACT_CALL_IND_T_RES, NULL);
+ val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_DATA_DEACT_CALL_IND_T_NEW_RES, NULL);
if (NULL == val_ptr) break;
- result_ptr->network_error = (mipc_data_error_enum)(*((uint8_t*)val_ptr));
+ result_ptr->network_error = (*((uint32_t*)val_ptr));
result = MIPC_API_RESULT_SUCCESS;
} while (0);
@@ -1129,7 +1133,7 @@
mipc_api_result_enum mipc_data_set_config_sync(mipc_sim_ps_id_enum sim_ps_id, mipc_data_set_data_config_struct_v *result_ptr, mipc_data_config_type_const_enum mobile_data, mipc_data_config_type_const_enum data_roaming, mipc_data_config_type_const_enum volte, mipc_data_config_type_const_enum ims_test_mode, mipc_data_config_type_const_enum data_domestic_roaming, mipc_data_config_type_const_enum data_international_roaming)
{
- return mipc_data_set_config(sim_ps_id, NULL, NULL, NULL, mobile_data, data_roaming, volte, ims_test_mode, data_domestic_roaming, data_international_roaming);
+ return mipc_data_set_config(sim_ps_id, NULL, NULL, result_ptr, mobile_data, data_roaming, volte, ims_test_mode, data_domestic_roaming, data_international_roaming);
}
@@ -1141,3 +1145,95 @@
return mipc_data_set_config(sim_ps_id, cb, cb_priv_ptr, NULL, mobile_data, data_roaming, volte, ims_test_mode, data_domestic_roaming, data_international_roaming);
}
+static mipc_api_result_enum mipc_data_get_retry_timer_decode(mipc_msg_t *msg_cnf_ptr, mipc_data_get_retry_timer_struct_v *result_ptr)
+{
+ void* val_ptr;
+ mipc_api_result_enum result = MIPC_API_RESULT_FAIL;
+ mipc_data_retry_type_const_enum retry_type = mipc_data_retry_type_const_NONE;
+
+ if (result_ptr) {
+ MEMSET(result_ptr, 0, sizeof(mipc_data_get_retry_timer_struct_v));
+ } else {
+ return result;
+ }
+
+ if (msg_cnf_ptr == NULL) {
+ if (result_ptr) {
+ result_ptr->result_code = MIPC_RESULT_TIMEOUT;
+ }
+ return MIPC_API_RESULT_TIMEOUT;
+ }
+ mtkLogD(LOG_TAG, "[%s] result_code=%d", __FUNCTION__, result_ptr->result_code);
+ do {
+ result_ptr->result_code = (mipc_result_enum)mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_T_RESULT, 0xFFFFFFFF);
+ if (MIPC_RESULT_SUCCESS != result_ptr->result_code) {
+ break;
+ }
+ retry_type = mipc_data_retry_timer_cnf_get_retry_type(msg_cnf_ptr, 0);
+
+ if (retry_type == MIPC_DATA_RETRY_TYPE_RETRY_TYPE_NO_SUGGEST) {
+ mtkLogD(LOG_TAG, "[%s] no suggest", __FUNCTION__);
+ result_ptr->retry_timer = -1;
+ } else if (retry_type == MIPC_DATA_RETRY_TYPE_RETRY_TYPE_NO_RETRY) {
+ mtkLogD(LOG_TAG, "[%s] no retry", __FUNCTION__);
+ result_ptr->retry_timer = 0x7fffffff;
+ } else if (retry_type == MIPC_DATA_RETRY_TYPE_RETRY_TYPE_WITH_SUGGEST) {
+ result_ptr->retry_timer = mipc_data_retry_timer_cnf_get_retry_time(msg_cnf_ptr, 0);
+ mtkLogD(LOG_TAG, "[%s] suggest=%d", __FUNCTION__, result_ptr->retry_timer);
+ result_ptr->retry_timer = result_ptr->retry_timer * 1000;
+ }
+
+ result = MIPC_API_RESULT_SUCCESS;
+ } while (0);
+
+ return result;
+}
+
+static void mipc_data_get_retry_timer_cb(mipc_msg_t *msg_ptr, MIPC_API_CB cb, void *cb_priv_ptr)
+{
+ mipc_data_get_retry_timer_struct_v result;
+ mipc_sim_ps_id_enum sim_ps_id = (mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id;
+ MEMSET(&result, 0, sizeof(mipc_data_get_retry_timer_struct_v));
+ mipc_data_get_retry_timer_decode(msg_ptr, &result);
+ cb(sim_ps_id, &result, cb_priv_ptr);
+}
+
+static mipc_api_result_enum mipc_data_get_retry_timer(mipc_sim_ps_id_enum sim_ps_id, MIPC_DATA_RETRY_TIMER_CB cb, void *cb_priv_ptr, mipc_data_get_retry_timer_struct_v *result_ptr, char* apnName)
+{
+ mipc_msg_t *msg_req_ptr = mipc_msg_init(MIPC_DATA_RETRY_TIMER_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
+ mipc_msg_t *msg_cnf_ptr = NULL;
+ mipc_api_result_enum ret = MIPC_API_RESULT_FAIL;
+
+ if (apnName == NULL) {
+ mipc_msg_deinit(msg_req_ptr);
+ return ret;
+ }
+ mipc_data_retry_timer_req_add_mode(msg_req_ptr, MIPC_DATA_RETRY_MODE_QUERY_TIMER);
+ mipc_data_retry_timer_req_add_apn_name(msg_req_ptr, strlen(apnName) + 1, apnName);
+ mtkLogD(LOG_TAG, "[%s] mode=%d, apn=%s", __FUNCTION__, MIPC_DATA_RETRY_MODE_QUERY_TIMER, apnName);
+ if (cb) {
+ mipc_msg_async_api(msg_req_ptr, (void *)mipc_data_get_retry_timer_cb, (MIPC_API_CB)cb, cb_priv_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ return MIPC_API_RESULT_SUCCESS;
+ } else {
+ msg_cnf_ptr = mipc_msg_sync_timeout(msg_req_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ ret = mipc_data_get_retry_timer_decode(msg_cnf_ptr, result_ptr);
+ mipc_msg_deinit(msg_cnf_ptr);
+ return ret;
+ }
+}
+
+mipc_api_result_enum mipc_data_get_retry_timer_sync(mipc_sim_ps_id_enum sim_ps_id, mipc_data_get_retry_timer_struct_v *result_ptr, char* apnName)
+{
+ return mipc_data_get_retry_timer(sim_ps_id, NULL, NULL, result_ptr, apnName);
+}
+
+mipc_api_result_enum mipc_data_get_retry_timer_async(mipc_sim_ps_id_enum sim_ps_id, MIPC_DATA_RETRY_TIMER_CB cb, void *cb_priv_ptr, char* apnName)
+{
+ if (cb == NULL) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_data_get_retry_timer(sim_ps_id, cb, cb_priv_ptr, NULL, apnName);
+}
+
diff --git a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_ecall_api.c b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_ecall_api.c
new file mode 100755
index 0000000..7c34a20
--- /dev/null
+++ b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_ecall_api.c
@@ -0,0 +1,754 @@
+//SPDX-License-Identifier: MediaTekProprietary
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* Copyright (c) [2020], MediaTek Inc. All rights reserved.
+* This software/firmware and related documentation ("MediaTek Software") are
+* protected under relevant copyright laws.
+*
+* The information contained herein is confidential and proprietary to
+* MediaTek Inc. and/or its licensors. Except as otherwise provided in the
+* applicable licensing terms with MediaTek Inc. and/or its licensors, any
+* reproduction, modification, use or disclosure of MediaTek Software, and
+* information contained herein, in whole or in part, shall be strictly
+* prohibited.
+*****************************************************************************/
+#include "mipc_ecall_api.h"
+#include <stddef.h>
+
+static mipc_api_result_enum mipc_call_ivs_onekey_ecall_cnf_decode(mipc_msg_t *msg_cnf_ptr, mipc_call_ivs_onekey_ecall_struct *result_ptr)
+{
+ mipc_api_result_enum result = MIPC_API_RESULT_FAIL;
+
+ if (msg_cnf_ptr == NULL) { //timeout
+ if (result_ptr) {
+ result_ptr->result_code = MIPC_RESULT_TIMEOUT;
+ }
+ return MIPC_API_RESULT_TIMEOUT;
+ }
+ do {
+ void* val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_T_RESULT, NULL);
+ if (NULL == val_ptr) break;
+ result_ptr->result_code = (mipc_result_enum)(*((uint32_t*)val_ptr));
+ //acording to MBIM spec, non-succ result should have no information buffer(9.4.5)
+ if (MIPC_RESULT_SUCCESS != result_ptr->result_code) {
+ result = MIPC_API_RESULT_SUCCESS;
+ break;
+ }
+
+ result = MIPC_API_RESULT_SUCCESS;
+ } while (0);
+ return result;
+}
+
+static void mipc_call_ivs_onekey_ecall_cb(mipc_msg_t *msg_ptr, MIPC_CALL_IVS_ONEKEY_ECALL_CB cb, void *cb_priv_ptr)
+{
+ mipc_call_ivs_onekey_ecall_struct *result_ptr = (mipc_call_ivs_onekey_ecall_struct *)ALLOC(sizeof(mipc_call_ivs_onekey_ecall_struct));
+
+ if (result_ptr) {
+ MEMSET(result_ptr, 0, sizeof(mipc_call_ivs_onekey_ecall_struct));
+ mipc_call_ivs_onekey_ecall_cnf_decode(msg_ptr, result_ptr);
+ }
+ cb((mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id, result_ptr, cb_priv_ptr);
+ if (result_ptr) {
+ FREE(result_ptr);
+ }
+}
+
+static mipc_api_result_enum mipc_call_ivs_onekey_ecall(MIPC_CALL_IVS_ONEKEY_ECALL_CB cb,
+ void *cb_priv_ptr, mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_type_const_enum ecall_type,
+ mipc_ecall_msd_format_const_enum ecall_format,
+ unsigned int msd_length,
+ unsigned char* msd_data,
+ mipc_call_ivs_onekey_ecall_struct *result_ptr)
+{
+ mipc_msg_t *msg_req_ptr = mipc_msg_init(MIPC_CALL_IVS_ONEKEY_ECALL_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
+ mipc_msg_t *msg_cnf_ptr;
+ mipc_api_result_enum ret;
+
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_CALL_IVS_ONEKEY_ECALL_REQ_T_TYPE, ecall_type);
+ if (msd_length > 0) {
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_CALL_IVS_ONEKEY_ECALL_REQ_T_MSD_FORMAT, ecall_format);
+ if (msd_data) {
+ mipc_msg_add_tlv(msg_req_ptr, MIPC_CALL_IVS_ONEKEY_ECALL_REQ_T_MSD, (msd_length < MIPC_MAX_ECALL_MSD_DATA_LEN ? msd_length :MIPC_MAX_ECALL_MSD_DATA_LEN), msd_data);
+ } else {
+ return MIPC_API_RESULT_FAIL;
+ }
+ }
+ if (cb) {
+ mipc_msg_async_api(msg_req_ptr, (void *)mipc_call_ivs_onekey_ecall_cb, (MIPC_API_CB)cb, cb_priv_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ return MIPC_API_RESULT_SUCCESS;
+ } else {
+ msg_cnf_ptr = mipc_msg_sync_timeout(msg_req_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ ret = mipc_call_ivs_onekey_ecall_cnf_decode(msg_cnf_ptr, result_ptr);
+ mipc_msg_deinit(msg_cnf_ptr);
+ return ret;
+ }
+}
+
+mipc_api_result_enum mipc_call_ivs_onekey_ecall_sync(mipc_sim_ps_id_enum sim_ps_id,
+ mipc_call_ivs_onekey_ecall_struct *result_ptr,
+ mipc_ecall_type_const_enum ecall_type,
+ mipc_ecall_msd_format_const_enum ecall_format,
+ unsigned int msd_length,
+ unsigned char* msd_data)
+{
+ if (NULL == result_ptr) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_call_ivs_onekey_ecall(NULL, NULL, sim_ps_id, ecall_type, ecall_format, msd_length, msd_data, result_ptr);
+}
+
+mipc_api_result_enum mipc_call_ivs_onekey_ecall_async(mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_CALL_IVS_ONEKEY_ECALL_CB cb, void *cb_priv_ptr,
+ mipc_ecall_type_const_enum ecall_type,
+ mipc_ecall_msd_format_const_enum ecall_format,
+ unsigned int msd_length,
+ unsigned char* msd_data)
+{
+ if (NULL == cb) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_call_ivs_onekey_ecall(cb, cb_priv_ptr, sim_ps_id, ecall_type, ecall_format, msd_length, msd_data, NULL);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_update_msd_cnf_decode(mipc_msg_t *msg_cnf_ptr, mipc_ecall_ivs_update_msd_struct *result_ptr)
+{
+ mipc_api_result_enum result = MIPC_API_RESULT_FAIL;
+
+ if (msg_cnf_ptr == NULL) { //timeout
+ if (result_ptr) {
+ result_ptr->result_code = MIPC_RESULT_TIMEOUT;
+ }
+ return MIPC_API_RESULT_TIMEOUT;
+ }
+ do {
+ void* val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_T_RESULT, NULL);
+ if (NULL == val_ptr) break;
+ result_ptr->result_code = (mipc_result_enum)(*((uint32_t*)val_ptr));
+ //acording to MBIM spec, non-succ result should have no information buffer(9.4.5)
+ if (MIPC_RESULT_SUCCESS != result_ptr->result_code) {
+ result = MIPC_API_RESULT_SUCCESS;
+ break;
+ }
+
+ result = MIPC_API_RESULT_SUCCESS;
+ } while (0);
+ return result;
+}
+
+static void mipc_ecall_ivs_update_msd_cb(mipc_msg_t *msg_ptr, MIPC_ECALL_IVS_UPDATE_MSD_CB cb, void *cb_priv_ptr)
+{
+ mipc_ecall_ivs_update_msd_struct *result_ptr = (mipc_ecall_ivs_update_msd_struct *)ALLOC(sizeof(mipc_ecall_ivs_update_msd_struct));
+
+ if (result_ptr) {
+ MEMSET(result_ptr, 0, sizeof(mipc_ecall_ivs_update_msd_struct));
+ mipc_ecall_ivs_update_msd_cnf_decode(msg_ptr, result_ptr);
+ }
+ cb((mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id, result_ptr, cb_priv_ptr);
+ if (result_ptr) {
+ FREE(result_ptr);
+ }
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_update_msd(MIPC_ECALL_IVS_UPDATE_MSD_CB cb, void *cb_priv_ptr, mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_msd_format_const_enum msd_format,
+ unsigned int msd_length,
+ unsigned char* msd_data,
+ mipc_ecall_ivs_update_msd_struct *result_ptr)
+{
+ mipc_msg_t *msg_req_ptr = mipc_msg_init(MIPC_ECALL_IVS_UPDATE_MSD_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
+ mipc_msg_t *msg_cnf_ptr;
+ mipc_api_result_enum ret;
+
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_ECALL_IVS_UPDATE_MSD_REQ_T_MSD_FORMAT, msd_format);
+ if (msd_data) {
+ mipc_msg_add_tlv(msg_req_ptr, MIPC_ECALL_IVS_UPDATE_MSD_REQ_T_MSD_DATA, (msd_length < MIPC_MAX_ECALL_MSD_DATA_LEN ? msd_length :MIPC_MAX_ECALL_MSD_DATA_LEN), msd_data);
+ }
+
+ if (cb) {
+ mipc_msg_async_api(msg_req_ptr, (void *)mipc_ecall_ivs_update_msd_cb, (MIPC_API_CB)cb, cb_priv_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ return MIPC_API_RESULT_SUCCESS;
+ } else {
+ msg_cnf_ptr = mipc_msg_sync_timeout(msg_req_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ ret = mipc_ecall_ivs_update_msd_cnf_decode(msg_cnf_ptr, result_ptr);
+ mipc_msg_deinit(msg_cnf_ptr);
+ return ret;
+ }
+}
+
+mipc_api_result_enum mipc_ecall_ivs_update_msd_sync(mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_update_msd_struct *result_ptr,
+ mipc_ecall_msd_format_const_enum msd_format,
+ unsigned int msd_length,
+ unsigned char* msd_data)
+{
+ if (NULL == result_ptr) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_update_msd(NULL, NULL, sim_ps_id, msd_format, msd_length, msd_data, result_ptr);
+}
+
+mipc_api_result_enum mipc_ecall_ivs_update_msd_async(mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_UPDATE_MSD_CB cb, void *cb_priv_ptr,
+ mipc_ecall_msd_format_const_enum msd_format,
+ unsigned int msd_length,
+ unsigned char* msd_data)
+{
+ if (NULL == cb) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_update_msd(cb, cb_priv_ptr, sim_ps_id, msd_format, msd_length, msd_data, NULL);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_reset_cnf_decode(mipc_msg_t *msg_cnf_ptr, mipc_ecall_ivs_reset_struct *result_ptr)
+{
+ mipc_api_result_enum result = MIPC_API_RESULT_FAIL;
+
+ if (msg_cnf_ptr == NULL) { //timeout
+ if (result_ptr) {
+ result_ptr->result_code = MIPC_RESULT_TIMEOUT;
+ }
+ return MIPC_API_RESULT_TIMEOUT;
+ }
+ do {
+ void* val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_T_RESULT, NULL);
+ if (NULL == val_ptr) break;
+ result_ptr->result_code = (mipc_result_enum)(*((uint32_t*)val_ptr));
+ //acording to MBIM spec, non-succ result should have no information buffer(9.4.5)
+ if (MIPC_RESULT_SUCCESS != result_ptr->result_code) {
+ result = MIPC_API_RESULT_SUCCESS;
+ break;
+ }
+
+ result = MIPC_API_RESULT_SUCCESS;
+ } while (0);
+ return result;
+}
+
+static void mipc_ecall_ivs_reset_cb(mipc_msg_t *msg_ptr, MIPC_ECALL_IVS_RESET_CB cb, void *cb_priv_ptr)
+{
+ mipc_ecall_ivs_reset_struct *result_ptr = (mipc_ecall_ivs_reset_struct *)ALLOC(sizeof(mipc_ecall_ivs_reset_struct));
+
+ if (result_ptr) {
+ MEMSET(result_ptr, 0, sizeof(mipc_ecall_ivs_reset_struct));
+ mipc_ecall_ivs_reset_cnf_decode(msg_ptr, result_ptr);
+ }
+ cb((mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id, result_ptr, cb_priv_ptr);
+ if (result_ptr) {
+ FREE(result_ptr);
+ }
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_reset(MIPC_ECALL_IVS_RESET_CB cb, void *cb_priv_ptr, mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_reset_struct *result_ptr)
+{
+ mipc_msg_t *msg_req_ptr = mipc_msg_init(MIPC_ECALL_IVS_RESET_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
+ mipc_msg_t *msg_cnf_ptr;
+ mipc_api_result_enum ret;
+
+ if (cb) {
+ mipc_msg_async_api(msg_req_ptr, (void *)mipc_ecall_ivs_reset_cb, (MIPC_API_CB)cb, cb_priv_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ return MIPC_API_RESULT_SUCCESS;
+ } else {
+ msg_cnf_ptr = mipc_msg_sync_timeout(msg_req_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ ret = mipc_ecall_ivs_reset_cnf_decode(msg_cnf_ptr, result_ptr);
+ mipc_msg_deinit(msg_cnf_ptr);
+ return ret;
+ }
+}
+
+mipc_api_result_enum mipc_ecall_ivs_reset_sync(mipc_sim_ps_id_enum sim_ps_id, mipc_ecall_ivs_reset_struct *result_ptr)
+{
+ if (NULL == result_ptr) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_reset(NULL, NULL, sim_ps_id, result_ptr);
+}
+
+mipc_api_result_enum mipc_ecall_ivs_reset_async(mipc_sim_ps_id_enum sim_ps_id, MIPC_ECALL_IVS_RESET_CB cb, void *cb_priv_ptr)
+{
+ if (NULL == cb) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_reset(cb, cb_priv_ptr, sim_ps_id, NULL);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_set_reg_state_cnf_decode(mipc_msg_t *msg_cnf_ptr, mipc_ecall_ivs_set_reg_state_struct *result_ptr)
+{
+ mipc_api_result_enum result = MIPC_API_RESULT_FAIL;
+
+ if (msg_cnf_ptr == NULL) { //timeout
+ if (result_ptr) {
+ result_ptr->result_code = MIPC_RESULT_TIMEOUT;
+ }
+ return MIPC_API_RESULT_TIMEOUT;
+ }
+ do {
+ void* val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_T_RESULT, NULL);
+ if (NULL == val_ptr) break;
+ result_ptr->result_code = (mipc_result_enum)(*((uint32_t*)val_ptr));
+ //acording to MBIM spec, non-succ result should have no information buffer(9.4.5)
+ if (MIPC_RESULT_SUCCESS != result_ptr->result_code) {
+ result = MIPC_API_RESULT_SUCCESS;
+ break;
+ }
+
+ result = MIPC_API_RESULT_SUCCESS;
+ } while (0);
+ return result;
+}
+
+static void mipc_ecall_ivs_set_reg_state_cb(mipc_msg_t *msg_ptr, MIPC_ECALL_IVS_SET_REG_STATE_CB cb, void *cb_priv_ptr)
+{
+ mipc_ecall_ivs_set_reg_state_struct result_ptr;
+
+ MEMSET(&result_ptr, 0, sizeof(mipc_ecall_ivs_set_reg_state_struct));
+ mipc_ecall_ivs_set_reg_state_cnf_decode(msg_ptr, &result_ptr);
+ cb((mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id, &result_ptr, cb_priv_ptr);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_set_reg_state(MIPC_ECALL_IVS_SET_REG_STATE_CB cb,
+ void *cb_priv_ptr,
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_nw_register_mode_const_enum reg_state,
+ mipc_ecall_ivs_set_reg_state_struct *result_ptr)
+{
+ mipc_msg_t *msg_req_ptr = mipc_msg_init(MIPC_NW_SET_REGISTER_STATE_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
+ mipc_msg_t *msg_cnf_ptr;
+ mipc_api_result_enum ret;
+
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_NW_SET_REGISTER_STATE_REQ_T_MODE, reg_state);
+
+ if (cb) {
+ mipc_msg_async_api(msg_req_ptr, (void *)mipc_ecall_ivs_set_reg_state_cb, (MIPC_API_CB)cb, cb_priv_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ return MIPC_API_RESULT_SUCCESS;
+ } else {
+ msg_cnf_ptr = mipc_msg_sync_timeout(msg_req_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ ret = mipc_ecall_ivs_set_reg_state_cnf_decode(msg_cnf_ptr, result_ptr);
+ mipc_msg_deinit(msg_cnf_ptr);
+ return ret;
+ }
+}
+
+mipc_api_result_enum mipc_ecall_ivs_set_reg_state_sync(mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_reg_state_struct *result_ptr,
+ mipc_nw_register_mode_const_enum reg_state)
+{
+ if (NULL == result_ptr) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_set_reg_state(NULL, NULL, sim_ps_id, reg_state, result_ptr);
+}
+
+mipc_api_result_enum mipc_ecall_ivs_set_reg_state_async(mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_SET_REG_STATE_CB cb, void *cb_priv_ptr,
+ mipc_nw_register_mode_const_enum reg_state)
+{
+ if (NULL == cb) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_set_reg_state(cb, cb_priv_ptr, sim_ps_id, reg_state, NULL);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_get_sim_info_cnf_decode(mipc_msg_t *msg_cnf_ptr, mipc_ecall_ivs_get_sim_info_struct *result_ptr)
+{
+ mipc_api_result_enum result = MIPC_API_RESULT_FAIL;
+ uint16_t val_len = 0;
+
+ if (msg_cnf_ptr == NULL) { //timeout
+ if (result_ptr) {
+ result_ptr->result_code = MIPC_RESULT_TIMEOUT;
+ }
+ return MIPC_API_RESULT_TIMEOUT;
+ }
+ do {
+ void* val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_T_RESULT, NULL);
+ if (NULL == val_ptr) break;
+ result_ptr->result_code = (mipc_result_enum)(*((uint32_t*)val_ptr));
+ //acording to MBIM spec, non-succ result should have no information buffer(9.4.5)
+ if (MIPC_RESULT_SUCCESS != result_ptr->result_code) {
+ result = MIPC_API_RESULT_SUCCESS;
+ break;
+ }
+
+ val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_ECALL_IVS_GET_SIM_INFO_CNF_T_SIM_TYPE, NULL);
+ if (NULL == val_ptr) break;
+ result_ptr->sim_type = (uint32_t)(*((uint32_t*)val_ptr));
+
+ result = MIPC_API_RESULT_SUCCESS;
+ } while (0);
+ return result;
+}
+
+static void mipc_ecall_ivs_get_sim_info_cb(mipc_msg_t *msg_ptr, MIPC_ECALL_IVS_GET_SIM_INFO_CB cb, void *cb_priv_ptr)
+{
+ mipc_ecall_ivs_get_sim_info_struct result_ptr;
+
+ MEMSET(&result_ptr, 0, sizeof(mipc_ecall_ivs_get_sim_info_struct));
+ mipc_ecall_ivs_get_sim_info_cnf_decode(msg_ptr, &result_ptr);
+ cb((mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id, &result_ptr, cb_priv_ptr);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_get_sim_info(MIPC_ECALL_IVS_GET_SIM_INFO_CB cb,
+ void *cb_priv_ptr,
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_get_sim_info_struct *result_ptr)
+{
+ mipc_msg_t *msg_req_ptr = mipc_msg_init(MIPC_ECALL_IVS_GET_SIM_INFO_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
+ mipc_msg_t *msg_cnf_ptr;
+ mipc_api_result_enum ret;
+
+ if (cb) {
+ mipc_msg_async_api(msg_req_ptr, (void *)mipc_ecall_ivs_get_sim_info_cb, (MIPC_API_CB)cb, cb_priv_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ return MIPC_API_RESULT_SUCCESS;
+ } else {
+ msg_cnf_ptr = mipc_msg_sync_timeout(msg_req_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ ret = mipc_ecall_ivs_get_sim_info_cnf_decode(msg_cnf_ptr, result_ptr);
+ mipc_msg_deinit(msg_cnf_ptr);
+ return ret;
+ }
+}
+
+mipc_api_result_enum mipc_ecall_ivs_get_sim_info_sync(mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_get_sim_info_struct *result_ptr)
+{
+ if (NULL == result_ptr) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_get_sim_info(NULL, NULL, sim_ps_id, result_ptr);
+}
+
+mipc_api_result_enum mipc_ecall_ivs_get_sim_info_async(mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_GET_SIM_INFO_CB cb, void *cb_priv_ptr) {
+ if (NULL == cb) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_get_sim_info(cb, cb_priv_ptr, sim_ps_id, NULL);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_set_test_addr_cnf_decode(mipc_msg_t *msg_cnf_ptr, mipc_ecall_ivs_set_test_addr_struct *result_ptr)
+{
+ mipc_api_result_enum result = MIPC_API_RESULT_FAIL;
+
+ if (msg_cnf_ptr == NULL) { //timeout
+ if (result_ptr) {
+ result_ptr->result_code = MIPC_RESULT_TIMEOUT;
+ }
+ return MIPC_API_RESULT_TIMEOUT;
+ }
+ do {
+ void* val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_T_RESULT, NULL);
+ if (NULL == val_ptr) break;
+ result_ptr->result_code = (mipc_result_enum)(*((uint32_t*)val_ptr));
+ //acording to MBIM spec, non-succ result should have no information buffer(9.4.5)
+ if (MIPC_RESULT_SUCCESS != result_ptr->result_code) {
+ result = MIPC_API_RESULT_SUCCESS;
+ break;
+ }
+
+ result = MIPC_API_RESULT_SUCCESS;
+ } while (0);
+ return result;
+}
+
+static void mipc_ecall_ivs_set_test_addr_cb(mipc_msg_t *msg_ptr, MIPC_ECALL_IVS_SET_TEST_ADDR_CB cb, void *cb_priv_ptr)
+{
+ mipc_ecall_ivs_set_test_addr_struct result_ptr;
+
+ MEMSET(&result_ptr, 0, sizeof(mipc_ecall_ivs_set_test_addr_struct));
+ mipc_ecall_ivs_set_test_addr_cnf_decode(msg_ptr, &result_ptr);
+ cb((mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id, &result_ptr, cb_priv_ptr);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_set_test_addr(MIPC_ECALL_IVS_SET_TEST_ADDR_CB cb,
+ void *cb_priv_ptr,
+ mipc_sim_ps_id_enum sim_ps_id,
+ char* test_address,
+ mipc_call_dial_address_type_const_enum address_type,
+ mipc_ecall_ivs_set_test_addr_struct *result_ptr)
+{
+ mipc_msg_t *msg_req_ptr = mipc_msg_init(MIPC_ECALL_IVS_SET_TEST_ADDR_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
+ mipc_msg_t *msg_cnf_ptr;
+ mipc_api_result_enum ret;
+
+ if (test_address) {
+ mipc_msg_add_tlv(msg_req_ptr, MIPC_ECALL_IVS_SET_TEST_ADDR_REQ_T_ADDRESS,
+ (strlen(test_address) < MIPC_MAX_DIAL_ADDRESS_LEN ? strlen(test_address) :MIPC_MAX_DIAL_ADDRESS_LEN), test_address);
+ }
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_ECALL_IVS_SET_TEST_ADDR_REQ_T_ADDR_TYPE, address_type);
+
+ if (cb) {
+ mipc_msg_async_api(msg_req_ptr, (void *)mipc_ecall_ivs_set_test_addr_cb, (MIPC_API_CB)cb, cb_priv_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ return MIPC_API_RESULT_SUCCESS;
+ } else {
+ msg_cnf_ptr = mipc_msg_sync_timeout(msg_req_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ ret = mipc_ecall_ivs_set_test_addr_cnf_decode(msg_cnf_ptr, result_ptr);
+ mipc_msg_deinit(msg_cnf_ptr);
+ return ret;
+ }
+}
+
+mipc_api_result_enum mipc_ecall_ivs_set_test_addr_sync(mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_test_addr_struct *result_ptr,
+ char* test_address,
+ mipc_call_dial_address_type_const_enum address_type)
+{
+ if (NULL == result_ptr || NULL == test_address) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_set_test_addr(NULL, NULL, sim_ps_id, test_address, address_type, result_ptr);
+}
+
+mipc_api_result_enum mipc_ecall_ivs_set_test_addr_async(mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_SET_TEST_ADDR_CB cb, void *cb_priv_ptr,
+ char* test_address,
+ mipc_call_dial_address_type_const_enum address_type)
+{
+ if (NULL == cb) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_set_test_addr(cb, cb_priv_ptr, sim_ps_id, test_address, address_type, NULL);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_set_reconf_addr_cnf_decode(mipc_msg_t *msg_cnf_ptr, mipc_ecall_ivs_set_reconf_addr_struct *result_ptr)
+{
+ mipc_api_result_enum result = MIPC_API_RESULT_FAIL;
+
+ if (msg_cnf_ptr == NULL) { //timeout
+ if (result_ptr) {
+ result_ptr->result_code = MIPC_RESULT_TIMEOUT;
+ }
+ return MIPC_API_RESULT_TIMEOUT;
+ }
+ do {
+ void* val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_T_RESULT, NULL);
+ if (NULL == val_ptr) break;
+ result_ptr->result_code = (mipc_result_enum)(*((uint32_t*)val_ptr));
+ //acording to MBIM spec, non-succ result should have no information buffer(9.4.5)
+ if (MIPC_RESULT_SUCCESS != result_ptr->result_code) {
+ result = MIPC_API_RESULT_SUCCESS;
+ break;
+ }
+
+ result = MIPC_API_RESULT_SUCCESS;
+ } while (0);
+ return result;
+}
+
+static void mipc_ecall_ivs_set_reconf_addr_cb(mipc_msg_t *msg_ptr, MIPC_ECALL_IVS_SET_RECONF_ADDR_CB cb, void *cb_priv_ptr)
+{
+ mipc_ecall_ivs_set_reconf_addr_struct result_ptr;
+
+ MEMSET(&result_ptr, 0, sizeof(mipc_ecall_ivs_set_addr_pri_struct));
+ mipc_ecall_ivs_set_reconf_addr_cnf_decode(msg_ptr, &result_ptr);
+ cb((mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id, &result_ptr, cb_priv_ptr);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_set_reconf_addr(MIPC_ECALL_IVS_SET_RECONF_ADDR_CB cb,
+ void *cb_priv_ptr,
+ mipc_sim_ps_id_enum sim_ps_id,
+ char* reconf_address,
+ mipc_call_dial_address_type_const_enum address_type,
+ mipc_ecall_ivs_set_reconf_addr_struct *result_ptr)
+{
+ mipc_msg_t *msg_req_ptr = mipc_msg_init(MIPC_ECALL_IVS_SET_RECONF_ADDR_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
+ mipc_msg_t *msg_cnf_ptr;
+ mipc_api_result_enum ret;
+
+ if (reconf_address) {
+ mipc_msg_add_tlv(msg_req_ptr, MIPC_ECALL_IVS_SET_RECONF_ADDR_REQ_T_ADDRESS,
+ (strlen(reconf_address) < MIPC_MAX_DIAL_ADDRESS_LEN ? strlen(reconf_address) :MIPC_MAX_DIAL_ADDRESS_LEN), reconf_address);
+ }
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_ECALL_IVS_SET_RECONF_ADDR_REQ_T_ADDR_TYPE, address_type);
+
+ if (cb) {
+ mipc_msg_async_api(msg_req_ptr, (void *)mipc_ecall_ivs_set_reconf_addr_cb, (MIPC_API_CB)cb, cb_priv_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ return MIPC_API_RESULT_SUCCESS;
+ } else {
+ msg_cnf_ptr = mipc_msg_sync_timeout(msg_req_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ ret = mipc_ecall_ivs_set_reconf_addr_cnf_decode(msg_cnf_ptr, result_ptr);
+ mipc_msg_deinit(msg_cnf_ptr);
+ return ret;
+ }
+}
+
+mipc_api_result_enum mipc_ecall_ivs_set_reconf_addr_sync(mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_reconf_addr_struct *result_ptr,
+ char* reconf_address,
+ mipc_call_dial_address_type_const_enum address_type)
+{
+ if (NULL == result_ptr) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_set_reconf_addr(NULL, NULL, sim_ps_id, reconf_address, address_type, result_ptr);
+}
+
+mipc_api_result_enum mipc_ecall_ivs_set_reconf_addr_async(mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_SET_RECONF_ADDR_CB cb, void *cb_priv_ptr,
+ char* reconf_address,
+ mipc_call_dial_address_type_const_enum address_type)
+{
+ if (NULL == cb) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_set_test_addr(cb, cb_priv_ptr, sim_ps_id, reconf_address, address_type, NULL);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_set_addr_pri_cnf_decode(mipc_msg_t *msg_cnf_ptr, mipc_ecall_ivs_set_addr_pri_struct *result_ptr)
+{
+ mipc_api_result_enum result = MIPC_API_RESULT_FAIL;
+
+ if (msg_cnf_ptr == NULL) { //timeout
+ if (result_ptr) {
+ result_ptr->result_code = MIPC_RESULT_TIMEOUT;
+ }
+ return MIPC_API_RESULT_TIMEOUT;
+ }
+ do {
+ void* val_ptr = mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_T_RESULT, NULL);
+ if (NULL == val_ptr) break;
+ result_ptr->result_code = (mipc_result_enum)(*((uint32_t*)val_ptr));
+ //acording to MBIM spec, non-succ result should have no information buffer(9.4.5)
+ if (MIPC_RESULT_SUCCESS != result_ptr->result_code) {
+ result = MIPC_API_RESULT_SUCCESS;
+ break;
+ }
+
+ result = MIPC_API_RESULT_SUCCESS;
+ } while (0);
+ return result;
+}
+
+static void mipc_ecall_ivs_set_addr_pri_cb(mipc_msg_t *msg_ptr, MIPC_ECALL_IVS_SET_ADDR_PRI_CB cb, void *cb_priv_ptr)
+{
+ mipc_ecall_ivs_set_addr_pri_struct result_ptr;
+
+ MEMSET(&result_ptr, 0, sizeof(mipc_ecall_ivs_set_addr_pri_struct));
+ mipc_ecall_ivs_set_addr_pri_cnf_decode(msg_ptr, &result_ptr);
+ cb((mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id, &result_ptr, cb_priv_ptr);
+}
+
+static mipc_api_result_enum mipc_ecall_ivs_set_addr_pri(MIPC_ECALL_IVS_SET_ADDR_PRI_CB cb,
+ void *cb_priv_ptr,
+ mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_address_priority_class_const_enum first_pri,
+ mipc_ecall_address_priority_class_const_enum second_pri,
+ mipc_ecall_address_priority_class_const_enum third_pri,
+ mipc_ecall_address_priority_class_const_enum fourth_pri,
+ mipc_ecall_ivs_set_addr_pri_struct *result_ptr)
+{
+ mipc_msg_t *msg_req_ptr = mipc_msg_init(MIPC_ECALL_IVS_SET_ADDR_PRI_REQ, (mipc_msg_sim_ps_id_enum)sim_ps_id);
+ mipc_msg_t *msg_cnf_ptr;
+ mipc_api_result_enum ret;
+
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_ECALL_IVS_SET_ADDR_PRI_REQ_T_FIRST_PRI, first_pri);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_ECALL_IVS_SET_ADDR_PRI_REQ_T_SECOND_PRI, second_pri);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_ECALL_IVS_SET_ADDR_PRI_REQ_T_THIRD_PRI, third_pri);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_ECALL_IVS_SET_ADDR_PRI_REQ_T_FOURTH_PRI, fourth_pri);
+
+ if (cb) {
+ mipc_msg_async_api(msg_req_ptr, (void *)mipc_ecall_ivs_set_addr_pri_cb, (MIPC_API_CB)cb, cb_priv_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ return MIPC_API_RESULT_SUCCESS;
+ } else {
+ msg_cnf_ptr = mipc_msg_sync_timeout(msg_req_ptr);
+ mipc_msg_deinit(msg_req_ptr);
+ ret = mipc_ecall_ivs_set_addr_pri_cnf_decode(msg_cnf_ptr, result_ptr);
+ mipc_msg_deinit(msg_cnf_ptr);
+ return ret;
+ }
+}
+
+mipc_api_result_enum mipc_ecall_ivs_set_addr_pri_sync(mipc_sim_ps_id_enum sim_ps_id,
+ mipc_ecall_ivs_set_addr_pri_struct *result_ptr,
+ mipc_ecall_address_priority_class_const_enum first_pri,
+ mipc_ecall_address_priority_class_const_enum second_pri,
+ mipc_ecall_address_priority_class_const_enum third_pri,
+ mipc_ecall_address_priority_class_const_enum fourth_pri)
+{
+ if (NULL == result_ptr) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_set_addr_pri(NULL, NULL, sim_ps_id, first_pri, second_pri, third_pri, fourth_pri, result_ptr);
+}
+
+mipc_api_result_enum mipc_ecall_ivs_set_addr_pri_async(mipc_sim_ps_id_enum sim_ps_id,
+ MIPC_ECALL_IVS_SET_ADDR_PRI_CB cb, void *cb_priv_ptr,
+ mipc_ecall_address_priority_class_const_enum first_pri,
+ mipc_ecall_address_priority_class_const_enum second_pri,
+ mipc_ecall_address_priority_class_const_enum third_pri,
+ mipc_ecall_address_priority_class_const_enum fourth_pri)
+{
+ if (NULL == cb) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_ecall_ivs_set_addr_pri(cb, cb_priv_ptr, sim_ps_id, first_pri, second_pri, third_pri, fourth_pri, NULL);
+}
+
+//////////////////////////////////////////INDICATIONS////////////////////////////////////////////
+static mipc_api_result_enum mipc_ecall_status_ind(mipc_msg_t *msg_ptr, mipc_ecall_status_ind_struct *result_ptr)
+{
+ void *val_ptr;
+ uint8_t api_error = 1;
+
+ do {
+ result_ptr->result_code = MIPC_RESULT_SUCCESS;
+
+ if ((val_ptr = mipc_msg_get_val_ptr(msg_ptr, MIPC_ECALL_STATUS_IND_T_STATE, NULL)) == NULL) break;
+ result_ptr->state = (mipc_ecall_status_const_enum) * ((uint8_t *)val_ptr);
+ if ((val_ptr = mipc_msg_get_val_ptr(msg_ptr, MIPC_ECALL_STATUS_IND_T_CALL_ID, NULL)) == NULL) break;
+ result_ptr->callid = (uint8_t) * ((uint8_t *)val_ptr);
+
+ api_error = 0;
+ } while (0);
+
+ if (api_error) {
+ result_ptr->result_code = MIPC_RESULT_FAILURE;
+ return MIPC_API_RESULT_FAIL;
+ } else {
+ return MIPC_API_RESULT_SUCCESS;
+ }
+}
+
+static void mipc_ecall_status_ind_cb(mipc_msg_t *msg_ptr, MIPC_ECALL_STATUS_IND_CB cb, void *cb_priv_ptr)
+{
+ mipc_ecall_status_ind_struct result_ptr;
+
+ MEMSET(&result_ptr, 0, sizeof(mipc_ecall_status_ind_struct));
+ if (mipc_ecall_status_ind(msg_ptr, &result_ptr) == MIPC_API_RESULT_SUCCESS) {
+ cb((mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id, &result_ptr, cb_priv_ptr);
+ }
+}
+
+mipc_api_result_enum mipc_ecall_status_register(mipc_sim_ps_id_enum sim_ps_id, MIPC_ECALL_STATUS_IND_CB cb, void *cb_priv_ptr)
+{
+ void *callback;
+ if (cb) {
+ callback = (void *)mipc_ecall_status_ind_cb;
+ } else {
+ callback = NULL;
+ }
+
+ if (mipc_msg_register_ind_api((mipc_msg_sim_ps_id_enum)sim_ps_id, MIPC_ECALL_STATUS_IND, callback, (MIPC_API_CB)cb, cb_priv_ptr) == 0) {
+ return MIPC_API_RESULT_SUCCESS;
+ } else {
+ return MIPC_API_RESULT_FAIL;
+ }
+}
+
diff --git a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_nw_api.c b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_nw_api.c
old mode 100644
new mode 100755
index e14ccfc..f68e16b
--- a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_nw_api.c
+++ b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_nw_api.c
@@ -1,3 +1,4 @@
+//SPDX-License-Identifier: MediaTekProprietary
/*****************************************************************************
* Copyright Statement:
* --------------------
@@ -1042,6 +1043,14 @@
}
}
+mipc_api_result_enum mipc_nw_etxpwr_ind_register(mipc_sim_ps_id_enum sim_ps_id, MIPC_MSG_CB cb, void *cb_priv_ptr)
+{
+ if (mipc_msg_register_ind_api((mipc_msg_sim_ps_id_enum)sim_ps_id, MIPC_NW_ETXPWR_IND, cb, NULL, cb_priv_ptr) == 0) {
+ return MIPC_API_RESULT_SUCCESS;
+ } else {
+ return MIPC_API_RESULT_FAIL;
+ }
+}
/////////////////////////////////////////////////////////////////////////////////////////////////////
//fill result_ptr according to msg_ptr
@@ -2680,11 +2689,19 @@
//STEP5: fill the result
do {
- if ((t_result_ptr = (uint32_t *)mipc_msg_get_val_ptr(msg_ptr, MIPC_T_RESULT, NULL)) == NULL) break;
+ if ((t_result_ptr = (uint32_t *)mipc_msg_get_val_ptr(msg_ptr, MIPC_T_RESULT, NULL)) == NULL) {
+ mtkLogE(LOG_TAG, "%s result=NULL", __FUNCTION__);
+ break;
+ }
+
if (*t_result_ptr == 0) { // SUCCESS
result_ptr->result_code = MIPC_RESULT_SUCCESS;
- if ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_CS_CNF_T_REG_INFO, &t_nwtmp_len)) == NULL) break;
+ if ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_CS_CNF_T_REG_INFO, &t_nwtmp_len)) == NULL) {
+ mtkLogE(LOG_TAG, "%s REG_INFO=NULL", __FUNCTION__);
+ break;
+ }
+
result_ptr->cs_reg.stat = ((mipc_nw_cs_reg_info_struct4 *)t_nwtmp_ptr)->stat;
result_ptr->cs_reg.rat = ((mipc_nw_cs_reg_info_struct4 *)t_nwtmp_ptr)->rat;
result_ptr->cs_reg.css = ((mipc_nw_cs_reg_info_struct4 *)t_nwtmp_ptr)->css;
@@ -2692,10 +2709,19 @@
result_ptr->cs_reg.is_in_prl = ((mipc_nw_cs_reg_info_struct4 *)t_nwtmp_ptr)->is_in_prl;
result_ptr->cs_reg.def_roaming_ind = ((mipc_nw_cs_reg_info_struct4 *)t_nwtmp_ptr)->def_roaming_ind;
result_ptr->cs_reg.reason_for_denial = ((mipc_nw_cs_reg_info_struct4 *)t_nwtmp_ptr)->reason_for_denial;
- if ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_CS_CNF_T_CELL_TYPE, &t_nwtmp_len)) == NULL) break;
+ if ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_CS_CNF_T_CELL_TYPE, &t_nwtmp_len)) == NULL) {
+ mtkLogE(LOG_TAG, "%s CELL_TYPE=NULL", __FUNCTION__);
+ break;
+ }
+
signal_type = (mipc_nw_cell_type_const_enum )(*(uint8_t *)t_nwtmp_ptr);
result_ptr->cell_list.cell_type = signal_type;
- if ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_CS_CNF_T_CELL_INFO, &t_nwtmp_len)) == NULL) break;
+ if ((signal_type != mipc_nw_cell_type_const_NONE) &&
+ ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_CS_CNF_T_CELL_INFO, &t_nwtmp_len)) == NULL)) {
+ mtkLogE(LOG_TAG, "%s cell_type!=NONE && CELL_INFO=NULL", __FUNCTION__);
+ break;
+ }
+
switch(signal_type)
{
case MIPC_NW_CELL_TYPE_GSM:
@@ -2816,11 +2842,19 @@
//STEP5: fill the result
do {
- if ((t_result_ptr = (uint32_t *)mipc_msg_get_val_ptr(msg_ptr, MIPC_T_RESULT, NULL)) == NULL) break;
+ if ((t_result_ptr = (uint32_t *)mipc_msg_get_val_ptr(msg_ptr, MIPC_T_RESULT, NULL)) == NULL) {
+ mtkLogE(LOG_TAG, "%s result=NULL", __FUNCTION__);
+ break;
+ }
+
if (*t_result_ptr == 0) { // SUCCESS
result_ptr->result_code = MIPC_RESULT_SUCCESS;
- if ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_PS_CNF_T_REG_INFO, &t_nwtmp_len)) == NULL) break;
+ if ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_PS_CNF_T_REG_INFO, &t_nwtmp_len)) == NULL) {
+ mtkLogE(LOG_TAG, "%s REG_INFO=NULL", __FUNCTION__);
+ break;
+ }
+
result_ptr->ps_reg.stat = ((mipc_nw_ps_reg_info_struct4 *)t_nwtmp_ptr)->stat;
result_ptr->ps_reg.rat = ((mipc_nw_ps_reg_info_struct4 *)t_nwtmp_ptr)->rat;
result_ptr->ps_reg.reason_for_denial = ((mipc_nw_ps_reg_info_struct4 *)t_nwtmp_ptr)->reason_for_denial;
@@ -2828,10 +2862,19 @@
result_ptr->ps_reg.is_in_prl = ((mipc_nw_ps_reg_info_struct4 *)t_nwtmp_ptr)->is_in_prl;
result_ptr->ps_reg.def_roaming_ind = ((mipc_nw_ps_reg_info_struct4 *)t_nwtmp_ptr)->def_roaming_ind;
result_ptr->ps_reg.reason_for_denial = ((mipc_nw_ps_reg_info_struct4 *)t_nwtmp_ptr)->reason_for_denial;
- if ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_PS_CNF_T_CELL_TYPE, &t_nwtmp_len)) == NULL) break;
+ if ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_PS_CNF_T_CELL_TYPE, &t_nwtmp_len)) == NULL) {
+ mtkLogE(LOG_TAG, "%s CELL_TYPE=NULL", __FUNCTION__);
+ break;
+ }
+
signal_type = (mipc_nw_cell_type_const_enum )(*(uint8_t *)t_nwtmp_ptr);
result_ptr->cell_list.cell_type = signal_type;
- if ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_PS_CNF_T_CELL_INFO, &t_nwtmp_len)) == NULL) break;
+ if ((signal_type != mipc_nw_cell_type_const_NONE) &&
+ ((t_nwtmp_ptr = (char *)mipc_msg_get_val_ptr(msg_ptr, MIPC_NW_GET_PS_CNF_T_CELL_INFO, &t_nwtmp_len)) == NULL)) {
+ mtkLogE(LOG_TAG, "%s cell_type!=NONE && CELL_INFO=NULL", __FUNCTION__);
+ break;
+ }
+
switch(signal_type)
{
case MIPC_NW_CELL_TYPE_GSM:
@@ -3387,3 +3430,11 @@
return mipc_nw_get_rat_req(cb, cb_priv_ptr, sim_ps_id, NULL);
}
+mipc_api_result_enum mipc_nw_get_rat_sync(mipc_sim_ps_id_enum sim_ps_id, mipc_nw_get_rat_struct *cb_priv_ptr)
+{
+ //SETP0: check input
+ if (cb_priv_ptr == NULL) {
+ return MIPC_API_RESULT_FAIL;
+ }
+ return mipc_nw_get_rat_req(NULL, cb_priv_ptr, sim_ps_id, cb_priv_ptr);
+}
diff --git a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_sim_api.c b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_sim_api.c
old mode 100644
new mode 100755
index b6cb1c5..b07312d
--- a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_sim_api.c
+++ b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_sim_api.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/*****************************************************************************
* Copyright Statement:
* --------------------
@@ -1896,6 +1897,7 @@
mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SIM_CHANNEL_RESTRICTED_ACCESS_REQ_T_P2, p2);
mipc_msg_add_tlv_uint16(msg_req_ptr, MIPC_SIM_CHANNEL_RESTRICTED_ACCESS_REQ_T_P3, p3);
mipc_msg_add_tlv_uint16(msg_req_ptr, MIPC_SIM_CHANNEL_RESTRICTED_ACCESS_REQ_T_DATA_LEN, data_len);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SIM_CHANNEL_RESTRICTED_ACCESS_REQ_T_FCP_CONVERT, MIPC_SIM_FCP_CONVERT_ENABLE);
if (data_ptr) {
mipc_msg_add_tlv(msg_req_ptr, MIPC_SIM_CHANNEL_RESTRICTED_ACCESS_REQ_T_DATA, data_len, data_ptr);
}
@@ -4316,9 +4318,9 @@
do {
result_ptr->result_code = MIPC_RESULT_SUCCESS;
if ((val_ptr = mipc_msg_get_val_ptr(msg_ptr, MIPC_STK_SIM_REFRESH_IND_T_SIM_REFRESH_RESULT, NULL)) == NULL) break;
- result_ptr->sim_refresh_result = (mipc_sim_refresh_result_type_const_enum) * ((uint8_t *)val_ptr);
+ result_ptr->sim_refresh_result = mipc_stk_sim_refresh_ind_get_sim_refresh_result(msg_ptr, mipc_sim_refresh_result_type_const_NONE);
if ((val_ptr = mipc_msg_get_val_ptr(msg_ptr, MIPC_STK_SIM_REFRESH_IND_T_EF_ID, NULL)) != NULL) {
- result_ptr->ef_id = (uint32_t) * ((uint32_t *)val_ptr);
+ result_ptr->ef_id = mipc_stk_sim_refresh_ind_get_ef_id(msg_ptr, 0);
} else {
result_ptr->ef_id = UINT32_MAX;
}
@@ -4341,7 +4343,7 @@
static void mipc_stk_sim_refresh_ind_cb(mipc_msg_t *msg_ptr, MIPC_STK_SIM_REFRESH_IND_CB cb, void *cb_priv_ptr)
{
mipc_stk_sim_refresh_ind_struct result_ptr;
- MEMSET(&result_ptr, 0, sizeof(mipc_sim_physical_slots_mapping_done_ind_struct));
+ MEMSET(&result_ptr, 0, sizeof(mipc_stk_sim_refresh_ind_struct));
if (mipc_stk_sim_refresh_ind(msg_ptr, &result_ptr) == MIPC_API_RESULT_SUCCESS) {
cb((mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id, &result_ptr, cb_priv_ptr);
} else {
diff --git a/src/telephonyware/3.0/libvendor-ril/apn/inc/LogUtils.h b/src/telephonyware/3.0/libvendor-ril/apn/inc/LogUtils.h
index 5c0a402..a8d6085 100755
--- a/src/telephonyware/3.0/libvendor-ril/apn/inc/LogUtils.h
+++ b/src/telephonyware/3.0/libvendor-ril/apn/inc/LogUtils.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/*
* LogUtils.h
*
@@ -12,7 +13,7 @@
#undef LOG_TAG
#define LOG_TAG "APN"
-namespace logutils {
+namespace apn_logutils {
class SLOG {
private:
const static char* SEPERATE;
@@ -25,7 +26,7 @@
};
}
-#define SLOGD(...) logutils::SLOG::D(LOG_TAG, ##__VA_ARGS__)
-#define SLOGFATAL(f, a...) logutils::SLOG::FATAL(LOG_TAG, f "(%s, %d)", __FILE__, __LINE__,## a)
+#define SLOGD(...) apn_logutils::SLOG::D(LOG_TAG, ##__VA_ARGS__)
+#define SLOGFATAL(f, a...) apn_logutils::SLOG::FATAL(LOG_TAG, f "(%s, %d)", ##a, __FILE__, __LINE__)
#endif /* SRC_LogUtils_H_ */
diff --git a/src/telephonyware/3.0/libvendor-ril/apn/src/LogUtils.cpp b/src/telephonyware/3.0/libvendor-ril/apn/src/LogUtils.cpp
index 0997cfa..2dc7743 100755
--- a/src/telephonyware/3.0/libvendor-ril/apn/src/LogUtils.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/apn/src/LogUtils.cpp
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/*
* LogUtils.cpp
*
@@ -15,7 +16,7 @@
#include <stdio.h>
using namespace std;
-using logutils::SLOG;
+using apn_logutils::SLOG;
#define LOG_BUF_SIZE 1024
diff --git a/src/telephonyware/3.0/libvendor-ril/apn/src/apn_manager.cpp b/src/telephonyware/3.0/libvendor-ril/apn/src/apn_manager.cpp
index f9654b2..8b2b80a 100755
--- a/src/telephonyware/3.0/libvendor-ril/apn/src/apn_manager.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/apn/src/apn_manager.cpp
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/*
* apn_manager.cpp
*
@@ -186,8 +187,10 @@
sql.append(";");
char* errmsg = NULL;
if (sqlite3_exec(mDb, sql.c_str(), NULL, NULL, &errmsg) != SQLITE_OK) {
- SLOGFATAL("update error %s", errmsg);
- return APN_ERR;
+ if(errmsg != NULL) {
+ SLOGFATAL("update error %s", errmsg);
+ }
+ return APN_ERR;
}
return APN_OK;
}
diff --git a/src/telephonyware/3.0/libvendor-ril/include/telephony/mtk_ril_ivt.h b/src/telephonyware/3.0/libvendor-ril/include/telephony/mtk_ril_ivt.h
old mode 100644
new mode 100755
index 693672e..dad33d5
--- a/src/telephonyware/3.0/libvendor-ril/include/telephony/mtk_ril_ivt.h
+++ b/src/telephonyware/3.0/libvendor-ril/include/telephony/mtk_ril_ivt.h
@@ -1,3 +1,4 @@
+//SPDX-License-Identifier: MediaTekProprietary
/*
* mtk_ril_ivt.h
*
@@ -460,9 +461,18 @@
RIL_UNSOL_ECALL_ALACK_CLEARDOWN_RECEIVED = 5,
RIL_UNSOL_ECALL_ACTIVE = 11,
RIL_UNSOL_ECALL_DISCONNECTED = 12,
+ RIL_UNSOL_ECALL_IMS_ACTIVE = 13,
+ RIL_UNSOL_ECALL_IMS_DISCONNECTED = 14,
RIL_UNSOL_ECALL_ABNORMAL_HANGUP=15,
RIL_UNSOL_ECALL_IMS_MSD_ACK = 20,
RIL_UNSOL_ECALL_IMS_UPDATE_MSD = 21,
+ RIL_UNSOL_ECALL_IMS_IN_BAND_TRANSFER = 22,
+ RIL_UNSOL_ECALL_IMS_MSD_NACK = 23,
+ RIL_UNSOL_ECALL_IMS_SRVCC = 24,
+ RIL_UNSOL_ECALL_ONLY_DEREGISTRATION = 31,
+ RIL_UNSOL_ECALL_MAY_DEREGISTER = 32,
+ RIL_UNSOL_ECALL_PSAP_CALLBACK_START = 40,
+ RIL_UNSOL_ECALL_PSAP_CALLBACK_IMS_UPDATE_MSD = 41,
RIL_UNSOL_ECALL_UNSPECIFIED = 0xffff,
}RIL_ECall_Indication;
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxParcelTransferUtils.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxParcelTransferUtils.cpp
old mode 100644
new mode 100755
index f7367c4..bac1102
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxParcelTransferUtils.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxParcelTransferUtils.cpp
@@ -1,3 +1,4 @@
+//SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
@@ -126,6 +127,8 @@
case PREF_NET_TYPE_NR_ONLY:
case PREF_NET_TYPE_NR_LTE:
case PREF_NET_TYPE_NR_LTE_CDMA_EVDO:
+ case PREF_NET_TYPE_NR_LTE_GSM_WCDMA:
+ case PREF_NET_TYPE_NR_LTE_WCDMA:
case PREF_NET_TYPE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
case PREF_NET_TYPE_NR_LTE_TDSCDMA_GSM_WCDMA:
case PREF_NET_TYPE_NR_LTE_TDSCDMA_WCDMA:
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxTransferUtils.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxTransferUtils.cpp
old mode 100644
new mode 100755
index 0a92f93..dd95982
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxTransferUtils.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxTransferUtils.cpp
@@ -177,7 +177,7 @@
void RfxTransferUtils::parcelToDataResponse(RIL_Token t, RIL_Errno e, int request,
Parcel * parcel, int slotId) {
DataToParcelInfo *parcelInfo;
- if (request >= 1 && request <= (int32_t)NUM_ELEMS(s_data_to_parcel_request)) {
+ if (request >= 1 && request < (int32_t)NUM_ELEMS(s_data_to_parcel_request)) {
parcelInfo = &(s_data_to_parcel_request[request]);
} else if (request >= RIL_REQUEST_VENDOR_BASE && (request< RIL_REQUEST_VENDOR_BASE +
(int32_t)NUM_ELEMS(s_data_to_parcel_mtk_request))) {
@@ -3526,6 +3526,8 @@
RequestInfo *requestInfo = (RequestInfo *)t;
int type = getTypeAndJumpToData(p, id);
+ memset(&mem_status, 0, sizeof(mem_status));
+
if (p->dataAvail() > 0) {
p->readInt32(&mem_status.used);
p->readInt32(&mem_status.total);
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
old mode 100644
new mode 100755
index 8b1f596..d5475d4
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
@@ -47,6 +48,7 @@
#include <RfxMainThread.h>
#include <cutils/properties.h>
#include <unistd.h>
+#include <string.h>
#define RFX_LOG_TAG "RPApnController"
extern int rfx_get_data_allowed_slotid(void);
@@ -66,6 +68,11 @@
#define APNDB_NOTREADY (0)
bool gApnDoneCond_flag = APNDB_NOTREADY;
+using std::string;
+
+special_char_pattern_t APN_PROP_CHAR[CHAR_ID_TOTAL] = {
+ { CHAR_QUOTE, CHAR_REP_QUOTE },
+};
/*****************************************************************************
@@ -406,11 +413,31 @@
return false;
}
+bool RpApnController::handleSpecialChar(std::string& source, const std::string& pattern, const std::string& replace)
+{
+ if(source.find(pattern) == std::string::npos) {
+ return false;
+ }
+ std::size_t result = 0;
+ std::size_t index = 0;
+ while((result = source.find(pattern, index)) != std::string::npos) {
+ source.replace(result, pattern.size(), replace);
+ index = result + replace.size();
+ }
+ logD(RFX_LOG_TAG, "[handleSpecialChar] source : %s", source.c_str());
+ return true;
+}
+
char * RpApnController::getPropValue(const char *string) {
const char *start = NULL;
const char *end = NULL;
int length = -1;
char *return_value = NULL;
+ std::string target;
+ std::size_t found = 0;
+ int i = 0;
+ bool result = false;
+
logD(RFX_LOG_TAG, "[getPropValue]input string: %s", string);
while((';' != *string) && ('\0' != *string)) {
if ('=' == *string) {
@@ -437,6 +464,19 @@
return NULL;
return_value = (char *)malloc(length+1);
snprintf(return_value, length+1, "%s", start);
+
+ target = return_value;
+
+ for (i = 0; i < CHAR_ID_TOTAL; i++) {
+ if (true == handleSpecialChar(target, APN_PROP_CHAR[i].pattern, APN_PROP_CHAR[i].replace_char)) {
+ result = true;
+ }
+ }
+ if (result == true) {
+ free(return_value);
+ return_value = (char *)calloc(1, target.length() + 1);
+ strncpy(return_value, target.c_str(), target.length());
+ }
logD(RFX_LOG_TAG, "[getPropValue] return_value : %s", return_value);
return return_value;
}
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.h b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.h
old mode 100644
new mode 100755
index 9ff29df..baab352
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.h
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
@@ -84,6 +85,18 @@
string mvno_match_data;
}ApnsettingT;
+typedef struct {
+ const char* pattern;
+ const char* replace_char;
+} special_char_pattern_t;
+
+typedef enum {
+ CHAR_ID_QUOTE,
+ CHAR_ID_TOTAL
+} prop_char_id_enum;
+
+#define CHAR_QUOTE "'"
+#define CHAR_REP_QUOTE "''"
extern "C"
void apncallback(int ret, void* data);
@@ -149,6 +162,8 @@
bool checkPropEmpty(apn_record_t* record, int index);
bool checkPropExist(apn_record_t* record, int index);
string constructQueryResult(const apn_list_t * apn_list);
+ bool handleSpecialChar(std::string& source, const std::string& pattern, const std::string& replce);
+
public:
RfxSignal0 apn_ready_singal;
apn_list_t* g_apnlist;
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/ApnContext.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/ApnContext.cpp
old mode 100644
new mode 100755
index 8b8224d..3d2f26f
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/ApnContext.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/ApnContext.cpp
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/*
* ApnContext.cpp
*
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcController.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcController.cpp
old mode 100644
new mode 100755
index 46577d4..a3eb1d2
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcController.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcController.cpp
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/*
* DcController.cpp
*
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp
old mode 100644
new mode 100755
index 64a694a..f92fd54
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/*
* DcTracker.cpp
*
@@ -809,8 +810,7 @@
if (isPsRestricted == true) {
dataAllowFailReason.addDataAllowFailReason(PS_RESTRICTED);
}
- RFX_LOG_D(RFX_LOG_TAG, "%s always return true", __FUNCTION__);
- return true;
+
return !dataAllowFailReason.isFailed();
}
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.h b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.h
old mode 100644
new mode 100755
index 0477dd0..66c1c46
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.h
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/*
* DcTracker.h
*
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp
old mode 100644
new mode 100755
index ae5c6c3..4dc7432
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
@@ -450,7 +451,6 @@
}
logD(RFX_LOG_TAG, "RpDataController::isAllCallingStateIdle, with result: %s", RpDataUtils::b2s(result).c_str());
- result = true;
return result;
}
@@ -459,8 +459,8 @@
RfxNwServiceState ss = getStatusManager()->getServiceStateValue(RFX_STATUS_KEY_SERVICE_STATE);
result = ss.isConcurrentVoiceAndDataAllowed();
- result = true;
- logD(RFX_LOG_TAG, "RpDataController::isDataSupportConcurrent, with result: %s", RpDataUtils::b2s(result).c_str());
+ logD(RFX_LOG_TAG, "RpDataController::isDataSupportConcurrent, rilVoiceRadioTech(%d) with result: %s m_slot_id %d",
+ ss.getRilVoiceRadioTech(), RpDataUtils::b2s(result).c_str(), m_slot_id);
return result;
}
@@ -468,7 +468,6 @@
bool result = false;
result = getStatusManager()->getBoolValue(RFX_STATUS_KEY_PS_RESTRICT_STATE, false);
- result = true;
logD(RFX_LOG_TAG, "RpDataController::isPsRestricted, with result: %s", RpDataUtils::b2s(result).c_str());
return result;
@@ -488,7 +487,6 @@
RfxNwServiceState ss = getStatusManager()->getServiceStateValue(RFX_STATUS_KEY_SERVICE_STATE);
result = ss.isInService(ss.getRilDataRegState());
- result = true;
logD(RFX_LOG_TAG, "RpDataController::isAttached, with result: %s", RpDataUtils::b2s(result).c_str());
return result;
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/power/RpRadioController.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/power/RpRadioController.cpp
old mode 100644
new mode 100755
index 888e944..4661c35
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/power/RpRadioController.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/power/RpRadioController.cpp
@@ -1,3 +1,4 @@
+//SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/suplmessageparser/SuplMsgDispatcher.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/suplmessageparser/SuplMsgDispatcher.cpp
old mode 100644
new mode 100755
index 2c6d63a..f64e668
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/suplmessageparser/SuplMsgDispatcher.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/suplmessageparser/SuplMsgDispatcher.cpp
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/suplmessageparser/SuplMsgDispatcher.h b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/suplmessageparser/SuplMsgDispatcher.h
old mode 100644
new mode 100755
index 709b924..b8f9946
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/suplmessageparser/SuplMsgDispatcher.h
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/suplmessageparser/SuplMsgDispatcher.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
@@ -48,8 +49,9 @@
#define HAL_MNL_BUFF_SIZE (16 * 1024)
#define HAL2MNL_NI_MESSAGE 401
#define HAL_MNL_INTERFACE_VERSION 1
+
#ifndef MTK_HAS_HAL2MNL_EXT_SERVER
-#define MTK_HAL2MNL "mtk_hal2mnl"
+#define MTK_HAL2MNL "mtk_hal2mnl"
#else
#define MTK_HAL2MNL "mnldinf_ext"
#endif
diff --git a/src/telephonyware/3.0/mcf_cmd/LICENSE b/src/telephonyware/3.0/mcf_cmd/LICENSE
new file mode 100755
index 0000000..10f9164
--- /dev/null
+++ b/src/telephonyware/3.0/mcf_cmd/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+the prior written permission of MediaTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MediaTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+Copyright (C) 2021 MediaTek Inc. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/src/telephonyware/3.0/mcf_cmd/Makefile b/src/telephonyware/3.0/mcf_cmd/Makefile
new file mode 100755
index 0000000..98b4167
--- /dev/null
+++ b/src/telephonyware/3.0/mcf_cmd/Makefile
@@ -0,0 +1,13 @@
+TARGET := mcf_cmd
+SRCS := ./mcf_cmd.c
+
+.PHONY: all clean
+
+all: mcf_cmd
+
+mcf_cmd:
+ $(CC) $(CFLAGS) -o $@ $(SRCS) $(LDFLAGS) $(LIBS)
+
+clean:
+ $(warning "makefile mcf_cmd clean")
+ rm -f $(TARGET)
\ No newline at end of file
diff --git a/src/telephonyware/3.0/mcf_cmd/mcf_cmd.c b/src/telephonyware/3.0/mcf_cmd/mcf_cmd.c
new file mode 100755
index 0000000..3248e0d
--- /dev/null
+++ b/src/telephonyware/3.0/mcf_cmd/mcf_cmd.c
@@ -0,0 +1,758 @@
+/******************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2020
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*******************************************************************************/
+
+/******************************************************************************
+ * Filename:
+ * ---------
+ * mcf_cmd.c
+ *
+ * Project:
+ * --------
+ * Colgin
+ *
+ * Description:
+ * ------------
+ * MD Configuration Framework, opreation command, send by sAP/openWrt
+ *
+*******************************************************************************/
+
+/******************************************************************************
+ * Includes
+ ******************************************************************************/
+#include <stdbool.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <sys/time.h>
+#include "mipc_msg_host.h"
+
+/******************************************************************************
+ * Macro
+ ******************************************************************************/
+#define SPECIFIC_MIPC_PORT "/dev/ttyCMIPC9"
+
+/******************************************************************************
+ * Typedefs
+ ******************************************************************************/
+typedef enum {
+ MCF_CMD_BIN_TYPE_DEFAULT_BIN = 0,
+ MCF_CMD_BIN_TYPE_CARRIER_BIN = 1,
+ MCF_CMD_BIN_TYPE_GENERAL_CARRIER_BIN = 2,
+ MCF_CMD_BIN_TYPE_MAX
+} mcf_cmd_bin_type_enum;
+
+typedef enum {
+ MCF_CMD_PATH_TYPE_OTA = 0,
+ MCF_CMD_PATH_TYPE_RUNTIME = 1,
+ MCF_CMD_PATH_TYPE_MAX
+} mcf_cmd_path_type_enum;
+
+typedef enum {
+ MCF_CMD_VARIABLE_ACT_READ_OTA = 0,
+ MCF_CMD_VARIABLE_ACT_READ_OPOTA = 1,
+ MCF_CMD_VARIABLE_ACT_WRITE_OTA = 2,
+ MCF_CMD_VARIABLE_ACT_WRITE_OPOTA = 3,
+ MCF_CMD_VARIABLE_ACT_MAX
+} mcf_cmd_variable_act_enum;
+
+typedef enum {
+ MCF_CMD_QUERY_VARIABLE_FORM_PATH = 0,
+ MCF_CMD_QUERY_VARIABLE_FORM_GID = 1,
+}mcf_cmd_query_variable_form_enum;
+
+typedef enum {
+ MCF_CMD_IS_TRIGGER_FALSE = 0,
+ MCF_CMD_IS_TRIGGER_TRUE = 1,
+
+ MCF_CMD_IS_APPEND_OTA = 0,
+ MCF_CMD_IS_RESET_LID = 1,
+
+ MCF_CMD_IS_UPDATE_WITH_NO_READ_INI = 0,
+ MCF_CMD_IS_UPDATE_WITH_READ_INI = 1,
+
+ MCF_PARA_IS_MAX = 2,
+} mcf_para_is_enum;
+
+typedef struct {
+ uint8_t num;
+ char str[7];
+} mapping_table_t;
+
+typedef struct {
+ /* required parameter */
+ uint8_t opnum;
+ uint8_t bin_type;
+ uint8_t path_folder_idx;
+ uint8_t appendOTA_resetLID;
+ /* optional parameter */
+ uint8_t is_trigger;
+ uint8_t is_with;
+ uint8_t record_id;
+ uint8_t data_length;
+ /* internal use variable */
+ uint8_t write_flag;
+ uint8_t real_write_length;
+ /* required parameter */
+ uint32_t gid;
+ char* file_name;
+ char* write_value;
+ /* optional parameter */
+ char* lid_str;
+ char* array_index;
+ /* internal use variable */
+ uint16_t run_cmd_ret;
+ uint16_t sim_ps_id;
+} mcf_cmd_parameter_list_t;
+
+/******************************************************************************
+ * Global variables
+ ******************************************************************************/
+#define PARA_INT8_ERROE_MAX 0xFF
+#define RESULT_SUCCESS 0
+#define WRITE_FLAG 90
+
+extern char *optarg;
+extern int optind, optopt, opterr;
+static mipc_msg_t* msg_req_ptr = NULL;
+static mipc_msg_t* msg_cnf_ptr = NULL;
+static mcf_cmd_parameter_list_t mc;
+
+/* NOTE: read and write are same opreation code 10 */
+static mapping_table_t cmd_map[9] = {
+ {MIPC_SYS_MCF_OP_GET_APPLIED_FILE_PATH, "get"},
+ {MIPC_SYS_MCF_OP_DUMP_LID_DATA, "dump"},
+ {MIPC_SYS_MCF_OP_SET_FILE_PATH_AND_AUTO_SELECT_BIN, "set"},
+ {MIPC_SYS_MCF_OP_UPDATE_OPOTA_FILE, "update"},
+ {MIPC_SYS_MCF_OP_QUERY_VARIABLE_VALUE, "read"},
+ {MIPC_SYS_MCF_OP_QUERY_VARIABLE_VALUE + WRITE_FLAG, "write"},
+ {MIPC_SYS_MCF_OP_ASSIGN_COMBINED_PATH, "merge"},
+ {99,"reboot"},
+};
+
+static mapping_table_t path_map[2] = {
+ {MCF_CMD_PATH_TYPE_OTA, "mdota2"},
+ {MCF_CMD_PATH_TYPE_RUNTIME, "mdota"}
+};
+
+#define CMD_MAP_LEN (sizeof(cmd_map)/sizeof(cmd_map[0]))
+#define PATH_MAP_LEN (sizeof(path_map)/sizeof(path_map[0]))
+
+//#define USE_DEBUG_LOG
+#ifdef USE_DEBUG_LOG
+#define debug_log(format, ...) printf(format, ##__VA_ARGS__)
+#else
+#define debug_log(format, ...)
+#endif
+
+/******************************************************************************
+ * Feature: wait ind callback by linux signal
+ ******************************************************************************/
+#define USE_MCF_THREAD_WAIT_IND_CB
+
+#ifdef USE_MCF_THREAD_WAIT_IND_CB
+#define WAIT_IND_CB_TIMEOUT_SEC 5
+static pthread_cond_t g_cond;
+static pthread_mutex_t g_mutex;
+static bool g_ind_cb_done = false;
+
+static void mcf_thread_wait_ind_cb(void)
+{
+ struct timeval now_time;
+ struct timespec out_time;
+
+ if (g_ind_cb_done == false) {
+ pthread_cond_init(&g_cond, NULL);
+ pthread_mutex_init(&g_mutex, NULL);
+
+ gettimeofday(&now_time, NULL);
+ out_time.tv_sec = now_time.tv_sec + WAIT_IND_CB_TIMEOUT_SEC;
+ out_time.tv_nsec = now_time.tv_usec * 1000;
+
+ debug_log("wait mcf ind cb\n");
+ pthread_mutex_lock(&g_mutex);
+ pthread_cond_timedwait(&g_cond, &g_mutex, &out_time);
+ pthread_mutex_unlock(&g_mutex);
+ debug_log("wait done\n");
+
+ pthread_cond_destroy(&g_cond);
+ pthread_mutex_destroy(&g_mutex);
+ }
+}
+
+static void mcf_thread_send_signal(void)
+{
+ if (g_ind_cb_done == false) {
+ pthread_mutex_lock(&g_mutex);
+ pthread_cond_signal(&g_cond);
+ pthread_mutex_unlock(&g_mutex);
+ g_ind_cb_done = true;
+ }
+}
+
+#else
+#define mcf_thread_wait_ind_cb()
+#define mcf_thread_send_signal()
+#endif /* THREAD_WAIT_MCF_IND_CB */
+
+/******************************************************************************
+ * Functions
+ ******************************************************************************/
+static void printf_help(void)
+{
+ char help_text[] = {"Usage:\n"
+ " mcf_cmd <-o get> <-b bin_type>\n"
+ " mcf_cmd <-o dump> [-d lid1,lid2,...,lid32]\n"
+ " mcf_cmd <-o set> <-b bin_type> <-p path_folder> <-f file_name> <-r appendOTA_resetLID> [-t trigger_dsbp] [-s sim_id]\n"
+ " mcf_cmd <-o update> [-w with_ini]\n"
+ " mcf_cmd <-o read> <-b bin_type> <-g GID> [-i record_id] [-y array_index] [-l length]\n"
+ " mcf_cmd <-o write> <-b bin_type> <-g GID> [-i record_id] [-y array_index] [-l length] <-v write_value>\n"
+ " mcf_cmd <-o merge> <-b bin_type> <-p path_folder> <-f file_name>\n"
+ " <> is required parameter; [] is optional parameter, notice its default value if not set\n"
+ " -o, operation (str): get/dump/set/update/read/write/merge\n"
+ " -b, bin type: 0:OTA, 1:OTA by OP, 2:general OTA by OP\n"
+ " -d, LID list (str): use \",\" to split, max num is 32; default dump all\n"
+ " -p, path folder (str): \"mdota\"/\"mdota2\"\n"
+ " -f, OTA file name (str)\n"
+ " -r, appendOTA_resetLID: Valid after running merge cmd, 0:append OTA file, 1:reset LIDs\n"
+ " -t, trigger dsbp: 0:not trigger, 1:trigger; default 0\n"
+ " -w, update with ini file: 0:no read ini, 1:read ini; default 0\n"
+ " -i, NVRAM item record id: default 1\n"
+ " -g, GID number\n"
+ " -y, array index (str): use \",\" to split; default \"\"\n"
+ " -l, data length\n"
+ " -v, write value (str): hex string, use \"3412\" for 0x1234\n"
+ " -s, send cmd by sim id, support all cmd: 0 for sim1, 1 for sim2, optional, defatul 0\n"
+ " note: if parameter is string, its \"\" can be omitted\n"
+ };
+ printf("%s", help_text);
+}
+
+static void mcf_ind_cb(mipc_msg_t *msg_ptr, void *priv_ptr)
+{
+ uint32_t ret;
+
+ printf("MCF cmd CB type=%u result=%u\n", mipc_msg_get_val_uint8(msg_ptr, MIPC_SYS_MCF_IND_T_TYPE, 0xff),
+ ret = mipc_msg_get_val_uint8(msg_ptr, MIPC_SYS_MCF_IND_T_RESULT, 0xff));
+
+ if ((mc.opnum == MIPC_SYS_MCF_OP_DUMP_LID_DATA) && (ret == RESULT_SUCCESS)) {
+ mc.run_cmd_ret = RESULT_SUCCESS;
+ }
+
+ mcf_thread_send_signal();
+}
+
+static void mcf_mipc_init(void)
+{
+#ifdef SPECIFIC_MIPC_PORT
+ SETCOM(SPECIFIC_MIPC_PORT);
+ printf("MCF cmd SETCOM %s\n", SPECIFIC_MIPC_PORT);
+#endif
+
+ mipc_init("mcf_cmd");
+ mipc_msg_register_ind(mc.sim_ps_id, MIPC_SYS_MCF_IND, mcf_ind_cb, NULL);
+}
+
+static void mcf_mipc_deinit(void)
+{
+ mipc_msg_deinit(msg_req_ptr);
+ mipc_msg_deinit(msg_cnf_ptr);
+ mipc_deinit();
+}
+
+static char* mcf_get_map_str(uint8_t num, mapping_table_t *map, uint32_t map_len)
+{
+ static char* null_str = "";
+ uint32_t i = 0;
+
+ for (i=0;i<map_len;i++) {
+ if (num == (map+i)->num) {
+ return (map+i)->str;
+ }
+ }
+
+ return null_str;
+}
+
+static uint8_t mcf_get_map_num(char* str, mapping_table_t *map, uint32_t map_len)
+{
+ uint32_t i = 0;
+
+ for (i=0;i<map_len;i++) {
+ if (strcmp(str, (map+i)->str) == 0) {
+ if (strcmp(str, "write") == 0) {
+ mc.write_flag = WRITE_FLAG;
+ return (map+i)->num - mc.write_flag;
+ } else {
+ return (map+i)->num;
+ }
+ }
+ }
+
+ return PARA_INT8_ERROE_MAX;
+}
+
+static void log_op_error_parameter(uint8_t num)
+{
+ printf("MCF op=\"%s\" error parameter, CHECK!\nRun mcf_cmd to see the format!", mcf_get_map_str(num, cmd_map, CMD_MAP_LEN));
+}
+
+static void log_mipc_result_fail(uint32_t result)
+{
+ printf("MCF cmd FAIL, mipc result=%u\n", result);
+}
+
+static void mcf_cmd_parameters_init(void)
+{
+ /* required parameter, will check them */
+ mc.opnum = PARA_INT8_ERROE_MAX;
+ mc.bin_type = PARA_INT8_ERROE_MAX;
+ mc.path_folder_idx = PARA_INT8_ERROE_MAX;
+ mc.appendOTA_resetLID = PARA_INT8_ERROE_MAX;
+ mc.gid = 0;
+ mc.file_name = NULL;
+ mc.write_value = NULL;
+ /* optional parameter, set default value */
+ mc.is_trigger = 0;
+ mc.is_with = 0;
+ mc.record_id = 1;
+ mc.data_length = 0;
+ mc.lid_str = "";
+ mc.array_index = "";
+ /* internal use variable */
+ mc.write_flag = 0;
+ mc.real_write_length = 0;
+ mc.run_cmd_ret = PARA_INT8_ERROE_MAX; // linux shell only get 0~255
+ mc.sim_ps_id = MIPC_MSG_PS0; // set default as MIPC_MSG_PS0
+}
+
+static void mcf_cmd_hex_string_to_bytes(char *input_string)
+{
+ uint32_t length = strlen(input_string);
+ uint8_t temp[2];
+ uint32_t i,j;
+
+ if (length%2 != 0) {
+ printf("write_value str len need be even\n");
+ return;
+ }
+
+ char* pdata = malloc(length/2);
+ if (pdata == NULL) return;
+
+ for (i=0;i<length/2;i++) {
+ temp[0] = input_string[i*2];
+ temp[1] = input_string[i*2+1];
+
+ for (j=0; j<2; j++) {
+ if (temp[j] >= '0' && temp[j] <= '9') {
+ temp[j] = temp[j] - '0';
+ } else if (temp[j] >= 'a' && temp[j] <= 'f') {
+ temp[j] = temp[j] - 'a' + 10;
+ } else if (temp[j] >= 'A' && temp[j] <= 'F') {
+ temp[j] = temp[j] - 'A' + 10;
+ } else {
+ free(pdata);
+ return;
+ }
+ }
+
+ pdata[i] = (temp[0]<<4) | temp[1];
+ }
+
+ if (mc.write_value != NULL) free(mc.write_value);
+ mc.write_value = pdata;
+ mc.real_write_length = length/2;
+}
+
+static void mcf_cmd_parameters_parser(int argc, char *argv[])
+{
+ uint32_t ch;
+ uint16_t sim_id;
+ char* opstr = "";
+
+ if (argc == 1) {
+ printf_help();
+ mc.run_cmd_ret = RESULT_SUCCESS;
+ return;
+ }
+
+ while ((ch = getopt(argc, argv, "o:b:d:p:f:t:r:w:g:i:y:l:v:s:")) != -1) {
+ switch(ch) {
+ case 'o':
+ mc.opnum = mcf_get_map_num(optarg, cmd_map, CMD_MAP_LEN);
+ opstr = optarg;
+ break;
+ case 'b':
+ mc.bin_type = atoi(optarg);
+ break;
+ case 'd':
+ mc.lid_str = optarg;
+ break;
+ case 'p':
+ mc.path_folder_idx = mcf_get_map_num(optarg, path_map, PATH_MAP_LEN);
+ break;
+ case 'f':
+ mc.file_name = optarg;
+ break;
+ case 't':
+ mc.is_trigger = atoi(optarg);
+ break;
+ case 'r':
+ mc.appendOTA_resetLID = atoi(optarg);
+ break;
+ case 'w':
+ mc.is_with = atoi(optarg);
+ break;
+ case 'g':
+ mc.gid = atoi(optarg);
+ break;
+ case 'i':
+ mc.record_id = atoi(optarg);
+ break;
+ case 'y':
+ mc.array_index = optarg;
+ break;
+ case 'l':
+ mc.data_length = atoi(optarg);
+ break;
+ case 'v':
+ mcf_cmd_hex_string_to_bytes(optarg);
+ break;
+ case 's':
+ sim_id = atoi(optarg);
+ if (sim_id == 0xFF) {
+ mc.sim_ps_id = MIPC_MSG_ALL;
+ } else if (sim_id <= 7) {
+ mc.sim_ps_id = (mipc_msg_sim_ps_id_enum)(1 << sim_id);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (mc.opnum == PARA_INT8_ERROE_MAX) {
+ printf("MCF unsupport: -o \"%s\"\n", opstr);
+ }
+}
+
+static void mcf_cmd_parameters_free(void)
+{
+ if(mc.write_value != NULL)
+ free(mc.write_value);
+}
+
+/*******************************************************************************
+ * origin cmd: AT+EMCFC=4,<config_type>
+ * response: +EMCFC:4,<config_type>,<path_type>,<config1 str>
+ * ind cb: none
+ * mcf cmd: mcf_cmd <-o get> <-b bin_type>
+ *******************************************************************************/
+static void mcf_cmd_op_get_applied_file_path(int argc, char *argv[])
+{
+ uint32_t mipc_ret = 0;
+
+ if (mc.bin_type >= MCF_CMD_BIN_TYPE_MAX) {
+ log_op_error_parameter(MIPC_SYS_MCF_OP_GET_APPLIED_FILE_PATH);
+ return;
+ }
+
+ msg_req_ptr = mipc_msg_init(MIPC_SYS_MCF_REQ, mc.sim_ps_id);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_OP, MIPC_SYS_MCF_OP_GET_APPLIED_FILE_PATH);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_CONFIG_TYPE, mc.bin_type);
+ msg_cnf_ptr = mipc_msg_sync(msg_req_ptr);
+
+ mipc_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_T_RESULT, MIPC_RESULT_FAILURE);
+
+ if (mipc_ret == MIPC_RESULT_SUCCESS) {
+ printf("MCF cmd SUCCESS op=\"%s\" bin_type=%u path_folder=\"%s\" config_file=\"%s\"\n",
+ mcf_get_map_str(mipc_msg_get_val_uint8(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_OP, 0xff), cmd_map, CMD_MAP_LEN),
+ mipc_msg_get_val_uint8(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_CONFIG_TYPE, 0xff),
+ mcf_get_map_str(mipc_msg_get_val_uint8(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_PATH_TYPE, 0xff), path_map, PATH_MAP_LEN),
+ (char *)mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_CONFIG1, NULL));
+ mc.run_cmd_ret = RESULT_SUCCESS;
+ } else {
+ log_mipc_result_fail(mipc_ret);
+ }
+}
+
+/*******************************************************************************
+ * origin cmd: AT+EMCFC=5 [lid1,lid2,...,lid32]
+ * response: +EMCFC:5,<MCF result>
+ * ind cb: +EMCFRPT:<type>,<MCF result>
+ * mcf cmd: mcf_cmd <-o dump> [-d lid1,lid2,...,lid32]
+ *******************************************************************************/
+static void mcf_cmd_op_dump_lid_data(int argc, char *argv[])
+{
+ uint32_t mipc_ret = 0, mcf_ret = 0xffffffff;
+
+ msg_req_ptr = mipc_msg_init(MIPC_SYS_MCF_REQ, mc.sim_ps_id);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_OP, MIPC_SYS_MCF_OP_DUMP_LID_DATA);
+ if (strcmp(mc.lid_str, "") != 0) {
+ mipc_msg_add_tlv(msg_req_ptr, MIPC_SYS_MCF_REQ_T_DUMP_LIDS, strlen(mc.lid_str) + 1, mc.lid_str);
+ }
+ msg_cnf_ptr = mipc_msg_sync(msg_req_ptr);
+
+ mipc_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_T_RESULT, MIPC_RESULT_FAILURE);
+ if (mipc_ret == MIPC_RESULT_SUCCESS) {
+ printf("MCF cmd SUCCESS op=\"%s\" mcf_result=%u\n",
+ mcf_get_map_str(mipc_msg_get_val_uint8(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_OP, 0xff), cmd_map, CMD_MAP_LEN),
+ mcf_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_MCF_RESULT, 0xffffffff));
+ } else {
+ log_mipc_result_fail(mipc_ret);
+ }
+
+ if(mcf_ret == RESULT_SUCCESS) {
+ mcf_thread_wait_ind_cb();
+ }
+}
+
+/*******************************************************************************
+ * origin cmd: AT+EMCFC=6,<config_type>,<path_type>,<config1 str>,<trigger_dsbp>,<is_reset>
+ * response: +EMCFC:6,<MCF result>,<DSBP result>
+ * ind cb: (if trigger_dsbp == 1) +EMCFRPT:<type>,<DSBP result>
+ * mcf cmd: mcf_cmd <-o set> <-b bin_type> <-p path_folder> <-f file_name> <-r append_resetLID> [-t trigger_dsbp]
+ *******************************************************************************/
+static void mcf_cmd_op_set_file_path_and_auto_select_bin(int argc, char *argv[])
+{
+ uint32_t mipc_ret = 0, mcf_ret = 0xffffffff, dsbp_ret = 0xffffffff;
+
+ if ((mc.bin_type >= MCF_CMD_BIN_TYPE_MAX) || (mc.path_folder_idx >= MCF_CMD_PATH_TYPE_MAX) || (mc.file_name == NULL ) ||
+ (mc.is_trigger >= MCF_PARA_IS_MAX )|| (mc.appendOTA_resetLID >= MCF_PARA_IS_MAX)) {
+ log_op_error_parameter(MIPC_SYS_MCF_OP_SET_FILE_PATH_AND_AUTO_SELECT_BIN);
+ return;
+ }
+
+ msg_req_ptr = mipc_msg_init(MIPC_SYS_MCF_REQ, mc.sim_ps_id);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_OP, MIPC_SYS_MCF_OP_SET_FILE_PATH_AND_AUTO_SELECT_BIN);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_CONFIG_TYPE, mc.bin_type);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_PATH_TYPE, mc.path_folder_idx);
+ mipc_msg_add_tlv(msg_req_ptr, MIPC_SYS_MCF_REQ_T_CONFIG1, strlen(mc.file_name)+1, mc.file_name);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_TRIGGER_DSBP, mc.is_trigger);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_IS_RESET, mc.appendOTA_resetLID);
+ msg_cnf_ptr = mipc_msg_sync(msg_req_ptr);
+
+ mipc_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_T_RESULT, MIPC_RESULT_FAILURE);
+ if (mipc_ret == MIPC_RESULT_SUCCESS) {
+ printf("MCF cmd SUCCESS op=\"%s\" mcf_result=%u dsbp_result=%u\n",
+ mcf_get_map_str(mipc_msg_get_val_uint8(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_OP, 0xff), cmd_map, CMD_MAP_LEN),
+ mcf_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_MCF_RESULT, 0xffffffff),
+ dsbp_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_DSBP_RESULT, 0xffffffff));
+ } else {
+ log_mipc_result_fail(mipc_ret);
+ }
+
+ if (mcf_ret == RESULT_SUCCESS && dsbp_ret == RESULT_SUCCESS) {
+ mc.run_cmd_ret = RESULT_SUCCESS;
+ if(mc.is_trigger == MCF_CMD_IS_TRIGGER_TRUE) {
+ mcf_thread_wait_ind_cb();
+ }
+ }
+}
+
+/*******************************************************************************
+ * cmd: AT+EMCFC=7,<action>
+ * response: +EMCFC:7,<MCF result>
+ * ind cb: +EMCFRPT:<type>,<result>
+ * mcf cmd: mcf_cmd <-o update> [-w with_ini]
+ *******************************************************************************/
+static void mcf_cmd_op_update_opota_file(int argc, char *argv[])
+{
+ uint32_t mipc_ret = 0, mcf_ret = 0xffffffff;
+
+ if (mc.is_with >= MCF_PARA_IS_MAX) {
+ log_op_error_parameter(MIPC_SYS_MCF_OP_UPDATE_OPOTA_FILE);
+ return;
+ }
+
+ msg_req_ptr = mipc_msg_init(MIPC_SYS_MCF_REQ, mc.sim_ps_id);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_OP, MIPC_SYS_MCF_OP_UPDATE_OPOTA_FILE);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_ACTION, mc.is_with);
+ msg_cnf_ptr = mipc_msg_sync(msg_req_ptr);
+
+ mipc_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_T_RESULT, MIPC_RESULT_FAILURE);
+ if (mipc_ret == MIPC_RESULT_SUCCESS) {
+ printf("MCF cmd SUCCESS op=\"%s\" mcf_result=%u\n",
+ mcf_get_map_str(mipc_msg_get_val_uint8(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_OP, 0xff), cmd_map, CMD_MAP_LEN),
+ mcf_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_MCF_RESULT, 0xffffffff));
+ } else {
+ log_mipc_result_fail(mipc_ret);
+ }
+
+ if (mcf_ret == RESULT_SUCCESS) {
+ mc.run_cmd_ret = RESULT_SUCCESS;
+ mcf_thread_wait_ind_cb();
+ }
+}
+
+/*******************************************************************************
+ * cmd: AT+EMCFC=10,<format>,<action>,<record ID>,<number>,<config str>[,<length>],[,<value>]]
+ * response: +EMCFC:10,<format>,<action>,<mcf result>,<length>,<value>
+ * ind cb: none
+ * mcf_cmd <-o read> <-b bin_type> <-g GID> [-i record_id] [-y array_index] [-l length]
+ * mcf_cmd <-o write> <-b bin_type> <-g GID> [-i record_id] [-y array_index] [-l length] <-v write_value>
+ *******************************************************************************/
+static void mcf_cmd_op_query_variable_value(int argc, char *argv[])
+{
+ uint32_t mipc_ret = 0, mcf_ret = 0xffffffff;
+ uint8_t action, ret_len, i;
+ char *ret_str;
+
+ if ((mc.bin_type >= MCF_CMD_BIN_TYPE_MAX) || (mc.gid == 0) || (mc.write_flag == WRITE_FLAG && mc.write_value == NULL)) {
+ log_op_error_parameter(MIPC_SYS_MCF_OP_QUERY_VARIABLE_VALUE);
+ return;
+ }
+
+ if (mc.write_flag != WRITE_FLAG) {
+ action = (mc.bin_type == MCF_CMD_BIN_TYPE_DEFAULT_BIN) ? MCF_CMD_VARIABLE_ACT_READ_OTA : MCF_CMD_VARIABLE_ACT_READ_OPOTA;
+ } else {
+ action = (mc.bin_type == MCF_CMD_BIN_TYPE_DEFAULT_BIN) ? MCF_CMD_VARIABLE_ACT_WRITE_OTA : MCF_CMD_VARIABLE_ACT_WRITE_OPOTA;
+ }
+
+ msg_req_ptr = mipc_msg_init(MIPC_SYS_MCF_REQ, mc.sim_ps_id);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_OP, MIPC_SYS_MCF_OP_QUERY_VARIABLE_VALUE);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_FORMAT, MCF_CMD_QUERY_VARIABLE_FORM_GID);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_ACTION, action);
+ mipc_msg_add_tlv_uint32(msg_req_ptr, MIPC_SYS_MCF_REQ_T_NUM, mc.gid);
+ mipc_msg_add_tlv_uint16(msg_req_ptr, MIPC_SYS_MCF_REQ_T_REC_ID, mc.record_id);
+ mipc_msg_add_tlv(msg_req_ptr, MIPC_SYS_MCF_REQ_T_CONFIG, strlen(mc.array_index)+1, mc.array_index);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_LEN, mc.data_length);
+ if (mc.write_flag == WRITE_FLAG) {
+ mipc_msg_add_tlv(msg_req_ptr, MIPC_SYS_MCF_REQ_T_VALUE, mc.real_write_length, mc.write_value);
+ }
+
+ msg_cnf_ptr = mipc_msg_sync(msg_req_ptr);
+ mipc_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_T_RESULT, MIPC_RESULT_FAILURE);
+ if (mipc_ret == MIPC_RESULT_SUCCESS) {
+ printf("MCF cmd SUCCESS op=\"%s\" mcf_result=%u bin_type=%u",
+ mcf_get_map_str(mipc_msg_get_val_uint8(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_OP, 0xff)+mc.write_flag, cmd_map, CMD_MAP_LEN),
+ mcf_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_MCF_RESULT, 0xffffffff),
+ (mipc_msg_get_val_uint8(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_ACTION, 0xff)%2 == 0) ? MCF_CMD_BIN_TYPE_DEFAULT_BIN : MCF_CMD_BIN_TYPE_CARRIER_BIN);
+ if (mcf_ret == RESULT_SUCCESS) {
+ mc.run_cmd_ret = RESULT_SUCCESS;
+ ret_len = mipc_msg_get_val_uint8(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_LEN, 0xff);
+ printf(" length=%u", ret_len);
+ if (mc.write_flag != WRITE_FLAG) {
+ ret_str = (char*)mipc_msg_get_val_ptr(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_VALUE, NULL);
+ printf(" value=\"");
+ for (i=0;i<ret_len;i++) {
+ printf("%02X", *(ret_str + i));
+ }
+ printf("\"");
+ }
+ }
+ printf("\n");
+ } else {
+ log_mipc_result_fail(mipc_ret);
+ }
+}
+
+/*******************************************************************************
+ * cmd: AT+EMCFC=11,<config_type>,<path_type>,<config1 str>
+ * response: +EMCFC:11,<MCF result>
+ * ind cb: none
+ * mcf cmd: mcf_cmd <-o merge> <-b bin_type> <-p path_folder> <-f file_name>
+ *******************************************************************************/
+static void mcf_cmd_op_assign_combined_path(int argc, char *argv[])
+{
+ uint32_t mipc_ret = 0, mcf_ret = 0xffffffff;
+
+ if ((mc.bin_type >= MCF_CMD_BIN_TYPE_MAX) || (mc.path_folder_idx >= MCF_CMD_PATH_TYPE_MAX) || (mc.file_name == NULL)) {
+ log_op_error_parameter(MIPC_SYS_MCF_OP_ASSIGN_COMBINED_PATH);
+ return;
+ }
+
+ msg_req_ptr = mipc_msg_init(MIPC_SYS_MCF_REQ, mc.sim_ps_id);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_OP, MIPC_SYS_MCF_OP_ASSIGN_COMBINED_PATH);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_CONFIG_TYPE, mc.bin_type);
+ mipc_msg_add_tlv_uint8(msg_req_ptr, MIPC_SYS_MCF_REQ_T_PATH_TYPE, mc.path_folder_idx);
+ mipc_msg_add_tlv(msg_req_ptr, MIPC_SYS_MCF_REQ_T_CONFIG1, strlen(mc.file_name)+1, mc.file_name);
+ msg_cnf_ptr = mipc_msg_sync(msg_req_ptr);
+
+ mipc_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_T_RESULT, MIPC_RESULT_FAILURE);
+ if (mipc_ret == MIPC_RESULT_SUCCESS) {
+ printf("MCF cmd SUCCESS op=\"%s\" mcf_result=%u\n",
+ mcf_get_map_str(mipc_msg_get_val_uint8(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_OP, 0xff), cmd_map, CMD_MAP_LEN),
+ mcf_ret = mipc_msg_get_val_uint32(msg_cnf_ptr, MIPC_SYS_MCF_CNF_T_MCF_RESULT, 0xffffffff));
+ if (mcf_ret == RESULT_SUCCESS) {
+ mc.run_cmd_ret = RESULT_SUCCESS;
+ }
+ } else {
+ log_mipc_result_fail(mipc_ret);
+ }
+}
+
+static void mcf_system_reboot(void)
+{
+ printf("MCF system reboot\n");
+ system("reboot");
+}
+
+int main(int argc, char *argv[])
+{
+ mcf_cmd_parameters_init();
+ mcf_cmd_parameters_parser(argc, argv);
+ if (mc.opnum != PARA_INT8_ERROE_MAX)
+ {
+ mcf_mipc_init();
+ switch (mc.opnum) {
+ case MIPC_SYS_MCF_OP_GET_APPLIED_FILE_PATH:
+ mcf_cmd_op_get_applied_file_path(argc, argv);
+ break;
+ case MIPC_SYS_MCF_OP_DUMP_LID_DATA:
+ mcf_cmd_op_dump_lid_data(argc, argv);
+ break;
+ case MIPC_SYS_MCF_OP_SET_FILE_PATH_AND_AUTO_SELECT_BIN:
+ mcf_cmd_op_set_file_path_and_auto_select_bin(argc, argv);
+ break;
+ case MIPC_SYS_MCF_OP_UPDATE_OPOTA_FILE:
+ mcf_cmd_op_update_opota_file(argc, argv);
+ break;
+ case MIPC_SYS_MCF_OP_QUERY_VARIABLE_VALUE:
+ mcf_cmd_op_query_variable_value(argc, argv);
+ break;
+ case MIPC_SYS_MCF_OP_ASSIGN_COMBINED_PATH:
+ mcf_cmd_op_assign_combined_path(argc, argv);
+ break;
+ case 99:
+ mcf_system_reboot();
+ default:
+ break;
+ }
+ mcf_mipc_deinit();
+ }
+ mcf_cmd_parameters_free();
+ return mc.run_cmd_ret;
+}
+
diff --git a/src/telephonyware/3.0/mipc/mt2735_ivt_nlwg_custom/mipc.release.tar.gz b/src/telephonyware/3.0/mipc/mt2735_ivt_nlwg_custom/mipc.release.tar.gz
old mode 100644
new mode 100755
index 128cc21..a20cb06
--- a/src/telephonyware/3.0/mipc/mt2735_ivt_nlwg_custom/mipc.release.tar.gz
+++ b/src/telephonyware/3.0/mipc/mt2735_ivt_nlwg_custom/mipc.release.tar.gz
Binary files differ
diff --git a/src/telephonyware/3.0/mipc/mt2735_ivt_nlwg_wide_temp_custom/mipc.release.tar.gz b/src/telephonyware/3.0/mipc/mt2735_ivt_nlwg_wide_temp_custom/mipc.release.tar.gz
old mode 100644
new mode 100755
index 128cc21..268ff16
--- a/src/telephonyware/3.0/mipc/mt2735_ivt_nlwg_wide_temp_custom/mipc.release.tar.gz
+++ b/src/telephonyware/3.0/mipc/mt2735_ivt_nlwg_wide_temp_custom/mipc.release.tar.gz
Binary files differ
diff --git a/src/telephonyware/3.0/mipc/mt6890_evb_nlwg_custom/mipc.release.tar.gz b/src/telephonyware/3.0/mipc/mt6890_evb_nlwg_custom/mipc.release.tar.gz
new file mode 100755
index 0000000..0680522
--- /dev/null
+++ b/src/telephonyware/3.0/mipc/mt6890_evb_nlwg_custom/mipc.release.tar.gz
Binary files differ
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libfile_op/libfile_op.c b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/libfile_op.c
old mode 100644
new mode 100755
index 0de1590..815e641
--- a/src/telephonyware/3.0/mtk_nvram/src/libfile_op/libfile_op.c
+++ b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/libfile_op.c
@@ -5599,7 +5599,7 @@
//-----------------------------------------------------------------------------
bool FileOp_BackupDataToFiles(int * iFileMask, bool bWorkForBinRegion) {
- DIR *dir;
+ DIR *dir = NULL;
struct dirent *entry;
struct stat statbuf;
const char* lpSrcDirName = NULL;
diff --git a/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.h b/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.h
old mode 100644
new mode 100755
index d0ec5c4..a8a1e3e
--- a/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.h
+++ b/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.h
@@ -60,7 +60,7 @@
//xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xxx
#define INVALID_TRANS_ID -1
-#define UCI_CONFIG_FILE "/etc/config/system"
+#define UCI_CONFIG_FILE "/etc/config/radio_property"
void onEifIndCallback(mipc_msg_t *msg_ptr, void *priv_ptr);
void onEIpPortCallback(mipc_msg_t *msg_ptr, void *priv_ptr);
diff --git a/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/sysutils/NetlinkEvent.cpp b/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/sysutils/NetlinkEvent.cpp
old mode 100644
new mode 100755
index 3d4d3a1..87fd5ce
--- a/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/sysutils/NetlinkEvent.cpp
+++ b/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/sysutils/NetlinkEvent.cpp
@@ -69,7 +69,7 @@
#define SLOGE(fmt, ...) syslog(LOG_ERR, fmt, ##__VA_ARGS__)
#endif
-#define UCI_CONFIG_FILE "/etc/config/system"
+#define UCI_CONFIG_FILE "/etc/config/radio_property"
void clearRaInfoFlag(char *buff);
// remark due to not support mtk_properties