X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuqmi.git;a=blobdiff_plain;f=commands-wds.c;h=91cf15cdfcac73dc0ae7c4edeadaca46a663bb07;hp=a5c4dcbfd37abd8bbd9aebb2700cdae59947f55f;hb=6e92c519f4276e883388f7831e1506905be0c511;hpb=b29e4d756726e9685ad812210c5f2e5298100140 diff --git a/commands-wds.c b/commands-wds.c index a5c4dcb..91cf15c 100644 --- a/commands-wds.c +++ b/commands-wds.c @@ -1,3 +1,5 @@ +#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), @@ -26,7 +28,7 @@ cmd_wds_set_auth_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qm return QMI_CMD_DONE; } - fprintf(stderr, "Invalid auth mode (valid: pap, chap, both, none)\n"); + uqmi_add_error("Invalid auth mode (valid: pap, chap, both, none)"); return QMI_CMD_EXIT; } @@ -45,3 +47,66 @@ cmd_wds_set_password_prepare(struct qmi_dev *qmi, struct qmi_request *req, struc qmi_set_ptr(&wds_sn_req, password, arg); 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); + return QMI_CMD_DONE; +} + +static void +cmd_wds_start_network_cb(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg) +{ + struct qmi_wds_start_network_response res; + + qmi_parse_wds_start_network_response(msg, &res); + if (res.set.packet_data_handle) + blobmsg_add_u32(&status, NULL, res.data.packet_data_handle); +} + +static enum qmi_cmd_result +cmd_wds_start_network_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg) +{ + qmi_set_ptr(&wds_sn_req, apn, arg); + qmi_set_wds_start_network_request(msg, &wds_sn_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) +{ + struct qmi_wds_get_packet_service_status_response res; + const char *data_status[] = { + [QMI_WDS_CONNECTION_STATUS_UNKNOWN] = "unknown", + [QMI_WDS_CONNECTION_STATUS_DISCONNECTED] = "disconnected", + [QMI_WDS_CONNECTION_STATUS_CONNECTED] = "connected", + [QMI_WDS_CONNECTION_STATUS_SUSPENDED] = "suspended", + [QMI_WDS_CONNECTION_STATUS_AUTHENTICATING] = "authenticating", + }; + int s = 0; + + 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; + + blobmsg_add_string(&status, NULL, data_status[s]); +} + +static enum qmi_cmd_result +cmd_wds_get_packet_service_status_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg) +{ + qmi_set_wds_get_packet_service_status_request(msg); + return QMI_CMD_REQUEST; +} + +#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; +}