Project

General

Profile

New Model #144 » ftm350-improvements.diff

Michal D, 05/13/2013 10:26 AM

View differences:

chirp-daily-20130511-new/chirp/ftm350.py 2013-05-13 19:11:02.119517033 +0200
18 18
import os
19 19

  
20 20
from chirp import chirp_common, yaesu_clone, directory, errors, util
21
from chirp import ft7800
22 21
from chirp import bitwise, memmap
23 22
from chirp.settings import RadioSettingGroup, RadioSetting
24 23
from chirp.settings import RadioSettingValueInteger, RadioSettingValueString
......
30 29
     unknown1:5;
31 30
  u8 unknown2:1,
32 31
     mode:3,
33
     unknown8:2,
32
     unknown8:1,
33
     oddsplit:1,
34 34
     duplex:2;
35 35
  bbcd freq[3];
36 36
  u8 unknownA:1,
37 37
     tmode:3,
38 38
     unknownB:4;
39
  u8 unknown3[3];
40
  u8 unknown4:2,
39
  bbcd split[3];
40
  u8 power:2,
41 41
     tone:6;
42 42
  u8 unknownC:1,
43 43
     dtcs:7;
......
81 81
_TMODES = ["", "Tone", "TSQL", "-RVT", "DTCS", "-PR", "-PAG"]
82 82
TMODES = ["", "Tone", "TSQL", "", "DTCS", "", ""]
83 83
MODES = ["FM", "AM", "NFM", "", "WFM"]
84
DUPLEXES = ["", "-", "+"]
84
DUPLEXES = ["", "", "-", "+", "split"]
85 85
CHARSET = ('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!"' +
86 86
           '````````````````````````````````````                            ')
87 87

  
88
POWER_LEVELS = [chirp_common.PowerLevel("Hi", watts=50),
89
                chirp_common.PowerLevel("Mid", watts=20),
90
                chirp_common.PowerLevel("Low", watts=5)]
91

  
88 92
SKIPS = ["", "S", "P"]
89 93

  
90 94
def aprs_call_to_str(_call):
......
182 186
            status.msg = "Cloning to radio"
183 187
            radio.status_fn(status)
184 188

  
189
def get_freq(rawfreq):
190
    """Decode a frequency that may include a fractional step flag"""
191
    # Ugh.  The 0x80 and 0x40 indicate values to add to get the
192
    # real frequency.  Gross.
193
    if rawfreq > 8000000000:
194
        rawfreq = (rawfreq - 8000000000) + 5000
195

  
196
    if rawfreq > 4000000000:
197
        rawfreq = (rawfreq - 4000000000) + 2500
198

  
199
    if rawfreq > 2000000000:
200
        rawfreq = (rawfreq - 2000000000) + 1250
201

  
202
    return rawfreq
203

  
204
def set_freq(freq, obj, field):
205
    """Encode a frequency with any necessary fractional step flags"""
206
    obj[field] = freq / 10000
207
    if (freq % 10000) == 5000:
208
        obj[field][0].set_bits(0x80)
209

  
210
    if (freq % 10000) == 2500:
211
        obj[field][0].set_bits(0x40)
212

  
213
    if (freq % 10000) == 1250:
214
        obj[field][0].set_bits(0x20)
215

  
216
    return freq
217

  
185 218
@directory.register
186 219
class FTM350Radio(yaesu_clone.YaesuCloneModeRadio):
187 220
    """Yaesu FTM-350"""
......
209 242
        rf.valid_name_length = 8
210 243
        rf.valid_characters = CHARSET
211 244
        rf.memory_bounds = (0, 500)
245
        rf.valid_power_levels = POWER_LEVELS
212 246
        rf.valid_bands = [(  500000,    1800000),
213 247
                          (76000000,  250000000),
214 248
                          (30000000, 1000000000)]
249
        rf.can_odd_split = True
215 250
        return rf
216 251

  
217 252
    def get_sub_devices(self):
......
267 302
            mem.empty = True
268 303
            return mem
269 304

  
270
        mem.freq = ft7800.get_freq(int(_mem.freq) * 10000)
305
        mem.freq = get_freq(int(_mem.freq) * 10000)
271 306
        mem.rtone = chirp_common.TONES[_mem.tone]
272 307
        mem.tmode = TMODES[_mem.tmode]
273
        mem.duplex = DUPLEXES[_mem.duplex - 1]
308

  
309
        if _mem.oddsplit:
310
            mem.duplex = "split"
311
            mem.offset = get_freq(int(_mem.split) * 10000)
312
        else: 
313
            mem.duplex = DUPLEXES[_mem.duplex]
314
            mem.offset = int(_mem.offset) * 50000
315

  
274 316
        mem.dtcs = chirp_common.DTCS_CODES[_mem.dtcs]
275
        mem.offset = int(_mem.offset) * 50000
276 317
        mem.mode = MODES[_mem.mode]
277 318
        mem.skip = SKIPS[_mem.skip]
319
        mem.power = POWER_LEVELS[_mem.power]
278 320

  
279 321
        for char in _lab.string:
280 322
            if char == 0xCA:
......
298 340
        if mem.empty:
299 341
            return
300 342

  
301
        ft7800.set_freq(mem.freq, _mem, 'freq')
343
        set_freq(mem.freq, _mem, 'freq')
302 344
        _mem.tone = chirp_common.TONES.index(mem.rtone)
303 345
        _mem.dtcs = chirp_common.DTCS_CODES.index(mem.dtcs)
304 346
        _mem.tmode = TMODES.index(mem.tmode)
305
        _mem.duplex = DUPLEXES.index(mem.duplex) + 1
306
        _mem.offset = mem.offset / 50000
307 347
        _mem.mode = MODES.index(mem.mode)
308 348
        _mem.skip = SKIPS.index(mem.skip)
309 349

  
350
        if mem.duplex == "split":
351
            set_freq(mem.offset, _mem, 'split')
352
            _mem.oddsplit = True
353
            _mem.duplex = 0
354
        else:
355
            _mem.duplex = DUPLEXES.index(mem.duplex)
356
            _mem.offset = mem.offset / 50000
357

  
358
        if mem.power:
359
            _mem.power = POWER_LEVELS.index(mem.power)
360
        else:
361
            _mem.power = 0
362

  
310 363
        for i in range(0, 8):
311 364
            try:
312 365
                char = CHARSET.index(mem.name[i])
(4-4/4)