Exemple #1
0
    def get_memory(self, number):
        flag = self._memobj.flag[number - 1]
        _mem = self._memobj.memory[number - 1]

        mem = chirp_common.Memory()
        mem.number = number
        if not flag.used:
            mem.empty = True
        if not flag.valid:
            mem.empty = True
            return mem
        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = int(_mem.offset) * 1000
        mem.rtone = mem.ctone = chirp_common.TONES[_mem.tone]
        mem.tmode = TMODES[_mem.tone_mode]
        mem.duplex = DUPLEX[_mem.duplex]
        if mem.duplex == "split":
            mem.offset = chirp_common.fix_rounded_step(mem.offset)
        mem.mode = MODES[_mem.mode]
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dcs]
        mem.tuning_step = STEPS[_mem.tune_step]
        mem.power = POWER_LEVELS[3 - _mem.power]
        mem.skip = flag.pskip and "P" or flag.skip and "S" or ""

        charset = ''.join(CHARSET).ljust(256, '.')
        mem.name = str(_mem.label).rstrip("\xFF").translate(charset)

        return mem
Exemple #2
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number - 1]
        _flg = self._memobj.flag[number - 1]

        mem = chirp_common.Memory()
        mem.number = number

        if not _flg.visible:
            mem.empty = True
        if not _flg.used:
            mem.empty = True
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.duplex = DUPLEX[_mem.duplex]
        mem.name = self.filter_name(str(_mem.name).rstrip())
        mem.mode = MODES[_mem.mode]
        if mem.mode == "FM" and _mem.half_deviation:
            mem.mode = "NFM"
        mem.tuning_step = STEPS[_mem.tuning_step]
        mem.offset = int(_mem.offset) * 1000
        mem.power = POWER_LEVELS[3 - _mem.power]
        mem.tmode = TMODES[_mem.tmode & 0x3]  # masked so bad mems can be read
        if mem.duplex == "split":
            mem.offset = chirp_common.fix_rounded_step(mem.offset)
        mem.rtone = mem.ctone = chirp_common.OLD_TONES[_mem.tone]
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dtcs]

        mem.skip = _flg.pskip and "P" or _flg.skip and "S" or ""

        return mem
Exemple #3
0
    def get_memory(self, number):
        mem = chirp_common.Memory()
        _mem = self._memobj.memory[number - 1]
        _flg = self._memobj.flag[number - 1]
        mem.number = number

        # if not _flg.visible:
        #    mem.empty = True
        if not _flg.used:
            mem.empty = True
            return mem

        for i in _mem.name:
            mem.name += CHARSET[i & 0x7F]
        mem.name = mem.name.rstrip()

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.duplex = DUPLEX[_mem.duplex]
        mem.offset = chirp_common.fix_rounded_step(int(_mem.offset) * 1000)
        mem.rtone = mem.ctone = TONES[_mem.tone]
        mem.tmode = TMODES[_mem.tmode]
        mem.mode = MODES[_mem.mode]
        mem.tuning_step = TUNING_STEPS[_mem.tuning_step]
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dtcs]
        # Power is stored as 2 bits to describe the 3 low power levels
        # High power is determined by a different bit.
        if not _mem.ishighpower:
            mem.power = POWER_LEVELS[3 - _mem.power]
        else:
            mem.power = POWER_LEVELS[0]
        mem.skip = SKIP_VALUES[_flg.skip]

        return mem
Exemple #4
0
    def get_memory(self, number):
        flag = self._memobj.flag[number - 1]
        _mem = self._memobj.memory[number - 1]

        mem = chirp_common.Memory()
        mem.number = number
        if not flag.used:
            mem.empty = True
        if not flag.valid:
            mem.empty = True
            return mem
        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = int(_mem.offset) * 1000
        mem.rtone = mem.ctone = chirp_common.TONES[_mem.tone]
        self._get_tmode(mem, _mem)
        mem.duplex = DUPLEX[_mem.duplex]
        if mem.duplex == "split":
            mem.offset = chirp_common.fix_rounded_step(mem.offset)
        mem.mode = self._decode_mode(_mem)
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dcs]
        mem.tuning_step = STEPS[_mem.tune_step]
        mem.power = self._decode_power_level(_mem)
        mem.skip = flag.pskip and "P" or flag.skip and "S" or ""
        mem.name = self._decode_label(_mem)

        return mem
