X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuqmi.git;a=blobdiff_plain;f=commands.c;h=c87714dee5c5833232eab492bda46116b723b469;hp=4dbdd174137d8763776d3e29efc15d9f77e7f2ab;hb=a9a5797a4693520f4827481998ebf30b9968c34d;hpb=b98a91bf2ef4c8189dd9b483ed530e95f79ba53c diff --git a/commands.c b/commands.c index 4dbdd17..c87714d 100644 --- a/commands.c +++ b/commands.c @@ -20,16 +20,20 @@ static void no_cb(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg * static void cmd_version_cb(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg) { struct qmi_ctl_get_version_info_response res; + void *c; char name_buf[16]; int i; qmi_parse_ctl_get_version_info_response(msg, &res); + + c = blobmsg_open_table(&status, NULL); for (i = 0; i < res.data.service_list_n; i++) { sprintf(name_buf, "service_%d", res.data.service_list[i].service); blobmsg_printf(&status, name_buf, "%d,%d", res.data.service_list[i].major_version, res.data.service_list[i].minor_version); } + blobmsg_close_table(&status, c); } static enum qmi_cmd_result @@ -95,10 +99,47 @@ cmd_set_client_id_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct q return QMI_CMD_DONE; } +static int +qmi_get_array_idx(const char **array, int size, const char *str) +{ + int i; + + for (i = 0; i < size; i++) { + if (!array[i]) + continue; + + if (!strcmp(array[i], str)) + return i; + } + + return -1; +} + +#define cmd_ctl_set_data_format_cb no_cb +static enum qmi_cmd_result +cmd_ctl_set_data_format_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg) +{ + struct qmi_ctl_set_data_format_request sreq = {}; + const char *modes[] = { + [QMI_CTL_DATA_LINK_PROTOCOL_802_3] = "802.3", + [QMI_CTL_DATA_LINK_PROTOCOL_RAW_IP] = "raw-ip", + }; + int mode = qmi_get_array_idx(modes, ARRAY_SIZE(modes), arg); + + if (mode < 0) { + uqmi_add_error("Invalid mode (modes: 802.3, raw-ip)"); + return QMI_CMD_EXIT; + } + + qmi_set_ctl_set_data_format_request(msg, &sreq); + return QMI_CMD_DONE; +} + #include "commands-wds.c" #include "commands-dms.c" #include "commands-nas.c" #include "commands-wms.c" +#include "commands-wda.c" #define __uqmi_command(_name, _optname, _arg, _type) \ [__UQMI_COMMAND_##_name] = { \ @@ -181,9 +222,10 @@ static bool __uqmi_run_commands(struct qmi_dev *qmi, bool option) return true; } -void uqmi_add_error(const char *msg) +int uqmi_add_error(const char *msg) { blobmsg_add_string(&status, NULL, msg); + return QMI_CMD_EXIT; } bool uqmi_run_commands(struct qmi_dev *qmi)