Blob Blame History Raw
Index: flrig-1.3.52/src/rigs/FT450D.cxx
===================================================================
--- flrig-1.3.52.orig/src/rigs/FT450D.cxx
+++ flrig-1.3.52/src/rigs/FT450D.cxx
@@ -370,8 +370,7 @@ int RIG_FT450D::get_smeter()
 {
 	cmd = rsp = "SM0";
 	cmd += ';';
-	wait_char(';',7, FL450D_WAIT_TIME, "get smeter", ASC);
-
+	wait_char(';',7, FL450D_WAIT_TIME, "get smeter", ASC); // sets replystr via rigbase
 	gett("get_smeter");
 
 	size_t p = replystr.rfind(rsp);
@@ -379,12 +378,10 @@ int RIG_FT450D::get_smeter()
 	if (p + 6 >= replystr.length()) return 0;
 	int val = atoi(&replystr[p+3]);
 
-	size_t i = 0;
+    size_t i = 0;
 	if (val < 0) val = 0;
-	if (val > 255) val = 255;
-	for (i = 0; i < sizeof(sm_tbl) / sizeof(mtrpair) - 1; i++)
-		if (val >= sm_tbl[i].val && val < sm_tbl[i+1].val)
-			break;
+	else if (val > 255) val = 255;
+	else while(val > sm_tbl[i].val) i++;
 	int mtr = (int)ceil(sm_tbl[i].mtr + 
 				(sm_tbl[i+1].mtr - sm_tbl[i].mtr) * 
 				(val - sm_tbl[i].val)/(sm_tbl[i+1].val - sm_tbl[i].val));
@@ -1228,7 +1225,7 @@ void RIG_FT450D::set_rf_gain(int val)
 
 int  RIG_FT450D::get_rf_gain()
 {
-	int rfval = 0;
+	//int rfval = 0;
 	cmd = rsp = "RG0";
 	cmd += ';';
 	wait_char(';', 7, FL450D_WAIT_TIME, "get rfgain", ASC);
@@ -1237,13 +1234,22 @@ int  RIG_FT450D::get_rf_gain()
 
 	size_t p = replystr.rfind(rsp);
 	if (p == string::npos) return progStatus.rfgain;
-	for (int i = 3; i < 6; i++) {
-		rfval *= 10;
-		rfval += replystr[p+i] - '0';
-	}
-	rfval = 100 - (int)(rfval / 2.55);
+	//for (int i = 3; i < 6; i++) {
+	//	rfval *= 10;  // Shift out one decimal place so we can add the next character
+	//	rfval += replystr[p+i] - '0'; // Subtract ASCII 0 so we get a number
+	//}
+
+	// Parse the RF value from the position returned by rfind for the response.
+	// Valid values are 0-255.
+	int rfval =
+		(replystr[p+3] - '0') * 100 +
+		(replystr[p+4] - '0') * 10 +
+		(replystr[p+5] - '0');
+
+	// Convert 0-255 to 0-100 for the slider widget.
+	rfval = (int)(rfval / 2.55);
 	if (rfval > 100) rfval = 100;
-	return ceil(rfval);
+	return rfval;
 }
 
 void RIG_FT450D::get_rf_min_max_step(int &min, int &max, int &step)
Index: flrig-1.3.52/src/rigs/FT5000.cxx
===================================================================
--- flrig-1.3.52.orig/src/rigs/FT5000.cxx
+++ flrig-1.3.52/src/rigs/FT5000.cxx
@@ -433,10 +433,8 @@ int RIG_FT5000::get_swr()
 	if (p + 6 >= replystr.length()) return 0;
 	int rcvd = atoi(&replystr[p+3]);
 
-	size_t i;
-	for (i = 0; i < sizeof(swrtbl) / sizeof(*swrtbl) - 1; i++)
-		if (rcvd >= swrtbl[i].mtr && rcvd < swrtbl[i+1].mtr)
-			break;
+	size_t i = 0;
+	while (rcvd > swrtbl[i].mtr) i++;
 
 	double mtr = (swrtbl[i+1].val - swrtbl[i].val ) / (swrtbl[i+1].mtr - swrtbl[i].mtr);
 	mtr *= (rcvd - swrtbl[i].mtr);
@@ -492,9 +490,7 @@ int RIG_FT5000::get_power_out()
 	int mtr = atoi(&replystr[p+3]);
 
 	size_t i = 0;
-	for (i = 0; i < sizeof(pwrtbl) / sizeof(*pwrtbl) - 1; i++)
-		if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr)
-			break;
+	while (mtr > pwrtbl[i].mtr) i++;
 
 	double val = (pwrtbl[i+1].val - pwrtbl[i].val) / (pwrtbl[i+1].mtr - pwrtbl[i].mtr);
 	val *= (mtr - pwrtbl[i].mtr);
