[feature][T3TSK-2][AT]AT+CFSN:read sn

Change-Id: Idf7093c7a8f12dffde5ba83a46856a9da19101d9
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_at.cpp b/src/lynq/framework/lynq-atsvc/src/lynq_at.cpp
index 6ff642c..ce6d67c 100644
--- a/src/lynq/framework/lynq-atsvc/src/lynq_at.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_at.cpp
@@ -5,23 +5,24 @@
 **     Version: V1.0
 **     LastChange: 2021-09-28 
 **     History: 
-**=============================================================================*/

-#include "lynq_at.h"

-#include "common.h"

+**=============================================================================*/
+#include <string.h>
+#include "lynq_at.h"
+#include "common.h"
 #include "stateManager/stateManager.h"
 #include "Phone_utils.h"
 #include "utils.h"
-

-int lynqSendAt(int argc,char *argv[],int uToken)

-{

+
+int lynqSendAt(int argc,char *argv[],int uToken)
+{
     int request = RIL_REQUEST_OEM_HOOK_RAW;
     RIL_SOCKET_ID id = RIL_SOCKET_1;
     if(utils::is_support_dsds())
-    {

+    {
         id = (RIL_SOCKET_ID)get_default_sim_all_except_data();
     }
-    else if(utils::is_suppport_dsss())

-    {

+    else if(utils::is_suppport_dsss())
+    {
         id = (RIL_SOCKET_ID)Phone_utils::get_enable_sim_for_dsss();
     }
    // if (request < 1 || (request >= (int32_t)NUM_ELEMS(s_commands) && request < RIL_REQUEST_VENDOR_BASE)) {
@@ -31,10 +32,17 @@
     //}
 
     //RLOGD("REQUEST: %s ParamterNum:%d", requestToString(request), argc);
-    RequestInfo *pRI  = creatRILInfoAndInit(request, UDP, (RIL_SOCKET_ID)(id));

-    pRI->lynqEvent=1;

-    printf("Warren test ====> argv[1]=%s\n",argv[1]);

-    sendATCMD(2, argv,id,pRI);

-    return 0;

-}

-

+    RequestInfo *pRI  = creatRILInfoAndInit(request, UDP, (RIL_SOCKET_ID)(id));
+    if(!strcmp(argv[1],"AT+CFSN"))
+    {
+        pRI->lynqEvent=2;
+    }
+    else
+    {
+        pRI->lynqEvent=1;
+    }
+    printf("Warren test ====> argv[1]=%s\n",argv[1]);
+    sendATCMD(2, argv,id,pRI);
+    return 0;
+}
+
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 1b1308d..d685cbb 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
@@ -3,6 +3,9 @@
 {LYNQ_REQUEST_CGAUTO,"CGAUTO",0},

 {LYNQ_REQUEST_CGACT,"CGACT",4},

 {LYNQ_REQUEST_CGDCONT,"CGDCONT",4},

+/*lei add for clt*/

+{LYNQ_REQUEST_CFSN,"CFSN",7},

+/*lei add for clt*/

 {LYNQ_USER_REQUEST_GNSS,"LYNQGNSS",7},

 {LYNQ_USER_REQUEST_OTHRE,"LYNQOTHER",7},

 {LYNQ_REQUEST_LAPNACT,"LAPNACT",7},

diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp b/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
index 038fa4f..191b953 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
@@ -80,6 +80,7 @@
         case LYNQ_REQUEST_GMI:
         case LYNQ_REQUEST_CGACT:
         case LYNQ_REQUEST_CGDCONT:
+        case LYNQ_REQUEST_CFSN:
         {
              return LYNQ_GOTO_AT;
         }
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_common.h b/src/lynq/framework/lynq-atsvc/src/lynq_common.h
index 5c988ad..6d39ea1 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_common.h
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_common.h
@@ -66,6 +66,7 @@
 #define LYNQ_REQUEST_CSCLK (LYNQ_VERSION +20)
 #define LYNQ_REQUEST_MPWRSM (LYNQ_VERSION +21)
 #define LYNQ_REQUEST_MWAKEUPCFG (LYNQ_VERSION +22)
+#define LYNQ_REQUEST_CFSN (LYNQ_VERSION +23)
 /*lei add*/
 #define LYNQ_USER_REQUEST_GNSS (LYNQ_VERSION +100)
 #define LYNQ_USER_REQUEST_OTHRE (LYNQ_VERSION +101)
diff --git a/src/lynq/framework/lynq-atsvc/src/ril.cpp b/src/lynq/framework/lynq-atsvc/src/ril.cpp
index 1a68f59..cb27c32 100755
--- a/src/lynq/framework/lynq-atsvc/src/ril.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/ril.cpp
@@ -3845,6 +3845,42 @@
     return 0;
 }
 
+/**
+ * @brief EGMR->CFSN
+ * 
+ * @param response 
+ */
+static void lynq_parse_EGMR(void *response)
+{
+    char *ptr = (char *)response;
+    while(*ptr != '\0')
+    {
+        *ptr++;
+        if(*ptr == 'E')
+        {
+            *ptr = 'C';
+        }
+        if(*ptr == 'G')
+        {
+            *ptr = 'F';
+        }
+        if(*ptr == 'M')
+        {
+            *ptr = 'S';
+        }
+        if(*ptr == 'R')
+        {
+            *ptr = 'N';
+        }
+        if(*ptr == ':')
+        {
+            break;
+        }
+
+    }
+    return;
+}
+
 extern "C" void
 RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen) {
     RequestInfo *pRI;
@@ -4081,6 +4117,18 @@
                         }
                         printf("n = %d\n",n);
                    }
+                   if(pRI->lynqEvent==2)
+                   {
+                        if(strstr((const char*)response,"+EGMR")){
+                            lynq_parse_EGMR(response);
+                        }
+                        int n = write(ttyGS3_fd,response,responselen);
+                        if(n<0)
+                        {
+                            perror("lynq resp write:");
+                        }
+                        printf("n = %d\n",n);
+                   }
                }
                default:
                    break;
diff --git a/src/lynq/framework/lynq-atsvc/src/stateManager/stateManager.cpp b/src/lynq/framework/lynq-atsvc/src/stateManager/stateManager.cpp
index a20fc58..d79c984 100755
--- a/src/lynq/framework/lynq-atsvc/src/stateManager/stateManager.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/stateManager/stateManager.cpp
@@ -130,7 +130,15 @@
 int sendATCMD(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI)
 {
     android::Parcel p;
-    char *cmd = (char *)argv[1];
+    char *cmd = NULL;
+    if(!strcmp(argv[1],"AT+CFSN"))
+    {
+        cmd = "AT+EGMR=0,5";
+    }
+    else
+    {
+        cmd = (char *)argv[1];
+    }
     size_t pos = p.dataPosition();
     if (cmd == NULL){
         RLOGD("sendATCMD:cmd is null\n");