mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	Save a DXped test program.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@8224 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									d3e261e03c
								
							
						
					
					
						commit
						c88c485325
					
				
							
								
								
									
										137
									
								
								lib/dxped_fox.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								lib/dxped_fox.f90
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,137 @@ | |||||||
|  | module dxped_fox | ||||||
|  |    | ||||||
|  |   parameter (MAXSIG=5,NSEQ=10) | ||||||
|  |    | ||||||
|  |   character*6 cx(MAXSIG) | ||||||
|  |   character*4 gx(MAXSIG) | ||||||
|  |   character*6 called(MAXSIG) | ||||||
|  |   character*6 acknowledged(MAXSIG) | ||||||
|  |   character*6 MyCall | ||||||
|  |   character*4 MyGrid | ||||||
|  |   integer nsig | ||||||
|  |   integer isent(MAXSIG) | ||||||
|  |   integer istate(2,MAXSIG) | ||||||
|  |   integer nlogged | ||||||
|  |   integer nrx | ||||||
|  | 
 | ||||||
|  |   ! istate | ||||||
|  |   !  0 = Start QSO: call X (from FIFO) or CQ if FIFO is empty | ||||||
|  |   !  1 = Sent report to X | ||||||
|  |   !  2 = Received R+rpt from X | ||||||
|  |   !  3 = Sent RR73 to X | ||||||
|  |   !  4 = Logged -> Idle | ||||||
|  |    | ||||||
|  | contains | ||||||
|  |    | ||||||
|  |   subroutine fox_tx(iseq) | ||||||
|  |     character*32 txmsg(MAXSIG) | ||||||
|  |     character*6 cy | ||||||
|  |     character*4 gy | ||||||
|  |     character*16 log | ||||||
|  |     save txmsg | ||||||
|  | 
 | ||||||
|  |     if(iseq.eq.0) nrx=nsig | ||||||
|  |      | ||||||
|  |     do j=1,nsig | ||||||
|  |        log='                ' | ||||||
|  |        js=istate(1,j) | ||||||
|  |        if(js.eq.0) then | ||||||
|  |           if(iseq.eq.0) then | ||||||
|  |              txmsg(j)='CQ KH1DX AJ10' | ||||||
|  |           else | ||||||
|  |              read(10,1002,end=1,err=999) cx(j),gx(j)         !Grab next call from FIFO | ||||||
|  | 1002         format(a6,7x,a4) | ||||||
|  |              call random_number(x) | ||||||
|  |              irpt=-20+int(40*x) | ||||||
|  |              write(txmsg(j),1004) cx(j),mycall,irpt | ||||||
|  | 1004         format(a6,1x,a6,i4.2) | ||||||
|  |              if(txmsg(j)(15:15).eq.' ') txmsg(j)(15:15)='+' | ||||||
|  |              istate(1,j)=1 | ||||||
|  |              go to 2 | ||||||
|  | 1            txmsg(j)='CQ '//MyCall//' '//MyGrid//'                  ' | ||||||
|  | 2            continue | ||||||
|  |           endif | ||||||
|  |        endif | ||||||
|  | 
 | ||||||
|  |        if(js.eq.2) then | ||||||
|  |           read(10,1002,end=3,err=999) cy,gy              !Grab next call from FIFO | ||||||
|  |           call random_number(x) | ||||||
|  |           irpt=-20+int(40*x) | ||||||
|  |           isent(j)=irpt | ||||||
|  |           write(txmsg(j),1006) cx(j),cy,irpt | ||||||
|  | 1006      format(a6,' RR73; ',a6,1x,'<KH1DX>',i4.2) | ||||||
|  |           if(txmsg(j)(29:29).eq.' ') txmsg(j)(29:29)='+' | ||||||
|  |           write(log,1008) cx(j),gx(j),isent(j) | ||||||
|  | 1008      format(a6,2x,a4,i4.2) | ||||||
|  |           if(log(14:14).eq.' ') log(14:14)='+' | ||||||
|  |           cx(j)=cy | ||||||
|  |           gx(j)=gy | ||||||
|  |           called(j)=cy | ||||||
|  |           isent(j)=irpt | ||||||
|  |           istate(2,j)=1 | ||||||
|  |           go to 4 | ||||||
|  | 3         write(txmsg(j),1006) cx(j),'DE    ' | ||||||
|  |           istate(2,j)=0 | ||||||
|  | 4         istate(1,j)=3 | ||||||
|  |        endif | ||||||
|  | 
 | ||||||
