add command for setting network preference
[project/uqmi.git] / commands-nas.c
1 static struct qmi_nas_set_system_selection_preference_request sel_req;
2
3 #define cmd_nas_set_network_modes_cb no_cb
4 static enum qmi_cmd_result
5 cmd_nas_set_network_modes_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
6 {
7 static const struct {
8 const char *name;
9 QmiNasRatModePreference val;
10 } modes[] = {
11 { "cdma", QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1X | QMI_NAS_RAT_MODE_PREFERENCE_CDMA_1XEVDO },
12 { "td-scdma", QMI_NAS_RAT_MODE_PREFERENCE_TD_SCDMA },
13 { "gsm", QMI_NAS_RAT_MODE_PREFERENCE_GSM },
14 { "umts", QMI_NAS_RAT_MODE_PREFERENCE_UMTS },
15 { "lte", QMI_NAS_RAT_MODE_PREFERENCE_LTE },
16 };
17 QmiNasRatModePreference val = 0;
18 char *word;
19 int i;
20
21 for (word = strtok(arg, ",");
22 word;
23 word = strtok(NULL, ",")) {
24 bool found = false;
25
26 for (i = 0; i < ARRAY_SIZE(modes); i++) {
27 if (strcmp(word, modes[i].name) != 0 &&
28 strcmp(word, "all") != 0)
29 continue;
30
31 val |= modes[i].val;
32 found = true;
33 }
34
35 if (!found) {
36 fprintf(stderr, "Invalid network mode '%s'\n", word);
37 return QMI_CMD_EXIT;
38 }
39 }
40
41 qmi_set(&sel_req, mode_preference, val);
42 qmi_set_nas_set_system_selection_preference_request(msg, &sel_req);
43 return QMI_CMD_REQUEST;
44 }
45