3 #include "qmi-message.h"
5 static struct qmi_wds_start_network_request wds_sn_req
= {
6 QMI_INIT(authentication_preference
,
7 QMI_WDS_AUTHENTICATION_PAP
| QMI_WDS_AUTHENTICATION_CHAP
),
9 static struct qmi_wds_stop_network_request wds_stn_req
;
11 #define cmd_wds_set_auth_cb no_cb
12 static enum qmi_cmd_result
13 cmd_wds_set_auth_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
17 QmiWdsAuthentication auth
;
19 { "pap", QMI_WDS_AUTHENTICATION_PAP
},
20 { "chap", QMI_WDS_AUTHENTICATION_CHAP
},
21 { "both", QMI_WDS_AUTHENTICATION_PAP
| QMI_WDS_AUTHENTICATION_CHAP
},
22 { "none", QMI_WDS_AUTHENTICATION_NONE
},
26 for (i
= 0; i
< ARRAY_SIZE(modes
); i
++) {
27 if (strcasecmp(modes
[i
].name
, arg
) != 0)
30 qmi_set(&wds_sn_req
, authentication_preference
, modes
[i
].auth
);
34 uqmi_add_error("Invalid auth mode (valid: pap, chap, both, none)");
38 #define cmd_wds_set_username_cb no_cb
39 static enum qmi_cmd_result
40 cmd_wds_set_username_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
42 qmi_set_ptr(&wds_sn_req
, username
, arg
);
46 #define cmd_wds_set_password_cb no_cb
47 static enum qmi_cmd_result
48 cmd_wds_set_password_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
50 qmi_set_ptr(&wds_sn_req
, password
, arg
);
54 #define cmd_wds_set_autoconnect_cb no_cb
55 static enum qmi_cmd_result
56 cmd_wds_set_autoconnect_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
58 qmi_set(&wds_sn_req
, enable_autoconnect
, true);
59 qmi_set(&wds_stn_req
, disable_autoconnect
, true);
64 cmd_wds_start_network_cb(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
)
66 struct qmi_wds_start_network_response res
;
68 qmi_parse_wds_start_network_response(msg
, &res
);
69 if (res
.set
.packet_data_handle
)
70 blobmsg_add_u32(&status
, NULL
, res
.data
.packet_data_handle
);
73 static enum qmi_cmd_result
74 cmd_wds_start_network_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
76 qmi_set_ptr(&wds_sn_req
, apn
, arg
);
77 qmi_set_wds_start_network_request(msg
, &wds_sn_req
);
78 return QMI_CMD_REQUEST
;
81 #define cmd_wds_stop_network_cb no_cb
82 static enum qmi_cmd_result
83 cmd_wds_stop_network_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
85 uint32_t pdh
= strtoul(arg
, NULL
, 0);
87 qmi_set(&wds_stn_req
, packet_data_handle
, pdh
);
88 qmi_set_wds_stop_network_request(msg
, &wds_stn_req
);
89 return QMI_CMD_REQUEST
;
93 cmd_wds_get_packet_service_status_cb(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
)
95 struct qmi_wds_get_packet_service_status_response res
;
96 const char *data_status
[] = {
97 [QMI_WDS_CONNECTION_STATUS_UNKNOWN
] = "unknown",
98 [QMI_WDS_CONNECTION_STATUS_DISCONNECTED
] = "disconnected",
99 [QMI_WDS_CONNECTION_STATUS_CONNECTED
] = "connected",
100 [QMI_WDS_CONNECTION_STATUS_SUSPENDED
] = "suspended",
101 [QMI_WDS_CONNECTION_STATUS_AUTHENTICATING
] = "authenticating",
105 qmi_parse_wds_get_packet_service_status_response(msg
, &res
);
106 if (res
.set
.connection_status
&&
107 res
.data
.connection_status
>= 0 &&
108 res
.data
.connection_status
< ARRAY_SIZE(data_status
))
109 s
= res
.data
.connection_status
;
111 blobmsg_add_string(&status
, NULL
, data_status
[s
]);
114 static enum qmi_cmd_result
115 cmd_wds_get_packet_service_status_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
117 qmi_set_wds_get_packet_service_status_request(msg
);
118 return QMI_CMD_REQUEST
;
121 #define cmd_wds_reset_cb no_cb
122 static enum qmi_cmd_result
123 cmd_wds_reset_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
125 qmi_set_wds_reset_request(msg
);
126 return QMI_CMD_REQUEST
;