Exemple #5
0
    def get_memory(self, number):
        mem = chirp_common.Memory()
        _mem = self._memobj.memory[number-1]
        _flg = self._memobj.flag[number-1]
        mem.number = number

        # if not _flg.visible:
        #    mem.empty = True
        if not _flg.used:
            mem.empty = True
            return mem

        for i in _mem.name:
            mem.name += CHARSET[i & 0x7F]
        mem.name = mem.name.rstrip()

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.duplex = DUPLEX[_mem.duplex]
        mem.offset = chirp_common.fix_rounded_step(int(_mem.offset) * 1000)
        mem.rtone = mem.ctone = TONES[_mem.tone]
        mem.tmode = TMODES[_mem.tmode]
        mem.mode = MODES[_mem.mode]
        mem.tuning_step = TUNING_STEPS[_mem.tuning_step]
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dtcs]
        # Power is stored as 2 bits to describe the 3 low power levels
        # High power is determined by a different bit.
        if not _mem.ishighpower:
            mem.power = POWER_LEVELS[3 - _mem.power]
        else:
            mem.power = POWER_LEVELS[0]
        mem.skip = SKIP_VALUES[_flg.skip]

        return mem
Exemple #6
0
    def get_memory(self, number):
        flag = self._memobj.flag[number-1]
        _mem = self._memobj.memory[number-1]

        mem = chirp_common.Memory()
        mem.number = number
        if not flag.used:
            mem.empty = True
        if not flag.valid:
            mem.empty = True
            return mem
        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = int(_mem.offset) * 1000
        mem.rtone = mem.ctone = chirp_common.TONES[_mem.tone]
        mem.tmode = TMODES[_mem.tone_mode]
        mem.duplex = DUPLEX[_mem.duplex]
        if mem.duplex == "split":
            mem.offset = chirp_common.fix_rounded_step(mem.offset)
        mem.mode = MODES[_mem.mode]
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dcs]
        mem.tuning_step = STEPS[_mem.tune_step]
        mem.power = POWER_LEVELS[3 - _mem.power]
        mem.skip = flag.pskip and "P" or flag.skip and "S" or ""

        charset = ''.join(CHARSET).ljust(256, '.')
        mem.name = str(_mem.label).rstrip("\xFF").translate(charset)

        return mem
Exemple #7
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number-1]
        _flg = self._memobj.flag[number-1]

        mem = chirp_common.Memory()
        mem.number = number

        if not _flg.visible:
            mem.empty = True
        if not _flg.used:
            mem.empty = True
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.duplex = DUPLEX[_mem.duplex]
        mem.name = self.filter_name(str(_mem.name).rstrip())
        mem.mode = MODES[_mem.mode]
        if mem.mode == "FM" and _mem.half_deviation:
            mem.mode = "NFM"
        mem.tuning_step = STEPS[_mem.tuning_step]
        mem.offset = int(_mem.offset) * 1000
        mem.power = POWER_LEVELS[3 - _mem.power]
        mem.tmode = TMODES[_mem.tmode & 0x3]  # masked so bad mems can be read
        if mem.duplex == "split":
            mem.offset = chirp_common.fix_rounded_step(mem.offset)
        mem.rtone = mem.ctone = chirp_common.OLD_TONES[_mem.tone]
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dtcs]

        mem.skip = _flg.pskip and "P" or _flg.skip and "S" or ""

        return mem
Exemple #8
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number - 1]
        _flag = self._memobj.flags[(number - 1) / 2]

        nibble = ((number - 1) % 2) and "even" or "odd"
        used = _flag["%s_masked" % nibble]
        valid = _flag["%s_valid" % nibble]
        pskip = _flag["%s_pskip" % nibble]
        skip = _flag["%s_skip" % nibble]

        mem = chirp_common.Memory()
        mem.number = number
        if not used:
            mem.empty = True
        if not valid:
            mem.empty = True
            mem.power = POWER_LEVELS[0]
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = int(_mem.offset) * 1000
        mem.rtone = mem.ctone = chirp_common.TONES[_mem.tone]
        if not _mem.is_split_tone:
            mem.tmode = TMODES[_mem.tmode]
            mem.cross_mode = CROSS_MODES[0]
        else:
            mem.tmode = "Cross"
            mem.cross_mode = CROSS_MODES[int(_mem.tmode)]
        mem.duplex = DUPLEX[_mem.duplex]
        if mem.duplex == "split":
            mem.offset = chirp_common.fix_rounded_step(mem.offset)
        mem.mode = MODES[_mem.mode]
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dcs]
        mem.tuning_step = STEPS[_mem.tune_step]
        mem.skip = pskip and "P" or skip and "S" or ""

        if _is220(mem.freq):
            levels = POWER_LEVELS_220
        else:
            levels = POWER_LEVELS
        try:
            mem.power = levels[_mem.power]
        except IndexError:
            LOG.error("Radio reported invalid power level %s (in %s)" %
                      (_mem.power, levels))
            mem.power = levels[0]

        for i in _mem.name:
            if i == "\xFF":
                break
            mem.name += CHARSET[i]
        mem.name = mem.name.rstrip()

        return mem
