Closed #45: A subset of directed commands will be autoreplied when relayed. This includes: SNR, GRID, QTC, QTH, etc
This commit is contained in:
		
							parent
							
								
									f13a6c37e8
								
							
						
					
					
						commit
						ef6bde8cb0
					
				| @ -4258,10 +4258,16 @@ bool MainWindow::hasExistingMessageBuffer(int offset, bool drift, int *pPrevOffs | ||||
| } | ||||
| 
 | ||||
| void MainWindow::logCallActivity(CallDetail d, bool spot){ | ||||
|     // don't log empty calls
 | ||||
|     if(d.call.trimmed().isEmpty()){ | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     // don't log relay calls
 | ||||
|     if(d.call.contains(">")){ | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     if(m_callActivity.contains(d.call)){ | ||||
|         // update (keep grid)
 | ||||
|         CallDetail old = m_callActivity[d.call]; | ||||
| @ -9769,6 +9775,33 @@ void MainWindow::processCommandActivity() { | ||||
| 
 | ||||
|                 reply = QString("%1 ACK").arg(d.relayPath); | ||||
| 
 | ||||
|                 // check to see if the relay text contains a command that should be replied to instead of an ack.
 | ||||
|                 auto relayedCmds = d.text.split(" "); | ||||
|                 if(!relayedCmds.isEmpty()){ | ||||
|                     auto first = relayedCmds.first(); | ||||
| 
 | ||||
|                     auto valid = Varicode::isCommandAllowed(first); | ||||
|                     if(!valid){ | ||||
|                         first = " " + first; | ||||
|                         valid = Varicode::isCommandAllowed(first); | ||||
|                     } | ||||
| 
 | ||||
|                     if(valid && Varicode::isCommandAutoreply(first)){ | ||||
|                         CommandDetail rd = {}; | ||||
|                         rd.bits = d.bits; | ||||
|                         rd.cmd = first; | ||||
|                         rd.freq = d.freq; | ||||
|                         rd.from = d.relayPath; | ||||
|                         rd.text = d.text; | ||||
|                         rd.to = d.to; | ||||
|                         rd.utcTimestamp = d.utcTimestamp; | ||||
| 
 | ||||
|                         m_rxCommandQueue.insert(0, rd); | ||||
|                         continue; | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 // if we make it here, this is a message
 | ||||
|                 addCommandToInbox(d); | ||||
| 
 | ||||
|                 QTimer::singleShot(500, this, [this, d](){ | ||||
|  | ||||
							
								
								
									
										11
									
								
								varicode.cpp
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								varicode.cpp
									
									
									
									
									
								
							| @ -98,12 +98,19 @@ QMap<QString, int> directed_cmds = { | ||||
|     {" ",        31  }, // send freetext
 | ||||
| }; | ||||
| 
 | ||||
| // commands allowed to be processed
 | ||||
| QSet<int> allowed_cmds = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /*10,*/ /*11,*/ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, /*24,*/ 25, 26, 27, 28, 29, 30, 31}; | ||||
| 
 | ||||
| // commands that result in an autoreply
 | ||||
| QSet<int> autoreply_cmds = {0, 1, 2, 3, 4, 6, 12, 13, 30}; | ||||
| 
 | ||||
| // commands that should be buffered
 | ||||
| QSet<int> buffered_cmds = {3, 5, /*6,*/ /*7,*/ 12, 13, 14, 15}; | ||||
| 
 | ||||
| // commands that may include an SNR value
 | ||||
| QSet<int> snr_cmds = {25, 29}; | ||||
| 
 | ||||
| // commands that are checksummed and their crc size
 | ||||
| QMap<int, int> checksum_cmds = { | ||||
|     {  5, 16 }, | ||||
|     { 12, 16 }, | ||||
| @ -1067,6 +1074,10 @@ int Varicode::isCommandChecksumed(const QString &cmd){ | ||||
|     return checksum_cmds[directed_cmds[cmd]]; | ||||
| } | ||||
| 
 | ||||
| bool Varicode::isCommandAutoreply(const QString &cmd){ | ||||
|     return directed_cmds.contains(cmd) && (autoreply_cmds.contains(directed_cmds[cmd])); | ||||
| } | ||||
| 
 | ||||
| bool isValidCompoundCallsign(QStringRef callsign){ | ||||
|     // compound calls cannot be > 9 characters after removing the /
 | ||||
|     if(callsign.toString().replace("/", "").length() > 9){ | ||||
|  | ||||
| @ -137,6 +137,7 @@ public: | ||||
|     static bool isCommandAllowed(const QString &cmd); | ||||
|     static bool isCommandBuffered(const QString &cmd); | ||||
|     static int isCommandChecksumed(const QString &cmd); | ||||
|     static bool isCommandAutoreply(const QString &cmd); | ||||
|     static bool isValidCallsign(const QString &callsign, bool *pIsCompound); | ||||
|     static bool isCompoundCallsign(const QString &callsign); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jordan Sherer
						Jordan Sherer