Index: flrig-1.3.52/src/rigs/FT991.cxx
===================================================================
--- flrig-1.3.52.orig/src/rigs/FT991.cxx
+++ flrig-1.3.52/src/rigs/FT991.cxx
@@ -390,7 +390,7 @@ int RIG_FT991::get_split()
 // tx vfo
 	cmd = rsp = "FT";
 	cmd.append(";");
-	wait_char(';',4, FL991_WAIT_TIME, "get split tx vfo", ASC);
+	wait_char(';', 4, FL991_WAIT_TIME, "get split tx vfo", ASC);
 	p = replystr.rfind(rsp);
 	if (p == string::npos) return false;
 	tx = replystr[p+2] - '0';
@@ -398,7 +398,7 @@ int RIG_FT991::get_split()
 // rx vfo
 	cmd = rsp = "FR";
 	cmd.append(";");
-	wait_char(';',4, FL991_WAIT_TIME, "get split rx vfo", ASC);
+	wait_char(';', 4, FL991_WAIT_TIME, "get split rx vfo", ASC);
 
 	p = replystr.rfind(rsp);
 	if (p == string::npos) return false;
@@ -555,6 +555,7 @@ void RIG_FT991::tune_rig(int how)
 int  RIG_FT991::get_tune()
 {
 	cmd = "AC;";
+	// Why override FL991_WAIT_TIME to be the same as FL991A_...?
 	wait_char(';',6, 100, "Tuner Enabled?", ASC);
 	size_t p = replystr.rfind("AC");
 	if (p == string::npos) return 0;
@@ -1310,7 +1311,7 @@ void RIG_FT991::set_xcvr_auto_on()
 
 	cmd = rsp = "PS";
 	cmd.append(";");
-	wait_char(';',4, FL991_WAIT_TIME, "Test: Is Rig ON", ASC);
+	wait_char(';', 4, FL991_WAIT_TIME, "Test: Is Rig ON", ASC);
 	size_t p = replystr.rfind(rsp);
 	if (p == string::npos) {	// rig is off, power on
 		cmd = "PS1;";
Index: flrig-1.3.52/src/rigs/FT991A.cxx
===================================================================
--- flrig-1.3.52.orig/src/rigs/FT991A.cxx
+++ flrig-1.3.52/src/rigs/FT991A.cxx
@@ -23,7 +23,7 @@
 #include "debug.h"
 #include "support.h"
 
-#define FL991A_WAIT_TIME 100
+#define FL991A_WAIT_TIME 200
 
 enum mFT991 {
   mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U, mAM_N, mC4FM };
@@ -399,28 +399,29 @@ int RIG_FT991A::get_split()
 	int split = 0;
 	char rx, tx;
 // tx vfo
-	cmd = rsp = "FT";
+	cmd = rsp = "RI6";
 	cmd.append(";");
-	wait_char(';',4, FL991A_WAIT_TIME, "get split tx vfo", ASC);
+	wait_char(';', 5, FL991A_WAIT_TIME, "get split tx vfo", ASC);
 	gett("get split tx");
 
 	p = replystr.rfind(rsp);
 	if (p == string::npos) return false;
-	tx = replystr[p+2] - '0';
+	tx = replystr[p+3] - '0';
 
 // rx vfo
-	cmd = rsp = "FR";
+	cmd = rsp = "RI7";
 	cmd.append(";");
-	wait_char(';',4, FL991A_WAIT_TIME, "get split rx vfo", ASC);
+	wait_char(';', 5, FL991A_WAIT_TIME, "get split rx vfo", ASC);
 	gett("get split rx");
 
 	p = replystr.rfind(rsp);
 	if (p == string::npos) return false;
-	rx = replystr[p+2] - '0';
+	rx = replystr[p+3] - '0';
 
 	split = (tx == 1 ? 2 : 0) + (rx >= 4 ? 1 : 0);
 
-	return split;
+    if (tx == rx) return true;
+    return split;
 }
 
 
@@ -547,6 +548,7 @@ void RIG_FT991A::set_PTT_control(int val
 {
 	cmd = val ? "TX1;" : "TX0;";
 	sendCommand(cmd);
+	MilliSleep(50);
 	showresp(WARN, ASC, "SET PTT", cmd, replystr);
 	ptt_ = val;
 	sett("set_ptt_control");
@@ -1108,7 +1110,6 @@ int RIG_FT991A::get_noise()
 void RIG_FT991A::set_mic_gain(int val)
 {
 	cmd = "MG000;";
-	val = (int)(val * 2.50);
 	for (int i = 3; i > 0; i--) {
 		cmd[1+i] += val % 10;
 		val /= 10;
@@ -1128,9 +1129,8 @@ int RIG_FT991A::get_mic_gain()
 	size_t p = replystr.rfind(rsp);
 	if (p == string::npos) return progStatus.mic_gain;
 	int val = atoi(&replystr[p+2]);
-	val = (int)(val / 2.50);
 	if (val > 100) val = 100;
-	return ceil(val);
+	return val;
 }
 
 void RIG_FT991A::get_mic_min_max_step(int &min, int &max, int &step)
Index: flrig-1.3.52/src/rigs/TS480SAT.cxx
===================================================================
--- flrig-1.3.52.orig/src/rigs/TS480SAT.cxx
+++ flrig-1.3.52/src/rigs/TS480SAT.cxx
@@ -297,13 +297,11 @@ int RIG_TS480SAT::get_power_out()
 	size_t p = replystr.rfind("SM");
 	if (p != string::npos) {
 		mtr = atoi(&replystr[p + 3]);
-
-		size_t i = 0;
-		for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++)
-			if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr)
-				break;
+		size_t i = 0; // outside of the if/else for scope reasons
 		if (mtr < 0) mtr = 0;
-		if (mtr > 20) mtr = 20;
+		else if (mtr > 20) mtr = 20;
+		else while(mtr > pwrtbl[i].mtr) i++;
+
 		mtr = (int)ceil(pwrtbl[i].pwr + 
 			(pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr)/(pwrtbl[i+1].mtr - pwrtbl[i].mtr));
 		if (mtr > 200) mtr = 200;
@@ -327,7 +325,7 @@ int RIG_TS480SAT::get_swr()
 
 	size_t p = replystr.rfind("RM1");
 	if (p != string::npos)
-		mtr = 66 * atoi(&replystr[p + 3]) / 10;
+		mtr = 66 * atoi(&replystr[p+3]) / 10;
 	p = replystr.rfind("RM3");
 	if (p != string::npos)
 		alc = 66 * atoi(&replystr[p+3]) / 10;
Index: flrig-1.3.52/src/server/xml_server.cxx
===================================================================
--- flrig-1.3.52.orig/src/server/xml_server.cxx
+++ flrig-1.3.52/src/server/xml_server.cxx
@@ -817,14 +817,14 @@ public :
 
 	void execute(XmlRpcValue& params, XmlRpcValue& result) {
 
+		XmlRpcValue bws;
+
 		if (!xcvr_initialized || !selrig->bandwidths_) {
-			XmlRpcValue bws;
 			bws[0][0] = "Bandwidth";
 			bws[0][1] = "NONE";
 			result = bws;
 			return;
 		}
-		XmlRpcValue bws;
 
 		wait();
 		guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_bws");
@@ -843,30 +843,29 @@ public :
 				bwt++;
 				i++;
 			}
+			result = bws;
 		}
 // double table either lo/hi or center/width
 		if (selrig->has_dsp_controls && dsplo && dsphi) {
-			int i = 0;
-			int n = 1;
 			std::string control_label = selrig->SL_label;
 			control_label.append("|").append(selrig->SL_tooltip);
 			bws[0][0] = control_label.c_str();
+			int i = 0; int n = 1;
 			while (dsplo[i]) {
 				bws[0][n] = dsplo[i];
 				n++; i++;
 			}
-			i = 0;
 			control_label.assign(selrig->SH_label);
 			control_label.append("|").append(selrig->SH_tooltip);
 			bws[1][0] = control_label.c_str();
-			n = 1;
+			i = 0; n = 1;
 			while (dsphi[i]) {
 				bws[1][n] = dsphi[i];
 				n++; i++;
 			}
+			result = bws;
 		}
 
-		result = bws;
 	}
 
 	std::string help() { return std::string("returns array of bandwidths"); }