mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-10-31 15:47:10 -04:00
126 lines
3.9 KiB
Python
126 lines
3.9 KiB
Python
|
import sys
|
||
|
from datetime import datetime
|
||
|
mycall="K1JT"
|
||
|
mygrid="FN20"
|
||
|
|
||
|
# Keyed with hiscall:
|
||
|
Freq={}
|
||
|
T0={}
|
||
|
RcvdExch={}
|
||
|
Grid={}
|
||
|
|
||
|
# Keyed with hiscall_band:
|
||
|
Staged={}
|
||
|
TimeLogged={}
|
||
|
QSOinProgress={}
|
||
|
# QSOinProgress bit values:
|
||
|
# 1 He called me
|
||
|
# 2 I called him
|
||
|
# 4 Received his exchange
|
||
|
# 8 Received his Roger
|
||
|
# 16 Sent Roger
|
||
|
# 32 Staged for logging
|
||
|
|
||
|
def isGrid(g):
|
||
|
"""Return True if g is a valid grid4 and not RR73"""
|
||
|
if len(g)!=4 or g=="RR73": return False
|
||
|
if ord(g[0:1])<ord('A') or ord(g[0:1])>ord('R'): return False
|
||
|
if ord(g[1:2])<ord('A') or ord(g[1:2])>ord('R'): return False
|
||
|
if ord(g[2:3])<ord('0') or ord(g[2:3])>ord('9'): return False
|
||
|
if ord(g[3:4])<ord('0') or ord(g[3:4])>ord('9'): return False
|
||
|
return True
|
||
|
|
||
|
if len(sys.argv)!=4:
|
||
|
print "Usage: python all2cab.py <mycall> <mygrid> <infile>"
|
||
|
print "Example: python all2cab.py K1JT FN20 all_wwdigi_2019.txt"
|
||
|
exit()
|
||
|
|
||
|
f=open(sys.argv[3],mode='r')
|
||
|
ss=f.readlines()
|
||
|
f.close
|
||
|
dt0=datetime.strptime(ss[0][0:13],"%y%m%d_%H%M%S")
|
||
|
iz=len(ss)
|
||
|
nqso=0
|
||
|
hiscall_band=""
|
||
|
|
||
|
for i in range(iz):
|
||
|
s=ss[i][0:80].strip()
|
||
|
dt=datetime.strptime(s[0:13],"%y%m%d_%H%M%S")
|
||
|
tx=" Tx " in s #True if this is my transmission
|
||
|
w=s.split()
|
||
|
if len(w)<10: continue
|
||
|
if w[7]=="CQ":
|
||
|
cq=True
|
||
|
if w[8].isalpha():
|
||
|
s=s.replace(" CQ "," CQ_")
|
||
|
w=s.split()
|
||
|
if len(w)<10: continue
|
||
|
c1=w[7]
|
||
|
c2=w[8]
|
||
|
c3=w[9]
|
||
|
roger = c3=="R"
|
||
|
if roger: c3=w[10]
|
||
|
cq = (c1=="CQ" or c1[0:3]=="CQ_")
|
||
|
if cq:
|
||
|
Grid[c2]=c3
|
||
|
|
||
|
hiscall=""
|
||
|
if tx and not cq:
|
||
|
hiscall=c1
|
||
|
if c1==mycall:
|
||
|
freq=int(1000.0*float(s[13:23])) + int((int(s[42:47]))/1000)
|
||
|
hiscall=c2
|
||
|
Freq[hiscall]=freq
|
||
|
MHz="%3d" % int(float(s[13:23]))
|
||
|
hiscall_band=hiscall+MHz
|
||
|
n=QSOinProgress.get(hiscall_band,0)
|
||
|
n = n | 1 #He called me
|
||
|
if roger or c3=="RR73" or c3=="RRR" or c3=="73":
|
||
|
n = n | 8 # Rcvd Roger
|
||
|
if isGrid(c3):
|
||
|
hisgrid=c3
|
||
|
RcvdExch[hiscall]=hisgrid
|
||
|
n = n | 4 #Received his exchange
|
||
|
else:
|
||
|
g=Grid.get(hiscall,"")
|
||
|
if isGrid(g):
|
||
|
RcvdExch[hiscall]=g
|
||
|
n = n | 4 #Received his exchange
|
||
|
QSOinProgress[hiscall_band]=n
|
||
|
|
||
|
if len(hiscall)>=3:
|
||
|
MHz="%3d" % int(float(s[13:23]))
|
||
|
hiscall_band=hiscall+MHz
|
||
|
if tx:
|
||
|
n=QSOinProgress.get(hiscall_band,0)
|
||
|
n = n | 2 #I called him
|
||
|
if roger or c3=="RR73" or c3=="RRR" or c3=="73":
|
||
|
n = n | 4 | 16 #Rcvd Exch, Sent Roger
|
||
|
if c3=="RR73" or c3=="RRR" or c3=="73":
|
||
|
n = n | 8 #Rcvd Exch, Sent Roger
|
||
|
QSOinProgress[hiscall_band]=n
|
||
|
T0[hiscall]=dt
|
||
|
|
||
|
if len(hiscall_band)<5 or len(hiscall)<3: continue
|
||
|
|
||
|
if QSOinProgress.get(hiscall_band,0)>=31:
|
||
|
n=QSOinProgress.get(hiscall_band,0)
|
||
|
n = n | 32
|
||
|
QSOinProgress[hiscall_band]=n
|
||
|
t=str(T0[hiscall])[0:16]
|
||
|
t=t[0:13] + t[14:16]
|
||
|
buf="QSO: %5d DG %s %-10s %s %-10s %s" % (Freq[hiscall],t,\
|
||
|
mycall,mygrid,hiscall,RcvdExch.get(hiscall," "))
|
||
|
MHz="%3d" % int(float(s[13:23]))
|
||
|
hiscall_band=hiscall+MHz
|
||
|
t=Staged.get(hiscall_band,"")
|
||
|
time_diff=-1
|
||
|
if TimeLogged.get(hiscall_band,0)!=0:
|
||
|
time_diff=(T0[hiscall] - TimeLogged[hiscall_band]).total_seconds()
|
||
|
if time_diff == -1 or time_diff > 180: #Log only once within 3 min
|
||
|
Staged[hiscall_band]=buf #Staged for logging
|
||
|
nqso=nqso+1
|
||
|
TimeLogged[hiscall_band]=T0[hiscall]
|
||
|
print buf #For now, log anything staged
|
||
|
del QSOinProgress[hiscall_band]
|