Exemple #9
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number-1]
        _flag = self._memobj.flags[(number-1)/2]

        nibble = ((number-1) % 2) and "even" or "odd"
        used = _flag["%s_masked" % nibble]
        valid = _flag["%s_valid" % nibble]
        pskip = _flag["%s_pskip" % nibble]
        skip = _flag["%s_skip" % nibble]

        mem = chirp_common.Memory()
        mem.number = number
        if not used:
            mem.empty = True
        if not valid:
            mem.empty = True
            mem.power = POWER_LEVELS[0]
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = int(_mem.offset) * 1000
        mem.rtone = mem.ctone = chirp_common.TONES[_mem.tone]
        if not _mem.is_split_tone:
            mem.tmode = TMODES[_mem.tmode]
            mem.cross_mode = CROSS_MODES[0]
        else:
            mem.tmode = "Cross"
            mem.cross_mode = CROSS_MODES[int(_mem.tmode)]
        mem.duplex = DUPLEX[_mem.duplex]
        if mem.duplex == "split":
            mem.offset = chirp_common.fix_rounded_step(mem.offset)
        mem.mode = MODES[_mem.mode]
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dcs]
        mem.tuning_step = STEPS[_mem.tune_step]
        mem.skip = pskip and "P" or skip and "S" or ""

        if _is220(mem.freq):
            levels = POWER_LEVELS_220
        else:
            levels = POWER_LEVELS
        try:
            mem.power = levels[_mem.power]
        except IndexError:
            print "Radio reported invalid power level %s (in %s)" % (
                _mem.power, levels)
            mem.power = levels[0]

        for i in _mem.name:
            if i == "\xFF":
                break
            mem.name += CHARSET[i]
        mem.name = mem.name.rstrip()

        return mem
Exemple #10
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number]
        _flag = self._memobj.flags[number/2]

        nibble = (number % 2) and "odd" or "even"
        visible = _flag["%s_visible" % nibble]
        valid = _flag["%s_valid" % nibble]
        pskip = _flag["%s_pskip" % nibble]
        skip = _flag["%s_skip" % nibble]

        mem = chirp_common.Memory()
        mem.number = number

        if not visible:
            mem.empty = True
        if not valid:
            mem.empty = True
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = chirp_common.fix_rounded_step(int(_mem.offset) * 1000)
        mem.duplex = DUPLEX[_mem.duplex]
        mem.tuning_step = _mem.step_changed and \
            STEPS[_mem.tune_step] or STEPS[0]
        if _mem.tmode < TMODES.index("Cross"):
            mem.tmode = TMODES[_mem.tmode]
            mem.cross_mode = CROSS_MODES[0]
        else:
            mem.tmode = "Cross"
            mem.cross_mode = CROSS_MODES[_mem.tmode - TMODES.index("Cross")]
        mem.rtone = chirp_common.TONES[_mem.tone]
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dtcs]
        for i in _mem.name:
            if i == 0xFF:
                break
            if i & 0x80 == 0x80:
                # first bit in name is "show name"
                mem.name += CHARSET[0x80 ^ int(i)]
            else:
                mem.name += CHARSET[i]
        mem.name = mem.name.rstrip()
        mem.mode = _mem.narrow and "NFM" or "FM"
        mem.skip = pskip and "P" or skip and "S" or ""
        mem.power = POWER_LEVELS[_mem.power]

        mem.extra = RadioSettingGroup("extra", "Extra Settings")
        rs = RadioSetting("clk_shift", "Clock Shift",
                          RadioSettingValueBoolean(_mem.clk_shift))
        mem.extra.append(rs)

        return mem