|  | !       if(j.gt.nrx) print*,'a',nrx,j | ||||||
|  | ! Encode txmsg, generate waveform, and transmit | ||||||
|  |        if(log(1:1).ne.' ') then | ||||||
|  |           nlogged=nlogged+1 | ||||||
|  |           nrate=0 | ||||||
|  |           if(iseq.gt.0) nrate=nint(nlogged*240.0/iseq) | ||||||
|  |           write(*,1010) iseq,j,istate(1:2,j),txmsg(j),log,nlogged,nrate | ||||||
|  | 1010      format(i4.4,i3,2i2,1x,a32,20x,a16,2i4) | ||||||
|  |        else | ||||||
|  |           irpt=-20+int(40*x) | ||||||
|  |           if(iseq.ge.2) write(txmsg(j),1004) cx(j),mycall,irpt | ||||||
|  |           write(*,1010) iseq,j,istate(1:2,j),txmsg(j) | ||||||
|  |        endif | ||||||
|  |     enddo | ||||||
|  |      | ||||||
|  |     return | ||||||
|  | 999 stop '*** ERROR ***' | ||||||
|  |   end subroutine fox_tx | ||||||
|  | 
 | ||||||
|  |   subroutine fox_rx(iseq,rxmsg) | ||||||
|  |     character*22 rxmsg | ||||||
|  |     data iseq0/-1/ | ||||||
|  |     save iseq0,k | ||||||
|  | 
 | ||||||
|  |     if(rxmsg(1:6).ne.MyCall) go to 900 | ||||||
|  |     if(iseq.lt.0) called='      ' | ||||||
|  | 
 | ||||||
|  |     nrx=nrx+1 | ||||||
|  |     if(iseq.ne.iseq0) k=0 | ||||||
|  |     iseq0=iseq | ||||||
|  |     if(index(rxmsg,'R+').ge.8 .or. index(rxmsg,'R-').ge.8) then | ||||||
|  |        j0=0 | ||||||
|  |        do j=1,nsig | ||||||
|  |           if(rxmsg(8:13).eq.called(j)) j0=j | ||||||
|  |        enddo | ||||||
|  |        if(j0.ge.1) then | ||||||
|  |           write(*,1000) iseq,j0,istate(1:2,j0),j0,rxmsg | ||||||
|  | 1000      format(i4.4,i3,2i2,32x,i1,1x,a22) | ||||||
|  |           istate(1,j0)=2 | ||||||
|  |        endif | ||||||
|  |        go to 900 | ||||||
|  |     endif | ||||||
|  | 
 | ||||||
|  |     if(k.le.nsig-1) then | ||||||
|  |        k=k+1 | ||||||
|  |        called(k)=rxmsg(8:13) | ||||||
|  |        write(*,1000) iseq,k,istate(1:2,k),j0,rxmsg | ||||||
|  |     endif | ||||||
|  | !    print*,'b',iseq,j0,k | ||||||
|  | 
 | ||||||
|  | 900 return | ||||||
|  |   end subroutine fox_rx | ||||||
|  |    | ||||||
|  |    | ||||||
|  | end module dxped_fox | ||||||
|  | !AA7UN  KH1DX  +19 | ||||||
|  | !KH1DX  AA7UN  R+18 | ||||||
|  | !AA7UN  RR73; EA5YI  <KH1DX>  16 | ||||||
|  | !0004  AA7UN   DN32  09 | ||||||
|  | !0050  5 3 1 KA6A   RR73; KB2M   <KH1DX> -08                     KA6A    EM13 -08  86 413 | ||||||
							
								
								
									
										73
									
								
								lib/dxped_sim.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								lib/dxped_sim.f90
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,73 @@ | |||||||
|  | program driver | ||||||
|  | 
 | ||||||
