Clean up js8d to jd8e to make it clear the difference
This commit is contained in:
		
							parent
							
								
									9e77bc5d28
								
							
						
					
					
						commit
						a43c913a19
					
				| @ -300,8 +300,8 @@ set (wsjt_FSRCS | ||||
|   lib/js8b_decode.f90 | ||||
|   lib/js8c_module.f90 | ||||
|   lib/js8c_decode.f90 | ||||
|   lib/js8d_module.f90 | ||||
|   lib/js8d_decode.f90 | ||||
|   lib/js8e_module.f90 | ||||
|   lib/js8e_decode.f90 | ||||
| 
 | ||||
|   # remaining non-module sources | ||||
|   lib/addit.f90 | ||||
| @ -417,7 +417,7 @@ set (wsjt_FSRCS | ||||
|   lib/ft8/ldpcsim174.f90 | ||||
|   lib/js8/ldpcsim174js8b.f90 | ||||
|   lib/js8/ldpcsim174js8c.f90 | ||||
|   lib/js8/ldpcsim174js8d.f90 | ||||
|   lib/js8/ldpcsim174js8e.f90 | ||||
|   lib/ldpcsim40.f90 | ||||
|   lib/libration.f90 | ||||
|   lib/lorentzian.f90 | ||||
| @ -1001,8 +1001,8 @@ target_link_libraries (ldpcsim174js8b wsjt_fort wsjt_cxx) | ||||
| add_executable (ldpcsim174js8c lib/js8/ldpcsim174js8c.f90 wsjtx.rc) | ||||
| target_link_libraries (ldpcsim174js8c wsjt_fort wsjt_cxx) | ||||
| 
 | ||||
| add_executable (ldpcsim174js8d lib/js8/ldpcsim174js8d.f90 wsjtx.rc) | ||||
| target_link_libraries (ldpcsim174js8d wsjt_fort wsjt_cxx) | ||||
| add_executable (ldpcsim174js8e lib/js8/ldpcsim174js8e.f90 wsjtx.rc) | ||||
| target_link_libraries (ldpcsim174js8e wsjt_fort wsjt_cxx) | ||||
| 
 | ||||
| add_executable (js8 ${js8_FSRCS} ${js8_CXXSRCS} wsjtx.rc) | ||||
| if (${OPENMP_FOUND} OR APPLE) | ||||
|  | ||||
| @ -81,8 +81,8 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, | ||||
|   else if(m_TRperiod == JS8C_TX_SECONDS){ | ||||
|       delay_ms = JS8C_START_DELAY_MS; | ||||
|   } | ||||
|   else if(m_TRperiod == JS8D_TX_SECONDS){ | ||||
|       delay_ms = JS8D_START_DELAY_MS; | ||||
|   else if(m_TRperiod == JS8E_TX_SECONDS){ | ||||
|       delay_ms = JS8E_START_DELAY_MS; | ||||
|   } | ||||
| 
 | ||||
|   // noise generator parameters
 | ||||
|  | ||||
							
								
								
									
										22
									
								
								commons.h
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								commons.h
									
									
									
									
									
								
							| @ -15,7 +15,7 @@ | ||||
| #define JS8_ENABLE_JS8A    1 | ||||
| #define JS8_ENABLE_JS8B    1 | ||||
| #define JS8_ENABLE_JS8C    1 | ||||
| #define JS8_ENABLE_JS8D    0 | ||||
| #define JS8_ENABLE_JS8E    0 | ||||
| 
 | ||||
| #define JS8A_SYMBOL_SAMPLES 1920 | ||||
| #define JS8A_TX_SECONDS     15 | ||||
| @ -29,15 +29,15 @@ | ||||
| #define JS8C_TX_SECONDS     6 | ||||
| #define JS8C_START_DELAY_MS 100 | ||||
| 
 | ||||
| #define JS8D_IS_ULTRA 1 | ||||
| #if JS8D_IS_ULTRA | ||||
| #define JS8D_SYMBOL_SAMPLES 384 | ||||
| #define JS8D_TX_SECONDS     4 | ||||
| #define JS8D_START_DELAY_MS 100 | ||||
| #define JS8E_IS_ULTRA 0 | ||||
| #if JS8E_IS_ULTRA | ||||
| #define JS8E_SYMBOL_SAMPLES 384 | ||||
| #define JS8E_TX_SECONDS     4 | ||||
| #define JS8E_START_DELAY_MS 100 | ||||
| #else | ||||
| #define JS8D_SYMBOL_SAMPLES 4000 | ||||
| #define JS8D_TX_SECONDS     30 | ||||
| #define JS8D_START_DELAY_MS 100 | ||||
| #define JS8E_SYMBOL_SAMPLES 4000 | ||||
| #define JS8E_TX_SECONDS     30 | ||||
| #define JS8E_START_DELAY_MS 100 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef TEST_FOX_WAVE_GEN | ||||
| @ -95,11 +95,11 @@ extern struct dec_data { | ||||
|     int kposA;                  // starting position of decode for submode A
 | ||||
|     int kposB;                  // starting position of decode for submode B
 | ||||
|     int kposC;                  // starting position of decode for submode C
 | ||||
|     int kposD;                  // starting position of decode for submode D
 | ||||
|     int kposE;                  // starting position of decode for submode E
 | ||||
|     int kszA;                   // number of frames for decode for submode A
 | ||||
|     int kszB;                   // number of frames for decode for submode B
 | ||||
|     int kszC;                   // number of frames for decode for submode C
 | ||||
|     int kszD;                   // number of frames for decode for submode D
 | ||||
|     int kszE;                   // number of frames for decode for submode E
 | ||||
|     int nzhsym;                 // half symbol stop index
 | ||||
|     int nsubmode; | ||||
|     int nsubmodes; | ||||
|  | ||||
| @ -264,7 +264,7 @@ bool DecodedText::tryUnpackFastData(){ | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     if(submode_ != Varicode::JS8CallFast && submode_ != Varicode::JS8CallTurbo && submode_ != Varicode::JS8CallUltra){ | ||||
|     if(submode_ != Varicode::JS8CallFast && submode_ != Varicode::JS8CallTurbo && submode_ != Varicode::JS8CallUltraSlow){ | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -6,7 +6,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | ||||
|   use ft8_decode | ||||
|   use js8b_decode | ||||
|   use js8c_decode | ||||
|   use js8d_decode | ||||
|   use js8e_decode | ||||
| 
 | ||||
|   include 'jt9com.f90' | ||||
|   include 'timer_common.inc' | ||||
| @ -23,9 +23,9 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | ||||
|      integer :: decoded | ||||
|   end type counting_js8c_decoder | ||||
| 
 | ||||
|   type, extends(js8d_decoder) :: counting_js8d_decoder | ||||
|   type, extends(js8e_decoder) :: counting_js8e_decoder | ||||
|      integer :: decoded | ||||
|   end type counting_js8d_decoder | ||||
|   end type counting_js8e_decoder | ||||
| 
 | ||||
|   real ss(184,NSMAX) | ||||
|   logical baddata,newdat65,newdat9,single_decode,bVHF,bad0,newdat,trydecode | ||||
| @ -39,7 +39,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | ||||
|   type(counting_ft8_decoder)  :: my_js8a | ||||
|   type(counting_js8b_decoder) :: my_js8b | ||||
|   type(counting_js8c_decoder) :: my_js8c | ||||
|   type(counting_js8d_decoder) :: my_js8d | ||||
|   type(counting_js8e_decoder) :: my_js8e | ||||
| 
 | ||||
|   !cast C character arrays to Fortran character strings | ||||
|   datetime=transfer(params%datetime, datetime) | ||||
| @ -52,7 +52,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | ||||
|   my_js8a%decoded = 0 | ||||
|   my_js8b%decoded = 0 | ||||
|   my_js8c%decoded = 0 | ||||
|   my_js8d%decoded = 0 | ||||
|   my_js8e%decoded = 0 | ||||
| 
 | ||||
|   single_decode=iand(params%nexp_decode,32).ne.0 | ||||
|   bVHF=iand(params%nexp_decode,64).ne.0 | ||||
| @ -82,23 +82,23 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | ||||
|   trydecode=.false. | ||||
| 
 | ||||
|   if(params%nmode.eq.8 .and. (params%nsubmode.eq.4 .or. iand(params%nsubmodes, 8).eq.8)) then | ||||
| ! We're in JS8 mode D | ||||
|      call timer('decjs8d ',0) | ||||
| ! We're in JS8 mode E | ||||
|      call timer('decjs8e ',0) | ||||
|      newdat=params%newdat | ||||
|      trydecode=.true. | ||||
| 
 | ||||
|      ! copy the relevant frames for decoding | ||||
|      pos = params%kposD | ||||
|      sz = params%kszD | ||||
|      pos = params%kposE | ||||
|      sz = params%kszE | ||||
|      id0=0 | ||||
|      id0(1:sz+1)=id2(pos+1:pos+sz+1) | ||||
|       | ||||
|      call my_js8d%decode(js8d_decoded,id0,params%nQSOProgress,params%nfqso,    & | ||||
|      call my_js8e%decode(js8e_decoded,id0,params%nQSOProgress,params%nfqso,    & | ||||
|           params%nftx,newdat,params%nutc,params%nfa,params%nfb,              & | ||||
|           params%nexp_decode,params%ndepth,logical(params%nagain),           & | ||||
|           logical(params%lft8apon),logical(params%lapcqonly),params%napwid,  & | ||||
|           mycall,mygrid,hiscall,hisgrid) | ||||
|      call timer('decjs8d ',1) | ||||
|      call timer('decjs8e ',1) | ||||
|   endif | ||||
| 
 | ||||
|   if(params%nmode.eq.8 .and. (params%nsubmode.eq.2 .or. iand(params%nsubmodes, 4).eq.4)) then | ||||
| @ -202,7 +202,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | ||||
| 
 | ||||
| !$call omp_set_dynamic(.true.) | ||||
| 
 | ||||
| 800 ndecoded = my_js8a%decoded + my_js8b%decoded + my_js8c%decoded + my_js8d%decoded | ||||
| 800 ndecoded = my_js8a%decoded + my_js8b%decoded + my_js8c%decoded + my_js8e%decoded | ||||
|   write(*,1010) nsynced,ndecoded | ||||
| 1010 format('<DecodeFinished>',2i4) | ||||
|   call flush(6) | ||||
| @ -260,7 +260,7 @@ contains | ||||
|     if(submode.eq.0) m=' A ' | ||||
|     if(submode.eq.1) m=' B ' | ||||
|     if(submode.eq.2) m=' C ' | ||||
|     if(submode.eq.3) m=' D ' | ||||
|     if(submode.eq.4) m=' E ' | ||||
| 
 | ||||
| 
 | ||||
|     i0=index(decoded0,';') | ||||
| @ -317,9 +317,11 @@ contains | ||||
|     character(len=37), intent(in) :: decoded | ||||
|     integer, intent(in) :: nap  | ||||
|     real, intent(in) :: qual  | ||||
|     integer :: submode | ||||
|     save | ||||
| 
 | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, 0) | ||||
|     submode=0 | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, submode) | ||||
| 
 | ||||
|     select type(this) | ||||
|     type is (counting_ft8_decoder) | ||||
| @ -341,9 +343,11 @@ contains | ||||
|     character(len=37), intent(in) :: decoded | ||||
|     integer, intent(in) :: nap  | ||||
|     real, intent(in) :: qual  | ||||
|     integer :: submode | ||||
|     save | ||||
|      | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, 1) | ||||
|     submode=1 | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, submode) | ||||
| 
 | ||||
|     select type(this) | ||||
|     type is (counting_js8b_decoder) | ||||
| @ -365,9 +369,11 @@ contains | ||||
|     character(len=37), intent(in) :: decoded | ||||
|     integer, intent(in) :: nap  | ||||
|     real, intent(in) :: qual  | ||||
|     integer :: submode | ||||
|     save | ||||
| 
 | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, 2) | ||||
|     submode=2 | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, submode) | ||||
| 
 | ||||
|     select type(this) | ||||
|     type is (counting_js8c_decoder) | ||||
| @ -377,11 +383,11 @@ contains | ||||
|     return | ||||
|   end subroutine js8c_decoded | ||||
| 
 | ||||
|   subroutine js8d_decoded (this,sync,snr,dt,freq,decoded,nap,qual) | ||||
|     use js8d_decode | ||||
|   subroutine js8e_decoded (this,sync,snr,dt,freq,decoded,nap,qual) | ||||
|     use js8e_decode | ||||
|     implicit none | ||||
| 
 | ||||
|     class(js8d_decoder), intent(inout) :: this | ||||
|     class(js8e_decoder), intent(inout) :: this | ||||
|     real, intent(in) :: sync | ||||
|     integer, intent(in) :: snr | ||||
|     real, intent(in) :: dt | ||||
| @ -389,16 +395,18 @@ contains | ||||
|     character(len=37), intent(in) :: decoded | ||||
|     integer, intent(in) :: nap  | ||||
|     real, intent(in) :: qual  | ||||
|     integer :: submode | ||||
|     save | ||||
| 
 | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, 3) | ||||
|     submode=4 | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, submode) | ||||
| 
 | ||||