Exemple #11
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number]
        _flag = self._memobj.flags[number / 2]

        nibble = (number % 2) and "odd" or "even"
        visible = _flag["%s_visible" % nibble]
        valid = _flag["%s_valid" % nibble]
        pskip = _flag["%s_pskip" % nibble]
        skip = _flag["%s_skip" % nibble]

        mem = chirp_common.Memory()
        mem.number = number

        if not visible:
            mem.empty = True
        if not valid:
            mem.empty = True
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = chirp_common.fix_rounded_step(int(_mem.offset) * 1000)
        mem.duplex = DUPLEX[_mem.duplex]
        mem.tuning_step = _mem.step_changed and STEPS[
            _mem.tune_step] or STEPS[0]
        if _mem.tmode < TMODES.index("Cross"):
            mem.tmode = TMODES[_mem.tmode]
            mem.cross_mode = CROSS_MODES[0]
        else:
            mem.tmode = "Cross"
            mem.cross_mode = CROSS_MODES[_mem.tmode - TMODES.index("Cross")]
        mem.rtone = chirp_common.TONES[_mem.tone]
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dtcs]
        for i in _mem.name:
            if i == 0xFF:
                break
            if i & 0x80 == 0x80:
                # first bit in name is "show name"
                mem.name += CHARSET[0x80 ^ int(i)]
            else:
                mem.name += CHARSET[i]
        mem.name = mem.name.rstrip()
        mem.mode = _mem.narrow and "NFM" or "FM"
        mem.skip = pskip and "P" or skip and "S" or ""
        mem.power = POWER_LEVELS[_mem.power]

        mem.extra = RadioSettingGroup("extra", "Extra Settings")
        rs = RadioSetting("clk_shift", "Clock Shift",
                          RadioSettingValueBoolean(_mem.clk_shift))
        mem.extra.append(rs)

        return mem
Exemple #12
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number-1]
        _flg = self._memobj.flags[(number-1)/2]

        nibble = ((number-1) % 2) and "even" or "odd"
        used = _flg["%s_masked" % nibble]
        valid = _flg["%s_valid" % nibble]
        pskip = _flg["%s_pskip" % nibble]
        skip = _flg["%s_skip" % nibble]

        mem = chirp_common.Memory()
        mem.number = number

        if not used:
            mem.empty = True
        if not valid:
            mem.empty = True
            mem.power = POWER_LEVELS[0]
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = chirp_common.fix_rounded_step(int(_mem.offset) * 1000)
        mem.rtone = mem.ctone = chirp_common.TONES[_mem.tone & 0x3f]
        mem.tmode = TMODES[_mem.tmode]
        mem.duplex = DUPLEX[_mem.duplex]
        mem.mode = MODES[_mem.mode]
        if mem.mode == "FM" and _mem.half_deviation:
            mem.mode = "NFM"
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dcs & 0x7f]
        mem.tuning_step = STEPS[_mem.tune_step]
        mem.skip = pskip and "P" or skip and "S" or ""

        if mem.freq > 220000000 and mem.freq < 225000000:
            mem.power = POWER_LEVELS_220[3 - _mem.power]
        else:
            mem.power = POWER_LEVELS[3 - _mem.power]

        for i in _mem.name:
            if i == 0xFF:
                break
            mem.name += CHARSET[i & 0x7F]
        mem.name = mem.name.rstrip()

        return mem
Exemple #13
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number-1]
        _flg = self._memobj.flags[(number-1)/2]

        nibble = ((number-1) % 2) and "even" or "odd"
        used = _flg["%s_masked" % nibble]
        valid = _flg["%s_valid" % nibble]
        pskip = _flg["%s_pskip" % nibble]
        skip = _flg["%s_skip" % nibble]

        mem = chirp_common.Memory()
        mem.number = number

        if not used:
            mem.empty = True
        if not valid:
            mem.empty = True
            mem.power = POWER_LEVELS[0]
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = chirp_common.fix_rounded_step(int(_mem.offset) * 1000)
        mem.rtone = mem.ctone = chirp_common.TONES[_mem.tone & 0x3f]
        mem.tmode = TMODES[_mem.tmode]
        mem.duplex = DUPLEX[_mem.duplex]
        mem.mode = MODES[_mem.mode]
        if mem.mode == "FM" and _mem.half_deviation:
            mem.mode = "NFM"
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dcs & 0x7f]
        mem.tuning_step = STEPS[_mem.tune_step]
        mem.skip = pskip and "P" or skip and "S" or ""

        if mem.freq > 220000000 and mem.freq < 225000000:
            mem.power = POWER_LEVELS_220[3 - _mem.power]
        else:
            mem.power = POWER_LEVELS[3 - _mem.power]

        for i in _mem.name:
            if i == 0xFF:
                break
            mem.name += CHARSET[i & 0x7F]
        mem.name = mem.name.rstrip()

        return mem
