Hello!

I ran a myth box for ~20 months; did a couple of upgrades, some went very well, some went harder. When 0.17 came out, I decided to bite the bullet, and reinstall the box and go from RH9 to FC3. Numerous rpm/apt difficulties led to this decision (I'd unwisely 'forced' some things, and the upgrade to 0.17 went very poorly).

Anyway, I have a DirecTV receiver (circa Q1 2000), and hacked a found script to work with my box (needed to do some slight bit fiddling to get it to work). I saved that script, since I knew it was fiddled, and knew it worked. I've not changed the Serial->DirecTV-low-speed-data cable.

Well, everything has gone well (ok, not great, but the excellent guide of Jarod, et el let me work through them all (I was one of the lucky ones snagged by the NVidia GF4 MX 440 bug (permanent logo display), so I got a MX 5200 card),.

However, my problem is this: I cannot get the channel changer script to work! And the urls' I kept from the effort 20 months ago have dried up on me. Worse, I don't know enough about the issue to give google a question to give me an answer.

Here's the script: Note: I'm not a PERL guy, so I can do only simple things myself in the language, like find the line where the error occurs via printfs:
--------------------------------changechannel-------------------------------------------


#!/usr/bin/perl

# This is only the necessary parts of the original script (found in the link bellow) necessary to change the channels in the box.
# dss_control: Remote control of a Sony DSS unit via the serial port
# By Josh Wilmes (http://www.hitchhiker.org/dss)
# Based on info from http://www.isd.net/mevenmo/audiovideo.html
#
# I take no responsibility for any damage this script might cause.
# Feel free to modify and redistribute this as you see fit, but please retain
# the comments above.


# Modified 12-05-02 by Jason Richmond ([EMAIL PROTECTED]) to control RCA DirecTV reciever.
#Usage:
# RCA.pl <channel number>
#Notes:
# Com port is set to COM 2 (cua1)
# Just make this file executable (chmod 755) and call it.



$|=1; use POSIX qw(:termios_h); use FileHandle;

$verbose=1;

%pkt_decode=("0xF0" => "START PKT",
           "0xF1" => "ERR 1",
           "0xF2" => "GOT EXTENDED",
           "0xF4" => "END PKT",
           "0xF5" => "ERR 2",
           "0xFB" => "PROMPT");

%terminal=("0xF1" => -1,
         "0xF4" => 1,
         "0xF5" => -1);


%cmds=("on" => \&on, "off" => \&off, "get_channel" => \&get_channel, "text" => \&text, "scroll" => \&scroll, "hide" => \&hide, "show" => \&show, "get_signal" => \&get_signal, "channel" => \&change_channel, "key" => \&key, "verbose" => \&toggle_verbose );

# done
%keymap=(right => "0xa8",
          left => "0xa9",
          up => "0xa6",
        down => "0xa7",
    favorite => "0x9e",
      select => "0xc3",
        exit => "0xf9",
           9 => "0xc6",
           8 => "0xc7",
           7 => "0xc8",
           6 => "0xc9",
           5 => "0xca",
           4 => "0xcb",
           3 => "0xcc",
           2 => "0xcd",
           1 => "0xce",
           0 => "0xcf",
       ch_up => "0xd2",
       ch_dn => "0xd3",
       power => "0xd5",
        jump => "0xac",
       guide => "0xe5",
        menu => "0xf7");
printf( "Here\n");
my $serial=init_serial("/dev/cua0","9600");
printf( "There\n");
[EMAIL PROTECTED] = split //, join '', @ARGV;
foreach (@ARGV) {
printf($_);
change_channel($_);
}

exit(0);

sub change_channel {
  my ($channel)[EMAIL PROTECTED];

  $_=sprintf("%4.4x",$channel);
  ($n1,$n2)=/(..)(..)/;

  simple_command("0x46",$n1,$n2,"0x0");
}


sub simple_command { if (defined(dss_command(@_))) { return(1); } else { return(undef); } } ##looks right sub dss_command { sendbytes("0xFA",@_); return get_reply(); }

sub sendbytes {
  (@send)[EMAIL PROTECTED];
  foreach (@send) { s/^0x//g; $_=hex($_); }
  print " SEND: " if ($verbose);
  foreach $num (@send) {
      $str=pack('C',$num);
      printf("0x%X [%s] ", $num, $str) if ($verbose);
    syswrite($serial,$str,length($str));
  }
  print "\n" if ($verbose);
}

sub get_reply {
  my $starttime=time();
  my ($last,$ok,@ret);

  print "  RECV: " if ($verbose);

  while (1) {
     $ret=sysread($serial,$buf,1);
     $str=sprintf("0x%2.2X", ord($buf));

     # busy wait bad!
     die ("Error ($str)\n") if (time() - $starttime > 8);
     next if $str eq "0x00";

     if ($pkt_decode{$str}) {
         print $str if ($verbose);
         print "[$pkt_decode{$str}] " if ($verbose);
     } else {
         $_=$str; s/^0x//g; $_=hex($_);
         printf("$str(%3.3s) ",$_) if ($verbose);
         push (@ret,$_);
     }

     $ok=1 if ($terminal{$str} > 0);
     last if ($terminal{$str});
     last if ($last eq "0xFB" && $str eq "0xFB");
     $last=$str;
 }
 print "\n\n" if ($verbose);

 return @ret if ($ok);
 return undef;
}

sub init_serial {
printf("step1\n");
  my($port,$baud)[EMAIL PROTECTED];
  my($termios,$cflag,$lflag,$iflag,$oflag);
  my($voice);

my $serial=new FileHandle("+>$port") || die "Could not open $port: $!\n";

  $termios = POSIX::Termios->new();
printf("step2\n");
  $termios->getattr($serial->fileno()) || die "getattr: $!\n";
printf("step3\n");
  $cflag= 0 | CS8 | HUPCL | CREAD | CLOCAL;
  $lflag= 0;
  $iflag= 0 | IGNBRK | IGNPAR | IXON | IXOFF;
  $oflag= 0;

  $termios->setcflag($cflag);
  $termios->setlflag($lflag);
  $termios->setiflag($iflag);
  $termios->setoflag($oflag);
  $termios->setattr($serial->fileno(),TCSANOW) || die "setattr: $!\n";
  eval qq[
    \$termios->setospeed(POSIX::B$baud) || die "setospeed: \$!\n";
    \$termios->setispeed(POSIX::B$baud) || die "setispeed: \$!\n";
  ];

  die $@ if $@;

  $termios->setattr($serial->fileno(),TCSANOW) || die "setattr: $!\n";

  # This gets rid of all the special characters..
  $termios->getattr($serial->fileno()) || die "getattr: $!\n";
  for (0..NCCS) {
       if ($_ == NCCS) { last; }

       # Dont mess up XON/XOFF..
       if ($_ == VSTART || $_ == VSTOP) { next; }

       $termios->setcc($_,0);
  }
  $termios->setattr($serial->fileno(),TCSANOW) || die "setattr: $!\n";

return $serial;
}
----------------------------------------------end script-------------------------------------------
When I execute the script, I see:
Here
step1
step2
getattr: Inappropriate ioctl for device


So I know the line that's not working:
               $termios->getattr($serial->fileno()) || die "getattr: $!\n";

So. What has changed since RH9 that makes the above getattr command illegal in FC3? Or have I got to set /dev/cua0 to something? Here's an ls -l of /dev/cua0:
-rwxrwxrwx 1 root root 0 Mar 5 10:31 /dev/cua0


I know the receiver is working since: mplayer /dev/video0 does show a program. (pictures *and* sound! w00t!)

Any help would be more'n appreciated, let me tell you. :-) I think everything else is ok (learned LVM, set it up with expanded drives); mythsetup ran anyway... *grin* And I saved my DB, and previous recordings. I think this is hopefully the last issue, and there seems little help, lestways, I don't know enough to ask Google the right question...

Thanks in advance!

Carl

_______________________________________________
mythtv-users mailing list
mythtv-users@mythtv.org
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-users

Reply via email to