[chirp_devel] [FT-60] Memory Bank Support #2
Kosta Arvanitis
Thu Jan 15 20:08:35 PST 2015
# HG changeset patch
# User K. Arvanitis <kosta at alumni.uvic.ca>
# Date 1420944648 28800
# Node ID 0ada7c23788e9dcac6160d3104e5f448e53af396
# Parent 0ccddc8155647a3fb78d2eda13b098e7c2b59f94
[FT-60] Add Memory Bank Support
Implments a basic BankModel for Yaesu FT-60r in support of memory at address 0x69C8.
Bug #1945
Bug #675
diff -r 0ccddc815564 -r 0ada7c23788e chirp/ft60.py
--- a/chirp/ft60.py Thu Jan 01 19:02:09 2015 +0100
+++ b/chirp/ft60.py Sat Jan 10 18:50:48 2015 -0800
@@ -148,6 +148,11 @@
unknown2:7;
} names[1000];
+#seekto 0x69C8;
+struct {
+ bbcd memory[128];
+} banks[10];
+
#seekto 0x6FC8;
u8 checksum;
"""
@@ -161,6 +166,49 @@
SKIPS = ["", "S", "P"]
CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ [?]^__|`?$%&-()*+,-,/|;/=>?@"
+class FT60BankModel(chirp_common.BankModel):
+ def get_num_mappings(self):
+ return 10
+
+ def get_mappings(self):
+ banks = []
+ for i in range(0, self.get_num_mappings()):
+ bank = chirp_common.Bank(self, "%i" % (i + 1), "Bank %i" % (i + 1))
+ bank.index = i
+ banks.append(bank)
+ return banks
+
+ def add_memory_to_mapping(self, memory, bank):
+ number = (memory.number - 1) / 8
+ mask = 1 << ((memory.number - 1) & 7)
+ self._radio._memobj.banks[bank.index].memory[number].set_bits(mask)
+
+ def remove_memory_from_mapping(self, memory, bank):
+ number = (memory.number - 1) / 8
+ mask = 1 << ((memory.number - 1) & 7)
+ if self._radio._memobj.banks[bank.index].memory[number].get_bits(mask) != mask:
+ raise Exception("Memory %i is not in bank %s." % \
+ (memory.number, bank))
+ self._radio._memobj.banks[bank.index].memory[number].clr_bits(mask)
+
+ def get_mapping_memories(self, bank):
+ memories = []
+ for i in range(*self._radio.get_features().memory_bounds):
+ number = (i - 1) / 8
+ mask = 1 << ((i - 1) & 7)
+ if self._radio._memobj.banks[bank.index].memory[number].get_bits(mask) == mask:
+ memories.append(self._radio.get_memory(i))
+ return memories
+
+ def get_memory_mappings(self, memory):
+ banks = []
+ for bank in self.get_mappings():
+ number = (memory.number - 1) / 8
+ mask = 1 << ((memory.number - 1) & 7)
+ if self._radio._memobj.banks[bank.index].memory[number].get_bits(mask) == mask:
+ banks.append(bank)
+ return banks
+
@directory.register
class FT60Radio(yaesu_clone.YaesuCloneModeRadio):
"""Yaesu FT-60"""
@@ -206,11 +254,14 @@
rf.valid_bands = [(108000000, 520000000), (700000000, 999990000)]
rf.can_odd_split = True
rf.has_ctone = False
- rf.has_bank = False
+ rf.has_bank = True
rf.has_dtcs_polarity = False
return rf
+ def get_bank_model(self):
+ return FT60BankModel(self)
+
def _checksums(self):
return [ yaesu_clone.YaesuChecksum(0x0000, 0x6FC7) ]
More information about the chirp_devel
mailing list