[chirp_devel] [PATCH] [FT-70] #5329 Corrects handling of Mycall string – Thanks Fred
# HG changeset patch # User Nicolas Pike nicolas.jon.pike@gmail.com # Date 1525293803 -3600 # Wed May 02 21:43:23 2018 +0100 # Node ID c03cbe42c1eb1e47d2582c0cf08bc4fce43d6def # Parent bbbe50c6a1e5384375cd63f7d1a0254d9f8422a4 [FT-70] #5329 Corrects handling of Mycall string – Thanks Fred.
diff -r bbbe50c6a1e5 -r c03cbe42c1eb chirp/drivers/ft70.py --- a/chirp/drivers/ft70.py Wed Apr 11 11:12:01 2018 -0700 +++ b/chirp/drivers/ft70.py Wed May 02 21:43:23 2018 +0100 @@ -23,7 +23,7 @@ RadioSettingValueList, RadioSettingValueBoolean, \ InvalidValueError from textwrap import dedent - +import string LOG = logging.getLogger(__name__)
# Testing @@ -339,7 +339,8 @@ MEM_CALLSIGN_FORMAT = """ #seekto 0x0ced0; struct { - char padded_string[10]; // 63 MYCALL Set the call sign. (up to 10 characters) + char callsign[10]; // 63 MYCALL Set the call sign. (up to 10 characters) + u16 charset; // character set ID } my_call; """
@@ -527,6 +528,8 @@ _GM_RING = ("OFF", "IN RING", "AlWAYS") _GM_INTERVAL = ("LONG", "NORMAL", "OFF")
+ _MYCALL_CHR_SET = list(string.uppercase) + list(string.digits) + ['-','/' ] + @classmethod def get_prompts(cls): rp = chirp_common.RadioPrompts() @@ -937,7 +940,16 @@
def _get_digital_settings(self): menu = RadioSettingGroup("digital_settings", "Digital") - + + # MYCALL + mycall = self._memobj.my_call + mycallstr = str(mycall.callsign).rstrip("\xFF") + + mycallentry = RadioSettingValueString(0, 10, mycallstr, False, charset=self._MYCALL_CHR_SET) + rs = RadioSetting('mycall.callsign', 'MYCALL', mycallentry) + rs.set_apply_callback(self.apply_mycall, mycall) + menu.append(rs) + # Short Press AMS button AMS TX Mode
digital_settings = self._memobj.digital_settings @@ -1170,3 +1182,10 @@ rawval = setting.value.get_value() val = 0 if cls._DIG_POP_UP.index(rawval) == 0 else cls._DIG_POP_UP.index(rawval) + 9 obj.digital_popup = val + + def apply_mycall(cls, setting, obj): + cs = setting.value.get_value() + if cs[0] in ('-', '/'): + raise InvalidValueError("First character of call sign can't be - or /: {0:s}".format(cs)) + else: + obj.callsign = cls._add_ff_pad(cs.rstrip(), 10)
@@ -937,7 +940,16 @@
def _get_digital_settings(self): menu = RadioSettingGroup("digital_settings", "Digital")
You're adding a line with leading whitespace here.
# MYCALL
mycall = self._memobj.my_call
mycallstr = str(mycall.callsign).rstrip("\xFF")
Maybe it would be better to filter this to our known charset, in case there's something else in there besides \xFF? I say this because in my experience, Yaesu radios don't ever really clear memory so if you got something invalid in there somehow, we might never get it out. What about:
mycallstr = ''.join(x for x in str(mycall.callsign) if x in self._MYCALL_CHR_SET)
?
--Dan
@@ -937,7 +940,16 @@
def _get_digital_settings(self): menu = RadioSettingGroup("digital_settings", "Digital")
You're adding a line with leading whitespace here.
I fixed this and one other instance I found and pushed this to the repo.
# MYCALL
mycall = self._memobj.my_call
mycallstr = str(mycall.callsign).rstrip("\xFF")
Maybe it would be better to filter this to our known charset, in case there's something else in there besides \xFF? I say this because in my experience, Yaesu radios don't ever really clear memory so if you got something invalid in there somehow, we might never get it out. What about:
mycallstr = ''.join(x for x in str(mycall.callsign) if x in self._MYCALL_CHR_SET)
I still think this is probably worthwhile.
--Dan
participants (2)
-
Dan Smith
-
nicolas jon pike