aef2745c69bc23e68977dceda5c2d1e66208bb45
[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