[chirp_devel] [PATCH] [ID-31] Fix for Skip/PSkip Issue with cetain Icom Radios (#2787)
Eric Dropps
Sun Oct 11 10:04:44 PDT 2015
# HG changeset patch
# User kc1ckh at arrl.net
# Date 1444583063 14400
# Sun Oct 11 13:04:23 2015 -0400
# Node ID 50127447a0cda31521761f42ff646f1bfdceb7b3
# Parent a4eba5650b19692607ddb3cb3561a3d8acfe69ba
[ID-31] Fix for Skip/PSkip Issue with cetain Icom Radios (#2787)
diff -r a4eba5650b19 -r 50127447a0cd chirp/drivers/id31.py
--- a/chirp/drivers/id31.py Wed Jul 01 10:14:53 2015 -0700
+++ b/chirp/drivers/id31.py Sun Oct 11 13:04:23 2015 -0400
@@ -254,7 +254,7 @@
if _psk & bit:
mem.skip = "P"
- if _skp & bit:
+ elif _skp & bit:
mem.skip = "S"
return mem
@@ -297,7 +297,7 @@
_skp |= bit
_psk &= ~bit
elif memory.skip == "P":
- _skp &= ~bit
+ _skp |= bit
_psk |= bit
else:
_skp &= ~bit
diff -r a4eba5650b19 -r 50127447a0cd chirp/drivers/id51plus.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/chirp/drivers/id51plus.py Sun Oct 11 13:04:23 2015 -0400
@@ -0,0 +1,152 @@
+# Copyright 2012 Dan Smith <dsmith at danplanet.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from chirp.drivers import id31
+from chirp import directory, bitwise
+
+MEM_FORMAT = """
+struct {
+ u24 freq;
+ u16 offset;
+ u16 rtone:6,
+ ctone:6,
+ unknown2:1,
+ mode:3;
+ u8 dtcs;
+ u8 tune_step:4,
+ unknown5:4;
+ u8 unknown4;
+ u8 tmode:4,
+ duplex:2,
+ dtcs_polarity:2;
+ char name[16];
+ u8 unknown13;
+ u8 urcall[7];
+ u8 rpt1call[7];
+ u8 rpt2call[7];
+} memory[500];
+
+#seekto 0x6A40;
+u8 used_flags[70];
+
+#seekto 0x6A86;
+u8 skip_flags[69];
+
+#seekto 0x6ACB;
+u8 pskp_flags[69];
+
+#seekto 0x6B40;
+struct {
+ u8 bank;
+ u8 index;
+} banks[500];
+
+#seekto 0x6FD0;
+struct {
+ char name[16];
+} bank_names[26];
+
+
+#seekto 0xA8C0;
+struct {
+ u24 freq;
+ u16 offset;
+ u8 unknown1[4];
+ u8 call[7];
+ char name[16];
+ char subname[8];
+ u8 unknown3[10];
+} repeaters[750];
+
+#seekto 0x1384E;
+struct {
+ u8 call[7];
+} rptcall[750];
+
+#seekto 0x14FBE;
+struct {
+ char name[16];
+} rptgroup_names[30];
+
+#seekto 0x1519E;
+struct {
+ char call[8];
+ char tag[4];
+} mycall[6];
+
+#seekto 0x151E6;
+struct {
+ char call[8];
+} urcall[200];
+
+#seekto 0x15826;
+struct {
+ char name[16];
+} urcallname[200];
+"""
+
+
+ at directory.register
+class ID51PLUSRadio(id31.ID31Radio):
+ """Icom ID-51 Plus"""
+ MODEL = "ID-51A Plus"
+
+ _memsize = 0x1FB40
+ _model = "\x33\x90\x00\x02"
+ _endframe = "Icom Inc\x2E\x44\x41"
+
+ _ranges = [(0x00000, 0x1FB40, 32)]
+
+ MODES = {0: "FM", 1: "NFM", 3: "AM", 5: "DV"}
+
+ def _get_bank(self, loc):
+ _bank = self._memobj.banks[loc]
+ if _bank.bank == 0x1F:
+ return None
+ elif _bank.bank > 0x1F:
+ # Sometime the bank is 32(dec) higher, don't know why
+ return (_bank.bank - 32)
+ else:
+ return _bank.bank
+
+ def _set_bank(self, loc, bank):
+ _bank = self._memobj.banks[loc]
+ if bank is None:
+ _bank.bank = 0x1F
+ else:
+ _bank.bank = bank
+
+ def get_features(self):
+ rf = super(ID51PLUSRadio, self).get_features()
+ rf.valid_bands = [(108000000, 174000000), (400000000, 479000000)]
+ return rf
+
+ def get_repeater_call_list(self):
+ calls = []
+ # Unlike previos DStar radios, there is not a seperate repeater callsign list.
+ # It's only the DV Memory banks.
+ #for rptcall in self._memobj.rptcall:
+ # call = _decode_call(rptcall.call)
+ # if call.rstrip() and not call == "CALLSIGN":
+ # calls.append(call)
+ for repeater in self._memobj.repeaters:
+ call = id31._decode_call(repeater.call)
+ if call == "CALLSIGN":
+ call = ""
+ calls.append(call.rstrip())
+ return calls
+
+ def process_mmap(self):
+ self._memobj = bitwise.parse(MEM_FORMAT, self._mmap)
More information about the chirp_devel
mailing list