utils/dvb: add support for setting the frontend type
authorMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 5 Jan 2012 13:07:09 +0000 (11:07 -0200)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 7 Jan 2012 13:12:16 +0000 (11:12 -0200)
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
utils/dvb/dvb-fe-tool.c
utils/dvb/dvb-fe.h

index 4290ad5..329e030 100644 (file)
@@ -19,6 +19,7 @@ static const struct argp_option options[] = {
        {"verbose",     'v',    0,              0,      "enables debug messages", 0},
        {"adapter",     'a',    "ADAPTER",      0,      "dvb adapter", 0},
        {"frontend",    'f',    "FRONTEND",     0,      "dvb frontend", 0},
+       {"set-delsys",  'd',    "PARAMS",       0,      "set delivery system", 0},
        {"set",         's',    "PARAMS",       0,      "set frontend", 0},
        {"get",         'g',    0,              0,      "get frontend", 0},
        {"dvbv3",       '3',    0,              0,      "Use DVBv3 only", 0},
@@ -28,12 +29,15 @@ static const struct argp_option options[] = {
 static int adapter = 0;
 static int frontend = 0;
 static unsigned get = 0;
-char *set_params = NULL;
+static char *set_params = NULL;
 static int verbose = 1;                /* FIXME */
 static int dvbv3 = 0;
+static int delsys = 0;
 
 static error_t parse_opt(int k, char *arg, struct argp_state *state)
 {
+       int i;
+
        switch (k) {
        case 'a':
                adapter = atoi(arg);
@@ -41,6 +45,26 @@ static error_t parse_opt(int k, char *arg, struct argp_state *state)
        case 'f':
                frontend = atoi(arg);
                break;
+       case 'd':
+               for (i = 0; i < ARRAY_SIZE(delivery_system_name); i++)
+                       if (delivery_system_name[i] &&
+                           !strcasecmp(arg, delivery_system_name[i]))
+                               break;
+               if (i < ARRAY_SIZE(delivery_system_name)) {
+                       delsys = i;
+                       break;
+               }
+               /* Not found. Print all possible values */
+               fprintf(stderr, "Delivery system %s is not known. Valid values are:\n",
+                       arg);
+               for (i = 0; i < ARRAY_SIZE(delivery_system_name) - 1; i++) {
+                       fprintf(stderr, "%-15s", delivery_system_name[i]);
+                       if (!((i + 1) % 5))
+                               fprintf(stderr, "\n");
+               }
+               fprintf(stderr, "\n");
+               return ARGP_ERR_UNKNOWN;
+               break;
        case 's':
                set_params = arg;
                break;
@@ -73,6 +97,12 @@ int main(int argc, char *argv[])
 
        parms = dvb_fe_open(adapter, frontend, verbose, dvbv3);
 
+       if (delsys) {
+               printf("Changing delivery system to: %s\n",
+                       delivery_system_name[delsys]);
+               dvb_set_sys(parms, delsys);
+       }
+
 #if 0
        if (set_params)
                do_something();
index a166008..96dd7e2 100644 (file)
@@ -116,3 +116,4 @@ int dvb_fe_diseqc_reply(struct dvb_v5_fe_parms *parms, unsigned *len, char *buf,
 extern const unsigned fe_bandwidth_name[8];
 extern const char *dvb_v5_name[46];
 extern const void *dvbv5_attr_names[];
+extern const char *delivery_system_name[20];