Exemple #14
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number-1]
        _flag = self._memobj.flags[(number-1)/2]

        nibble = ((number-1) % 2) and "even" or "odd"
        used = _flag["%s_masked" % nibble]
        valid = _flag["%s_valid" % nibble]
        pskip = _flag["%s_pskip" % nibble]
        skip = _flag["%s_skip" % nibble]

        mem = chirp_common.Memory()
        mem.number = number

        if not used:
            mem.empty = True
        if not valid:
            mem.empty = True
            mem.power = POWER_LEVELS[0]
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = int(_mem.offset) * 1000
        mem.rtone = mem.ctone = chirp_common.TONES[_mem.tone]
        mem.tmode = VX2_TMODES[_mem.tmode]
        mem.duplex = VX2_DUPLEX[_mem.duplex]
        if mem.duplex == "split":
            mem.offset = chirp_common.fix_rounded_step(mem.offset)
        if _mem.txnarrow and _mem.mode == VX2_MODES.index("FM"):
            # narrow + FM
            mem.mode = "NFM"
        else:
            mem.mode = VX2_MODES[_mem.mode]
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dcs]
        mem.tuning_step = VX2_STEPS[_mem.tune_step]
        mem.skip = pskip and "P" or skip and "S" or ""
        mem.power = POWER_LEVELS[~_mem.power & 0x01]

        for i in _mem.name:
            if i == 0xFF:
                break
            mem.name += CHARSET[i & 0x7F]
        mem.name = mem.name.rstrip()
        return mem
Exemple #15
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number]
        _flag = self._memobj.flags[number]
        visible = _flag["visible"]
        valid = _flag["valid"]
        skip = _flag["skip"]
        pskip = _flag["pskip"]
        mem = chirp_common.Memory()
        mem.number = number

        if not visible:
            mem.empty = True
        if not valid:
            mem.empty = True
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = chirp_common.fix_rounded_step(int(_mem.offset) * 100000)
        mem.duplex = DUPLEX[_mem.duplex]
        mem.tuning_step = STEPS[_mem.tune_step] or STEPS[0]
        mem.tmode = TMODES[_mem.tmode]
        mem.rtone = chirp_common.TONES[_mem.tone]
        for i in _mem.name:
            if i == 0xFF:
                break
            if i & 0x80 == 0x80:
                mem.name += CHARSET[0x80 ^ int(i)]
            else:
                mem.name += CHARSET[i]
        mem.name = mem.name.rstrip()
        mem.mode = _mem.narrow and "NFM" or "FM"
        mem.skip = pskip and "P" or skip and "S" or ""
        mem.power = POWER_LEVELS[_mem.power]

        mem.extra = RadioSettingGroup("extra", "Extra Settings")
        rs = RadioSetting("clk_shift", "Clock Shift",
                          RadioSettingValueBoolean(_mem.clk_shift))
        mem.extra.append(rs)
        return mem
Exemple #16
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number]
        _flag = self._memobj.flags[number]

        mem = chirp_common.Memory()
        mem.number = number
        if self._memobj.flags_whole[number] == 0xFF:
            mem.empty = True
            return mem

        mem.freq = int(_mem.freq) * 1000
        if _mem.fractional:
            mem.freq = chirp_common.fix_rounded_step(mem.freq)
        mem.offset = int(_mem.offset) * 1000
        try:
            mem.rtone = chirp_common.TONES[_mem.rtone]
        except IndexError:
            mem.rtone = 88.5
        try:
            mem.ctone = chirp_common.TONES[_mem.ctone]
        except IndexError:
            mem.ctone = 88.5
        try:
            mem.tuning_step = STEPS[_mem.tune_step]
        except IndexError:
            LOG.error("Invalid tune step index %i" % _mem.tune_step)
        mem.tmode = TMODES[_flag.tmode]
        mem.duplex = DUPLEX[_flag.duplex]
        if mem.freq < 30000000:
            mem.mode = "AM"
        else:
            mem.mode = MODES[_flag.mode]
        if _flag.pskip:
            mem.skip = "P"
        elif _flag.skip:
            mem.skip = "S"

        return mem
Exemple #17
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number]
        _flag = self._memobj.flags[number]

        mem = chirp_common.Memory()
        mem.number = number
        if self._memobj.flags_whole[number] == 0xFF:
            mem.empty = True
            return mem

        mem.freq = int(_mem.freq) * 1000
        if _mem.fractional:
            mem.freq = chirp_common.fix_rounded_step(mem.freq)
        mem.offset = int(_mem.offset) * 1000
        try:
            mem.rtone = chirp_common.TONES[_mem.rtone]
        except IndexError:
            mem.rtone = 88.5
        try:
            mem.ctone = chirp_common.TONES[_mem.ctone]
        except IndexError:
            mem.ctone = 88.5
        try:
            mem.tuning_step = STEPS[_mem.tune_step]
        except IndexError:
            print "Invalid tune step index %i" % _mem.tune_step
        mem.tmode = TMODES[_flag.tmode]
        mem.duplex = DUPLEX[_flag.duplex]
        if mem.freq < 30000000:
            mem.mode = "AM"
        else:
            mem.mode = MODES[_flag.mode]
        if _flag.pskip:
            mem.skip = "P"
        elif _flag.skip:
            mem.skip = "S"

        return mem
