<html>
<head>
<meta name="generator" content="Windows Mail 17.5.9600.20689">
<style type="text/css"><!--html { font-family: "Color Emoji", "Calibri", "Segoe UI", "Meiryo", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "sans-serif"; }--></style><style data-externalstyle="true"><!--
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph {
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
}
p.MsoNormal, li.MsoNormal, div.MsoNormal {
margin:0in;
margin-bottom:.0001pt;
}
p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst, 
p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle, 
p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast {
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
line-height:115%;
}
--></style></head>
<body dir="ltr">
<div data-externalstyle="false" dir="ltr" style="font-family: 'Calibri', 'Segoe UI', 'Meiryo', 'Microsoft YaHei UI', 'Microsoft JhengHei UI', 'Malgun Gothic', 'sans-serif';font-size:12pt;"><div>Ah, I see.&nbsp; I misunderstood why you were adding _encode/_decode_name.&nbsp; It was code cleanup for the Yaesu specific&nbsp;character translation, not a reimplementation of chirp_common.filter_name.&nbsp; I guess that's what I get for working in two different radio codebases at once.</div><div><br></div><div>Anyway, thanks for all the work on the FT-60.&nbsp; Let me know if you're thinking of adding settings and need help or testing.&nbsp; </div><div><br></div><div>I'm probably going to look at the bug I filed on com port handling in Windows #2087 next.&nbsp; Since I'm trying to Bluetooth SPP enable my Kenwood next, I would like better error handling.&nbsp; It needs two serial ports (one for TNC, one for programming) and choosing the wrong one is going to happen frequently<br></div><div data-signatureblock="true"><div><br></div><div>Sent from Windows Mail</div><div><br></div></div><div style="padding-top: 5px; border-top-color: rgb(229, 229, 229); border-top-width: 1px; border-top-style: solid;"><div><font face=" 'Calibri', 'Segoe UI', 'Meiryo', 'Microsoft YaHei UI', 'Microsoft JhengHei UI', 'Malgun Gothic', 'sans-serif'" style='line-height: 15pt; letter-spacing: 0.02em; font-family: "Calibri", "Segoe UI", "Meiryo", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "sans-serif"; font-size: 12pt;'><b>From:</b>&nbsp;<a href="mailto:kosta@alumni.uvic.ca" target="_parent">Kosta Arvanitis</a><br><b>Sent:</b>&nbsp;‎Sunday‎, ‎January‎ ‎11‎, ‎2015 ‎12‎:‎01‎ ‎AM<br><b>To:</b>&nbsp;<a href="mailto:chirp_devel@intrepid.danplanet.com" target="_parent">chirp_devel@intrepid.danplanet.com</a></font></div></div><div><br></div><div dir=""><div id="readingPaneBodyContent">Good questions.<br><br><br>First,&nbsp; the ft-60 memory is zero indexed (0-999) however, the radio itself displays memories as (1-1000).&nbsp; This change mimics the behaviour of the radio more closely, in that the user in the chirp app will see memories labeled 1-1000 as in the radio.<br><br><br>Second, the decoding/encoding of the name was not altered in any way from the original implementation as continues to pass unit test for this. ie:&nbsp; invalid characters continue to be replaced with ' ', as to why this is case I am not sure as I would expect either a truncation or invalid char to be displayed.<br><br><br><br>-kosta<br><br><br><br>________________________________<br>&gt; From: stickpatrick@gmail.com <br>&gt; To: chirp_devel@intrepid.danplanet.com <br>&gt; Date: Sun, 11 Jan 2015 06:09:04 +0000 <br>&gt; Subject: [chirp_devel] Re: [PATCH] [FT-60] Fix Memory Bounds and Seek Offsets <br>&gt; <br>&gt; I'll give this a try tomorrow, but 2 questions: <br>&gt; From the radio standpoint, is the memory laid out as 000-999, or 1-999, <br>&gt; then 000? <br>&gt; Or to put it another way - will CHIRP display the radio's 000 as 1000 or 0? <br>&gt; <br>&gt; (this one is for Dan) - it looks like this replaces invalid characters <br>&gt; with ' 'rather than truncating them. Is this the desired behavior? <br>&gt; When I fixed a similar bug for the TH-D7, I preserved the existing <br>&gt; truncation behavior rather than replacing with ' ‘ <br>&gt; <br>&gt; Sent from Windows Mail <br>&gt; <br>&gt; From: Kosta Arvanitis&lt;mailto:kosta@alumni.uvic.ca&gt; <br>&gt; Sent: ‎Saturday‎, ‎January‎ ‎10‎, ‎2015 ‎7‎:‎40‎ ‎PM <br>&gt; To: chirp_devel@intrepid.danplanet.com&lt;mailto:chirp_devel@intrepid.danplanet.com&gt; <br>&gt; <br>&gt; # HG changeset patch <br>&gt; # User K. Arvanitis &lt;kosta@alumni.uvic.ca&gt; <br>&gt; # Date 1420442263 28800 <br>&gt; # Sun Jan 04 23:17:43 2015 -0800 <br>&gt; # Node ID 15c8e53a218702d708f5a018c115965dd2fdbb0c <br>&gt; # Parent 9e67e7ba60e0fd2accd89d899735b5040da8032b <br>&gt; [FT-60] Fix Memory Bounds and Seek Offsets <br>&gt; <br>&gt; This adjusts the memory bounds of the Yaesu FT-60 to include all 1000 <br>&gt; memory channels, in addition the seek offsets were adjusted to align <br>&gt; correctly to their appropriate memory locations. <br>&gt; <br>&gt; diff -r 9e67e7ba60e0 -r 15c8e53a2187 chirp/ft60.py <br>&gt; --- a/chirp/ft60.py Sun Jan 04 23:15:45 2015 -0800 <br>&gt; +++ b/chirp/ft60.py Sun Jan 04 23:17:43 2015 -0800 <br>&gt; @@ -104,9 +104,31 @@ <br>&gt; flags += 0x40 <br>&gt; return freqraw, flags <br>&gt; <br>&gt; +def _decode_name(mem): <br>&gt; + name = "" <br>&gt; + for i in mem: <br>&gt; + if i == 0xFF: <br>&gt; + break <br>&gt; + try: <br>&gt; + name += CHARSET[i] <br>&gt; + except IndexError: <br>&gt; + print "Unknown char index: %i " % (i) <br>&gt; + return name <br>&gt; + <br>&gt; + <br>&gt; +def _encode_name(mem): <br>&gt; + name = [None]*6 <br>&gt; + for i in range(0, 6): <br>&gt; + try: <br>&gt; + name[i] = CHARSET.index(mem[i]) <br>&gt; + except IndexError: <br>&gt; + name[i] = CHARSET.index(" ") <br>&gt; + <br>&gt; + return name <br>&gt; + <br>&gt; <br>&gt; MEM_FORMAT = """ <br>&gt; -#seekto 0x0238; <br>&gt; +#seekto 0x0248; <br>&gt; struct { <br>&gt; u8 used:1, <br>&gt; unknown1:1, <br>&gt; @@ -129,7 +151,7 @@ <br>&gt; } memory[1000]; <br>&gt; <br>&gt; #seekto 0x6EC8; <br>&gt; -// skips:2 for Memory M in [1, 1000] is in skipflags[(M-1)/4].skip((M-1)%4). <br>&gt; +// skips:2 for Memory M in [1, 1000] is in flags[(M-1)/4].skip((M-1)%4). <br>&gt; // Interpret with SKIPS[]. <br>&gt; // PMS memories L0 - U50 aka memory 1001 - 1100 don't have skip flags. <br>&gt; struct { <br>&gt; @@ -137,9 +159,9 @@ <br>&gt; skip2:2, <br>&gt; skip1:2, <br>&gt; skip0:2; <br>&gt; -} skipflags[250]; <br>&gt; +} flags[250]; <br>&gt; <br>&gt; -#seekto 0x4700; <br>&gt; +#seekto 0x4708; <br>&gt; struct { <br>&gt; u8 name[6]; <br>&gt; u8 use_name:1, <br>&gt; @@ -239,7 +261,7 @@ <br>&gt; <br>&gt; def get_features(self): <br>&gt; rf = chirp_common.RadioFeatures() <br>&gt; - rf.memory_bounds = (1, 999) <br>&gt; + rf.memory_bounds = (1, 1000) <br>&gt; rf.valid_duplexes = DUPLEX <br>&gt; rf.valid_tmodes = TMODES <br>&gt; rf.valid_power_levels = POWER_LEVELS <br>&gt; @@ -285,18 +307,16 @@ <br>&gt; self._memobj = bitwise.parse(MEM_FORMAT, self._mmap) <br>&gt; <br>&gt; def get_raw_memory(self, number): <br>&gt; - _array_index = number - 1 <br>&gt; - return repr(self._memobj.memory[number]) + \ <br>&gt; - repr(self._memobj.skipflags[_array_index/4]) + \ <br>&gt; - repr(self._memobj.names[number]) <br>&gt; + return repr(self._memobj.memory[number - 1]) + \ <br>&gt; + repr(self._memobj.flags[(number - 1) / 4]) + \ <br>&gt; + repr(self._memobj.names[number - 1]) <br>&gt; <br>&gt; def get_memory(self, number): <br>&gt; - _array_index = number - 1 <br>&gt; - _mem = self._memobj.memory[number] <br>&gt; - _skp = self._memobj.skipflags[_array_index/4] <br>&gt; - _nam = self._memobj.names[number] <br>&gt; + _mem = self._memobj.memory[number - 1] <br>&gt; + _skp = self._memobj.flags[(number - 1) / 4] <br>&gt; + _nam = self._memobj.names[number - 1] <br>&gt; <br>&gt; - skip = _skp["skip%i" % (_array_index%4)] <br>&gt; + skip = _skp["skip%i" % ((number - 1) % 4)] <br>&gt; <br>&gt; mem = chirp_common.Memory() <br>&gt; mem.number = number <br>&gt; @@ -320,22 +340,14 @@ <br>&gt; mem.skip = SKIPS[skip] <br>&gt; <br>&gt; if _nam.use_name and _nam.valid: <br>&gt; - for i in _nam.name: <br>&gt; - if i == 0xFF: <br>&gt; - break <br>&gt; - try: <br>&gt; - mem.name += CHARSET[i] <br>&gt; - except IndexError: <br>&gt; - print "Memory %i: Unknown char index: %i " % (number, i) <br>&gt; - mem.name = mem.name.rstrip() <br>&gt; + mem.name = _decode_name(_nam.name).rstrip() <br>&gt; <br>&gt; return mem <br>&gt; <br>&gt; def set_memory(self, mem): <br>&gt; - _array_index = mem.number - 1 <br>&gt; - _mem = self._memobj.memory[mem.number] <br>&gt; - _skp = self._memobj.skipflags[_array_index/4] <br>&gt; - _nam = self._memobj.names[mem.number] <br>&gt; + _mem = self._memobj.memory[mem.number - 1] <br>&gt; + _skp = self._memobj.flags[(mem.number - 1) / 4] <br>&gt; + _nam = self._memobj.names[mem.number - 1] <br>&gt; <br>&gt; if mem.empty: <br>&gt; _mem.used = False <br>&gt; @@ -364,13 +376,8 @@ <br>&gt; _mem.isam = mem.mode == "AM" <br>&gt; _mem.step = STEPS.index(mem.tuning_step) <br>&gt; <br>&gt; - _skp["skip%i" % (_array_index%4)] = SKIPS.index(mem.skip) <br>&gt; + _skp["skip%i" % ((mem.number - 1) % 4)] = SKIPS.index(mem.skip) <br>&gt; <br>&gt; - for i in range(0, 6): <br>&gt; - try: <br>&gt; - _nam.name[i] = CHARSET.index(mem.name[i]) <br>&gt; - except IndexError: <br>&gt; - _nam.name[i] = CHARSET.index(" ") <br>&gt; - <br>&gt; + _nam.name = _encode_name(mem.name) <br>&gt; _nam.use_name = mem.name.strip() and True or False <br>&gt; _nam.valid = _nam.use_name <br>&gt; _______________________________________________ <br>&gt; chirp_devel mailing list <br>&gt; chirp_devel@intrepid.danplanet.com <br>&gt; http://intrepid.danplanet.com/mailman/listinfo/chirp_devel <br>&gt; Developer docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers <br>&gt; <br>&gt; _______________________________________________ chirp_devel mailing <br>&gt; list chirp_devel@intrepid.danplanet.com <br>&gt; http://intrepid.danplanet.com/mailman/listinfo/chirp_devel Developer <br>&gt; docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>_______________________________________________<br>chirp_devel mailing list<br>chirp_devel@intrepid.danplanet.com<br>http://intrepid.danplanet.com/mailman/listinfo/chirp_devel<br>Developer docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers</div></div></div>
</body>
</html>