[Bugfix][API-677][AT]at+lcsus=0 or 1 no response
[Feature][T8TSK-112][AT]at+elapnact can query pdp state

Change-Id: I3a45532e97a034c950b933281c57908570293d7e
diff --git a/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp b/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
index 151e2ef..03b43dd 100755
--- a/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
@@ -56,12 +56,14 @@
 #define TELEPHONY_SERVICE "mtk.telephony" /*well-known bus name */
 #define TELEPHONY_DATA_INTERFACE "mtk.telephony.Data" /*interface name*/
 #define TELEPHONY_DATA_PATH "/mtk/telephony/data" /*object name*/
+#define DEBUG 0
 
 GMainLoop *loop = NULL;
 GDBusProxy *proxy = NULL;
 MTK_Data_Call_Response_v1 req_response;
 MTK_Data_Call_Response_v1 urc_response;
 
+
 /*Typethree add for t800 ril service 2022/04/14 start*/
 
 int lynq_data_modify_apn(gchar *reason,int lynq_request_id)
@@ -83,29 +85,20 @@
 /*Typethree add for t800 ril service 2022/04/14 end*/
 
 /*Warren add for t103 szzt atsvc 2022/1/5 start*/
+/*lei modify on 2022/11/16*/
 int lynqUpdateApnStatus(char *apn,char *apntype,int pdnState,char *ifname, char *addresses)//jb.qi add for IP address on20221025
 {
-    char BUF[256] = {};
-    int len = -1;
     if(pdnState==PDN_CONNECTED)
     {
-        sprintf(BUF,"+LAPNST:%s,%s,%d,%s,%s\n",apn,apntype,pdnState,ifname,addresses);//jb.qi add for IP address on20221025
-        printf("eBuf:%s\n",BUF);
-        len = write(ttyGS3_fd,BUF,strlen(BUF));
+        lynq_output_info("+LAPNST:%s,%s,%d,%s,%s\n",apn,apntype,pdnState,ifname,addresses);
     }
     else
     {
-        sprintf(BUF,"+LAPNST:%s,%s,%d\n",apn,apntype,pdnState);
-        printf("eBuf:%s\n",BUF);
-        len = write(ttyGS3_fd,BUF,strlen(BUF));
-    }
-    if(len < 0)
-    {
-        perror("lynq resp write:");
-        return -1;
+        lynq_output_info("+LAPNST:%s,%s,%d\n",apn,apntype,pdnState);
     }
     return 0;
 }
+/*lei modify on 2022/11/16*/
 /*Warren add for t103 szzt atsvc 2022/1/5 end*/
 
 /*Warren add for t800 ril service 2021/12/25 start*/
@@ -120,8 +113,6 @@
         return -1;
     }
     bool apnHasCreated = FALSE;
