[chirp_devel] [PATCH] [FT-60] Fix Memory Bounds and Seek Offsets
Kosta Arvanitis
Sun Jan 11 00:01:10 PST 2015
Good questions.
First, the ft-60 memory is zero indexed (0-999) however, the radio itself displays memories as (1-1000). This change mimics the behaviour of the radio more closely, in that the user in the chirp app will see memories labeled 1-1000 as in the radio.
Second, the decoding/encoding of the name was not altered in any way from the original implementation as continues to pass unit test for this. ie: invalid characters continue to be replaced with ' ', as to why this is case I am not sure as I would expect either a truncation or invalid char to be displayed.
-kosta
________________________________
> From: stickpatrick at gmail.com
> To: chirp_devel at intrepid.danplanet.com
> Date: Sun, 11 Jan 2015 06:09:04 +0000
> Subject: [chirp_devel] Re: [PATCH] [FT-60] Fix Memory Bounds and Seek Offsets
>
> I'll give this a try tomorrow, but 2 questions:
> From the radio standpoint, is the memory laid out as 000-999, or 1-999,
> then 000?
> Or to put it another way - will CHIRP display the radio's 000 as 1000 or 0?
>
> (this one is for Dan) - it looks like this replaces invalid characters
> with ' 'rather than truncating them. Is this the desired behavior?
> When I fixed a similar bug for the TH-D7, I preserved the existing
> truncation behavior rather than replacing with ' ‘
>
> Sent from Windows Mail
>
> From: Kosta Arvanitis<mailto:kosta at alumni.uvic.ca>
> Sent: Saturday, January 10, 2015 7:40 PM
> To: chirp_devel at intrepid.danplanet.com<mailto:chirp_devel at intrepid.danplanet.com>
>
> # HG changeset patch
> # User K. Arvanitis <kosta at alumni.uvic.ca>
> # Date 1420442263 28800
> # Sun Jan 04 23:17:43 2015 -0800
> # Node ID 15c8e53a218702d708f5a018c115965dd2fdbb0c
> # Parent 9e67e7ba60e0fd2accd89d899735b5040da8032b
> [FT-60] Fix Memory Bounds and Seek Offsets
>
> This adjusts the memory bounds of the Yaesu FT-60 to include all 1000
> memory channels, in addition the seek offsets were adjusted to align
> correctly to their appropriate memory locations.
>
> diff -r 9e67e7ba60e0 -r 15c8e53a2187 chirp/ft60.py
> --- a/chirp/ft60.py Sun Jan 04 23:15:45 2015 -0800
> +++ b/chirp/ft60.py Sun Jan 04 23:17:43 2015 -0800
> @@ -104,9 +104,31 @@
> flags += 0x40
> return freqraw, flags
>
> +def _decode_name(mem):
> + name = ""
> + for i in mem:
> + if i == 0xFF:
> + break
> + try:
> + name += CHARSET[i]
> + except IndexError:
> + print "Unknown char index: %i " % (i)
> + return name
> +
> +
> +def _encode_name(mem):
> + name = [None]*6
> + for i in range(0, 6):
> + try:
> + name[i] = CHARSET.index(mem[i])
> + except IndexError:
> + name[i] = CHARSET.index(" ")
> +
> + return name
> +
>
> MEM_FORMAT = """
> -#seekto 0x0238;
> +#seekto 0x0248;
> struct {
> u8 used:1,
> unknown1:1,
> @@ -129,7 +151,7 @@
> } memory[1000];
>
> #seekto 0x6EC8;
> -// skips:2 for Memory M in [1, 1000] is in skipflags[(M-1)/4].skip((M-1)%4).
> +// skips:2 for Memory M in [1, 1000] is in flags[(M-1)/4].skip((M-1)%4).
> // Interpret with SKIPS[].
> // PMS memories L0 - U50 aka memory 1001 - 1100 don't have skip flags.
> struct {
> @@ -137,9 +159,9 @@
> skip2:2,
> skip1:2,
> skip0:2;
> -} skipflags[250];
> +} flags[250];
>
> -#seekto 0x4700;
> +#seekto 0x4708;
> struct {
> u8 name[6];
> u8 use_name:1,
> @@ -239,7 +261,7 @@
>
> def get_features(self):
> rf = chirp_common.RadioFeatures()
> - rf.memory_bounds = (1, 999)
> + rf.memory_bounds = (1, 1000)
> rf.valid_duplexes = DUPLEX
> rf.valid_tmodes = TMODES
> rf.valid_power_levels = POWER_LEVELS
> @@ -285,18 +307,16 @@
> self._memobj = bitwise.parse(MEM_FORMAT, self._mmap)
>
> def get_raw_memory(self, number):
> - _array_index = number - 1
> - return repr(self._memobj.memory[number]) + \
> - repr(self._memobj.skipflags[_array_index/4]) + \
> - repr(self._memobj.names[number])
> + return repr(self._memobj.memory[number - 1]) + \
> + repr(self._memobj.flags[(number - 1) / 4]) + \
> + repr(self._memobj.names[number - 1])
>
> def get_memory(self, number):
> - _array_index = number - 1
> - _mem = self._memobj.memory[number]
> - _skp = self._memobj.skipflags[_array_index/4]
> - _nam = self._memobj.names[number]
> + _mem = self._memobj.memory[number - 1]
> + _skp = self._memobj.flags[(number - 1) / 4]
> + _nam = self._memobj.names[number - 1]
>
> - skip = _skp["skip%i" % (_array_index%4)]
> + skip = _skp["skip%i" % ((number - 1) % 4)]
>
> mem = chirp_common.Memory()
> mem.number = number
> @@ -320,22 +340,14 @@
> mem.skip = SKIPS[skip]
>
> if _nam.use_name and _nam.valid:
> - for i in _nam.name:
> - if i == 0xFF:
> - break
> - try:
> - mem.name += CHARSET[i]
> - except IndexError:
> - print "Memory %i: Unknown char index: %i " % (number, i)
> - mem.name = mem.name.rstrip()
> + mem.name = _decode_name(_nam.name).rstrip()
>
> return mem
>
> def set_memory(self, mem):
> - _array_index = mem.number - 1
> - _mem = self._memobj.memory[mem.number]
> - _skp = self._memobj.skipflags[_array_index/4]
> - _nam = self._memobj.names[mem.number]
> + _mem = self._memobj.memory[mem.number - 1]
> + _skp = self._memobj.flags[(mem.number - 1) / 4]
> + _nam = self._memobj.names[mem.number - 1]
>
> if mem.empty:
> _mem.used = False
> @@ -364,13 +376,8 @@
> _mem.isam = mem.mode == "AM"
> _mem.step = STEPS.index(mem.tuning_step)
>
> - _skp["skip%i" % (_array_index%4)] = SKIPS.index(mem.skip)
> + _skp["skip%i" % ((mem.number - 1) % 4)] = SKIPS.index(mem.skip)
>
> - for i in range(0, 6):
> - try:
> - _nam.name[i] = CHARSET.index(mem.name[i])
> - except IndexError:
> - _nam.name[i] = CHARSET.index(" ")
> -
> + _nam.name = _encode_name(mem.name)
> _nam.use_name = mem.name.strip() and True or False
> _nam.valid = _nam.use_name
> _______________________________________________
> chirp_devel mailing list
> chirp_devel at intrepid.danplanet.com
> http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
> Developer docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers
>
> _______________________________________________ chirp_devel mailing
> list chirp_devel at intrepid.danplanet.com
> http://intrepid.danplanet.com/mailman/listinfo/chirp_devel Developer
> docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers
More information about the chirp_devel
mailing list