[Feature][T8TSK-197][At]add AT+CGPSINFO to get location

Change-Id: I65c73660b7548922d32d74c278780e521bbdfb3c
diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_callback.c b/src/lynq/lib/liblynq-gnss/src/lynq_callback.c
index b8a402f..2663332 100755
--- a/src/lynq/lib/liblynq-gnss/src/lynq_callback.c
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_callback.c
@@ -145,7 +145,11 @@
 

 void lynq_at_gps_location_callback(lynq_GpsLocation_ext* location)

 {

-

+    at_gpsinfo_ok = 1;

+    sprintf(gpsinfo, "+CGPSINFO: %.10lf,%.10lf,%f,%f,%.10lf,%f,%ld",location->legacyLocation.latitude \

+    , location->legacyLocation.longitude, location->horizontalAccuracyMeters,location->legacyLocation.bearing \

+    ,location->legacyLocation.altitude, location->legacyLocation.speed\

+    ,location->legacyLocation.timestamp/1000);

 }

 

 void lynq_at_gps_status_callback(GpsStatus* status)

diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c b/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
index 4d79d0f..7ae6c4f 100755
--- a/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
@@ -44,6 +44,14 @@
 

 static int g_lynq_gnss_calback_flag = 0;

 

+enum

+{

+    Gnss_ok = 0,

+    Not_open = 1,

+    Not_located = 10,

+    Gnss_unknow = 100

+};

+

 /**

  * @brief mark gnss raw meas state

  * 0: deinit state

@@ -117,6 +125,7 @@
     RLOGD("timer de init end");

     g_lynq_gnss_calback_flag = 0;

     g_lynq_gnss_init_flag = 0;

+    at_gpsinfo_ok = 0;

     return 0;

 }

 

@@ -327,9 +336,13 @@
 void atsvc_incb_entity(const char *input,const int length);

 int lynq_at_cgps(int at_type,char *at_paramter);

 int lynq_at_cgpsnmea(int at_type,char *at_paramter);

+int lynq_at_cgpsinfo(void);

+void lynq_display_res(int res);

 

 int at_gps_status = 0;

 int at_gpsnmea_status = 0;

+int at_gpsinfo_ok = 0;

+char gpsinfo[512] = {0};

 

 int strUpper(char * str)

 {

@@ -457,14 +470,13 @@
     }

     else if (!strcmp(parse_atcmd[0], "AT+CGPSNMEA"))

     {

-        lynq_at_cgpsnmea(income_at_type,parse_atcmd[1]);

+        res = lynq_at_cgpsnmea(income_at_type,parse_atcmd[1]);

     }

-    else 

+    else if (!strcmp(parse_atcmd[0], "AT+CGPSINFO"))

     {

-        memcpy(gnss_at_cmd,"+CME ERROR: 100\r\n",strlen("+CME ERROR: 100\r\n"));

+        res = lynq_at_cgpsinfo();

     }

-    memcpy(gnss_at_cmd,"OK\r\n",4);

-    atsvc_gnss_outcb(gnss_at_cmd,4,0);

+    lynq_display_res(res);

 }

 

 

@@ -592,4 +604,43 @@
         }

         return 0;

     }

-}
\ No newline at end of file
+}

+

+int lynq_at_cgpsinfo()

+{

+    if(at_gps_status == 0)//not open gps

+    {

+        return Not_open;

+    }

+    if(at_gpsinfo_ok == 0)//means not valid location

+    {

+        return Not_located;

+    }

+    else

+    {

+        atsvc_gnss_outcb(gpsinfo, strlen(gpsinfo), 1);

+        return 0;

+    }

+}

+

+void lynq_display_res(int res)

+{

+    char res_buf[128] = {0};

+    switch (res)

+    {

+        case Gnss_ok:

+            sprintf(res_buf,"OK\r\n",4);

+            break;

+        case Not_open:

+            sprintf(res_buf, "+CME ERROR: %d\r\n", Not_open);

+            break;

+        case Not_located:

+            sprintf(res_buf, "+CME ERROR: %d\r\n", Not_located);

+            break;

+        default:

+            sprintf(res_buf,"+CME ERROR: %d\r\n", Gnss_unknow);

+            break;

+    }

+    atsvc_gnss_outcb(res_buf,strlen(res_buf),0);

+}

+

diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_gnsshal.h b/src/lynq/lib/liblynq-gnss/src/lynq_gnsshal.h
index 04938c9..0b4f5e2 100755
--- a/src/lynq/lib/liblynq-gnss/src/lynq_gnsshal.h
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_gnsshal.h
@@ -42,6 +42,8 @@
 

 extern lynq_atsvc_outcb atsvc_gnss_outcb;

 extern int at_gpsnmea_status;

+extern int at_gpsinfo_ok;

+extern char gpsinfo[512];

 

 typedef enum{

     LYNQ_ATCMD_TEST = 0,