From 435cec04eebd297a6ebd29fffc2c254ee5ef6745 Mon Sep 17 00:00:00 2001
From: Andrii Pientsov <andrii.pientsov@globallogic.com>
Date: Mon, 22 Jun 2020 09:57:00 +0300
Subject: MTX-3449 mPower June20: GP-655 LNA7: SMS -> 3GPP vs. 3GPP2

---
 src/atcmd.c      | 29 +++++++++++++++++++++++++++++
 src/atcmd.h      |  3 +++
 src/sms_delete.c | 18 +++++++++++++++++-
 src/sms_list.c   | 18 +++++++++++++++++-
 src/sms_utils.h  |  3 +++
 5 files changed, 69 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/atcmd.c b/src/atcmd.c
index 97fd34b..f881808 100644
--- a/src/atcmd.c
+++ b/src/atcmd.c
@@ -830,6 +830,21 @@ int atcmd_plus_cmgd_write(int fd, int index)
 	return 0;
 }
 
+int atcmd_plus_qcfg_write(int fd, int sms_format)
+{
+	char buf[ATCMD_LINE_SIZE];
+	int tmp;
+
+	atcmd_writeline(fd, "AT+QCFG=\"ltesms/format\",%d", sms_format);
+	tmp = atcmd_expect_line(fd, buf, sizeof(buf), "OK");
+	if (tmp <= 0) {
+		log_debug("expected OK but it was not received");
+		return -1;
+	}
+
+	return 0;
+}
+
 int atcmd_response_foreach_line(int fd, atcmd_response_callback_t call, void *prv)
 {
 	char buf[ATCMD_LINE_SIZE];
@@ -1542,6 +1557,20 @@ int is_vzw_lte(void)
           !strncmp(Global.core.model, "LE910-SV1", MODEL_LEN));
 }
 
