From 8b4755d8b75182ed0709b2370ff77aaea12cb0ff Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 11 Jan 2006 19:04:51 +0000 Subject: [PATCH] Merged changes to wsjt.py, specjt.py from tags/release-5.9.2. Added README_592.TXT and WSJT592.iss. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/trunk@85 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- README_592.TXT | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++ WSJT592.iss | 24 +++++++++++++++ specjt.py | 34 +++++++++++++-------- wsjt.py | 45 ++++++++++++++++++++-------- 4 files changed, 159 insertions(+), 25 deletions(-) create mode 100755 README_592.TXT create mode 100755 WSJT592.iss diff --git a/README_592.TXT b/README_592.TXT new file mode 100755 index 000000000..3f1ca9d8a --- /dev/null +++ b/README_592.TXT @@ -0,0 +1,81 @@ +Changes in WSJT 5.9.2: January 10, 2006 +--------------------------------------- + +Enhancements +------------ + +1. Thread priorities have been adjusted for smoother operation. One + result is that there will be fewer audio glitches caused by the + Windows O/S paying attention to other programs. + +2. The JT65 decoder has improved immunity to "garbage data," and + it exhibits better performance on strong signals. + +3. The FSK441 decoder produces less on-screen gibberish when you do + mouse-picked decodes. + +4. The JT6M decoder now makes better use of Freeze and Tol. You can + set the value of "Freeze DF" by using the Right/Left arrow keys. + +5. On-screen font sizes can be set by using Windows Notepad to edit + the file wsjtrc.win. If your screen has resolution greater than + 1024 x 768, or if you have old eyes (like mine), you may want to + increase the sizes from 8 and 9 (first three lines of the file) to + 9 and 10, say. + +6. Dividing lines are now provided on the waterfall display between + spectra corresponding to wave files read from disk. + +7. The PTT line is explicitly set low on program startup. + +8. The F10 key brings up the SpecJT screen (if it was hidden) and + toggles focus between the WSJT and SpecJT screens. + +9. Use the Alt-F keyboard shortcut to toggle "Freeze", and Alt-Z to + toggle "Zap". + +10. "Accelerated decoding" HAS BEEN removed from the Setup menu. + In effect, it is now always ON. + + +Bug Fixes: +---------- +1. The use of non-threadsafe code for FFTs caused occasional and + unpredictable program crashes. Fixed. + +2. A bug in the JT65 decoder could (rarely) cause large errors in the + reported level of strong signals. Fixed. + +3. The program could be made to crash by trying to read a very short + wave file. Fixed. + + +Information for Programmers +--------------------------- + +WSJT is no longer a one-person effort. It has become a full-fledged +Open Source project, with an active working group making contributions +to future development. Source code is now stored in a public +repository under control of the Subversion (SVN) version control +system. You can learn more at +http://developer.berlios.de/projects/wsjt/. + +The first significant result of the group effort has been to create +versions of WSJT that run under the Linux and FreeBSD operating +systems. If you are interested in testing and using WSJT on your own +Linux or FreeBSD system, we'd like to hear from you. + +If you feel that you can usefully contribute to the future development +of WSJT on any platform, we would also like to hear from you! + +The present WSJT working group consists of: + + Diane Bruce, VA3DB + James Courtier-Dutton + Bob McGwier, N4HY + Jonathan Naylor, ON/G4KLX + Stewart Nelson, KK7A + Joe Taylor, K1JT + Kaj Wiik, OH6EH + + diff --git a/WSJT592.iss b/WSJT592.iss new file mode 100755 index 000000000..feaa5c481 --- /dev/null +++ b/WSJT592.iss @@ -0,0 +1,24 @@ +[Setup] +AppName=WSJT +AppVerName=WSJT Version 5.9.2 r77 +AppCopyright=Copyright (C) 2001-2005 by Joe Taylor, K1JT +DefaultDirName={pf}\WSJT6 +DefaultGroupName=WSJT6 + +[Files] +Source: "c:\k1jt\svn\wsjt\release-5.9.2\WSJT6.EXE"; DestDir: "{app}" +Source: "c:\k1jt\svn\wsjt\release-5.9.2\README_592.TXT"; DestDir: "{app}" +Source: "c:\k1jt\svn\wsjt\release-5.9.2\CALL3.TXT"; DestDir: "{app}"; Flags: onlyifdoesntexist +Source: "c:\k1jt\svn\wsjt\release-5.9.2\wsjt.ico"; DestDir: "{app}"; Flags: onlyifdoesntexist +Source: "c:\k1jt\svn\wsjt\release-5.9.2\TSKY.DAT"; DestDir: "{app}"; Flags: onlyifdoesntexist +Source: "c:\k1jt\svn\wsjt\release-5.9.2\libsamplerate.dll"; DestDir: "{app}"; Flags: onlyifdoesntexist +Source: "c:\k1jt\svn\wsjt\release-5.9.2\kvasd.exe"; DestDir: "{app}"; +Source: "c:\k1jt\svn\wsjt\release-5.9.2\wsjtrc.win"; DestDir: "{app}"; +Source: "c:\k1jt\svn\wsjt\release-5.9.2\Tutorial_592.txt"; DestDir: "{app}"; +Source: "c:\k1jt\python\wsjt\rxwav\samples\W8WN_010809_110400.WAV"; DestDir: "{app}\RxWav\Samples\"; Flags: onlyifdoesntexist + +[Icons] +Name: "{group}\WSJT6"; Filename: "{app}\WSJT6.EXE"; WorkingDir: {app} +Name: "{userdesktop}\WSJT6"; Filename: "{app}\WSJT6.EXE"; WorkingDir: {app} + + diff --git a/specjt.py b/specjt.py index c2bd63b45..4f2d04824 100644 --- a/specjt.py +++ b/specjt.py @@ -19,8 +19,10 @@ from palettes import colormapblue, colormapgray0, colormapHot, \ def hidespecjt(): root.withdraw() + g.showspecjt=0 def showspecjt(): root.deiconify() + g.showspecjt=2 if(__name__=="__main__"): root = Tk() @@ -153,17 +155,18 @@ def df_mark(): if g.mode[4:5]=='C': fstep=4*fstep # Mark sync tone and top JT65 tone (green) and shorthand tones (red) - color='green' - x1=(Audio.gcom2.mousedf + 6.6*fstep)/df + 288.7 - c.create_line(x1-0.5,25,x1-0.5,12,fill=color) - c.create_line(x1+0.5,25,x1+0.5,12,fill=color) - for i in range(5): - x1=(Audio.gcom2.mousedf+i*fstep)/df + 288.7 - j=12 - if i>0: j=15 - if i!=1: c.create_line(x1-0.5,25,x1-0.5,j,fill=color) - if i!=1: c.create_line(x1+0.5,25,x1+0.5,j,fill=color) - color='red' + if g.mode[:4]=="JT65": + color='green' + x1=(Audio.gcom2.mousedf + 6.6*fstep)/df + 288.7 + c.create_line(x1-0.5,25,x1-0.5,12,fill=color) + c.create_line(x1+0.5,25,x1+0.5,12,fill=color) + for i in range(5): + x1=(Audio.gcom2.mousedf+i*fstep)/df + 288.7 + j=12 + if i>0: j=15 + if i!=1: c.create_line(x1-0.5,25,x1-0.5,j,fill=color) + if i!=1: c.create_line(x1+0.5,25,x1+0.5,j,fill=color) + color='red' #---------------------------------------------------- decode_request def decode_request(event): @@ -202,9 +205,8 @@ def update(): if isec==0: nscroll=0 if isec==59: newMinute=1 - if g.showspecjt: + if g.showspecjt==1: showspecjt() - g.showspecjt=0 nspeed=nspeed0.get() #Waterfall update rate if (nspeed<6 and nspeed00>=6) or (nspeed>=6 and nspeed00<6): draw_axis() @@ -279,6 +281,9 @@ def update(): nfreeze0=int(Audio.gcom2.nfreeze) if g.mode!=mode0: + if g.mode[:4]=="JT65" and nspeed0.get()>5: nspeed0.set(3) + if g.mode=="FSK441" and nspeed0.get()<6: nspeed0.set(6) + if g.mode=="JT6M" and nspeed0.get()<6: nspeed0.set(6) draw_axis() mode0=g.mode @@ -289,6 +294,8 @@ def update(): if newdat: Audio.gcom2.ndiskdat=0 Audio.gcom2.nlines=0 Audio.gcom2.nflat=nflat.get() + if g.focus==2: + root.focus_set() ltime.after(200,update) #Reset the timer #-------------------------------------------------------- draw_axis @@ -484,6 +491,7 @@ Audio.audio_init(ndevin,ndevout) #Start the audio stream ltime.after(200,update) root.deiconify() +g.showspecjt=2 if g.Win32: root.iconbitmap("wsjt.ico") root.title(' SpecJT by K1JT') if(__name__=="__main__"): diff --git a/wsjt.py b/wsjt.py index 2eec00775..58dd56901 100644 --- a/wsjt.py +++ b/wsjt.py @@ -1,4 +1,4 @@ -#----------------------------------------------------------- WSJT +#------------------------------------------------------------ WSJT from Tkinter import * from tkFileDialog import * import Pmw @@ -95,9 +95,18 @@ g.freeze_decode=0 g.mode="" g.ndevin=IntVar() g.ndevout=IntVar() +g.focus=0 #------------------------------------------------------ showspecjt def showspecjt(event=NONE): - g.showspecjt=1 + if g.showspecjt>0: + if g.focus>=1: + root.focus_set() + g.focus=0 + else: + g.focus=2 + else: + g.focus=2 + g.showspecjt=1 #------------------------------------------------------ restart def restart(): @@ -113,6 +122,10 @@ def restart2(): def toggle_freeze(event=NONE): nfreeze.set(1-nfreeze.get()) +#------------------------------------------------------ toggle_zap +def toggle_zap(event=NONE): + nzap.set(1-nzap.get()) + #------------------------------------------------------ btx (1-6) def btx1(event=NONE): ntx.set(1) @@ -668,10 +681,10 @@ Alt-A Toggle Auto On/Off Alt-D Decode Alt-E Erase Alt-F Toggle Freeze -Alt-G Generate Standard Messages +Alt-G Generate Standard Messages Alt-I Include -Alt-L Lookup -CTRL-L Lookup, then Generate Standard Messages +Alt-L Lookup +CTRL-L Lookup, then Generate Standard Messages Alt-M Monitor Alt-O Tx Stop Alt-P Play @@ -679,6 +692,8 @@ Alt-Q Log QSO Alt-S Stop Monitoring or Decoding Alt-V Save Last Alt-X Exclude +Alt-Z Toggle Zap +Right/Left Arrow Increase/decrease Freeze DF """ Label(scwid,text=t,justify=LEFT).pack(padx=20) scwid.focus_set() @@ -692,15 +707,15 @@ def mouse_commands(event=NONE): Click on Action -------------------------------------------------------- Waterfall FSK441/JT6M: click to decode ping - JT65: Click to set DF for Freeze + JT65: Click to set DF for Freeze Double-click to Freeze and Decode Main screen, FSK441/JT6M: click to decode ping graphics area JT65: Click to set DF for Freeze - Double-click to Freeze and Decode + Double-click to Freeze and Decode Main screen, Double-click puts callsign in Tx messages -text area Right-double-click also sets Auto ON +text area Right-double-click also sets Auto ON Sync, Clip, Left/Right click to increase/decrease Tol, ... @@ -976,11 +991,15 @@ def mouse_up_g1(event): #------------------------------------------------------ right_arrow def right_arrow(event=NONE): - Audio.gcom2.mousedf=Audio.gcom2.mousedf+10 + n=5*int(Audio.gcom2.mousedf/5) + 5 + if n==Audio.gcom2.mousedf: n=n+5 + Audio.gcom2.mousedf=n #------------------------------------------------------ left_arrow def left_arrow(event=NONE): - Audio.gcom2.mousedf=Audio.gcom2.mousedf-10 + n=5*int(Audio.gcom2.mousedf/5) + if n==Audio.gcom2.mousedf: n=n-5 + Audio.gcom2.mousedf=n #------------------------------------------------------ GenStdMsgs def GenStdMsgs(event=NONE): @@ -1665,6 +1684,8 @@ root.bind_all('',savelast) root.bind_all('',savelast) root.bind_all('',decode_exclude) root.bind_all('',decode_exclude) +root.bind_all('',toggle_zap) +root.bind_all('',toggle_zap) root.bind_all('',lookup_gen) root.bind_all('',lookup_gen) root.bind_all('',left_arrow) @@ -1759,11 +1780,11 @@ lsync.grid(column=0,row=0,padx=2,pady=1,sticky='EW') Widget.bind(lsync,'',incsync) Widget.bind(lsync,'',decsync) nzap=IntVar() -cbzap=Checkbutton(f5b,text='Zap',variable=nzap) +cbzap=Checkbutton(f5b,text='Zap',underline=0,variable=nzap) cbzap.grid(column=1,row=0,padx=2,pady=1,sticky='W') cbnb=Checkbutton(f5b,text='NB',variable=nblank) cbnb.grid(column=1,row=1,padx=2,pady=1,sticky='W') -cbfreeze=Checkbutton(f5b,text='Freeze',variable=nfreeze) +cbfreeze=Checkbutton(f5b,text='Freeze',underline=0,variable=nfreeze) cbfreeze.grid(column=1,row=2,padx=2,sticky='W') cbafc=Checkbutton(f5b,text='AFC',variable=nafc) cbafc.grid(column=1,row=3,padx=2,pady=1,sticky='W')