Add --print-dot option to print topology as a dot graph
[media-ctl.git] / options.c
1 /*
2  * Media controller test application
3  *
4  * Copyright (C) 2010 Ideas on board SPRL <laurent.pinchart@ideasonboard.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  */
19
20 #include <stdlib.h>
21 #include <getopt.h>
22 #include <stdio.h>
23 #include <unistd.h>
24
25 #include "options.h"
26
27 #define MEDIA_DEVNAME_DEFAULT           "/dev/media0"
28
29 struct media_options media_opts = {
30         .devname = MEDIA_DEVNAME_DEFAULT,
31 };
32
33 static void usage(const char *argv0)
34 {
35         printf("%s [options] device\n", argv0);
36         printf("-d, --device dev        Media device name (default: %s)\n", MEDIA_DEVNAME_DEFAULT);
37         printf("-e, --entity name       Print the device name associated with the given entity\n");
38         printf("-f, --formats           Comma-separated list of formats to setup\n");
39         printf("-h, --help              Show this help screen\n");
40         printf("-i, --interactive       Modify links interactively\n");
41         printf("-l, --links             Comma-separated list of links descriptors to setup\n");
42         printf("-p, --print-topology    Print the device topology (implies -v)\n");
43         printf("    --print-dot         Print the device topology as a dot graph (implies -v)\n");
44         printf("-r, --reset             Reset all links to inactive\n");
45         printf("-v, --verbose           Be verbose\n");
46 }
47
48 #define OPT_PRINT_DOT   256
49
50 static struct option opts[] = {
51         {"device", 1, 0, 'd'},
52         {"entity", 1, 0, 'e'},
53         {"formats", 1, 0, 'f'},
54         {"help", 0, 0, 'h'},
55         {"interactive", 0, 0, 'i'},
56         {"links", 1, 0, 'l'},
57         {"print-dot", 0, 0, OPT_PRINT_DOT},
58         {"print-topology", 0, 0, 'p'},
59         {"reset", 0, 0, 'r'},
60         {"verbose", 0, 0, 'v'},
61 };
62
63 int parse_cmdline(int argc, char **argv)
64 {
65         int opt;
66
67         if (argc == 1) {
68                 usage(argv[0]);
69                 return 1;
70         }
71
72         /* parse options */
73         while ((opt = getopt_long(argc, argv, "d:e:f:hil:prv", opts, NULL)) != -1) {
74                 switch (opt) {
75                 case 'd':
76                         media_opts.devname = optarg;
77                         break;
78
79                 case 'e':
80                         media_opts.entity = optarg;
81                         break;
82
83                 case 'f':
84                         media_opts.formats = optarg;
85                         break;
86
87                 case 'h':
88                         usage(argv[0]);
89                         return 1;
90
91                 case 'i':
92                         media_opts.interactive = 1;
93                         break;
94
95                 case 'l':
96                         media_opts.links = optarg;
97                         break;
98
99                 case 'p':
100                         media_opts.print = 1;
101                         media_opts.verbose = 1;
102                         break;
103
104                 case 'r':
105                         media_opts.reset = 1;
106                         break;
107
108                 case 'v':
109                         media_opts.verbose = 1;
110                         break;
111
112                 case OPT_PRINT_DOT:
113                         media_opts.print_dot = 1;
114                         break;
115
116                 default:
117                         printf("Invalid option -%c\n", opt);
118                         printf("Run %s -h for help.\n", argv[0]);
119                         return 1;
120                 }
121         }
122
123         return 0;
124 }
125