[Feature]add MT2731_MP2_MR2_SVN388 baseline version
Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/src/lynq/lib/liblynq-tele-ril/lynq-riltel/lynq_sim.cpp b/src/lynq/lib/liblynq-tele-ril/lynq-riltel/lynq_sim.cpp
new file mode 100644
index 0000000..57baf99
--- /dev/null
+++ b/src/lynq/lib/liblynq-tele-ril/lynq-riltel/lynq_sim.cpp
@@ -0,0 +1,377 @@
+/*=============================================================================
+# FileName: lynq_sim.cpp
+# Desc: about SIM API
+# Author: mobiletek
+# Version: V1.0
+# LastChange: 2020-07-29
+# History:
+=============================================================================*/
+#include <dlfcn.h>
+#include <string.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include "lynq_common.h"
+#include "lynq_sim.h"
+#include <stateManager/stateManager.h>
+
+#undef LOG_TAG
+#define LOG_TAG "LYNQ_SIM"
+simInfoLink *simInfoLinkHead=NULL;
+
+
+/*Initialize SIM infomation queue for lynq_sim API.*/
+int init_sim()
+{
+ simInfoLinkHead=createSimInfoLink();
+ if(simInfoLinkHead==NULL)
+ {
+ RLOGD("init sim info link head fail!");
+ return -1;
+ }
+ RLOGD("init sim info link head success!");
+ millli_sleep_with_restart(300);//The premise of obtaining imsi is that aid_ptr has been obtained
+ return 0;
+
+}
+simStatus *parceToSimInfo(Parcel &p,int &len)
+{
+ int32_t res;
+ int num=0;
+ simStatus *msg=(simStatus *)malloc(sizeof(simStatus));
+ p.setDataPosition(0);
+ if (p.dataAvail() > 0)
+ {
+ p.readInt32(&res);
+ msg->card_status = (RIL_CardState)res;
+ p.readInt32(&num);
+ len = num;
+ LYDBGLOG("[%s] num is%d\n ",__FUNCTION__,num);
+ for (int i = 0; i < num; i++) //for future.
+ {
+ p.readInt32(&res);
+ msg->card_type = (RIL_AppType)res;
+ p.readInt32(&res);
+ msg->pin_state = (RIL_PinState)res;
+ }
+ return msg;
+ }
+ return NULL;
+}
+int checkParcelSimInfo(simStatus *msg,int32_t token)
+{
+ int time_sim =300;//3 s.
+ enum{RUN,EXIT}state;
+ state=RUN;
+ int length=0;
+ lynqQueue *node=NULL;
+ simStatus *temp=NULL;
+ while(time_sim--)
+ {
+ millli_sleep_with_restart(10);
+ node=LynqQueueHead;
+ if(node==NULL)
+ {
+ LYDBGLOG("[%s][%d][%s] Queue head is NULL, maybe malloc fail!",__FUNCTION__,__LINE__,__FILE__);
+ continue;
+ }
+ node = searchTokeninQueue(token, node);
+ if(node ==NULL)
+ {
+ msg->card_status=-1;
+ msg->card_type=-1;
+ msg->pin_state=-1;
+ msg->base.e=-1;
+ return -1;
+ }
+ if(node->t_Errno!=RIL_E_SUCCESS)
+ {
+ RLOGD("get sim status fail, the error code is %d",node->t_Errno);
+ msg->base.e=node->t_Errno;
+ msg->card_status=-1;
+ msg->card_type=-1;
+ msg->pin_state=-1;
+ return -1;
+ }
+ else
+ {
+ temp = parceToSimInfo(node->parcel,length);
+ if(temp ==NULL )
+ {
+ continue;
+ }
+ else
+ {
+ msg->card_status=temp->card_status;
+ msg->card_type=temp->card_type;
+ msg->pin_state=temp->pin_state;
+ msg->base.e=node->t_Errno;
+ free(temp);
+ temp=NULL;
+ return 0;
+ }
+ }
+ }
+ printf("time_sim is %d\n",time_sim);
+ msg->base.e=-1;
+ msg->card_status=-1;
+ msg->card_type=-1;
+ msg->pin_state=-1;
+ return -1;
+}
+/*return 0:success ,1:fail*/
+int checkSimInfo(simStatus *msg,int32_t token)
+{
+ int time_sim =300;//3 s.
+ enum{RUN,EXIT}state;
+ state=RUN;
+ printf("check sim Info start\n");
+ simInfoLink *temp;
+ while(time_sim--)
+ {
+ millli_sleep_with_restart(10);
+ temp=simInfoLinkHead;
+ if(temp==NULL)
+ {
+ RLOGD("sim info link head is NULL, maybe malloc fail!");
+ continue;
+ }
+ do
+ {
+ if((temp->simInfoLen!=0)&&(temp->token==token))
+ {
+ if(temp->Error_tok!=RIL_E_SUCCESS)
+ {
+ RLOGD("get sim status fail, the error code is %d",temp->Error_tok);
+ msg->base.e=temp->Error_tok;
+ msg->card_status=-1;
+ msg->card_type=-1;
+ msg->pin_state=-1;
+ return 1;
+ }
+ else
+ {
+ msg->card_status=temp->card_status;
+ msg->card_type=temp->card_type;
+ msg->pin_state=temp->pin_state;
+ msg->base.e=temp->Error_tok;
+ return 0;
+ }
+ }
+ temp=temp->next;
+ }while(temp!=NULL);
+ }
+ printf("time_sim is %d\n",time_sim);
+ msg->card_status=-1;
+ msg->card_type=-1;
+ msg->pin_state=-1;
+ msg->base.e=-1;
+ return 0;
+}
+/*return 0:success ,1:fail*/
+int checkParcelImsiInfo(simImsi *msg,int32_t token)
+{
+ int time_sim =300;//3 s.
+ enum{RUN,EXIT}state;
+ int num;
+ state=RUN;
+ printf("check IMSI Info start\n");
+ lynqQueue *node = NULL;
+ lynqQueue *temp =NULL;
+ while(time_sim--)
+ {
+ millli_sleep_with_restart(10);
+ temp=LynqQueueHead;
+ if(temp==NULL)
+ {
+ RLOGD("sim info link head is NULL, maybe malloc fail!");
+ continue;
+ }
+ node = searchTokeninQueue(token, temp);
+ if(node ==NULL)
+ {
+ memset(msg->imsi,0,sizeof(msg->imsi));
+ msg->base.e=-1;
+ return -1;
+ }
+ if(node->t_Errno!=RIL_E_SUCCESS)
+ {
+ RLOGD("get sim status fail, the error code is %d",node->t_Errno);
+ msg->base.e=node->t_Errno;
+ memset(msg->imsi,0,sizeof(msg->imsi));
+ return -1;
+ }
+ else
+ {
+ node->parcel.setDataPosition(0);
+ if (node->parcel.dataAvail() > 0)
+ {
+
+ node->parcel.readInt32(&num);
+ for(int i =0;i<num;i++)
+ {
+ char * str=lynqStrdupReadString(node->parcel);
+ memcpy(msg->imsi,str,strlen(str)+1);
+ msg->base.e=node->t_Errno;
+ }
+ return 0;
+ }
+ else
+ {
+ continue;
+ }
+ }
+ }
+ printf("time_sim is %d\n",time_sim);
+ msg->base.e=-1;
+ memset(msg->imsi,0,sizeof(msg->imsi));
+ return 0;
+}
+int checkImsiInfo(simImsi *msg,int32_t token)
+{
+ int time_sim =300;//3 s.
+ enum{RUN,EXIT}state;
+ state=RUN;
+ printf("check IMEI Info start\n");
+ simInfoLink *temp;
+ while(time_sim--)
+ {
+ millli_sleep_with_restart(10);
+ temp=simInfoLinkHead;
+ if(temp==NULL)
+ {
+ RLOGD("sim info link head is NULL, maybe malloc fail!");
+ continue;
+ }
+ do
+ {
+ if((temp->simInfoLen!=0)&&(temp->token==token))
+ {
+ if(temp->Error_tok!=RIL_E_SUCCESS)
+ {
+ RLOGD("get sim status fail, the error code is %d",temp->Error_tok);
+ msg->base.e=temp->Error_tok;
+ //msg->imsi = NULL;
+ memset(msg->imsi,0,sizeof(msg->imsi));
+ msg->base.token=token;
+ return 1;
+ }
+ else
+ {
+ msg->base.e=temp->Error_tok;
+ memcpy(msg->imsi,temp->imsi,strlen(temp->imsi)+1);
+ //msg->imsi = temp->imsi;
+ msg->base.token=token;
+ return 0;
+ }
+ }
+ temp=temp->next;
+ }while(temp!=NULL);
+ }
+ memset(msg->imsi,0,sizeof(msg->imsi));
+ //msg->imsi = NULL;
+ msg->base.token=token;
+ msg->base.e=-1;
+ return 0;
+}
+
+int lynq_set_default_sim_all(int sim_id) //sim_id 0 ro 1
+{
+ const char requestStr[MAX_LEN] = {"SET_DEFAULT_SIM_ALL"};
+ return lynqIntParame(requestStr,sim_id);
+}
+/*If you need to use any API under lynq_sim, you mustfirst call the init_sim() function to initialize these functions.*/
+int lynq_get_sim_status(simStatus *msg)
+{
+ int32_t token=0;
+ int length=0;
+ lynqQueue *node = NULL;
+ int timeout = 500; //timeout is 5s.
+ RIL_Errno err = -1;
+ simStatus *temp =NULL;
+ const char requestStr[MAX_LEN] = {"RIL_REQUEST_GET_SIM_STATUS"};
+ if(token = lynqNoneParame(requestStr))
+ {
+ msg->base.token=token;
+ msg->base.request = RIL_REQUEST_GET_SIM_STATUS;
+ node = commonUpdateEstatus(token,timeout,err);
+ msg->base.e = err;
+ if(err != RIL_E_SUCCESS)
+ {
+ LYDBGLOG("[%s] error code is %d!",__FUNCTION__,err);
+ msg->card_status=-1;
+ msg->card_type=-1;
+ msg->pin_state=-1;
+ lynqDeQueue(token);
+ return token;
+ }
+ if(node)
+ {
+ temp = parceToSimInfo(node->parcel,length);
+ if(length ==0)//it means sim card absent
+ {
+ msg->card_status = 0;
+ msg->card_type = 0;
+ msg->pin_state = 0;
+ }
+ else
+ {
+ msg->card_status=temp->card_status;
+ msg->card_type=temp->card_type;
+ msg->pin_state=temp->pin_state;
+ }
+ free(temp);
+ temp = NULL;
+ }
+ lynqDeQueue(token);
+ }
+ return token;
+}
+/*AT> AT+CIMI AT< IMSI*/
+int lynq_get_sim_status_ext(int sim_id )
+{
+ RLOGD("lynq_get_sim_status_ext,sim_id:%d",sim_id);
+ return getSimState(sim_id);
+}
+int lynq_get_imsi(simImsi * msg)
+{
+ int32_t token = 0;
+ lynqQueue *node = NULL;
+ int timeout = 500; //timeout is 5s.
+ RIL_Errno err = -1;
+ int num = 0;
+ //memset(msg,0,sizeof(simImsi));
+ const char requestStr[MAX_LEN] = {"RIL_REQUEST_GET_IMSI"};
+ if(token = lynqNoneParame(requestStr))
+ {
+ msg->base.request = RIL_REQUEST_GET_IMSI;
+ msg->base.token = token;
+ node = commonUpdateEstatus(token,timeout,err);
+ msg->base.e = err;
+ if(err != RIL_E_SUCCESS)
+ {
+ LYDBGLOG("[%s] error code is %d!",__FUNCTION__,err);
+ memset(msg->imsi,0,sizeof(msg->imsi));
+ lynqDeQueue(token);
+ return token;
+ }
+ if(node)
+ {
+ node->parcel.setDataPosition(0);
+ if (node->parcel.dataAvail() > 0)
+ {
+ node->parcel.readInt32(&num);
+ for(int i =0;i<num;i++)//for DSDS.
+ {
+ char * str=lynqStrdupReadString(node->parcel);
+ memcpy(msg->imsi,str,strlen(str)+1);
+ }
+ }
+ }
+ lynqDeQueue(token);
+ }
+ return token;
+}
+
+
+