Add command --get-msisdn for getting phone number
[oweals/uqmi.git] / commands-wds.c
index 526c1ddc23887e8ef09df0bf9f5114395d81263e..08244a8faa3d0017987629adfb038a64bcc7caf6 100644 (file)
@@ -1,9 +1,12 @@
+#include <stdlib.h>
+
 #include "qmi-message.h"
 
 static struct qmi_wds_start_network_request wds_sn_req = {
        QMI_INIT(authentication_preference,
                 QMI_WDS_AUTHENTICATION_PAP | QMI_WDS_AUTHENTICATION_CHAP),
 };
+static struct qmi_wds_stop_network_request wds_stn_req;
 
 #define cmd_wds_set_auth_cb no_cb
 static enum qmi_cmd_result
@@ -48,6 +51,15 @@ cmd_wds_set_password_prepare(struct qmi_dev *qmi, struct qmi_request *req, struc
        return QMI_CMD_DONE;
 }
 
+#define cmd_wds_set_autoconnect_cb no_cb
+static enum qmi_cmd_result
+cmd_wds_set_autoconnect_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
+{
+       qmi_set(&wds_sn_req, enable_autoconnect, true);
+       qmi_set(&wds_stn_req, disable_autoconnect, true);
+       return QMI_CMD_DONE;
+}
+
 static void
 cmd_wds_start_network_cb(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg)
 {
@@ -66,6 +78,17 @@ cmd_wds_start_network_prepare(struct qmi_dev *qmi, struct qmi_request *req, stru
        return QMI_CMD_REQUEST;
 }
 
+#define cmd_wds_stop_network_cb no_cb
+static enum qmi_cmd_result
+cmd_wds_stop_network_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
+{
+       uint32_t pdh = strtoul(arg, NULL, 0);
+
+       qmi_set(&wds_stn_req, packet_data_handle, pdh);
+       qmi_set_wds_stop_network_request(msg, &wds_stn_req);
+       return QMI_CMD_REQUEST;
+}
+
 static void
 cmd_wds_get_packet_service_status_cb(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg)
 {
@@ -81,7 +104,6 @@ cmd_wds_get_packet_service_status_cb(struct qmi_dev *qmi, struct qmi_request *re
 
        qmi_parse_wds_get_packet_service_status_response(msg, &res);
        if (res.set.connection_status &&
-           res.data.connection_status >= 0 &&
            res.data.connection_status < ARRAY_SIZE(data_status))
                s = res.data.connection_status;
 
@@ -94,3 +116,36 @@ cmd_wds_get_packet_service_status_prepare(struct qmi_dev *qmi, struct qmi_reques
        qmi_set_wds_get_packet_service_status_request(msg);
        return QMI_CMD_REQUEST;
 }
+
+#define cmd_wds_set_autoconnect_setting_cb no_cb
+static enum qmi_cmd_result
+cmd_wds_set_autoconnect_setting_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
+{
+       struct qmi_wds_set_autoconnect_setting_request ac_req;
+       const char *modes[] = {
+               [QMI_WDS_AUTOCONNECT_DISABLED] = "disabled",
+               [QMI_WDS_AUTOCONNECT_ENABLED] = "enabled",
+               [QMI_WDS_AUTOCONNECT_PAUSED] = "paused",
+       };
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(modes); i++) {
+               if (strcasecmp(modes[i], arg) != 0)
+                       continue;
+
+               qmi_set(&ac_req, setting, i);
+               qmi_set_wds_set_autoconnect_setting_request(msg, &ac_req);
+               return QMI_CMD_DONE;
+       }
+
+       uqmi_add_error("Invalid value (valid: disabled, enabled, paused)");
+       return QMI_CMD_EXIT;
+}
+
+#define cmd_wds_reset_cb no_cb
+static enum qmi_cmd_result
+cmd_wds_reset_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
+{
+       qmi_set_wds_reset_request(msg);
+       return QMI_CMD_REQUEST;
+}