mirror of
https://git.code.sf.net/p/fldigi/flrig
synced 2026-08-13 17:28:24 -04:00
Icom Manual Notch
* Adjust notch conversions by bandwidth and mode
* Following Icom transceivers have notch on/off/set
. IC7000
. IC7100
. IC7200
. IC7300
. IC746
. IC746PRO
. IC756
. IC756PRO2
. IC756PRO3
. IC7600
. IC7610
. IC7700
. IC7800
. IC7851
. IC9100
. IC9700
This commit is contained in:
parent
cd7e3294b3
commit
205e0e08fe
10 changed files with 509 additions and 71 deletions
|
|
@ -96,6 +96,10 @@ public:
|
|||
void set_band_selection(int v);
|
||||
void get_band_selection(int v);
|
||||
|
||||
bool get_notch(int &val);
|
||||
void set_notch(bool on, int val);
|
||||
void get_notch_min_max_step(int &min, int &max, int &step);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -106,6 +106,10 @@ public:
|
|||
void set_band_selection(int v);
|
||||
void get_band_selection(int v);
|
||||
|
||||
bool get_notch(int &val);
|
||||
void set_notch(bool on, int val);
|
||||
void get_notch_min_max_step(int &min, int &max, int &step);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -115,6 +115,10 @@ public:
|
|||
void set_band_selection(int v);
|
||||
void get_band_selection(int v);
|
||||
|
||||
bool get_notch(int &val);
|
||||
void set_notch(bool on, int val);
|
||||
void get_notch_min_max_step(int &min, int &max, int &step);
|
||||
|
||||
void set_xcvr_auto_on();
|
||||
void set_xcvr_auto_off();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1286,27 +1286,42 @@ int RIG_IC7100::get_alc()
|
|||
return mtr;
|
||||
}
|
||||
|
||||
void RIG_IC7100::set_notch(bool on, int val)
|
||||
void RIG_IC7100::set_notch(bool on, int freq)
|
||||
{
|
||||
int freq = val - 1500;
|
||||
if (vfo->imode == LSB7100 || vfo->imode == CW7100 ||
|
||||
vfo->imode == RTTY7100 || vfo->imode == LSBD7100 )
|
||||
freq = 1500 - val;
|
||||
if (freq < -1500) freq = 1500;
|
||||
if (freq > 1500) freq = 1500;
|
||||
int notch = (int)(freq * 60.0 / 1200.0) + 128;
|
||||
int hexval;
|
||||
switch (vfo->imode) {
|
||||
default: case USB7100: case USBD7100: case RTTYR7100:
|
||||
hexval = freq - 1500;
|
||||
break;
|
||||
case LSB7100: case LSBD7100: case RTTY7100:
|
||||
hexval = 1500 - freq;
|
||||
break;
|
||||
case CW7100:
|
||||
hexval = progStatus.cw_spot_tone - freq;
|
||||
break;
|
||||
case CWR7100:
|
||||
hexval = freq - progStatus.cw_spot_tone;
|
||||
break;
|
||||
}
|
||||
|
||||
hexval /= 20;
|
||||
hexval += 128;
|
||||
if (hexval < 0) hexval = 0;
|
||||
if (hexval > 255) hexval = 255;
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x16\x48");
|
||||
cmd += on ? '\x01' : '\x00';
|
||||
cmd.append(post);
|
||||
waitFB("set notch");
|
||||
set_trace(2, "set_notch() ", str2hex(cmd.c_str(), cmd.length()));
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x14\x0D");
|
||||
cmd.append(to_bcd(notch,3));
|
||||
cmd.append(to_bcd(hexval,3));
|
||||
cmd.append(post);
|
||||
waitFB("set notch val");
|
||||
set_trace(2, "set_notch_val() ", str2hex(cmd.c_str(), cmd.length()));
|
||||
}
|
||||
|
||||
bool RIG_IC7100::get_notch(int &val)
|
||||
|
|
@ -1321,6 +1336,7 @@ bool RIG_IC7100::get_notch(int &val)
|
|||
cmd.append(cstr);
|
||||
cmd.append( post );
|
||||
if (waitFOR(8, "get notch")) {
|
||||
get_trace(2, "get_notch()", str2hex(replystr.c_str(), replystr.length()));
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos)
|
||||
on = replystr[p + 6];
|
||||
|
|
@ -1331,14 +1347,28 @@ bool RIG_IC7100::get_notch(int &val)
|
|||
resp.append(cstr);
|
||||
cmd.append(post);
|
||||
if (waitFOR(9, "notch val")) {
|
||||
get_trace(2, "get_notch_val() ", str2hex(replystr.c_str(), replystr.length()));
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos) {
|
||||
val = (int)ceil(fm_bcd(replystr.substr(p+6),3)) - 128;
|
||||
if (vfo->imode == LSB7100 || vfo->imode == CW7100 ||
|
||||
vfo->imode == RTTY7100 || vfo->imode == LSBD7100 )
|
||||
val = -val;
|
||||
val = val * 1200 / 60 + 1500;
|
||||
val = (int)ceil(fm_bcd(replystr.substr(p+6),3));
|
||||
val -= 128;
|
||||
val *= 20;
|
||||
switch (vfo->imode) {
|
||||
default: case USB7100: case USBD7100: case RTTYR7100:
|
||||
val = 1500 + val;
|
||||
break;
|
||||
case LSB: case LSBD7100: case RTTY7100:
|
||||
val = 1500 - val;
|
||||
break;
|
||||
case CW7100:
|
||||
val = progStatus.cw_spot_tone - val;
|
||||
break;
|
||||
case CWR7100:
|
||||
val = progStatus.cw_spot_tone + val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
get_trace(2, "get_notch_val() ", str2hex(replystr.c_str(), replystr.length()));
|
||||
}
|
||||
}
|
||||
return on;
|
||||
|
|
@ -1346,9 +1376,17 @@ bool RIG_IC7100::get_notch(int &val)
|
|||
|
||||
void RIG_IC7100::get_notch_min_max_step(int &min, int &max, int &step)
|
||||
{
|
||||
min = 0;
|
||||
max = 3000;
|
||||
step = 20;
|
||||
switch (vfo->imode) {
|
||||
default:
|
||||
case USB7100: case USBD7100: case RTTYR7100:
|
||||
case LSB7100: case LSBD7100: case RTTY7100:
|
||||
min = 0; max = 3000; step = 20; break;
|
||||
case CW7100: case CWR7100:
|
||||
min = progStatus.cw_spot_tone - 500;
|
||||
max = progStatus.cw_spot_tone + 500;
|
||||
step = 20;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void RIG_IC7100::set_auto_notch(int val)
|
||||
|
|
|
|||
|
|
@ -34,6 +34,12 @@ const char IC7200name_[] = "IC-7200";
|
|||
#define NUM_FILTERS 3
|
||||
#define NUM_MODES 9
|
||||
|
||||
enum {
|
||||
LSB7200, USB7200, AM7200,
|
||||
CW7200, RTTY7200,
|
||||
CWR7200, RTTYR7200,
|
||||
LSBD7200, USBD7200 };
|
||||
|
||||
static int mode_filterA[NUM_MODES] = {1,1,1,1,1,1,1,1,1};
|
||||
static int mode_filterB[NUM_MODES] = {1,1,1,1,1,1,1,1,1};
|
||||
|
||||
|
|
@ -1362,30 +1368,46 @@ void RIG_IC7200::set_vox_onoff()
|
|||
|
||||
static bool IC7200_notchon = false;
|
||||
|
||||
void RIG_IC7200::set_notch(bool on, int val)
|
||||
void RIG_IC7200::set_notch(bool on, int freq)
|
||||
{
|
||||
int notch = val / 20 + 53;
|
||||
if (notch > 255) notch = 255;
|
||||
if (on != IC7200_notchon) {
|
||||
cmd = pre_to;
|
||||
cmd.append("\x16\x48");
|
||||
cmd += on ? '\x01' : '\x00';
|
||||
cmd.append(post);
|
||||
waitFB("set notch");
|
||||
IC7200_notchon = on;
|
||||
set_trace(2, "set_notch_on_off()", str2hex(cmd.c_str(), cmd.length()));
|
||||
int hexval;
|
||||
switch (vfo->imode) {
|
||||
default: case USB7200: case USBD7200: case RTTYR7200:
|
||||
hexval = freq - 1500;
|
||||
break;
|
||||
case LSB7200: case LSBD7200: case RTTY7200:
|
||||
hexval = 1500 - freq;
|
||||
break;
|
||||
case CW7200:
|
||||
hexval = progStatus.cw_spot_tone - freq;
|
||||
break;
|
||||
case CWR7200:
|
||||
hexval = freq - progStatus.cw_spot_tone;
|
||||
break;
|
||||
}
|
||||
|
||||
hexval /= 20;
|
||||
hexval += 128;
|
||||
if (hexval < 0) hexval = 0;
|
||||
if (hexval > 255) hexval = 255;
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x16\x48");
|
||||
cmd += on ? '\x01' : '\x00';
|
||||
cmd.append(post);
|
||||
waitFB("set notch");
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x14\x0D");
|
||||
cmd.append(to_bcd(notch,3));
|
||||
cmd.append(to_bcd(hexval,3));
|
||||
cmd.append(post);
|
||||
waitFB("set notch val");
|
||||
set_trace(2, "set_notch_val()", str2hex(cmd.c_str(), cmd.length()));
|
||||
}
|
||||
|
||||
bool RIG_IC7200::get_notch(int &val)
|
||||
{
|
||||
bool on = false;
|
||||
val = 1500;
|
||||
|
||||
string cstr = "\x16\x48";
|
||||
string resp = pre_fm;
|
||||
|
|
@ -1394,24 +1416,35 @@ bool RIG_IC7200::get_notch(int &val)
|
|||
cmd.append(cstr);
|
||||
cmd.append( post );
|
||||
if (waitFOR(8, "get notch")) {
|
||||
get_trace(2, "get_notch_on_off()", str2hex(replystr.c_str(), replystr.length()));
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos)
|
||||
on = replystr[p + 6] ? 1 : 0;
|
||||
on = replystr[p + 6];
|
||||
cmd = pre_to;
|
||||
resp = pre_fm;
|
||||
cstr = "\x14\x0D";
|
||||
cmd.append(cstr);
|
||||
resp.append(cstr);
|
||||
cmd.append(post);
|
||||
if (waitFOR(9, "get notch val")) {
|
||||
get_trace(2, "get_notch_val()", str2hex(replystr.c_str(), replystr.length()));
|
||||
if (waitFOR(9, "notch val")) {
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos) {
|
||||
val = fm_bcd(replystr.substr(p+6),3);
|
||||
val = (val - 53) * 20;
|
||||
if (val < 0) val = 0;
|
||||
if (val > 4040) val = 4040;
|
||||
val = (int)ceil(fm_bcd(replystr.substr(p+6),3));
|
||||
val -= 128;
|
||||
val *= 20;
|
||||
switch (vfo->imode) {
|
||||
default: case USB7200: case USBD7200: case RTTYR7200:
|
||||
val = 1500 + val;
|
||||
break;
|
||||
case LSB: case LSBD7200: case RTTY7200:
|
||||
val = 1500 - val;
|
||||
break;
|
||||
case CW7200:
|
||||
val = progStatus.cw_spot_tone - val;
|
||||
break;
|
||||
case CWR7200:
|
||||
val = progStatus.cw_spot_tone + val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1420,9 +1453,17 @@ bool RIG_IC7200::get_notch(int &val)
|
|||
|
||||
void RIG_IC7200::get_notch_min_max_step(int &min, int &max, int &step)
|
||||
{
|
||||
min = 0;
|
||||
max = 4040;
|
||||
step = 20;
|
||||
switch (vfo->imode) {
|
||||
default:
|
||||
case USB7200: case USBD7200: case RTTYR7200:
|
||||
case LSB7200: case LSBD7200: case RTTY7200:
|
||||
min = 0; max = 3000; step = 20; break;
|
||||
case CW7200: case CWR7200:
|
||||
min = progStatus.cw_spot_tone - 500;
|
||||
max = progStatus.cw_spot_tone + 500;
|
||||
step = 20;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static int agcval = 0;
|
||||
|
|
|
|||
|
|
@ -51,8 +51,8 @@ static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
|
|||
static const char *szfilter[NUM_FILTERS] = {"1", "2", "3"};
|
||||
|
||||
enum {
|
||||
m73LSB, m73USB, m73AM, m73FM, m73CW, m73CWR, m73RTTY, m73RTTYR,
|
||||
m73LSBD, m73USBD, m73AMD, m73FMD
|
||||
LSB7300, USB7300, AM7300, FM7300, CW7300, CWR7300, RTTY7300, RTTYR7300,
|
||||
LSBD7300, USBD7300, AMD7300, FMD7300
|
||||
};
|
||||
|
||||
const char *IC7300modes_[] = {
|
||||
|
|
@ -455,7 +455,7 @@ int RIG_IC7300::get_modeA()
|
|||
if (p == string::npos)
|
||||
goto end_wait_modeA;
|
||||
|
||||
for (md = 0; md < m73LSBD; md++) {
|
||||
for (md = 0; md < LSBD7300; md++) {
|
||||
if (replystr[p+6] == IC7300_mode_nbr[md]) {
|
||||
A.imode = md;
|
||||
if (replystr[p+7] == 0x01 && A.imode < 4)
|
||||
|
|
@ -490,7 +490,7 @@ void RIG_IC7300::set_modeA(int val)
|
|||
else
|
||||
cmd += '\x00'; // selected vfo
|
||||
cmd += IC7300_mode_nbr[A.imode]; // operating mode
|
||||
if (A.imode >= m73LSBD)
|
||||
if (A.imode >= LSBD7300)
|
||||
cmd += '\x01'; // data mode
|
||||
else
|
||||
cmd += '\x00';
|
||||
|
|
@ -521,7 +521,7 @@ int RIG_IC7300::get_modeB()
|
|||
if (p == string::npos)
|
||||
goto end_wait_modeB;
|
||||
|
||||
for (md = 0; md < m73LSBD; md++) {
|
||||
for (md = 0; md < LSBD7300; md++) {
|
||||
if (replystr[p+6] == IC7300_mode_nbr[md]) {
|
||||
B.imode = md;
|
||||
if (replystr[p+7] == 0x01 && B.imode < 4)
|
||||
|
|
@ -554,7 +554,7 @@ void RIG_IC7300::set_modeB(int val)
|
|||
else
|
||||
cmd += '\x01'; // unselected vfo
|
||||
cmd += IC7300_mode_nbr[B.imode]; // operating mode
|
||||
if (B.imode >= m73LSBD)
|
||||
if (B.imode >= LSBD7300)
|
||||
cmd += '\x01'; // data mode
|
||||
else
|
||||
cmd += '\x00';
|
||||
|
|
@ -583,7 +583,7 @@ void RIG_IC7300::set_FILT(int filter)
|
|||
cmd += '\x26';
|
||||
cmd += '\x00'; // selected vfo
|
||||
cmd += IC7300_mode_nbr[B.imode]; // operating mode
|
||||
if (B.imode >= m73LSBD) cmd += '\x01'; // data mode
|
||||
if (B.imode >= LSBD7300) cmd += '\x01'; // data mode
|
||||
else cmd += '\x00';
|
||||
cmd += filter; // filter
|
||||
cmd.append( post );
|
||||
|
|
@ -597,7 +597,7 @@ void RIG_IC7300::set_FILT(int filter)
|
|||
cmd += '\x26';
|
||||
cmd += '\x00'; // selected vfo
|
||||
cmd += IC7300_mode_nbr[A.imode]; // operating mode
|
||||
if (A.imode >= m73LSBD) cmd += '\x01'; // data mode
|
||||
if (A.imode >= LSBD7300) cmd += '\x01'; // data mode
|
||||
else cmd += '\x00';
|
||||
cmd += filter; // filter
|
||||
cmd.append( post );
|
||||
|
|
@ -1662,28 +1662,48 @@ int RIG_IC7300::get_auto_notch()
|
|||
|
||||
static bool IC7300_notchon = false;
|
||||
|
||||
void RIG_IC7300::set_notch(bool on, int val)
|
||||
void RIG_IC7300::set_notch(bool on, int freq)
|
||||
{
|
||||
int notch = val / 20 + 53;
|
||||
minmax(0, 255, notch);
|
||||
if (on != IC7300_notchon) {
|
||||
cmd = pre_to;
|
||||
cmd.append("\x16\x48");
|
||||
cmd += on ? '\x01' : '\x00';
|
||||
cmd.append(post);
|
||||
waitFB("set notch");
|
||||
IC7300_notchon = on;
|
||||
int hexval;
|
||||
switch (vfo->imode) {
|
||||
default: case USB7300: case USBD7300: case RTTYR7300:
|
||||
hexval = freq - 1500;
|
||||
break;
|
||||
case LSB7300: case LSBD7300: case RTTY7300:
|
||||
hexval = 1500 - freq;
|
||||
break;
|
||||
case CW7300:
|
||||
hexval = progStatus.cw_spot_tone - freq;
|
||||
break;
|
||||
case CWR7300:
|
||||
hexval = freq - progStatus.cw_spot_tone;
|
||||
break;
|
||||
}
|
||||
|
||||
hexval /= 20;
|
||||
hexval += 128;
|
||||
if (hexval < 0) hexval = 0;
|
||||
if (hexval > 255) hexval = 255;
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x16\x48");
|
||||
cmd += on ? '\x01' : '\x00';
|
||||
cmd.append(post);
|
||||
waitFB("set notch");
|
||||
set_trace(2, "set_notch() ", str2hex(cmd.c_str(), cmd.length()));
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x14\x0D");
|
||||
cmd.append(to_bcd(notch,3));
|
||||
cmd.append(to_bcd(hexval,3));
|
||||
cmd.append(post);
|
||||
waitFB("set notch val");
|
||||
set_trace(2, "set_notch_val() ", str2hex(cmd.c_str(), cmd.length()));
|
||||
}
|
||||
|
||||
bool RIG_IC7300::get_notch(int &val)
|
||||
{
|
||||
bool on = false;
|
||||
val = 1500;
|
||||
|
||||
string cstr = "\x16\x48";
|
||||
string resp = pre_fm;
|
||||
|
|
@ -1692,35 +1712,57 @@ bool RIG_IC7300::get_notch(int &val)
|
|||
cmd.append(cstr);
|
||||
cmd.append( post );
|
||||
if (waitFOR(8, "get notch")) {
|
||||
get_trace(2, "get_notch()", str2hex(replystr.c_str(), replystr.length()));
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos)
|
||||
on = replystr[p + 6] ? 1 : 0;
|
||||
on = replystr[p + 6];
|
||||
cmd = pre_to;
|
||||
resp = pre_fm;
|
||||
cstr = "\x14\x0D";
|
||||
cmd.append(cstr);
|
||||
resp.append(cstr);
|
||||
cmd.append(post);
|
||||
if (waitFOR(9, "get notch val")) {
|
||||
if (waitFOR(9, "notch val")) {
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos) {
|
||||
val = fm_bcd(replystr.substr(p+6),3);
|
||||
val = (val - 53) * 20;
|
||||
if (val < 0) val = 0;
|
||||
if (val > 4040) val = 4040;
|
||||
val = (int)ceil(fm_bcd(replystr.substr(p+6),3));
|
||||
val -= 128;
|
||||
val *= 20;
|
||||
switch (vfo->imode) {
|
||||
default: case USB7300: case USBD7300: case RTTYR7300:
|
||||
val = 1500 + val;
|
||||
break;
|
||||
case LSB: case LSBD7300: case RTTY7300:
|
||||
val = 1500 - val;
|
||||
break;
|
||||
case CW7300:
|
||||
val = progStatus.cw_spot_tone - val;
|
||||
break;
|
||||
case CWR7300:
|
||||
val = progStatus.cw_spot_tone + val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
get_trace(2, "get_notch_val() ", str2hex(replystr.c_str(), replystr.length()));
|
||||
}
|
||||
}
|
||||
return (IC7300_notchon = on);
|
||||
return on;
|
||||
}
|
||||
|
||||
void RIG_IC7300::get_notch_min_max_step(int &min, int &max, int &step)
|
||||
{
|
||||
min = 0;
|
||||
max = 4040;
|
||||
step = 20;
|
||||
switch (vfo->imode) {
|
||||
default:
|
||||
case USB7300: case USBD7300: case RTTYR7300:
|
||||
case LSB7300: case LSBD7300: case RTTY7300:
|
||||
min = 0; max = 3000; step = 20; break;
|
||||
case CW7300: case CWR7300:
|
||||
min = progStatus.cw_spot_tone - 500;
|
||||
max = progStatus.cw_spot_tone + 500;
|
||||
step = 20;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static int agcval = 3;
|
||||
int RIG_IC7300::get_agc()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -842,3 +842,101 @@ void RIG_IC7700::set_band_selection(int v)
|
|||
igett("get band stack");
|
||||
}
|
||||
|
||||
void RIG_IC7700::set_notch(bool on, int freq)
|
||||
{
|
||||
int hexval;
|
||||
switch (vfo->imode) {
|
||||
default: case USB7700: case USBD7700: case RTTYR7700:
|
||||
hexval = freq - 1500;
|
||||
break;
|
||||
case LSB7700: case LSBD7700: case RTTY7700:
|
||||
hexval = 1500 - freq;
|
||||
break;
|
||||
case CW7700:
|
||||
hexval = progStatus.cw_spot_tone - freq;
|
||||
break;
|
||||
case CWR7700:
|
||||
hexval = freq - progStatus.cw_spot_tone;
|
||||
break;
|
||||
}
|
||||
|
||||
hexval /= 20;
|
||||
hexval += 128;
|
||||
if (hexval < 0) hexval = 0;
|
||||
if (hexval > 255) hexval = 255;
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x16\x48");
|
||||
cmd += on ? '\x01' : '\x00';
|
||||
cmd.append(post);
|
||||
waitFB("set notch");
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x14\x0D");
|
||||
cmd.append(to_bcd(hexval,3));
|
||||
cmd.append(post);
|
||||
waitFB("set notch val");
|
||||
}
|
||||
|
||||
bool RIG_IC7700::get_notch(int &val)
|
||||
{
|
||||
bool on = false;
|
||||
val = 1500;
|
||||
|
||||
string cstr = "\x16\x48";
|
||||
string resp = pre_fm;
|
||||
resp.append(cstr);
|
||||
cmd = pre_to;
|
||||
cmd.append(cstr);
|
||||
cmd.append( post );
|
||||
if (waitFOR(8, "get notch")) {
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos)
|
||||
on = replystr[p + 6];
|
||||
cmd = pre_to;
|
||||
resp = pre_fm;
|
||||
cstr = "\x14\x0D";
|
||||
cmd.append(cstr);
|
||||
resp.append(cstr);
|
||||
cmd.append(post);
|
||||
if (waitFOR(9, "notch val")) {
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos) {
|
||||
val = (int)ceil(fm_bcd(replystr.substr(p+6),3));
|
||||
val -= 128;
|
||||
val *= 20;
|
||||
switch (vfo->imode) {
|
||||
default: case USB7700: case USBD7700: case RTTYR7700:
|
||||
val = 1500 + val;
|
||||
break;
|
||||
case LSB: case LSBD7700: case RTTY7700:
|
||||
val = 1500 - val;
|
||||
break;
|
||||
case CW7700:
|
||||
val = progStatus.cw_spot_tone - val;
|
||||
break;
|
||||
case CWR7700:
|
||||
val = progStatus.cw_spot_tone + val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return on;
|
||||
}
|
||||
|
||||
void RIG_IC7700::get_notch_min_max_step(int &min, int &max, int &step)
|
||||
{
|
||||
switch (vfo->imode) {
|
||||
default:
|
||||
case USB7700: case USBD7700: case RTTYR7700:
|
||||
case LSB7700: case LSBD7700: case RTTY7700:
|
||||
min = 0; max = 3000; step = 20; break;
|
||||
case CW7700: case CWR7700:
|
||||
min = progStatus.cw_spot_tone - 500;
|
||||
max = progStatus.cw_spot_tone + 500;
|
||||
step = 20;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -869,3 +869,101 @@ void RIG_IC7800::set_band_selection(int v)
|
|||
waitFOR(23, "get band stack");
|
||||
}
|
||||
|
||||
void RIG_IC7800::set_notch(bool on, int freq)
|
||||
{
|
||||
int hexval;
|
||||
switch (vfo->imode) {
|
||||
default: case USB7800: case USBD7800: case RTTYR7800:
|
||||
hexval = freq - 1500;
|
||||
break;
|
||||
case LSB7800: case LSBD7800: case RTTY7800:
|
||||
hexval = 1500 - freq;
|
||||
break;
|
||||
case CW7800:
|
||||
hexval = progStatus.cw_spot_tone - freq;
|
||||
break;
|
||||
case CWR7800:
|
||||
hexval = freq - progStatus.cw_spot_tone;
|
||||
break;
|
||||
}
|
||||
|
||||
hexval /= 20;
|
||||
hexval += 128;
|
||||
if (hexval < 0) hexval = 0;
|
||||
if (hexval > 255) hexval = 255;
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x16\x48");
|
||||
cmd += on ? '\x01' : '\x00';
|
||||
cmd.append(post);
|
||||
waitFB("set notch");
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x14\x0D");
|
||||
cmd.append(to_bcd(hexval,3));
|
||||
cmd.append(post);
|
||||
waitFB("set notch val");
|
||||
}
|
||||
|
||||
bool RIG_IC7800::get_notch(int &val)
|
||||
{
|
||||
bool on = false;
|
||||
val = 1500;
|
||||
|
||||
string cstr = "\x16\x48";
|
||||
string resp = pre_fm;
|
||||
resp.append(cstr);
|
||||
cmd = pre_to;
|
||||
cmd.append(cstr);
|
||||
cmd.append( post );
|
||||
if (waitFOR(8, "get notch")) {
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos)
|
||||
on = replystr[p + 6];
|
||||
cmd = pre_to;
|
||||
resp = pre_fm;
|
||||
cstr = "\x14\x0D";
|
||||
cmd.append(cstr);
|
||||
resp.append(cstr);
|
||||
cmd.append(post);
|
||||
if (waitFOR(9, "notch val")) {
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos) {
|
||||
val = (int)ceil(fm_bcd(replystr.substr(p+6),3));
|
||||
val -= 128;
|
||||
val *= 20;
|
||||
switch (vfo->imode) {
|
||||
default: case USB7800: case USBD7800: case RTTYR7800:
|
||||
val = 1500 + val;
|
||||
break;
|
||||
case LSB: case LSBD7800: case RTTY7800:
|
||||
val = 1500 - val;
|
||||
break;
|
||||
case CW7800:
|
||||
val = progStatus.cw_spot_tone - val;
|
||||
break;
|
||||
case CWR7800:
|
||||
val = progStatus.cw_spot_tone + val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return on;
|
||||
}
|
||||
|
||||
void RIG_IC7800::get_notch_min_max_step(int &min, int &max, int &step)
|
||||
{
|
||||
switch (vfo->imode) {
|
||||
default:
|
||||
case USB7800: case USBD7800: case RTTYR7800:
|
||||
case LSB7800: case LSBD7800: case RTTY7800:
|
||||
min = 0; max = 3000; step = 20; break;
|
||||
case CW7800: case CWR7800:
|
||||
min = progStatus.cw_spot_tone - 500;
|
||||
max = progStatus.cw_spot_tone + 500;
|
||||
step = 20;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,12 @@ bool IC7851_DEBUG = true;
|
|||
|
||||
const char IC7851name_[] = "IC-7851";
|
||||
|
||||
enum {
|
||||
LSB7851, USB7851, AM7851, CW7851, RTTY7851,
|
||||
FM7851, CWR7851, RTTYR7851, PSK7851, PSKR7851,
|
||||
LSBD17851, LSBD27851, LSBD37851,
|
||||
USBD17851, USBD27851, USBD37851 };
|
||||
|
||||
const char *IC7851modes_[] = {
|
||||
"LSB", "USB", "AM", "CW", "RTTY",
|
||||
"FM", "CW-R", "RTTY-R", "PSK", "PSK-R",
|
||||
|
|
@ -1093,3 +1099,104 @@ void RIG_IC7851::set_band_selection(int v)
|
|||
|
||||
waitFOR(23, "get band stack");
|
||||
}
|
||||
|
||||
void RIG_IC7851::set_notch(bool on, int freq)
|
||||
{
|
||||
int hexval;
|
||||
switch (vfo->imode) {
|
||||
default:
|
||||
case USB7851: case USBD17851: case USBD27851: case USBD37851: case RTTYR7851:
|
||||
hexval = freq - 1500;
|
||||
break;
|
||||
case LSB7851: case LSBD17851: case LSBD27851: case LSBD37851: case RTTY7851:
|
||||
hexval = 1500 - freq;
|
||||
break;
|
||||
case CW7851:
|
||||
hexval = progStatus.cw_spot_tone - freq;
|
||||
break;
|
||||
case CWR7851:
|
||||
hexval = freq - progStatus.cw_spot_tone;
|
||||
break;
|
||||
}
|
||||
|
||||
hexval /= 20;
|
||||
hexval += 128;
|
||||
if (hexval < 0) hexval = 0;
|
||||
if (hexval > 255) hexval = 255;
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x16\x48");
|
||||
cmd += on ? '\x01' : '\x00';
|
||||
cmd.append(post);
|
||||
waitFB("set notch");
|
||||
|
||||
cmd = pre_to;
|
||||
cmd.append("\x14\x0D");
|
||||
cmd.append(to_bcd(hexval,3));
|
||||
cmd.append(post);
|
||||
waitFB("set notch val");
|
||||
}
|
||||
|
||||
bool RIG_IC7851::get_notch(int &val)
|
||||
{
|
||||
bool on = false;
|
||||
val = 1500;
|
||||
|
||||
string cstr = "\x16\x48";
|
||||
string resp = pre_fm;
|
||||
resp.append(cstr);
|
||||
cmd = pre_to;
|
||||
cmd.append(cstr);
|
||||
cmd.append( post );
|
||||
if (waitFOR(8, "get notch")) {
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos)
|
||||
on = replystr[p + 6];
|
||||
cmd = pre_to;
|
||||
resp = pre_fm;
|
||||
cstr = "\x14\x0D";
|
||||
cmd.append(cstr);
|
||||
resp.append(cstr);
|
||||
cmd.append(post);
|
||||
if (waitFOR(9, "notch val")) {
|
||||
size_t p = replystr.rfind(resp);
|
||||
if (p != string::npos) {
|
||||
val = (int)ceil(fm_bcd(replystr.substr(p+6),3));
|
||||
val -= 128;
|
||||
val *= 20;
|
||||
switch (vfo->imode) {
|
||||
default:
|
||||
case USB7851: case USBD17851: case USBD27851: case USBD37851: case RTTYR7851:
|
||||
val = 1500 + val;
|
||||
break;
|
||||
case LSB: case LSBD17851: case LSBD27851: case LSBD37851: case RTTY7851:
|
||||
val = 1500 - val;
|
||||
break;
|
||||
case CW7851:
|
||||
val = progStatus.cw_spot_tone - val;
|
||||
break;
|
||||
case CWR7851:
|
||||
val = progStatus.cw_spot_tone + val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return on;
|
||||
}
|
||||
|
||||
void RIG_IC7851::get_notch_min_max_step(int &min, int &max, int &step)
|
||||
{
|
||||
switch (vfo->imode) {
|
||||
default:
|
||||
case USB7851: case USBD17851: case USBD27851: case USBD37851: case RTTYR7851:
|
||||
case LSB7851: case LSBD17851: case LSBD27851: case LSBD37851: case RTTY7851:
|
||||
min = 0; max = 3000; step = 20; break;
|
||||
case CW7851: case CWR7851:
|
||||
min = progStatus.cw_spot_tone - 500;
|
||||
max = progStatus.cw_spot_tone + 500;
|
||||
step = 20;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ using namespace std;
|
|||
rigbase *selrig = rigs[0];
|
||||
|
||||
extern bool test;
|
||||
void init_notch_control();
|
||||
|
||||
bool flrig_abort = false;
|
||||
|
||||
|
|
@ -345,6 +346,7 @@ void setModeControl(void *)
|
|||
if (spnrIFSHIFT) spnrIFSHIFT->deactivate();
|
||||
}
|
||||
}
|
||||
init_notch_control();
|
||||
}
|
||||
|
||||
void setFILTER(void *)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue