Refactor decoder output to include which submode is decoded so we could eventually run three
This commit is contained in:
		
							parent
							
								
									0426b3a6ce
								
							
						
					
					
						commit
						5313706818
					
				| @ -15,7 +15,7 @@ namespace | ||||
|   QRegularExpression words_re {R"(^(?:(?<word1>(?:CQ|DE|QRZ)(?:\s?DX|\s(?:[A-Z]{2}|\d{3}))|[A-Z0-9/]+)\s)(?:(?<word2>[A-Z0-9/]+)(?:\s(?<word3>[-+A-Z0-9]+)(?:\s(?<word4>(?:OOO|(?!RR73)[A-R]{2}[0-9]{2})))?)?)?)"}; | ||||
| } | ||||
| 
 | ||||
| DecodedText::DecodedText (QString const& the_string, bool contest_mode, QString const& my_grid, int submode) | ||||
| DecodedText::DecodedText (QString const& the_string, bool contest_mode, QString const& my_grid) | ||||
|   : string_ {the_string.left (the_string.indexOf (QChar::Nbsp))} // discard appended info
 | ||||
|   , padding_ {string_.indexOf (" ") > 4 ? 2 : 0} // allow for seconds
 | ||||
|   , contest_mode_ {contest_mode} | ||||
| @ -25,7 +25,7 @@ DecodedText::DecodedText (QString const& the_string, bool contest_mode, QString | ||||
|   , isHeartbeat_(false) | ||||
|   , isAlt_(false) | ||||
|   , bits_{0} | ||||
|   , submode_{submode} | ||||
|   , submode_{ string_.mid(column_mode, 3).trimmed().at(0).cell() - 'A' } | ||||
| { | ||||
|     if(message_.length() >= 1) { | ||||
|         message_ = message_.left (21).remove (QRegularExpression {"[<>]"}); | ||||
|  | ||||
| @ -30,7 +30,7 @@ | ||||
| class DecodedText | ||||
| { | ||||
| public: | ||||
|   explicit DecodedText (QString const& message, bool, QString const& my_grid, int submode); | ||||
|   explicit DecodedText (QString const& message, bool, QString const& my_grid); | ||||
|   explicit DecodedText (QString const& js8callmessage, int bits, int submode); | ||||
| 
 | ||||
|   bool tryUnpack(); | ||||
| @ -74,6 +74,7 @@ public: | ||||
|   bool hasBits() const { return !string_.right(5).trimmed().isEmpty(); } | ||||
|   int bits() const { return string_.right(5).trimmed().toShort(); } | ||||
|   float dt() const; | ||||
|   int submode() const { return submode_; } | ||||
| 
 | ||||
|   // find and extract any report. Returns true if this is a standard message
 | ||||
|   bool report(QString const& myBaseCall, QString const& dxBaseCall, /*mod*/QString& report) const; | ||||
|  | ||||
| @ -79,7 +79,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | ||||
|   endif | ||||
| 
 | ||||
|   if(params%nmode.eq.8 .and. params%nsubmode.eq.3) then | ||||
| ! We're in JS8 mode C | ||||
| ! We're in JS8 mode D | ||||
|      call timer('decjs8d ',0) | ||||
|      newdat=params%newdat | ||||
|      call my_js8d%decode(js8d_decoded,id2,params%nQSOProgress,params%nfqso,    & | ||||
| @ -169,7 +169,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | ||||
| 
 | ||||
| !$call omp_set_dynamic(.true.) | ||||
| 
 | ||||
| 800 ndecoded = my_js8a%decoded + my_js8b%decoded + my_js8c%decoded | ||||
| 800 ndecoded = my_js8a%decoded + my_js8b%decoded + my_js8c%decoded + my_js8d%decoded | ||||
|   write(*,1010) nsynced,ndecoded | ||||
| 1010 format('<DecodeFinished>',2i4) | ||||
|   call flush(6) | ||||
| @ -177,7 +177,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | ||||
| 
 | ||||
| contains | ||||
| 
 | ||||
|   subroutine js8_decoded (sync,snr,dt,freq,decoded,nap,qual) | ||||
|   subroutine js8_decoded (sync,snr,dt,freq,decoded,nap,qual,submode) | ||||
|     implicit none | ||||
| 
 | ||||
|     real, intent(in) :: sync | ||||
| @ -189,6 +189,8 @@ contains | ||||
|     integer i0,i1,i2,i3,i4,i5,n30,nwrap | ||||
|     integer, intent(in) :: nap  | ||||
|     real, intent(in) :: qual  | ||||
|     integer, intent(in) :: submode | ||||
|     character*3 m | ||||
|     character*2 annot | ||||
|     character*37 decoded0 | ||||
|     logical isgrid4,first,b0,b1,b2 | ||||
| @ -220,11 +222,19 @@ contains | ||||
|        if(qual.lt.0.17) decoded0(22:22)='?' | ||||
|     endif | ||||
| 
 | ||||
| 
 | ||||
|     m = ' ~ ' | ||||
|     if(submode.eq.0) m=' A ' | ||||
|     if(submode.eq.1) m=' B ' | ||||
|     if(submode.eq.2) m=' C ' | ||||
|     if(submode.eq.3) m=' D ' | ||||
| 
 | ||||
| 
 | ||||
|     i0=index(decoded0,';') | ||||
|     if(i0.le.0) write(*,1000) params%nutc,snr,dt,nint(freq),decoded0(1:22),annot | ||||
| 1000 format(i6.6,i4,f5.1,i5,' ~ ',1x,a22,1x,a2) | ||||
|     if(i0.gt.0) write(*,1001) params%nutc,snr,dt,nint(freq),decoded0 | ||||
| 1001 format(i6.6,i4,f5.1,i5,' ~ ',1x,a37) | ||||
|     if(i0.le.0) write(*,1000) params%nutc,snr,dt,nint(freq),m,decoded0(1:22),annot | ||||
| 1000 format(i6.6,i4,f5.1,i5,a3,1x,a22,1x,a2) | ||||
|     if(i0.gt.0) write(*,1001) params%nutc,snr,dt,nint(freq),m,decoded0 | ||||
| 1001 format(i6.6,i4,f5.1,i5,a3,1x,a37) | ||||
| 
 | ||||
|     i1=index(decoded0,' ') | ||||
|     i2=i1 + index(decoded0(i1+1:),' ') | ||||
| @ -276,7 +286,7 @@ contains | ||||
|     real, intent(in) :: qual  | ||||
|     save | ||||
| 
 | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual) | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, 0) | ||||
| 
 | ||||
|     select type(this) | ||||
|     type is (counting_ft8_decoder) | ||||
| @ -300,7 +310,7 @@ contains | ||||
|     real, intent(in) :: qual  | ||||
|     save | ||||
|      | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual) | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, 1) | ||||
| 
 | ||||
|     select type(this) | ||||
|     type is (counting_js8b_decoder) | ||||
| @ -324,7 +334,7 @@ contains | ||||
|     real, intent(in) :: qual  | ||||
|     save | ||||
| 
 | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual) | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, 2) | ||||
