* fix mic gain control for FT450 and FT450D
    - transceiver only returns 3 levels for mic gain.
This commit is contained in:
David Freese 2020-10-28 09:00:09 -05:00
parent 4fe02df2ba
commit 9d812b3789
2 changed files with 28 additions and 24 deletions

View file

@ -876,41 +876,42 @@ void RIG_FT450::set_xcvr_auto_off()
sendCommand(cmd);
}
// val 0 .. 100
static int mg = 0;
void RIG_FT450::set_mic_gain(int val)
{
cmd = "MG000;";
val = (int)(val * 2.55); // convert to 0 .. 255
for (int i = 3; i > 0; i--) {
cmd[1+i] += val % 10;
val /= 10;
}
if (val == 1) cmd = "MG000;";
else if (val == 2) cmd = "MG128;";
else cmd = "MG255;";
mg = val;
sendCommand(cmd);
showresp(WARN, ASC, "SET mic", cmd, replystr);
sett("set_mic_gain");
}
int RIG_FT450::get_mic_gain()
{
cmd = rsp = "MG";
cmd += ';';
waitN(6, 100, "get mic", ASC);
wait_char(';', 6, 100, "get mic", ASC);
rig_trace(2, "get_mic_gain()", replystr.c_str());
gett("get_mic_gain");
size_t p = replystr.rfind(rsp);
if (p == string::npos) return 0;
if (p == string::npos) return mg;
replystr[p+5] = 0;
return atoi(&replystr[p+2]);;
int val = atoi(&replystr[p+2]);
if (val < 86) return 1;
if (val < 127) return 2;
return 3;
}
void RIG_FT450::get_mic_min_max_step(int &min, int &max, int &step)
{
min = 0;
max = 100;
min = 1;
max = 3;
step = 1;
}
void RIG_FT450::set_special(int v)
}void RIG_FT450::set_special(int v)
{
if (v) cmd = "VR1;";
else cmd = "VR0;";

View file

@ -996,14 +996,14 @@ void RIG_FT450D::set_xcvr_auto_off()
}
// val 0 .. 100
static int mg = 0;
void RIG_FT450D::set_mic_gain(int val)
{
cmd = "MG000;";
val = (int)(val * 2.55); // convert to 0 .. 255
for (int i = 3; i > 0; i--) {
cmd[1+i] += val % 10;
val /= 10;
}
if (val == 1) cmd = "MG000;";
else if (val == 2) cmd = "MG128;";
else cmd = "MG255;";
mg = val;
sendCommand(cmd);
showresp(WARN, ASC, "SET mic", cmd, replystr);
sett("set_mic_gain");
@ -1018,15 +1018,18 @@ int RIG_FT450D::get_mic_gain()
gett("get_mic_gain");
size_t p = replystr.rfind(rsp);
if (p == string::npos) return 0;
if (p == string::npos) return mg;
replystr[p+5] = 0;
return atoi(&replystr[p+2]);;
int val = atoi(&replystr[p+2]);
if (val < 86) return 1;
if (val < 127) return 2;
return 3;
}
void RIG_FT450D::get_mic_min_max_step(int &min, int &max, int &step)
{
min = 0;
max = 100;
min = 1;
max = 3;
step = 1;
}