[Feature][T3TSK-7][AT]Synchronize 800 AT instruction to read IMEI (AT+CGSN)

Change-Id: Ibe1b3d7717719a059038ff6ee4f64b6068e1d4bb
diff --git a/src/lynq/framework/lynq-atsvc/src/factory/lynq_factory.cpp b/src/lynq/framework/lynq-atsvc/src/factory/lynq_factory.cpp
index df2eee8..b6c4037 100755
--- a/src/lynq/framework/lynq-atsvc/src/factory/lynq_factory.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/factory/lynq_factory.cpp
@@ -1,4 +1,59 @@
+#include<sys/types.h>
+#include<sys/socket.h>
+#include<unistd.h>
+#include<netinet/in.h>
+#include<arpa/inet.h>
+#include<netdb.h>
+#include<signal.h>
+#include <log/log.h>
+#include <hardware_legacy/power.h>
+#include <vendor-ril/telephony/ril.h>
+#include <telephony/ril_cdma_sms.h>
+
+#include <telephony/record_stream.h>
+#include <utils/SystemClock.h>
+#include <binder/Parcel.h>
+#include <cutils/jstring.h>
+#include <sys/types.h>
+#include <limits.h>
+#include <pwd.h>
+
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include <unistd.h>
+
+#include <errno.h>
+#include <ctype.h>
+#include <alloca.h>
+#include <sys/un.h>
+#include <assert.h>
+#include <netinet/in.h>
+#include <atomic>
+
+#include "utils/String8.h"
+#include "ss.h"
+
+#include "cc.h"
+#include "network.h"
+#include "stk.h"
+
+
+#include "atci/ATCI.h"
+#include "data/data.h"
+#include "data/data_gdbus.h"
+#include "ecall/eCall.h"
+#include "em/em.h"
+#include "sms/sms.h"
+#include "sms/cdma/sms_pdu_cdma.h"
+#include "stateManager/stateManager.h"
+
+
+#include "Radio_capability_switch_util.h"
+
 #include <stdio.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 #include "common.h"
 #include "utils.h"
 #include "Phone_utils.h"
@@ -572,14 +627,68 @@
     return err;
 }
 
