| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | // -*- Mode: C++ -*-
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Class to handle the formatted string as returned from the fortran decoder | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * VK3ACF August 2013 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef DECODEDTEXT_H
 | 
					
						
							|  |  |  | #define DECODEDTEXT_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QString>
 | 
					
						
							| 
									
										
										
										
											2018-07-13 10:32:58 -04:00
										 |  |  | #include <QStringList>
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  | 012345678901234567890123456789012345678901 | 
					
						
							|  |  |  | ^    ^    ^   ^    ^  ^ | 
					
						
							|  |  |  | 2343 -11  0.8 1259 #  CQ VP2X/GM4WJS GL33 | 
					
						
							|  |  |  | 2343 -11  0.8 1259 #  CQ 999 VP2V/GM4WJS | 
					
						
							|  |  |  | 2343 -11  0.8 1259 #  YV6BFE F6GUU R-08 | 
					
						
							|  |  |  | 2343 -19  0.3  718 #  VE6WQ SQ2NIJ -14 | 
					
						
							|  |  |  | 2343  -7  0.3  815 #  KK4DSD W7VP -16 | 
					
						
							|  |  |  | 2343 -13  0.1 3627 @  CT1FBK IK5YZT R+02 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 0605  Tx      1259 #  CQ VK3ACF QF22 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DecodedText | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |   explicit DecodedText (QString const& message, bool, QString const& my_grid); | 
					
						
							| 
									
										
										
										
											2018-07-26 16:30:19 -04:00
										 |  |  |   explicit DecodedText (QString const& ft8callmessage); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-26 16:30:19 -04:00
										 |  |  |   bool tryUnpack(); | 
					
						
							| 
									
										
										
										
											2018-07-29 10:39:58 -04:00
										 |  |  |   bool tryUnpackBeacon(); | 
					
						
							| 
									
										
										
										
											2018-08-02 01:38:47 -04:00
										 |  |  |   bool tryUnpackCompound(); | 
					
						
							| 
									
										
										
										
											2018-07-19 03:44:02 -04:00
										 |  |  |   bool tryUnpackDirected(); | 
					
						
							|  |  |  |   bool tryUnpackData(); | 
					
						
							| 
									
										
										
										
											2018-07-13 10:32:58 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-03 17:07:36 -04:00
										 |  |  |   quint8 frameType() const { return frameType_; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   QString extra() const { return extra_; } | 
					
						
							| 
									
										
										
										
											2018-07-24 02:53:01 -04:00
										 |  |  |   QString compoundCall() const { return compound_; } | 
					
						
							| 
									
										
										
										
											2018-08-02 01:38:47 -04:00
										 |  |  |   bool isCompound() const { return !compound_.isEmpty(); } | 
					
						
							| 
									
										
										
										
											2018-07-24 02:53:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-30 17:16:45 -04:00
										 |  |  |   bool isBeacon() const { return isBeacon_; } | 
					
						
							|  |  |  |   bool isAlt() const { return isAlt_; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 10:32:58 -04:00
										 |  |  |   QStringList directedMessage() const { return directed_; } | 
					
						
							| 
									
										
										
										
											2018-07-24 02:53:01 -04:00
										 |  |  |   bool isDirectedMessage() const { return !directed_.isEmpty() && directed_.length() > 2; } | 
					
						
							| 
									
										
										
										
											2018-07-13 10:32:58 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   QString string() const { return string_; } | 
					
						
							|  |  |  |   QString message() const { return message_; } | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   QStringList messageWords () const; | 
					
						
							| 
									
										
										
										
											2018-07-13 10:32:58 -04:00
										 |  |  |   int indexOf(QString s) const { return string_.indexOf(s); } | 
					
						
							|  |  |  |   int indexOf(QString s, int i) const { return string_.indexOf(s,i); } | 
					
						
							|  |  |  |   QString mid(int f, int t) const { return string_.mid(f,t); } | 
					
						
							|  |  |  |   QString left(int i) const { return string_.left(i); } | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 10:32:58 -04:00
										 |  |  |   void clear() { string_.clear(); } | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   QString CQersCall() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   bool isJT65() const; | 
					
						
							|  |  |  |   bool isJT9() const; | 
					
						
							|  |  |  |   bool isTX() const; | 
					
						
							|  |  |  |   bool isStandardMessage () const {return is_standard_;} | 
					
						
							|  |  |  |   bool isLowConfidence () const; | 
					
						
							|  |  |  |   int frequencyOffset() const;  // hertz offset from the tuned dial or rx frequency, aka audio frequency
 | 
					
						
							|  |  |  |   int snr() const; | 
					
						
							| 
									
										
										
										
											2018-07-12 16:35:00 -04:00
										 |  |  |   bool hasBits() const { return !string_.right(5).trimmed().isEmpty(); } | 
					
						
							|  |  |  |   int bits() const { return string_.right(5).trimmed().toShort(); } | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   float dt() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // 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; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // get the first message text word, usually the call
 | 
					
						
							|  |  |  |   QString call() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // get the second word, most likely the de call and the third word, most likely grid
 | 
					
						
							|  |  |  |   void deCallAndGrid(/*out*/QString& call, QString& grid) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   unsigned timeInSeconds() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // returns a string of the SNR field with a leading + or - followed by two digits
 | 
					
						
							|  |  |  |   QString report() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |   // These define the columns in the decoded text where fields are to be found.
 | 
					
						
							|  |  |  |   // We rely on these columns being the same in the fortran code (lib/decoder.f90) that formats the decoded text
 | 
					
						
							|  |  |  |   enum Columns {column_time    = 0, | 
					
						
							|  |  |  |       column_snr     = 5, | 
					
						
							|  |  |  |       column_dt      = 9, | 
					
						
							|  |  |  |       column_freq    = 14, | 
					
						
							|  |  |  |       column_mode    = 19, | 
					
						
							|  |  |  |       column_qsoText = 22 }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-03 17:07:36 -04:00
										 |  |  |   quint8 frameType_; | 
					
						
							| 
									
										
										
										
											2018-07-30 17:16:45 -04:00
										 |  |  |   bool isBeacon_; | 
					
						
							|  |  |  |   bool isAlt_; | 
					
						
							| 
									
										
										
										
											2018-07-24 02:53:01 -04:00
										 |  |  |   QString compound_; | 
					
						
							| 
									
										
										
										
											2018-07-30 17:16:45 -04:00
										 |  |  |   QString extra_; | 
					
						
							| 
									
										
										
										
											2018-07-13 10:32:58 -04:00
										 |  |  |   QStringList directed_; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   QString string_; | 
					
						
							|  |  |  |   int padding_; | 
					
						
							|  |  |  |   bool contest_mode_; | 
					
						
							|  |  |  |   QString message_; | 
					
						
							|  |  |  |   bool is_standard_; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // DECODEDTEXT_H
 |