|     select type(this) | ||||
|     type is (counting_js8d_decoder) | ||||
|     type is (counting_js8e_decoder) | ||||
|        this%decoded = this%decoded + 1 | ||||
|     end select | ||||
| 
 | ||||
|     return | ||||
|   end subroutine js8d_decoded | ||||
|   end subroutine js8e_decoded | ||||
| 
 | ||||
| end subroutine multimode_decoder | ||||
|  | ||||
| @ -4,7 +4,7 @@ use crc | ||||
| use packjt | ||||
| 
 | ||||
| include 'js8_params.f90' | ||||
| include 'js8d_params.f90' | ||||
| include 'js8e_params.f90' | ||||
| 
 | ||||
| character*22 msg,msgsent,msgreceived | ||||
| character*8 arg | ||||
| @ -1,16 +1,16 @@ | ||||
| module js8d_decode | ||||
| module js8e_decode | ||||
| 
 | ||||
|   type :: js8d_decoder | ||||
|      procedure(js8d_decode_callback), pointer :: callback | ||||
|   type :: js8e_decoder | ||||
|      procedure(js8e_decode_callback), pointer :: callback | ||||
|    contains | ||||
|      procedure :: decode | ||||
|   end type js8d_decoder | ||||
|   end type js8e_decoder | ||||
| 
 | ||||
