Interesting. Thanks for the links. I'm surprised that a transaction with 3 separate calls was deemed to be more stable, but I'm sure there was a valid reason. However, I do notice one thing on the original 1-shot way of doing things, which is that a different call is used than what's now in the code and what I used (avc1394_send_command_block vs. avc1394_transaction_block for everywhere else). Maybe that's the difference.
<br><br>The three things that still have me thinking that my current solution is right is 1) the Scientific Atlanta boxes do 72-bit transactions and from what I heard are quite stable 2) the MacOS web page does it that way (FWIW) and 3) it on the whole makes more sense to send one 3-digit channel number instead of 3 individual digits essentially emulating key presses. I've definitely been wrong in the past, so please chime in if you know any more or have any success/failure with my version of the script!
<br><br>Thanks,<br><br>Tim<br><br><br><div><span class="gmail_quote">On 2/1/06, <b class="gmail_sendername">Jim Westfall</b> &lt;<a href="mailto:jwestfall@surrealistic.net">jwestfall@surrealistic.net</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">thats actually how it used to be.<br><br><a href="http://www.gossamer-threads.com/lists/mythtv/dev/79627?#79627">
http://www.gossamer-threads.com/lists/mythtv/dev/79627?#79627</a><br><a href="http://www.gossamer-threads.com/lists/mythtv/dev/106352?#106352">http://www.gossamer-threads.com/lists/mythtv/dev/106352?#106352</a><br><br>jim
<br><br>Tim Trampedach &lt;<a href="mailto:tim.trampedach@gmail.com">tim.trampedach@gmail.com</a>&gt; wrote [02.01.06]:<br>&gt; I found out a few interesting things on this and came up with a revamped<br>&gt; version of the 6200ch utility. Take a look at this web page:
<br>&gt; <a href="http://mac_hdtv_timer.home.comcast.net/channel.html">http://mac_hdtv_timer.home.comcast.net/channel.html</a>. It uses a 72-bit string<br>&gt; to send the command to the device in a single shot. MythTV and the utility
<br>&gt; currently use three separate transactions with 32-bit commands to send<br>&gt; digits one at a time. After some digging in the code I noticed that the<br>&gt; Scientific Atlanta box also uses 72-bit string, except it needs it twice (a
<br>&gt; &quot;change&quot; and then a &quot;commit&quot; if you will). So I revamped the 6200ch utility<br>&gt; to use the string format from that web page and it works flawlessly for me<br>&gt; now. No waiting with sleep, no missed channel changes and it's much quicker
<br>&gt; than one digit at a time.<br>&gt;<br>&gt; It really works well, but your mileage may vary. Therefore, if you have a<br>&gt; 6200-series box, please compile code below and let me know how it goes. One<br>&gt; or two minor items of cleanup could happen in there, but I'm on my way to
<br>&gt; sleep. Tomorrow! :-)<br>&gt;<br>&gt; The actual change is quite simple as it actually makes the code less<br>&gt; complicated. I need some feedback on this before I'll open a ticket and<br>&gt; submit the patch.<br>
&gt;<br>&gt; Thanks,<br>&gt;<br>&gt; Tim<br>&gt;<br>&gt;<br>&gt; /*<br>&gt;&nbsp;&nbsp;* 6200ch - an external channel changer for Motorola DCT-6200 Tuner<br>&gt;&nbsp;&nbsp;*<br>&gt;&nbsp;&nbsp;* Copyright 2004,2005 by Stacey D. Son &lt;<a href="mailto:mythdev@son.org">
mythdev@son.org</a>&gt;<br>&gt;&nbsp;&nbsp;*<br>&gt;&nbsp;&nbsp;* This program is free software; you can redistribute it and/or modify<br>&gt;&nbsp;&nbsp;* it under the terms of the GNU General Public License as published by<br>&gt;&nbsp;&nbsp;* the Free Software Foundation; either version 2 of the License, or
<br>&gt;&nbsp;&nbsp;* (at your option) any later version.<br>&gt;&nbsp;&nbsp;*<br>&gt;&nbsp;&nbsp;* This program is distributed in the hope that it will be useful,<br>&gt;&nbsp;&nbsp;* but WITHOUT ANY WARRANTY; without even the implied warranty of<br>&gt;&nbsp;&nbsp;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp;&nbsp;See the
<br>&gt;&nbsp;&nbsp;* GNU General Public License for more details.<br>&gt;&nbsp;&nbsp;*<br>&gt;&nbsp;&nbsp;* You should have received a copy of the GNU General Public License<br>&gt;&nbsp;&nbsp;* along with this program; if not, write to the Free Software Foundation,
<br>&gt;&nbsp;&nbsp;* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.<br>&gt;&nbsp;&nbsp;*/<br>&gt;<br>&gt; #include &lt;libavc1394/rom1394.h&gt;<br>&gt; #include &lt;libavc1394/avc1394.h&gt;<br>&gt; #include &lt;libraw1394/raw1394.h&gt;
<br>&gt; #include &lt;sys/types.h&gt;<br>&gt; #include &lt;stdio.h&gt;<br>&gt; #include &lt;errno.h&gt;<br>&gt; #include &lt;stdlib.h&gt;<br>&gt; #include &lt;unistd.h&gt; // for usleep<br>&gt;<br>&gt; // Motorola DCT-6200 IDs
<br>&gt; // Note: there are at least three different vendor IDs for the 6200<br>&gt; #define DCT6200_VENDOR_ID1 0x00000ce5<br>&gt; #define DCT6200_VENDOR_ID2 0x00000e5c<br>&gt; #define DCT6200_VENDOR_ID3 0x00001225<br>&gt; #define DCT6200_VENDOR_ID4 0x00000f9f
<br>&gt; #define DCT6200_VENDOR_ID5 0x00001180<br>&gt; #define DCT6200_VENDOR_ID6 0x000012c9<br>&gt; #define DCT6200_VENDOR_ID7 0x000011ae<br>&gt; #define DCT6200_VENDOR_ID8 0x0000152f<br>&gt; #define DCT6200_VENDOR_ID9 0x000014e8
<br>&gt; #define DCT6200_SPEC_ID&nbsp;&nbsp;&nbsp;&nbsp;0x00005068<br>&gt; #define DCT6200_SW_VERSION 0x00010101<br>&gt; #define DCT6200_MODEL_ID1&nbsp;&nbsp;0x0000620a<br>&gt; #define DCT6200_MODEL_ID2&nbsp;&nbsp;0x00006200<br>&gt; #define DCT6412_VENDOR_ID1 0x00000f9f
<br>&gt; #define DCT6412_MODEL_ID1&nbsp;&nbsp;0x000064ca<br>&gt;<br>&gt; #define AVC1394_SUBUNIT_TYPE_6200 (9 &lt;&lt; 19)&nbsp;&nbsp;/* uses a reserved subunit type<br>&gt; */<br>&gt;<br>&gt; #define AVC1394_6200_COMMAND_CHANNEL 0x000007C00&nbsp;&nbsp; /* 6200 subunit command
<br>&gt; */<br>&gt; #define AVC1394_6200_OPERAND_SET 0x20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 6200 subunit command operand<br>&gt; */<br>&gt;<br>&gt; #define CTL_CMD0 AVC1394_CTYPE_CONTROL | AVC1394_SUBUNIT_TYPE_6200 | \<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AVC1394_SUBUNIT_ID_0 | AVC1394_6200_COMMAND_CHANNEL | \
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AVC1394_6200_OPERAND_SET<br>&gt;<br>&gt; #define STARTING_NODE 1&nbsp;&nbsp;/* skip 1394 nodes to avoid error msgs */<br>&gt;<br>&gt; void usage()<br>&gt; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &quot;Usage: 6200ch [-v] [-n NODE] &lt;channel_num&gt;\n&quot;);
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &quot;-v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print additional verbose output\n&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &quot;-n NODE&nbsp;&nbsp; node to start device scanning on\n&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<br>&gt; }<br>&gt;<br>&gt; int main (int argc, char *argv[])
<br>&gt; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;rom1394_directory dir;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;int device = -1;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;int i;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;int verbose = 0;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;quadlet_t cmd[3];<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;int dig[3];<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;int chn = 550;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;/* some people experience crashes when starting on node 1 */
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;int starting_node = STARTING_NODE;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;int c;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;int index;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;if (argc &lt; 2)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; usage();<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;opterr = 0;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;while ((c = getopt(argc, argv, &quot;vn:&quot;)) != -1) {
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch (c) {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'v':<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verbose = 1;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'n':<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;starting_node = atoi(optarg);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &quot;incorrect command line arguments\n&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usage();<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;/* print out usage message if not enough arguments */<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;if (optind != argc-1) {
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usage();<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;/* the last argument is the channel number */<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;chn = atoi(argv[optind]);<br>&gt;<br>&gt; #ifdef RAW1394_V_0_8<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;raw1394handle_t handle = raw1394_get_handle();
<br>&gt; #else<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;raw1394handle_t handle = raw1394_new_handle();<br>&gt; #endif<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;if (!handle) {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!errno) {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &quot;Not Compatable!\n&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(&quot;Couldn't get 1394 handle&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &quot;Is ieee1394, driver, and raw1394 loaded?\n&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(1);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;if (raw1394_set_port(handle, 0) &lt; 0) {
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perror(&quot;couldn't set port&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raw1394_destroy_handle(handle);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(1);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;if (verbose)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;starting with node: %d\n&quot;, starting_node);
<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;int nc = raw1394_get_nodecount(handle);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;for (i=starting_node; i &lt; nc; ++i) {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (rom1394_get_directory(handle, i, &amp;dir) &lt; 0) {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&quot;error reading config rom directory for node %d\n&quot;,
<br>&gt; i);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raw1394_destroy_handle(handle);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (verbose)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;node %d: vendor_id = 0x%08x model_id = 0x%08x\n&quot;,
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i, dir.vendor_id, dir.model_id);<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( ((dir.vendor_id == DCT6200_VENDOR_ID1) ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dir.vendor_id == DCT6200_VENDOR_ID2) ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dir.vendor_id
 == DCT6200_VENDOR_ID3) ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dir.vendor_id == DCT6200_VENDOR_ID4) ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dir.vendor_id == DCT6200_VENDOR_ID5) ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dir.vendor_id == DCT6200_VENDOR_ID6) ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (
dir.vendor_id == DCT6200_VENDOR_ID7) ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dir.vendor_id == DCT6200_VENDOR_ID8) ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dir.vendor_id == DCT6200_VENDOR_ID9) ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dir.vendor_id == DCT6412_VENDOR_ID1)) &amp;&amp;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((dir.model_id == DCT6200_MODEL_ID1) ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dir.model_id == DCT6200_MODEL_ID2) ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dir.model_id == DCT6412_MODEL_ID1)) ) {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dir.unit_spec_id != DCT6200_SPEC_ID)
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &quot;Warning: Unit Spec ID different.\n&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dir.unit_sw_version != DCT6200_SW_VERSION)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr, &quot;Warning: Unit Software Version
<br>&gt; different.\n&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; device = i;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;if (device == -1) {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr, &quot;Could not find Motorola DCT-6200 on the 1394
<br>&gt; bus.\n&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raw1394_destroy_handle(handle);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(1);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;cmd[0] = CTL_CMD0 | 0x67;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;cmd[1] = (0x04 &lt;&lt; 24) | (chn &lt;&lt; 8) | 0x000000FF;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;cmd[2] = 0xFF &lt;&lt; 24;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;if (verbose)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;AV/C command for channel %d = 0x%08X %08X %08X\n&quot;,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chn, cmd[0], cmd[1], cmd[2]);<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;avc1394_transaction_block(handle, device, cmd, 3, 1);
<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;raw1394_destroy_handle(handle);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);<br>&gt; }<br>&gt;<br>&gt;<br>&gt; On 1/31/06, Steven Adeff &lt;<a href="mailto:adeffs.mythtv@gmail.com">adeffs.mythtv@gmail.com</a>&gt; wrote:<br>&gt; &gt;
<br>&gt; &gt; I talked to a fellow that wrote windows software for interacting with the<br>&gt; &gt; Motorola DCT via firewire. I asked him what his method is for changing<br>&gt; &gt; channels to see if its any different than what 
6200ch.c and mythtv are<br>&gt; &gt; doing, here's his response:<br>&gt; &gt;<br>&gt; &gt; &quot;Sorry for the delay replying, I haven't done much with firewire are a<br>&gt; &gt; couple of months due to being busy at work. I did see similar issues, what
<br>&gt; &gt; seemed to fix the problem was this<br>&gt; &gt; 1. I use a delay of 50ms between sending digits<br>&gt; &gt; 2. When I do the 50ms delay, I time the actual delay (using<br>&gt; &gt; QueryPerformanceCounter). If the actual delay taken is &gt; 500ms, then I
<br>&gt; &gt; resend all whole channel again.<br>&gt; &gt; 3. I also send each digit twice, once with the down button command and<br>&gt; &gt; once with the up button command. Each command has a 50ms delay delay<br>&gt; &gt; 4. I also send the enter button after sending the channel digits and dont
<br>&gt; &gt; send leading zeros e.g. channel 10 would be 0x21, 0xa1, 0x20, 0xa0, 0x0d,<br>&gt; &gt; 0x8d as the values in the command&quot;<br>&gt; &gt;<br>&gt; &gt; I'm going to see if I can modify 6200ch.c myself, but don't know how far
<br>&gt; &gt; I'll make it. If any programmers here can help in anyway please chime in.<br>&gt; &gt;<br>&gt; &gt; thanks!<br>&gt; &gt;<br>&gt; &gt; --<br>&gt; &gt; Steve<br>&gt; &gt; _______________________________________________
<br>&gt; &gt; mythtv-dev mailing list<br>&gt; &gt; <a href="mailto:mythtv-dev@mythtv.org">mythtv-dev@mythtv.org</a><br>&gt; &gt; <a href="http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev">http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
</a><br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br><br>&gt; _______________________________________________<br>&gt; mythtv-dev mailing list<br>&gt; <a href="mailto:mythtv-dev@mythtv.org">mythtv-dev@mythtv.org</a><br>&gt; <a href="http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev">
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev</a><br><br>_______________________________________________<br>mythtv-dev mailing list<br><a href="mailto:mythtv-dev@mythtv.org">mythtv-dev@mythtv.org</a><br><a href="http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev">
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev</a><br></blockquote></div><br>