Exemple #18
0
    def get_memory(self, number):
        if isinstance(number, str):
            number = _get_special()[number]

        _mem = self._memobj.memory[number]
        _flg = self._memobj.flag[number]

        mem = chirp_common.Memory()
        mem.number = number

        if number < 100:
            # Normal memories
            mem.skip = _flg.skip and "S" or ""
        else:
            # Special memories
            mem.extd_number = util.get_dict_rev(_get_special(), number)

        if _flg.empty:
            mem.empty = True
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = int(_mem.offset) * 100
        if str(_mem.name)[0] != chr(0xFF):
            mem.name = str(_mem.name).rstrip()
        mem.rtone = chirp_common.TONES[_mem.rtone]
        mem.ctone = chirp_common.TONES[_mem.ctone]

        mem.mode = _flg.am and "AM" or "FM"
        mem.duplex = DUPLEX[_flg.duplex]
        mem.tmode = TONE[_flg.tmode]

        if number > 100:
            mem.immutable = ["number", "skip", "extd_number", "name"]

        return mem
Exemple #19
0
    def get_memory(self, number):
        if isinstance(number, str):
            number = _get_special()[number]

        _mem = self._memobj.memory[number]
        _flg = self._memobj.flag[number]

        mem = chirp_common.Memory()
        mem.number = number

        if number < 100:
            # Normal memories
            mem.skip = _flg.skip and "S" or ""
        else:
            # Special memories
            mem.extd_number = util.get_dict_rev(_get_special(), number)

        if _flg.empty:
            mem.empty = True
            return mem

        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq) * 1000)
        mem.offset = int(_mem.offset) * 100
        if str(_mem.name)[0] != chr(0xFF):
            mem.name = str(_mem.name).rstrip()
        mem.rtone = chirp_common.TONES[_mem.rtone]
        mem.ctone = chirp_common.TONES[_mem.ctone]

        mem.mode = _flg.am and "AM" or "FM"
        mem.duplex = DUPLEX[_flg.duplex]
        mem.tmode = TONE[_flg.tmode]

        if number > 100:
            mem.immutable = ["number", "skip", "extd_number", "name"]

        return mem
Exemple #20
0
 def test_fix_rounded_step_750(self):
     self.assertEqual(146118750, chirp_common.fix_rounded_step(146118000))
Exemple #21
0
 def test_fix_rounded_step_500(self):
     self.assertEqual(146112500, chirp_common.fix_rounded_step(146112000))
Exemple #22
0
 def test_fix_rounded_step_250(self):
     self.assertEqual(146106250, chirp_common.fix_rounded_step(146106000))
Exemple #23
0
 def test_fix_rounded_step_250(self):
     self.assertEqual(146106250,
                      chirp_common.fix_rounded_step(146106000))
Exemple #24
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number]
        _flag = self._memobj.flags[(number) / 2]

        nibble = ((number) % 2) and "even" or "odd"
        used = _flag["%s_masked" % nibble]
        valid = _flag["%s_valid" % nibble]
        pskip = _flag["%s_pskip" % nibble]
        skip = _flag["%s_skip" % nibble]

        mem = chirp_common.Memory()

        mem.number = number

        if _mem.get_raw()[0] == "\xFF" or not valid or not used:
            mem.empty = True
            return mem

        mem.tuning_step = STEPS[_mem.step]
        mem.freq = int(_mem.freq) * 1000

        # compensate for 12.5 kHz tuning steps, add 500 Hz if needed
        if (mem.tuning_step == 12.5):
            lastdigit = int(_mem.freq) % 10
            if (lastdigit == 2 or lastdigit == 7):
                mem.freq += 500

        mem.offset = chirp_common.fix_rounded_step(int(_mem.offset) * 1000)
        mem.duplex = DUPLEX[_mem.duplex]
        if _mem.tmode < TMODES.index("Cross"):
            mem.tmode = TMODES[_mem.tmode]
            mem.cross_mode = CROSS_MODES[0]
        else:
            mem.tmode = "Cross"
            mem.cross_mode = CROSS_MODES[_mem.tmode - TMODES.index("Cross")]

        mem.rtone = _decode_tone(_mem.rtone)
        mem.ctone = _decode_tone(_mem.ctone)

        # check for unequal ctone/rtone in TSQL mode.  map it as a
        # cross tone mode
        if mem.rtone != mem.ctone and (mem.tmode == "TSQL"
                                       or mem.tmode == "Tone"):
            mem.tmode = "Cross"
            mem.cross_mode = "Tone->Tone"

        mem.dtcs = _decode_dtcs(_mem.dtcs)
        mem.rx_dtcs = _decode_dtcs(_mem.rx_dtcs)

        # check for unequal dtcs/rx_dtcs in DTCS mode.  map it as a
        # cross tone mode
        if mem.dtcs != mem.rx_dtcs and mem.tmode == "DTCS":
            mem.tmode = "Cross"
            mem.cross_mode = "DTCS->DTCS"

        if (int(_mem.name[0]) & 0x80) != 0:
            mem.name = _decode_name(_mem.name)

        mem.mode = _mem.isnarrow and "NFM" or "FM"
        mem.skip = pskip and "P" or skip and "S" or ""
        mem.power = POWER_LEVELS[3 - _mem.power]

        return mem