|  |   use dxped_fox | ||||||
|  |   character*22 rxmsg | ||||||
|  |   character cxx*6,gxx*4 | ||||||
|  |   character*8 arg | ||||||
|  |   integer ntot(5),irate(5) | ||||||
|  | 
 | ||||||
|  |   open(10,file='xcall.txt',status='old') | ||||||
|  |   ntot=0 | ||||||
|  |   irate=0 | ||||||
|  |   MyCall='KH1DX' | ||||||
|  |   MyGrid='AJ10' | ||||||
|  |   nargs=iargc() | ||||||
|  |   ii1=1 | ||||||
|  |   ii2=5 | ||||||
|  |   jj1=0 | ||||||
|  |   jj2=5 | ||||||
|  |   if(nargs.eq.2) then | ||||||
|  |      call getarg(1,arg) | ||||||
|  |      read(arg,*) nsig | ||||||
|  |      call getarg(2,arg) | ||||||
|  |      read(arg,*) fail | ||||||
|  |      ii1=nsig | ||||||
|  |      ii2=nsig | ||||||
|  |      jj1=nint(10*fail) | ||||||
|  |      jj2=nint(10*fail) | ||||||
|  |   endif | ||||||
|  |    | ||||||
|  |   do jj=jj1,jj2 | ||||||
|  |      fail=0.1*jj     | ||||||
|  |      do ii=ii1,ii2 | ||||||
|  |         rewind 10 | ||||||
|  |         nsig=ii | ||||||
|  | ! Start with all istate = 0   | ||||||
|  |         istate=0 | ||||||
|  |         nlogged=0 | ||||||
|  |    | ||||||
|  | ! Open the file of callers (this will be a FIFO) | ||||||
|  |         do iseq=0,80 | ||||||
|  |            if(iand(iseq,1).eq.0) call fox_tx(iseq) | ||||||
|  |            if(iand(iseq,1).eq.1) then | ||||||
|  |               nrx=0 | ||||||
|  |               do j=1,nsig | ||||||
|  |                  if(ichar(cx(j)(1:1)).ne.0) then | ||||||
|  |                     call random_number(x) | ||||||
|  |                     irpt=-20+int(40*x) | ||||||
|  |                     write(rxmsg,1000) MyCall,cx(j),irpt | ||||||
|  | 1000                format(a6,1x,a6,' R',i3.2) | ||||||
|  |                     if(rxmsg(16:16).eq.' ') rxmsg(16:16)='+' | ||||||
|  |                  endif | ||||||
|  |                  if(iseq.eq.1) then | ||||||
|  |                     read(10,1002) cxx,gxx | ||||||
|  | 1002                format(a6,7x,a4) | ||||||
|  |                     rxmsg='KH1DX  '//cxx//' '//gxx | ||||||
|  |                  endif | ||||||
|  |                  call random_number(x) | ||||||
|  |                  if(x.ge.fail .and. cx(j)(1:1).ne.' ') call fox_rx(iseq,rxmsg) | ||||||
|  |               enddo | ||||||
|  |               if(iseq.eq.1) rewind 10 | ||||||
|  |            endif | ||||||
|  |         enddo | ||||||
|  |         ntot(ii)=nlogged | ||||||
|  |         irate(ii)=0 | ||||||
|  |         if(iseq.gt.0) irate(ii)=nint(nlogged*240.0/iseq) | ||||||
|  |         write(*,3001) nsig,fail,nlogged | ||||||
|  | 3001    format('Nsig:',i3,'   Fail:',f4.1,'   Logged QSOs:',i4) | ||||||
|  |      enddo | ||||||
|  |      write(13,1100) fail,ntot,irate | ||||||
|  | 1100 format(f5.1,5i6,5x,5i6) | ||||||
|  |   enddo | ||||||
|  | 
 | ||||||
|  | end program driver | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user