Ticket #2799: guid.diff

File guid.diff, 2.4 KB (added by anonymous, 13 years ago)
  • /mythtv/contrib/channel_changers/

    old new  
    2525#include <stdio.h>
    2626#include <errno.h>
    2727#include <stdlib.h>
     28#include <limits.h> //for LLONG_MAX
     29#include <getopt.h>
    2830#include <unistd.h> // for usleep
    2931
    3032// Motorola DCT-6200 IDs
     
    7476           STARTING_NODE);
    7577   fprintf(stderr, "-p PORT   port/adapter to use              (default:%i)\n",
    7678           STARTING_PORT);
     79   fprintf(stderr, "-g GUID   GUID to use, -n switch, if present, will be ignored.\n");
    7780   exit(1);
    7881}
    7982
     
    8487   int i;
    8588   int verbose = 0;
    8689   int single_packet = 0;
     90   int bGUID=0;
     91   octlet_t cli_GUID=0LL;
     92   octlet_t node_GUID=0LL;
    8793   quadlet_t cmd[2];
    8894   int chn = 550;
    8995
     
    97103      usage();
    98104
    99105   opterr = 0;
    100    while ((c = getopt(argc, argv, "vsn:p:")) != -1)
     106   while ((c = getopt(argc, argv, "vsg:n:p:")) != -1)
    101107   {
    102108       switch (c) {
    103109       case 'v':
     
    109115       case 'n':
    110116           starting_node = atoi(optarg);
    111117           break;
     118       case 'g':
     119           bGUID=1;
     120           starting_node=0;
     121           cli_GUID = (octlet_t)strtoll(optarg, (char **)NULL, 16);
     122           break;
    112123       case 'p':
    113124           starting_port = atoi(optarg);
    114125           break;
     
    151162       printf("starting with node: %d\n", starting_node);
    152163
    153164   int nc = raw1394_get_nodecount(handle);
     165   if (bGUID!=0) {
     166      if (cli_GUID==0LL || cli_GUID==LLONG_MAX || cli_GUID==LLONG_MIN) {
     167          fprintf(stderr, "error parsing GUID command line parameter\n");
     168          exit(1);
     169      }   
     170   }     
    154171   for (i=starting_node; i < nc; ++i) {
     172      if (bGUID!=0) {
     173         node_GUID=rom1394_get_guid(handle, i);
     174#ifdef DEBUG
     175         printf("node=%d, node_GUID=%LX, cli_GUID=%LX\n", i, node_GUID, cli_GUID);
     176#endif   
     177         if (cli_GUID!=node_GUID) {
     178             continue;
     179         }
     180      }
     181
    155182      if (rom1394_get_directory(handle, i, &dir) < 0) {
    156183         fprintf(stderr,"error reading config rom directory for node %d\n", i);
    157184         raw1394_destroy_handle(handle);
     
    239266 
    240267    avc1394_transaction_block(handle, device, cmd, 3, RETRY_COUNT_FAST);
    241268}
     269
     270/*
     271 *  Compile:
     272 *     -std=gnu99 flag required for LLONG_MAX and LLONG_MIN inclusion
     273 *  gcc -std=gnu99 -o 6200chguid 6200chguid.c -lavc1394 -lrom1394 -lraw1394
     274 *
     275 */