<div dir="ltr"><br><div>Thanks, I&#39;ll make the changes this weekend and repost. </div><div><br></div><div>For the auto file identification, I was going to try looking at the frequency ranges in the image file for identification.  These are non-overlapping between the three models, and they are in a fixed location in the image file.   Eg.   The 144 mhz models has a settable tx/rx range between 132 and 152 Mhz (or close to this), the 220 Mhz model has 200-250 mhz, etc.     </div><div><br></div><div>The file sizes are the same, AFAIK, for all three, so I can&#39;t use that approach.  The image files don&#39;t have a consistent or usable &quot;id string&quot; to help identity them ( I did a od/hex dump and reviewed what&#39;s there), at least for the two radios ( 2 meter and 220 mhz models) that I have. </div><div><br></div><div>Dave</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 24, 2015 at 4:45 PM, Dan Smith <span dir="ltr">&lt;<a href="mailto:dsmith@danplanet.com" target="_blank">dsmith@danplanet.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">&gt; All previous features are currently working for this patch, with the<br>
&gt; exception of automatic file identifcation. The TH radios do not have<br>
&gt; a identifer that can safely distingush between the radios, this<br>
&gt; feature is still TBD.  You will need to manually select the correct<br>
&gt; model when you open a radio image file.<br>
<br>
</span>None of the other drivers have this problem right now, so I&#39;d hate to<br>
add one that does. Many of our drivers detect by file size. Is this not<br>
possible with this driver for some reason?<br>
<span class=""><br>
&gt; diff -r 31a7494c324a -r d5eee1cd5418 chirp/drivers/th9000.py<br>
&gt; --- /dev/null Thu Jan 01 00:00:00 1970 +0000<br>
&gt; +++ b/chirp/drivers/th9000.py Sat Apr 18 22:02:22 2015 -0700<br>
&gt; @@ -0,0 +1,882 @@<br>
&gt; +# Copyright 2012 Dan Smith &lt;<a href="mailto:dsmith@danplanet.com">dsmith@danplanet.com</a>&gt;<br>
<br>
</span>This should be your copyright, with a proper date.<br>
<span class=""><br>
&gt; +#from chirp.settings import RadioSetting, RadioSettingGroup, \<br>
&gt; +#        RadioSettingValueInteger, RadioSettingValueList, \<br>
&gt; +#        RadioSettingValueBoolean, RadioSettingValueString, \<br>
&gt; +#        RadioSettingValueFloat, InvalidValueError<br>
<br>
</span>Please don&#39;t do this. Remove these lines if you don&#39;t need them.<br>
<span class=""><br>
&gt; +#  Chirp Driver for TYT TH-9000D  Radio (2 meter, 1.25 and 70cm radios)<br>
&gt; +#  by David Fannin &lt;<a href="mailto:dfannin@sushisoft.com">dfannin@sushisoft.com</a>&gt;, KK6DF<br>
<br>
</span>The copyright, when fixed, should cover this so you can drop it.<br>
<span class=""><br>
&gt; +#<br>
&gt; +#  Version 0.5 (Experimental - Known Bugs and Issues)<br>
&gt; +#  Use for development purposes only!<br>
&gt; +#  Features working:<br>
&gt; +#         - single class file for 3 radio types - 144, 220 and 440 mhz models)<br>
&gt; +#         - Download from Radio<br>
&gt; +#         - Display Memories (only None, Tone, TSQL signalling supported)<br>
&gt; +#         - Save image file<br>
&gt; +#         - memory map decoded (about 90%)<br>
&gt; +#         - Upload to radio<br>
&gt; +#         - Modification of memories<br>
&gt; +#         - feature settings<br>
&gt; +#         - added Startup ID label<br>
&gt; +#<br>
&gt; +#  Features not working:<br>
&gt; +#         - DCS , Cross Signaling<br>
&gt; +#         - Skip channels<br>
<br>
</span>I don&#39;t think you need to put all this in the driver, except for maybe<br>
the known issues.<br>
<br>
Also, the &quot;use for development only&quot; means I shouldn&#39;t put this in the<br>
tree, even if the other issues were addressed, is that right?<br>
<span class=""><br>
&gt; +SETTING_LISTS = {<br>
&gt; +        &quot;auto_power_off&quot;: APO_LIST,<br>
&gt; +        &quot;bg_color&quot;      : BGCOLOR_LIST,<br>
&gt; +        &quot;bg_brightness&quot; : BGBRIGHT_LIST,<br>
&gt; +        &quot;squelch&quot;       : SQUELCH_LIST,<br>
&gt; +        &quot;timeout_timer&quot; : TIMEOUT_LIST,<br>
&gt; +        &quot;choose_tx_power&quot;: TXPWR_LIST,<br>
&gt; +        &quot;tbst_freq&quot;     : TBSTFREQ_LIST,<br>
&gt; +        &quot;voice_prompt&quot;  : BEEP_LIST<br>
&gt; +}<br>
&gt; +<br>
&gt; +<br>
&gt; +#<br>
&gt; +#<br>
&gt; +#<br>
<br>
</span>I think you can drop these three blank(ish) lines :)<br>
<div><div class="h5"><br>
&gt; +&quot;&quot;&quot;<br>
&gt; +Overall Memory Map:<br>
&gt; +<br>
&gt; +    Memory Map (Range 0x0100-3FF0, step 0x10):<br>
&gt; +<br>
&gt; +        Field                   Start  End  Size<br>
&gt; +                                (hex)  (hex) (hex)<br>
&gt; +<br>
&gt; +        1 Channel Set Flag        0100  011F   20<br>
&gt; +        2 Channel Skip Flag       0120  013F   20<br>
&gt; +        3 Blank/Unknown           0140  01EF   B0<br>
&gt; +        4 Unknown                 01F0  01FF   10<br>
&gt; +        5 TX/RX Range             0200  020F   10<br>
&gt; +        6 Bootup Passwd           0210  021F   10<br>
&gt; +        7 Options, Radio          0220  023F   20<br>
&gt; +        8 Unknown                 0240  019F<br>
&gt; +            8B Startup Label      03E0  03E7   07<br>
&gt; +        9 Channel Bank            2000  38FF 1900<br>
&gt; +             Channel 000          2000  201F   20<br>
&gt; +             Channel 001          2020  202F   20<br>
&gt; +             ...<br>
&gt; +             Channel 199          38E0  38FF   20<br>
&gt; +        10 Blank/Unknown          3900  3FFF  6FF  14592  16383    1792<br>
&gt; +            Total Map Size           16128 (2^8 = 16384)<br>
&gt; +<br>
&gt; +<br>
&gt; +&quot;&quot;&quot;<br>
&gt; +<br>
&gt; +&quot;&quot;&quot;<br>
&gt; +  TH9000/220  memory map<br>
&gt; +  section: 1 and 2:  Channel Set/Skip Flags<br>
&gt; +<br>
&gt; +    Channel Set (starts 0x100) : Channel Set  bit is value 0 if a memory location in the channel bank is active.<br>
&gt; +    Channel Skip (starts 0x120): Channel Skip bit is value 0 if a memory location in the channel bank is active.<br>
&gt; +<br>
&gt; +    Both flag maps are a total 24 bytes in length, aligned on 32 byte records.<br>
&gt; +    bit = 0 channel set/no skip,  1 is channel not set/skip<br>
&gt; +<br>
&gt; +    to index a channel:<br>
&gt; +        cbyte = channel / 8 ;<br>
&gt; +        cbit  = channel % 8 ;<br>
&gt; +        setflag  = csetflag[cbyte].c[cbit] ;<br>
&gt; +        skipflag = cskipflag[cbyte].c[cbit] ;<br>
&gt; +<br>
&gt; +    channel range is 0-199, range is 32 bytes (last 7 unknown)<br>
&gt; +&quot;&quot;&quot;<br>
<br>
</div></div>Like Tom said, these should be comments, not strings.<br>
<span class=""><br>
&gt; +&quot;&quot;&quot;<br>
&gt; +  TH9000/220  memory map<br>
&gt; +  section: 5  TX/RX Range<br>
&gt; +     used to set the TX/RX range of the radio (e.g.  222-228Mhz for 220 meter)<br>
&gt; +     possible to set range to 220-260Mhz for tx/rx<br>
&gt; +<br>
&gt; +&quot;&quot;&quot;<br>
<br>
</span>This too.<br>
<span class=""><br>
&gt; +&quot;&quot;&quot;<br>
&gt; +  TH9000/220  memory map<br>
&gt; +  section: 6  bootup_passwd<br>
&gt; +     used to set bootup passwd (see boot_passwd checkbox option)<br>
&gt; +<br>
&gt; +  options - bootup password<br>
&gt; +<br>
&gt; +  bytes:bit   type                 description<br>
&gt; +  ---------------------------------------------------------------------------<br>
&gt; +  6         u8 bootup_passwd[6]     bootup passwd, 6 chars, numberic chars 30-39 , see boot_passwd checkbox to set<br>
&gt; +  10        u8 unknown;<br>
&gt; +<br>
&gt; +&quot;&quot;&quot;<br>
<br>
</span>And this.<br>
<div><div class="h5"><br>
&gt; +&quot;&quot;&quot;<br>
&gt; +  TH9000/220  memory map<br>
&gt; +  section: 7  Radio Options<br>
&gt; +        used to set a number of radio options<br>
&gt; +<br>
&gt; +  bytes:bit   type                 description<br>
&gt; +  ---------------------------------------------------------------------------<br>
&gt; +  1         u8 display_mode     display mode, range 0-2, 0=freq,1=channel,2=name (selecting name affects vfo_mr)<br>
&gt; +  1         u8 vfo_mr;          vfo_mr , 0=vfo, mr=1<br>
&gt; +  1         u8 unknown;<br>
&gt; +  1         u8 squelch;         squelch level, range 0-19, hex for menu<br>
&gt; +  1         u8 unknown[2];<br>
&gt; +  1         u8 channel_lock;    if display_mode[channel] selected, then lock=1,no lock =0<br>
&gt; +  1         u8 unknown;<br>
&gt; +  1         u8 bg_brightness ;  background brightness, range 0-21, hex, menu index<br>
&gt; +  1         u8 unknown;<br>
&gt; +  1         u8 bg_color ;       bg color, menu index,  blue 0 , orange 1, purple 2<br>
&gt; +  1         u8 tbst_freq ;      tbst freq , menu 0 = 1750Hz, 1=2100 , 2=1000 , 3=1450hz<br>
&gt; +  1         u8 timeout_timer;   timeout timer, hex, value = minutes, 0= no timeout<br>
&gt; +  1         u8 unknown;<br>
&gt; +  1         u8 auto_power_off;   auto power off, range 0-3, off,30min, 1hr, 2hr, hex menu index<br>
&gt; +  1         u8 voice_prompt;     voice prompt, value 0,1 , Beep ON = 1, Beep Off = 2<br>
&gt; +<br>
&gt; + description of function setup options, starting at 0x0230<br>
&gt; +<br>
&gt; +  bytes:bit   type                 description<br>
&gt; +  ---------------------------------------------------------------------------<br>
&gt; +  1         u8  // 0<br>
&gt; +   :4       unknown:6<br>
&gt; +   :1       elim_sql_tail:1   eliminate squelsh tail when no ctcss checkbox (1=checked)<br>
&gt; +   :1       sql_key_function  &quot;squelch off&quot; 1 , &quot;squelch momentary off&quot; 0 , menu index<br>
&gt; +  2         u8 unknown[2] /1-2<br>
&gt; +  1         u8 // 3<br>
&gt; +   :4       unknown:4<br>
&gt; +   :1       inhibit_init_ops:1 //bit 5<br>
&gt; +   :1       unknownD:1<br>
&gt; +   :1       inhibit_setup_bg_chk:1 //bit 7<br>
&gt; +   :1       unknown:1<br>
&gt; +  1         u8 tail_elim_type    menu , (off=0,120=1,180=2),  // 4<br>
&gt; +  1         u8 choose_tx_power    menu , (60w=0,25w=1) // 5<br>
&gt; +  2         u8 unknown[2]; // 6-7<br>
&gt; +  1         u8 bootup_passwd_flag  checkbox 1=on, 0=off // 8<br>
&gt; +  7         u8 unknown[7]; // 9-F<br>
&gt; +<br>
&gt; +&quot;&quot;&quot;<br>
<br>
</div></div>Also this.<br>
<span class=""><br>
&gt; +&quot;&quot;&quot;<br>
&gt; +  TH9000/220  memory map<br>
&gt; +  section: 8B  Startup Label<br>
&gt; +<br>
&gt; +  bytes:bit   type                 description<br>
&gt; +  ---------------------------------------------------------------------------<br>
&gt; +  7     char start_label[7]    label displayed at startup (usually your call sign)<br>
&gt; +&quot;&quot;&quot;<br>
<br>
</span>Yep, this too.<br>
<div><div class="h5"><br>
&gt; +&quot;&quot;&quot;<br>
&gt; +  TH9000/220  memory map<br>
&gt; +  section: 9  Channel Bank<br>
&gt; +         description of channel bank (200 channels , range 0-199)<br>
&gt; +         Each 32 Byte (0x20 hex)  record:<br>
&gt; +  bytes:bit   type                 description<br>
&gt; +  ---------------------------------------------------------------------------<br>
&gt; +  4         bbcd freq[4]        receive frequency in packed binary coded decimal<br>
&gt; +  4         bbcd offset[4]      transmit offset in packed binary coded decimal (note: plus/minus direction set by &#39;duplex&#39; field)<br>
&gt; +  1         u8<br>
&gt; +   :4       unknown:4<br>
&gt; +   :4       tuning_step:4         tuning step, menu index value from 0-9<br>
&gt; +            5,6.25,8.33,10,12.5,15,20,25,30,50<br>
&gt; +  1         u8<br>
&gt; +   :4       unknown:4          not yet decoded, used for DCS coding?<br>
&gt; +   :2       channel_width:2     channel spacing, menu index value from 0-3<br>
&gt; +            25,20,12.5<br>
&gt; +   :1       reverse:1           reverse flag, 0=off, 1=on (reverses tx and rx freqs)<br>
&gt; +   :1       txoff:1             transmitt off flag, 0=transmit , 1=do not transmit<br>
&gt; +  1         u8<br>
&gt; +   :1       talkaround:1        talkaround flag, 0=off, 1=on (bypasses repeater)<br>
&gt; +   :1       compander:1         compander flag, 0=off, 1=on (turns on/off voice compander option)<br>
&gt; +   :2       unknown:2<br>
&gt; +   :2       power:2             tx power setting, value range 0-2, 0=hi,1=med,2=lo<br>
&gt; +   :2       duplex:2            duplex settings, 0=simplex,2= minus(-) offset, 3= plus (+) offset (see offset field)<br>
&gt; +<br>
&gt; +  1         u8<br>
&gt; +   :4       unknown:4<br>
&gt; +   :2       rxtmode:2           rx tone mode, value range 0-2, 0=none, 1=CTCSS, 2=DCS  (ctcss tone in field rxtone)<br>
&gt; +   :2       txtmode:2           tx tone mode, value range 0-2, 0=none, 1=CTCSS, 3=DCS  (ctcss tone in field txtone)<br>
&gt; +  1         u8<br>
&gt; +   :2       unknown:2<br>
&gt; +   :6       txtone:6            tx ctcss tone, menu index<br>
&gt; +  1         u8<br>
&gt; +   :2       unknown:2<br>
&gt; +   :6       rxtone:6            rx ctcss tone, menu index<br>
&gt; +  1         u8 txcode           ?, not used for ctcss<br>
&gt; +  1         u8 rxcode           ?, not used for ctcss<br>
&gt; +  3         u8 unknown[3]<br>
&gt; +  7         char name[7]        7 byte char string for channel name<br>
&gt; +  1         u8<br>
&gt; +   :6       unknown:6,<br>
&gt; +   :2       busychannellockout:2 busy channel lockout option , 0=off, 1=repeater, 2=busy  (lock out tx if channel busy)<br>
&gt; +  4         u8 unknownI[4];<br>
&gt; +  1         u8<br>
&gt; +   :7       unknown:7<br>
&gt; +   :1       scrambler:1         scrambler flag, 0=off, 1=on (turns on tyt scrambler option)<br>
&gt; +&quot;&quot;&quot;<br>
<br>
</div></div>You guessed it, this as well ;)<br>
<br>
I&#39;d like to see the above fixed up on the next revision. From the looks<br>
of it, this is more than just ready for development purposes. I think<br>
functionally, it&#39;s probably fine for testing with a wider audience,<br>
especially since you&#39;ve got the runtime experimental warning bit.<br>
<br>
Thanks!<br>
<span class="HOEnZb"><font color="#888888"><br>
--Dan<br>
<br>
</font></span><br>_______________________________________________<br>
chirp_devel mailing list<br>
<a href="mailto:chirp_devel@intrepid.danplanet.com">chirp_devel@intrepid.danplanet.com</a><br>
<a href="http://intrepid.danplanet.com/mailman/listinfo/chirp_devel" target="_blank">http://intrepid.danplanet.com/mailman/listinfo/chirp_devel</a><br>
Developer docs: <a href="http://chirp.danplanet.com/projects/chirp/wiki/Developers" target="_blank">http://chirp.danplanet.com/projects/chirp/wiki/Developers</a><br></blockquote></div><br></div>