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
< ARRAY_SIZE(data_status
))
108 s
= res
.data
.connection_status
;
110 blobmsg_add_string(&status
, NULL
, data_status
[s
]);
113 static enum qmi_cmd_result
114 cmd_wds_get_packet_service_status_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
116 qmi_set_wds_get_packet_service_status_request(msg
);
117 return QMI_CMD_REQUEST
;
120 #define cmd_wds_set_autoconnect_setting_cb no_cb
121 static enum qmi_cmd_result
122 cmd_wds_set_autoconnect_setting_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
124 struct qmi_wds_set_autoconnect_setting_request ac_req
;
125 const char *modes
[] = {
126 [QMI_WDS_AUTOCONNECT_DISABLED
] = "disabled",
127 [QMI_WDS_AUTOCONNECT_ENABLED
] = "enabled",
128 [QMI_WDS_AUTOCONNECT_PAUSED
] = "paused",
132 for (i
= 0; i
< ARRAY_SIZE(modes
); i
++) {
133 if (strcasecmp(modes
[i
], arg
) != 0)
136 qmi_set(&ac_req
, setting
, i
);
137 qmi_set_wds_set_autoconnect_setting_request(msg
, &ac_req
);
141 uqmi_add_error("Invalid value (valid: disabled, enabled, paused)");
145 #define cmd_wds_reset_cb no_cb
146 static enum qmi_cmd_result
147 cmd_wds_reset_prepare(struct qmi_dev
*qmi
, struct qmi_request
*req
, struct qmi_msg
*msg
, char *arg
)
149 qmi_set_wds_reset_request(msg
);
150 return QMI_CMD_REQUEST
;