Exemple #25
0
 def test_fix_rounded_step_500(self):
     self.assertEqual(146112500,
                      chirp_common.fix_rounded_step(146112000))
Exemple #26
0
 def test_fix_rounded_step_750(self):
     self.assertEqual(146118750,
                      chirp_common.fix_rounded_step(146118000))
Exemple #27
0
    def get_memory(self, number):
        _mem = self._memobj.memory[number]
        _flag = self._memobj.flags[(number)/2]

        nibble = ((number) % 2) and "even" or "odd"
        used = _flag["%s_masked" % nibble]
        valid = _flag["%s_valid" % nibble]
        pskip = _flag["%s_pskip" % nibble]
        skip = _flag["%s_skip" % nibble]

        mem = chirp_common.Memory()

        mem.number = number

        if _mem.get_raw()[0] == "\xFF" or not valid or not used:
            mem.empty = True
            return mem

        mem.tuning_step = STEPS[_mem.step]
        mem.freq = int(_mem.freq) * 1000

        # compensate for 12.5 kHz tuning steps, add 500 Hz if needed
        if(mem.tuning_step == 12.5):
            lastdigit = int(_mem.freq) % 10
            if (lastdigit == 2 or lastdigit == 7):
                mem.freq += 500

        mem.offset = chirp_common.fix_rounded_step(int(_mem.offset) * 1000)
        mem.duplex = DUPLEX[_mem.duplex]
        if _mem.tmode < TMODES.index("Cross"):
            mem.tmode = TMODES[_mem.tmode]
            mem.cross_mode = CROSS_MODES[0]
        else:
            mem.tmode = "Cross"
            mem.cross_mode = CROSS_MODES[_mem.tmode - TMODES.index("Cross")]

        mem.rtone = _decode_tone(_mem.rtone)
        mem.ctone = _decode_tone(_mem.ctone)

        # check for unequal ctone/rtone in TSQL mode.  map it as a
        # cross tone mode
        if mem.rtone != mem.ctone and (mem.tmode == "TSQL" or
                                       mem.tmode == "Tone"):
            mem.tmode = "Cross"
            mem.cross_mode = "Tone->Tone"

        mem.dtcs = _decode_dtcs(_mem.dtcs)
        mem.rx_dtcs = _decode_dtcs(_mem.rx_dtcs)

        # check for unequal dtcs/rx_dtcs in DTCS mode.  map it as a
        # cross tone mode
        if mem.dtcs != mem.rx_dtcs and mem.tmode == "DTCS":
            mem.tmode = "Cross"
            mem.cross_mode = "DTCS->DTCS"

        if (int(_mem.name[0]) & 0x80) != 0:
            mem.name = _decode_name(_mem.name)

        mem.mode = _mem.isnarrow and "NFM" or "FM"
        mem.skip = pskip and "P" or skip and "S" or ""
        mem.power = POWER_LEVELS[3 - _mem.power]

        return mem
