* Add break-in selection for transceivers which support
    set / get CAT commands for break-in
    - Icom, Yaesu
    - Change enable_break_in to set_break_in
    - Add get_break_in
      . method
      . polling
This commit is contained in:
David Freese 2020-12-19 07:47:59 -06:00
parent 26451e33bd
commit 290c27e622
41 changed files with 465 additions and 53 deletions

View file

@ -748,7 +748,7 @@ static void cb_btnBreakIn(Fl_Check_Button* o, void*) {
else {
progStatus.break_in = ! progStatus.break_in;
}
cb_enable_break_in();
cb_set_break_in();
}
static void cb_spnr_vox_gain(Hspinner* o, void*) {

View file

@ -105,6 +105,7 @@ Fl_Group *tabPOLLING = (Fl_Group *)0;
Fl_Value_Input *poll_compression = (Fl_Value_Input *)0;
Fl_Value_Input *poll_tuner = (Fl_Value_Input *)0;
Fl_Value_Input *poll_ptt = (Fl_Value_Input *)0;
Fl_Value_Input *poll_break_in = (Fl_Value_Input *)0;
Fl_Button *btnClearAddControls = (Fl_Button *)0;
Fl_Value_Input *poll_meters = (Fl_Value_Input *)0;
@ -626,6 +627,10 @@ static void cb_poll_ptt(Fl_Value_Input* o, void*) {
progStatus.poll_ptt = o->value();
}
static void cb_poll_break_in(Fl_Value_Input* o, void*) {
progStatus.poll_break_in = o->value();
}
static void cb_btnSetMeters(Fl_Button*, void*) {
poll_smeter->value(progStatus.poll_meters);
poll_pout->value(progStatus.poll_meters);
@ -1719,6 +1724,14 @@ Fl_Group *createPOLLING(int X, int Y, int W, int H, const char *label)
poll_compression->align(Fl_Align(FL_ALIGN_RIGHT));
poll_compression->value(progStatus.poll_compression);
poll_break_in = new Fl_Value_Input(X + 280, Y + 165, 30, 20, _("QSK"));
poll_break_in->tooltip(_("Break In"));
poll_break_in->maximum(10);
poll_break_in->step(1);
poll_break_in->callback((Fl_Callback*)cb_poll_break_in);
poll_break_in->align(Fl_Align(FL_ALIGN_RIGHT));
poll_break_in->value(progStatus.poll_break_in);
btnSetAdd = new Fl_Button(X + 370, Y + 190, 60, 20, _("Set all"));
btnSetAdd->callback((Fl_Callback*)cb_btnSetAdd);

View file

@ -83,6 +83,9 @@ public:
int adjust_bandwidth(int);
int def_bandwidth(int);
void set_break_in();
int get_break_in();
bool sendFTcommand(string, int, bool);
const char **bwtable(int);

View file

@ -117,11 +117,11 @@ public:
void set_cw_weight();
void set_cw_wpm();
void enable_keyer();
void enable_break_in();
void set_break_in();
int get_break_in();
void get_cw_weight();
void get_cw_wpm();
void get_break_in();
void get_qsk();
void get_qsk_delay();
void get_cw_spot_tone();

View file

@ -132,6 +132,8 @@ public:
// void set_cw_vol();
bool set_cw_spot();
// void set_cw_spot_tone();
void set_break_in();
int get_break_in();
void get_band_selection(int v);
};

View file

@ -130,6 +130,9 @@ public:
void set_cw_qsk();
bool set_cw_spot();
void set_cw_spot_tone();
void set_break_in();
int get_break_in();
// void set_band_selection(int v);
void get_nr_min_max_step(int &min, int &max, int &step) {
min = 1; max = 15; step = 1; }

View file

@ -132,6 +132,9 @@ public:
void set_cw_qsk();
bool set_cw_spot();
void set_cw_spot_tone();
void set_break_in();
int get_break_in();
// void set_band_selection(int v);
void get_band_selection(int v);
void get_nr_min_max_step(int &min, int &max, int &step) {

View file

@ -133,6 +133,8 @@ public:
// virtual void set_cw_vol();
virtual bool set_cw_spot();
// virtual void set_cw_spot_tone();
void set_break_in();
int get_break_in();
virtual void get_band_selection(int v);

View file

@ -130,6 +130,9 @@ public:
void set_cw_qsk();
bool set_cw_spot();
void set_cw_spot_tone();
void set_break_in();
int get_break_in();
void get_band_selection(int v);
void get_nr_min_max_step(int &min, int &max, int &step) {
min = 1; max = 15; step = 1; }

View file

@ -130,6 +130,8 @@ public:
// void set_cw_vol();
bool set_cw_spot();
// void set_cw_spot_tone();
void set_break_in();
int get_break_in();
void get_band_selection(int v);
};

View file

@ -129,6 +129,8 @@ public:
// void set_cw_vol();
bool set_cw_spot();
// void set_cw_spot_tone();
void set_break_in();
int get_break_in();
void get_band_selection(int v);

View file

@ -112,7 +112,8 @@ public:
void set_cw_wpm();
void get_cw_wpm_min_max(int &min, int &max);
void enable_break_in();
void set_break_in();
int get_break_in();
void set_cw_qsk();
void get_cw_qsk_min_max_step(double &min, double &max, double &step);

View file

@ -103,6 +103,8 @@ public:
void set_cw_qsk();
void set_cw_spot_tone();
void set_cw_vol();
void set_break_in();
int get_break_in();
const char **bwtable(int m);

View file

@ -150,7 +150,7 @@ public:
void set_cw_wpm();
void get_cw_wpm_min_max(int &min, int &max);
void enable_break_in();
void set_break_in();
void set_cw_qsk();
void get_cw_qsk_min_max_step(double &min, double &max, double &step);

View file

@ -112,7 +112,8 @@ public:
void set_cw_wpm();
void get_cw_wpm_min_max(int &min, int &max);
void enable_break_in();
void set_break_in();
int get_break_in();
void set_cw_qsk();
void get_cw_qsk_min_max_step(double &min, double &max, double &step);

View file

@ -144,7 +144,9 @@ public:
void set_cw_wpm();
void get_cw_wpm_min_max(int &min, int &max);
void enable_break_in();
void set_break_in();
int get_break_in();
void set_cw_qsk();
void get_cw_qsk_min_max_step(double &min, double &max, double &step);

View file

@ -110,7 +110,9 @@ public:
void set_cw_wpm();
void get_cw_wpm_min_max(int &min, int &max);
void enable_break_in();
void set_break_in();
int get_break_in();
void set_cw_qsk();
void get_cw_qsk_min_max_step(double &min, double &max, double &step);

View file

@ -163,7 +163,7 @@ public:
// void set_cw_wpm();
// void get_cw_wpm_min_max(int &min, int &max);
// void enable_break_in();
// void set_break_in();
// void set_cw_qsk();
// void get_cw_qsk_min_max_step(double &min, double &max, double &step);

View file

@ -62,6 +62,9 @@ public:
virtual void tune_rig(int how);
virtual int get_tune();
virtual std::string hexstr(std::string s);
};
#endif

