Ham-Device-FT950

 view release on metacpan or  search on metacpan

lib/Ham/Device/FT950.pm  view on Meta::CPAN

        return undef;
    }
    my $m = $inv_rig_mode{$mode};
    $self->writeCmd('md0'.$m.';');
    my $result = $self->getMode();
    return $result;
    
}
##############################
#
# Sub getMode
# Returns the mode of the rig
# uses hash $rig_mode
#
eval {
sub getMode {
    my $self = shift;
    $self->writeCmd('md0;');
    my $mode = $self->readResult() || croak "Unable to read Rig Mode!\n";
    #print "getMode:result of command: $mode\n";
    $mode =~ /MD0([0-9A-D])\;/;
    my $m = $rig_mode{$1};
    #print "getMode:Value returned: $m\n";
    return $m;
    
}
};

###########################################
#
# Sub readSMeter
#
# Reads the S-Meter
# Send a "RM1;
# receive a string back RM1XXX; where
# XXX = 000-255
# Sub return a value 000-255 or undef
#
sub readSMeter {
    my $self = shift;
    my $meter;
    $self->writeCmd('RM1;');
    unless ($meter = $self->readResult()) {return undef }
    $meter =~ /RM1(\d+)\;/;
    my $r = $1;
    return $r
}

###########################################
#
# Sub statBSY
#
# Retrieves status of BUSY light on
# front of Rig.
# Returns 1 if ON
# Returns 0 if OFF
# Return undef is error or don't know
eval {
sub statBSY {
    my $self = shift;
    my ($busy, $result);
    unless ($result = $self->writeCmd('BY;')) { return undef; }
    $busy = $self->readResult();
    $busy =~ /BY(\d+)\;/;
    my $b = $1;
        if ($b == 10) { return 1;
        } else { return 0; }
}
};

###########################################
#
# Sub setMOX
#
# Sets and unsets the MOX (Manual Operated Xmit)
# Send a 1 to set, 0 to unset and 2 to status
# Status result:
# Returns 1 if ON
# Returns 0 if OFF
# Return undef is error or don't know
#
eval {
sub setMOX {
    my $self = shift;
    my $mox = shift;
    my ($m, $result, $r);
    if ($mox == 1) {
        unless ($result = $self->writeCmd('MX1;')) { return undef; }               
    } elsif ($mox == 0) {
          unless ($result = $self->writeCmd('MX0;')) { return undef; }
    } elsif ($mox == 2) {
        unless ($result = $self->writeCmd('MX;')) { return undef; }
        $r = $self->readResult();
        $r =~ /MX(\d)\;/;
        return $1;
    }
  }  #end sub
};  #end eval

###########################################
#
# Sub setVOX
#
# Sets and unsets the MOX (Voice Operated Xmit)
# Send a 1 to set, 0 to unset and 2 to status
# Status result:
# Returns 1 if ON
# Returns 0 if OFF
# Return undef is error or don't know
#
eval {
sub setVOX {
    my $self = shift;
    my ($vox, $m, $result, $r);
    $vox = shift;
    if ($vox == 1) {
        unless ($result = $self->writeCmd('VX1;')) { return undef; }               
    } elsif ($vox == 0) {
          unless ($result = $self->writeCmd('VX0;')) { return undef; }
    } elsif ($vox == 2) {
        unless ($result = $self->writeCmd('VX;')) { return undef; }
        $r = $self->readResult();
        $r =~ /VX(\d)\;/;
        return $1;
    }
  }  #end sub
};  #end eval

###########################################
#
# Sub statTX
#
# Retrieves TX status of Rig
# Returns 0 if Radio TX Off CAT TX OFF
# Returns 1 if Radio TX Off CAT TX ON
# Returns 2 if Radio TX ON  CAT TX OFF
# Return undef is error or don't know
eval {
sub statTX {
    my $self = shift;
    my ($busy, $result);
    unless ($result = $self->writeCmd('TX;')) { return undef; }
    $busy = $self->readResult();
    $busy =~ /TX(\d)\;/;
    my $b = $1;
        if ($b == 0)      {
            return 1;
        } elsif ($b == 1) {
            return 1;
        } elsif ($b == 2) {
            return 2;
        } else { return undef; }
}
};

###########################################
#
# Sub statFastStep
#
# Retrieves status of "Fast Step" Button
# Returns 0 for Off
# Returns 1 for ON
# Return undef is error or don't know
eval {
sub statFastStep {
    my $self = shift;
    my ($busy, $result);
    unless ($result = $self->writeCmd('FS;')) { return undef; }
    $busy = $self->readResult();
    $busy =~ /FS(\d)\;/;
    my $b = $1;
        if ($b == 0)      {
            return 0;
        } elsif ($b == 1) {
            return 1;
        } else {
            return undef;
        }
}
};

###########################################
#
# Sub setFastStep
#
# Sets the fast step mode
# Send 0 for Off
# Send 1 for ON
# Returns number of chars transmitted or
# undef on error
eval {
sub setFastStep {
    my $self = shift;
    my ($cmd, $result);
    $cmd = shift;
    if ($cmd == 0) {
        unless ($result = $self->writeCmd('FS0;')) { return undef; }
        return $result;
    } elsif ($cmd == 1) {
        unless ($result = $self->writeCmd('FS1;')) { return undef; }
        return $result;
    } else { return undef;}
    
}
};
###########################################
#
# Sub readResult
#
# Returns the result from a command to FT-950
# Remember this only works right after a
# read command.
#

sub readResult {
my $self = shift;
my $STALL_DEFAULT = 10; # how many seconds to wait for new input
my $timeout = $STALL_DEFAULT;
my $timeout_msg = "FT-950 timeout\n";
my $chars=0;
my $buffer="";

 while ($timeout>0) {
        my ($count,$saw)=$port->read(255); # will read _up to_ 255 chars
        if ($count > 0) {
                $chars+=$count;
                $buffer.=$saw;
                if ($saw =~ /;/) {
                    return $buffer;  # ; is end of data for FT-950
                    last;



( run in 1.058 second using v1.01-cache-2.11-cpan-5837b0d9d2c )