Exemple #28
0
    def get_memory(self, number):
        mem = chirp_common.Memory()
        mem.number = number

        _mem = self._memobj.memory[number-1]

        mem.empty = _mem.empty
        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq_rx) * 1000)

        for i in range(0, 4):
            index = (_mem.name >> (i*6)) & 0x3F
            mem.name += CHARSET[index]

        freq_tx = chirp_common.fix_rounded_step(int(_mem.freq_tx) * 1000)
        if _mem.txinhibit:
            mem.duplex = "off"
        elif mem.freq == freq_tx:
            mem.duplex = ""
            mem.offset = 0
        elif 144000000 <= mem.freq < 148000000:
            mem.duplex = "+" if freq_tx > mem.freq else "-"
            mem.offset = abs(mem.freq - freq_tx)
        else:
            mem.duplex = "split"
            mem.offset = freq_tx

        mem.mode = _mem.narrow and "NFM" or "FM"
        mem.power = POWER_LEVELS[_mem.low_power]

        rtone = int(_mem.rtone)
        ctone = int(_mem.ctone)
        tmode_tx = tmode_rx = ""

        if rtone & 0x80:
            tmode_tx = "DTCS"
            mem.dtcs = chirp_common.DTCS_CODES[int(rtone) - 0x80]
        elif rtone:
            tmode_tx = "Tone"
            mem.rtone = TONES[rtone - 1]
            if not ctone:
                # not used, but this is a better default than 88.5
                mem.ctone = TONES[rtone - 1]

        if ctone & 0x80:
            tmode_rx = "DTCS"
            mem.rx_dtcs = chirp_common.DTCS_CODES[int(ctone) - 0x80]
        elif ctone:
            tmode_rx = "Tone"
            mem.ctone = TONES[ctone - 1]

        if tmode_tx == "Tone" and not tmode_rx:
            mem.tmode = "Tone"
        elif tmode_tx == tmode_rx and tmode_tx == "Tone" and \
                mem.rtone == mem.ctone:
            mem.tmode = "TSQL"
        elif tmode_tx == tmode_rx and tmode_tx == "DTCS" and \
                mem.dtcs == mem.rx_dtcs:
            mem.tmode = "DTCS"
        elif tmode_rx or tmode_tx:
            mem.tmode = "Cross"
            mem.cross_mode = "%s->%s" % (tmode_tx, tmode_rx)

        mem.skip = _mem.skip and "S" or ""

        return mem
Exemple #29
0
    def get_memory(self, number):
        mem = chirp_common.Memory()
        mem.number = number

        _mem = self._memobj.memory[number - 1]

        mem.empty = _mem.empty
        mem.freq = chirp_common.fix_rounded_step(int(_mem.freq_rx) * 1000)

        for i in range(0, 4):
            index = (_mem.name >> (i * 6)) & 0x3F
            mem.name += CHARSET[index]

        freq_tx = chirp_common.fix_rounded_step(int(_mem.freq_tx) * 1000)
        if _mem.txinhibit:
            mem.duplex = "off"
        elif mem.freq == freq_tx:
            mem.duplex = ""
            mem.offset = 0
        elif 144000000 <= mem.freq < 148000000:
            mem.duplex = "+" if freq_tx > mem.freq else "-"
            mem.offset = abs(mem.freq - freq_tx)
        else:
            mem.duplex = "split"
            mem.offset = freq_tx

        mem.mode = _mem.narrow and "NFM" or "FM"
        mem.power = POWER_LEVELS[_mem.low_power]

        rtone = int(_mem.rtone)
        ctone = int(_mem.ctone)
        tmode_tx = tmode_rx = ""

        if rtone & 0x80:
            tmode_tx = "DTCS"
            mem.dtcs = chirp_common.DTCS_CODES[int(rtone) - 0x80]
        elif rtone:
            tmode_tx = "Tone"
            mem.rtone = TONES[rtone - 1]
            if not ctone:
                # not used, but this is a better default than 88.5
                mem.ctone = TONES[rtone - 1]

        if ctone & 0x80:
            tmode_rx = "DTCS"
            mem.rx_dtcs = chirp_common.DTCS_CODES[int(ctone) - 0x80]
        elif ctone:
            tmode_rx = "Tone"
            mem.ctone = TONES[ctone - 1]

        if tmode_tx == "Tone" and not tmode_rx:
            mem.tmode = "Tone"
        elif tmode_tx == tmode_rx and tmode_tx == "Tone" and \
                mem.rtone == mem.ctone:
            mem.tmode = "TSQL"
        elif tmode_tx == tmode_rx and tmode_tx == "DTCS" and \
                mem.dtcs == mem.rx_dtcs:
            mem.tmode = "DTCS"
        elif tmode_rx or tmode_tx:
            mem.tmode = "Cross"
            mem.cross_mode = "%s->%s" % (tmode_tx, tmode_rx)

        mem.skip = _mem.skip and "S" or ""

        return mem