Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package chirp for openSUSE:Factory checked in at 2026-05-04 12:53:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/chirp (Old) and /work/SRC/openSUSE:Factory/.chirp.new.30200 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "chirp" Mon May 4 12:53:40 2026 rev:68 rq:1350477 version:20260501 Changes: -------- --- /work/SRC/openSUSE:Factory/chirp/chirp.changes 2026-04-25 21:43:17.516296074 +0200 +++ /work/SRC/openSUSE:Factory/.chirp.new.30200/chirp.changes 2026-05-04 12:56:47.661572522 +0200 @@ -1,0 +2,8 @@ +Sat May 2 18:12:29 UTC 2026 - Andreas Stieger <[email protected]> + +- Update to version 20260501: + * tdh8: Fix VFO A/B BCL setting not reading properly + * tdh8: Add offset dir in VFO settings and fix VFO TX freq + * h777v4: Fix detected models + +------------------------------------------------------------------- Old: ---- chirp-20260425.obscpio New: ---- chirp-20260501.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ chirp.spec ++++++ --- /var/tmp/diff_new_pack.anLi5C/_old 2026-05-04 12:56:48.301598864 +0200 +++ /var/tmp/diff_new_pack.anLi5C/_new 2026-05-04 12:56:48.305599029 +0200 @@ -20,7 +20,7 @@ %define pythons python3 Name: chirp -Version: 20260425 +Version: 20260501 Release: 0 Summary: Tool for programming amateur radio sets License: GPL-3.0-only ++++++ _service ++++++ --- /var/tmp/diff_new_pack.anLi5C/_old 2026-05-04 12:56:48.345600675 +0200 +++ /var/tmp/diff_new_pack.anLi5C/_new 2026-05-04 12:56:48.357601169 +0200 @@ -4,8 +4,8 @@ <param name="scm">git</param> <param name="changesgenerate">enable</param> <param name="filename">chirp</param> - <param name="versionformat">20260425</param> - <param name="revision">e7347e6a66ef8f9edb50e3e534510c2d3ae6b329</param> + <param name="versionformat">20260501</param> + <param name="revision">68546632f7dd949a8861c3cc3358de9747a70ef2</param> </service> <service mode="manual" name="set_version"/> <service name="tar" mode="buildtime"/> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.anLi5C/_old 2026-05-04 12:56:48.385602321 +0200 +++ /var/tmp/diff_new_pack.anLi5C/_new 2026-05-04 12:56:48.389602486 +0200 @@ -1,7 +1,7 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/kk7ds/chirp.git</param> - <param name="changesrevision">e7347e6a66ef8f9edb50e3e534510c2d3ae6b329</param> + <param name="changesrevision">68546632f7dd949a8861c3cc3358de9747a70ef2</param> </service> </servicedata> (No newline at EOF) ++++++ chirp-20260425.obscpio -> chirp-20260501.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chirp-20260425/chirp/chirp_common.py new/chirp-20260501/chirp/chirp_common.py --- old/chirp-20260425/chirp/chirp_common.py 2026-04-19 00:23:25.000000000 +0200 +++ new/chirp-20260501/chirp/chirp_common.py 2026-05-01 01:10:55.000000000 +0200 @@ -1508,6 +1508,10 @@ return extra + list(detected) @classmethod + def is_detected(cls): + return getattr(cls, '_DETECTED_BY', None) is not None + + @classmethod def detect_model(cls, detected_cls): detected_attr = class_detected_models_attribute(cls) if getattr(cls, detected_attr, None) is None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chirp-20260425/chirp/drivers/retevis_h777v4.py new/chirp-20260501/chirp/drivers/retevis_h777v4.py --- old/chirp-20260425/chirp/drivers/retevis_h777v4.py 2026-04-19 00:23:25.000000000 +0200 +++ new/chirp-20260501/chirp/drivers/retevis_h777v4.py 2026-05-01 01:10:55.000000000 +0200 @@ -185,7 +185,11 @@ def do_download(radio): LOG.debug("download") - h777._h777_enter_single_programming_mode(radio) + if not radio.is_detected() and not radio.detected_models(): + # If we are a detect-ee or detect-or, don't re-initialize programming + # mode. But if we're one of the other subclasses of this work that + # would not have run through detection, we need to do so. + h777._h777_enter_single_programming_mode(radio) data = b"" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chirp-20260425/chirp/drivers/tdh8.py new/chirp-20260501/chirp/drivers/tdh8.py --- old/chirp-20260425/chirp/drivers/tdh8.py 2026-04-19 00:23:25.000000000 +0200 +++ new/chirp-20260501/chirp/drivers/tdh8.py 2026-05-01 01:10:55.000000000 +0200 @@ -106,8 +106,10 @@ } settings; //#seekto 0x0CB8; -lbcd offseta[4]; -lbcd offsetb[4]; +struct{ + lbcd a[4]; + lbcd b[4]; +}vfo_offset; #seekto 0x0CD8; struct{ @@ -148,7 +150,7 @@ lowpower:2, wide:1, unused8:1, - offset:2; + dira:2; u8 unused10; } vfoa; @@ -171,7 +173,7 @@ lowpowerb:2, wideb:1, unused8:1, - offsetb:2; + dirb:2; u8 unused10; } vfob; @@ -365,8 +367,10 @@ } settings; //#seekto 0x0CB8; -lbcd offseta[4]; -lbcd offsetb[4]; +struct{ + lbcd a[4]; + lbcd b[4]; +}vfo_offset; #seekto 0x0CD8; struct{ @@ -472,7 +476,7 @@ lowpower:2, wide:1, unused8:1, - offset:2; + dira:2; u8 unused10; } vfoa; @@ -495,7 +499,7 @@ lowpowerb:2, wideb:1, unused8:1, - offsetb:2; + dirb:2; u8 unused10; } vfob; @@ -589,8 +593,10 @@ } settings; //#seekto 0x0CB8; -lbcd offseta[4]; -lbcd offsetb[4]; +struct { +lbcd a[4]; +lbcd b[4]; +}vfo_offset; #seekto 0x0CD8; struct{ @@ -638,7 +644,7 @@ lowpower:2, wide:1, unused8:1, - offset:2; + dira:2; u8 unused9; } vfoa; @@ -661,7 +667,7 @@ lowpowerb:2, wideb:1, unused8:1, - offsetb:2; + dirb:2; u8 unused9; } vfob; @@ -704,7 +710,9 @@ "bcl", "lowpower", "wide", - "offset"] + "a", + "dira", + ] VFOB_NAME = ["rxfreqb", "txfreq", @@ -715,7 +723,9 @@ "bclb", "lowpowerb", "wideb", - "offsetb"] + "b", + "dirb", + ] TOT_LIST = ["Off", "30S", "60S", "90S", "120S", "150S", "180S", "210S"] ALARM_LIST = ["On site", "Alarm"] @@ -751,14 +761,9 @@ BCLOCK_VALUES = ["Off", "On"] FREQHOP_VALUES = ["Off", "On"] -# AB CHANNEL -A_OFFSET = ["Off", "-", "+"] -A_BAND = ["Wide", "Narrow"] -A_WORKMODE = ["VFO", "VFO+CH", "CH Mode"] - -B_OFFSET = ["Off", "-", "+"] -B_BAND = ["Wide", "Narrow"] -B_WORKMODE = ["VFO", "VFO+CH", "CH Mode"] +# AB VFO CHANNEL +OFFSET_DIR = ["Off", "-", "+"] +VFO_WORKMODE = ["VFO", "VFO+CH", "CH Mode"] # FM FM_WORKMODE = ["VFO", "CH"] @@ -1757,27 +1762,70 @@ # If the offset is 12.345 # Then the data obtained is [0x45, 0x23, 0x01, 0x00] offsets = {} + dirs = {} + + def _calc_txfreq(rxfreq, offset, dir): + # calc tx freq + txfreq = 0 + match dir: + case 0: # off + txfreq = rxfreq + case 1: # minus + txfreq = \ + (int(rxfreq) / + 100000 - int(offset) / 100000) * 100000 + case 2: # plus + txfreq = \ + (int(rxfreq) / + 100000 + int(offset) / 100000) * 100000 + return int(txfreq) + + def _apply_offset_dir(setting, i, obj1, obj2): + value = getattr(obj1, setting.get_name()) + value.set_value(setting.value) + # calc tx freq and store + obj1.txfreq = _calc_txfreq( + getattr(obj1, "rxfreq%s" % i), + obj2, + getattr(obj1, "dir%s" % i) + ) + for i in ('a', 'b'): - value = getattr(self._memobj, 'offset%s' % i) + value = getattr(self._memobj.vfo_offset, '%s' % i) if value.get_raw() == b'\xff\xff\xff\xff': offset = 0 else: offset = int(value) / 100000 def _apply(setting): - value = getattr(self._memobj, setting.get_name()) + value = getattr(self._memobj.vfo_offset, + setting.get_name()) if float(setting.value) == 0: value.fill_raw(b'\xff') else: value.set_value(int(setting.value * 100000)) - rs = RadioSetting("offset%s" % i, + rs = RadioSetting("%s" % i, "%s Offset Frequency" % i.upper(), RadioSettingValueFloat( 0.00000, 59.99750, offset, 0.00001, 5)) rs.set_apply_callback(_apply) offsets[i] = rs + _obj1 = self._memobj.vfoa if i == \ + 'a' else self._memobj.vfob + _obj2 = self._memobj.vfo_offset.a if i == 'a' \ + else self._memobj.vfo_offset.b + _obj3 = self._memobj.vfoa.dira if i == 'a' \ + else self._memobj.vfob.dirb + rs = RadioSetting("dir%s" % i, + "%s Offset Direction" % i.upper(), + RadioSettingValueList(OFFSET_DIR, + current_index=_obj3)) + rs.set_apply_callback(_apply_offset_dir, i, _obj1, _obj2) + dirs[i] = rs + abblock.append(offsets['a']) + abblock.append(dirs['a']) try: self._tx_power[_vfoa.lowpower] @@ -1792,11 +1840,11 @@ rs = RadioSetting("wide", "A Band", RadioSettingValueList( - A_BAND, current_index=_vfoa.wide)) + BANDWIDTH_LIST, current_index=_vfoa.wide)) abblock.append(rs) rs = RadioSetting("bcl", "A Busy Lock", - RadioSettingValueBoolean(_settings.ablock)) + RadioSettingValueBoolean(_vfoa.bcl)) abblock.append(rs) rs = RadioSetting("specialqta", "A Special QT/DQT", @@ -1806,7 +1854,7 @@ rs = RadioSetting( "aworkmode", "A Work Mode", RadioSettingValueList( - A_WORKMODE, current_index=_settings.aworkmode)) + VFO_WORKMODE, current_index=_settings.aworkmode)) abblock.append(rs) # B channel @@ -1821,6 +1869,7 @@ abblock.append(rs) abblock.append(offsets['b']) + abblock.append(dirs['b']) try: self._tx_power[_vfob.lowpowerb] @@ -1835,11 +1884,11 @@ rs = RadioSetting("wideb", "B Band", RadioSettingValueList( - B_BAND, current_index=_vfob.wideb)) + BANDWIDTH_LIST, current_index=_vfob.wideb)) abblock.append(rs) rs = RadioSetting("bclb", "B Busy Lock", - RadioSettingValueBoolean(_settings.bblock)) + RadioSettingValueBoolean(_vfob.bclb)) abblock.append(rs) rs = RadioSetting("specialqtb", "B Special QT/DQT", @@ -1849,7 +1898,7 @@ rs = RadioSetting( "bworkmode", "B Work Mode", RadioSettingValueList( - B_WORKMODE, current_index=_settings.bworkmode)) + VFO_WORKMODE, current_index=_settings.bworkmode)) abblock.append(rs) group.append(fmmode) @@ -2214,7 +2263,7 @@ _settings.brightness = 4 - int(element.value) elif "sync" == name: _settings.sync = not int(element.value) - # Channel A + # Channel A RX freq elif "rxfreqa" == setting and element.value.get_mutable(): val = int(str(element.value).replace( '.', '').ljust(8, '0')) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chirp-20260425/chirp/drivers/tdm11.py new/chirp-20260501/chirp/drivers/tdm11.py --- old/chirp-20260425/chirp/drivers/tdm11.py 2026-04-19 00:23:25.000000000 +0200 +++ new/chirp-20260501/chirp/drivers/tdm11.py 2026-05-01 01:10:55.000000000 +0200 @@ -507,8 +507,7 @@ def _encode_tone(self, memval, mode, value, pol): if mode == '': - memval[0].set_raw(0xFF) - memval[1].set_raw(0xFF) + memval.fill_raw(b'\xff') elif mode == 'Tone': memval.set_value(int(value * 10)) elif mode == 'DTCS': @@ -697,6 +696,9 @@ rf.has_name = False return rf + def get_raw_memory(self, number): + return repr(self._memobj.memory[number - 1]) + def get_memory(self, number): """Get the mem representation from the radio image""" _mem = self._memobj.memory[number - 1] @@ -707,7 +709,7 @@ # Memory number mem.number = number - if _mem.get_raw()[:1] == b'\xFF': + if _mem.get_raw()[:1] == b'\xff': mem.empty = True return mem @@ -716,7 +718,7 @@ if mem.freq == 0: mem.empty = True # tx freq can be blank - if _mem.txfreq.get_raw() == b'\xFF\xFF\xFF\xFF': + if _mem.txfreq.get_raw() == b'\xff\xff\xff\xff': # TX freq not set mem.offset = 0 mem.duplex = 'off' @@ -759,6 +761,7 @@ rs = RadioSettingValueList(self._bcl_list, current_index=_mem.bcl) rset = RadioSetting('bcl', 'BCL', rs) + rset.set_doc('Busy Channel Lockout') mem.extra.append(rset) # Jump Freq @@ -766,6 +769,7 @@ self._jumpfreq_list, current_index=_mem.jumpfreq) rset = RadioSetting('jumpfreq', 'Jump Freq', rs) + rset.set_doc('Frequency Jumping/hopping') mem.extra.append(rset) # Compand @@ -773,12 +777,14 @@ self._compand_list, current_index=_mem.compand) rset = RadioSetting('compand', 'Compand', rs) + rset.set_doc('Audio Compander') mem.extra.append(rset) # Scramble rs = RadioSettingValueList(self._scramble_list, current_index=_mem.scramble) rset = RadioSetting('scramble', 'Scramble', rs) + rset.set_doc('Voice Scrambler') mem.extra.append(rset) return mem @@ -787,15 +793,15 @@ _mem = self._memobj.memory[mem.number - 1] if mem.empty: - _mem.set_raw('\xff' * 16) + _mem.fill_raw(b'\xff') return - _mem.set_raw('\x00' * 16) + _mem.fill_raw(b'\x00') _mem.rxfreq = mem.freq / 10 if mem.duplex == 'off': - _mem.txfreq.fill_raw(b'\xFF') + _mem.txfreq.fill_raw(b'\xff') elif mem.duplex == 'split': _mem.txfreq = mem.offset / 10 elif mem.duplex == '+': ++++++ chirp.obsinfo ++++++ --- /var/tmp/diff_new_pack.anLi5C/_old 2026-05-04 12:56:49.657654676 +0200 +++ /var/tmp/diff_new_pack.anLi5C/_new 2026-05-04 12:56:49.665655005 +0200 @@ -1,5 +1,5 @@ name: chirp -version: 20260425 -mtime: 1776551005 -commit: e7347e6a66ef8f9edb50e3e534510c2d3ae6b329 +version: 20260501 +mtime: 1777590655 +commit: 68546632f7dd949a8861c3cc3358de9747a70ef2