| 
 | ||||
|     select type(this) | ||||
|     type is (counting_js8c_decoder) | ||||
| @ -348,7 +358,7 @@ contains | ||||
|     real, intent(in) :: qual  | ||||
|     save | ||||
| 
 | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual) | ||||
|     call js8_decoded(sync, snr, dt, freq, decoded, nap, qual, 3) | ||||
| 
 | ||||
|     select type(this) | ||||
|     type is (counting_js8d_decoder) | ||||
|  | ||||
| @ -4205,7 +4205,7 @@ void MainWindow::readFromStdout()                             //readFromStdout | ||||
|         } | ||||
|         int n=t.length(); | ||||
|         auto logText = t.mid(0, n-2); | ||||
|         auto dt = DecodedText(logText, false, m_config.my_grid(), m_nSubMode); | ||||
|         auto dt = DecodedText(logText, false, m_config.my_grid()); | ||||
|         out << logText << "  " << dt.message() << endl; | ||||
|         f.close(); | ||||
|       } else { | ||||
| @ -4215,7 +4215,7 @@ void MainWindow::readFromStdout()                             //readFromStdout | ||||
|       } | ||||
| 
 | ||||
|       DecodedText decodedtext {QString::fromUtf8 (t.constData ()).remove (QRegularExpression {"\r|\n"}), "FT8" == m_mode && | ||||
|             ui->cbVHFcontest->isChecked(), m_config.my_grid (), m_nSubMode}; | ||||
|             ui->cbVHFcontest->isChecked(), m_config.my_grid ()}; | ||||
| 
 | ||||
|       bool bValidFrame = decodedtext.snr() > -24; | ||||
| 
 | ||||
| @ -4234,7 +4234,7 @@ void MainWindow::readFromStdout()                             //readFromStdout | ||||
|           m_messageDupeCache[frame] = frameOffset; | ||||
|       } | ||||
| 
 | ||||
|       qDebug() << "valid" << bValidFrame << "decoded text" << decodedtext.message(); | ||||
|       qDebug() << "valid" << bValidFrame << decodedtext.submode() << "decoded text" << decodedtext.message(); | ||||
| 
 | ||||
|       // skip if invalid
 | ||||
|       if(!bValidFrame) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jordan Sherer
						Jordan Sherer