[chirp_devel] [PATCH] [ft857/897] Safe convert Yaesu char sequences to string
Marco Filippi IZ3GME
Mon Nov 23 10:34:24 PST 2015
# HG changeset patch
# User Marco Filippi <iz3gme.marco at gmail.com>
# Date 1448303630 -3600
# Mon Nov 23 19:33:50 2015 +0100
# Node ID 59f64701ea49dc7558955f0b4f1efbfcec2d3605
# Parent 833076e84df1b34708e44ddce138638faef6e837
[ft857/897] Safe convert Yaesu char sequences to string
Sometime in beacon text (or similar settings) an unknown char can be found, we
now convert those settings to string in a safer way
Fix #3017
diff -r 833076e84df1 -r 59f64701ea49 chirp/drivers/ft857.py
--- a/chirp/drivers/ft857.py Tue Nov 17 05:55:32 2015 -0600
+++ b/chirp/drivers/ft857.py Mon Nov 23 19:33:50 2015 +0100
@@ -25,6 +25,7 @@
import os
import logging
from textwrap import dedent
+from chirp.util import safe_charset_string
LOG = logging.getLogger(__name__)
@@ -569,29 +570,34 @@
RadioSettingValueBoolean(_settings.arts_id))
extended.append(rs)
st = RadioSettingValueString(0, 10,
- ''.join([self._CALLSIGN_CHARSET[x]
- for x in self._memobj.arts_idw]))
+ safe_charset_string(
+ self._memobj.arts_idw,
+ self._CALLSIGN_CHARSET)
+ )
st.set_charset(self._CALLSIGN_CHARSET)
rs = RadioSetting("arts_idw", "ARTS IDW", st)
extended.append(rs)
st = RadioSettingValueString(0, 40,
- ''.join([self._BEACON_CHARSET[x]
- for x in self._memobj.beacon_text1
- ]))
+ safe_charset_string(
+ self._memobj.beacon_text1,
+ self._BEACON_CHARSET)
+ )
st.set_charset(self._BEACON_CHARSET)
rs = RadioSetting("beacon_text1", "Beacon text1", st)
extended.append(rs)
st = RadioSettingValueString(0, 40,
- ''.join([self._BEACON_CHARSET[x]
- for x in
- self._memobj.beacon_text2]))
+ safe_charset_string(
+ self._memobj.beacon_text2,
+ self._BEACON_CHARSET)
+ )
st.set_charset(self._BEACON_CHARSET)
rs = RadioSetting("beacon_text2", "Beacon text2", st)
extended.append(rs)
st = RadioSettingValueString(0, 40,
- ''.join([self._BEACON_CHARSET[x]
- for x in
- self._memobj.beacon_text3]))
+ safe_charset_string(
+ self._memobj.beacon_text3,
+ self._BEACON_CHARSET)
+ )
st.set_charset(self._BEACON_CHARSET)
rs = RadioSetting("beacon_text3", "Beacon text3", st)
extended.append(rs)
@@ -856,16 +862,18 @@
RadioSettingValueInteger(0, 100, _settings.nb_level))
basic.append(rs)
st = RadioSettingValueString(0, 4,
- ''.join([self._CALLSIGN_CHARSET[x]
- for x in
- self._memobj.op_filter1_name]))
+ safe_charset_string(
+ self._memobj.op_filter1_name,
+ self._CALLSIGN_CHARSET)
+ )
st.set_charset(self._CALLSIGN_CHARSET)
rs = RadioSetting("op_filter1_name", "Optional filter1 name", st)
extended.append(rs)
st = RadioSettingValueString(0, 4,
- ''.join([self._CALLSIGN_CHARSET[x]
- for x in
- self._memobj.op_filter2_name]))
+ safe_charset_string(
+ self._memobj.op_filter2_name,
+ self._CALLSIGN_CHARSET)
+ )
st.set_charset(self._CALLSIGN_CHARSET)
rs = RadioSetting("op_filter2_name", "Optional filter2 name", st)
extended.append(rs)
diff -r 833076e84df1 -r 59f64701ea49 chirp/util.py
--- a/chirp/util.py Tue Nov 17 05:55:32 2015 -0600
+++ b/chirp/util.py Mon Nov 23 19:33:50 2015 +0100
@@ -94,3 +94,16 @@
for k, v in thedict.items():
_dict[v] = k
return _dict[value]
+
+
+def safe_charset_string(indexes, charset, safechar = " "):
+ """Return a string from an array of charset indexes,
+ replaces out of charset values with safechar"""
+ assert safechar in charset
+ _string = ""
+ for i in indexes:
+ try:
+ _string += charset[i]
+ except IndexError:
+ _string += safechar
+ return _string
\ No newline at end of file
More information about the chirp_devel
mailing list