View file

@ -540,7 +540,8 @@ int vfo_;
virtual void get_cw_wpm_min_max(int &min, int &max) {
min = 5; max = 50; } // default for FT950/FT450D
virtual void enable_keyer() {}
virtual void enable_break_in() {}
virtual void set_break_in() {}
virtual int get_break_in() {return 0;}
virtual void set_cw_qsk() {}
virtual void get_cw_qsk_min_max_step(double &min, double &max, double &step) {

View file

@ -534,6 +534,7 @@ extern Fl_Value_Input *poll_noise;
extern Fl_Value_Input *poll_nr;
extern Fl_Value_Input *poll_compression;
extern Fl_Value_Input *poll_ptt;
extern Fl_Value_Input *poll_break_in;
extern Fl_Button *btnClearAddControls;
extern Fl_Value_Input *poll_all;
extern Fl_Button *btnSetAllAdd;

View file

@ -107,6 +107,7 @@ struct status {
int poll_compression;
int poll_tuner;
int poll_ptt;
int poll_break_in;
int poll_all;
int iBW_A;

View file

@ -137,7 +137,7 @@ extern void cb_cw_qsk();
extern void cb_cw_delay();
extern void cb_cw_weight();
extern void cb_enable_keyer();
extern void cb_enable_break_in();
extern void cb_set_break_in();
extern void cb_vox_gain();
extern void cb_vox_anti();

View file

@ -136,6 +136,7 @@ RIG_FT2000::RIG_FT2000() {
has_ifshift_control =
has_ptt_control =
has_tune_control =
has_cw_break_in =
has_swr_control = true;
// derived specific
@ -942,3 +943,32 @@ void RIG_FT2000::get_mic_min_max_step(int &min, int &max, int &step)
max = 100;
step = 1;
}
void RIG_FT2000::set_break_in()
{
if (progStatus.break_in) {
cmd = "BI1;";
break_in_label("BK-IN");
} else {
cmd = "BI0;";
break_in_label("QSK ?");
}
sendCommand(cmd);
showresp(WARN, ASC, "SET break in on/off", cmd, replystr);
sett("set_break_in");
}
int RIG_FT2000::get_break_in()
{
cmd = "BI;";
wait_char(';', 4, 100, "get break in", ASC);
progStatus.break_in = (replystr[2] == '1');
if (progStatus.break_in) {
break_in_label("BK-IN");
progStatus.cw_delay = 0;
} else {
break_in_label("QSK ?");
// get_qsk_delay();
}
return progStatus.break_in;
}

View file

@ -1135,7 +1135,7 @@ void RIG_FT450D::set_cw_weight()
sett("set_cw_weight");
}
void RIG_FT450D::enable_break_in()
void RIG_FT450D::set_break_in()
{
if (progStatus.break_in) {
cmd = "BI1;";
@ -1146,7 +1146,22 @@ void RIG_FT450D::enable_break_in()
}
sendCommand(cmd);
showresp(WARN, ASC, "SET break in on/off", cmd, replystr);
sett("enable_break_in");
sett("set_break_in");
}
int RIG_FT450D::get_break_in()
{
cmd = "BI;";
wait_char(';', 4, FL450D_WAIT_TIME, "get break in", ASC);
progStatus.break_in = (replystr[2] == '1');
if (progStatus.break_in) {
break_in_label("FULL");
progStatus.cw_delay = 0;
} else {
break_in_label("QSK");
get_qsk_delay();
}
return progStatus.break_in;
}
void RIG_FT450D::set_cw_delay()
@ -1315,24 +1330,6 @@ void RIG_FT450D::get_cw_wpm()
progStatus.cw_wpm = val;
}
void RIG_FT450D::get_break_in()
{
cmd = "BI;";
wait_char(';', 4, FL450D_WAIT_TIME, "get Break In", ASC);
gett("get_break_in");
size_t p = replystr.rfind("BI");
if (p != string::npos)
progStatus.break_in = (replystr[2] == '1');
if (progStatus.break_in) {
break_in_label("FULL");
progStatus.cw_delay = 0;
} else {
break_in_label("QSK");
get_qsk_delay();
}
}
void RIG_FT450D::get_qsk()
{
cmd = "EX018;";

View file

@ -179,6 +179,7 @@ RIG_FT5000::RIG_FT5000() {
// has_cw_spot_tone = // does not exist???
has_cw_qsk =
has_cw_weight =
has_cw_break_in =
has_split_AB =
can_change_alt_vfo =
@ -1346,6 +1347,35 @@ void RIG_FT5000::set_cw_qsk()
sett("set cw weight");
}
void RIG_FT5000::set_break_in()
{
if (progStatus.break_in) {
cmd = "BI1;";
break_in_label("BK-IN");
} else {
cmd = "BI0;";
break_in_label("QSK ?");
}
sendCommand(cmd);
showresp(WARN, ASC, "SET break in on/off", cmd, replystr);
sett("set_break_in");
}
int RIG_FT5000::get_break_in()
{
cmd = "BI;";
wait_char(';', 4, 100, "get break in", ASC);
progStatus.break_in = (replystr[2] == '1');
if (progStatus.break_in) {
break_in_label("BK-IN");
progStatus.cw_delay = 0;
} else {
break_in_label("QSK ?");
// get_qsk_delay();
}
return progStatus.break_in;
}
/*
void RIG_FT5000::set_cw_spot_tone()
{

View file

@ -157,6 +157,7 @@ RIG_FT991::RIG_FT991() {
has_cw_spot_tone =
has_cw_qsk =
has_cw_weight =
has_cw_break_in =
can_change_alt_vfo =
has_smeter =
@ -1383,3 +1384,32 @@ void RIG_FT991::get_vfoadj_min_max_step(int &min, int &max, int &step)
step = 1;
}
void RIG_FT991::set_break_in()
{
if (progStatus.break_in) {
cmd = "BI1;";
break_in_label("BK-IN");
} else {
cmd = "BI0;";
break_in_label("QSK ?");
}
sendCommand(cmd);
showresp(WARN, ASC, "SET break in on/off", cmd, replystr);
sett("set_break_in");
}
int RIG_FT991::get_break_in()
{
cmd = "BI;";
wait_char(';', 4, FL991_WAIT_TIME, "get break in", ASC);
progStatus.break_in = (replystr[2] == '1');
if (progStatus.break_in) {
break_in_label("BK-IN");
progStatus.cw_delay = 0;
} else {
break_in_label("QSK ?");
// get_qsk_delay();
}
return progStatus.break_in;
}

View file

@ -158,6 +158,7 @@ RIG_FT991A::RIG_FT991A() {
has_cw_spot_tone =
has_cw_qsk =
has_cw_weight =
has_cw_break_in =
can_change_alt_vfo =
has_smeter =
@ -1459,3 +1460,33 @@ void RIG_FT991A::get_band_selection(int v)
sendCommand(cmd);
sett("get band");
}
void RIG_FT991A::set_break_in()
{
if (progStatus.break_in) {
cmd = "BI1;";
break_in_label("BK-IN");
} else {
cmd = "BI0;";
break_in_label("QSK ?");
}
sendCommand(cmd);
showresp(WARN, ASC, "SET break in on/off", cmd, replystr);
sett("set_break_in");
}
int RIG_FT991A::get_break_in()
{
cmd = "BI;";
wait_char(';', 4, FL991A_WAIT_TIME, "get break in", ASC);
progStatus.break_in = (replystr[2] == '1');
if (progStatus.break_in) {
break_in_label("BK-IN");
progStatus.cw_delay = 0;
} else {
break_in_label("QSK ?");
// get_qsk_delay();
}
return progStatus.break_in;
}

View file

@ -188,6 +188,8 @@ RIG_FTdx101D::RIG_FTdx101D() {
// has_cw_spot_tone = // does not exist???
has_cw_qsk =
has_cw_weight =
has_cw_break_in =
has_split_AB =
can_change_alt_vfo =
@ -1379,6 +1381,35 @@ void RIG_FTdx101D::set_cw_qsk()
showresp(WARN, ASC, "SET cw qsk", cmd, replystr);
}
void RIG_FTdx101D::set_break_in()
{
if (progStatus.break_in) {
cmd = "BI1;";
break_in_label("BK-IN");
} else {
cmd = "BI0;";
break_in_label("QSK ?");
}
sendCommand(cmd);
showresp(WARN, ASC, "SET break in on/off", cmd, replystr);
sett("set_break_in");
}
int RIG_FTdx101D::get_break_in()
{
cmd = "BI;";
wait_char(';', 4, 100, "get break in", ASC);
progStatus.break_in = (replystr[2] == '1');
if (progStatus.break_in) {
break_in_label("BK-IN");
progStatus.cw_delay = 0;
} else {
break_in_label("QSK ?");
// get_qsk_delay();
}
return progStatus.break_in;
}
//======================================================================
// FTdx101MP
//======================================================================

View file

@ -159,6 +159,7 @@ RIG_FTdx1200::RIG_FTdx1200() {
has_cw_spot_tone =
has_cw_qsk =
has_cw_weight =
has_cw_break_in =
can_change_alt_vfo =
has_smeter =
@ -1589,6 +1590,35 @@ void RIG_FTdx1200::set_compression(int on, int val)
}
}
void RIG_FTdx1200::set_break_in()
{
if (progStatus.break_in) {
cmd = "BI1;";
break_in_label("BK-IN");
} else {
cmd = "BI0;";
break_in_label("QSK ?");
}
sendCommand(cmd);
showresp(WARN, ASC, "SET break in on/off", cmd, replystr);
sett("set_break_in");
}
int RIG_FTdx1200::get_break_in()
{
cmd = "BI;";
wait_char(';', 4, 100, "get break in", ASC);
progStatus.break_in = (replystr[2] == '1');
if (progStatus.break_in) {
break_in_label("BK-IN");
progStatus.cw_delay = 0;
} else {
break_in_label("QSK ?");
// get_qsk_delay();
}
return progStatus.break_in;
}
/*
// Audio Peak Filter, like set_cw_spot
bool RIG_FTdx1200::set_cw_APF()

View file

@ -182,6 +182,8 @@ RIG_FTdx3000::RIG_FTdx3000() {
// has_cw_spot_tone = // does not exist???
has_cw_qsk =
has_cw_weight =
has_cw_break_in =
has_split_AB =
can_change_alt_vfo =
@ -1283,6 +1285,35 @@ void RIG_FTdx3000::set_cw_qsk()
showresp(WARN, ASC, "SET cw qsk", cmd, replystr);
}
void RIG_FTdx3000::set_break_in()
{
if (progStatus.break_in) {
cmd = "BI1;";
break_in_label("BK-IN");
} else {
cmd = "BI0;";
break_in_label("QSK ?");
}
sendCommand(cmd);
showresp(WARN, ASC, "SET break in on/off", cmd, replystr);
sett("set_break_in");
}
int RIG_FTdx3000::get_break_in()
{
cmd = "BI;";
wait_char(';', 4, 100, "get break in", ASC);
progStatus.break_in = (replystr[2] == '1');
if (progStatus.break_in) {
break_in_label("BK-IN");
progStatus.cw_delay = 0;
} else {
break_in_label("QSK ?");
// get_qsk_delay();
}
return progStatus.break_in;
}
/*
void RIG_FTdx3000::set_cw_spot_tone()
{

View file

@ -183,6 +183,8 @@ RIG_FTdx9000::RIG_FTdx9000() {
// has_cw_spot_tone = // does not exist???
has_cw_qsk =
has_cw_weight =
has_cw_break_in =
has_split_AB =
can_change_alt_vfo =
@ -1292,6 +1294,35 @@ void RIG_FTdx9000::set_cw_qsk()
showresp(WARN, ASC, "SET cw qsk", cmd, replystr);
}
void RIG_FTdx9000::set_break_in()
{
if (progStatus.break_in) {
cmd = "BI1;";
break_in_label("BK-IN");
} else {
cmd = "BI0;";
break_in_label("QSK ?");
}
sendCommand(cmd);
showresp(WARN, ASC, "SET break in on/off", cmd, replystr);
sett("set_break_in");
}
int RIG_FTdx9000::get_break_in()
{
cmd = "BI;";
wait_char(';', 4, 100, "get break in", ASC);
progStatus.break_in = (replystr[2] == '1');
if (progStatus.break_in) {
break_in_label("BK-IN");
progStatus.cw_delay = 0;
} else {
break_in_label("QSK ?");
// get_qsk_delay();
}
return progStatus.break_in;
}
/*
void RIG_FTdx9000::set_cw_spot_tone()
{

View file

@ -29,6 +29,7 @@
#include "IC705.h"
#include "support.h"
#include "trace.h"
#include "tod_clock.h"
//=============================================================================
// IC-705
@ -1095,7 +1096,7 @@ void RIG_IC705::set_cw_wpm()
waitFB("SET cw wpm");
}
void RIG_IC705::enable_break_in()
void RIG_IC705::set_break_in()
{
// 16 47 00 break-in off
// 16 47 01 break-in semi
@ -1113,6 +1114,23 @@ void RIG_IC705::enable_break_in()
waitFB("SET break-in");
}
int RIG_IC705::get_break_in()
{
cmd.assign(pre_to).append("\x16\x47").append(post);
std::string resp;
resp.assign(pre_fm);
if (waitFOR(8, "get break in")) {
size_t p = replystr.rfind(resp);
if (p != string::npos) {
progStatus.break_in = replystr[p+6];
if (progStatus.break_in == 0) break_in_label("qsk");
else if (progStatus.break_in == 1) break_in_label("SEMI");
else break_in_label("FULL");
}
}
return progStatus.break_in;
}
void RIG_IC705::get_cw_qsk_min_max_step(double &min, double &max, double &step)
{
min = 2.0; max = 13.0; step = 0.1;

View file

@ -32,10 +32,6 @@
*/
std::string hexstr(std::string s)
{
return str2hex(s.c_str(), s.length());
}
const char IC7100name_[] = "IC-7100";
@ -238,6 +234,7 @@ RIG_IC7100::RIG_IC7100() {
has_cw_wpm = true;
has_cw_spot_tone = true;
has_cw_qsk = true;
has_cw_break_in = true;
has_cw_vol = true;
has_vox_onoff = true;
@ -1097,6 +1094,39 @@ void RIG_IC7100::set_cw_vol()
waitFB("SET cw sidetone volume");
}
void RIG_IC7100::set_break_in()
{
// 16 47 00 break-in off
// 16 47 01 break-in on
cmd.assign(pre_to).append("\x16\x47");
switch (progStatus.break_in) {
case 1: cmd += '\x01'; break_in_label("QSK ON"); break;
case 0:
default: cmd += '\x00'; break_in_label("qsk");
}
cmd.append(post);
waitFB("SET break-in");
}
int RIG_IC7100::get_break_in()
{
cmd.assign(pre_to).append("\x16\x47").append(post);
std::string resp;
resp.assign(pre_fm);
if (waitFOR(8, "get break in")) {
size_t p = replystr.rfind(resp);
if (p != string::npos) {
progStatus.break_in = replystr[p+6];
if (progStatus.break_in == 0) break_in_label("qsk");
else break_in_label("QSK ON");
}
}
get_trace(2, "get_break_in()", hexstr(replystr).c_str());
return progStatus.break_in;
}
void RIG_IC7100::set_power_control(double val)
{
cmd = pre_to;

View file

@ -1680,7 +1680,7 @@ void RIG_IC7200::set_cw_wpm()
set_trace(2, "set_cw_wpm()", str2hex(cmd.c_str(), cmd.length()));
}
void RIG_IC7200::enable_break_in()
void RIG_IC7200::set_break_in()
{
// 16 47 00 break-in off
// 16 47 01 break-in semi

View file

@ -1093,7 +1093,7 @@ void RIG_IC7300::set_cw_wpm()
waitFB("SET cw wpm");
}
void RIG_IC7300::enable_break_in()
void RIG_IC7300::set_break_in()
{
// 16 47 00 break-in off
// 16 47 01 break-in semi
@ -1111,6 +1111,24 @@ void RIG_IC7300::enable_break_in()
waitFB("SET break-in");
}
int RIG_IC7300::get_break_in()
{
cmd.assign(pre_to).append("\x16\x47").append(post);
std::string resp;
resp.assign(pre_fm);
if (waitFOR(8, "get break in")) {
size_t p = replystr.rfind(resp);
if (p != string::npos) {
progStatus.break_in = replystr[p+6];
if (progStatus.break_in == 0) break_in_label("qsk");
else if (progStatus.break_in == 1) break_in_label("SEMI");
else break_in_label("FULL");
}
}
get_trace(2, "get_break_in()", hexstr(replystr).c_str());
return progStatus.break_in;
}
void RIG_IC7300::get_cw_qsk_min_max_step(double &min, double &max, double &step)
{
min = 2.0; max = 13.0; step = 0.1;

View file

@ -1285,7 +1285,7 @@ void RIG_IC756PRO::set_cw_wpm()
waitFB("SET cw wpm");
}
void RIG_IC756PRO::enable_break_in()
void RIG_IC756PRO::set_break_in()
{
cmd.assign(pre_to).append("\x16\x47");
@ -1298,6 +1298,23 @@ void RIG_IC756PRO::enable_break_in()
waitFB("SET break-in");
}
int RIG_IC756PRO::get_break_in()
{
cmd.assign(pre_to).append("\x16\x47").append(post);
std::string resp;
resp.assign(pre_fm);
if (waitFOR(8, "get break in")) {
size_t p = replystr.rfind(resp);
if (p != string::npos) {
progStatus.break_in = replystr[p+6];
if (progStatus.break_in == 0) break_in_label("qsk");
else break_in_label("QSK ON");
}
}
get_trace(2, "get_break_in()", hexstr(replystr).c_str());
return progStatus.break_in;
}
void RIG_IC756PRO::get_cw_qsk_min_max_step(double &min, double &max, double &step)
{
min = 2.0; max = 13.0; step = 0.1;

View file

@ -1116,7 +1116,7 @@ void RIG_IC7610::set_cw_wpm()
set_trace(2, "set_cw_wpm() ", str2hex(replystr.c_str(), replystr.length()));
}
void RIG_IC7610::enable_break_in()
void RIG_IC7610::set_break_in()
{
// 16 47 00 break-in off
// 16 47 01 break-in semi
@ -1135,6 +1135,24 @@ void RIG_IC7610::enable_break_in()
set_trace(2, "set_break_in() ", str2hex(replystr.c_str(), replystr.length()));
}
int RIG_IC7610::get_break_in()
{
cmd.assign(pre_to).append("\x16\x47").append(post);
std::string resp;
resp.assign(pre_fm);
if (waitFOR(8, "get break in")) {
size_t p = replystr.rfind(resp);
if (p != string::npos) {
progStatus.break_in = replystr[p+6];
if (progStatus.break_in == 0) break_in_label("qsk");
else if (progStatus.break_in == 1) break_in_label("SEMI");
else break_in_label("FULL");
}
}
return progStatus.break_in;
}
void RIG_IC7610::get_cw_qsk_min_max_step(double &min, double &max, double &step)
{
min = 2.0; max = 13.0; step = 0.1;

View file

@ -296,3 +296,8 @@ int RIG_ICOM::get_tune()
return (tune_ = val);
}
std::string RIG_ICOM::hexstr(std::string s)
{
return str2hex(s.c_str(), s.length());
}

View file

@ -120,6 +120,7 @@ status progStatus = {
1, // poll_compression;
1, // poll_tuner;
1, // poll_ptt;
4, // poll_break_in;
4, // int poll_all;
-1, // int iBW_A;
@ -162,7 +163,7 @@ status progStatus = {
false, // bool spot_onoff;
700, // int cw_spot_tone;
false, // bool enable_keyer;
0, // bool break_in;
0, // int break_in;
15, // double cw_qsk;
200, // double cw_delay;
@ -577,6 +578,7 @@ void status::saveLastState()
spref.set("poll_compression", poll_compression);
spref.set("poll_tuner", poll_tuner);
spref.set("poll_ptt", poll_ptt);
spref.set("poll_break_in", poll_break_in);
spref.set("poll_all", poll_all);
spref.set("bw_A", iBW_A);
@ -1123,6 +1125,7 @@ bool status::loadXcvrState(string xcvr)
spref.get("poll_compression", poll_compression, poll_compression);
spref.get("poll_tuner", poll_tuner, poll_tuner);
spref.get("poll_ptt", poll_ptt, poll_ptt);
spref.get("poll_break_in", poll_break_in, poll_break_in);
spref.get("poll_all", poll_all, poll_all);
spref.get("bw_A", iBW_A, iBW_A);
@ -1264,7 +1267,7 @@ bool status::loadXcvrState(string xcvr)
spref.get("cw_qsk", cw_qsk, cw_qsk);
spref.get("(cw_delay", cw_delay, cw_delay);
if (spref.get("enable_keyer", i, i)) enable_keyer = i;
if (spref.get("break_in", i, i)) break_in = i;
if (spref.get("break_in", break_in, break_in));
if (spref.get("vox_onoff", i, i)) vox_onoff = i;
spref.get("vox_gain", vox_gain, vox_gain);
spref.get("vox_anti", vox_anti, vox_anti);
@ -1867,6 +1870,7 @@ string status::info()
info << "poll_noise : " << poll_noise << "\n";
info << "poll_nr : " << poll_nr << "\n";
info << "poll_ptt : " << poll_ptt << "\n";
info << "poll_break_in : " << poll_break_in << "\n";
info << "poll_all : " << poll_all << "\n";
info << "\n";
info << "freq_A : " << freq_A << "\n";

View file

@ -1068,6 +1068,12 @@ void check_ptt()
}
}
void check_break_in()
{
if (selrig->has_cw_break_in)
selrig->get_break_in();
}
struct POLL_PAIR {
int *poll;
void (*pollfunc)();
@ -1094,6 +1100,7 @@ POLL_PAIR RX_poll_pairs[] = {
{&progStatus.poll_noise, read_noise},
{&progStatus.poll_compression, read_compression},
{&progStatus.poll_ptt, check_ptt},
{&progStatus.poll_break_in, check_break_in},
{NULL, NULL}
};
@ -5545,6 +5552,12 @@ void set_init_compression_control()
}
}
void set_init_break_in()
{
if (!selrig->has_cw_break_in) return;
selrig->get_break_in();
}
void init_special_controls()
{
if (selrig->has_special)
@ -5691,13 +5704,13 @@ void init_VFOs()
selrig->set_split(0); // initialization set split call
}
void init_IC7300_special()
{
if (selrig->name_ == rig_IC7300.name_) {
selrig->enable_break_in();
redrawAGC();
}
}
//void init_IC7300_special()
//{
// if (selrig->name_ == rig_IC7300.name_) {
// selrig->set_break_in();
// redrawAGC();
// }
//}
void init_TS990_special()
{
@ -5832,6 +5845,7 @@ void initRig()
set_init_auto_notch();
set_init_notch_control();
set_init_compression_control();
set_init_break_in();
initTabs();
buildlist();
@ -5842,7 +5856,7 @@ void initRig()
selrig->post_initialize();
init_IC7300_special();
// init_IC7300_special();
init_TS990_special();
init_K3_KX3_special();
@ -6426,11 +6440,11 @@ void cb_enable_keyer()
selrig->enable_keyer();
}
void cb_enable_break_in()
void cb_set_break_in()
{
guard_lock serial_lock(&mutex_serial);
trace(1, "cb_enable_break_in()");
selrig->enable_break_in();
trace(1, "cb_set_break_in()");
selrig->set_break_in();
}
void cb_cw_weight()