[Feature][T106][task-view-517]Add AT+GNSSMODE for The startup method of GNSS(COLD/WARM/HOT)
Only Configure :No
Affected branch: master
Affected module: gnss/AT
Is it affected on both ZXIC and MTK:only ZXIC
Self-test: Yes
Doc Update: No
Change-Id: Ibf6f079b69d93e8e584bab893498e23cf1f2aef4
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-atcid/lynq_atsvc_plugin.xml b/cap/zx297520v3/src/lynq/framework/lynq-atcid/lynq_atsvc_plugin.xml
index ce7d965..8c61ab5 100755
--- a/cap/zx297520v3/src/lynq/framework/lynq-atcid/lynq_atsvc_plugin.xml
+++ b/cap/zx297520v3/src/lynq/framework/lynq-atcid/lynq_atsvc_plugin.xml
@@ -6,7 +6,7 @@
/>
<module name="/lib/liblynq-qser-gnss.so"
register="lynq_register_gnss"
- cmd="AT+CGPS;AT+CGPSNMEA;AT+NAVSAT;AT+GNSSVER;AT+GNSSOTA"
+ cmd="AT+CGPS;AT+CGPSNMEA;AT+NAVSAT;AT+GNSSVER;AT+GNSSOTA;AT+GNSSMODE"
/>
<module name="/lib/liblynq-at-common.so"
register="lynq_register_at_common"
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp
index 776cace..6fc81a7 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp
@@ -795,6 +795,57 @@
}
+int lynq_at_gnssmode(int gnss_state_type)
+{
+ char hot_start[] = {0xF1,0xD9,0x06,0x40,0x01,0x00,0x03,0x4A,0x24};
+ char warm_start[] = {0xF1,0xD9,0x06,0x40,0x01,0x00,0x02,0x49,0x23};
+ char cold_start[] = {0xF1,0xD9,0x06,0x40,0x01,0x00,0x01,0x48,0x22};
+ int ret;
+ int buf_length;
+ char *send_buf = NULL;
+ int fd = open(MBTK_GNSS_DEV, O_RDWR | O_NOCTTY | O_NDELAY);
+ if(fd < 0) {
+ ALOGE("open error\n");
+ return -1;
+ }
+ switch(gnss_state_type)
+ {
+ case 1:
+ {
+ send_buf = cold_start;
+ buf_length = sizeof(cold_start);
+ break;
+ }
+ case 2:
+ {
+ send_buf = hot_start;
+ buf_length = sizeof(hot_start);
+ break;
+ }
+ case 3:
+ {
+ send_buf = warm_start;
+ buf_length = sizeof(warm_start);
+ break;
+ }
+ default:
+ {
+ close(fd);
+ return -2;
+ }
+ }
+ ret = write(fd, send_buf, buf_length);
+ if(ret < 0)
+ {
+ ALOGE("modify cmd send faild\n");
+ close(fd);
+ return -1;
+ }
+ usleep(100000);
+ close(fd);
+ return 0;
+}
+
void atsvc_incb_entity(char *input,int length)
{
int res = 0;
@@ -868,6 +919,23 @@
return;
}
}
+ else if (!strcmp(parse_atcmd, "AT+GNSSMODE"))
+ {
+ res = lynq_at_gnssmode(gnss_state_type);
+ if (res != 0)
+ {
+ sprintf(gnss_at_cmd,"+CME ERROR: 100\r\n");
+ atsvc_gnss_outcb(gnss_at_cmd,strlen(gnss_at_cmd),0);
+ return;
+ }
+ }
+ else
+ {
+ ALOGE("unknown at cmd\r\n");
+ sprintf(gnss_at_cmd,"+CME ERROR: 100\r\n");
+ atsvc_gnss_outcb(gnss_at_cmd,strlen(gnss_at_cmd),0);
+ return;
+ }
sprintf(gnss_at_cmd,"OK\r\n");
atsvc_gnss_outcb(gnss_at_cmd,strlen(gnss_at_cmd),0);
return;