Browse Source

uqmi: wms - added storage to read text messages

Today it's hard coded to read text messages from SIM card.
Not all devices store received text messages in SIM, they store
in me, QMI_WMS_STORAGE_TYPE_NV.
I have added --storage as an argumet available to
--list-messages
--get-message
--delete-message
--get-raw-message

If --storage is omitted default storage is sim, as before.

Reviewed-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Tested-by: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Henrik Ginstmark <henrik@ginstmark.se>
Henrik Ginstmark 2 years ago
parent
commit
9a9019a342
2 changed files with 45 additions and 22 deletions
  1. 40 22
      commands-wms.c
  2. 5 0
      commands-wms.h

+ 40 - 22
commands-wms.c

@@ -24,6 +24,40 @@
 #define MIN(a,b) (((a)<(b))?(a):(b))
 #define CEILDIV(x,y) (((x) + (y) - 1) / (y))
 
+static struct qmi_wms_list_messages_request lmreq = {
+	QMI_INIT(storage_type, QMI_WMS_STORAGE_TYPE_UIM),
+	QMI_INIT(message_tag, QMI_WMS_MESSAGE_TAG_TYPE_MT_NOT_READ),
+};
+
+static struct qmi_wms_delete_request dmreq = {
+	QMI_INIT(memory_storage, QMI_WMS_STORAGE_TYPE_UIM),
+	QMI_INIT(message_mode, QMI_WMS_MESSAGE_MODE_GSM_WCDMA),
+};
+
+static struct qmi_wms_raw_read_request gmreq = {
+	QMI_INIT_SEQUENCE(message_memory_storage_id,
+		.storage_type = QMI_WMS_STORAGE_TYPE_UIM,
+	),
+	QMI_INIT(message_mode, QMI_WMS_MESSAGE_MODE_GSM_WCDMA),
+};
+
+
+#define cmd_wms_storage_cb no_cb
+static enum qmi_cmd_result
+cmd_wms_storage_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
+{
+	if (strcmp(arg, "sim") == 0) {
+	} else if (strcmp(arg, "me") == 0) {
+		qmi_set_ptr(&lmreq, storage_type, QMI_WMS_STORAGE_TYPE_NV);
+		qmi_set_ptr(&dmreq, memory_storage, QMI_WMS_STORAGE_TYPE_NV);
+		qmi_set_ptr(&gmreq, message_memory_storage_id.storage_type, QMI_WMS_STORAGE_TYPE_NV);
+	} else {
+		uqmi_add_error("Invalid value (sim or me)");
+		return QMI_CMD_EXIT;
+	}
+	return QMI_CMD_DONE;
+}
+
 static void cmd_wms_list_messages_cb(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg)
 {
 	struct qmi_wms_list_messages_response res;
@@ -41,12 +75,7 @@ static void cmd_wms_list_messages_cb(struct qmi_dev *qmi, struct qmi_request *re
 static enum qmi_cmd_result
 cmd_wms_list_messages_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
 {
-	static struct qmi_wms_list_messages_request mreq = {
-		QMI_INIT(storage_type, QMI_WMS_STORAGE_TYPE_UIM),
-		QMI_INIT(message_tag, QMI_WMS_MESSAGE_TAG_TYPE_MT_NOT_READ),
-	};
-
-	qmi_set_wms_list_messages_request(msg, &mreq);
+	qmi_set_wms_list_messages_request(msg, &lmreq);
 
 	return QMI_CMD_REQUEST;
 }
@@ -292,15 +321,10 @@ cmd_wms_delete_message_prepare(struct qmi_dev *qmi, struct qmi_request *req, str
 		return QMI_CMD_EXIT;
 	}
 
-	static struct qmi_wms_delete_request mreq = {
-		QMI_INIT(memory_storage, QMI_WMS_STORAGE_TYPE_UIM),
-		QMI_INIT(message_mode, QMI_WMS_MESSAGE_MODE_GSM_WCDMA),
-	};
-
-	mreq.set.memory_index = 1;
-	mreq.data.memory_index = id;
+	dmreq.set.memory_index = 1;
+	dmreq.data.memory_index = id;
 
-	qmi_set_wms_delete_request(msg, &mreq);
+	qmi_set_wms_delete_request(msg, &dmreq);
 
 	return QMI_CMD_REQUEST;
 }
@@ -443,12 +467,6 @@ error:
 static enum qmi_cmd_result
 cmd_wms_get_message_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
 {
-	static struct qmi_wms_raw_read_request mreq = {
-		QMI_INIT_SEQUENCE(message_memory_storage_id,
-			.storage_type = QMI_WMS_STORAGE_TYPE_UIM,
-		),
-		QMI_INIT(message_mode, QMI_WMS_MESSAGE_MODE_GSM_WCDMA),
-	};
 	char *err;
 	int id;
 
@@ -458,8 +476,8 @@ cmd_wms_get_message_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct
 		return QMI_CMD_EXIT;
 	}
 
-	mreq.data.message_memory_storage_id.memory_index = id;
-	qmi_set_wms_raw_read_request(msg, &mreq);
+	gmreq.data.message_memory_storage_id.memory_index = id;
+	qmi_set_wms_raw_read_request(msg, &gmreq);
 
 	return QMI_CMD_REQUEST;
 }

+ 5 - 0
commands-wms.h

@@ -20,6 +20,7 @@
  */
 
 #define __uqmi_wms_commands \
+	__uqmi_command(wms_storage, storage, required, CMD_TYPE_OPTION), \
 	__uqmi_command(wms_list_messages, list-messages, no, QMI_SERVICE_WMS), \
 	__uqmi_command(wms_delete_message, delete-message, required, QMI_SERVICE_WMS), \
 	__uqmi_command(wms_get_message, get-message, required, QMI_SERVICE_WMS), \
@@ -31,9 +32,13 @@
 
 #define wms_helptext \
 		"  --list-messages:                  List SMS messages\n" \
+		"    --storage <mem>:                Messages storage (sim (default), me)\n" \
 		"  --delete-message <id>:            Delete SMS message at index <id>\n" \
+		"    --storage <mem>:                Messages storage (sim (default), me)\n" \
 		"  --get-message <id>:               Get SMS message at index <id>\n" \
+		"    --storage <mem>:                Messages storage (sim (default), me)\n" \
 		"  --get-raw-message <id>:           Get SMS raw message contents at index <id>\n" \
+		"    --storage <mem>:                Messages storage (sim (default), me)\n" \
 		"  --send-message <data>:            Send SMS message (use options below)\n" \
 		"    --send-message-smsc <nr>:       SMSC number\n" \
 		"    --send-message-target <nr>:     Destination number (required)\n" \