-    char Buf[1024] = {0};
-    bzero(Buf, 1024);
     Parcel p;
     if(urc_response->cId > 0)
     {
@@ -129,20 +120,19 @@
         {
             for(int i = 0;i < LYNQ_APN_CHANNEL_MAX;i++)
             {
-                //printf("data test 002:count:%d\n",i);
+                #if DEBUG
+                lynq_output_info("line %d [PDN_DISCONNECTED]apn_table[%d],apntype:%s,apnstatus:%d,,,urc_response->apnName:%s\n",__LINE__, i,apn_table[i].apntype,apn_table[i].apnstatus,urc_response->apnType);
+                #endif
                 RLOGD("[PDN_DISCONNECTED]apn_table[%d],apntype:%s,apnstatus:%d,,,urc_response->apnName:%s\n",i,apn_table[i].apntype,apn_table[i].apnstatus,urc_response->apnType);
                 if((strcmp(apn_table[i].apntype,urc_response->apnType)==0)&&(apn_table[i].apnstatus==0))
                 {
                     bzero(apn_table[i].apn,LYNQ_APN_LEN_MAX);
                     bzero(apn_table[i].apntype,LYNQ_APNTPYE_LEN_MAX);
-                    apn_table[i].used=0;
-                    apn_table[i].netId=0;
+                    apn_table[i].used = 0;
+                    apn_table[i].netId = 0;
+                    apn_table[i].pdpstate = PDN_DISCONNECTED;
                     apn_count--;
-                    int n = write(ttyGS3_fd,"OK\n",3);
-                    if(n<0)
-                    {
-                        perror("lynq resp write:");
-                    }
+                    lynq_output_info("\nOK\n");
                     p.writeInt32 (1);
                     p.writeInt32 (LYNQ_URC_DATA_CALL_STATUS_IND);
                     p.writeInt32 (0);//temporary plan
@@ -150,7 +140,6 @@
                     writeStringToParcel(p,urc_response->apnType);
                     android::LYNQ_RIL_urcBroadcast(p);
                     RLOGD("removed apn:%s,apntype:%s",apn_table[i].apn,apn_table[i].apntype);
-                    //printf("removed apn:%s,apntype:%s\n",apn_table[i].apn,apn_table[i].apntype);
                     break;
                 }
             }
@@ -172,7 +161,11 @@
                 memcpy(apn_table[apn_count].apn,urc_response->apnName,strlen(urc_response->apnName)+1);
                 memcpy(apn_table[apn_count].apntype,urc_response->apnType,strlen(urc_response->apnType)+1);
                 memcpy(apn_table[apn_count].ifaceName,urc_response->ifname,strlen(urc_response->ifname)+1);
-                //printf("apn_table[%d].apn:%s,,,,urc_response->apnName:%s\n",apn_count,apn_table[apn_count].apn,urc_response->apnName);
+                memcpy(apn_table[apn_count].address,urc_response->addresses,strlen(urc_response->addresses)+1);
+                apn_table[apn_count].pdpstate = urc_response->pdnState;
+                #if DEBUG
+                lynq_output_info("line %d apn_table[%d].apn:%s,apntype:%s,,,urc_response->apnName:%s,urc_response->apntype:%s\n",__LINE__,apn_count,apn_table[apn_count].apn,apn_table[apn_count].apntype,urc_response->apnName,urc_response->apnType);
+                #endif
                 RLOGD("apn_table[%d].apn:%s,apntype:%s,,,urc_response->apnName:%s,urc_response->apntype:%s\n",apn_count,apn_table[apn_count].apn,apn_table[apn_count].apntype,urc_response->apnName,urc_response->apnType);
                 apn_table[apn_count].apnstatus=1;
                 apn_table[apn_count].used=1;
@@ -190,17 +183,28 @@
             }
             else
             {
-                for(int i = 0;i < LYNQ_APN_CHANNEL_MAX;i++)
+                for(int i = 0;i < LYNQ_APN_CHANNEL_MAX;i++)//means apn state changed,need update
                 {
+                    #if DEBUG
+                    lynq_output_info("line %d for apn_table[%d].apn:%s,,,,urc_response->apnName:%s\n",__LINE__,i,apn_table[i].apn,urc_response->apnName);
+                    #endif
                     RLOGD("for apn_table[%d].apn:%s,,,,urc_response->apnName:%s\n",i,apn_table[i].apn,urc_response->apnName);
                     if(strcmp(apn_table[i].apn,urc_response->apnName)==0)
                     {
+                        #if DEBUG
+                        lynq_output_info("line %d This apn has been created update???!!!\n",__LINE__);
+                        #endif
                         RLOGD("This apn has been created!!!");
-                        printf("This apn has been created!!!\n");
                         apnHasCreated = TRUE;
                         if(apn_table[i].netId!=urc_response->netId)
                         {
-                            apn_table[i].netId=urc_response->netId;
+                            #if DEBUG
+                            lynq_output_info("update???\n");
+                            #endif
+                            apn_table[i].netId = urc_response->netId;
+                            apn_table[i].pdpstate = urc_response->pdnState;
+                            memcpy(apn_table[i].ifaceName,urc_response->ifname,strlen(urc_response->ifname)+1);
+                            memcpy(apn_table[i].address,urc_response->addresses,strlen(urc_response->addresses)+1);
                             lynqUpdateApnStatus(urc_response->apnName,urc_response->apnType,urc_response->pdnState,urc_response->ifname,urc_response->addresses);//jb.qi add for IP address on20221025
                             memcpy(iface_t,apn_table[i].ifaceName,strlen(apn_table[i].ifaceName)+1);
                             memcpy(apnType_t,apn_table[i].apntype,strlen(apn_table[i].apntype)+1);
@@ -216,23 +220,15 @@
                             writeStringToParcel(p,apnType_t);
                             writeStringToParcel(p,iface_t);
                             android::LYNQ_RIL_urcBroadcast(p);
-                            //lynq_data_callback(apn_t,apnType_t,urc_response->pdnState,iface_t);
-                            //sprintf(Buf,"+LAPNST:%s,%s,%d,%s\n",apn_table[i].apn,apn_table[i].apntype,urc_response->pdnState,urc_response->ifname);
-                            //printf("eBuf:%s\n",Buf);
-                            //int n = write(ttyGS3_fd,Buf,strlen(Buf));
-                            //if(n<0)
-                            //{
-                            //     perror("lynq resp write:");
-                            //}
                         }
                         break;
                     }
                 }
-                if(!apnHasCreated)//new apn has created
+                if(!apnHasCreated)//Multiple APNs are established new apn has created         
                 {
                     bool getLable = FALSE;
                     int lable = 0;
-                    for(lable;lable < LYNQ_APN_CHANNEL_MAX;lable++)
+                    for(lable;lable < LYNQ_APN_CHANNEL_MAX;lable++)//to find not used array element subscript
                     {
                         if(apn_table[lable].used==0)
                         {
@@ -242,10 +238,15 @@
                     }
                     if(getLable)
                     {
+                        #if DEBUG
+                        lynq_output_info("line %d Multiple APNs are established\n", __LINE__);
+                        #endif
                         RLOGD("[getLable]:label==%d\n",lable);
                         memcpy(apn_table[lable].apn,urc_response->apnName,strlen(urc_response->apnName)+1);
                         memcpy(apn_table[lable].apntype,urc_response->apnType,strlen(urc_response->apnType)+1);
                         memcpy(apn_table[lable].ifaceName,urc_response->ifname,strlen(urc_response->ifname)+1);
+                        apn_table[lable].pdpstate = urc_response->pdnState;
+                        memcpy(apn_table[lable].address,urc_response->addresses,strlen(urc_response->addresses)+1);
                         RLOGD("new apn_table[%d].apn:%s,apntype:%s,,,urc_response->apnName:%s,urc_response->apntype:%s\n",lable,apn_table[lable].apn,apn_table[lable].apntype,urc_response->apnName,urc_response->apnType);
                         apn_table[lable].apnstatus=1;
                         apn_table[lable].used=1;
@@ -269,7 +270,7 @@
             }
         }
     }
-    else
+    else  //cid < 0 it means:when at+cfun=0 will into this or when connecting
     {
         apnHasCreated = FALSE;
         RLOGD("[cid < 0] apn_count:%d\n",apn_count);
@@ -278,6 +279,9 @@
             int i = 0;
             for(i;i < LYNQ_APN_CHANNEL_MAX;i++)
             {
+                #if DEBUG
+                lynq_output_info("line %d don't know\n", __LINE__);
+                #endif
                 RLOGD("[cid<0]apn_table[%d].apntype:%s,,,,urc_response->apntype:%s\n",i,apn_table[i].apntype,urc_response->apnType);
                 if(strcmp(apn_table[i].apntype,urc_response->apnType)==0)
                 {
@@ -288,8 +292,19 @@
             }
             if(apnHasCreated)
             {
-                //sprintf(Buf,"+LAPNST:%s,%s,%d\n",apn_table[i].apn,apn_table[i].apntype,urc_response->pdnState);
-                //printf("Buf:%s\n",Buf);
+                #if DEBUG
+                lynq_output_info("line %d don't know\n", __LINE__);
+                #endif
+                apn_table[i].pdpstate = urc_response->pdnState;
+                char ptr[1] = "";
+                if(NULL == urc_response->ifname)
+                {
+                    memcpy(apn_table[i].ifaceName, ptr,strlen(ptr)+1);
+                }
+                if(NULL == urc_response->addresses)
+                {
+                    memcpy(apn_table[i].address, ptr, strlen(ptr)+1);
+                }
                 lynqUpdateApnStatus(apn_table[i].apn,apn_table[i].apntype,urc_response->pdnState,NULL,NULL);//jb.qi add for IP address on20221025
                 memcpy(iface_t,apn_table[i].ifaceName,strlen(apn_table[i].ifaceName)+1);
                 memcpy(apnType_t,apn_table[i].apntype,strlen(apn_table[i].apntype)+1);
@@ -302,11 +317,6 @@
                 writeStringToParcel(p,apnType_t);
                 writeStringToParcel(p,iface_t);
                 android::LYNQ_RIL_urcBroadcast(p);
-                //int n = write(ttyGS3_fd,Buf,strlen(Buf));
-                //if(n<0)
-                //{
-                //    perror("lynq resp write:");
-                //}
             }
         }
     }
diff --git a/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp b/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp
index 191b725..7b54cc8 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp
@@ -19,6 +19,7 @@
 #include <sys/time.h>
 #include "Phone_utils.h"
 #include "utils.h"
+#include "data_gdbus.h"
 usb_cmd_t Usb_commands[] = {
 #include "lynq_commands.h"
 };
@@ -86,7 +87,6 @@
         case LYNQ_REQUEST_APN:
         case LYNQ_REQUEST_SWITCH_SIM:
         {
-            printf("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
             return LYNQ_GOTO_TELE_REQ;
         }
         case LYNQ_REQUEST_SEND_LOG_DATA:
@@ -445,45 +445,74 @@
     }
     return 0;
 }
+
+static void lynq_display_pdnstate(void)
+{
+    lynq_output_info("\n");
+    for(int i = 0;i < apn_count; i ++)
+    {
+        lynq_output_info("+ELAPNACT:%s,%s,%d,%s,%s\n", apn_table[i].apn, apn_table[i].apntype ,apn_table[i].pdpstate, apn_table[i].ifaceName, apn_table[i].address);
+    }
+    lynq_output_info("OK\n");
+    return;
+}
+
 int setupData_e(int argc,char*argv[],char *rilReq, int uToken)
 {
     int status = 0;
     int ret = -1;
-    if(argc < 5)
-    {
-        RLOGD("parameter error!!!");
-        return 1;
-    }
-    bzero(lynq_at,LYNQ_AT_LEN_MAX);
-    sprintf(lynq_at,"ELAPNACT");
     char *new_argv[10] = {};
-    status = atoi(argv[3]);
-    if(status == 1 )
+    if(NULL == argv[2])
     {
-        ret = checkDataRegistration(uToken);
-        if(ret != 0)
-        {
-            RLOGD("[setupData] radio is not available!!!");
-            return -1;
-        }
-        new_argv[0] = (char *)rilReq;
-        new_argv[1] = argv[4];//apn
-        new_argv[2] = argv[5];//apntype
-        new_argv[3] = argv[6];//user
-        new_argv[4] = argv[7];//password
-        new_argv[5] = argv[8];//authType
-        new_argv[6] = argv[9];//normalprotocol
-        new_argv[7] = argv[10];//roamingprotocol
-        //memcpy(apn_table[apn_count].apn,argv[4],strlen(argv[4]));
-        //apn_count++;
-        android::lynqSendToRil(8,new_argv,uToken);
-        syncRespToUsb(0);
+        lynq_output_info("\n+ELAPNACT: 10\n");
+        return -1;
     }
-    else if(status == 0)
+    int type = atoi(argv[2]);
+    if(type == 0)
     {
-        new_argv[0] = "RIL_REQUEST_DEACTIVATE_DATA_CALL";
-        new_argv[1] = argv[4];//apntype
-        android::lynqSendToRil(2,new_argv,uToken);
+        if(argc < 5)
+        {
+            RLOGD("parameter error!!!");
+            return 1;
+        }
+        status = atoi(argv[3]);
+        if(status == 1 )
+        {
+            ret = checkDataRegistration(uToken);
+            if(ret != 0)
+            {
+                RLOGD("[setupData] radio is not available!!!");
+                return -1;
+            }
+            new_argv[0] = (char *)rilReq;
+            new_argv[1] = argv[4];//apn
+            new_argv[2] = argv[5];//apntype
+            new_argv[3] = argv[6];//user
+            new_argv[4] = argv[7];//password
+            new_argv[5] = argv[8];//authType
+            new_argv[6] = argv[9];//normalprotocol
+            new_argv[7] = argv[10];//roamingprotocol
+            //memcpy(apn_table[apn_count].apn,argv[4],strlen(argv[4]));
+            //apn_count++;
+            android::lynqSendToRil(8,new_argv,uToken);
+            syncRespToUsb(0);
+        }
+        else if(status == 0)
+        {
+            new_argv[0] = "RIL_REQUEST_DEACTIVATE_DATA_CALL";
+            new_argv[1] = argv[4];//apntype
+            android::lynqSendToRil(2,new_argv,uToken);
+            syncRespToUsb(0);
+        }
+    }
+    else if (type == 1)
+    {
+        lynq_output_info("\n+ELAPNACT: (0-7)\n");
+        lynq_output_info("OK\n\n");
+    }
+    else if (type == 2)
+    {
+        lynq_display_pdnstate();
     }
     return 0;
 }
diff --git a/src/lynq/framework/lynq-ril-service/src/lynq_common.h b/src/lynq/framework/lynq-ril-service/src/lynq_common.h
index 9fe53e2..483986a 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_common.h
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_common.h
@@ -38,7 +38,7 @@
 
 #define LYNQ_APN_LEN_MAX 100
 #define LYNQ_APNTPYE_LEN_MAX 50
-#define LYNQ_APN_CHANNEL_MAX 10
+#define LYNQ_APN_CHANNEL_MAX 7//max is 7
 #define LYNQ_AT_LEN_MAX 20
 #define LYNQ_EVENT_WAIT_TIME_MAX 25 //m
 
@@ -92,6 +92,8 @@
     int netId;
     int used;//0:not use,1:used.
     int apnstatus;//1:has enable;0:need disable.
+    int pdpstate;//lei add for at+elapnact?  refer to T800 AT COMMANDS:+lapnact
+    char address[LYNQ_APNTPYE_LEN_MAX];
 }apn_table_t;
 extern apn_table_t apn_table[LYNQ_APN_CHANNEL_MAX];
 extern int apn_count;
diff --git a/src/lynq/framework/lynq-ril-service/src/sim.cpp b/src/lynq/framework/lynq-ril-service/src/sim.cpp
index a6032a2..d77ab19 100755
--- a/src/lynq/framework/lynq-ril-service/src/sim.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/sim.cpp
@@ -182,16 +182,19 @@
         free(pRI);
         RLOGD("the paremeters numbers isn't right , so return");
         android::emResultNotify("Set failed.\n");
+        lynq_output_info("\nCME ERROR:2\n");
         return -1;
     }
 
     if(Radio_capability_switch_util::is_sim_inserted(atoi(argv[1]))) {
         set_default_sim_all(atoi(argv[1]));
         android::emResultNotify("Set successful.\n");
+        lynq_output_info("\nOK\n");
         free(pRI);
     } else {
         RLOGD("Set default all fail, SIM card absent");
         android::emResultNotify("Set default all fail, SIM card absent.\n");
+        lynq_output_info("\nCME ERROR:11\n");
         free(pRI);
     }