--- contrib/channel_changers/6200ch.c.orig 2009-01-09 02:45:07.000000000 +0000 +++ contrib/channel_changers/6200ch.c 2009-09-03 06:57:54.199977816 +0000 @@ -34,8 +34,14 @@ // WARNING: Please update firewiredevice.cpp when adding to this list. #define DCH3200_VENDOR_ID1 0x00001c11 +#define DCH3200_VENDOR_ID2 0x00001cfb +#define DCH3200_VENDOR_ID3 0x00001fc4 +#define DCH3200_VENDOR_ID4 0x000023a3 #define DCH3200_MODEL_ID1 0x0000d330 +#define DCH3416_VENDOR_ID1 0x00001e46 +#define DCH3416_MODEL_ID1 0x0000b630 + #define DCT3412_VENDOR_ID1 0x0000159a #define DCT3412_MODEL_ID1 0x000034cb @@ -62,6 +68,7 @@ #define DCT6200_VENDOR_ID13 0x00001aad #define DCT6200_VENDOR_ID14 0x00000b06 #define DCT6200_VENDOR_ID15 0x0000195e +#define DCT6200_VENDOR_ID16 0x000010dc #define DCT6200_SPEC_ID 0x00005068 #define DCT6200_SW_VERSION 0x00010101 #define DCT6200_MODEL_ID1 0x0000620a @@ -76,7 +83,37 @@ #define DCT6416_VENDOR_ID2 0x00001a66 #define DCT6416_MODEL_ID1 0x0000646b +#define QIP7100_VENDOR_ID1 0x00002374 +#define QIP7100_MODEL_ID1 0x00008100 +#define QIP7100_MODEL_ID2 0x00000001 + +#define QIP6200_VENDOR_ID1 0x0000211e +#define QIP6200_MODEL_ID1 0x00007100 + +#define MOT_UNKNOWN_VENDOR_ID1 0x04db +#define MOT_UNKNOWN_VENDOR_ID2 0x0406 +#define MOT_UNKNOWN_VENDOR_ID3 0x0ce5 +#define MOT_UNKNOWN_VENDOR_ID4 0x111a +#define MOT_UNKNOWN_VENDOR_ID5 0x1225 +#define MOT_UNKNOWN_VENDOR_ID6 0x1404 +#define MOT_UNKNOWN_VENDOR_ID7 0x1626 +#define MOT_UNKNOWN_VENDOR_ID8 0x18c0 +#define MOT_UNKNOWN_VENDOR_ID9 0x1ade +#define MOT_UNKNOWN_VENDOR_ID10 0x1cfb +#define MOT_UNKNOWN_VENDOR_ID11 0x2040 +#define MOT_UNKNOWN_VENDOR_ID12 0x2180 +#define MOT_UNKNOWN_VENDOR_ID13 0x2210 +#define MOT_UNKNOWN_VENDOR_ID14 0x230b +#define MOT_UNKNOWN_VENDOR_ID15 0x2375 +#define MOT_UNKNOWN_VENDOR_ID16 0x2395 +#define MOT_UNKNOWN_VENDOR_ID17 0x23a2 +#define MOT_UNKNOWN_VENDOR_ID18 0x23ed +#define MOT_UNKNOWN_VENDOR_ID19 0x23ee +#define MOT_UNKNOWN_VENDOR_ID20 0x23a0 +#define MOT_UNKNOWN_VENDOR_ID21 0x23a1 + #define PACE_VENDOR_ID1 0x00005094 /* 550 & 779 */ +#define PACE_VENDOR_ID2 0x00005094 /* unknown */ #define PACE550_MODEL_ID1 0x00010551 #define PACE779_MODEL_ID1 0x00010755 @@ -92,6 +129,7 @@ #define RETRY_COUNT_FAST 0 void set_chan_slow(raw1394handle_t handle, int device, int verbose, int chn); +void set_chan_slow_four_digit(raw1394handle_t handle, int device, int verbose, int chn); void set_chan_fast(raw1394handle_t handle, int device, int verbose, int chn); void usage() @@ -120,6 +158,7 @@ octlet_t node_GUID=0LL; quadlet_t cmd[2]; int chn = 550; + int use_four_channel = 0; /* some people experience crashes when starting on node 1 */ int starting_node = STARTING_NODE; @@ -151,6 +190,9 @@ case 'p': starting_port = atoi(optarg); break; + case '4': + use_four_channel = 1; + break; default: fprintf(stderr, "incorrect command line arguments\n"); usage(); @@ -161,6 +203,12 @@ if (optind != argc-1) { usage(); } + + if (single_packet && use_four_channel) { + fprintf(stderr, "Can't use both -s and -4 together.\n"); + usage(); + } + /* the last argument is the channel number */ chn = atoi(argv[optind]); @@ -172,7 +220,7 @@ if (!handle) { if (!errno) { - fprintf(stderr, "Not Compatable!\n"); + fprintf(stderr, "Not Compatible!\n"); } else { perror("Couldn't get 1394 handle"); fprintf(stderr, "Is ieee1394, driver, and raw1394 loaded?\n"); @@ -219,9 +267,13 @@ // WARNING: Please update firewiredevice.cpp when adding to this list. if ( ((dir.vendor_id == DCH3200_VENDOR_ID1) || - (dir.vendor_id == DCT3412_VENDOR_ID1) || - (dir.vendor_id == DCT3416_VENDOR_ID1) || - (dir.vendor_id == DCT3416_VENDOR_ID2) || + (dir.vendor_id == DCH3200_VENDOR_ID2) || + (dir.vendor_id == DCH3200_VENDOR_ID3) || + (dir.vendor_id == DCH3200_VENDOR_ID4) || + (dir.vendor_id == DCH3416_VENDOR_ID1) || + (dir.vendor_id == DCT3412_VENDOR_ID1) || + (dir.vendor_id == DCT3416_VENDOR_ID1) || + (dir.vendor_id == DCT3416_VENDOR_ID2) || (dir.vendor_id == DCT5100_VENDOR_ID1) || (dir.vendor_id == DCT6200_VENDOR_ID1) || (dir.vendor_id == DCT6200_VENDOR_ID2) || @@ -238,12 +290,38 @@ (dir.vendor_id == DCT6200_VENDOR_ID13) || (dir.vendor_id == DCT6200_VENDOR_ID14) || (dir.vendor_id == DCT6200_VENDOR_ID15) || + (dir.vendor_id == DCT6200_VENDOR_ID16) || (dir.vendor_id == DCT6412_VENDOR_ID1) || (dir.vendor_id == DCT6412_VENDOR_ID2) || - (dir.vendor_id == DCT6416_VENDOR_ID1) || + (dir.vendor_id == DCT6416_VENDOR_ID1) || (dir.vendor_id == DCT6416_VENDOR_ID2) || - (dir.vendor_id == PACE_VENDOR_ID1)) && + (dir.vendor_id == QIP7100_VENDOR_ID1) || + (dir.vendor_id == QIP6200_VENDOR_ID1) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID1) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID2) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID3) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID4) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID5) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID6) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID7) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID8) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID9) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID10) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID11) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID12) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID13) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID14) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID15) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID16) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID17) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID18) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID19) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID20) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID21) || + (dir.vendor_id == PACE_VENDOR_ID1) || + (dir.vendor_id == PACE_VENDOR_ID2)) && ((dir.model_id == DCH3200_MODEL_ID1) || + (dir.model_id == DCH3416_MODEL_ID1) || (dir.model_id == DCT3412_MODEL_ID1) || (dir.model_id == DCT3416_MODEL_ID1) || (dir.model_id == DCT3416_MODEL_ID2) || @@ -253,6 +331,9 @@ (dir.model_id == DCT6412_MODEL_ID1) || (dir.model_id == DCT6412_MODEL_ID2) || (dir.model_id == DCT6416_MODEL_ID1) || + (dir.model_id == QIP7100_MODEL_ID1) || + (dir.model_id == QIP7100_MODEL_ID2) || + (dir.model_id == QIP6200_MODEL_ID1) || (dir.model_id == PACE550_MODEL_ID1) || (dir.model_id == PACE779_MODEL_ID1)) ) { @@ -274,6 +355,9 @@ if (single_packet) set_chan_fast(handle, device, verbose, chn); else + if (use_four_channel) + set_chan_slow_four_digit(handle, device, verbose, chn); + else set_chan_slow(handle, device, verbose, chn); raw1394_destroy_handle(handle); @@ -304,6 +388,37 @@ } } +// Same as set_chan_slow(), but sends 4 digits instead of 3 (for quicker channel changes on QIP6200-2/QIP7100-1) +void set_chan_slow_four_digit(raw1394handle_t handle, int device, int verbose, int chn) +{ + int i; + int dig[4]; + quadlet_t cmd[2]; + + if (verbose) + printf("chn: %d\n", chn); + + dig[3] = (chn % 10); + dig[2] = (chn % 100) / 10; + dig[1] = (chn % 1000) / 100; + dig[0] = (chn % 10000) / 1000; + + if (verbose) + printf("AV/C Command: %d%d%d = Op1=0x%08X Op2=0x%08X Op3=0x%08X Op4=0x%08X\n", + dig[0], dig[1], dig[2], dig[3], + CTL_CMD0 | dig[0], CTL_CMD0 | dig[1], CTL_CMD0 | dig[2]); + + for (i=0; i<4; i++) { + if (verbose) + printf("Sending digit %d\n", dig[i]); + cmd[0] = CTL_CMD0 | dig[i]; + cmd[1] = 0x0; + + avc1394_transaction_block(handle, device, cmd, 2, RETRY_COUNT_SLOW); + usleep(500000); // small delay for button to register + } +} + void set_chan_fast(raw1394handle_t handle, int device, int verbose, int chn) { quadlet_t cmd[3];