mirror of
https://github.com/kk7ds/chirp.git
synced 2024-09-21 02:27:21 +00:00
Fix spelling
Fixed with: codespell --skip=locale,./chirp/ui/fips.py --ignore-words-list=ans,parm,parms,rcall,sav,ser,setts,wth --summary --write-changes --interactive=2
This commit is contained in:
parent
2cc1e7c253
commit
d40963b3ed
@ -16,7 +16,7 @@ that you want unchanged.
|
|||||||
Cookbook
|
Cookbook
|
||||||
========
|
========
|
||||||
|
|
||||||
This section provides copy-and-paste recipies for accomplishing some
|
This section provides copy-and-paste recipes for accomplishing some
|
||||||
tasks using the CLI.
|
tasks using the CLI.
|
||||||
|
|
||||||
|
|
||||||
|
@ -690,7 +690,7 @@ class AlincoDJG7EG(AlincoStyleRadio):
|
|||||||
if self._identify():
|
if self._identify():
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
# Apparenly Alinco support suggests to try again at a lower baud
|
# Apparently Alinco support suggests to try again at a lower baud
|
||||||
# rate if their cable fails with the default rate. See #4355.
|
# rate if their cable fails with the default rate. See #4355.
|
||||||
LOG.info("Could not talk to radio. Trying again at 19200 baud")
|
LOG.info("Could not talk to radio. Trying again at 19200 baud")
|
||||||
self.pipe.baudrate = 19200
|
self.pipe.baudrate = 19200
|
||||||
|
@ -391,7 +391,7 @@ struct {
|
|||||||
// // shown as range(0, 2000, 100) msec
|
// // shown as range(0, 2000, 100) msec
|
||||||
// u8 auto_rst_time; // Auto reset time * 10
|
// u8 auto_rst_time; // Auto reset time * 10
|
||||||
// // shown as range(0, 25, 0.1) sec
|
// // shown as range(0, 25, 0.1) sec
|
||||||
// u8 unkonwn:7,
|
// u8 unknown:7,
|
||||||
// enc_sidetone; // Encode side-tone 0=off 1=on
|
// enc_sidetone; // Encode side-tone 0=off 1=on
|
||||||
// u8 unknown2:4,
|
// u8 unknown2:4,
|
||||||
// call_format:4; // Call format [A-B, A-C, A-D, B-A, B-C, B-D,
|
// call_format:4; // Call format [A-B, A-C, A-D, B-A, B-C, B-D,
|
||||||
|
@ -310,7 +310,7 @@ def _split(rf, f1, f2):
|
|||||||
|
|
||||||
class BaofengCommonHT(chirp_common.CloneModeRadio,
|
class BaofengCommonHT(chirp_common.CloneModeRadio,
|
||||||
chirp_common.ExperimentalRadio):
|
chirp_common.ExperimentalRadio):
|
||||||
"""Baofeng HT Sytle Radios"""
|
"""Baofeng HT Style Radios"""
|
||||||
VENDOR = "Baofeng"
|
VENDOR = "Baofeng"
|
||||||
MODEL = ""
|
MODEL = ""
|
||||||
IDENT = ""
|
IDENT = ""
|
||||||
|
@ -39,7 +39,7 @@ import logging
|
|||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
# A note about the memmory in these radios
|
# A note about the memory in these radios
|
||||||
#
|
#
|
||||||
# The '9100' OEM software only manipulates the lower 0x0180 bytes on read/write
|
# The '9100' OEM software only manipulates the lower 0x0180 bytes on read/write
|
||||||
# operations as we know, the file generated by the OEM software IS NOT an exact
|
# operations as we know, the file generated by the OEM software IS NOT an exact
|
||||||
@ -690,7 +690,7 @@ class BFT1(chirp_common.CloneModeRadio, chirp_common.ExperimentalRadio):
|
|||||||
# get the eprom representation of this channel
|
# get the eprom representation of this channel
|
||||||
_mem = self._get_special(mem.number)
|
_mem = self._get_special(mem.number)
|
||||||
|
|
||||||
# if empty memmory
|
# if empty memory
|
||||||
if mem.empty:
|
if mem.empty:
|
||||||
# the channel itself
|
# the channel itself
|
||||||
_mem.set_raw("\xFF" * 16)
|
_mem.set_raw("\xFF" * 16)
|
||||||
|
@ -612,7 +612,7 @@ class BFT8Radio(chirp_common.CloneModeRadio):
|
|||||||
if self.HAS_NAMES:
|
if self.HAS_NAMES:
|
||||||
_nam = self._set_nam(mem.number)
|
_nam = self._set_nam(mem.number)
|
||||||
|
|
||||||
# if empty memmory
|
# if empty memory
|
||||||
if mem.empty:
|
if mem.empty:
|
||||||
if mem.number <= 22 and self._frs:
|
if mem.number <= 22 and self._frs:
|
||||||
_mem.set_raw("\xFF" * 8 + "\x00" * 5 + "\xFF" * 3)
|
_mem.set_raw("\xFF" * 8 + "\x00" * 5 + "\xFF" * 3)
|
||||||
|
@ -63,7 +63,7 @@ class BJ9900Radio(chirp_common.CloneModeRadio,
|
|||||||
# plus an empty line at the end
|
# plus an empty line at the end
|
||||||
_datsize = (_memsize * 2) / 96 * 98 + 2
|
_datsize = (_memsize * 2) / 96 * 98 + 2
|
||||||
|
|
||||||
# block are read in same order as original sw eventhough they are not
|
# block are read in same order as original sw even though they are not
|
||||||
# in physical order
|
# in physical order
|
||||||
_blocks = [
|
_blocks = [
|
||||||
(0x400, 0x1BFF, 0x30),
|
(0x400, 0x1BFF, 0x30),
|
||||||
|
@ -322,7 +322,7 @@ class BoblovX3Plus(chirp_common.CloneModeRadio,
|
|||||||
if memory.duplex == 'off':
|
if memory.duplex == 'off':
|
||||||
for i in range(0, 4):
|
for i in range(0, 4):
|
||||||
rmem.txfreq[i].set_raw('\xFF')
|
rmem.txfreq[i].set_raw('\xFF')
|
||||||
# If recieve only then txtone value should be none
|
# If receive only then txtone value should be none
|
||||||
self._encode_tone(rmem.txtone, mode='', value=None, pol=None)
|
self._encode_tone(rmem.txtone, mode='', value=None, pol=None)
|
||||||
set_txtone = False
|
set_txtone = False
|
||||||
elif memory.duplex == 'split':
|
elif memory.duplex == 'split':
|
||||||
|
@ -30,7 +30,7 @@ from textwrap import dedent
|
|||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
# A note about the memmory in these radios
|
# A note about the memory in these radios
|
||||||
#
|
#
|
||||||
# The real memory of these radios extends to 0x4000
|
# The real memory of these radios extends to 0x4000
|
||||||
# On read the factory software only uses up to 0x3200
|
# On read the factory software only uses up to 0x3200
|
||||||
@ -63,7 +63,7 @@ LIST_COLOR4 = ["Off", "Blue", "Orange", "Purple"]
|
|||||||
LIST_COLOR8 = ["White", "Red", "Blue", "Green", "Yellow", "Indigo",
|
LIST_COLOR8 = ["White", "Red", "Blue", "Green", "Yellow", "Indigo",
|
||||||
"Purple", "Gray"]
|
"Purple", "Gray"]
|
||||||
LIST_COLOR9 = ["Black"] + LIST_COLOR8
|
LIST_COLOR9 = ["Black"] + LIST_COLOR8
|
||||||
LIST_DTMFST = ["OFF", "Keyboard", "ANI", "Keyboad + ANI"]
|
LIST_DTMFST = ["OFF", "Keyboard", "ANI", "Keyboard + ANI"]
|
||||||
LIST_EMCTP = ["TX alarm sound", "TX ANI", "Both"]
|
LIST_EMCTP = ["TX alarm sound", "TX ANI", "Both"]
|
||||||
LIST_EMCTPX = ["Off"] + LIST_EMCTP
|
LIST_EMCTPX = ["Off"] + LIST_EMCTP
|
||||||
LIST_LANGUA = ["English", "Chinese"]
|
LIST_LANGUA = ["English", "Chinese"]
|
||||||
@ -429,7 +429,7 @@ def _do_ident(radio, status, upload=False):
|
|||||||
radio.pipe.baudrate = 9600
|
radio.pipe.baudrate = 9600
|
||||||
radio.pipe.parity = "N"
|
radio.pipe.parity = "N"
|
||||||
|
|
||||||
# lengthen the timeout here as these radios are reseting due to timeout
|
# lengthen the timeout here as these radios are resetting due to timeout
|
||||||
radio.pipe.timeout = 0.75
|
radio.pipe.timeout = 0.75
|
||||||
|
|
||||||
# send the magic word
|
# send the magic word
|
||||||
@ -553,7 +553,7 @@ def _upload(radio):
|
|||||||
"""Upload procedure"""
|
"""Upload procedure"""
|
||||||
|
|
||||||
# The UPLOAD mem is restricted to lower than 0x3100,
|
# The UPLOAD mem is restricted to lower than 0x3100,
|
||||||
# so we will overide that here localy
|
# so we will override that here localy
|
||||||
MEM_SIZE = radio.UPLOAD_MEM_SIZE
|
MEM_SIZE = radio.UPLOAD_MEM_SIZE
|
||||||
|
|
||||||
# UI progress
|
# UI progress
|
||||||
@ -933,7 +933,7 @@ class BTechMobileCommon(chirp_common.CloneModeRadio,
|
|||||||
LOG.debug("This mem was empty before")
|
LOG.debug("This mem was empty before")
|
||||||
mem_was_empty = True
|
mem_was_empty = True
|
||||||
|
|
||||||
# if empty memmory
|
# if empty memory
|
||||||
if mem.empty:
|
if mem.empty:
|
||||||
# the channel itself
|
# the channel itself
|
||||||
_mem.set_raw("\xFF" * 16)
|
_mem.set_raw("\xFF" * 16)
|
||||||
@ -1027,7 +1027,7 @@ class BTechMobileCommon(chirp_common.CloneModeRadio,
|
|||||||
# scan add property
|
# scan add property
|
||||||
_mem.add = SKIP_VALUES.index(mem.skip)
|
_mem.add = SKIP_VALUES.index(mem.skip)
|
||||||
|
|
||||||
# reseting unknowns, this have to be set by hand
|
# resetting unknowns, this have to be set by hand
|
||||||
_mem.unknown0 = 0
|
_mem.unknown0 = 0
|
||||||
_mem.unknown1 = 0
|
_mem.unknown1 = 0
|
||||||
_mem.unknown2 = 0
|
_mem.unknown2 = 0
|
||||||
@ -2912,7 +2912,7 @@ class BTechMobileCommon(chirp_common.CloneModeRadio,
|
|||||||
ext_length = _mem._5tone_settings._5tone_first_digit_ext_length
|
ext_length = _mem._5tone_settings._5tone_first_digit_ext_length
|
||||||
if ext_length == 255:
|
if ext_length == 255:
|
||||||
ext_length = 0
|
ext_length = 0
|
||||||
LOG.debug("1st Tone ext lenght unconfigured! Resetting to 0")
|
LOG.debug("1st Tone ext length unconfigured! Resetting to 0")
|
||||||
|
|
||||||
if ext_length <= len(LIST_5TONE_DELAY):
|
if ext_length <= len(LIST_5TONE_DELAY):
|
||||||
list = RadioSettingValueList(
|
list = RadioSettingValueList(
|
||||||
|
@ -221,7 +221,7 @@ def do_program(radio):
|
|||||||
#
|
#
|
||||||
# Even FDX-288 software appears to match the model by any other
|
# Even FDX-288 software appears to match the model by any other
|
||||||
# mean, so I detected on a few images that the 3 first bytes are
|
# mean, so I detected on a few images that the 3 first bytes are
|
||||||
# unique to each radio model, so for now we use that method untill
|
# unique to each radio model, so for now we use that method until
|
||||||
# proven otherwise
|
# proven otherwise
|
||||||
# ###################################################################
|
# ###################################################################
|
||||||
|
|
||||||
@ -353,7 +353,7 @@ class FeidaxinFD2x8yRadio(chirp_common.CloneModeRadio):
|
|||||||
"DTCS->Tone",
|
"DTCS->Tone",
|
||||||
"->Tone",
|
"->Tone",
|
||||||
"DTCS->DTCS"]
|
"DTCS->DTCS"]
|
||||||
# Power levels are golbal and no per channel, so disabled
|
# Power levels are global and no per channel, so disabled
|
||||||
# rf.valid_power_levels = POWER_LEVELS
|
# rf.valid_power_levels = POWER_LEVELS
|
||||||
# this radio has no skips
|
# this radio has no skips
|
||||||
rf.valid_skips = []
|
rf.valid_skips = []
|
||||||
@ -589,7 +589,7 @@ class FeidaxinFD2x8yRadio(chirp_common.CloneModeRadio):
|
|||||||
else:
|
else:
|
||||||
vfo = int(_mem.vfo.vrx_freq) * 10
|
vfo = int(_mem.vfo.vrx_freq) * 10
|
||||||
|
|
||||||
# frecuency apply_callback
|
# frequency apply_callback
|
||||||
def apply_freq(setting, obj):
|
def apply_freq(setting, obj):
|
||||||
"""Setting is the UI returned value, obj is the memmap object"""
|
"""Setting is the UI returned value, obj is the memmap object"""
|
||||||
value = chirp_common.parse_freq(str(setting.value))
|
value = chirp_common.parse_freq(str(setting.value))
|
||||||
@ -842,7 +842,7 @@ class FD268BRadio(FeidaxinFD2x8yRadio):
|
|||||||
# #####################################################################
|
# #####################################################################
|
||||||
# FD-288 Family: the only difference from this family to the FD-268's
|
# FD-288 Family: the only difference from this family to the FD-268's
|
||||||
# are the ANI settings
|
# are the ANI settings
|
||||||
# Tested hacking the FD-268A memmory
|
# Tested hacking the FD-268A memory
|
||||||
|
|
||||||
|
|
||||||
@directory.register
|
@directory.register
|
||||||
@ -864,7 +864,7 @@ class FD288BRadio(FeidaxinFD2x8yRadio):
|
|||||||
|
|
||||||
|
|
||||||
# #####################################################################
|
# #####################################################################
|
||||||
# The following radios was tested hacking the FD-268A memmory with
|
# The following radios was tested hacking the FD-268A memory with
|
||||||
# the software and found to be clones of FD-268 ones
|
# the software and found to be clones of FD-268 ones
|
||||||
# please report any problems to driver author (see head of this file)
|
# please report any problems to driver author (see head of this file)
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
# FT-1500M Clone Proceedure
|
# FT-1500M Clone Procedure
|
||||||
# 1. Turn radio off.
|
# 1. Turn radio off.
|
||||||
# 2. Connect cable to mic jack.
|
# 2. Connect cable to mic jack.
|
||||||
# 3. Press and hold in the [MHz],[LOW] and [D/MR] keys
|
# 3. Press and hold in the [MHz],[LOW] and [D/MR] keys
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
# FT-1802 Clone Proceedure
|
# FT-1802 Clone Procedure
|
||||||
# 1. Turn radio off.
|
# 1. Turn radio off.
|
||||||
# 2. Connect cable to mic jack.
|
# 2. Connect cable to mic jack.
|
||||||
# 3. Press and hold in the [LOW(A/N)] key while turning the radio on.
|
# 3. Press and hold in the [LOW(A/N)] key while turning the radio on.
|
||||||
|
@ -338,7 +338,7 @@ struct {
|
|||||||
char dst_callsign[9];
|
char dst_callsign[9];
|
||||||
char path[30];
|
char path[30];
|
||||||
u16 flags;
|
u16 flags;
|
||||||
u8 seperator;
|
u8 separator;
|
||||||
char body[%d];
|
char body[%d];
|
||||||
} aprs_beacon_pkt[%d];
|
} aprs_beacon_pkt[%d];
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ class FT2800Radio(YaesuCloneModeRadio):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if _mem.get_raw()[0] == "\xFF":
|
if _mem.get_raw()[0] == "\xFF":
|
||||||
# Emtpy -> Non-empty, so initialize
|
# Empty -> Non-empty, so initialize
|
||||||
_mem.set_raw("\x00" * (_mem.size() / 8))
|
_mem.set_raw("\x00" * (_mem.size() / 8))
|
||||||
|
|
||||||
_mem.freq = mem.freq / 10
|
_mem.freq = mem.freq / 10
|
||||||
|
@ -152,7 +152,7 @@ class FT2D(ft1d.FT1Radio):
|
|||||||
|
|
||||||
@directory.register
|
@directory.register
|
||||||
class FT2Dv2(FT2D):
|
class FT2Dv2(FT2D):
|
||||||
"""Yaesu FT-2D v2 firwmare"""
|
"""Yaesu FT-2D v2 firmware"""
|
||||||
VARIANT = "Rv2"
|
VARIANT = "Rv2"
|
||||||
|
|
||||||
_model = "AH60G"
|
_model = "AH60G"
|
||||||
|
@ -571,7 +571,7 @@ CHARSET = CW_ID_CHARS + "abcdefghijklmnopqrstuvwxyz*+-/@"
|
|||||||
PMSNAMES = ["%s%02d" % (c, i) for i in range(1, 11) for c in ('L', 'U')]
|
PMSNAMES = ["%s%02d" % (c, i) for i in range(1, 11) for c in ('L', 'U')]
|
||||||
|
|
||||||
# Four separate arrays of special channel mems.
|
# Four separate arrays of special channel mems.
|
||||||
# Each special has unique constrants: band, name yes/no, and pms L/U
|
# Each special has unique constraints: band, name yes/no, and pms L/U
|
||||||
# The FT-65 class replaces the "prog" entry in this list.
|
# The FT-65 class replaces the "prog" entry in this list.
|
||||||
# The name field must be the name of a slot array in MEM_FORMAT
|
# The name field must be the name of a slot array in MEM_FORMAT
|
||||||
SPECIALS_FT4 = [
|
SPECIALS_FT4 = [
|
||||||
@ -735,8 +735,8 @@ class YaesuSC35GenericRadio(chirp_common.CloneModeRadio,
|
|||||||
# callback for setting byte arrays: DTMF[0-9], passwd, and CW_ID
|
# callback for setting byte arrays: DTMF[0-9], passwd, and CW_ID
|
||||||
def apply_str_to_bytearray(self, element, obj):
|
def apply_str_to_bytearray(self, element, obj):
|
||||||
lng = len(obj)
|
lng = len(obj)
|
||||||
strng = (element.value.get_value() + " ")[:lng]
|
string = (element.value.get_value() + " ")[:lng]
|
||||||
bytes = bytearray(strng, "ascii")
|
bytes = bytearray(string, "ascii")
|
||||||
for x in range(0, lng): # memobj cannot iterate, so byte-by-byte
|
for x in range(0, lng): # memobj cannot iterate, so byte-by-byte
|
||||||
obj[x] = bytes[x]
|
obj[x] = bytes[x]
|
||||||
return
|
return
|
||||||
|
@ -289,7 +289,7 @@ class FT450DRadio(yaesu_clone.YaesuCloneModeRadio):
|
|||||||
|
|
||||||
#seekto 0x3C3;
|
#seekto 0x3C3;
|
||||||
struct mem_struct memory[500];
|
struct mem_struct memory[500];
|
||||||
struct mem_struct pms[4]; // Programed Scan limits @ x387F
|
struct mem_struct pms[4]; // Programmed Scan limits @ x387F
|
||||||
|
|
||||||
#seekto 0x3906;
|
#seekto 0x3906;
|
||||||
struct {
|
struct {
|
||||||
@ -378,7 +378,7 @@ class FT450DRadio(yaesu_clone.YaesuCloneModeRadio):
|
|||||||
50m HOME memories and all the A and B VFO memories.
|
50m HOME memories and all the A and B VFO memories.
|
||||||
There are VFO memories for the last frequency dialed in
|
There are VFO memories for the last frequency dialed in
|
||||||
each band. The last mem-tune config is also stored.
|
each band. The last mem-tune config is also stored.
|
||||||
These Special Channels allow limited field editting.
|
These Special Channels allow limited field editing.
|
||||||
This driver also populates the 'Other' tab in the channel
|
This driver also populates the 'Other' tab in the channel
|
||||||
memory Properties window. This tab contains values for
|
memory Properties window. This tab contains values for
|
||||||
those channel memory settings that don't fall under the
|
those channel memory settings that don't fall under the
|
||||||
@ -554,7 +554,7 @@ class FT450DRadio(yaesu_clone.YaesuCloneModeRadio):
|
|||||||
if isinstance(number, str):
|
if isinstance(number, str):
|
||||||
return self._get_special(number)
|
return self._get_special(number)
|
||||||
elif number < 0:
|
elif number < 0:
|
||||||
# I can't stop delete operation from loosing extd_number but
|
# I can't stop delete operation from losing extd_number but
|
||||||
# I know how to get it back
|
# I know how to get it back
|
||||||
return self._get_special(self.SPECIAL_MEMORIES_REV[number])
|
return self._get_special(self.SPECIAL_MEMORIES_REV[number])
|
||||||
else:
|
else:
|
||||||
@ -921,7 +921,7 @@ class FT450DRadio(yaesu_clone.YaesuCloneModeRadio):
|
|||||||
|
|
||||||
for setting in mem.extra:
|
for setting in mem.extra:
|
||||||
if setting.get_name() == "notch_pos":
|
if setting.get_name() == "notch_pos":
|
||||||
vx = 0 # Overide list string with signed value
|
vx = 0 # Override list string with signed value
|
||||||
stx = str(setting.value)
|
stx = str(setting.value)
|
||||||
if stx == "<-":
|
if stx == "<-":
|
||||||
vx = -13
|
vx = -13
|
||||||
|
@ -162,7 +162,7 @@ TONES = list(chirp_common.OLD_TONES)
|
|||||||
# the = displays as an underscored dash on radio
|
# the = displays as an underscored dash on radio
|
||||||
# the first ? is an uppercase delta - \xA7
|
# the first ? is an uppercase delta - \xA7
|
||||||
# the second ? is an uppercase gamma - \xD1
|
# the second ? is an uppercase gamma - \xD1
|
||||||
# the thrid ? is an uppercase sigma - \xCF
|
# the third ? is an uppercase sigma - \xCF
|
||||||
NUMERIC_CHARSET = list("0123456789")
|
NUMERIC_CHARSET = list("0123456789")
|
||||||
CHARSET = [str(x) for x in range(0, 10)] + \
|
CHARSET = [str(x) for x in range(0, 10)] + \
|
||||||
[chr(x) for x in range(ord("A"), ord("Z")+1)] + \
|
[chr(x) for x in range(ord("A"), ord("Z")+1)] + \
|
||||||
@ -218,7 +218,7 @@ class FT50Radio(yaesu_clone.YaesuCloneModeRadio):
|
|||||||
rf.valid_characters = "".join(CHARSET)
|
rf.valid_characters = "".join(CHARSET)
|
||||||
rf.valid_name_length = 4
|
rf.valid_name_length = 4
|
||||||
rf.valid_modes = MODES
|
rf.valid_modes = MODES
|
||||||
# Specials not yet implementd
|
# Specials not yet implemented
|
||||||
# rf.valid_special_chans = SPECIALS
|
# rf.valid_special_chans = SPECIALS
|
||||||
rf.valid_bands = [(76000000, 200000000),
|
rf.valid_bands = [(76000000, 200000000),
|
||||||
(300000000, 540000000),
|
(300000000, 540000000),
|
||||||
|
@ -627,7 +627,7 @@ class FT60Radio(yaesu_clone.YaesuCloneModeRadio):
|
|||||||
# RXSAVE
|
# RXSAVE
|
||||||
opts = ["OFF", "200 MS", "300 MS", "500 MS", "1 S", "2 S"]
|
opts = ["OFF", "200 MS", "300 MS", "500 MS", "1 S", "2 S"]
|
||||||
power.append(RadioSetting(
|
power.append(RadioSetting(
|
||||||
"rxsave", "Receive Mode Batery Savery Interval",
|
"rxsave", "Receive Mode Battery Savery Interval",
|
||||||
RadioSettingValueList(opts, opts[_settings.rxsave])))
|
RadioSettingValueList(opts, opts[_settings.rxsave])))
|
||||||
|
|
||||||
# S.SRCH
|
# S.SRCH
|
||||||
|
@ -332,7 +332,7 @@ MEM_FORMAT = """
|
|||||||
pskip:1, // PSkip (Select?)
|
pskip:1, // PSkip (Select?)
|
||||||
skip:1, // Skip memory during scan
|
skip:1, // Skip memory during scan
|
||||||
used:1, // Memory used
|
used:1, // Memory used
|
||||||
valid:1; // Aways 1?
|
valid:1; // Always 1?
|
||||||
} flag[%d];
|
} flag[%d];
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -479,7 +479,7 @@ class FT817Radio(yaesu_clone.YaesuCloneModeRadio):
|
|||||||
if isinstance(number, str):
|
if isinstance(number, str):
|
||||||
return self._get_special(number)
|
return self._get_special(number)
|
||||||
elif number < 0:
|
elif number < 0:
|
||||||
# I can't stop delete operation from loosing extd_number but
|
# I can't stop delete operation from losing extd_number but
|
||||||
# I know how to get it back
|
# I know how to get it back
|
||||||
return self._get_special(self.SPECIAL_MEMORIES_REV[number])
|
return self._get_special(self.SPECIAL_MEMORIES_REV[number])
|
||||||
else:
|
else:
|
||||||
@ -774,7 +774,7 @@ class FT817Radio(yaesu_clone.YaesuCloneModeRadio):
|
|||||||
rs = RadioSetting("ars_430", "430 ARS",
|
rs = RadioSetting("ars_430", "430 ARS",
|
||||||
RadioSettingValueBoolean(_settings.ars_430))
|
RadioSettingValueBoolean(_settings.ars_430))
|
||||||
basic.append(rs)
|
basic.append(rs)
|
||||||
rs = RadioSetting("pkt9600_mic", "Paket 9600 mic level",
|
rs = RadioSetting("pkt9600_mic", "Packet 9600 mic level",
|
||||||
RadioSettingValueInteger(0, 100,
|
RadioSettingValueInteger(0, 100,
|
||||||
_settings.pkt9600_mic))
|
_settings.pkt9600_mic))
|
||||||
packet.append(rs)
|
packet.append(rs)
|
||||||
@ -1119,7 +1119,7 @@ class FT817NDRadio(FT817Radio):
|
|||||||
class FT817NDUSRadio(FT817Radio):
|
class FT817NDUSRadio(FT817Radio):
|
||||||
|
|
||||||
"""Yaesu FT-817ND (US version)"""
|
"""Yaesu FT-817ND (US version)"""
|
||||||
# seems that radios configured for 5MHz operations send one paket
|
# seems that radios configured for 5MHz operations send one packet
|
||||||
# more than others so we have to distinguish sub models
|
# more than others so we have to distinguish sub models
|
||||||
MODEL = "FT-817ND (US)"
|
MODEL = "FT-817ND (US)"
|
||||||
|
|
||||||
@ -1185,7 +1185,7 @@ class FT817NDUSRadio(FT817Radio):
|
|||||||
return self._get_special_60m(number)
|
return self._get_special_60m(number)
|
||||||
elif number < 0 and \
|
elif number < 0 and \
|
||||||
self.SPECIAL_MEMORIES_REV[number] in self.SPECIAL_60M.keys():
|
self.SPECIAL_MEMORIES_REV[number] in self.SPECIAL_60M.keys():
|
||||||
# I can't stop delete operation from loosing extd_number but
|
# I can't stop delete operation from losing extd_number but
|
||||||
# I know how to get it back
|
# I know how to get it back
|
||||||
return self._get_special_60m(self.SPECIAL_MEMORIES_REV[number])
|
return self._get_special_60m(self.SPECIAL_MEMORIES_REV[number])
|
||||||
else:
|
else:
|
||||||
|
@ -320,7 +320,7 @@ class FT818NDUSRadio(FT818Radio):
|
|||||||
return self._get_special_60m(number)
|
return self._get_special_60m(number)
|
||||||
elif number < 0 and \
|
elif number < 0 and \
|
||||||
self.SPECIAL_MEMORIES_REV[number] in self.SPECIAL_60M.keys():
|
self.SPECIAL_MEMORIES_REV[number] in self.SPECIAL_60M.keys():
|
||||||
# I can't stop delete operation from loosing extd_number but
|
# I can't stop delete operation from losing extd_number but
|
||||||
# I know how to get it back
|
# I know how to get it back
|
||||||
return self._get_special_60m(self.SPECIAL_MEMORIES_REV[number])
|
return self._get_special_60m(self.SPECIAL_MEMORIES_REV[number])
|
||||||
else:
|
else:
|
||||||
|
@ -483,7 +483,7 @@ class FT857Radio(ft817.FT817Radio):
|
|||||||
elif mem.tmode == "TSQL":
|
elif mem.tmode == "TSQL":
|
||||||
mem.rtone = mem.ctone = chirp_common.TONES[_mem.tone]
|
mem.rtone = mem.ctone = chirp_common.TONES[_mem.tone]
|
||||||
elif mem.tmode == "DTCS Enc": # UI does not support it yet but
|
elif mem.tmode == "DTCS Enc": # UI does not support it yet but
|
||||||
# this code has alreay been tested
|
# this code has already been tested
|
||||||
mem.dtcs = mem.rx_dtcs = chirp_common.DTCS_CODES[_mem.dcs]
|
mem.dtcs = mem.rx_dtcs = chirp_common.DTCS_CODES[_mem.dcs]
|
||||||
elif mem.tmode == "DTCS":
|
elif mem.tmode == "DTCS":
|
||||||
mem.dtcs = mem.rx_dtcs = chirp_common.DTCS_CODES[_mem.dcs]
|
mem.dtcs = mem.rx_dtcs = chirp_common.DTCS_CODES[_mem.dcs]
|
||||||
@ -510,7 +510,7 @@ class FT857Radio(ft817.FT817Radio):
|
|||||||
elif mem.tmode == "TSQL":
|
elif mem.tmode == "TSQL":
|
||||||
_mem.tone = _mem.rxtone = chirp_common.TONES.index(mem.ctone)
|
_mem.tone = _mem.rxtone = chirp_common.TONES.index(mem.ctone)
|
||||||
elif mem.tmode == "DTCS Enc": # UI does not support it yet but
|
elif mem.tmode == "DTCS Enc": # UI does not support it yet but
|
||||||
# this code has alreay been tested
|
# this code has already been tested
|
||||||
_mem.dcs = _mem.rxdcs = chirp_common.DTCS_CODES.index(mem.dtcs)
|
_mem.dcs = _mem.rxdcs = chirp_common.DTCS_CODES.index(mem.dtcs)
|
||||||
elif mem.tmode == "DTCS":
|
elif mem.tmode == "DTCS":
|
||||||
_mem.dcs = _mem.rxdcs = chirp_common.DTCS_CODES.index(mem.rx_dtcs)
|
_mem.dcs = _mem.rxdcs = chirp_common.DTCS_CODES.index(mem.rx_dtcs)
|
||||||
@ -1108,7 +1108,7 @@ class FT857Radio(ft817.FT817Radio):
|
|||||||
@directory.register
|
@directory.register
|
||||||
class FT857USRadio(FT857Radio):
|
class FT857USRadio(FT857Radio):
|
||||||
"""Yaesu FT857/897 (US version)"""
|
"""Yaesu FT857/897 (US version)"""
|
||||||
# seems that radios configured for 5MHz operations send one paket more
|
# seems that radios configured for 5MHz operations send one packet more
|
||||||
# than others so we have to distinguish sub models
|
# than others so we have to distinguish sub models
|
||||||
MODEL = "FT-857/897 (US)"
|
MODEL = "FT-857/897 (US)"
|
||||||
|
|
||||||
@ -1178,7 +1178,7 @@ class FT857USRadio(FT857Radio):
|
|||||||
return self._get_special_60m(number)
|
return self._get_special_60m(number)
|
||||||
elif number < 0 and \
|
elif number < 0 and \
|
||||||
self.SPECIAL_MEMORIES_REV[number] in self.SPECIAL_60M.keys():
|
self.SPECIAL_MEMORIES_REV[number] in self.SPECIAL_60M.keys():
|
||||||
# I can't stop delete operation from loosing extd_number but
|
# I can't stop delete operation from losing extd_number but
|
||||||
# I know how to get it back
|
# I know how to get it back
|
||||||
return self._get_special_60m(self.SPECIAL_MEMORIES_REV[number])
|
return self._get_special_60m(self.SPECIAL_MEMORIES_REV[number])
|
||||||
else:
|
else:
|
||||||
|
@ -67,7 +67,7 @@ u8 pch2; // Priority channel 1
|
|||||||
|
|
||||||
#seekto 0x010;
|
#seekto 0x010;
|
||||||
struct {
|
struct {
|
||||||
u8 notx:1, // 0 = Tx posible, 1 = Tx disabled
|
u8 notx:1, // 0 = Tx possible, 1 = Tx disabled
|
||||||
empty:1, // 0 = channel enabled, 1 = channed empty
|
empty:1, // 0 = channel enabled, 1 = channed empty
|
||||||
tot:1, // 0 = tot disabled, 1 = tot enabled
|
tot:1, // 0 = tot disabled, 1 = tot enabled
|
||||||
power:1, // 0 = high, 1 = low
|
power:1, // 0 = high, 1 = low
|
||||||
@ -514,7 +514,7 @@ class ftlx011(chirp_common.CloneModeRadio, chirp_common.ExperimentalRadio):
|
|||||||
|
|
||||||
# this radio has a primitive mode to show the channel number on a 7-segment
|
# this radio has a primitive mode to show the channel number on a 7-segment
|
||||||
# two digit LCD, we will use channel number
|
# two digit LCD, we will use channel number
|
||||||
# we will use a trick to show the numbers < 10 wit a space not a zero in front
|
# we will use a trick to show the numbers < 10 with a space not a zero in front
|
||||||
chname = int_to_bcd(mem.number)
|
chname = int_to_bcd(mem.number)
|
||||||
if mem.number < 10:
|
if mem.number < 10:
|
||||||
# convert to F# as BCD
|
# convert to F# as BCD
|
||||||
@ -598,7 +598,7 @@ class ftlx011(chirp_common.CloneModeRadio, chirp_common.ExperimentalRadio):
|
|||||||
|
|
||||||
# this radio has a primitive mode to show the channel number on a 7-segment
|
# this radio has a primitive mode to show the channel number on a 7-segment
|
||||||
# two digit LCD, we will use channel number
|
# two digit LCD, we will use channel number
|
||||||
# we will use a trick to show the numbers < 10 wit a space not a zero in front
|
# we will use a trick to show the numbers < 10 with a space not a zero in front
|
||||||
chname = int_to_bcd(mem.number)
|
chname = int_to_bcd(mem.number)
|
||||||
if mem.number < 10:
|
if mem.number < 10:
|
||||||
# convert to F# as BCD
|
# convert to F# as BCD
|
||||||
|
@ -85,7 +85,7 @@ _TMODES = ["", "Tone", "TSQL", "-RVT", "DTCS", "-PR", "-PAG"]
|
|||||||
TMODES = ["", "Tone", "TSQL", "", "DTCS", "", ""]
|
TMODES = ["", "Tone", "TSQL", "", "DTCS", "", ""]
|
||||||
MODES = ["FM", "AM", "NFM", "", "WFM"]
|
MODES = ["FM", "AM", "NFM", "", "WFM"]
|
||||||
DUPLEXES = ["", "", "-", "+", "split"]
|
DUPLEXES = ["", "", "-", "+", "split"]
|
||||||
# TODO: add japaneese characters (viewable in special menu, scroll backwards)
|
# TODO: add japanese characters (viewable in special menu, scroll backwards)
|
||||||
CHARSET = \
|
CHARSET = \
|
||||||
('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!"' +
|
('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!"' +
|
||||||
'#$%&`()*+,-./:;<=>?@[\\]^_`{|}~?????? ' + '?' * 91)
|
'#$%&`()*+,-./:;<=>?@[\\]^_`{|}~?????? ' + '?' * 91)
|
||||||
|
@ -284,7 +284,7 @@ class H777Radio(chirp_common.CloneModeRadio):
|
|||||||
SIDEKEYFUNCTION_LIST = ["Off", "Monitor", "Transmit Power", "Alarm"]
|
SIDEKEYFUNCTION_LIST = ["Off", "Monitor", "Transmit Power", "Alarm"]
|
||||||
|
|
||||||
# This code currently requires that ranges start at 0x0000
|
# This code currently requires that ranges start at 0x0000
|
||||||
# and are continious. In the original program 0x0388 and 0x03C8
|
# and are continuous. In the original program 0x0388 and 0x03C8
|
||||||
# are only written (all bytes 0xFF), not read.
|
# are only written (all bytes 0xFF), not read.
|
||||||
# _ranges = [
|
# _ranges = [
|
||||||
# (0x0000, 0x0110),
|
# (0x0000, 0x0110),
|
||||||
|
@ -732,7 +732,7 @@ class IC2730Radio(icf.IcomRawCloneModeRadio):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def myset_bitmask(setting, obj, ndx, atrb, knt):
|
def myset_bitmask(setting, obj, ndx, atrb, knt):
|
||||||
""" Callback to gnerate byte-array bitmask from string"""
|
""" Callback to generate byte-array bitmask from string"""
|
||||||
# knt is BIT count to process
|
# knt is BIT count to process
|
||||||
lsx = str(setting.value).strip().split(",")
|
lsx = str(setting.value).strip().split(",")
|
||||||
for kx in range(0, len(lsx)):
|
for kx in range(0, len(lsx)):
|
||||||
@ -985,7 +985,7 @@ class IC2730Radio(icf.IcomRawCloneModeRadio):
|
|||||||
abset.append(rset)
|
abset.append(rset)
|
||||||
|
|
||||||
# --- Microphone Keys
|
# --- Microphone Keys
|
||||||
# The Mic keys get wierd: stored values are indecis to the full
|
# The Mic keys get weird: stored values are indecis to the full
|
||||||
# options list, but only a subset is valid...
|
# options list, but only a subset is valid...
|
||||||
shortopts = ["Off", "Monitor", "MR (Ch 0)", "MR (Ch 1)", "Band/Bank",
|
shortopts = ["Off", "Monitor", "MR (Ch 0)", "MR (Ch 1)", "Band/Bank",
|
||||||
"Scan", "Temp Skip", "Mode", "Low", "Dup", "Priority",
|
"Scan", "Temp Skip", "Mode", "Low", "Dup", "Priority",
|
||||||
|
@ -990,7 +990,7 @@ class Icom7300Radio(IcomCIVRadio): # Added March, 2021 by Rick DeWitt
|
|||||||
|
|
||||||
|
|
||||||
def probe_model(ser):
|
def probe_model(ser):
|
||||||
"""Probe the radio attatched to @ser for its model"""
|
"""Probe the radio attached to @ser for its model"""
|
||||||
f = Frame()
|
f = Frame()
|
||||||
f.set_command(0x19, 0x00)
|
f.set_command(0x19, 0x00)
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
from chirp.drivers import icf
|
from chirp.drivers import icf
|
||||||
from chirp import chirp_common, directory, bitwise
|
from chirp import chirp_common, directory, bitwise
|
||||||
|
|
||||||
# memory nuber:
|
# memory number:
|
||||||
# 000 - 999 regular memory channels (supported, others not)
|
# 000 - 999 regular memory channels (supported, others not)
|
||||||
# 1000 - 1049 scan edges
|
# 1000 - 1049 scan edges
|
||||||
# 1050 - 1249 auto write channels
|
# 1050 - 1249 auto write channels
|
||||||
|
@ -880,7 +880,7 @@ def reorder_banks(icx90, preserve_position, preserve_unknown, banks_templ):
|
|||||||
bank_pos = banks_cnt[bank]
|
bank_pos = banks_cnt[bank]
|
||||||
banks_cnt[bank] += 1
|
banks_cnt[bank] += 1
|
||||||
print("%s\t-> %s, %02d" % (mem.name, BANK_INDEX[bank], bank_pos))
|
print("%s\t-> %s, %02d" % (mem.name, BANK_INDEX[bank], bank_pos))
|
||||||
# explictly set non empty channel as visible
|
# explicitly set non empty channel as visible
|
||||||
icx90.memobj.banks[mi].invisible_channel = 0
|
icx90.memobj.banks[mi].invisible_channel = 0
|
||||||
if bank >= BANKS or bank_pos >= BANK_NUM:
|
if bank >= BANKS or bank_pos >= BANK_NUM:
|
||||||
bank = None
|
bank = None
|
||||||
|
@ -158,7 +158,7 @@ class ID51PLUSRadio(id31.ID31Radio):
|
|||||||
|
|
||||||
def get_repeater_call_list(self):
|
def get_repeater_call_list(self):
|
||||||
calls = []
|
calls = []
|
||||||
# Unlike previos DStar radios, there is not a seperate repeater
|
# Unlike previous DStar radios, there is not a separate repeater
|
||||||
# callsign list. It's only the DV Memory banks.
|
# callsign list. It's only the DV Memory banks.
|
||||||
for repeater in self._memobj.repeaters:
|
for repeater in self._memobj.repeaters:
|
||||||
call = id31._decode_call(repeater.call)
|
call = id31._decode_call(repeater.call)
|
||||||
|
@ -112,7 +112,7 @@ def decode_call(sevenbytes):
|
|||||||
# places for the next round
|
# places for the next round
|
||||||
rem = (byte & mask) << 7 - i
|
rem = (byte & mask) << 7 - i
|
||||||
|
|
||||||
# After seven trips gathering overflow bits, we chould have seven
|
# After seven trips gathering overflow bits, we should have seven
|
||||||
# left, which is the final character
|
# left, which is the final character
|
||||||
call += chr(rem)
|
call += chr(rem)
|
||||||
|
|
||||||
|
@ -1664,7 +1664,7 @@ class TS480Radio(KenwoodLiveRadio):
|
|||||||
mem.number = number
|
mem.number = number
|
||||||
spec0 = command(self.pipe, "MR0%03i" % mem.number)
|
spec0 = command(self.pipe, "MR0%03i" % mem.number)
|
||||||
spec1 = command(self.pipe, "MR1%03i" % mem.number)
|
spec1 = command(self.pipe, "MR1%03i" % mem.number)
|
||||||
# Add 1 to string idecis if refering to CAT manual
|
# Add 1 to string idecis if referring to CAT manual
|
||||||
mem.name = spec0[41:49] # Max 8-Char Name if assigned
|
mem.name = spec0[41:49] # Max 8-Char Name if assigned
|
||||||
mem.name = mem.name.strip()
|
mem.name = mem.name.strip()
|
||||||
mem.name = mem.name.upper()
|
mem.name = mem.name.upper()
|
||||||
|
@ -405,7 +405,7 @@ def _pkt_decode(data):
|
|||||||
cksum_match = (cksum & 0xf) == payload[-1]
|
cksum_match = (cksum & 0xf) == payload[-1]
|
||||||
if (not cksum_match):
|
if (not cksum_match):
|
||||||
LOG.debug(
|
LOG.debug(
|
||||||
"Checksum missmatch: %x != %x; " % (cksum, payload[-1]))
|
"Checksum mismatch: %x != %x; " % (cksum, payload[-1]))
|
||||||
return (cksum_match, op, payload[:-1])
|
return (cksum_match, op, payload[:-1])
|
||||||
|
|
||||||
# UI callbacks to process input for mapping UI fields to memory cells
|
# UI callbacks to process input for mapping UI fields to memory cells
|
||||||
@ -427,7 +427,7 @@ def int2freq(freq):
|
|||||||
"""
|
"""
|
||||||
Convert a u32 frequency to a string for UI data entry/display
|
Convert a u32 frequency to a string for UI data entry/display
|
||||||
This is stored in the radio as units of 10Hz which we compensate to Hz.
|
This is stored in the radio as units of 10Hz which we compensate to Hz.
|
||||||
A value of -1 indicates <no freqency>, i.e. unused channel.
|
A value of -1 indicates <no frequency>, i.e. unused channel.
|
||||||
"""
|
"""
|
||||||
if (int(freq) > 0):
|
if (int(freq) > 0):
|
||||||
f = chirp_common.format_freq(freq)
|
f = chirp_common.format_freq(freq)
|
||||||
|
@ -458,8 +458,8 @@ class LT725UV(chirp_common.CloneModeRadio):
|
|||||||
# Low = 5W, Med = 10W, High = 25W
|
# Low = 5W, Med = 10W, High = 25W
|
||||||
# The band power selection in a VFO applies to the VFO and overrides
|
# The band power selection in a VFO applies to the VFO and overrides
|
||||||
# the stored channel power selection
|
# the stored channel power selection
|
||||||
# The firmware chanel memory structure provides only 1 bit for
|
# The firmware channel memory structure provides only 1 bit for
|
||||||
# individual chanel power settings, limiting potential channel
|
# individual channel power settings, limiting potential channel
|
||||||
# power selection options to 2 levels: Low or High.
|
# power selection options to 2 levels: Low or High.
|
||||||
POWER_LEVELS = [chirp_common.PowerLevel("Low", watts=5.00),
|
POWER_LEVELS = [chirp_common.PowerLevel("Low", watts=5.00),
|
||||||
chirp_common.PowerLevel("High", watts=30.00)]
|
chirp_common.PowerLevel("High", watts=30.00)]
|
||||||
|
@ -1184,7 +1184,7 @@ class Puxing_PX888K_Radio(chirp_common.CloneModeRadio):
|
|||||||
_priority = None
|
_priority = None
|
||||||
if number in SPECIAL_NUMBERS.keys():
|
if number in SPECIAL_NUMBERS.keys():
|
||||||
index = number
|
index = number
|
||||||
# speical by index
|
# special by index
|
||||||
designator = SPECIAL_NUMBERS[number]
|
designator = SPECIAL_NUMBERS[number]
|
||||||
elif number in SPECIAL_CHANNELS.keys():
|
elif number in SPECIAL_CHANNELS.keys():
|
||||||
# special by name
|
# special by name
|
||||||
|
@ -454,7 +454,7 @@ class RadioddityR2(chirp_common.CloneModeRadio):
|
|||||||
mem.duplex = "+"
|
mem.duplex = "+"
|
||||||
mem.offset = txfreq - mem.freq
|
mem.offset = txfreq - mem.freq
|
||||||
|
|
||||||
# get bandwith FM or NFM
|
# get bandwidth FM or NFM
|
||||||
mem.mode = MODE_LIST[_mem.mode]
|
mem.mode = MODE_LIST[_mem.mode]
|
||||||
|
|
||||||
# tone data
|
# tone data
|
||||||
|
@ -164,7 +164,7 @@ def short2tone(tone):
|
|||||||
def _rb15_enter_programming_mode(radio):
|
def _rb15_enter_programming_mode(radio):
|
||||||
serial = radio.pipe
|
serial = radio.pipe
|
||||||
|
|
||||||
# lengthen the timeout here as these radios are reseting due to timeout
|
# lengthen the timeout here as these radios are resetting due to timeout
|
||||||
radio.pipe.timeout = 0.75
|
radio.pipe.timeout = 0.75
|
||||||
|
|
||||||
exito = False
|
exito = False
|
||||||
@ -547,7 +547,7 @@ class RB15RadioBase(chirp_common.CloneModeRadio):
|
|||||||
LOG.debug("Setting %i(%s)" % (mem.number, mem.extd_number))
|
LOG.debug("Setting %i(%s)" % (mem.number, mem.extd_number))
|
||||||
_mem = self._memobj.channels[mem.number - 1]
|
_mem = self._memobj.channels[mem.number - 1]
|
||||||
|
|
||||||
# if empty memmory
|
# if empty memory
|
||||||
if mem.empty:
|
if mem.empty:
|
||||||
_mem.set_raw("\xFF" * 8 + "\x00" * 5 + "\xFF" * 3)
|
_mem.set_raw("\xFF" * 8 + "\x00" * 5 + "\xFF" * 3)
|
||||||
return
|
return
|
||||||
|
@ -477,7 +477,7 @@ class RB17P_Base(chirp_common.CloneModeRadio):
|
|||||||
basic.append(rs)
|
basic.append(rs)
|
||||||
|
|
||||||
# Menu 05 - Battery Save
|
# Menu 05 - Battery Save
|
||||||
rs = RadioSetting("batterysave", "Batery Save",
|
rs = RadioSetting("batterysave", "Battery Save",
|
||||||
RadioSettingValueList(
|
RadioSettingValueList(
|
||||||
BATTERYSAVE_LIST,
|
BATTERYSAVE_LIST,
|
||||||
BATTERYSAVE_LIST[_settings.batterysave]))
|
BATTERYSAVE_LIST[_settings.batterysave]))
|
||||||
|
@ -103,7 +103,7 @@ struct {
|
|||||||
u8 code3_len; // Stun Code length
|
u8 code3_len; // Stun Code length
|
||||||
u8 code3[5]; // Stun Code
|
u8 code3[5]; // Stun Code
|
||||||
u8 unknown9[10];
|
u8 unknown9[10];
|
||||||
u8 code1[8]; // PTT ID(beggining of TX)
|
u8 code1[8]; // PTT ID(beginning of TX)
|
||||||
u8 code2[8]; // PTT ID(end of TX)
|
u8 code2[8]; // PTT ID(end of TX)
|
||||||
} dtmf;
|
} dtmf;
|
||||||
|
|
||||||
|
@ -93,9 +93,9 @@ struct {
|
|||||||
u8 unknown_1a0a; // 1A0B
|
u8 unknown_1a0a; // 1A0B
|
||||||
u8 pttlt; // 1A0C PTT Delay
|
u8 pttlt; // 1A0C PTT Delay
|
||||||
u8 unknown_1a0d:6, // 1A0D
|
u8 unknown_1a0d:6, // 1A0D
|
||||||
mdfa:2; // Channle A Display
|
mdfa:2; // Channel A Display
|
||||||
u8 unknown_1a0e:6, // 1A0E
|
u8 unknown_1a0e:6, // 1A0E
|
||||||
mdfb:2; // Channle B Display
|
mdfb:2; // Channel B Display
|
||||||
u8 unknown_1a0f:7, // 1A0F
|
u8 unknown_1a0f:7, // 1A0F
|
||||||
bcl:1; // BCL
|
bcl:1; // BCL
|
||||||
u8 unknown_1a10:7, // 1A10
|
u8 unknown_1a10:7, // 1A10
|
||||||
@ -109,9 +109,9 @@ struct {
|
|||||||
u8 unknown_1a14:7, // 1A14
|
u8 unknown_1a14:7, // 1A14
|
||||||
ste:1; // Tail Noise Clear
|
ste:1; // Tail Noise Clear
|
||||||
u8 unknown_1a15:4, // 1A15
|
u8 unknown_1a15:4, // 1A15
|
||||||
rpste:4; // Pass Repet Noise
|
rpste:4; // Pass Repeat Noise
|
||||||
u8 unknown_1a16:4, // 1A16
|
u8 unknown_1a16:4, // 1A16
|
||||||
rptrl:4; // Pass Repet Noise
|
rptrl:4; // Pass Repeat Noise
|
||||||
u8 unknown_1a17:7, // 1A17
|
u8 unknown_1a17:7, // 1A17
|
||||||
roger:1; // Roger
|
roger:1; // Roger
|
||||||
u8 unknown_1a18; // 1A18
|
u8 unknown_1a18; // 1A18
|
||||||
@ -882,12 +882,12 @@ class RT76PRadio(chirp_common.CloneModeRadio):
|
|||||||
rset.set_apply_callback(apply_skey_listvalue, _skey.longp)
|
rset.set_apply_callback(apply_skey_listvalue, _skey.longp)
|
||||||
advanced.append(rset)
|
advanced.append(rset)
|
||||||
|
|
||||||
# Pass Repet Noise
|
# Pass Repeat Noise
|
||||||
rs = RadioSettingValueList(RPSTE_LIST, RPSTE_LIST[_settings.rpste])
|
rs = RadioSettingValueList(RPSTE_LIST, RPSTE_LIST[_settings.rpste])
|
||||||
rset = RadioSetting("rpste", "Squelch Tail Eliminate (repeater)", rs)
|
rset = RadioSetting("rpste", "Squelch Tail Eliminate (repeater)", rs)
|
||||||
advanced.append(rset)
|
advanced.append(rset)
|
||||||
|
|
||||||
# Pass Repet Noise
|
# Pass Repeat Noise
|
||||||
rs = RadioSettingValueList(RPSTE_LIST, RPSTE_LIST[_settings.rptrl])
|
rs = RadioSettingValueList(RPSTE_LIST, RPSTE_LIST[_settings.rptrl])
|
||||||
rset = RadioSetting("rptrl", "STE Repeater Delay", rs)
|
rset = RadioSetting("rptrl", "STE Repeater Delay", rs)
|
||||||
advanced.append(rset)
|
advanced.append(rset)
|
||||||
|
@ -151,7 +151,7 @@ SETTING_LISTS = {
|
|||||||
# 1 u8 unknown0
|
# 1 u8 unknown0
|
||||||
# 1 u8
|
# 1 u8
|
||||||
# :1 reverse:1 reverse flag, 0=off, 1=on (reverses
|
# :1 reverse:1 reverse flag, 0=off, 1=on (reverses
|
||||||
# transmit and receive freqencies)
|
# transmit and receive frequencies)
|
||||||
# :1 txoff:1 transmitt off flag, 0=transmit, 1=do not
|
# :1 txoff:1 transmitt off flag, 0=transmit, 1=do not
|
||||||
# transmit
|
# transmit
|
||||||
# :2 power:2 transmit power setting, value range 0-2,
|
# :2 power:2 transmit power setting, value range 0-2,
|
||||||
|
@ -489,7 +489,7 @@ class QuanshengTGUV2P(chirp_common.CloneModeRadio,
|
|||||||
options, options[_rxmode]))
|
options, options[_rxmode]))
|
||||||
cfg_grp.append(rs)
|
cfg_grp.append(rs)
|
||||||
|
|
||||||
# Busy chanel lock
|
# Busy channel lock
|
||||||
rs = RadioSetting("busy_lockout", "Busy Channel Lock",
|
rs = RadioSetting("busy_lockout", "Busy Channel Lock",
|
||||||
RadioSettingValueBoolean(
|
RadioSettingValueBoolean(
|
||||||
not _settings.busy_lockout))
|
not _settings.busy_lockout))
|
||||||
|
@ -631,7 +631,7 @@ def _upload(radio, memsize=0xF400, blocksize=0x80):
|
|||||||
|
|
||||||
if data != radio._mmap[:radio._mmap_offset]:
|
if data != radio._mmap[:radio._mmap_offset]:
|
||||||
raise errors.RadioError(
|
raise errors.RadioError(
|
||||||
"Model mis-match: \n%s\n%s" %
|
"Model mismatch: \n%s\n%s" %
|
||||||
(util.hexprint(data),
|
(util.hexprint(data),
|
||||||
util.hexprint(radio._mmap[:radio._mmap_offset])))
|
util.hexprint(radio._mmap[:radio._mmap_offset])))
|
||||||
# in the factory software they update the last program date when
|
# in the factory software they update the last program date when
|
||||||
|
@ -166,7 +166,7 @@ struct {
|
|||||||
#
|
#
|
||||||
# bytes:bit type description
|
# bytes:bit type description
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# 6 u8 bootup_passwd[6] bootup passwd, 6 chars, numberic chars
|
# 6 u8 bootup_passwd[6] bootup passwd, 6 chars, numeric chars
|
||||||
# 30-39 , see boot_passwd checkbox to set
|
# 30-39 , see boot_passwd checkbox to set
|
||||||
# 10 u8 unknown;
|
# 10 u8 unknown;
|
||||||
#
|
#
|
||||||
|
@ -729,7 +729,7 @@ def _upload(radio, memsize=0xF400, blocksize=0x80):
|
|||||||
|
|
||||||
if data != radio._mmap[:radio._mmap_offset]:
|
if data != radio._mmap[:radio._mmap_offset]:
|
||||||
raise errors.RadioError(
|
raise errors.RadioError(
|
||||||
"Model mis-match: \n%s\n%s" %
|
"Model mismatch: \n%s\n%s" %
|
||||||
(util.hexprint(data),
|
(util.hexprint(data),
|
||||||
util.hexprint(radio._mmap[:radio._mmap_offset])))
|
util.hexprint(radio._mmap[:radio._mmap_offset])))
|
||||||
# in the factory software they update the last program date when
|
# in the factory software they update the last program date when
|
||||||
|
@ -623,7 +623,7 @@ class THUV8000Radio(chirp_common.CloneModeRadio):
|
|||||||
if isinstance(number, str):
|
if isinstance(number, str):
|
||||||
return self._get_special(number)
|
return self._get_special(number)
|
||||||
elif number < 0:
|
elif number < 0:
|
||||||
# I can't stop delete operation from loosing extd_number but
|
# I can't stop delete operation from losing extd_number but
|
||||||
# I know how to get it back
|
# I know how to get it back
|
||||||
return self._get_special(self.SPECIAL_MEMORIES_REV[number])
|
return self._get_special(self.SPECIAL_MEMORIES_REV[number])
|
||||||
else:
|
else:
|
||||||
@ -887,7 +887,7 @@ class THUV8000Radio(chirp_common.CloneModeRadio):
|
|||||||
|
|
||||||
# All mem.extra << Once the channel is defined
|
# All mem.extra << Once the channel is defined
|
||||||
for setting in mem.extra:
|
for setting in mem.extra:
|
||||||
# Overide list strings with signed value
|
# Override list strings with signed value
|
||||||
if setting.get_name() == "ptt":
|
if setting.get_name() == "ptt":
|
||||||
sx = str(setting.value)
|
sx = str(setting.value)
|
||||||
for i in range(0, 4):
|
for i in range(0, 4):
|
||||||
@ -1275,7 +1275,7 @@ class THUV8000Radio(chirp_common.CloneModeRadio):
|
|||||||
|
|
||||||
rx = RadioSettingValueBoolean(bool(_sets.rxinhib))
|
rx = RadioSettingValueBoolean(bool(_sets.rxinhib))
|
||||||
rset = RadioSetting("setstuf.rxinhib",
|
rset = RadioSetting("setstuf.rxinhib",
|
||||||
"Rcvr Will Interupt FM (DW)", rx)
|
"Rcvr Will Interrupt FM (DW)", rx)
|
||||||
fmb.append(rset)
|
fmb.append(rset)
|
||||||
|
|
||||||
_fmfrq = self._memobj.fm_stations
|
_fmfrq = self._memobj.fm_stations
|
||||||
|
@ -87,7 +87,7 @@ def tyt_uvf8d_upload(radio):
|
|||||||
radio.pipe.timeout = 1
|
radio.pipe.timeout = 1
|
||||||
|
|
||||||
if data != radio._mmap[:32]:
|
if data != radio._mmap[:32]:
|
||||||
raise errors.RadioError("Model mis-match: \n%s\n%s" %
|
raise errors.RadioError("Model mismatch: \n%s\n%s" %
|
||||||
(util.hexprint(data),
|
(util.hexprint(data),
|
||||||
util.hexprint(radio._mmap[:32])))
|
util.hexprint(radio._mmap[:32])))
|
||||||
|
|
||||||
|
@ -56,11 +56,11 @@ u8 active[4]; // 4 bytes / bit LSBF for the active cha
|
|||||||
|
|
||||||
#seekto 0x0340;
|
#seekto 0x0340;
|
||||||
struct {
|
struct {
|
||||||
u8 kMoni; // monitor key funcion
|
u8 kMoni; // monitor key function
|
||||||
u8 kScan; // scan key funcion
|
u8 kScan; // scan key function
|
||||||
u8 kDial; // dial key funcion
|
u8 kDial; // dial key function
|
||||||
u8 kTa; // ta key funcion
|
u8 kTa; // ta key function
|
||||||
u8 kLo; // low key funcion
|
u8 kLo; // low key function
|
||||||
u8 unknown40[7];
|
u8 unknown40[7];
|
||||||
// 0x034c
|
// 0x034c
|
||||||
u8 tot; // TOT val * 30 steps (x00-0xa)
|
u8 tot; // TOT val * 30 steps (x00-0xa)
|
||||||
@ -405,11 +405,11 @@ class Kenwood_P60_Radio(chirp_common.CloneModeRadio, chirp_common.ExperimentalRa
|
|||||||
raise errors.RadioError("Error uploading data to radio")
|
raise errors.RadioError("Error uploading data to radio")
|
||||||
|
|
||||||
def set_variant(self):
|
def set_variant(self):
|
||||||
"""Select and set the correct variables for the class acording
|
"""Select and set the correct variables for the class according
|
||||||
to the correct variant of the radio"""
|
to the correct variant of the radio"""
|
||||||
rid = get_radio_id(self._mmap)
|
rid = get_radio_id(self._mmap)
|
||||||
|
|
||||||
# indentify the radio variant and set the enviroment to it's values
|
# identify the radio variant and set the environment to it's values
|
||||||
try:
|
try:
|
||||||
self._upper, low, high, self._kind = self.VARIANTS[rid]
|
self._upper, low, high, self._kind = self.VARIANTS[rid]
|
||||||
|
|
||||||
@ -744,7 +744,7 @@ class Kenwood_P60_Radio(chirp_common.CloneModeRadio, chirp_common.ExperimentalRa
|
|||||||
# off
|
# off
|
||||||
sett.tot_reset = 0
|
sett.tot_reset = 0
|
||||||
if int(sett.sql) == 0xff:
|
if int(sett.sql) == 0xff:
|
||||||
# a confortable level ~6
|
# a comfortable level ~6
|
||||||
sett.sql = 6
|
sett.sql = 6
|
||||||
|
|
||||||
tot = RadioSetting("settings.tot", "Time Out Timer (TOT)",
|
tot = RadioSetting("settings.tot", "Time Out Timer (TOT)",
|
||||||
|
@ -87,7 +87,7 @@ KEYS = {
|
|||||||
0x01: "Monitor",
|
0x01: "Monitor",
|
||||||
0x02: "Talk Around",
|
0x02: "Talk Around",
|
||||||
0x03: "Horn Alert",
|
0x03: "Horn Alert",
|
||||||
0x04: "Public Adress",
|
0x04: "Public Address",
|
||||||
0x05: "Auxiliary",
|
0x05: "Auxiliary",
|
||||||
0x06: "Scan",
|
0x06: "Scan",
|
||||||
0x07: "Scan Del/Add",
|
0x07: "Scan Del/Add",
|
||||||
@ -237,7 +237,7 @@ def open_radio(radio):
|
|||||||
raise errors.RadioError(msg)
|
raise errors.RadioError(msg)
|
||||||
|
|
||||||
handshake(radio, "Comm error after ident", True)
|
handshake(radio, "Comm error after ident", True)
|
||||||
LOG.debug("Correct get ident and hanshake")
|
LOG.debug("Correct get ident and handshake")
|
||||||
|
|
||||||
if not (radio.TYPE in ident):
|
if not (radio.TYPE in ident):
|
||||||
LOG.debug("Incorrect model ID:")
|
LOG.debug("Incorrect model ID:")
|
||||||
@ -426,11 +426,11 @@ class Kenwood_M60_Radio(chirp_common.CloneModeRadio,
|
|||||||
raise errors.RadioError("Error uploading data to radio")
|
raise errors.RadioError("Error uploading data to radio")
|
||||||
|
|
||||||
def set_variant(self):
|
def set_variant(self):
|
||||||
"""Select and set the correct variables for the class acording
|
"""Select and set the correct variables for the class according
|
||||||
to the correct variant of the radio"""
|
to the correct variant of the radio"""
|
||||||
rid = get_rid(self._mmap)
|
rid = get_rid(self._mmap)
|
||||||
|
|
||||||
# indentify the radio variant and set the enviroment to it's values
|
# identify the radio variant and set the environment to it's values
|
||||||
try:
|
try:
|
||||||
self._upper, low, high, self._kind = self.VARIANTS[rid]
|
self._upper, low, high, self._kind = self.VARIANTS[rid]
|
||||||
|
|
||||||
@ -453,7 +453,7 @@ class Kenwood_M60_Radio(chirp_common.CloneModeRadio,
|
|||||||
"Wrong Kenwood radio, ID or unknown variant, see LOG output.")
|
"Wrong Kenwood radio, ID or unknown variant, see LOG output.")
|
||||||
|
|
||||||
def _prep_data(self):
|
def _prep_data(self):
|
||||||
"""Prepare the areas in the memmap to do a consistend write
|
"""Prepare the areas in the memmap to do a consistent write
|
||||||
it has to make an update on the x200 flag data"""
|
it has to make an update on the x200 flag data"""
|
||||||
achs = 0
|
achs = 0
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ struct {
|
|||||||
u8 tot_rekey; // x12 TOT Re-key value range(0, 60); off= 0
|
u8 tot_rekey; // x12 TOT Re-key value range(0, 60); off= 0
|
||||||
u8 unknown1; // x13 unknown
|
u8 unknown1; // x13 unknown
|
||||||
u8 tot_reset; // x14 TOT Re-key value range(0, 60); off= 0
|
u8 tot_reset; // x14 TOT Re-key value range(0, 60); off= 0
|
||||||
u8 unknown2; // x15 unknows
|
u8 unknown2; // x15 unknowns
|
||||||
u8 tot_alert; // x16 TOT pre alert: range(0,10); 0 = off
|
u8 tot_alert; // x16 TOT pre alert: range(0,10); 0 = off
|
||||||
u8 unknown3[7]; // x17-x1d unknown
|
u8 unknown3[7]; // x17-x1d unknown
|
||||||
u8 sql_level; // x1e SQ reference level
|
u8 sql_level; // x1e SQ reference level
|
||||||
@ -81,9 +81,9 @@ struct {
|
|||||||
control_tone:1, // 1 bit control tone (key tone), enabled: 1-on
|
control_tone:1, // 1 bit control tone (key tone), enabled: 1-on
|
||||||
poweron_tone:1; // 1 bit power on tone, enabled: 1-on
|
poweron_tone:1; // 1 bit power on tone, enabled: 1-on
|
||||||
u8 unknown19[5]; // x85-x89
|
u8 unknown19[5]; // x85-x89
|
||||||
u8 min_vol; // minimum volume posible: range(0,32); 0 = off
|
u8 min_vol; // minimum volume possible: range(0,32); 0 = off
|
||||||
u8 tone_vol; // minimum tone volume posible:
|
u8 tone_vol; // minimum tone volume possible:
|
||||||
// xff = continous, range(0, 31)
|
// xff = continuous, range(0, 31)
|
||||||
u8 unknown20[4]; // x8c-x8f
|
u8 unknown20[4]; // x8c-x8f
|
||||||
// --
|
// --
|
||||||
u8 unknown21[4]; // x90-x93
|
u8 unknown21[4]; // x90-x93
|
||||||
@ -108,11 +108,11 @@ struct {
|
|||||||
#seekto 0x0110;
|
#seekto 0x0110;
|
||||||
struct {
|
struct {
|
||||||
u8 kA; // Portable > Closed circle
|
u8 kA; // Portable > Closed circle
|
||||||
u8 kDA; // Protable > Triangle to Left
|
u8 kDA; // Portable > Triangle to Left
|
||||||
u8 kGROUP_DOWN; // Protable > Triangle to Right
|
u8 kGROUP_DOWN; // Portable > Triangle to Right
|
||||||
u8 kGROUP_UP; // Protable > Side 1
|
u8 kGROUP_UP; // Portable > Side 1
|
||||||
u8 kSCN; // Portable > Open Circle
|
u8 kSCN; // Portable > Open Circle
|
||||||
u8 kMON; // Protable > Side 2
|
u8 kMON; // Portable > Side 2
|
||||||
u8 kFOOT;
|
u8 kFOOT;
|
||||||
u8 kCH_UP;
|
u8 kCH_UP;
|
||||||
u8 kCH_DOWN;
|
u8 kCH_DOWN;
|
||||||
@ -289,7 +289,7 @@ TOT_REKEY = ["off"] + ["%s" % x for x in range(1, 61)]
|
|||||||
TOT_RESET = ["off"] + ["%s" % x for x in range(1, 16)]
|
TOT_RESET = ["off"] + ["%s" % x for x in range(1, 16)]
|
||||||
VOL = ["off"] + ["%s" % x for x in range(1, 32)]
|
VOL = ["off"] + ["%s" % x for x in range(1, 32)]
|
||||||
TVOL = ["%s" % x for x in range(0, 33)]
|
TVOL = ["%s" % x for x in range(0, 33)]
|
||||||
TVOL[32] = "Continous"
|
TVOL[32] = "Continuous"
|
||||||
SQL = ["off"] + ["%s" % x for x in range(1, 10)]
|
SQL = ["off"] + ["%s" % x for x in range(1, 10)]
|
||||||
|
|
||||||
## BOT = 0, EOT = 1, Both = 2, NONE = 3
|
## BOT = 0, EOT = 1, Both = 2, NONE = 3
|
||||||
@ -300,7 +300,7 @@ debug = False
|
|||||||
|
|
||||||
KEYS = {
|
KEYS = {
|
||||||
0x33: "Display character",
|
0x33: "Display character",
|
||||||
0x35: "Home Channel", # Posible portable only, chek it
|
0x35: "Home Channel", # Possible portable only, check it
|
||||||
0x37: "CH down",
|
0x37: "CH down",
|
||||||
0x38: "CH up",
|
0x38: "CH up",
|
||||||
0x39: "Key lock",
|
0x39: "Key lock",
|
||||||
@ -313,7 +313,7 @@ KEYS = {
|
|||||||
0x40: "Monitor A: open mommentary",
|
0x40: "Monitor A: open mommentary",
|
||||||
0x41: "Monitor B: Open Toggle",
|
0x41: "Monitor B: Open Toggle",
|
||||||
0x42: "Monitor C: Carrier mommentary",
|
0x42: "Monitor C: Carrier mommentary",
|
||||||
0x43: "Monitor D: Carrier toogle",
|
0x43: "Monitor D: Carrier toggle",
|
||||||
0x44: "Operator selectable tone",
|
0x44: "Operator selectable tone",
|
||||||
0x45: "Redial",
|
0x45: "Redial",
|
||||||
0x46: "RF Power Low", # portable only ?
|
0x46: "RF Power Low", # portable only ?
|
||||||
@ -485,7 +485,7 @@ def _open_radio(radio, status):
|
|||||||
|
|
||||||
if exito is False:
|
if exito is False:
|
||||||
_close_radio(radio)
|
_close_radio(radio)
|
||||||
LOG.debug("Radio did not accepted PROGRAM command in %s atempts" % tries)
|
LOG.debug("Radio did not accepted PROGRAM command in %s attempts" % tries)
|
||||||
raise errors.RadioError("The radio doesn't accept program mode")
|
raise errors.RadioError("The radio doesn't accept program mode")
|
||||||
|
|
||||||
# DEBUG
|
# DEBUG
|
||||||
@ -552,7 +552,7 @@ def do_download(radio):
|
|||||||
# now we get the data
|
# now we get the data
|
||||||
d = _recv(radio)
|
d = _recv(radio)
|
||||||
# if empty block, it return false
|
# if empty block, it return false
|
||||||
# aka we asume a empty 256 xFF block
|
# aka we assume a empty 256 xFF block
|
||||||
if d is False:
|
if d is False:
|
||||||
d = EMPTY_BLOCK
|
d = EMPTY_BLOCK
|
||||||
|
|
||||||
@ -697,7 +697,7 @@ class memBank(chirp_common.Bank):
|
|||||||
|
|
||||||
|
|
||||||
class Kenwood_Serie_60G(chirp_common.CloneModeRadio, chirp_common.ExperimentalRadio):
|
class Kenwood_Serie_60G(chirp_common.CloneModeRadio, chirp_common.ExperimentalRadio):
|
||||||
"""Kenwood Serie 60G Radios base class"""
|
"""Kenwood Series 60G Radios base class"""
|
||||||
VENDOR = "Kenwood"
|
VENDOR = "Kenwood"
|
||||||
BAUD_RATE = 9600
|
BAUD_RATE = 9600
|
||||||
_memsize = MEM_SIZE
|
_memsize = MEM_SIZE
|
||||||
@ -783,7 +783,7 @@ class Kenwood_Serie_60G(chirp_common.CloneModeRadio, chirp_common.ExperimentalRa
|
|||||||
self._mmap[offset + addr] = data[addr]
|
self._mmap[offset + addr] = data[addr]
|
||||||
|
|
||||||
def _prep_data(self):
|
def _prep_data(self):
|
||||||
"""Prepare the areas in the memmap to do a consistend write
|
"""Prepare the areas in the memmap to do a consistent write
|
||||||
it has to make an update on the x300 area with banks and channel
|
it has to make an update on the x300 area with banks and channel
|
||||||
info; other in the x1000 with banks and channel counts
|
info; other in the x1000 with banks and channel counts
|
||||||
and a last one in x7000 with flag data"""
|
and a last one in x7000 with flag data"""
|
||||||
@ -814,7 +814,7 @@ class Kenwood_Serie_60G(chirp_common.CloneModeRadio, chirp_common.ExperimentalRa
|
|||||||
fdata = ""
|
fdata = ""
|
||||||
|
|
||||||
for k, v in data.iteritems():
|
for k, v in data.iteritems():
|
||||||
# posible bad data
|
# possible bad data
|
||||||
if k == 0:
|
if k == 0:
|
||||||
k = 1
|
k = 1
|
||||||
raise errors.InvalidValueError(
|
raise errors.InvalidValueError(
|
||||||
@ -859,11 +859,11 @@ class Kenwood_Serie_60G(chirp_common.CloneModeRadio, chirp_common.ExperimentalRa
|
|||||||
self._fill(0x7000, fldata)
|
self._fill(0x7000, fldata)
|
||||||
|
|
||||||
def _set_variant(self):
|
def _set_variant(self):
|
||||||
"""Select and set the correct variables for the class acording
|
"""Select and set the correct variables for the class according
|
||||||
to the correct variant of the radio"""
|
to the correct variant of the radio"""
|
||||||
rid = self._mmap[0xA7:0xAE]
|
rid = self._mmap[0xA7:0xAE]
|
||||||
|
|
||||||
# indentify the radio variant and set the enviroment to it's values
|
# identify the radio variant and set the environment to it's values
|
||||||
try:
|
try:
|
||||||
self._upper, low, high, self._kind = self.VARIANTS[rid]
|
self._upper, low, high, self._kind = self.VARIANTS[rid]
|
||||||
|
|
||||||
@ -913,7 +913,7 @@ class Kenwood_Serie_60G(chirp_common.CloneModeRadio, chirp_common.ExperimentalRa
|
|||||||
|
|
||||||
def process_mmap(self):
|
def process_mmap(self):
|
||||||
"""Process the memory object"""
|
"""Process the memory object"""
|
||||||
# how many channels are programed
|
# how many channels are programmed
|
||||||
self._chs_progs = ord(self._mmap[15])
|
self._chs_progs = ord(self._mmap[15])
|
||||||
|
|
||||||
# load the memobj
|
# load the memobj
|
||||||
@ -1081,7 +1081,7 @@ class Kenwood_Serie_60G(chirp_common.CloneModeRadio, chirp_common.ExperimentalRa
|
|||||||
# get the eprom representation of this channel
|
# get the eprom representation of this channel
|
||||||
_mem = self._memobj.memory[mem.number - 1]
|
_mem = self._memobj.memory[mem.number - 1]
|
||||||
|
|
||||||
# if empty memmory
|
# if empty memory
|
||||||
if mem.empty:
|
if mem.empty:
|
||||||
_mem.set_raw("\xFF" * 48)
|
_mem.set_raw("\xFF" * 48)
|
||||||
return
|
return
|
||||||
@ -1089,7 +1089,7 @@ class Kenwood_Serie_60G(chirp_common.CloneModeRadio, chirp_common.ExperimentalRa
|
|||||||
# frequency
|
# frequency
|
||||||
_mem.rxfreq = mem.freq / 10
|
_mem.rxfreq = mem.freq / 10
|
||||||
|
|
||||||
# this are a mistery yet, but so falr there is no impact
|
# this are a mystery yet, but so falr there is no impact
|
||||||
# whit this default values for new channels
|
# whit this default values for new channels
|
||||||
if int(_mem.rx_unkw) == 0xff:
|
if int(_mem.rx_unkw) == 0xff:
|
||||||
_mem.rx_unkw = 0x35
|
_mem.rx_unkw = 0x35
|
||||||
@ -1180,7 +1180,7 @@ class Kenwood_Serie_60G(chirp_common.CloneModeRadio, chirp_common.ExperimentalRa
|
|||||||
# buttons
|
# buttons
|
||||||
fkeys = RadioSettingGroup("keys", "Front keys config")
|
fkeys = RadioSettingGroup("keys", "Front keys config")
|
||||||
|
|
||||||
# TODO / PLANED
|
# TODO / PLANNED
|
||||||
# adjust feqs
|
# adjust feqs
|
||||||
#freqs = RadioSettingGroup("freqs", "Adjust Frequencies")
|
#freqs = RadioSettingGroup("freqs", "Adjust Frequencies")
|
||||||
|
|
||||||
@ -1302,7 +1302,7 @@ class Kenwood_Serie_60G(chirp_common.CloneModeRadio, chirp_common.ExperimentalRa
|
|||||||
dealer.append(fmw)
|
dealer.append(fmw)
|
||||||
|
|
||||||
# front keys
|
# front keys
|
||||||
# The Mobile only parameters are wraped here
|
# The Mobile only parameters are wrapped here
|
||||||
if self.TYPE[0] == "M":
|
if self.TYPE[0] == "M":
|
||||||
vu = RadioSetting("keys.kVOL_UP", "VOL UP",
|
vu = RadioSetting("keys.kVOL_UP", "VOL UP",
|
||||||
RadioSettingValueList(KEYS.values(),
|
RadioSettingValueList(KEYS.values(),
|
||||||
@ -1517,7 +1517,7 @@ class Kenwood_Serie_60G(chirp_common.CloneModeRadio, chirp_common.ExperimentalRa
|
|||||||
raise errors.InvalidDataError(msg)
|
raise errors.InvalidDataError(msg)
|
||||||
|
|
||||||
|
|
||||||
# This kenwwood family is known as "60-G Serie"
|
# This kenwwood family is known as "60-G Series"
|
||||||
# all this radios ending in G are compatible:
|
# all this radios ending in G are compatible:
|
||||||
#
|
#
|
||||||
# Portables VHF TK-260G/270G/272G/278G
|
# Portables VHF TK-260G/270G/272G/278G
|
||||||
|
@ -1578,7 +1578,7 @@ if HAS_FUTURE: # Only register drivers if environment is PY3 compliant
|
|||||||
sx = "Block 0x%x read error: " % bkx
|
sx = "Block 0x%x read error: " % bkx
|
||||||
sx += "Got %i bytes, expected 260." % len(resp0)
|
sx += "Got %i bytes, expected 260." % len(resp0)
|
||||||
LOG.error(sx)
|
LOG.error(sx)
|
||||||
sx = "Block read errror! Check debug.log"
|
sx = "Block read error! Check debug.log"
|
||||||
raise errors.RadioError(sx)
|
raise errors.RadioError(sx)
|
||||||
if bkx == 0: # 1st packet of 1st block
|
if bkx == 0: # 1st packet of 1st block
|
||||||
mht = resp0[4:7] # [57 00 00 00] 03 4b 01 ff ff ...
|
mht = resp0[4:7] # [57 00 00 00] 03 4b 01 ff ff ...
|
||||||
@ -2020,7 +2020,7 @@ if HAS_FUTURE: # Only register drivers if environment is PY3 compliant
|
|||||||
sx = "Block 0x%x, 0x%x read error: " % (blkn, bkx)
|
sx = "Block 0x%x, 0x%x read error: " % (blkn, bkx)
|
||||||
sx += "Got %i bytes, expected %i." % (lb, xb)
|
sx += "Got %i bytes, expected %i." % (lb, xb)
|
||||||
LOG.error(sx)
|
LOG.error(sx)
|
||||||
sx = "Block read errror! Check debug.log"
|
sx = "Block read error! Check debug.log"
|
||||||
raise errors.RadioError(sx)
|
raise errors.RadioError(sx)
|
||||||
if blkn == 0 and bkx == 0: # 1st packet of 1st block
|
if blkn == 0 and bkx == 0: # 1st packet of 1st block
|
||||||
mht = resp0[5:9] # Magic Header Thingy after cmd echo
|
mht = resp0[5:9] # Magic Header Thingy after cmd echo
|
||||||
|
@ -275,7 +275,7 @@ def _read_settings(radio):
|
|||||||
""" Continue filling memory map"""
|
""" Continue filling memory map"""
|
||||||
global MEMSEL
|
global MEMSEL
|
||||||
# setc: the list of CAT commands for downloaded settings
|
# setc: the list of CAT commands for downloaded settings
|
||||||
# Block paramters first. In the exact order of MEM_FORMAT
|
# Block parameters first. In the exact order of MEM_FORMAT
|
||||||
setc = radio.SETC
|
setc = radio.SETC
|
||||||
setc.extend(radio.EX) # Menu A EX params
|
setc.extend(radio.EX) # Menu A EX params
|
||||||
setc.extend(radio.EX) # Menu B
|
setc.extend(radio.EX) # Menu B
|
||||||
@ -459,7 +459,7 @@ class TS480_CRadio(chirp_common.CloneModeRadio):
|
|||||||
# Settings read/write cmd sequence list
|
# Settings read/write cmd sequence list
|
||||||
SETC = ["AS0", "SS", "AG0", "AN", "FA", "FB",
|
SETC = ["AS0", "SS", "AG0", "AN", "FA", "FB",
|
||||||
"MF", "MG", "PC", "RG", "TY", "MF0"]
|
"MF", "MG", "PC", "RG", "TY", "MF0"]
|
||||||
# This is the TS-590SG MENU A/B read_settings paramter tuple list
|
# This is the TS-590SG MENU A/B read_settings parameter tuple list
|
||||||
# The order is mandatory; to match the Mem_Format sequence
|
# The order is mandatory; to match the Mem_Format sequence
|
||||||
EX = ["EX000", "EX003", "EX007", "EX008", "EX009", "EX010", "EX011",
|
EX = ["EX000", "EX003", "EX007", "EX008", "EX009", "EX010", "EX011",
|
||||||
"EX012", "EX013", "EX014", "EX021", "EX022", "EX048", "EX049",
|
"EX012", "EX013", "EX014", "EX021", "EX022", "EX048", "EX049",
|
||||||
@ -679,7 +679,7 @@ class TS480_CRadio(chirp_common.CloneModeRadio):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def _parse_mem_spec(self, spec0, spec1):
|
def _parse_mem_spec(self, spec0, spec1):
|
||||||
""" Extract ascii memory paramters; build data string """
|
""" Extract ascii memory parameters; build data string """
|
||||||
# spec0 is Rx freq string, spec1 is Tx
|
# spec0 is Rx freq string, spec1 is Tx
|
||||||
# pad string so indexes match Kenwood docs
|
# pad string so indexes match Kenwood docs
|
||||||
spec0 = "x" + spec0 # match CAT document 1-based description
|
spec0 = "x" + spec0 # match CAT document 1-based description
|
||||||
|
@ -330,7 +330,7 @@ def _read_settings(radio):
|
|||||||
""" Continue filling memory map"""
|
""" Continue filling memory map"""
|
||||||
global MEMSEL
|
global MEMSEL
|
||||||
# setc: the list of CAT commands for downloaded settings
|
# setc: the list of CAT commands for downloaded settings
|
||||||
# Block paramters first. In the exact order of MEM_FORMAT
|
# Block parameters first. In the exact order of MEM_FORMAT
|
||||||
setc = radio.SETC
|
setc = radio.SETC
|
||||||
setc.extend(radio.EX) # Menu A EX params
|
setc.extend(radio.EX) # Menu A EX params
|
||||||
setc.extend(radio.EX) # Menu B
|
setc.extend(radio.EX) # Menu B
|
||||||
@ -574,7 +574,7 @@ class TS590Radio(chirp_common.CloneModeRadio):
|
|||||||
# Settings read/write cmd sequence list
|
# Settings read/write cmd sequence list
|
||||||
SETC = ["AS0", "SS", "EQ", "AG0", "AN", "FA", "FB",
|
SETC = ["AS0", "SS", "EQ", "AG0", "AN", "FA", "FB",
|
||||||
"FV", "MF", "MG", "PC", "RG", "TP", "MF0"]
|
"FV", "MF", "MG", "PC", "RG", "TP", "MF0"]
|
||||||
# This is the TS-590SG MENU A/B read_settings paramter tuple list
|
# This is the TS-590SG MENU A/B read_settings parameter tuple list
|
||||||
# The order is mandatory; to match the Mem_Format sequence
|
# The order is mandatory; to match the Mem_Format sequence
|
||||||
EX = ["EX001", "EX002", "EX003", "EX005", "EX006", "EX007",
|
EX = ["EX001", "EX002", "EX003", "EX005", "EX006", "EX007",
|
||||||
"EX008", "EX009", "EX010", "EX011", "EX012", "EX013", "EX016",
|
"EX008", "EX009", "EX010", "EX011", "EX012", "EX013", "EX016",
|
||||||
@ -878,7 +878,7 @@ class TS590Radio(chirp_common.CloneModeRadio):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def _parse_mem_spec(self, spec0, spec1):
|
def _parse_mem_spec(self, spec0, spec1):
|
||||||
""" Extract ascii memory paramters; build data string """
|
""" Extract ascii memory parameters; build data string """
|
||||||
# spec0 is simplex result, spec1 is split
|
# spec0 is simplex result, spec1 is split
|
||||||
# pad string so indexes match Kenwood docs
|
# pad string so indexes match Kenwood docs
|
||||||
spec0 = "x" + spec0 # match CAT document 1-based description
|
spec0 = "x" + spec0 # match CAT document 1-based description
|
||||||
|
@ -420,12 +420,12 @@ def _do_ident(radio, magic, secondack=True):
|
|||||||
serial.write("\x02")
|
serial.write("\x02")
|
||||||
|
|
||||||
# Until recently, the "ident" returned by the radios supported by this
|
# Until recently, the "ident" returned by the radios supported by this
|
||||||
# driver have always been 8 bytes long. The image sturcture is the 8 byte
|
# driver have always been 8 bytes long. The image structure is the 8 byte
|
||||||
# "ident" followed by the downloaded memory data. So all of the settings
|
# "ident" followed by the downloaded memory data. So all of the settings
|
||||||
# structures are offset by 8 bytes. The ident returned from a UV-6 radio
|
# structures are offset by 8 bytes. The ident returned from a UV-6 radio
|
||||||
# can be 8 bytes (original model) or now 12 bytes.
|
# can be 8 bytes (original model) or now 12 bytes.
|
||||||
#
|
#
|
||||||
# To accomodate this, the "ident" is now read one byte at a time until the
|
# To accommodate this, the "ident" is now read one byte at a time until the
|
||||||
# last byte ("\xdd") is encountered. The bytes containing the value "\x01"
|
# last byte ("\xdd") is encountered. The bytes containing the value "\x01"
|
||||||
# are discarded to shrink the "ident" length down to 8 bytes to keep the
|
# are discarded to shrink the "ident" length down to 8 bytes to keep the
|
||||||
# image data aligned with the existing settings structures.
|
# image data aligned with the existing settings structures.
|
||||||
|
@ -93,12 +93,12 @@ struct {
|
|||||||
workmoda:1; // work mode (left side)
|
workmoda:1; // work mode (left side)
|
||||||
u8 scansb:1, // scan stop beep
|
u8 scansb:1, // scan stop beep
|
||||||
aftone:3, // af tone control
|
aftone:3, // af tone control
|
||||||
scand:1, // scan directon
|
scand:1, // scan direction
|
||||||
scanr:3; // scan resume
|
scanr:3; // scan resume
|
||||||
u8 rxexp:1, // rx expansion
|
u8 rxexp:1, // rx expansion
|
||||||
ptt:1, // ptt mode
|
ptt:1, // ptt mode
|
||||||
display:1, // display select (frequency/clock)
|
display:1, // display select (frequency/clock)
|
||||||
omode:1, // operaton mode
|
omode:1, // operation mode
|
||||||
beep:2, // beep volume
|
beep:2, // beep volume
|
||||||
spkr:2; // speaker
|
spkr:2; // speaker
|
||||||
u8 cpuclk:1, // operating mode(cpu clock)
|
u8 cpuclk:1, // operating mode(cpu clock)
|
||||||
@ -869,7 +869,7 @@ class VGCStyleRadio(chirp_common.CloneModeRadio,
|
|||||||
if dname and not dname.changed():
|
if dname and not dname.changed():
|
||||||
dname.value = False
|
dname.value = False
|
||||||
|
|
||||||
# reseting unknowns, this has to be set by hand
|
# resetting unknowns, this has to be set by hand
|
||||||
_mem.unknown0 = 0
|
_mem.unknown0 = 0
|
||||||
_mem.unknown1 = 0
|
_mem.unknown1 = 0
|
||||||
_mem.unknown2 = 0
|
_mem.unknown2 = 0
|
||||||
|
@ -106,7 +106,7 @@ class VX170Radio(ft7800.FTx800Radio):
|
|||||||
3. Press and hold in the [moni] key while turning the radio on.
|
3. Press and hold in the [moni] key while turning the radio on.
|
||||||
4. Select CLONE in menu, then press F. Radio restarts in clone mode.
|
4. Select CLONE in menu, then press F. Radio restarts in clone mode.
|
||||||
("CLONE" will appear on the display).
|
("CLONE" will appear on the display).
|
||||||
5. <b>After clicking OK</b>, breifly hold [PTT] key to send image.
|
5. <b>After clicking OK</b>, briefly hold [PTT] key to send image.
|
||||||
("-TX-" will appear on the LCD). """))
|
("-TX-" will appear on the LCD). """))
|
||||||
rp.pre_upload = _(dedent("""\
|
rp.pre_upload = _(dedent("""\
|
||||||
1. Turn radio off.
|
1. Turn radio off.
|
||||||
|
@ -775,7 +775,7 @@ class VX3Radio(yaesu_clone.YaesuCloneModeRadio):
|
|||||||
rs = RadioSetting(
|
rs = RadioSetting(
|
||||||
"my_key", "My key",
|
"my_key", "My key",
|
||||||
RadioSettingValueList(keys, keys[_settings.my_key - 16]))
|
RadioSettingValueList(keys, keys[_settings.my_key - 16]))
|
||||||
# TODO: fix keys list isnt exactly right order
|
# TODO: fix keys list isn't exactly right order
|
||||||
# leave disabled in settings for now
|
# leave disabled in settings for now
|
||||||
# basic.append(rs)
|
# basic.append(rs)
|
||||||
|
|
||||||
|
@ -823,7 +823,7 @@ class VX6Radio(yaesu_clone.YaesuCloneModeRadio):
|
|||||||
return self._get_settings()
|
return self._get_settings()
|
||||||
except:
|
except:
|
||||||
import traceback
|
import traceback
|
||||||
pring(traceback.format_exc())
|
print(traceback.format_exc())
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def set_settings(self, uisettings):
|
def set_settings(self, uisettings):
|
||||||
|
@ -379,12 +379,12 @@ class KGUVD1PRadio(chirp_common.CloneModeRadio,
|
|||||||
50, 174, decode_freq(
|
50, 174, decode_freq(
|
||||||
self._memobj.freq_ranges.vhf_tx_stop)))
|
self._memobj.freq_ranges.vhf_tx_stop)))
|
||||||
freq_ranges.append(rs)
|
freq_ranges.append(rs)
|
||||||
rs = RadioSetting("uhf_tx_start", "2st band TX Lower Limit (MHz)",
|
rs = RadioSetting("uhf_tx_start", "2nd band TX Lower Limit (MHz)",
|
||||||
RadioSettingValueInteger(
|
RadioSettingValueInteger(
|
||||||
136, 520, decode_freq(
|
136, 520, decode_freq(
|
||||||
self._memobj.freq_ranges.uhf_tx_start)))
|
self._memobj.freq_ranges.uhf_tx_start)))
|
||||||
freq_ranges.append(rs)
|
freq_ranges.append(rs)
|
||||||
rs = RadioSetting("uhf_tx_stop", "2st band TX Upper Limit (MHz)",
|
rs = RadioSetting("uhf_tx_stop", "2nd band TX Upper Limit (MHz)",
|
||||||
RadioSettingValueInteger(
|
RadioSettingValueInteger(
|
||||||
136, 520, decode_freq(
|
136, 520, decode_freq(
|
||||||
self._memobj.freq_ranges.uhf_tx_stop)))
|
self._memobj.freq_ranges.uhf_tx_stop)))
|
||||||
|
@ -504,7 +504,7 @@ def install_module(domain, localedir):
|
|||||||
:returns: an anonymous function object, based on domain and localedir.
|
:returns: an anonymous function object, based on domain and localedir.
|
||||||
Codeset is always UTF-8.
|
Codeset is always UTF-8.
|
||||||
|
|
||||||
You may find this function usefull when writing localized modules.
|
You may find this function useful when writing localized modules.
|
||||||
Use this code to make _() available to your module:
|
Use this code to make _() available to your module:
|
||||||
|
|
||||||
.. sourcecode:: python
|
.. sourcecode:: python
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
|
|
||||||
r"""
|
r"""
|
||||||
The chirp.logger module provides the core logging facilties for CHIRP.
|
The chirp.logger module provides the core logging facilities for CHIRP.
|
||||||
It sets up the console and (optionally) a log file. For early debugging,
|
It sets up the console and (optionally) a log file. For early debugging,
|
||||||
it checks the CHIRP_DEBUG, CHIRP_LOG, and CHIRP_LOG_LEVEL environment
|
it checks the CHIRP_DEBUG, CHIRP_LOG, and CHIRP_LOG_LEVEL environment
|
||||||
variables.
|
variables.
|
||||||
|
@ -374,9 +374,9 @@ class MemoryEditor(common.Editor):
|
|||||||
|
|
||||||
# Verify a change was made
|
# Verify a change was made
|
||||||
if new == prev:
|
if new == prev:
|
||||||
# Restore all columns to their orginal values, a given editor
|
# Restore all columns to their original values, a given editor
|
||||||
# may modify mutliple columns so we need to restore each of them
|
# may modify multiple columns so we need to restore each of them
|
||||||
# to their previous values in order to restore the orginal state.
|
# to their previous values in order to restore the original state.
|
||||||
self._restore(iter, vals)
|
self._restore(iter, vals)
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -389,7 +389,7 @@ class MemoryEditor(common.Editor):
|
|||||||
if msgs:
|
if msgs:
|
||||||
common.show_error(_("Error setting memory") + ": " +
|
common.show_error(_("Error setting memory") + ": " +
|
||||||
"\r\n\r\n".join(msgs))
|
"\r\n\r\n".join(msgs))
|
||||||
# Restore to orginal values and exit
|
# Restore to original values and exit
|
||||||
self._restore(iter, vals)
|
self._restore(iter, vals)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
2
chirpc
2
chirpc
@ -63,7 +63,7 @@ class DTCSPolarityAction(argparse.Action):
|
|||||||
value = values[0]
|
value = values[0]
|
||||||
if value not in ["NN", "RN", "NR", "RR"]:
|
if value not in ["NN", "RN", "NR", "RR"]:
|
||||||
raise argparse.ArgumentError(
|
raise argparse.ArgumentError(
|
||||||
self, "Invaid DTCS polarity: %s" % value)
|
self, "Invalid DTCS polarity: %s" % value)
|
||||||
setattr(namespace, self.dest, value)
|
setattr(namespace, self.dest, value)
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
# by the Free Software Foundation, either version 3 of the License, or (at
|
# by the Free Software Foundation, either version 3 of the License, or (at
|
||||||
# your option) any later version.
|
# your option) any later version.
|
||||||
#
|
#
|
||||||
# This sofware is distributed in the hope that it will be useful, but WITHOUT
|
# This software is distributed in the hope that it will be useful, but WITHOUT
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
||||||
# License for more details.
|
# License for more details.
|
||||||
|
@ -94,7 +94,7 @@ void hexdump(char *buf, int len, FILE *dest)
|
|||||||
*
|
*
|
||||||
* The amendment of this procedure to support the "total_hex" variable
|
* The amendment of this procedure to support the "total_hex" variable
|
||||||
* allows for the user to pass a command line argument instantiating a
|
* allows for the user to pass a command line argument instantiating a
|
||||||
* desired number of hexadecimal bytes (and their ASCII equivelent) to
|
* desired number of hexadecimal bytes (and their ASCII equivalent) to
|
||||||
* be displayed.
|
* be displayed.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user