def set_settings(self, uisettings): for element in uisettings: if not isinstance(element, RadioSetting): self.set_settings(element) continue if not element.changed(): continue try: setting = element.get_name() _settings = self._memobj.settings if re.match('autodial\d', setting): # set autodial fields dtmfstr = str(element.value).strip() newval = [] for i in range(0, 16): if i < len(dtmfstr): newval.append(DTMFCHARSET.index(dtmfstr[i])) else: newval.append(0xFF) LOG.debug(newval) idx = int(setting[-1:]) - 1 _settings = self._memobj.settings.autodial[idx] _settings.digits = newval continue if (setting == "pagingcodep"): bitwise.int_to_bcd(_settings.pagingcodep, int(element.value)) continue if re.match('pagingcode\d', setting): idx = int(setting[-1:]) - 1 bitwise.int_to_bcd(_settings.pagingcode[idx].digits, int(element.value)) continue newval = element.value oldval = getattr(_settings, setting) if setting == "cwid": newval = self._encode_cwid(newval) LOG.debug("Setting %s(%s) <= %s" % (setting, oldval, newval)) setattr(_settings, setting, newval) except Exception: LOG.debug(element.get_name()) raise
def _set_freq(bcd_array, freq): bitwise.int_to_bcd(bcd_array, freq / 1000) bcd_array[2].set_raw(bcd_array[2].get_bits(0xF0) + freq % 10000 / 500)
def set_memory(self, mem): LOG.debug("Setting %i(%s)" % (mem.number, mem.extd_number)) if self._rf.has_bank: ch, bnk = self.mem_to_ch_bnk(mem.number) LOG.debug("Bank %i, Channel %02i" % (bnk, ch)) f = self._get_template_memory() if mem.empty: if self._rf.has_bank: f.set_location(ch, bnk) else: f.set_location(mem.number) LOG.debug("Making %i empty" % mem.number) f.make_empty() self._send_frame(f) # The next two lines accept the radio's status after setting the memory # and reports the results to the debug log. This is needed for the # IC-7000. No testing was done to see if it breaks memory delete on the # IC-746 or IC-7200. f = self._recv_frame() LOG.debug("Result:\n%s" % util.hexprint(f.get_data())) return # f.set_data(MemoryMap(self.get_raw_memory(mem.number))) # f.initialize() memobj = f.get_obj() if self._rf.has_bank: memobj.bank = bnk memobj.number = ch else: memobj.number = mem.number if mem.skip == "S": memobj.skip = 0 else: try: memobj.skip = 1 except KeyError: pass memobj.freq = int(mem.freq) memobj.mode = self._MODES.index(mem.mode) if self._rf.has_name: name_length = len(memobj.name.get_value()) memobj.name = mem.name.ljust(name_length)[:name_length] if self._rf.valid_tmodes: memobj.tmode = self._rf.valid_tmodes.index(mem.tmode) if self._rf.has_ctone: memobj.ctone = int(mem.ctone * 10) memobj.rtone = int(mem.rtone * 10) if self._rf.has_dtcs_polarity: if mem.dtcs_polarity == "RR": memobj.dtcs_polarity = 0x11 elif mem.dtcs_polarity == "RN": memobj.dtcs_polarity = 0x10 elif mem.dtcs_polarity == "NR": memobj.dtcs_polarity = 0x01 else: memobj.dtcs_polarity = 0x00 if self._rf.has_dtcs: bitwise.int_to_bcd(memobj.dtcs, mem.dtcs) if self._rf.can_odd_split and mem.duplex == "split": memobj.spl = 1 memobj.duplex = 0 memobj.freq_tx = int(mem.offset) memobj.tmode_tx = memobj.tmode memobj.ctone_tx = memobj.ctone memobj.rtone_tx = memobj.rtone memobj.dtcs_polarity_tx = memobj.dtcs_polarity memobj.dtcs_tx = memobj.dtcs elif self._rf.valid_duplexes: memobj.duplex = self._rf.valid_duplexes.index(mem.duplex) for setting in mem.extra: if setting.get_name() == "filter": setattr(memobj, setting.get_name(), int(setting.value) + 1) else: setattr(memobj, setting.get_name(), setting.value) LOG.debug(repr(memobj)) self._send_frame(f) f = self._recv_frame() LOG.debug("Result:\n%s" % util.hexprint(f.get_data()))