This command is needed in the qmi proto handler to check if the plmn
is already set to 'auto'.

The reason for this is, that setting the plmn to 'auto' will implicitly
lead to a (delayed) network re-registration, which could further lead
to some timing related issues in the qmi proto handler.

Signed-off-by: Martin Schiller <[email protected]>
---
 commands-nas.c | 31 +++++++++++++++++++++++++++++++
 commands-nas.h |  2 ++
 2 files changed, 33 insertions(+)

diff --git a/commands-nas.c b/commands-nas.c
index 5874bfb..1f7445d 100644
--- a/commands-nas.c
+++ b/commands-nas.c
@@ -293,6 +293,37 @@ cmd_nas_get_serving_system_prepare(struct qmi_dev *qmi, 
struct qmi_request *req,
 }
 
 static void
+cmd_nas_get_plmn_cb(struct qmi_dev *qmi, struct qmi_request *req, struct 
qmi_msg *msg)
+{
+       struct qmi_nas_get_system_selection_preference_response res;
+       static const char *modes[] = {
+               [QMI_NAS_NETWORK_SELECTION_PREFERENCE_AUTOMATIC] = "automatic",
+               [QMI_NAS_NETWORK_SELECTION_PREFERENCE_MANUAL] = "manual",
+       };
+       void *c;
+
+       qmi_parse_nas_get_system_selection_preference_response(msg, &res);
+
+       c = blobmsg_open_table(&status, NULL);
+       if (res.set.network_selection_preference) {
+               blobmsg_add_string(&status, "mode", 
modes[res.data.network_selection_preference]);
+       }
+       if (res.set.manual_network_selection) {
+               blobmsg_add_u32(&status, "mcc", 
res.data.manual_network_selection.mcc);
+               blobmsg_add_u32(&status, "mnc", 
res.data.manual_network_selection.mnc);
+       }
+
+       blobmsg_close_table(&status, c);
+}
+
+static enum qmi_cmd_result
+cmd_nas_get_plmn_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct 
qmi_msg *msg, char *arg)
+{
+       qmi_set_nas_get_system_selection_preference_request(msg);
+       return QMI_CMD_REQUEST;
+}
+
+static void
 cmd_nas_network_scan_cb(struct qmi_dev *qmi, struct qmi_request *req, struct 
qmi_msg *msg)
 {
        static struct qmi_nas_network_scan_response res;
diff --git a/commands-nas.h b/commands-nas.h
index 9ebfa00..4b175f9 100644
--- a/commands-nas.h
+++ b/commands-nas.h
@@ -24,6 +24,7 @@
        __uqmi_command(nas_set_network_modes, set-network-modes, required, 
CMD_TYPE_OPTION), \
        __uqmi_command(nas_initiate_network_register, network-register, no, 
QMI_SERVICE_NAS), \
        __uqmi_command(nas_set_plmn, set-plmn, no, QMI_SERVICE_NAS), \
+       __uqmi_command(nas_get_plmn, get-plmn, no, QMI_SERVICE_NAS), \
        __uqmi_command(nas_set_mcc, mcc, required, CMD_TYPE_OPTION), \
        __uqmi_command(nas_set_mnc, mnc, required, CMD_TYPE_OPTION), \
        __uqmi_command(nas_network_scan, network-scan, no, QMI_SERVICE_NAS), \
@@ -44,6 +45,7 @@
                "  --set-plmn:                       Register at specified 
network\n" \
                "    --mcc <mcc>:                    Mobile Country Code (0 - 
auto)\n" \
                "    --mnc <mnc>:                    Mobile Network Code\n" \
+               "  --get-plmn:                       Get preferred network 
selection info\n" \
                "  --get-signal-info:                Get signal strength 
info\n" \
                "  --get-serving-system:             Get serving system info\n" 
\
 
-- 
2.11.0


_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to