76 |
76 |
#define DCT6416_VENDOR_ID2 0x00001a66
|
77 |
77 |
#define DCT6416_MODEL_ID1 0x0000646b
|
78 |
78 |
|
|
79 |
#define QIP6200_VENDOR_ID1 0x0000211e
|
|
80 |
#define QIP6200_MODEL_ID1 0x00007100
|
|
81 |
|
79 |
82 |
#define PACE_VENDOR_ID1 0x00005094 /* 550 & 779 */
|
80 |
83 |
#define PACE550_MODEL_ID1 0x00010551
|
81 |
84 |
#define PACE779_MODEL_ID1 0x00010755
|
... | ... | |
92 |
95 |
#define RETRY_COUNT_FAST 0
|
93 |
96 |
|
94 |
97 |
void set_chan_slow(raw1394handle_t handle, int device, int verbose, int chn);
|
|
98 |
void set_chan_slow_four_digit(raw1394handle_t handle, int device, int verbose, int chn);
|
95 |
99 |
void set_chan_fast(raw1394handle_t handle, int device, int verbose, int chn);
|
96 |
100 |
|
97 |
101 |
void usage()
|
98 |
102 |
{
|
99 |
103 |
fprintf(stderr, "Usage: 6200ch [-v] [-s] [-n NODE] [-g GUID] [-p PORT] "
|
100 |
|
"<channel_num>\n");
|
|
104 |
"[-4] <channel_num>\n");
|
101 |
105 |
fprintf(stderr, "-v print additional verbose output\n");
|
102 |
|
fprintf(stderr, "-s use single packet method\n");
|
|
106 |
fprintf(stderr, "-s use single packet method. Cannot be used with -4.\n");
|
103 |
107 |
fprintf(stderr, "-n NODE node to start device scanning on (default:%i)\n",
|
104 |
108 |
STARTING_NODE);
|
105 |
109 |
fprintf(stderr, "-p PORT port/adapter to use (default:%i)\n",
|
106 |
110 |
STARTING_PORT);
|
107 |
111 |
fprintf(stderr, "-g GUID GUID to use, -n switch, if present, will be ignored.\n");
|
|
112 |
fprintf(stderr, "-4 Support for 4 digit channel numbers. Cannot be used with -s.\n");
|
108 |
113 |
exit(1);
|
109 |
114 |
}
|
110 |
115 |
|
... | ... | |
119 |
124 |
octlet_t cli_GUID=0LL;
|
120 |
125 |
octlet_t node_GUID=0LL;
|
121 |
126 |
quadlet_t cmd[2];
|
122 |
|
int chn = 550;
|
|
127 |
int chn = 0;
|
|
128 |
int use_four_digit = 0;
|
123 |
129 |
|
124 |
130 |
/* some people experience crashes when starting on node 1 */
|
125 |
131 |
int starting_node = STARTING_NODE;
|
... | ... | |
131 |
137 |
usage();
|
132 |
138 |
|
133 |
139 |
opterr = 0;
|
134 |
|
while ((c = getopt(argc, argv, "vsg:n:p:")) != -1)
|
|
140 |
while ((c = getopt(argc, argv, "vsg:n:p:4")) != -1)
|
135 |
141 |
{
|
136 |
142 |
switch (c) {
|
137 |
143 |
case 'v':
|
... | ... | |
151 |
157 |
case 'p':
|
152 |
158 |
starting_port = atoi(optarg);
|
153 |
159 |
break;
|
|
160 |
case '4':
|
|
161 |
use_four_digit = 1;
|
|
162 |
break;
|
154 |
163 |
default:
|
155 |
164 |
fprintf(stderr, "incorrect command line arguments\n");
|
156 |
165 |
usage();
|
157 |
166 |
}
|
158 |
167 |
}
|
159 |
|
|
|
168 |
/* We cannot use single channel with 4 digits */
|
|
169 |
if (single_packet && use_four_digit) {
|
|
170 |
usage();
|
|
171 |
}
|
160 |
172 |
/* print out usage message if not enough arguments */
|
161 |
173 |
if (optind != argc-1) {
|
162 |
174 |
usage();
|
... | ... | |
242 |
254 |
(dir.vendor_id == DCT6412_VENDOR_ID2) ||
|
243 |
255 |
(dir.vendor_id == DCT6416_VENDOR_ID1) ||
|
244 |
256 |
(dir.vendor_id == DCT6416_VENDOR_ID2) ||
|
|
257 |
(dir.vendor_id == QIP6200_VENDOR_ID1) ||
|
245 |
258 |
(dir.vendor_id == PACE_VENDOR_ID1)) &&
|
246 |
259 |
((dir.model_id == DCH3200_MODEL_ID1) ||
|
247 |
260 |
(dir.model_id == DCT3412_MODEL_ID1) ||
|
... | ... | |
253 |
266 |
(dir.model_id == DCT6412_MODEL_ID1) ||
|
254 |
267 |
(dir.model_id == DCT6412_MODEL_ID2) ||
|
255 |
268 |
(dir.model_id == DCT6416_MODEL_ID1) ||
|
|
269 |
(dir.model_id == QIP6200_MODEL_ID1) ||
|
256 |
270 |
(dir.model_id == PACE550_MODEL_ID1) ||
|
257 |
271 |
(dir.model_id == PACE779_MODEL_ID1)) )
|
258 |
272 |
{
|
... | ... | |
274 |
288 |
if (single_packet)
|
275 |
289 |
set_chan_fast(handle, device, verbose, chn);
|
276 |
290 |
else
|
|
291 |
if (use_four_digit)
|
|
292 |
set_chan_slow_four_digit(handle, device, verbose, chn);
|
|
293 |
else
|
277 |
294 |
set_chan_slow(handle, device, verbose, chn);
|
278 |
295 |
|
279 |
296 |
raw1394_destroy_handle(handle);
|
... | ... | |
304 |
321 |
}
|
305 |
322 |
}
|
306 |
323 |
|
|
324 |
// Same as set_chan_slow(), but sends 4 digits instead of 3 (for quicker channel changes on QIP6200-2 / QIP7100-1)
|
|
325 |
void set_chan_slow_four_digit(raw1394handle_t handle, int device, int verbose, int chn)
|
|
326 |
{
|
|
327 |
int i;
|
|
328 |
int dig[4];
|
|
329 |
quadlet_t cmd[2];
|
|
330 |
|
|
331 |
if (verbose)
|
|
332 |
printf("chn: %d\n", chn);
|
|
333 |
|
|
334 |
dig[3] = (chn % 10);
|
|
335 |
dig[2] = (chn % 100) / 10;
|
|
336 |
dig[1] = (chn % 1000) / 100;
|
|
337 |
dig[0] = (chn % 10000) / 1000;
|
|
338 |
|
|
339 |
if (verbose)
|
|
340 |
printf("AV/C Command: %d%d%d%d = Op1=0x%08X Op2=0x%08X Op3=0x%08X Op4=0x%08X\n",
|
|
341 |
dig[0], dig[1], dig[2], dig[3],
|
|
342 |
CTL_CMD0 | dig[0], CTL_CMD0 | dig[1], CTL_CMD0 | dig[2], CTL_CMD0 | dig[3]);
|
|
343 |
|
|
344 |
for (i=0; i<4; i++) {
|
|
345 |
if (verbose)
|
|
346 |
printf("Sending digit %d\n", dig[i]);
|
|
347 |
cmd[0] = CTL_CMD0 | dig[i];
|
|
348 |
cmd[1] = 0x0;
|
|
349 |
|
|
350 |
avc1394_transaction_block(handle, device, cmd, 2, RETRY_COUNT_SLOW);
|
|
351 |
usleep(500000); // small delay for button to register
|
|
352 |
}
|
|
353 |
}
|
|
354 |
|
307 |
355 |
void set_chan_fast(raw1394handle_t handle, int device, int verbose, int chn)
|
308 |
356 |
{
|
309 |
357 |
quadlet_t cmd[3];
|