[chirp_devel] [PATCH] [FT-60] Adding support for PMS channels
Marco Filippi IZ3GME
Thu Feb 26 03:08:53 PST 2015
HI!
I don't really remember why but we used negative index for special
memories ... probably Dan can tell if it's a must ...
You can look to ft817 driver for a sample.
73 de IZ3GME Marco
On 26/02/2015 09:40, K. Arvanitis wrote:
> # HG changeset patch
> # User K. Arvanitis <kosta at alumni.uvic.ca>
> # Date 1424938909 28800
> # Thu Feb 26 00:21:49 2015 -0800
> # Node ID 51e10c5f7447b6b025514d75d03215b9d4088479
> # Parent 81465a9a288b84f8fd835ceaaf8e3eb249d5bbd0
> [FT-60] Adding support for PMS channels
>
> Added special channel support for yasue programmable memory scan channels:
> L1 - L50 and U1 - U50.
>
> Bug #2367
>
> diff -r 81465a9a288b -r 51e10c5f7447 chirp/ft60.py
> --- a/chirp/ft60.py Wed Feb 25 08:17:24 2015 -0800
> +++ b/chirp/ft60.py Thu Feb 26 00:21:49 2015 -0800
> @@ -204,8 +204,7 @@
> #seekto 0x09E;
> ul16 mbs;
>
> -#seekto 0x0248;
> -struct {
> +struct mem {
> u8 used:1,
> unknown1:1,
> isnarrow:1,
> @@ -224,7 +223,13 @@
> u8 unknown5[2];
> u8 offset;
> u8 unknown6[3];
> -} memory[1000];
> +};
> +
> +#seekto 0x0248;
> +struct mem memory[1000];
> +
> +#seekto 0x40c8;
> +struct mem pms[100];
>
> #seekto 0x6EC8;
> // skips:2 for Memory M in [1, 1000] is in flags[(M-1)/4].skip((M-1)%4).
> @@ -263,6 +268,8 @@
> STEPS = [5.0, 10.0, 12.5, 15.0, 20.0, 25.0, 50.0, 100.0]
> SKIPS = ["", "S", "P"]
> CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ [?]^__|`?$%&-()*+,-,/|;/=>?@"
> +SPECIALS = ["%s%d" % (c,i+1) for i in range(0, 50) for c in ('L', 'U') ]
> +
>
> class FT60BankModel(chirp_common.BankModel):
> def get_num_mappings(self):
> @@ -346,6 +353,7 @@
> rf.valid_power_levels = POWER_LEVELS
> rf.valid_tuning_steps = STEPS
> rf.valid_skips = SKIPS
> + rf.valid_special_chans = SPECIALS
> rf.valid_characters = CHARSET
> rf.valid_name_length = 6
> rf.valid_modes = ["FM", "NFM", "AM"]
> @@ -629,14 +637,28 @@
> repr(self._memobj.names[number - 1])
>
> def get_memory(self, number):
> - _mem = self._memobj.memory[number - 1]
> - _skp = self._memobj.flags[(number - 1) / 4]
> - _nam = self._memobj.names[number - 1]
> +
> + mem = chirp_common.Memory()
>
> - skip = _skp["skip%i" % ((number - 1) % 4)]
> -
> - mem = chirp_common.Memory()
> - mem.number = number
> + if isinstance(number, str):
> + # pms channel
> + mem.number = 1001 + SPECIALS.index(number)
> + mem.extd_number = number
> + mem.immutable = ["number", "extd_number", "name", "skip"]
> + _mem = self._memobj.pms[mem.number - 1001]
> + _nam = _skp = None
> + elif number > 1000:
> + # pms channel
> + mem.number = number
> + mem.extd_number = SPECIALS[number - 1001]
> + mem.immutable = ["number", "extd_number", "name", "skip"]
> + _mem = self._memobj.pms[mem.number - 1001]
> + _nam = _skp = None
> + else:
> + mem.number = number
> + _mem = self._memobj.memory[mem.number - 1]
> + _nam = self._memobj.names[mem.number - 1]
> + _skp = self._memobj.flags[(mem.number - 1) / 4]
>
> if not _mem.used:
> mem.empty = True
> @@ -644,7 +666,6 @@
>
> mem.freq = _decode_freq(_mem.freq)
> mem.offset = int(_mem.offset) * 50000
> -
> mem.duplex = DUPLEX[_mem.duplex]
> if mem.duplex == "split":
> mem.offset = _decode_freq(_mem.tx_freq)
> @@ -654,26 +675,36 @@
> mem.power = POWER_LEVELS[_mem.power]
> mem.mode = _mem.isam and "AM" or _mem.isnarrow and "NFM" or "FM"
> mem.tuning_step = STEPS[_mem.step]
> - mem.skip = SKIPS[skip]
>
> - if _nam.use_name and _nam.valid:
> - mem.name = _decode_name(_nam.name).rstrip()
> + if not _skp is None:
> + skip = _skp["skip%i" % ((mem.number - 1) % 4)]
> + mem.skip = SKIPS[skip]
> +
> + if not _nam is None:
> + if _nam.use_name and _nam.valid:
> + mem.name = _decode_name(_nam.name).rstrip()
>
> return mem
>
> def set_memory(self, mem):
> - _mem = self._memobj.memory[mem.number - 1]
> - _skp = self._memobj.flags[(mem.number - 1) / 4]
> - _nam = self._memobj.names[mem.number - 1]
>
> + if mem.number > 1000:
> + # pms channel
> + _mem = self._memobj.pms[mem.number - 1001]
> + _nam = _skp = None
> + else:
> + _mem = self._memobj.memory[mem.number - 1]
> + _nam = self._memobj.names[mem.number - 1]
> + _skp = self._memobj.flags[(mem.number - 1) / 4]
> +
> + assert(_mem)
> if mem.empty:
> _mem.used = False
> return
> -
> +
> if not _mem.used:
> _mem.set_raw("\x00" * 16)
> _mem.used = 1
> - print "Wiped"
>
> _mem.freq, flags = _encode_freq(mem.freq)
> _mem.freq[0].set_bits(flags)
> @@ -693,8 +724,10 @@
> _mem.isam = mem.mode == "AM"
> _mem.step = STEPS.index(mem.tuning_step)
>
> - _skp["skip%i" % ((mem.number - 1) % 4)] = SKIPS.index(mem.skip)
> + if not _skp is None:
> + _skp["skip%i" % ((mem.number - 1) % 4)] = SKIPS.index(mem.skip)
>
> - _nam.name = _encode_name(mem.name)
> - _nam.use_name = mem.name.strip() and True or False
> - _nam.valid = _nam.use_name
> + if not _nam is None:
> + _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
>
More information about the chirp_devel
mailing list