# HG changeset patch # User Rick DeWitt # Date 1605564507 28800 # Mon Nov 16 14:08:27 2020 -0800 # Node ID 322a135bdf2bf42ad8b6f4026a488adad003e4c0 # Parent 98b8a850b0f136c77fe09a4922c32a2a28f708be [lt725uv] BJ-218 alias. Issue #8363 add 100ms delay after each download read at line 347 Also includes many style corrections. diff -r 98b8a850b0f1 -r 322a135bdf2b chirp/drivers/lt725uv.py --- a/chirp/drivers/lt725uv.py Sun Oct 11 15:39:26 2020 -0400 +++ b/chirp/drivers/lt725uv.py Mon Nov 16 14:08:27 2020 -0800 @@ -1,6 +1,9 @@ # Copyright 2016: # * Jim Unroe KC9HI, -# Modified for Baojie BJ-218: 2018 by Rick DeWitt (RJD), # +# Modified for Baojie BJ-218: 2018 by Rick DeWitt (RJD), +# Patch for issue #8363: +# Fixes Download errors due to reading too fast +# Also includes many style fixes # 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 2 of the License, or @@ -18,17 +21,18 @@ import struct import logging import re - -LOG = logging.getLogger(__name__) - from chirp import chirp_common, directory, memmap from chirp import bitwise, errors, util from chirp.settings import RadioSettingGroup, RadioSetting, \ RadioSettingValueBoolean, RadioSettingValueList, \ RadioSettingValueString, RadioSettingValueInteger, \ - RadioSettingValueFloat, RadioSettings,InvalidValueError + RadioSettingValueFloat, RadioSettings, InvalidValueError from textwrap import dedent + +LOG = logging.getLogger(__name__) + + MEM_FORMAT = """ #seekto 0x0200; struct { @@ -199,36 +203,37 @@ for x in chirp_common.DTCS_CODES: LIST_CTCSS.append("D{:03d}R".format(x)) LIST_BW = ["Narrow", "Wide"] -LIST_SHIFT = ["Off"," + ", " - "] +LIST_SHIFT = ["Off", " + ", " - "] STEPS = [2.5, 5.0, 6.25, 10.0, 12.5, 20.0, 25.0, 50.0] LIST_STEPS = [str(x) for x in STEPS] LIST_STATE = ["Normal", "Stun", "Kill"] LIST_SSF = ["1000", "1450", "1750", "2100"] -LIST_DTMFTX = ["50", "100", "150", "200", "300","500"] +LIST_DTMFTX = ["50", "100", "150", "200", "300", "500"] SETTING_LISTS = { -"init_bank": LIST_TDR_DEF , -"tot": LIST_TIMEOUT, -"wtled": LIST_COLOR, -"rxled": LIST_COLOR, -"txled": LIST_COLOR, -"sig_freq": LIST_SSF, -"dtmf_txms": LIST_DTMFTX, -"ledsw": LIST_LEDSW, -"frq_chn_mode": LIST_VFOMODE, -"rx_tone": LIST_CTCSS, -"tx_tone": LIST_CTCSS, -"rx_mode": LIST_RECVMODE, -"launch_sig": LIST_SIGNAL, -"tx_end_sig": LIST_SIGNAL, -"bpower":LIST_BPOWER, -"fm_bw": LIST_BW, -"shift": LIST_SHIFT, -"step": LIST_STEPS, -"ring": LIST_RING, -"state_now": LIST_STATE + "init_bank": LIST_TDR_DEF, + "tot": LIST_TIMEOUT, + "wtled": LIST_COLOR, + "rxled": LIST_COLOR, + "txled": LIST_COLOR, + "sig_freq": LIST_SSF, + "dtmf_txms": LIST_DTMFTX, + "ledsw": LIST_LEDSW, + "frq_chn_mode": LIST_VFOMODE, + "rx_tone": LIST_CTCSS, + "tx_tone": LIST_CTCSS, + "rx_mode": LIST_RECVMODE, + "launch_sig": LIST_SIGNAL, + "tx_end_sig": LIST_SIGNAL, + "bpower": LIST_BPOWER, + "fm_bw": LIST_BW, + "shift": LIST_SHIFT, + "step": LIST_STEPS, + "ring": LIST_RING, + "state_now": LIST_STATE } + def _clean_buffer(radio): radio.pipe.timeout = 0.005 junk = radio.pipe.read(256) @@ -339,6 +344,7 @@ # Now we read d = _recv(radio, addr, BLOCK_SIZE) + time.sleep(0.1) # Aggregate the data data += d @@ -770,7 +776,7 @@ # Basic Settings bnd_mode = RadioSetting("settings.init_bank", "TDR Band Default", RadioSettingValueList(LIST_TDR_DEF, - LIST_TDR_DEF[ _sets.init_bank])) + LIST_TDR_DEF[_sets.init_bank])) basic.append(bnd_mode) volume = RadioSetting("settings.volume", "Volume", @@ -790,7 +796,7 @@ def my_word2raw(setting, obj, atrb, mlt=10): """Callback function to convert UI floating value to u16 int""" if str(setting.value) == "Off": - frq = 0x0FFFF + frq = 0x0FFFF else: frq = int(float(str(setting.value)) * float(mlt)) if frq == 0: @@ -801,7 +807,7 @@ def my_adjraw(setting, obj, atrb, fix): """Callback: add or subtract fix from value.""" vx = int(str(setting.value)) - value = vx + int(fix) + value = vx + int(fix) if value < 0: value = 0 if atrb == "frq_chn_mode" and int(str(setting.value)) == 2: @@ -829,7 +835,7 @@ def my_spcl(setting, obj, atrb): """Callback: Special handling based on atrb.""" if atrb == "frq_chn_mode": - idx = LIST_VFOMODE.index (str(setting.value)) # Returns 0 or 1 + idx = LIST_VFOMODE.index(str(setting.value)) # Returns 0 or 1 value = idx * 2 # Set bit 1 setattr(obj, atrb, value) return @@ -960,7 +966,7 @@ rs.set_apply_callback(my_spcl, _vfoa, "frq_chn_mode") a_band.append(rs) - val =_vfoa.chan_num + 1 # Add 1 for 1-128 displayed + val = _vfoa.chan_num + 1 # Add 1 for 1-128 displayed rs = RadioSetting("upper.vfoa.chan_num", "Initial Chan", RadioSettingValueInteger(1, 128, val)) rs.set_apply_callback(my_adjraw, _vfoa, "chan_num", -1) @@ -994,11 +1000,11 @@ a_band.append(rs) rs = RadioSetting("upper.vfoa.launch_sig", "Launch Signaling", - RadioSettingValueList(LIST_SIGNAL, - LIST_SIGNAL[_vfoa.launch_sig])) + RadioSettingValueList(LIST_SIGNAL, LIST_SIGNAL + [_vfoa.launch_sig])) a_band.append(rs) - rx = RadioSettingValueList(LIST_SIGNAL,LIST_SIGNAL[_vfoa.tx_end_sig]) + rx = RadioSettingValueList(LIST_SIGNAL, LIST_SIGNAL[_vfoa.tx_end_sig]) rs = RadioSetting("upper.vfoa.tx_end_sig", "Xmit End Signaling", rx) a_band.append(rs) @@ -1028,7 +1034,7 @@ tmp = str(_vfoa.step / 100.0) rs = RadioSetting("step", "Freq step (KHz)", RadioSettingValueList(LIST_STEPS, tmp)) - rs.set_apply_callback(my_word2raw, _vfoa,"step", 100) + rs.set_apply_callback(my_word2raw, _vfoa, "step", 100) a_band.append(rs) # LOWER BAND SETTINGS @@ -1071,11 +1077,11 @@ "txdtcs_pol", "tx_tone") b_band.append(rs) - rx = RadioSettingValueList(LIST_SIGNAL,LIST_SIGNAL[_vfob.launch_sig]) + rx = RadioSettingValueList(LIST_SIGNAL, LIST_SIGNAL[_vfob.launch_sig]) rs = RadioSetting("lower.vfob.launch_sig", "Launch Signaling", rx) b_band.append(rs) - rx = RadioSettingValueList(LIST_SIGNAL,LIST_SIGNAL[_vfob.tx_end_sig]) + rx = RadioSettingValueList(LIST_SIGNAL, LIST_SIGNAL[_vfob.tx_end_sig]) rs = RadioSetting("lower.vfob.tx_end_sig", "Xmit End Signaling", rx) b_band.append(rs) @@ -1120,14 +1126,16 @@ """Callback: convert 7-char string to char array with count.""" ary = "" knt = 7 - for j in range (6, -1, -1): # Strip trailing spaces + for j in range(6, -1, -1): # Strip trailing spaces if str(setting.value)[j] == "" or str(setting.value)[j] == " ": knt = knt - 1 else: break for j in range(0, 7, 1): - if j < knt: ary += str(setting.value)[j] - else: ary += chr(0xFF) + if j < knt: + ary += str(setting.value)[j] + else: + ary += chr(0xFF) setattr(obj, atrba, ary) setattr(obj, atrbc, knt) return @@ -1141,7 +1149,7 @@ tmp = chars2str(_lims.hello2, _lims.hello2_cnt) rs = RadioSetting("hello_lims.hello2", "Power-On Message 2", RadioSettingValueString(0, 7, tmp)) - rs.set_apply_callback(my_str2ary, _lims,"hello2", "hello2_cnt") + rs.set_apply_callback(my_str2ary, _lims, "hello2", "hello2_cnt") lims.append(rs) # VALID_BANDS = [(136000000, 176000000),400000000, 480000000)] @@ -1184,7 +1192,7 @@ """Generate the DTMF code 1-8, NOT a callback.""" tmp = "" if knt > 0 and knt != 0xff: - for val in ary[:knt]: + for val in ary[:knt]: if val > 0 and val <= 9: tmp += chr(val + 48) elif val == 0x0a: @@ -1210,7 +1218,7 @@ """Callback: DTMF Code; sends 5 or 7-byte string.""" draw = [] knt = syz - for j in range (syz - 1, -1, -1): # Strip trailing spaces + for j in range(syz - 1, -1, -1): # Strip trailing spaces if str(setting.value)[j] == "" or str(setting.value)[j] == " ": knt = knt - 1 else: @@ -1220,19 +1228,19 @@ obx = ord(bx) dig = 0x0ff if j < knt and knt > 0: # (Else) is pads - if bx == "0": + if bx == "0": dig = 0x0a - elif bx == "A": + elif bx == "A": dig = 0x0d - elif bx == "B": + elif bx == "B": dig = 0x0e - elif bx == "C": + elif bx == "C": dig = 0x0f - elif bx == "D": + elif bx == "D": dig = 0x00 - elif bx == "*": + elif bx == "*": dig = 0x0b - elif bx == "#": + elif bx == "#": dig = 0x0c elif obx >= 49 and obx <= 57: dig = obx - 48 @@ -1258,14 +1266,14 @@ rs = RadioSetting("codes.master_id_code", "Master Control ID Code", RadioSettingValueString(0, 7, tmp)) rs.set_apply_callback(my_dtmf2raw, _codes, "master_id_code", - "master_id_cnt",7) + "master_id_cnt", 7) codes.append(rs) tmp = make_dtmf(_codes.alarm_code, _codes.alarm_cnt) rs = RadioSetting("codes.alarm_code", "Alarm Code", - RadioSettingValueString(0, 5, tmp)) + RadioSettingValueString(0, 5, tmp)) rs.set_apply_callback(my_dtmf2raw, _codes, "alarm_code", - "alarm_cnt", 5) + "alarm_cnt", 5) codes.append(rs) tmp = make_dtmf(_codes.id_disp_code, _codes.id_disp_cnt) @@ -1278,7 +1286,7 @@ tmp = make_dtmf(_codes.revive_code, _codes.revive_cnt) rs = RadioSetting("codes.revive_code", "Revive Code", RadioSettingValueString(0, 5, tmp)) - rs.set_apply_callback(my_dtmf2raw, _codes,"revive_code", + rs.set_apply_callback(my_dtmf2raw, _codes, "revive_code", "revive_cnt", 5) codes.append(rs) @@ -1361,7 +1369,6 @@ return group # END get_settings() - def set_settings(self, settings): _settings = self._memobj.settings _mem = self._memobj @@ -1397,7 +1404,6 @@ LOG.debug(element.get_name()) raise - @classmethod def match_model(cls, filedata, filename): match_size = False