summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-02-17 22:52:24 +0100
committerFelix Fietkau <nbd@openwrt.org>2013-02-17 22:52:24 +0100
commite5e70f32ea49eb1e3aab7f13cdeb7b29b696a8a2 (patch)
tree37db0d85b6b75eeb0c5657ebb4ae202c626cb028
parent1803bd8512f72b6bb61b8c462e68fcfabc319f62 (diff)
add --get-serving-system
-rw-r--r--commands-nas.c40
-rw-r--r--commands-nas.h6
2 files changed, 44 insertions, 2 deletions
diff --git a/commands-nas.c b/commands-nas.c
index e4d7ce6..c3298e2 100644
--- a/commands-nas.c
+++ b/commands-nas.c
@@ -100,3 +100,43 @@ cmd_nas_get_signal_info_prepare(struct qmi_dev *qmi, struct qmi_request *req, st
qmi_set_nas_get_signal_info_request(msg);
return QMI_CMD_REQUEST;
}
+
+static void
+cmd_nas_get_serving_system_cb(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg)
+{
+ struct qmi_nas_get_serving_system_response res;
+ static const char *reg_states[] = {
+ [QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED] = "not_registered",
+ [QMI_NAS_REGISTRATION_STATE_REGISTERED] = "registered",
+ [QMI_NAS_REGISTRATION_STATE_NOT_REGISTERED_SEARCHING] = "searching",
+ [QMI_NAS_REGISTRATION_STATE_REGISTRATION_DENIED] = "registering_denied",
+ [QMI_NAS_REGISTRATION_STATE_UNKNOWN] = "unknown",
+ };
+
+ qmi_parse_nas_get_serving_system_response(msg, &res);
+
+ if (res.set.serving_system) {
+ int state = res.data.serving_system.registration_state;
+
+ if (state > QMI_NAS_REGISTRATION_STATE_UNKNOWN)
+ state = QMI_NAS_REGISTRATION_STATE_UNKNOWN;
+
+ blobmsg_add_string(&status, "registration", reg_states[state]);
+ }
+ if (res.set.current_plmn) {
+ blobmsg_add_u32(&status, "plmn_mcc", res.data.current_plmn.mcc);
+ blobmsg_add_u32(&status, "plmn_mnc", res.data.current_plmn.mnc);
+ if (res.data.current_plmn.description)
+ blobmsg_add_string(&status, "plmn_description", res.data.current_plmn.description);
+ }
+
+ if (res.set.roaming_indicator)
+ blobmsg_add_u8(&status, "roaming", !res.data.roaming_indicator);
+}
+
+static enum qmi_cmd_result
+cmd_nas_get_serving_system_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
+{
+ qmi_set_nas_get_serving_system_request(msg);
+ return QMI_CMD_REQUEST;
+}
diff --git a/commands-nas.h b/commands-nas.h
index 6b5c05d..2478bcf 100644
--- a/commands-nas.h
+++ b/commands-nas.h
@@ -1,11 +1,13 @@
#define __uqmi_nas_commands \
__uqmi_command(nas_set_network_modes, set-network-modes, required, QMI_SERVICE_NAS), \
__uqmi_command(nas_initiate_network_register, network-register, no, QMI_SERVICE_NAS), \
- __uqmi_command(nas_get_signal_info, get-signal-info, no, QMI_SERVICE_NAS) \
+ __uqmi_command(nas_get_signal_info, get-signal-info, no, QMI_SERVICE_NAS), \
+ __uqmi_command(nas_get_serving_system, get-serving-system, no, QMI_SERVICE_NAS) \
#define nas_helptext \
" --set-network-modes <modes>: Set preferred network mode (Syntax: <mode1>[,<mode2>,...])\n" \
" Available modes: all, lte, umts, gsm, cdma, td-scdma\n" \
" --network-register: Initiate network register\n" \
- " --get-signal-info: Get signal strength info\n"
+ " --get-signal-info: Get signal strength info\n" \
+ " --get-serving-system: Get serving system info\n" \