-static void lynq_gps_disable(void)
-{
-    enable_nema = 0;
-    lynq_factory_response_ttyGS3("+GPS DISABLE:OK\n");
-    return;
+void lynq_sendRequestToMd(int request, int id) {
+    RequestInfo* info = creatRILInfoAndInit(request, INIT, (RIL_SOCKET_ID) ((id)));
+    info->lynqEvent = 1;
+    switch(request){
+        case RIL_REQUEST_DEVICE_IDENTITY:
+        {
+            getDeviceIdentity(1, NULL, (RIL_SOCKET_ID) ((id)), info);
+            break;
+        }
+        case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE:
+        {
+            getPreferredNetworkType(1, NULL, (RIL_SOCKET_ID) ((id)), info);
+            break;
+        }
+        case RIL_REQUEST_GET_SIM_STATUS:
+        {
+            getIccCardStatus(1, NULL, (RIL_SOCKET_ID) (id), info);
+            break;
+        }
+        case RIL_REQUEST_DATA_REGISTRATION_STATE:
+        {
+            getDataRegistrationState(1, NULL, (RIL_SOCKET_ID) (id), info);
+            break;
+        }
+        case RIL_REQUEST_VOICE_REGISTRATION_STATE:
+        {
+            getVoiceRegistrationState(1, NULL, (RIL_SOCKET_ID) (id), info);
+            break;
+        }
+        case RIL_REQUEST_VOICE_RADIO_TECH:
+        {
+            getVoiceRadioTechnology(1, NULL, (RIL_SOCKET_ID) (id), info);
+            break;
+        }
+        case RIL_REQUEST_OEM_HOOK_RAW:
+        {
+            char* tmp[2] = {"RIL_REQUEST_OEM_HOOK_RAW", "AT+ECAL"};
+            sendATCMD(2, tmp, (RIL_SOCKET_ID) (id), info);
+            break;
+        }
+        case RIL_REQUEST_GET_RADIO_CAPABILITY:
+        {
+            getRadioCapability(1, NULL, (RIL_SOCKET_ID) ((id)), info);
+            break;
+        }
+        default:
+            RLOGE("don't support  %d in init", id);
+            if(info) {
+                free(info);
+            }
+    }
 }
 
 int lynq_get_factory_data(int num,char *argv[MAX_ARGS]){
+    if(!strcmp(argv[1],"AT+CGSN"))
+    {
+        for(int i = 0; i < 2; i++)
+        {
+            lynq_sendRequestToMd(RIL_REQUEST_DEVICE_IDENTITY,i);
+        }
+        //lynq_get_imei(num, argv);
+    }
     if(num < 4)
         return -1;
     if(!strcmp(argv[3], "wifi")){
@@ -594,9 +703,6 @@
     else if(!strcmp(argv[3], "gps_enable")){
         lynq_gps_enable();
     }
-    else if(!strcmp(argv[3], "gps_disable")){
-        lynq_gps_disable();
-    }
     else if(!strcmp(argv[3], "gps_close")){
         lynq_gps_close();
     }
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_at_transfer_table.h b/src/lynq/framework/lynq-atsvc/src/lynq_at_transfer_table.h
index 25edb74..84f1731 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_at_transfer_table.h
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_at_transfer_table.h
@@ -21,6 +21,7 @@
 {LYNQ_REQUEST_FACTORY,"LYNQFACTORY",7},

 {LYNQ_REQUEST_LINFO,"LINFO",7},

 {LYNQ_REQUEST_FOTA,"LYNQFOTA",7},

+{LYNQ_REQUEST_FACTORY,"CGSN",7},

 {LYNQ_REQUEST_TEMP,"LYNQMTSM",1},

 {LYNQ_REQUEST_TIME,"LYNQTIME",1},

 

diff --git a/src/lynq/framework/lynq-atsvc/src/ril.cpp b/src/lynq/framework/lynq-atsvc/src/ril.cpp
index b21bff6..83ad632 100755
--- a/src/lynq/framework/lynq-atsvc/src/ril.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/ril.cpp
@@ -169,6 +169,7 @@
 // Enable RILC log
 #define RILC_LOG 1
 
+int imei_cnt = 0;
 #if RILC_LOG
     static char printBuf[PRINTBUF_SIZE];
     static char tempPrintBuf[PRINTBUF_SIZE];
@@ -3864,6 +3865,23 @@
     return;
 }
 
+/**
+ * @brief To handle comma-separated strings, take the character before the first comma  eg:123456,78 ->123456
+ * 
+ * @param buf Type:[IN]
+ */
+static void parse_imei(char buf[])
+{
+    if(NULL == buf)
+    {
+        return;
+    }
+    const char s[2] = ",";
+    char *token;
+    token = strtok(buf, s);
+    return;
+}
+
 extern "C" void
 RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen) {
     RequestInfo *pRI;
@@ -4119,7 +4137,65 @@
                         }
                         printf("n = %d\n",n);
                    }
+                   break;
                }
+                /*lei add for AT+CGSN 2022/8/4*/
+                case RIL_REQUEST_DEVICE_IDENTITY:
+                {
+                    int resp_type;
+                    int request;
+                    int slot_id;
+                    int error1;
+                    int num;
+                    char imei[32] = {0};
+                    if(pRI->lynqEvent==1)
+                    {
+                        //printf("lei test %s\n" ,printBuf);
+                        p.setDataPosition(0);
+                        if(p.dataAvail() > 0)
+                        {
+                            p.readInt32(&resp_type);
+                            p.readInt32(&request);
+                            p.readInt32(&slot_id);
+                            p.readInt32(&error1);
+                            if(!error1)
+                            {
+                                p.readInt32(&num);
+                                char * test = strdupReadString(p);
+                                parse_imei(test);
+                                if(imei_cnt % 2 == 0)
+                                {
+                                    sprintf(imei,"%s%s%s", "+CGSN: ", test, "\n");
+                                    int n = write(ttyGS3_fd,imei,strlen(imei));
+                                    if(n<0)
+                                    {
+                                        perror("lynq resp write:");
+                                    }
+                                }
+                                else
+                                {
+                                    sprintf(imei,"%s%s%s", "+CGSN: ", test, "\n");
+                                    int n = write(ttyGS3_fd,imei,strlen(imei));
+                                    if(n<0)
+                                    {
+                                        perror("lynq resp write:");
+                                    }
+                                    char eBuf[64] = {0};
+                                    sprintf(eBuf,"OK\n");
+                                    n = write(ttyGS3_fd,eBuf,strlen(eBuf));
+                                    if(n<0)
+                                    {
+                                        perror("lynq resp write:");
+                                    }
+                                }
+                                free(test);
+                                imei_cnt++;
+                            }
+                        }
+                    }
+                    break;
+                }
+                /*lei add for AT+CGSN 2022/8/4*/
                default:
                    break;
                }