+/* Detect LNA7 radio with Verizon SIM */
+int is_vzw_lna7(void)
+{
+	if (!strncmp(Global.core.model, "EG95", MODEL_LEN)) {
+		log_debug("Found EG95");
+		/* Verizon Wireless SIM */
+		if (strncmp(Global.core.iccid,"891480",6) == 0) {
+			log_debug("Found VZW SIM");
+			return 1;
+		}
+	}
+	return 0;
+}
+
 int isCdmaTypeModel()
 {
   /* Test for possible dual firmware model */
diff --git a/src/atcmd.h b/src/atcmd.h
index dc3d5d9..1390dff 100644
--- a/src/atcmd.h
+++ b/src/atcmd.h
@@ -70,6 +70,8 @@ int atcmd_plus_cmgs_write_text(int fd, const char *addr, const char *msg, size_t
 int atcmd_plus_cmss_write(int fd, int index, const char *addr, int addr_type);
 int atcmd_plus_cmgd_write(int fd, int index);
 
+int atcmd_plus_qcfg_write(int fd, int sms_format);
+
 int isCdmaTypeModel();
 
 #define STORE_NAME_LEN		2
@@ -120,6 +122,7 @@ int atcmd_init(int fd, int read_timeout);
 int sms_device_close(int fd);
 int sms_device_open(void);
 int is_vzw_lte(void);
+int is_vzw_lna7(void);
 int is_telit_model(void);
 int is_quectel_model(void);
 
diff --git a/src/sms_delete.c b/src/sms_delete.c
index b45546e..34a0655 100644
--- a/src/sms_delete.c
+++ b/src/sms_delete.c
@@ -141,6 +141,7 @@ int sms_delete(int argc, char **argv)
 	int option_index;
 	int ret;
 	int fd;
+	int tmp, ret_3gpp, ret_3gpp2 = false;
 
 	while ((i = getopt_long(argc, argv, short_options, long_options, &option_index)) >= 0) {
 		switch (i) {
@@ -165,7 +166,22 @@ int sms_delete(int argc, char **argv)
 		return false;
 	}
 
-	ret = do_delete(fd, argc, argv);
+	// LNA7 with Verizon SIM SMS 3GPP, 3GPP2 WORKAROUND
+	if (is_vzw_lna7()) {
+		tmp = atcmd_plus_qcfg_write(fd, SMS_FORMAT_3GPP);
+		if (tmp == 0) {
+			ret_3gpp = do_delete(fd, argc, argv);
+		}
+
+		tmp = atcmd_plus_qcfg_write(fd, SMS_FORMAT_3GPP2);
+		if (tmp == 0) {
+			ret_3gpp2 = do_delete(fd, argc, argv);
+		}
+
+		ret = (ret_3gpp || ret_3gpp2);
+	} else {
+		ret = do_delete(fd, argc, argv);
+	}
 
 	sms_device_close(fd);
 
diff --git a/src/sms_list.c b/src/sms_list.c
index 678c158..ac55a28 100644
--- a/src/sms_list.c
+++ b/src/sms_list.c
@@ -456,6 +456,7 @@ int sms_list(int argc, char **argv)
 	int option_index;
 	int ret;
 	int fd;
+	int tmp, ret_3gpp, ret_3gpp2 = false;
 
 	if (argc < 1) {
 		log_debug("should have received at least one argument");
@@ -497,7 +498,22 @@ int sms_list(int argc, char **argv)
 		return false;
 	}
 
-	ret = do_list(fd, cmd_type, argc, argv);
+	// LNA7 with Verizon SIM SMS 3GPP, 3GPP2 WORKAROUND
+	if (is_vzw_lna7()) {
+		tmp = atcmd_plus_qcfg_write(fd, SMS_FORMAT_3GPP);
+		if (tmp == 0) {
+			ret_3gpp = do_list(fd, cmd_type, argc, argv);
+		}
+
+		tmp = atcmd_plus_qcfg_write(fd, SMS_FORMAT_3GPP2);
+		if (tmp == 0) {
+			ret_3gpp2 = do_list(fd, cmd_type, argc, argv);
+		}
+
+		ret = (ret_3gpp || ret_3gpp2);
+	} else {
+		ret = do_list(fd, cmd_type, argc, argv);
+	}
 
 	sms_device_close(fd);
 
diff --git a/src/sms_utils.h b/src/sms_utils.h
index 01d0e1f..2c50eb7 100644
--- a/src/sms_utils.h
+++ b/src/sms_utils.h
@@ -16,6 +16,9 @@
 #define SMS_PDU_MODE		0
 #define SMS_TEXT_MODE		1
 
+#define SMS_FORMAT_3GPP		1
+#define SMS_FORMAT_3GPP2	0
+
 #define SMS_ADDR_UNSPEC			0x00
 #define SMS_ADDR_LOCAL			0x81
 #define SMS_ADDR_GLOBAL			0x91
-- 
cgit v1.2.3


From 4fc2e232b17be5ea12d152a6c3f72902594f1966 Mon Sep 17 00:00:00 2001
From: Andrii Pientsov <andrii.pientsov@globallogic.com>
Date: Mon, 22 Jun 2020 10:49:59 +0300
Subject: MTX-3449 mPower June20: GP-655 LNA7: SMS -> 3GPP vs. 3GPP2

---
 src/sms_delete.c | 4 +++-
 src/sms_list.c   | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/sms_delete.c b/src/sms_delete.c
index 34a0655..48afc06 100644
--- a/src/sms_delete.c
+++ b/src/sms_delete.c
@@ -141,7 +141,8 @@ int sms_delete(int argc, char **argv)
 	int option_index;
 	int ret;
 	int fd;
-	int tmp, ret_3gpp, ret_3gpp2 = false;
+	int ret_3gpp = false;
+	int ret_3gpp2 = false;
 
 	while ((i = getopt_long(argc, argv, short_options, long_options, &option_index)) >= 0) {
 		switch (i) {
@@ -168,6 +169,7 @@ int sms_delete(int argc, char **argv)
 
 	// LNA7 with Verizon SIM SMS 3GPP, 3GPP2 WORKAROUND
 	if (is_vzw_lna7()) {
+		int tmp;
 		tmp = atcmd_plus_qcfg_write(fd, SMS_FORMAT_3GPP);
 		if (tmp == 0) {
 			ret_3gpp = do_delete(fd, argc, argv);
diff --git a/src/sms_list.c b/src/sms_list.c
index ac55a28..d5ad263 100644
--- a/src/sms_list.c
+++ b/src/sms_list.c
@@ -456,7 +456,8 @@ int sms_list(int argc, char **argv)
 	int option_index;
 	int ret;
 	int fd;
-	int tmp, ret_3gpp, ret_3gpp2 = false;
+	int ret_3gpp = false;
+	int ret_3gpp2 = false;
 
 	if (argc < 1) {
 		log_debug("should have received at least one argument");
@@ -500,6 +501,7 @@ int sms_list(int argc, char **argv)
 
 	// LNA7 with Verizon SIM SMS 3GPP, 3GPP2 WORKAROUND
 	if (is_vzw_lna7()) {
+		int tmp;
 		tmp = atcmd_plus_qcfg_write(fd, SMS_FORMAT_3GPP);
 		if (tmp == 0) {
 			ret_3gpp = do_list(fd, cmd_type, argc, argv);
-- 
cgit v1.2.3