|   abstract interface | ||||
|      subroutine js8d_decode_callback (this,sync,snr,dt,freq,decoded,nap,qual) | ||||
|        import js8d_decoder | ||||
|      subroutine js8e_decode_callback (this,sync,snr,dt,freq,decoded,nap,qual) | ||||
|        import js8e_decoder | ||||
|        implicit none | ||||
|        class(js8d_decoder), intent(inout) :: this | ||||
|        class(js8e_decoder), intent(inout) :: this | ||||
|        real, intent(in) :: sync | ||||
|        integer, intent(in) :: snr | ||||
|        real, intent(in) :: dt | ||||
| @ -18,7 +18,7 @@ module js8d_decode | ||||
|        character(len=37), intent(in) :: decoded | ||||
|        integer, intent(in) :: nap  | ||||
|        real, intent(in) :: qual  | ||||
|      end subroutine js8d_decode_callback | ||||
|      end subroutine js8e_decode_callback | ||||
|   end interface | ||||
| 
 | ||||
| contains | ||||
| @ -29,10 +29,10 @@ contains | ||||
| !    use wavhdr | ||||
|     use timer_module, only: timer | ||||
| !    type(hdr) h | ||||
|     use js8d_module | ||||
|     use js8e_module | ||||
| 
 | ||||
