<div dir="ltr">On Wed, Mar 13, 2013 at 11:52 AM, Dan Smith <span dir="ltr">&lt;<a href="mailto:dsmith@danplanet.com" target="_blank">dsmith@danplanet.com</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Wow, this is a lot of work, thanks for doing it!<br>
<div class="im"><br>
&gt; You can select multiple plans because, for example, you might want<br>
&gt; both an IARU plan and a country plan.<br>
<br>
</div>So, from reading part of the code, I got the impression that perhaps<br>
the plans are/should be hierarchical. Meaning, that the NA plan is a<br>
subset of IARU 2. Is that the case?</blockquote><div><br></div><div style>Yes, however a North American Marine band plan and a North American Amateur band plan would both be under an ITU region 2 band plan, and you might want to use both.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> I ask because I&#39;m wondering if it<br>
makes more sense to let folks choose IARU 2 or NA (which would inherit<br>
from IARU, and perhaps override some bits) instead of this<br>
mix-and-match behavior. I don&#39;t think it would make much sense to have<br>
NA and IARU 1 enabled at the same time, for example, but maybe I&#39;m<br>
wrong. Of course, that has me thinking that we should be utilizing<br>
inheritance...<br></blockquote><div><br></div><div style>You&#39;re right.  I&#39;ll try it with objects and see how it looks.  I expect that will make it easier to calculate and claim the repeater input blocks too (with opposite offsets).</div>

<div style> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="im">&gt; The format in bandplan_au.py is the format I prefer.  The format in<br>
&gt; bandplan_na.py is carried over from chirp_common.py and should be<br>
&gt; replaced by the new format once we agree on how it should look.<br>
<br>
</div>It&#39;s very close to what I pulled out of thin air earlier, and overall I<br>
think I&#39;m fine with it. I do wonder if we should be using objects<br>
instead of just primitives, but I&#39;m not sure.<br>
<div class="im"><br>
&gt; While testing this I noticed that there are multiple instances of the<br>
&gt; config class, with different and overlapping lifetimes.  This means<br>
&gt; that sometimes configuration changes are applied and sometimes they<br>
&gt; are not. That is a separate issue.<br>
<br>
</div>Hmm? Config is a singleton, and the various proxy objects should just be<br>
views into it. I&#39;ve not seen any such issues, but if you find them, we<br>
should definitely get them resolved.<br></blockquote><div><br></div><div style>I&#39;ve filed bug #683</div><div style> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

&gt; +  &quot;bands&quot;: {<br>
&gt; +    (28.000e6, 29.700e6): {<br>
<br>
I don&#39;t like the specification of these as floats. Can we use ints,<br>
perhaps with easy shortcut helpers such as:<br>
<br>
  (k(28000), k(28700))<br>
<br>
and<br>
<br>
  (m(146), m(148))<br></blockquote><div><br></div><div style>Sounds good to me.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

&gt; +def _walk_bandplan(freq, bandplan, defaults):<br>
&gt; +    # Override defaults with values from this level.<br>
&gt; +    for name in defaults:<br>
&gt; +        defaults[name] = bandplan.get(name, defaults[name])<br>
&gt; +<br>
&gt; +    # Go more specific if the frequency fits within an available<br>
&gt; sublevel.<br>
&gt; +    for key, vals in bandplan.items():<br>
&gt; +        if key in defaults:<br>
&gt; +            pass<br>
&gt; +        elif isinstance(key, tuple):<br>
&gt; +            if key[0] &gt; key[1]:<br>
&gt; +                raise Exception(&quot;Invalid range %s - %s&quot; % key)<br>
&gt; +            if int(freq) &gt;= key[0] and int(freq) &lt; key[1]:<br>
&gt; +                _walk_bandplan(freq, vals, defaults)<br>
&gt; +                break<br>
&gt; +        else:<br>
&gt; +            raise Exception(&quot;Invalid key %s&quot; % key)<br>
<br>
This just screams at me for the use of an object structure instead of<br>
primitives. Is there a reason you decided against it? (other than me<br>
firing off a half-baked concept earlier, of course :P)<br></blockquote><div><br></div><div style>I&#39;ll try what you suggest.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

&gt; +      &lt;menu action=&quot;bandplan&quot; name=&quot;bandplan&quot;&gt;<br>
&gt; +        &lt;menuitem action=&quot;north_america&quot;/&gt;<br>
&gt; +        &lt;menuitem action=&quot;australia&quot;/&gt;<br>
&gt; +      &lt;/menu&gt;<br>
<br>
This is fine, of course, and we don&#39;t have many here right now, but we<br>
can automate the generation of the submenu so that adding a new<br>
bandplan is a little less involved.<br>
<br>
&gt; +        # Migrate old &quot;automatic repeater offset&quot; setting to<br>
<br>
Thanks for this!<br>
<br>
Otherwise, I think it looks fine. Again, thanks a lot for taking on<br>
this non-trivial thing :)<br></blockquote><div><br></div><div style>No worries.</div><div><br></div></div>-- <br><div><span style="color:rgb(102,102,102)">Sean Burford &lt;<a href="mailto:sburford@google.com" target="_blank">sburford@google.com</a>&gt;</span></div>


</div></div>