Ticket #1184: 6200ch.c.diff

File 6200ch.c.diff, 3.3 KB (added by Tim Trampedach <tim_trampedach@…>, 18 years ago)

Diff which includes Steve's fix

  • contrib/channel_changers/6200ch.c

     
    5555        AVC1394_6200_OPERAND_SET
    5656
    5757#define STARTING_NODE 1  /* skip 1394 nodes to avoid error msgs */
     58#define STARTING_PORT 0
    5859
    5960void usage()
    6061{
    61    fprintf(stderr, "Usage: 6200ch [-v] [-n NODE] <channel_num>\n");
     62   fprintf(stderr, "Usage: 6200ch [-v] [-n NODE] [-p PORT] [-o] <channel_num>\n");
    6263   fprintf(stderr, "-v        Print additional verbose output\n");
    6364   fprintf(stderr, "-n NODE   node to start device scanning on\n");
     65   fprintf(stderr, "-p PORT   port/adapter to use (default:0)\n");
     66   fprintf(stderr, "-o        use old method to change channels\n");
    6467   exit(1);
    6568}
    6669
     
    7073   int device = -1;
    7174   int i;
    7275   int verbose = 0;
     76   int old = 0;
    7377   quadlet_t cmd[2];
    7478   int dig[3];
    7579   int chn = 550;
    7680
    7781   /* some people experience crashes when starting on node 1 */
    7882   int starting_node = STARTING_NODE;
     83   int starting_port = STARTING_PORT;
    7984   int c;
    8085   int index;
    8186
     
    8388      usage();
    8489
    8590   opterr = 0;
    86    while ((c = getopt(argc, argv, "vn:")) != -1) {
     91   while ((c = getopt(argc, argv, "vn:p:o")) != -1) {
    8792       switch (c) {
    8893       case 'v':
    8994           verbose = 1;
     
    9196       case 'n':
    9297           starting_node = atoi(optarg);
    9398           break;
     99       case 'o':
     100           old = 1;
     101           break;
     102       case 'p':
     103           starting_port = atoi(optarg);
     104           break;
    94105       default:
    95106           fprintf(stderr, "incorrect command line arguments\n");
    96107           usage();
     
    120131      exit(1);
    121132   }
    122133
    123    if (raw1394_set_port(handle, 0) < 0) {
     134   if (raw1394_set_port(handle, starting_port) < 0) {
    124135      perror("couldn't set port");
    125136      raw1394_destroy_handle(handle);
    126137      exit(1);
     
    169180        exit(1);
    170181   }
    171182
    172    dig[2] = (chn % 10);
    173    dig[1] = (chn % 100)  / 10;
    174    dig[0] = (chn % 1000) / 100;
     183   if (old) {
     184       dig[2] = (chn % 10);
     185       dig[1] = (chn % 100)  / 10;
     186       dig[0] = (chn % 1000) / 100;
    175187
    176    if (verbose)
    177       printf("AV/C Command: %d%d%d = Op1=0x%08X Op2=0x%08X Op3=0x%08X\n",
    178             dig[0], dig[1], dig[2],
    179             CTL_CMD0 | dig[0], CTL_CMD0 | dig[1], CTL_CMD0 | dig[2]);
     188       if (verbose)
     189           printf("AV/C Command: %d%d%d = Op1=0x%08X Op2=0x%08X Op3=0x%08X\n",
     190                  dig[0], dig[1], dig[2],
     191                  CTL_CMD0 | dig[0], CTL_CMD0 | dig[1], CTL_CMD0 | dig[2]);
    180192
    181    for (i=0; i<3; i++) {
    182       cmd[0] = CTL_CMD0 | dig[i];
    183       cmd[1] = 0x0;
     193       for (i=0; i<3; i++) {
     194           cmd[0] = CTL_CMD0 | dig[i];
     195           cmd[1] = 0x0;
    184196   
    185       avc1394_transaction_block(handle, device, cmd, 2, 1);
    186       usleep(500000);  // small delay for button to register
     197           avc1394_transaction_block(handle, device, cmd, 2, 1);
     198           usleep(500000);  // small delay for button to register
     199       }
    187200   }
    188201
     202   else {
     203       cmd[0] = CTL_CMD0 | 0x67;
     204       cmd[1] = (0x04 << 24) | (chn << 8) | 0x000000FF;
     205       cmd[2] = 0xFF << 24;
     206
     207       if (verbose)
     208           printf("AV/C command for channel %d = 0x%08X %08X %08X\n",
     209                  chn, cmd[0], cmd[1], cmd[2]);
     210 
     211       avc1394_transaction_block(handle, device, cmd, 3, 1);
     212   }
     213
    189214   raw1394_destroy_handle(handle);
    190215   exit(0);
    191216}