|     class(js8d_decoder), intent(inout) :: this | ||||
|     procedure(js8d_decode_callback) :: callback | ||||
|     class(js8e_decoder), intent(inout) :: this | ||||
|     procedure(js8e_decode_callback) :: callback | ||||
|     real s(NH1,NHSYM) | ||||
|     real sbase(NH1) | ||||
|     real candidate(3,200) | ||||
| @ -153,4 +153,4 @@ contains | ||||
|   return | ||||
|   end subroutine decode | ||||
| 
 | ||||
| end module js8d_decode | ||||
| end module js8e_decode | ||||
| @ -1,6 +1,6 @@ | ||||
| module js8d_module | ||||
| module js8e_module | ||||
|     include 'js8/js8_params.f90' | ||||
|     include 'js8/js8d_params.f90' | ||||
|     include 'js8/js8e_params.f90' | ||||
| 
 | ||||
| contains | ||||
|     include 'js8/baselinejs8.f90' | ||||
| @ -10,4 +10,4 @@ contains | ||||
|     include 'js8/genjs8refsig.f90' | ||||
|     include 'js8/subtractjs8.f90' | ||||
|     include 'js8/js8dec.f90' | ||||
| end module js8d_module | ||||
| end module js8e_module | ||||
| @ -290,7 +290,7 @@ program jt9 | ||||
|      shared_data%params%kszA=NMAX-1 | ||||
|      shared_data%params%kszB=NMAX-1 | ||||
|      shared_data%params%kszC=NMAX-1 | ||||
|      shared_data%params%kszD=NMAX-1 | ||||
|      shared_data%params%kszE=NMAX-1 | ||||
|      call multimode_decoder(shared_data%ss,shared_data%id2,shared_data%params,nfsample) | ||||
|   enddo | ||||
| 
 | ||||
|  | ||||
| @ -22,11 +22,11 @@ | ||||
|      integer(c_int) :: kposA | ||||
|      integer(c_int) :: kposB | ||||
|      integer(c_int) :: kposC | ||||
|      integer(c_int) :: kposD | ||||
|      integer(c_int) :: kposE | ||||
|      integer(c_int) :: kszA | ||||
|      integer(c_int) :: kszB | ||||
|      integer(c_int) :: kszC | ||||
|      integer(c_int) :: kszD | ||||
|      integer(c_int) :: kszE | ||||
|      integer(c_int) :: nzhsym | ||||
|      integer(c_int) :: nsubmode | ||||
|      integer(c_int) :: nsubmodes | ||||
|  | ||||
							
								
								
									
										111
									
								
								mainwindow.cpp
									
									
									
									
									
								
							
							
						
						
									
										111
									
								
								mainwindow.cpp
									
									
									
									
									
								
							| @ -1007,7 +1007,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, | ||||
|   ui->actionModeJS8Normal->setActionGroup(modeActionGroup); | ||||
|   ui->actionModeJS8Fast->setActionGroup(modeActionGroup); | ||||
|   ui->actionModeJS8Turbo->setActionGroup(modeActionGroup); | ||||
|   ui->actionModeJS8Ultra->setActionGroup(modeActionGroup); | ||||
|   ui->actionModeJS8UltraSlow->setActionGroup(modeActionGroup); | ||||
| 
 | ||||
