The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Uniden::BCL75XLT - module to program Uniden BCL75XLT radio scanner over USB connection

SYNOPSIS

use Uniden::BCL75XLT;
use Data::Dumper;

my $radio = Uniden::BCL75XLT->new('/dev/ttyUSB0') || die "Cannot open radio: $!\n";
  
#  get channels info in bank N1
my $channelsInfo = $radio->getBankChannelsInfo(1);
print Dumper($channelsInfo);
  
undef($radio);

DESCRIPTION

Module implements all command described in UNIDEN BC75XLT Operation Specification (http://info.uniden.com/UnidenMan4/BC75XLT).

Methods

PACKAGE->new(DEVICE_STR, OPTS_HASH)

Creates new Uniden::BLC75XLT object. Where DEVICE_STR is port name and OPTS_HASH is a hash with following keys:

  • baudrate - integer, port speed, default - 57600

  • databits - integer, number of data bits in each character, default - 8

  • parity - string, method of detecting errors in transmission, default - "none"

  • stopbits - integer, stop bits, default - 1

  • handshake - string, handshake method, default - "none"

  • read_cost_time - integer, const time for read (milliseconds), default - 1

  • timeout - integer, reading port timeout in milliseconds, default - 999

  • echo - boolean, if true all data sent to and received from port will be sent to STDERR

  • fatal - boolean, if set to true all errors are supposed as fatal and die will be called on them, otherwise error message invokes print to STDERR and undef will be returned after error

More accurate meaning and possible values of keys baudrate, databits, parity, stopbits, handshake and read_cost_time you can read in Device::SerialPort documentation.

Example:

my $radio = Uniden::BC75XLT->new('/dev/ttyUSB0', echo => 1) || die "Cannot open: $!\n";

OBJ->command(CMD_STR, ARGS_ARRAYREF)

Method send command CMD_STR to radio scanner with arguments ARGS_ARRAYREF. Arguments array may be undefined.

Normally you do not need to use this method 'cause other methods are frontends to this method and cover all described in operation manual commands.

Return values

Method returns hashref with following keys:

  • status - string, OK - if command executed successfuly and ERROR if something was wrong

  • desc - string, if status has value ERROR this key contains description of error occured

  • data - arrayref of strings, if status has value OK this key contains data returned by radio. Arrayref always defined even no data supposed to be returned.

getModelName

Method returns model name.

getFirmwareVersion

Method returns firmware version.

getVolume

Method returns volume level (0-15)

setVolume(VOL_INT)

Method set volume level value (VOL_INT). Reasonable values 0-15.

getSql

Method returns Sql value (0-15)

setSql(SQL_INT)

Method set Sql value (SQL_INT). Reasonable values 0-15.

setProgramMode

The scanner goes to Program Mode (PGM). The scanner displays "PC" and Key lock and PGM icons.

Some command (almost all) must be executed in PGM of scanner. If you use methods of this package you do not need enter to PGM manually. Each method "knows" how to communicate with scanner and if it needs PGM, it will enter to PRG before send command and exit after. So if you want to send sequence of commands you may start PRM manually and exit it after sequence is complite. It may save you some seconds.

quitProgramMode

The scanner exits from Program Mode. Then the scanner goes to Scan Hold Mode.

You need to call this method only if you call setProgramMode before.

getBandPlan

Returns band plan code - 0:USA, 1:Canada.

getBandPlanName

Returns band plan name - USA/CANADA.

setBandPlan(BANDPLAN)

Set band plane. BANDPLAN can be integer - code or string - name.

Example:

$radio->setBandPlan('CANADA');
$radio->setBandPlan(1);

getKeyLockState

Returns key lock state code - 0:OFF, 1:ON.

getKeyLockStateName

Returns key lock state name - OFF/ON.

setKeyLockState(STATE)

Set key lock state. STATE can be integer - code or string - name.

Example:

$radio->setKeyLockState('OFF');
$radio->setKeyLockState(0);

getPriorityMode

Returns priority mode code - 0:OFF, 1:ON, 2:PLUS ON, 3:DND.

getPriorityModeName

Returns priority mode name - OFF/ON/PLUS ON/DND.

setPriorityMode(MODE)

Set priority mode. MODE can be integer - code or string - name.

Example:

$radio->setPriorityMode('DND');
$radio->setPriorityMode(3);

getScanChannelGroup

Get current status of the channel starage bank select.

Returns ARRAYREF of 10 elements. Each element contains ON/OFF string. Every array element describes group with the same index in radio. But index of radio scanner groups starts with 1. So element with index 0 means state of group with index 1.

setScanChannelGroup(GROUP_DATA)

Set current status of the channel starage bank select.

If GROUP_DATA is HASHREF then keys mean to be index of radion scanner group and values are states of group. States can be strings - ON/OFF or integer 1:OFF/0:ON.

If GROUP_DATA is ARRAYREF then every element is state of group with index equals index of element plus 1. States can be strings - ON/OFF or integer 1:OFF/0:ON.

If GROUP_DATA is a string it will be passed as argument to command ASIS.

Example:

# Set group 1,2,3,7,8,9 to ON state in Scan mode
# all three lines are equivalents

$radio->setScanChannelGroup([ 'ON', 'ON', 'ON', 'OFF', 'OFF', 'OFF', 'ON', 'ON', 'ON', 'OFF' ]);
$radio->setScanChannelGroup({  1 => 'ON',  2 => 'ON', 3 => 'ON', 7 => 'ON', 8 => 'ON', 9 => 'ON' });
$radio->setScanChannelGroup('0001110001');

setValidScanChannels(CHANNELS_ARRAYREF)

Set valid radio scanner groups in Scan mode. CHANNELS_ARRAYREF is ARRAYREF of radio scanner group indexes.

Example:

# Set group 1,2,3,7,8,9 to ON state in Scan mode

$radio->setValidScanChannels([1,2,3,7,8,9 ]);

getChannelInfo(N_INT)

Get saved channel information, С<N_INT> is number of channel, integer between 1..300.

Returns HASHREF with keys:

  • state - status of channel: SET or UNSET.

  • index - number of channel

  • freq - saved freqency in human readable form, e.g. 128.0000

  • freq_code - saved frequency as returned by radio scanner, e.g. '01280000'

  • delay - is delay turned on - ON/OFF

  • delay_code - is delay turned on code - 0:OFF/1:ON

  • lockout - lockout - UNLOCKED/LOCKOUT

  • lockout_code - lockout code - 0:UNLOCKED/1:LOCKOUT

  • priority - priority - ON/OFF

  • priority_code - priority code - 0:OFF/1:ON

Return example:

{
  'priority' => 'ON',
  'delay_code' => '1',
  'delay' => 'ON',
  'freq_code' => '00271350',
  'lockout' => 'UNLOCKED',
  'state' => 'SET',
  'index' => '61',
  'lockout_code' => '0',
  'freq' => '27.1350',
  'priority_code' => '1'
};

getChannelsInfo(OPTS_HASH)

Retrieve information about stored channels.

OPTS_HASH has keys:

  • start - number of first channel

  • stop - number of last channels

  • state - status of channels to show. Possible values ON, OFF, 1, 0. If not set all channels will be selected.

Returns ARRAYREF each element is HASHREF with information about channel described in method getChannelInfo.

getBankChannelsInfo(N_INT)

Gets information about channel in a bank. N_INT is number of channels bank, 1..10.

Returns ARRAYREF each element is HASHREF with information about channel described in method getChannelInfo.

setChannelInfo(IDX_INT, DATA_HASHREF)

Store frequency in to channel. IDX_INT - integer, number of channel (1..300).

DATA_HASHREF is HASHREF, information about stored frequency with keys:

  • freq - frequency

  • delay - delay ON/OFF.

  • priority - priotity - ON/OFF.

  • lockout - lockout - UNLOCKED/LOCKOUT.

Example:

$radio->setChannelInfo(61, { freq => '27.135' }); # set channel 
$radio->setChannelInfo(61, { freq => '' }); # unset channel

eraseChannel(IDX_INT)

Erase information stored in channel. IDX_INT = integer, number of channel.

getSearchCloseCallSettings

Get Search Close Call Settings.

Returns HASHREF with keys:

  • direction - search direction: DOWN/UP.

  • direction_code search direction code: 1:DOWN/0:UP.

  • delay - delay: ON/OFF.

  • delay_code - delay code: 1:ON/0:OFF.

setSearchCloseCallSettings(OPTS_HASHREF)

Set Search Close Call Settings.

OPTS_HASHREF is HASHREF with keys:

  • direction - search direction: 0, 1 or 'UP', 'DOWN'.

  • delay - delay: 0, 1 or 'OFF', 'ON'

getGlobalLockoutFreqs

Get list of global lockout frequencies. List returned as an ARRAYREF.

lockGlobalFrequency(FREQ)

Locks out frequency. FREQ is frequency value as string of float or integer.

unlockGlobalFrequency(FREQ)

Unlocks a lockout frequency. FREQ is frequency value as string of float or integer.

getCloseCallSettings

Get close call settings.

Retuns HASHREF with keys:

  • mode - current CC mode: OFF/PRIORITY/DND

  • mode_code - current CC mode code: 0:OFF/1:PRIORITY/2:DND

  • alert_beep - beep alarm when CC is found: ON/OFF

  • alert_beep_code - beep alarm when CC is found code: 1:ON/0:OFF

  • alert_light - alarm with light when CC is found: ON/OFF

  • alert_light_code - alarm with light when CC is found code: 1:ON/0:OFF

  • bands - state of preset bands in Close Call RF mode. There are 4 bands: VHF_LOW, AIR, VHF_HIGH and UHF. They are keys in bands HASHREF, possible values: ON/OFF.

setCloseCallSettings(OPTS_HASHREF)

Set close call settings.

OPTS_HASHREF is HASHREF with keys:

  • mode - Close Call RF mode - 0,1,3 or OFF, PRIORITY, DND

  • alert_beep - alert with beep settings: 0, 1 or OFF, ON

  • alert_light - alert with light settings: 0, 1 or OFF, ON

  • bands - list of available bands in Close Call RF mode. ARRAYREF each element is band name to be set in ON state.

All keys are optional. By default mode is set in DND, all alerts are OFF, all bands are ON.

getServiceSearchSettings(BAND)

Returns information about Service Search settings. BAND_INT is number or name of one of 10 Service frequences ranges.

Ranges: 1:WX -Weather, 2:POLICE - Police, 3:FIRE - Fire/Emergency, 4:MARINE - Marine, 5:RACE - Racing, 6:AIR - Civil Air, 7:HAM - HAM Radio, 8:RAIL - Railroad, 9:CB - CB Radio, 10:OTHER - FRS/GMRS/MRUS.

Return value is HASHREF with keys:

  • index - index of freq range (1..10)

  • band - name for freq range

  • delay - delay: ON/OFF.

  • delay_code - delay code: 1:ON/0:OFF.

  • direction - direction of search: UP/DOWN.

  • direction_code - direction of search code: 0:UP/1:DOWN.

setServiceSearchSettings(BAND, DLY, DIR)

Set Service search freq range settings. BAND index or name of search range. DLY - delay code or name - 1:ON/0:OFF. DIR - direction of search - 0:UP/1:DOWN.

getCustomSearchGroup

Returns state of custom seach frequencies groups and Custom Search settings. Return value is HAHREF with keys:

  • group - ARRAYREF of 10 elements. Each element contains ON/OFF string. Every array element describes group with the same index in radio. But index of radio scanner groups starts with 1. So element with index 0 means state of group with index 1.

  • delay - delay: ON/OFF.

  • delay_code - delay code: 1:ON/0:OFF.

  • direction - direction of search: UP/DOWN.

  • direction_code - direction of search code: 0:UP/1:DOWN.

setCustomSearchGroup(GROUPS, DLY, DIR)

Set state of frequences groups in Custom Search mode.

GROUPS - HASHREF or ARRAYREF - describes states of freq group. If you use ARRAYREF you should set 10 elements array every element must contain string ON or OFF. In HASHREF representation keys are index of groups, values are state. If group state was not set in HASH its state would be set to OFF.

DLY - delay code or name - 1:ON/0:OFF.

DIR - direction of search - 0:UP/1:DOWN.

getCustomSearchRange(RANGE_INT)

Radio scanner has 10 Custom Search frequency ranges. This method retrive left and right bound of range.

RANGE_INT - integer, index of range.

Return value are ARRAYREF of 2 elements. First is left bound, second right.

getAllCustomSearchRanges

Returns all ten ranges bounds as ARRAYREF every element contains two elements ARRAYREF where first element is left bound and second right.

setCustomSearchRange(RANGE_INT, LEFT, RIGHT)

Set bounds of frequency range.

RANGE_INT - index of range. 1..10

LEFT - frequency value - left bound of range

RIGHT - frequency value - right bound of range

Example:

$radio->setCustomSearchRange(3, '144.0000', '147.9950');
$radio->setCustomSearchRange(3, 144, 147.995);

clearMemory

Clear all radio memory.

SEE ALSO

Device::SerialPort

1 POD Error

The following errors were encountered while parsing the POD:

Around line 256:

Non-ASCII character seen before =encoding in 'С<N_INT>'. Assuming CP1252