1 #include "qmi-message.h"
3 static struct qmi_wds_start_network_request wds_sn_req
= {
4 QMI_INIT(authentication_preference
,
5 QMI_WDS_AUTHENTICATION_PAP
| QMI_WDS_AUTHENTICATION_CHAP
),
8 #define cmd_wds_set_auth_cb no_cb
9 static enum qmi_cmd_result
10 cmd_wds_set_auth_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
14 QmiWdsAuthentication auth
;
16 { "pap", QMI_WDS_AUTHENTICATION_PAP
},
17 { "chap", QMI_WDS_AUTHENTICATION_CHAP
},
18 { "both", QMI_WDS_AUTHENTICATION_PAP
| QMI_WDS_AUTHENTICATION_CHAP
},
19 { "none", QMI_WDS_AUTHENTICATION_NONE
},
23 for (i
= 0; i
< ARRAY_SIZE(modes
); i
++) {
24 if (strcasecmp(modes
[i
].name
, arg
) != 0)
27 qmi_set(&wds_sn_req
, authentication_preference
, modes
[i
].auth
);
31 uqmi_add_error("Invalid auth mode (valid: pap, chap, both, none)");
35 #define cmd_wds_set_username_cb no_cb
36 static enum qmi_cmd_result
37 cmd_wds_set_username_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
39 qmi_set_ptr(&wds_sn_req
, username
, arg
);
43 #define cmd_wds_set_password_cb no_cb
44 static enum qmi_cmd_result
45 cmd_wds_set_password_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
47 qmi_set_ptr(&wds_sn_req
, password
, arg
);
51 #define cmd_wds_set_autoconnect_cb no_cb
52 static enum qmi_cmd_result
53 cmd_wds_set_autoconnect_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
55 qmi_set_ptr(&wds_sn_req
, enable_autoconnect
, true);
60 cmd_wds_start_network_cb(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
)
62 struct qmi_wds_start_network_response res
;
64 qmi_parse_wds_start_network_response(msg
, &res
);
65 if (res
.set
.packet_data_handle
)
66 blobmsg_add_u32(&status
, NULL
, res
.data
.packet_data_handle
);
69 static enum qmi_cmd_result
70 cmd_wds_start_network_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
72 qmi_set_ptr(&wds_sn_req
, apn
, arg
);
73 qmi_set_wds_start_network_request(msg
, &wds_sn_req
);
74 return QMI_CMD_REQUEST
;
78 cmd_wds_get_packet_service_status_cb(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
)
80 struct qmi_wds_get_packet_service_status_response res
;
81 const char *data_status
[] = {
82 [QMI_WDS_CONNECTION_STATUS_UNKNOWN
] = "unknown",
83 [QMI_WDS_CONNECTION_STATUS_DISCONNECTED
] = "disconnected",
84 [QMI_WDS_CONNECTION_STATUS_CONNECTED
] = "connected",
85 [QMI_WDS_CONNECTION_STATUS_SUSPENDED
] = "suspended",
86 [QMI_WDS_CONNECTION_STATUS_AUTHENTICATING
] = "authenticating",
90 qmi_parse_wds_get_packet_service_status_response(msg
, &res
);
91 if (res
.set
.connection_status
&&
92 res
.data
.connection_status
>= 0 &&
93 res
.data
.connection_status
< ARRAY_SIZE(data_status
))
94 s
= res
.data
.connection_status
;
96 blobmsg_add_string(&status
, NULL
, data_status
[s
]);
99 static enum qmi_cmd_result
100 cmd_wds_get_packet_service_status_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
102 qmi_set_wds_get_packet_service_status_request(msg
);
103 return QMI_CMD_REQUEST
;
106 #define cmd_wds_reset_cb no_cb
107 static enum qmi_cmd_result
108 cmd_wds_reset_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
110 qmi_set_wds_reset_request(msg
);
111 return QMI_CMD_REQUEST
;