|   auto mbmp = new MousePressEater(); | ||||
|   connect(mbmp, &MousePressEater::mousePressed, this, [this](QObject *, QMouseEvent * e, bool *pProcessed){ | ||||
| @ -1024,8 +1024,14 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, | ||||
|   if(!JS8_ENABLE_JS8C){ | ||||
|       ui->actionModeJS8Turbo->setVisible(false); | ||||
|   } | ||||
|   if(!JS8_ENABLE_JS8D){ | ||||
|       ui->actionModeJS8Ultra->setVisible(false); | ||||
|   if(!JS8_ENABLE_JS8E){ | ||||
|       ui->actionModeJS8UltraSlow->setVisible(false); | ||||
|   } | ||||
|   if(JS8_ENABLE_JS8E && !JS8E_IS_ULTRA){ | ||||
|       // reorder so slow is at the top
 | ||||
|       ui->menuModeJS8->removeAction(ui->actionModeJS8UltraSlow); | ||||
|       ui->menuModeJS8->insertAction(ui->actionModeJS8Normal, ui->actionModeJS8UltraSlow); | ||||
|       ui->actionModeJS8UltraSlow->setText("JS8 (&Slow, 30s, 24Hz, ~8WPM)"); | ||||
|   } | ||||
| 
 | ||||
|   // prep
 | ||||
| @ -2488,7 +2494,7 @@ int MainWindow::computeSubmodePeriod(int submode){ | ||||
|         case Varicode::JS8CallNormal: return JS8A_TX_SECONDS; | ||||
|         case Varicode::JS8CallFast:   return JS8B_TX_SECONDS; | ||||
|         case Varicode::JS8CallTurbo:  return JS8C_TX_SECONDS; | ||||
|         case Varicode::JS8CallUltra:  return JS8D_TX_SECONDS; | ||||
|         case Varicode::JS8CallUltraSlow:  return JS8E_TX_SECONDS; | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
| @ -2518,7 +2524,16 @@ int MainWindow::computeStop(int submode, int period){ | ||||
|         case Varicode::JS8CallNormal: symbolSamples = JS8A_SYMBOL_SAMPLES; /* threshold = 1.00 */ ; break; | ||||
|         case Varicode::JS8CallFast:   symbolSamples = JS8B_SYMBOL_SAMPLES; /* threshold = 1.08 */ ; break; | ||||
|         case Varicode::JS8CallTurbo:  symbolSamples = JS8C_SYMBOL_SAMPLES; /* threshold = 0.50 */ ; break; | ||||
|         case Varicode::JS8CallUltra:  symbolSamples = JS8D_SYMBOL_SAMPLES; threshold = 0.00; break; | ||||
|         case Varicode::JS8CallUltraSlow: | ||||
|         { | ||||
|             symbolSamples = JS8E_SYMBOL_SAMPLES; | ||||
| #if JS8E_IS_ULTRA | ||||
|             threshold = 0.00; | ||||
| #endif | ||||
|             break; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|     } | ||||
|     stop = qFloor(float(symbolSamples*JS8_NUM_SYMBOLS + threshold*RX_SAMPLE_RATE)/(float)m_nsps*2.0); | ||||
| #endif | ||||
| @ -2742,7 +2757,7 @@ void MainWindow::on_menuModeJS8_aboutToShow(){ | ||||
|     ui->actionModeJS8Normal->setEnabled(canChangeMode); | ||||
|     ui->actionModeJS8Fast->setEnabled(canChangeMode); | ||||
|     ui->actionModeJS8Turbo->setEnabled(canChangeMode); | ||||
|     ui->actionModeJS8Ultra->setEnabled(canChangeMode); | ||||
|     ui->actionModeJS8UltraSlow->setEnabled(canChangeMode); | ||||
| } | ||||
| 
 | ||||
| void MainWindow::on_menuControl_aboutToShow(){ | ||||
| @ -3244,7 +3259,7 @@ void MainWindow::setSubmode(int submode){ | ||||
|     ui->actionModeJS8Normal->setChecked(submode == Varicode::JS8CallNormal); | ||||
|     ui->actionModeJS8Fast->setChecked(submode == Varicode::JS8CallFast); | ||||
|     ui->actionModeJS8Turbo->setChecked(submode == Varicode::JS8CallTurbo); | ||||
|     ui->actionModeJS8Ultra->setChecked(submode == Varicode::JS8CallUltra); | ||||
|     ui->actionModeJS8UltraSlow->setChecked(submode == Varicode::JS8CallUltraSlow); | ||||
|     on_actionJS8_triggered(); | ||||
| } | ||||
| 
 | ||||
| @ -3258,8 +3273,8 @@ int MainWindow::speedNameMode(QString speed){ | ||||
|     if(speed == modeSpeedName(Varicode::JS8CallTurbo)){ | ||||
|         return Varicode::JS8CallTurbo; | ||||
|     } | ||||
|     if(speed == modeSpeedName(Varicode::JS8CallUltra)){ | ||||
|         return Varicode::JS8CallUltra; | ||||
|     if(speed == modeSpeedName(Varicode::JS8CallUltraSlow)){ | ||||
|         return Varicode::JS8CallUltraSlow; | ||||
|     } | ||||
|     return -1; | ||||
| } | ||||
| @ -3275,8 +3290,8 @@ QString MainWindow::modeSpeedName(int submode){ | ||||
|     else if(submode == Varicode::JS8CallTurbo){ | ||||
|         return "TURBO"; | ||||
|     } | ||||
|     else if(submode == Varicode::JS8CallUltra){ | ||||
| #ifdef JS8D_IS_ULTRA | ||||
|     else if(submode == Varicode::JS8CallUltraSlow){ | ||||
| #if JS8E_IS_ULTRA | ||||
|         return "ULTRA"; | ||||
| #else | ||||
|         return "SLOW"; | ||||
| @ -3981,53 +3996,53 @@ bool MainWindow::decodeReady(int submode, int period, int *pSubmode, int *pPerio | ||||
|     qint32 framesNeededC = computeFramesNeededForDecode(Varicode::JS8CallTurbo, JS8C_TX_SECONDS); | ||||
|     bool couldDecodeC = k >= cycleSampleStartC + framesNeededC; | ||||
| 
 | ||||
| #if JS8_ENABLE_JS8D | ||||
|     qint32 cycleSampleStartD = computeCycleStartForDecode(computeCurrentCycle(JS8D_TX_SECONDS), JS8D_TX_SECONDS); | ||||
|     qint32 framesNeededD = computeFramesNeededForDecode(Varicode::JS8CallUltra, JS8D_TX_SECONDS); | ||||
|     bool couldDecodeD = k >= cycleSampleStartD + framesNeededD; | ||||
| #if JS8_ENABLE_JS8E | ||||
|     qint32 cycleSampleStartE = computeCycleStartForDecode(computeCurrentCycle(JS8E_TX_SECONDS), JS8E_TX_SECONDS); | ||||
|     qint32 framesNeededE = computeFramesNeededForDecode(Varicode::JS8CallUltraSlow, JS8E_TX_SECONDS); | ||||
|     bool couldDecodeE = k >= cycleSampleStartE + framesNeededE; | ||||
| #else | ||||
|     qint32 cycleSampleStartD = 0; | ||||
|     qint32 framesNeededD = 0; | ||||
|     bool couldDecodeD = false; | ||||
|     qint32 cycleSampleStartE = 0; | ||||
|     qint32 framesNeededE = 0; | ||||
|     bool couldDecodeE = false; | ||||
| #endif | ||||
| 
 | ||||
|     if(m_diskData){ | ||||
|         dec_data.params.kposA = 0; | ||||
|         dec_data.params.kposB = 0; | ||||
|         dec_data.params.kposC = 0; | ||||
|         dec_data.params.kposD = 0; | ||||
|         dec_data.params.kposE = 0; | ||||
|         dec_data.params.kszA  = NTMAX*RX_SAMPLE_RATE-1; | ||||
|         dec_data.params.kszB  = NTMAX*RX_SAMPLE_RATE-1; | ||||
|         dec_data.params.kszC  = NTMAX*RX_SAMPLE_RATE-1; | ||||
|         dec_data.params.kszD  = NTMAX*RX_SAMPLE_RATE-1; | ||||
|         dec_data.params.kszE  = NTMAX*RX_SAMPLE_RATE-1; | ||||
|         dec_data.params.nsubmodes = 0; | ||||
|         couldDecodeA = true; | ||||
|         couldDecodeB = true; | ||||
|         couldDecodeC = true; | ||||
| #if JS8_ENABLE_JS8D | ||||
|         couldDecodeD = true; | ||||
| #if JS8_ENABLE_JS8E | ||||
|         couldDecodeE = true; | ||||
| #endif | ||||
|     } else { | ||||
|         // set the params for starting positions and sizes for decode
 | ||||
|         dec_data.params.kposA = cycleSampleStartA; | ||||
|         dec_data.params.kposB = cycleSampleStartB; | ||||
|         dec_data.params.kposC = cycleSampleStartC; | ||||
|         dec_data.params.kposD = cycleSampleStartD; | ||||
|         dec_data.params.kposE = cycleSampleStartE; | ||||
|         dec_data.params.kszA  = qMax(framesNeededA, k-cycleSampleStartA); | ||||
|         dec_data.params.kszB  = qMax(framesNeededB, k-cycleSampleStartB); | ||||
|         dec_data.params.kszC  = qMax(framesNeededC, k-cycleSampleStartC); | ||||
|         dec_data.params.kszD  = qMax(framesNeededD, k-cycleSampleStartD); | ||||
|         dec_data.params.kszE  = qMax(framesNeededE, k-cycleSampleStartE); | ||||
|         dec_data.params.nsubmodes = 0; | ||||
|     } | ||||
| 
 | ||||
|     bool multi = ui->actionModeMultiDecoder->isChecked(); | ||||
|     int decodes = 0; | ||||
| 
 | ||||
|     if(couldDecodeD && (multi || submode == Varicode::JS8CallUltra)){ | ||||
|         qDebug() << "could decode D from" << cycleSampleStartD << "to" << cycleSampleStartD + framesNeededD; | ||||
|         submode = Varicode::JS8CallUltra; | ||||
|         period = JS8D_TX_SECONDS; | ||||
|         dec_data.params.nsubmodes |= (Varicode::JS8CallUltra << 1); | ||||
|     if(couldDecodeE && (multi || submode == Varicode::JS8CallUltraSlow)){ | ||||
|         qDebug() << "could decode E from" << cycleSampleStartE << "to" << cycleSampleStartE + framesNeededE; | ||||
|         submode = Varicode::JS8CallUltraSlow; | ||||
|         period = JS8E_TX_SECONDS; | ||||
|         dec_data.params.nsubmodes |= (Varicode::JS8CallUltraSlow << 1); | ||||
|         decodes++; | ||||
|     } | ||||
|     if(couldDecodeC && (multi || submode == Varicode::JS8CallTurbo)){ | ||||
| @ -4212,8 +4227,8 @@ bool MainWindow::decodeReady(int submode, int period, int *pSubmode, int *pPerio | ||||
|         frames = dec_data.params.kszC; | ||||
|     } | ||||
|     else if(m_nSubMode == Varicode::JS8CallUltra){ | ||||
|         start = dec_data.params.kposD; | ||||
|         frames = dec_data.params.kszD; | ||||
|         start = dec_data.params.kposE; | ||||
|         frames = dec_data.params.kszE; | ||||
|     } | ||||
|     memcpy(dec_data.d1, dec_data.d2 + start, sizeof(dec_data.d2[0]) * frames); | ||||
| #endif | ||||
| @ -5056,8 +5071,8 @@ void MainWindow::guiUpdate() | ||||
|         txDuration=JS8B_START_DELAY_MS/1000.0 + JS8_NUM_SYMBOLS * (double)JS8B_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE; | ||||
|       } else if(m_nSubMode == Varicode::JS8CallTurbo){ | ||||
|         txDuration=JS8C_START_DELAY_MS/1000.0 + JS8_NUM_SYMBOLS * (double)JS8C_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE; | ||||
|       } else if(m_nSubMode == Varicode::JS8CallUltra){ | ||||
|         txDuration=JS8D_START_DELAY_MS/1000.0 + JS8_NUM_SYMBOLS * (double)JS8D_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE; | ||||
|       } else if(m_nSubMode == Varicode::JS8CallUltraSlow){ | ||||
|         txDuration=JS8E_START_DELAY_MS/1000.0 + JS8_NUM_SYMBOLS * (double)JS8E_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE; | ||||
|       } | ||||
|   } | ||||
| 
 | ||||
| @ -5143,8 +5158,8 @@ void MainWindow::guiUpdate() | ||||
|     else if(m_nSubMode == Varicode::JS8CallTurbo){ | ||||
|         ratio = (((double)m_TRperiod - (JS8_NUM_SYMBOLS*(double)JS8C_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE))/(double)m_TRperiod); | ||||
|     } | ||||
|     else if(m_nSubMode == Varicode::JS8CallUltra){ | ||||
|         ratio = (((double)m_TRperiod - (JS8_NUM_SYMBOLS*(double)JS8D_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE))/(double)m_TRperiod); | ||||
|     else if(m_nSubMode == Varicode::JS8CallUltraSlow){ | ||||
|         ratio = (((double)m_TRperiod - (JS8_NUM_SYMBOLS*(double)JS8E_SYMBOL_SAMPLES/(double)RX_SAMPLE_RATE))/(double)m_TRperiod); | ||||
|     } | ||||
| 
 | ||||
|     if(fTR > 1.0-ratio && fTR < 1.0){ | ||||
| @ -5231,7 +5246,7 @@ void MainWindow::guiUpdate() | ||||
|           qDebug() << "gen ft8"; | ||||
|           genft8_(message, MyGrid, &bcontest, &m_i3bit, msgsent, const_cast<char *> (ft8msgbits), | ||||
|                   const_cast<int *> (itone), 22, 6, 22); | ||||
|       } else if (m_nSubMode == Varicode::JS8CallFast || m_nSubMode == Varicode::JS8CallTurbo || m_nSubMode == Varicode::JS8CallUltra){ | ||||
|       } else if (m_nSubMode == Varicode::JS8CallFast || m_nSubMode == Varicode::JS8CallTurbo || m_nSubMode == Varicode::JS8CallUltraSlow){ | ||||
|           qDebug() << "gen js8"; | ||||
|           genjs8_(message, MyGrid, &bcontest, &m_i3bit, msgsent, const_cast<char *> (ft8msgbits), | ||||
|                   const_cast<int *> (itone), 22, 6, 22); | ||||
| @ -7173,7 +7188,7 @@ void MainWindow::on_actionModeJS8Turbo_triggered(){ | ||||
|     on_actionJS8_triggered(); | ||||
| } | ||||
| 
 | ||||
| void MainWindow::on_actionModeJS8Ultra_triggered(){ | ||||
| void MainWindow::on_actionModeJS8UltraSlow_triggered(){ | ||||
|     on_actionJS8_triggered(); | ||||
| } | ||||
| 
 | ||||
| @ -7235,8 +7250,8 @@ void MainWindow::on_actionJS8_triggered() | ||||
|   else if(ui->actionModeJS8Turbo->isChecked()){ | ||||
|       m_nSubMode=Varicode::JS8CallTurbo; | ||||
|   } | ||||
|   else if(ui->actionModeJS8Ultra->isChecked()){ | ||||
|       m_nSubMode=Varicode::JS8CallUltra; | ||||
|   else if(ui->actionModeJS8UltraSlow->isChecked()){ | ||||
|       m_nSubMode=Varicode::JS8CallUltraSlow; | ||||
|   } | ||||
| 
 | ||||
|   // Only enable heartbeat for normal mode
 | ||||
| @ -7272,7 +7287,12 @@ void MainWindow::on_actionJS8_triggered() | ||||
| #if JS8_RING_BUFFER | ||||
|   Q_ASSERT(NTMAX == 60); | ||||
|   m_wideGraph->setPeriod(m_TRperiod, m_nsps); | ||||
| #if JS8_ENABLE_JS8E && !JS8E_IS_ULTRA | ||||
|   m_detector->setTRPeriod(NTMAX); // TODO - not thread safe
 | ||||
| #else | ||||
|   m_detector->setTRPeriod(NTMAX / 2); // TODO - not thread safe
 | ||||
| #endif | ||||
| 
 | ||||
| #else | ||||
|   m_wideGraph->setPeriod(m_TRperiod, m_nsps); | ||||
|   m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe
 | ||||
| @ -9313,9 +9333,9 @@ void MainWindow::transmit (double snr) | ||||
|         symbolSamples=(double)JS8C_SYMBOL_SAMPLES; | ||||
|         toneSpacing=(double)RX_SAMPLE_RATE/(double)JS8C_SYMBOL_SAMPLES; | ||||
|     } | ||||
|     else if(m_nSubMode == Varicode::JS8CallUltra){ | ||||
|         symbolSamples=(double)JS8D_SYMBOL_SAMPLES; | ||||
|         toneSpacing=(double)RX_SAMPLE_RATE/(double)JS8D_SYMBOL_SAMPLES; | ||||
|     else if(m_nSubMode == Varicode::JS8CallUltraSlow){ | ||||
|         symbolSamples=(double)JS8E_SYMBOL_SAMPLES; | ||||
|         toneSpacing=(double)RX_SAMPLE_RATE/(double)JS8E_SYMBOL_SAMPLES; | ||||
|     } | ||||
|     if(m_config.x2ToneSpacing()) toneSpacing*=2.0; | ||||
|     if(m_config.x4ToneSpacing()) toneSpacing*=4.0; | ||||
| @ -9583,6 +9603,9 @@ int MainWindow::rxThreshold(){ | ||||
|     int threshold = 10; | ||||
|     if(m_nSubMode == Varicode::JS8CallFast){ threshold = 16; } | ||||
|     if(m_nSubMode == Varicode::JS8CallTurbo){ threshold = 32; } | ||||
| #if JS8E_IS_ULTRA | ||||
|     if(m_nSubMode == Varicode::JS8CallUltraSlow){ threshold = 50; } | ||||
| #endif | ||||
|     return threshold; | ||||
| } | ||||
| 
 | ||||
| @ -12350,8 +12373,8 @@ void MainWindow::networkMessage(Message const &message) | ||||
|             if(speed == Varicode::JS8CallTurbo){ | ||||
|                 ui->actionModeJS8Turbo->setChecked(true); | ||||
|             } | ||||
|             if(speed == Varicode::JS8CallUltra){ | ||||
|                 ui->actionModeJS8Ultra->setChecked(true); | ||||
|             if(speed == Varicode::JS8CallUltraSlow){ | ||||
|                 ui->actionModeJS8UltraSlow->setChecked(true); | ||||
|             } | ||||
|         } | ||||
|         sendNetworkMessage("MODE.SPEED", "", { | ||||
|  | ||||
| @ -269,7 +269,7 @@ private slots: | ||||
|   void on_actionModeJS8Normal_triggered(); | ||||
|   void on_actionModeJS8Fast_triggered(); | ||||
|   void on_actionModeJS8Turbo_triggered(); | ||||
|   void on_actionModeJS8Ultra_triggered(); | ||||
|   void on_actionModeJS8UltraSlow_triggered(); | ||||
|   void on_actionHeartbeatAcknowledgements_toggled(bool checked); | ||||
|   void on_actionModeMultiDecoder_toggled(bool checked); | ||||
|   void on_actionModeAutoreply_toggled(bool checked); | ||||
|  | ||||
| @ -4791,7 +4791,7 @@ list. The list can be maintained in Settings (F2).</string> | ||||
|     <addaction name="actionModeJS8Normal"/> | ||||
|     <addaction name="actionModeJS8Fast"/> | ||||
|     <addaction name="actionModeJS8Turbo"/> | ||||
|     <addaction name="actionModeJS8Ultra"/> | ||||
|     <addaction name="actionModeJS8UltraSlow"/> | ||||
|     <addaction name="separator"/> | ||||
|     <addaction name="menu_Decode_Passes"/> | ||||
|     <addaction name="actionModeMultiDecoder"/> | ||||
| @ -5722,7 +5722,7 @@ list. The list can be maintained in Settings (F2).</string> | ||||
|     <string>JS8 (&Turbo, 6s, 160Hz, ~40 WPM)</string> | ||||
|    </property> | ||||
|   </action> | ||||
|   <action name="actionModeJS8Ultra"> | ||||
|   <action name="actionModeJS8UltraSlow"> | ||||
|    <property name="checkable"> | ||||
|     <bool>true</bool> | ||||
|    </property> | ||||
|  | ||||
| @ -422,8 +422,8 @@ void CPlotter::DrawOverlay()                   //DrawOverlay() | ||||
|   else if(m_nSubMode == Varicode::JS8CallTurbo){ | ||||
|       bw = 8.0*(double)RX_SAMPLE_RATE/(double)JS8C_SYMBOL_SAMPLES; | ||||
|   } | ||||
|   else if(m_nSubMode == Varicode::JS8CallUltra){ | ||||
|       bw = 8.0*(double)RX_SAMPLE_RATE/(double)JS8D_SYMBOL_SAMPLES; | ||||
|   else if(m_nSubMode == Varicode::JS8CallUltraSlow){ | ||||
|       bw = 8.0*(double)RX_SAMPLE_RATE/(double)JS8E_SYMBOL_SAMPLES; | ||||
|   } | ||||
| 
 | ||||
|   painter0.setPen(penGreen); | ||||
|  | ||||
| @ -28,7 +28,8 @@ public: | ||||
|         JS8CallNormal   = 0, | ||||
|         JS8CallFast     = 1, | ||||
|         JS8CallTurbo    = 2, | ||||
|         JS8CallUltra    = 4 | ||||
|         JS8CallSlow     = 4, | ||||
|         JS8CallUltraSlow    = 4 | ||||
|     }; | ||||
| 
 | ||||
|     // frame type transmitted via itype and decoded by the ft8 decoded
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jordan Sherer
						Jordan Sherer