[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,