6200ch.c.r21651.patch

admin, 09/03/2009 03:50 pm

Download (5.1 kB)

 
contrib/channel_changers/6200ch/6200ch.c 2009-09-03 20:18:12.926708146 +0000
88 88
#define QIP7100_MODEL_ID1  0x00008100
89 89
#define QIP7100_MODEL_ID2  0x00000001
90 90

  
91
#define QIP6200_VENDOR_ID1 0x0000211e
92
#define QIP6200_MODEL_ID1  0x00007100
93

  
91 94
#define MOT_UNKNOWN_VENDOR_ID1 0x04db
92 95
#define MOT_UNKNOWN_VENDOR_ID2 0x0406
93 96
#define MOT_UNKNOWN_VENDOR_ID3 0x0ce5
......
99 102
#define MOT_UNKNOWN_VENDOR_ID9 0x1ade
100 103
#define MOT_UNKNOWN_VENDOR_ID10 0x1cfb
101 104
#define MOT_UNKNOWN_VENDOR_ID11 0x2040
102
#define MOT_UNKNOWN_VENDOR_ID12 0x211e
103
#define MOT_UNKNOWN_VENDOR_ID13 0x2180
104
#define MOT_UNKNOWN_VENDOR_ID14 0x2210
105
#define MOT_UNKNOWN_VENDOR_ID15 0x230b
106
#define MOT_UNKNOWN_VENDOR_ID16 0x2375
107
#define MOT_UNKNOWN_VENDOR_ID17 0x2395
108
#define MOT_UNKNOWN_VENDOR_ID18 0x23a2
109
#define MOT_UNKNOWN_VENDOR_ID19 0x23ed
110
#define MOT_UNKNOWN_VENDOR_ID20 0x23ee
111
#define MOT_UNKNOWN_VENDOR_ID21 0x23a0
112
#define MOT_UNKNOWN_VENDOR_ID22 0x23a1
105
#define MOT_UNKNOWN_VENDOR_ID12 0x2180
106
#define MOT_UNKNOWN_VENDOR_ID13 0x2210
107
#define MOT_UNKNOWN_VENDOR_ID14 0x230b
108
#define MOT_UNKNOWN_VENDOR_ID15 0x2375
109
#define MOT_UNKNOWN_VENDOR_ID16 0x2395
110
#define MOT_UNKNOWN_VENDOR_ID17 0x23a2
111
#define MOT_UNKNOWN_VENDOR_ID18 0x23ed
112
#define MOT_UNKNOWN_VENDOR_ID19 0x23ee
113
#define MOT_UNKNOWN_VENDOR_ID20 0x23a0
114
#define MOT_UNKNOWN_VENDOR_ID21 0x23a1
113 115

  
114 116
#define PACE_VENDOR_ID1    0x00005094 /* 550 & 779 */
115 117
#define PACE_VENDOR_ID2    0x00005094 /* unknown */
......
128 130
#define RETRY_COUNT_FAST 0
129 131

  
130 132
void set_chan_slow(raw1394handle_t handle, int device, int verbose, int chn);
133
void set_chan_slow_four_digit(raw1394handle_t handle, int device, int verbose, int chn);
131 134
void set_chan_fast(raw1394handle_t handle, int device, int verbose, int chn);
132 135
void set_power_fast(raw1394handle_t handle, int device, int verbose);
133 136

  
......
143 146
   fprintf(stderr, "-p PORT   port/adapter to use              (default:%i)\n",
144 147
           STARTING_PORT);
145 148
   fprintf(stderr, "-g GUID   GUID to use, -n switch, if present, will be ignored.\n");
149
   fprintf(stderr, "-4        Enable 4 digit channel number support.\n");
146 150
   exit(1);
147 151
}
148 152

  
......
153 157
   int i;
154 158
   int verbose = 0;
155 159
   int single_packet = 0;
160
   int use_four_digit = 0;
156 161
   int toggle_power = 0;
157 162
   int bGUID=0;
158 163
   octlet_t cli_GUID=0LL;
......
191 196
       case 'p':
192 197
           starting_port = atoi(optarg);
193 198
           break;
199
       case '4':
200
           use_four_digit = 1;
201
           break;
194 202
       default:
195 203
           fprintf(stderr, "incorrect command line arguments\n");
196 204
           usage();
......
203 211
       /* the last argument is the channel number */
204 212
       chn = atoi(argv[optind]);
205 213
   }
214
   if (single_packet && use_four_digit) {
215
       fprintf(stderr, "Can't use both -s and -4 together.\n");
216
       usage();
217
   }    
206 218
   else if (!toggle_power)
207 219
   {
208 220
       usage();
......
292 304
            (dir.vendor_id == DCT6416_VENDOR_ID1) ||
293 305
            (dir.vendor_id == DCT6416_VENDOR_ID2) ||
294 306
            (dir.vendor_id == QIP7100_VENDOR_ID1) ||
307
            (dir.vendor_id == QIP6200_VENDOR_ID1) ||
295 308
            (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID1) ||
296 309
            (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID2) ||
297 310
            (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID3) ||
......
313 326
            (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID19) ||
314 327
            (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID20) ||
315 328
            (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID21) ||
316
            (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID22) ||
317 329
            (dir.vendor_id == PACE_VENDOR_ID1) ||
318 330
            (dir.vendor_id == PACE_VENDOR_ID2)) &&
319 331
           ((dir.model_id == DCH3200_MODEL_ID1) ||
......
356 368
       if (single_packet)
357 369
           set_chan_fast(handle, device, verbose, chn);
358 370
       else
371
       if (use_four_digit)
372
           set_chan_slow_four_digit(handle, device, verbose, chn); 
373
       else
359 374
           set_chan_slow(handle, device, verbose, chn);
360 375
   }
361 376

  
......
387 402
   }
388 403
}
389 404

  
405
// Same as set_chan_slow(), but sends 4 digits instead of 3 (for quicker channel changes on QIP6200-2 / QIP7100-1)
406
void set_chan_slow_four_digit(raw1394handle_t handle, int device, int verbose, int chn)
407
{
408
   int i;
409
   int dig[4];
410
   quadlet_t cmd[2];
411

  
412
   if (verbose)
413
       printf("chn: %d\n", chn);
414

  
415
   dig[3] = (chn % 10);
416
   dig[2] = (chn % 100) / 10;
417
   dig[1] = (chn % 1000) / 100;
418
   dig[0] = (chn % 10000) / 1000;
419

  
420
   if (verbose)
421
      printf("AV/C Command: %d%d%d = Op1=0x%08X Op2=0x%08X Op3=0x%08X Op4=0x%08X\n",
422
            dig[0], dig[1], dig[2], dig[3],
423
            CTL_CMD0 | dig[0], CTL_CMD0 | dig[1], CTL_CMD0 | dig[2]);
424

  
425
   for (i=0; i<4; i++) {
426
      if (verbose)
427
          printf("Sending digit %d\n", dig[i]);
428
      cmd[0] = CTL_CMD0 | dig[i];
429
      cmd[1] = 0x0;
430
    
431
      avc1394_transaction_block(handle, device, cmd, 2, RETRY_COUNT_SLOW);
432
      usleep(500000); // small delay for button to register
433
   }
434
} 
435

  
390 436
void set_chan_fast(raw1394handle_t handle, int device, int verbose, int chn)
391 437
{
392 438
    quadlet_t cmd[3];