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
This commit is contained in:
Joe Taylor 2006-01-11 19:04:51 +00:00
parent 624bcc3cbd
commit 44600fef28
4 changed files with 159 additions and 25 deletions

81
README_592.TXT Executable file
View File

@ -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

24
WSJT592.iss Executable file
View File

@ -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}

View File

@ -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__"):

45
wsjt.py
View File

@ -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('<Alt-v>',savelast)
root.bind_all('<Alt-V>',savelast)
root.bind_all('<Alt-x>',decode_exclude)
root.bind_all('<Alt-X>',decode_exclude)
root.bind_all('<Alt-z>',toggle_zap)
root.bind_all('<Alt-Z>',toggle_zap)
root.bind_all('<Control-l>',lookup_gen)
root.bind_all('<Control-L>',lookup_gen)
root.bind_all('<Left>',left_arrow)
@ -1759,11 +1780,11 @@ lsync.grid(column=0,row=0,padx=2,pady=1,sticky='EW')
Widget.bind(lsync,'<Button-1>',incsync)
Widget.bind(lsync,'<Button-3>',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')