Project

General

Profile

New Model #1469 » ftm400.patch

Updated patch, reads both types of file from SD card - Tom Hayward, 03/14/2014 01:58 PM

View differences:

/dev/null Thu Jan 01 00:00:00 1970 +0000 → chirp/ftm400.py Fri Mar 14 13:51:53 2014 -0700
1
# Copyright 2014 Tom Hayward <tom@tomh.us>
2
#
3
# This program is free software: you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation, either version 3 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
15

  
16
from chirp import bitwise, directory, ftm350
17

  
18

  
19
mem_struct = """
20
struct mem {
21
  u8 used:1,
22
     skip:2,
23
     unknown1:5;
24
  u8 unknown2:1,
25
     mode:3,
26
     unknown8:1,
27
     oddsplit:1,
28
     duplex:2;
29
  bbcd freq[3];
30
  u8 unknownA:1,
31
     tmode:3,
32
     unknownB:4;
33
  bbcd split[3];
34
  u8 power:2,
35
     tone:6;
36
  u8 unknownC:1,
37
     dtcs:7;
38
  u8 showalpha:1,
39
     unknown5:7;
40
  u8 unknown6;
41
  u8 offset;
42
  u8 unknown7[2];
43
};
44

  
45
struct lab {
46
  u8 string[8];
47
};
48

  
49
struct callsign {
50
  char call[6];
51
  u8 ssid;
52
};
53
"""
54

  
55
mem_file_offsets_full = mem_struct + """
56
#seekto 0x0508;
57
struct callsign aprs_my_callsign;
58

  
59
#seekto 0x00b0;
60
struct mem left_memory_zero;
61

  
62
#seekto 0x01b0;
63
struct lab left_label_zero;
64

  
65
#seekto 0x00b0;
66
struct mem right_memory_zero;
67

  
68
#seekto 0x01b0;
69
struct lab right_label_zero;
70

  
71
#seekto 0x0800;
72
struct mem left_memory[500];
73

  
74
#seekto 0x0800;
75
struct mem right_memory[500];
76

  
77
#seekto 0x48C0;
78
struct lab left_label[518];
79
struct lab right_label[518];
80
"""
81

  
82
mem_file_offsets_memory_only = mem_struct + """
83
#seekto 0x00b0;
84
struct mem left_memory_zero;
85

  
86
#seekto 0x01b0;
87
struct lab left_label_zero;
88

  
89
#seekto 0x00b0;
90
struct mem right_memory_zero;
91

  
92
#seekto 0x01b0;
93
struct lab right_label_zero;
94

  
95
#seekto 0x0200;
96
struct mem left_memory[500];
97

  
98
#seekto 0x0200;
99
struct mem right_memory[500];
100

  
101
#seekto 0x42C0;
102
struct lab left_label[518];
103
struct lab right_label[518];
104
"""
105

  
106

  
107
@directory.register
108
class FTM400Radio(ftm350.FTM350Radio):
109
    """Yaesu FTM-400"""
110
    BAUD_RATE = 48000
111
    VENDOR = "Yaesu"
112
    MODEL = "FTM-400"
113

  
114
    _model = "AH034$"
115

  
116
    def get_sub_devices(self):
117
        return [FTM400RadioLeft(self._mmap), FTM400RadioRight(self._mmap)]
118

  
119
    def process_mmap(self):
120
        for cls in [FTM400FileMemory, FTM400FileFull]:
121
            if cls._memsize == len(self._mmap):
122
                self._memobj = bitwise.parse(cls._mem_format, self._mmap)
123
                return
124

  
125
    @classmethod
126
    def match_model(self, filedata, filename):
127
        print filename, len(filedata)
128
        return len(filedata) == self._memsize \
129
            and filedata.startswith(self._model)
130

  
131

  
132
class FTM400RadioLeft(FTM400Radio):
133
    VARIANT = "Left"
134
    _vfo = "left"
135

  
136

  
137
class FTM400RadioRight(FTM400Radio):
138
    VARIANT = "Right"
139
    _vfo = "right"
140

  
141

  
142
@directory.register
143
class FTM400FileFull(FTM400Radio):
144
    """Yaesu FTM-400 memory + settings file from SD card"""
145
    VENDOR = "Yaesu"
146
    MODEL = "FTM-400 full file"
147

  
148
    _memsize = 76800
149
    _mem_format = mem_file_offsets_full
150

  
151

  
152
@directory.register
153
class FTM400FileMemory(FTM400Radio):
154
    """Yaesu FTM-400 memories-only file from SD card"""
155
    VENDOR = "Yaesu"
156
    MODEL = "FTM-400 memory file"
157

  
158
    _memsize = 25600
159
    _mem_format = mem_file_offsets_memory_only
chirpui/mainapp.py Sun Mar 02 19:37:13 2014 -0500 → chirpui/mainapp.py Fri Mar 14 13:51:53 2014 -0700
274 274
            types = [(_("CHIRP Radio Images") + " (*.img)", "*.img"),
275 275
                     (_("CHIRP Files") + " (*.chirp)", "*.chirp"),
276 276
                     (_("CSV Files") + " (*.csv)", "*.csv"),
277
                     (_("FTM-400 Files") + " (*.dat)", "*.dat"),
277 278
                     (_("EVE Files (VX5)") + " (*.eve)", "*.eve"),
278 279
                     (_("ICF Files") + " (*.icf)", "*.icf"),
279 280
                     (_("VX5 Commander Files") + " (*.vx5)", "*.vx5"),
......
733 734
        types = [(_("CHIRP Files") + " (*.chirp)", "*.chirp"),
734 735
                 (_("CHIRP Radio Images") + " (*.img)", "*.img"),
735 736
                 (_("CSV Files") + " (*.csv)", "*.csv"),
737
                 (_("FTM-400 Files") + " (*.dat)", "*.dat"),
736 738
                 (_("EVE Files (VX5)") + " (*.eve)", "*.eve"),
737 739
                 (_("ICF Files") + " (*.icf)", "*.icf"),
738 740
                 (_("Kenwood HMK Files") + " (*.hmk)", "*.hmk"),
(3-3/6)