[chirp_devel] [PATCH] [FT1D] Fix test for backtrack code - issue #4877
Angus Ainslie
Sun Jun 4 11:57:55 PDT 2017
# HG changeset patch
# User Angus Ainslie <angus at akkea.ca>
# Date 1496602648 21600
# Sun Jun 04 12:57:28 2017 -0600
# Node ID bce7268580f053fc2d447bcdb512b0ca1f517749
# Parent d2f85ac7d1b2734606faad26c49cb1671708897c
[FT1D] Fix test for backtrack code - issue #4877
diff -r d2f85ac7d1b2 -r bce7268580f0 chirp/drivers/ft1d.py
--- a/chirp/drivers/ft1d.py Sat Jun 03 17:06:28 2017 -0600
+++ b/chirp/drivers/ft1d.py Sun Jun 04 12:57:28 2017 -0600
@@ -20,9 +20,10 @@
from chirp.drivers import yaesu_clone
from chirp import chirp_common, directory, bitwise
-from chirp.settings import RadioSettingGroup, RadioSetting, RadioSettings
-from chirp.settings import RadioSettingValueInteger, RadioSettingValueString
-from chirp.settings import RadioSettingValueList, RadioSettingValueBoolean
+from chirp.settings import RadioSettingGroup, RadioSetting, RadioSettings, \
+ RadioSettingValueInteger, RadioSettingValueString, \
+ RadioSettingValueList, RadioSettingValueBoolean, \
+ InvalidValueError
from textwrap import dedent
LOG = logging.getLogger(__name__)
@@ -620,6 +621,9 @@
_DTMF_SPEED = ("50ms", "100ms")
_DTMF_DELAY = ("50ms", "250ms", "450ms", "750ms", "1000ms")
_MY_SYMBOL = ("/[ Person", "/b Bike", "/> Car", "User selected")
+ _BACKTRACK_STATUS = ("Valid", "Invalid")
+ _NS_HEMI = ("N", "S")
+ _WE_HEMI = ("W", "E")
@classmethod
def get_prompts(cls):
@@ -1480,6 +1484,21 @@
return menu
+ def backtrack_ll_validate(self, number, min, max):
+ if str(number).lstrip('0').strip().isdigit() and \
+ int(str(number).lstrip('0')) <= max and \
+ int(str(number).lstrip('0')) >= min:
+ return True
+
+ return False
+
+ def backtrack_zero_pad(self, number, l):
+ number = str(number).strip()
+ while len(number) < l:
+ number = '0' + number
+
+ return str(number)
+
def _get_backtrack_settings(self):
menu = RadioSettingGroup("backtrack", "Backtrack")
@@ -1497,13 +1516,16 @@
bt = self._memobj.backtrack[i]
- val = RadioSettingValueInteger(0, 16, bt.status)
+ val = RadioSettingValueList(
+ self._BACKTRACK_STATUS,
+ self._BACKTRACK_STATUS[0 if bt.status == 1 else 1])
rs = RadioSetting(
"%s.status" % bt_idx,
prefix + "status", val)
+ rs.set_apply_callback(self.apply_backtrack_status, bt)
menu.append(rs)
- if bt.status == 1:
+ if bt.status == 1 and int(bt.year) < 100:
val = RadioSettingValueInteger(0, 99, bt.year)
else:
val = RadioSettingValueInteger(0, 99, 0)
@@ -1512,7 +1534,7 @@
prefix + "year", val)
menu.append(rs)
- if bt.status == 1:
+ if bt.status == 1 and int(bt.mon) <= 12:
val = RadioSettingValueInteger(0, 12, bt.mon)
else:
val = RadioSettingValueInteger(0, 12, 0)
@@ -1548,7 +1570,8 @@
prefix + "min", val)
menu.append(rs)
- if bt.status == 1:
+ if bt.status == 1 and \
+ (str(bt.NShemi) == 'N' or str(bt.NShemi) == 'S'):
val = RadioSettingValueString(0, 1, str(bt.NShemi))
else:
val = RadioSettingValueString(0, 1, ' ')
@@ -1558,34 +1581,41 @@
rs.set_apply_callback(self.apply_NShemi, bt)
menu.append(rs)
- if bt.status == 1:
- val = RadioSettingValueString(0, 3, str(bt.lat))
+ if bt.status == 1 and self.backtrack_ll_validate(bt.lat, 0, 90):
+ val = RadioSettingValueString(
+ 0, 3, self.backtrack_zero_pad(bt.lat, 3))
else:
val = RadioSettingValueString(0, 3, ' ')
rs = RadioSetting("%s.lat" % bt_idx, prefix + "Latitude", val)
+ rs.set_apply_callback(self.apply_bt_lat, bt)
menu.append(rs)
- if bt.status == 1:
+ if bt.status == 1 and \
+ self.backtrack_ll_validate(bt.lat_min, 0, 59):
val = RadioSettingValueString(
- 0, 2, str(bt.lat_min))
+ 0, 2, self.backtrack_zero_pad(bt.lat_min, 2))
else:
val = RadioSettingValueString(0, 2, ' ')
rs = RadioSetting(
"%s.lat_min" % bt_idx,
prefix + "Latitude Minutes", val)
+ rs.set_apply_callback(self.apply_bt_lat_min, bt)
menu.append(rs)
- if bt.status == 1:
+ if bt.status == 1 and \
+ self.backtrack_ll_validate(bt.lat_dec_sec, 0, 9999):
val = RadioSettingValueString(
- 0, 4, str(bt.lat_dec_sec))
+ 0, 4, self.backtrack_zero_pad(bt.lat_dec_sec, 4))
else:
val = RadioSettingValueString(0, 4, ' ')
rs = RadioSetting(
"%s.lat_dec_sec" % bt_idx,
prefix + "Latitude Decimal Seconds", val)
+ rs.set_apply_callback(self.apply_bt_lat_dec_sec, bt)
menu.append(rs)
- if bt.status == 1:
+ if bt.status == 1 and \
+ (str(bt.WEhemi) == 'W' or str(bt.WEhemi) == 'E'):
val = RadioSettingValueString(
0, 1, str(bt.WEhemi))
else:
@@ -1596,32 +1626,37 @@
rs.set_apply_callback(self.apply_WEhemi, bt)
menu.append(rs)
- if bt.status == 1:
+ if bt.status == 1 and self.backtrack_ll_validate(bt.lon, 0, 180):
val = RadioSettingValueString(
- 0, 3, str(bt.lon))
+ 0, 3, self.backtrack_zero_pad(bt.lon, 3))
else:
val = RadioSettingValueString(0, 3, ' ')
rs = RadioSetting("%s.lon" % bt_idx, prefix + "Longitude", val)
+ rs.set_apply_callback(self.apply_bt_lon, bt)
menu.append(rs)
- if bt.status == 1:
+ if bt.status == 1 and \
+ self.backtrack_ll_validate(bt.lon_min, 0, 59):
val = RadioSettingValueString(
- 0, 2, str(bt.lon_min))
+ 0, 2, self.backtrack_zero_pad(bt.lon_min, 2))
else:
val = RadioSettingValueString(0, 2, ' ')
rs = RadioSetting(
"%s.lon_min" % bt_idx,
prefix + "Longitude Minutes", val)
+ rs.set_apply_callback(self.apply_bt_lon_min, bt)
menu.append(rs)
- if bt.status == 1:
+ if bt.status == 1 and \
+ self.backtrack_ll_validate(bt.lon_dec_sec, 0, 9999):
val = RadioSettingValueString(
- 0, 4, str(bt.lon_dec_sec))
+ 0, 4, self.backtrack_zero_pad(bt.lon_dec_sec, 4))
else:
val = RadioSettingValueString(0, 4, ' ')
rs = RadioSetting(
"%s.lon_dec_sec" % bt_idx,
prefix + "Longitude Decimal Seconds", val)
+ rs.set_apply_callback(self.apply_bt_lon_dec_sec, bt)
menu.append(rs)
return menu
@@ -1863,6 +1898,15 @@
val.append(0xFF)
cls._memobj.dtmf[i].memory = val
+ def apply_backtrack_status(cls, setting, obj):
+ status = setting.value.get_value()
+
+ if status == 'Valid':
+ val = 1
+ else:
+ val = 8
+ setattr(obj, "status", val)
+
def apply_NShemi(cls, setting, obj):
hemi = setting.value.get_value().upper()
@@ -1876,3 +1920,46 @@
if hemi != 'W' and hemi != 'E':
hemi = ' '
setattr(obj, "WEhemi", hemi)
+
+ def apply_WEhemi(cls, setting, obj):
+ hemi = setting.value.get_value().upper()
+
+ if hemi != 'W' and hemi != 'E':
+ hemi = ' '
+ setattr(obj, "WEhemi", hemi)
+
+ def apply_bt_lat(cls, setting, obj):
+ val = setting.value.get_value()
+ val = cls.backtrack_zero_pad(val, 3)
+
+ setattr(obj, "lat", val)
+
+ def apply_bt_lat_min(cls, setting, obj):
+ val = setting.value.get_value()
+ val = cls.backtrack_zero_pad(val, 2)
+
+ setattr(obj, "lat_min", val)
+
+ def apply_bt_lat_dec_sec(cls, setting, obj):
+ val = setting.value.get_value()
+ val = cls.backtrack_zero_pad(val, 4)
+
+ setattr(obj, "lat_dec_sec", val)
+
+ def apply_bt_lon(cls, setting, obj):
+ val = setting.value.get_value()
+ val = cls.backtrack_zero_pad(val, 3)
+
+ setattr(obj, "lon", val)
+
+ def apply_bt_lon_min(cls, setting, obj):
+ val = setting.value.get_value()
+ val = cls.backtrack_zero_pad(val, 2)
+
+ setattr(obj, "lon_min", val)
+
+ def apply_bt_lon_dec_sec(cls, setting, obj):
+ val = setting.value.get_value()
+ val = cls.backtrack_zero_pad(val, 4)
+
+ setattr(obj, "lon_dec_sec", val)
More information about the chirp_devel
mailing list