summaryrefslogtreecommitdiff
path: root/commands-nas.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-06-10 17:09:10 +0200
committerFelix Fietkau <nbd@openwrt.org>2013-06-10 17:09:10 +0200
commit287465bb805369f523ade06add9f7ddc0af7352f (patch)
tree2ed03096ddb01d88d2c1c2e07a04832e11234025 /commands-nas.c
parent4ab698d5b6e27dece939c858aae070f5beda71a1 (diff)
unify multiple set_system_selection commands into one message, add --set-network-roaming
Diffstat (limited to 'commands-nas.c')
-rw-r--r--commands-nas.c46
1 files changed, 42 insertions, 4 deletions
diff --git a/commands-nas.c b/commands-nas.c
index 0eb6941..ccc58ab 100644
--- a/commands-nas.c
+++ b/commands-nas.c
@@ -2,6 +2,27 @@
static struct qmi_nas_set_system_selection_preference_request sel_req;
+#define cmd_nas_do_set_system_selection_cb no_cb
+static enum qmi_cmd_result
+cmd_nas_do_set_system_selection_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
+{
+ qmi_set_nas_set_system_selection_preference_request(msg, &sel_req);
+ return QMI_CMD_REQUEST;
+}
+
+static enum qmi_cmd_result
+do_sel_network(void)
+{
+ static bool use_sel_req = false;
+
+ if (!use_sel_req) {
+ use_sel_req = true;
+ uqmi_add_command(NULL, __UQMI_COMMAND_nas_do_set_system_selection);
+ }
+
+ return QMI_CMD_DONE;
+}
+
#define cmd_nas_set_network_modes_cb no_cb
static enum qmi_cmd_result
cmd_nas_set_network_modes_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
@@ -41,8 +62,7 @@ cmd_nas_set_network_modes_prepare(struct qmi_dev *qmi, struct qmi_request *req,
}
qmi_set(&sel_req, mode_preference, val);
- qmi_set_nas_set_system_selection_preference_request(msg, &sel_req);
- return QMI_CMD_REQUEST;
+ return do_sel_network();
}
#define cmd_nas_set_network_preference_cb no_cb
@@ -57,8 +77,26 @@ cmd_nas_set_network_preference_prepare(struct qmi_dev *qmi, struct qmi_request *
pref = QMI_NAS_GSM_WCDMA_ACQUISITION_ORDER_PREFERENCE_WCDMA;
qmi_set(&sel_req, gsm_wcdma_acquisition_order_preference, pref);
- qmi_set_nas_set_system_selection_preference_request(msg, &sel_req);
- return QMI_CMD_REQUEST;
+ return do_sel_network();
+}
+
+#define cmd_nas_set_roaming_cb no_cb
+static enum qmi_cmd_result
+cmd_nas_set_roaming_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
+{
+ QmiNasRoamingPreference pref;
+
+ if (!strcmp(arg, "any"))
+ pref = QMI_NAS_ROAMING_PREFERENCE_ANY;
+ else if (!strcmp(arg, "only"))
+ pref = QMI_NAS_ROAMING_PREFERENCE_NOT_OFF;
+ else if (!strcmp(arg, "off"))
+ pref = QMI_NAS_ROAMING_PREFERENCE_OFF;
+ else
+ return uqmi_add_error("Invalid argument");
+
+ qmi_set(&sel_req, roaming_preference, pref);
+ return do_sel_network();
}
#define cmd_nas_initiate_network_register_cb no_cb