kopia lustrzana https://github.com/jamescoxon/dl-fldigi
Nu opBW combos
rodzic
db696170c8
commit
670479756f
|
@ -303,8 +303,14 @@ Fl_Button *btnQRZ;
|
|||
static Fl_Button *qsoClear;
|
||||
Fl_Button *qsoSave;
|
||||
cFreqControl *qsoFreqDisp = (cFreqControl *)0;
|
||||
Fl_Group *qso_combos = (Fl_Group *)0;
|
||||
Fl_ComboBox *qso_opMODE = (Fl_ComboBox *)0;
|
||||
Fl_Group *qso_opGROUP = (Fl_Group *)0;
|
||||
Fl_ComboBox *qso_opBW = (Fl_ComboBox *)0;
|
||||
Fl_Button *qso_btnBW1 = (Fl_Button *)0;
|
||||
Fl_ComboBox *qso_opBW1 = (Fl_ComboBox *)0;
|
||||
Fl_Button *qso_btnBW2 = (Fl_Button *)0;
|
||||
Fl_ComboBox *qso_opBW2 = (Fl_ComboBox *)0;
|
||||
Fl_Button *qso_opPICK = (Fl_Button *)0;
|
||||
|
||||
Fl_Input2 *inpFreq;
|
||||
|
@ -3716,13 +3722,11 @@ void toggle_smeter()
|
|||
if (progStatus.meters && !smeter->visible()) {
|
||||
pwrmeter->hide();
|
||||
smeter->show();
|
||||
qso_opMODE->hide();
|
||||
qso_opBW->hide();
|
||||
qso_combos->hide();
|
||||
} else if (!progStatus.meters && smeter->visible()) {
|
||||
pwrmeter->hide();
|
||||
smeter->hide();
|
||||
qso_opMODE->show();
|
||||
qso_opBW->show();
|
||||
qso_combos->show();
|
||||
}
|
||||
RigControlFrame->redraw();
|
||||
}
|
||||
|
@ -4457,16 +4461,25 @@ void show_frequency(long long freq)
|
|||
REQ(_show_frequency, freq);
|
||||
}
|
||||
|
||||
void show_mode(const string& sMode)
|
||||
void show_mode(const string sMode)
|
||||
{
|
||||
REQ(&Fl_ComboBox::put_value, qso_opMODE, sMode.c_str());
|
||||
}
|
||||
|
||||
void show_bw(const string& sWidth)
|
||||
void show_bw(const string sWidth)
|
||||
{
|
||||
REQ(&Fl_ComboBox::put_value, qso_opBW, sWidth.c_str());
|
||||
}
|
||||
|
||||
void show_bw1(const string sVal)
|
||||
{
|
||||
REQ(&Fl_ComboBox::put_value, qso_opBW1, sVal.c_str());
|
||||
}
|
||||
|
||||
void show_bw2(const string sVal)
|
||||
{
|
||||
REQ(&Fl_ComboBox::put_value, qso_opBW2, sVal.c_str());
|
||||
}
|
||||
|
||||
void show_spot(bool v)
|
||||
{
|
||||
|
@ -4675,6 +4688,8 @@ void LOGGING_colors_font()
|
|||
// combo boxes
|
||||
combo_color_font(qso_opMODE);
|
||||
combo_color_font(qso_opBW);
|
||||
combo_color_font(qso_opBW1);
|
||||
combo_color_font(qso_opBW2);
|
||||
|
||||
fl_digi_main->redraw();
|
||||
|
||||
|
@ -5169,33 +5184,94 @@ void create_fl_digi_main_primary() {
|
|||
set_smeter_colors();
|
||||
smeter->hide();
|
||||
|
||||
qso_opMODE = new Fl_ComboBox(
|
||||
smeter->x(), smeter->y(), mode_cbo_w, Hentry);
|
||||
qso_opMODE->box(FL_DOWN_BOX);
|
||||
qso_opMODE->color(FL_BACKGROUND2_COLOR);
|
||||
qso_opMODE->selection_color(FL_BACKGROUND_COLOR);
|
||||
qso_opMODE->labeltype(FL_NORMAL_LABEL);
|
||||
qso_opMODE->labelfont(0);
|
||||
qso_opMODE->labelsize(14);
|
||||
qso_opMODE->labelcolor(FL_FOREGROUND_COLOR);
|
||||
qso_opMODE->callback((Fl_Callback*)cb_qso_opMODE);
|
||||
qso_opMODE->align(FL_ALIGN_TOP);
|
||||
qso_opMODE->when(FL_WHEN_RELEASE);
|
||||
qso_opMODE->end();
|
||||
qso_combos = new Fl_Group(
|
||||
qsoFreqDisp1->x(), qsoFreqDisp1->y() + qsoFreqDisp1->h() + pad,
|
||||
smeter_w, Hentry);
|
||||
qso_combos->box(FL_FLAT_BOX);
|
||||
|
||||
qso_opBW = new Fl_ComboBox(
|
||||
qso_opMODE->x() + mode_cbo_w + pad, smeter->y(), bw_cbo_w, Hentry);
|
||||
qso_opBW->box(FL_DOWN_BOX);
|
||||
qso_opBW->color(FL_BACKGROUND2_COLOR);
|
||||
qso_opBW->selection_color(FL_BACKGROUND_COLOR);
|
||||
qso_opBW->labeltype(FL_NORMAL_LABEL);
|
||||
qso_opBW->labelfont(0);
|
||||
qso_opBW->labelsize(14);
|
||||
qso_opBW->labelcolor(FL_FOREGROUND_COLOR);
|
||||
qso_opBW->callback((Fl_Callback*)cb_qso_opBW);
|
||||
qso_opBW->align(FL_ALIGN_TOP);
|
||||
qso_opBW->when(FL_WHEN_RELEASE);
|
||||
qso_opBW->end();
|
||||
qso_opMODE = new Fl_ComboBox(
|
||||
smeter->x(), smeter->y(), mode_cbo_w, Hentry);
|
||||
qso_opMODE->box(FL_DOWN_BOX);
|
||||
qso_opMODE->color(FL_BACKGROUND2_COLOR);
|
||||
qso_opMODE->selection_color(FL_BACKGROUND_COLOR);
|
||||
qso_opMODE->labeltype(FL_NORMAL_LABEL);
|
||||
qso_opMODE->labelfont(0);
|
||||
qso_opMODE->labelsize(14);
|
||||
qso_opMODE->labelcolor(FL_FOREGROUND_COLOR);
|
||||
qso_opMODE->callback((Fl_Callback*)cb_qso_opMODE);
|
||||
qso_opMODE->align(FL_ALIGN_TOP);
|
||||
qso_opMODE->when(FL_WHEN_RELEASE);
|
||||
qso_opMODE->end();
|
||||
|
||||
qso_opBW = new Fl_ComboBox(
|
||||
qso_opMODE->x() + mode_cbo_w + pad,
|
||||
smeter->y(),
|
||||
bw_cbo_w, Hentry);
|
||||
qso_opBW->box(FL_DOWN_BOX);
|
||||
qso_opBW->color(FL_BACKGROUND2_COLOR);
|
||||
qso_opBW->selection_color(FL_BACKGROUND_COLOR);
|
||||
qso_opBW->labeltype(FL_NORMAL_LABEL);
|
||||
qso_opBW->labelfont(0);
|
||||
qso_opBW->labelsize(14);
|
||||
qso_opBW->labelcolor(FL_FOREGROUND_COLOR);
|
||||
qso_opBW->callback((Fl_Callback*)cb_qso_opBW);
|
||||
qso_opBW->align(FL_ALIGN_TOP);
|
||||
qso_opBW->when(FL_WHEN_RELEASE);
|
||||
qso_opBW->end();
|
||||
|
||||
qso_opGROUP = new Fl_Group(
|
||||
qso_opMODE->x() + mode_cbo_w + pad,
|
||||
smeter->y(),
|
||||
bw_cbo_w, Hentry);
|
||||
qso_opGROUP->box(FL_FLAT_BOX);
|
||||
|
||||
qso_btnBW1 = new Fl_Button(
|
||||
qso_opGROUP->x(), qso_opGROUP->y(),
|
||||
qso_opGROUP->h() * 3 / 4, qso_opGROUP->h());
|
||||
qso_btnBW1->callback((Fl_Callback*)cb_qso_btnBW1);
|
||||
|
||||
qso_opBW1 = new Fl_ComboBox(
|
||||
qso_btnBW1->x()+qso_btnBW1->w(), qso_btnBW1->y(),
|
||||
qso_opGROUP->w() - qso_btnBW1->w(), qso_btnBW1->h());
|
||||
qso_opBW1->box(FL_DOWN_BOX);
|
||||
qso_opBW1->color(FL_BACKGROUND2_COLOR);
|
||||
qso_opBW1->selection_color(FL_BACKGROUND_COLOR);
|
||||
qso_opBW1->labeltype(FL_NORMAL_LABEL);
|
||||
qso_opBW1->labelfont(0);
|
||||
qso_opBW1->labelsize(14);
|
||||
qso_opBW1->labelcolor(FL_FOREGROUND_COLOR);
|
||||
qso_opBW1->callback((Fl_Callback*)cb_qso_opBW1);
|
||||
qso_opBW1->align(FL_ALIGN_TOP);
|
||||
qso_opBW1->when(FL_WHEN_RELEASE);
|
||||
qso_opBW1->end();
|
||||
|
||||
qso_btnBW1->hide();
|
||||
qso_opBW1->hide();
|
||||
|
||||
qso_btnBW2 = new Fl_Button(
|
||||
qso_opGROUP->x(), qso_opGROUP->y(),
|
||||
qso_opGROUP->h() * 3 / 4, qso_opGROUP->h());
|
||||
qso_btnBW2->callback((Fl_Callback*)cb_qso_btnBW2);
|
||||
|
||||
qso_opBW2 = new Fl_ComboBox(
|
||||
qso_btnBW2->x()+qso_btnBW2->w(), qso_btnBW2->y(),
|
||||
qso_opGROUP->w() - qso_btnBW2->w(), qso_btnBW2->h());
|
||||
qso_opBW2->box(FL_DOWN_BOX);
|
||||
qso_opBW2->color(FL_BACKGROUND2_COLOR);
|
||||
qso_opBW2->selection_color(FL_BACKGROUND_COLOR);
|
||||
qso_opBW2->labeltype(FL_NORMAL_LABEL);
|
||||
qso_opBW2->labelfont(0);
|
||||
qso_opBW2->labelsize(14);
|
||||
qso_opBW2->labelcolor(FL_FOREGROUND_COLOR);
|
||||
qso_opBW2->callback((Fl_Callback*)cb_qso_opBW2);
|
||||
qso_opBW2->align(FL_ALIGN_TOP);
|
||||
qso_opBW2->when(FL_WHEN_RELEASE);
|
||||
qso_opBW2->end();
|
||||
|
||||
qso_opGROUP->end();
|
||||
qso_opGROUP->hide();
|
||||
|
||||
qso_combos->end();
|
||||
|
||||
Fl_Button *smeter_toggle = new Fl_Button(
|
||||
qso_opBW->x() + qso_opBW->w() + pad, smeter->y(), Wbtn, Hentry);
|
||||
|
|
|
@ -120,8 +120,14 @@ extern Fl_Group *QsoInfoFrame1B;
|
|||
extern Fl_Group *qsoFrameView;
|
||||
extern Fl_Group *QsoInfoFrame;
|
||||
extern cFreqControl *qsoFreqDisp;
|
||||
extern Fl_Group *qso_combos;
|
||||
extern Fl_ComboBox *qso_opMODE;
|
||||
extern Fl_Group *qso_opGROUP;
|
||||
extern Fl_ComboBox *qso_opBW;
|
||||
extern Fl_Button *qso_btnBW1;
|
||||
extern Fl_ComboBox *qso_opBW1;
|
||||
extern Fl_Button *qso_btnBW2;
|
||||
extern Fl_ComboBox *qso_opBW2;
|
||||
extern Fl_Button *qso_opPICK;
|
||||
extern Fl_Browser *qso_opBrowser;
|
||||
|
||||
|
@ -308,8 +314,12 @@ extern void put_Status1(const char *msg, double timeout = 0.0, status_timeout ac
|
|||
extern void put_Status2(const char *msg, double timeout = 0.0, status_timeout action = STATUS_CLEAR);
|
||||
|
||||
extern void show_frequency(long long);
|
||||
extern void show_mode(const std::string& mode);
|
||||
extern void show_bw(const std::string& sWidth);
|
||||
|
||||
extern void show_mode(const std::string sMode);
|
||||
extern void show_bw(const std::string sWidth);
|
||||
extern void show_bw1(const std::string sVal);
|
||||
extern void show_bw2(const std::string sVal);
|
||||
|
||||
extern void show_spot(bool v);
|
||||
extern void showMacroSet();
|
||||
extern void setwfrange();
|
||||
|
|
|
@ -47,6 +47,10 @@ extern void buildlist();
|
|||
extern void qso_movFreq(Fl_Widget* w, void*);
|
||||
extern int cb_qso_opMODE();
|
||||
extern int cb_qso_opBW();
|
||||
extern int cb_qso_btnBW1();
|
||||
extern int cb_qso_opBW1();
|
||||
extern int cb_qso_btnBW2();
|
||||
extern int cb_qso_opBW2();
|
||||
extern void qso_setMode();
|
||||
extern void setTitle();
|
||||
|
||||
|
|
|
@ -330,9 +330,38 @@ int cb_qso_opMODE()
|
|||
int cb_qso_opBW()
|
||||
{
|
||||
if (progdefaults.chkUSERIGCATis)
|
||||
// if (!progdefaults.chkUSEXMLRPCis)
|
||||
rigCAT_setwidth(qso_opBW->value());
|
||||
set_flrig_bw(qso_opBW->index());
|
||||
set_flrig_bw(qso_opBW->index(), -1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cb_qso_btnBW1()
|
||||
{
|
||||
qso_btnBW1->hide();
|
||||
qso_opBW1->hide();
|
||||
qso_btnBW2->show();
|
||||
qso_opBW2->show();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cb_qso_btnBW2()
|
||||
{
|
||||
qso_btnBW2->hide();
|
||||
qso_opBW2->hide();
|
||||
qso_btnBW1->show();
|
||||
qso_opBW1->show();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cb_qso_opBW1()
|
||||
{
|
||||
set_flrig_bw(qso_opBW2->index(), qso_opBW1->index());
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cb_qso_opBW2()
|
||||
{
|
||||
set_flrig_bw(qso_opBW2->index(), qso_opBW1->index());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -107,7 +107,8 @@ void xmlrpc_rig_set_qsy(long long rfc)
|
|||
wf->rfcarrier(rfc);
|
||||
wf->movetocenter();
|
||||
show_frequency(rfc);
|
||||
if (XMLRPC_DEBUG) std::cout << "set qsy: " << rfc << "\n";
|
||||
if (XMLRPC_DEBUG)
|
||||
LOG_INFO("set qsy: %d", (int)rfc);
|
||||
}
|
||||
|
||||
//======================================================================
|
||||
|
@ -132,7 +133,8 @@ void set_flrig_ptt(int on) {
|
|||
wait_ptt = true;
|
||||
wait_ptt_timeout = 10;
|
||||
ptt_state = on;
|
||||
if (XMLRPC_DEBUG) std::cout << "ptt: " << on << "\n";
|
||||
if (XMLRPC_DEBUG)
|
||||
LOG_INFO("ptt: %s", on ? "ON" : "OFF");
|
||||
} else {
|
||||
wait_ptt = false;
|
||||
wait_ptt_timeout = 0;
|
||||
|
@ -159,7 +161,8 @@ void flrig_get_ptt()
|
|||
ptt_state = val;
|
||||
guard_lock flrig_lock(&mutex_flrig_ptt);
|
||||
Fl::awake(xmlrpc_rig_show_ptt, reinterpret_cast<void*>(val) );
|
||||
if (XMLRPC_DEBUG) std::cout << "get_ptt: " << ptt_state << "\n";
|
||||
if (XMLRPC_DEBUG)
|
||||
LOG_INFO("get_ptt: %s", ptt_state ? "ON" : "OFF");
|
||||
} else if (wait_ptt && (val == ptt_state)) {
|
||||
wait_ptt = false;
|
||||
wait_ptt_timeout = 0;
|
||||
|
@ -172,7 +175,7 @@ if (XMLRPC_DEBUG) std::cout << "get_ptt: " << ptt_state << "\n";
|
|||
connected_to_flrig = false;
|
||||
wait_ptt = false;
|
||||
wait_ptt_timeout = 5;
|
||||
if (XMLRPC_DEBUG) std::cout << "get_ptt failed!\n";
|
||||
LOG_ERROR("%s", "get_ptt failed!");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -200,7 +203,8 @@ void set_flrig_freq(long int fr)
|
|||
wait_freq = true;
|
||||
wait_freq_timeout = 5;
|
||||
xcvr_freq = fr;
|
||||
if (XMLRPC_DEBUG) std::cout << "set freq: " << xcvr_freq << "\n";
|
||||
if (XMLRPC_DEBUG)
|
||||
LOG_INFO("set freq: %d", (int)fr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -228,7 +232,8 @@ void flrig_get_frequency()
|
|||
xcvr_freq = fr;
|
||||
guard_lock flrig_lock(&mutex_flrig_freq);
|
||||
Fl::awake(xmlrpc_rig_show_freq, reinterpret_cast<void*>(fr));
|
||||
if (XMLRPC_DEBUG) std::cout << "get freq: " << xcvr_freq << "\n";
|
||||
if (XMLRPC_DEBUG)
|
||||
LOG_INFO("get freq: %d", fr);
|
||||
} else if (wait_freq && (fr == xcvr_freq)) {
|
||||
wait_freq = false;
|
||||
wait_freq_timeout = 0;
|
||||
|
@ -240,7 +245,7 @@ if (XMLRPC_DEBUG) std::cout << "get freq: " << xcvr_freq << "\n";
|
|||
connected_to_flrig = false;
|
||||
wait_freq = false;
|
||||
wait_freq_timeout = 5;
|
||||
if (XMLRPC_DEBUG) std::cout << "get freq failed\n";
|
||||
LOG_ERROR("%s", "get freq failed");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -253,6 +258,12 @@ bool wait_mode = false; // wait for transceiver to respond
|
|||
int wait_mode_timeout = 5; // 5 polls and then disable wait
|
||||
string posted_mode = "";
|
||||
|
||||
bool wait_bw = false; // wait for transceiver to respond
|
||||
int wait_bw_timeout = 5; // 5 polls and then disable wait
|
||||
string posted_bw = "";
|
||||
string posted_bw1 = "";
|
||||
string posted_bw2 = "";
|
||||
|
||||
void set_flrig_mode(const char *md)
|
||||
{
|
||||
if (!connected_to_flrig) return;
|
||||
|
@ -270,7 +281,7 @@ void set_flrig_mode(const char *md)
|
|||
bws_posted = false;
|
||||
wait_mode = true;
|
||||
wait_mode_timeout = 5;
|
||||
if (XMLRPC_DEBUG) std::cout << "set mode: " << posted_mode << "\n";
|
||||
if (XMLRPC_DEBUG) LOG_INFO("set mode: %s", md);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -296,7 +307,8 @@ void flrig_get_mode()
|
|||
posted_mode = md;
|
||||
guard_lock flrig_lock(&mutex_flrig_mode);
|
||||
Fl::awake(xmlrpc_rig_post_mode, reinterpret_cast<void*>(&md));
|
||||
if (XMLRPC_DEBUG) std::cout << "get mode: " << posted_mode << "\n";
|
||||
if (XMLRPC_DEBUG)
|
||||
LOG_INFO("get mode: %s", md.c_str());
|
||||
} else if (wait_mode && posted) {
|
||||
wait_mode = false;
|
||||
wait_mode_timeout = 0;
|
||||
|
@ -308,7 +320,7 @@ if (XMLRPC_DEBUG) std::cout << "get mode: " << posted_mode << "\n";
|
|||
connected_to_flrig = false;
|
||||
wait_mode = false;
|
||||
wait_freq_timeout = 0;
|
||||
if (XMLRPC_DEBUG) std::cout << "get mode failed\n";
|
||||
LOG_ERROR("%s", "get mode failed");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -331,7 +343,8 @@ void xmlrpc_rig_post_modes(void *)
|
|||
|
||||
for (int i = 0; i < nargs; i++) {
|
||||
qso_opMODE->add(string(modes_result[i]).c_str());
|
||||
if (XMLRPC_DEBUG) std::cout << "post mode: " << string(modes_result[i]) << "\n";
|
||||
if (XMLRPC_DEBUG)
|
||||
LOG_INFO("post mode: %s", string(modes_result[i]).c_str());
|
||||
}
|
||||
|
||||
qso_opMODE->index(0);
|
||||
|
@ -347,7 +360,9 @@ void flrig_get_modes()
|
|||
if (flrig_client->execute("rig.get_modes", XmlRpcValue(), modes_result, timeout) ) {
|
||||
guard_lock flrig_lock(&mutex_flrig_modes);
|
||||
Fl::awake(xmlrpc_rig_post_modes);
|
||||
if (XMLRPC_DEBUG) std::cout << "get modes\n";
|
||||
posted_mode = posted_bw = posted_bw1 = posted_bw2 = "GETME";
|
||||
if (XMLRPC_DEBUG)
|
||||
LOG_INFO("%s", "get modes");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -355,73 +370,90 @@ if (XMLRPC_DEBUG) std::cout << "get modes\n";
|
|||
// transceiver get / set bandwidth
|
||||
// transceiver get bandwidth table
|
||||
//----------------------------------------------------------------------
|
||||
bool wait_bw = false; // wait for transceiver to respond
|
||||
int wait_bw_timeout = 5; // 5 polls and then disable wait
|
||||
string posted_bw = "";
|
||||
|
||||
void set_flrig_bw(int bw1, int bw2)
|
||||
void set_flrig_bw(int bw2, int bw1)
|
||||
{
|
||||
if (!connected_to_flrig) return;
|
||||
|
||||
XmlRpcValue val, result;
|
||||
val = 256*bw2 + bw1;
|
||||
int ival = bw2;
|
||||
if (bw1 > 0) ival = 256*(bw1+128) + bw2;
|
||||
val = ival;
|
||||
|
||||
guard_lock flrig_lock(&mutex_flrig);
|
||||
if (XMLRPC_DEBUG)
|
||||
LOG_INFO("set_flrig_bw %04X", ival);
|
||||
if (!flrig_client->execute("rig.set_bw", val, result, timeout)) {
|
||||
LOG_ERROR("%s", "rig.set_bw failed");
|
||||
wait_bw = false;
|
||||
wait_bw_timeout = 0;
|
||||
} else {
|
||||
posted_bw = qso_opBW->value();
|
||||
wait_bw = true;
|
||||
wait_bw_timeout = 5;
|
||||
if (XMLRPC_DEBUG) std::cout << "set bw: " << posted_bw << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
pthread_mutex_t mutex_flrig_bw = PTHREAD_MUTEX_INITIALIZER;
|
||||
void xmlrpc_rig_post_bw(void *data)
|
||||
void xmlrpc_rig_post_bw(void *)
|
||||
{
|
||||
guard_lock flrig_lock(&mutex_flrig_bw);
|
||||
if (!qso_opBW) return;
|
||||
|
||||
string *s = reinterpret_cast<string *>(data);
|
||||
size_t p = s->find("|");
|
||||
if (p != string::npos) s->erase(p);
|
||||
|
||||
qso_opBW->value(s->c_str());
|
||||
qso_opBW->value(posted_bw.c_str());
|
||||
qso_opBW->redraw();
|
||||
}
|
||||
|
||||
void xmlrpc_rig_post_bw1(void *)
|
||||
{
|
||||
guard_lock flrig_lock(&mutex_flrig_bw);
|
||||
if (!qso_opBW1) return;
|
||||
|
||||
qso_opBW1->value(posted_bw1.c_str());
|
||||
qso_opBW1->redraw();
|
||||
}
|
||||
|
||||
void xmlrpc_rig_post_bw2(void *)
|
||||
{
|
||||
guard_lock flrig_lock(&mutex_flrig_bw);
|
||||
if (!qso_opBW2) return;
|
||||
|
||||
qso_opBW2->value(posted_bw2.c_str());
|
||||
qso_opBW2->redraw();
|
||||
}
|
||||
|
||||
void flrig_get_bw()
|
||||
{
|
||||
guard_lock flrig_lock(&mutex_flrig);
|
||||
XmlRpcValue res;
|
||||
if (wait_bw_timeout) {
|
||||
wait_bw_timeout--;
|
||||
return;
|
||||
}
|
||||
|
||||
if (flrig_client->execute("rig.get_bw", XmlRpcValue(), res, timeout) ) {
|
||||
static string s1;
|
||||
static string s2;
|
||||
|
||||
s1 = string(res[0]);
|
||||
s2 = string(res[1]);
|
||||
|
||||
bool posted = ((s1 == posted_bw));
|
||||
if (!wait_bw && !posted) {
|
||||
posted_bw = s1;
|
||||
guard_lock flrig_lock(&mutex_flrig_bw);
|
||||
Fl::awake(xmlrpc_rig_post_bw, reinterpret_cast<void*>(&s1));
|
||||
if (XMLRPC_DEBUG) std::cout << "get bw: " << posted_bw << "\n";
|
||||
} else if (wait_bw && !posted) {
|
||||
wait_bw = false;
|
||||
wait_bw_timeout = 0;
|
||||
} else if (wait_bw_timeout == 0) {
|
||||
wait_bw = false;
|
||||
} else if (wait_bw_timeout)
|
||||
--wait_bw_timeout;
|
||||
s2 = string(res[0]);
|
||||
s1 = string(res[1]);
|
||||
if (XMLRPC_DEBUG)
|
||||
LOG_INFO("s1 %s, s2 %s", s1.c_str(), s2.c_str());
|
||||
if (!s1.empty()) {
|
||||
posted_bw1 = s1;
|
||||
Fl::awake(xmlrpc_rig_post_bw1);
|
||||
posted_bw2 = s2;
|
||||
Fl::awake(xmlrpc_rig_post_bw2);
|
||||
} else {
|
||||
if (!s2.empty()) {
|
||||
posted_bw = s2;
|
||||
Fl::awake(xmlrpc_rig_post_bw);
|
||||
}
|
||||
}
|
||||
wait_bw_timeout = 0;
|
||||
} else {
|
||||
connected_to_flrig = false;
|
||||
wait_bw = false;
|
||||
wait_bw_timeout = 0;
|
||||
if (XMLRPC_DEBUG) std::cout << "get bw failed!\n";
|
||||
LOG_ERROR("%s", "get bw failed!");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -433,61 +465,111 @@ void xmlrpc_rig_post_bws(void *)
|
|||
|
||||
int nargs;
|
||||
|
||||
try {
|
||||
nargs = bws_result[0].size();
|
||||
try { // two BW controls
|
||||
nargs = bws_result[1].size();
|
||||
|
||||
qso_opBW->clear();
|
||||
if (XMLRPC_DEBUG) std::cout << "cleared bw combo\n";
|
||||
static string bwstr;
|
||||
qso_opBW1->clear();
|
||||
for (int i = 1; i < nargs; i++) {
|
||||
bwstr = string(bws_result[1][i]);
|
||||
qso_opBW1->add(bwstr.c_str());
|
||||
}
|
||||
|
||||
if (nargs == 0) {
|
||||
string labels1 = bws_result[1][0];
|
||||
static char btn1_label[2];
|
||||
btn1_label[0] = labels1[0]; btn1_label[1] = 0;
|
||||
qso_btnBW1->label(btn1_label);
|
||||
qso_btnBW1->redraw_label();
|
||||
qso_btnBW1->redraw();
|
||||
static char tooltip1[20];
|
||||
snprintf(tooltip1,sizeof(tooltip1),"%s",labels1.substr(2).c_str());
|
||||
qso_opBW1->tooltip(tooltip1);
|
||||
qso_opBW1->index(0);
|
||||
qso_opBW1->redraw();
|
||||
|
||||
if (XMLRPC_DEBUG) {
|
||||
static string debugstr = "opBW1:\n";
|
||||
for (int i = 0; i < nargs-1; i++)
|
||||
debugstr.append(string(bws_result[1][i])).append(", ");
|
||||
debugstr.append(string(bws_result[1][nargs - 1])).append("\n");
|
||||
debugstr.append(labels1).append("\n");
|
||||
debugstr.append("btn1 '").append(btn1_label);
|
||||
debugstr.append("' tip '").append(tooltip1);
|
||||
LOG_INFO("%s", debugstr.c_str());
|
||||
}
|
||||
|
||||
try {
|
||||
nargs = bws_result[0].size();
|
||||
|
||||
static string bwstr;
|
||||
qso_opBW2->clear();
|
||||
for (int i = 1; i < nargs; i++) {
|
||||
bwstr = string(bws_result[0][i]);
|
||||
qso_opBW2->add(bwstr.c_str());
|
||||
}
|
||||
|
||||
string labels2 = bws_result[0][0];
|
||||
static char btn2_label[2];
|
||||
btn2_label[0] = labels2[0]; btn2_label[1] = 0;
|
||||
qso_btnBW2->label(btn2_label);
|
||||
qso_btnBW2->redraw_label();
|
||||
qso_btnBW2->redraw();
|
||||
static char tooltip2[20];
|
||||
snprintf(tooltip2,sizeof(tooltip2),"%s",labels2.substr(2).c_str());
|
||||
qso_opBW2->tooltip(tooltip1);
|
||||
qso_opBW2->index(0);
|
||||
qso_opBW2->redraw();
|
||||
|
||||
if (XMLRPC_DEBUG) {
|
||||
static string debugstr = "opBW2:\n";
|
||||
for (int i = 0; i < nargs-1; i++)
|
||||
debugstr.append(string(bws_result[0][i])).append(", ");
|
||||
debugstr.append(string(bws_result[0][nargs - 1])).append("\n");
|
||||
debugstr.append(labels2).append("\n");
|
||||
debugstr.append("btn2 '").append(btn2_label);
|
||||
debugstr.append("' tip '").append(tooltip2);
|
||||
LOG_INFO("%s", debugstr.c_str());
|
||||
}
|
||||
|
||||
} catch ( XmlRpcException err) {
|
||||
bws_posted = false;
|
||||
return;
|
||||
}
|
||||
qso_opBW->hide();
|
||||
qso_opGROUP->show();
|
||||
bws_posted = true;
|
||||
return;
|
||||
} catch (XmlRpcException err) {
|
||||
try { // one BW control
|
||||
nargs = bws_result[0].size();
|
||||
string bwstr;
|
||||
qso_opBW->clear();
|
||||
for (int i = 1; i < nargs; i++) {
|
||||
bwstr = string(bws_result[0][i]);
|
||||
qso_opBW->add(bwstr.c_str());
|
||||
}
|
||||
qso_opBW->index(0);
|
||||
qso_opBW->activate();
|
||||
qso_opBW->tooltip("xcvr bandwidth");
|
||||
qso_opBW->show();
|
||||
qso_opGROUP->hide();
|
||||
|
||||
if (XMLRPC_DEBUG) {
|
||||
static string debugstr = "BW:\n";
|
||||
for (int i = 0; i < nargs-1; i++)
|
||||
debugstr.append(string(bws_result[0][i])).append(", ");
|
||||
debugstr.append(string(bws_result[0][nargs - 1]));
|
||||
LOG_INFO("%s", debugstr.c_str());
|
||||
}
|
||||
|
||||
} catch (XmlRpcException err) {
|
||||
LOG_ERROR("%s", "no bandwidths specified");
|
||||
qso_opBW->add("");
|
||||
qso_opBW->index(0);
|
||||
qso_opBW->deactivate();
|
||||
return;
|
||||
}
|
||||
|
||||
string bwstr;
|
||||
for (int i = 1; i < nargs; i++) {
|
||||
bwstr = string(bws_result[0][i]);
|
||||
qso_opBW->add(bwstr.c_str());
|
||||
if (XMLRPC_DEBUG) std::cout << "added bw: " << bwstr << "\n";
|
||||
}
|
||||
|
||||
qso_opBW->index(0);
|
||||
qso_opBW->activate();
|
||||
|
||||
qso_opBW->tooltip("xcvr bandwidth");
|
||||
|
||||
} catch (XmlRpcException err) {
|
||||
;
|
||||
}
|
||||
/*
|
||||
string label;
|
||||
size_t p;
|
||||
// add later
|
||||
try {
|
||||
nargs = bws_result[1].size();
|
||||
if (nargs > 1) {
|
||||
label = string(bws_result[1][0]);
|
||||
if ( (p = label.find("|")) != string::npos)
|
||||
label.erase(0, p + 1);
|
||||
bw2Label->value(label.c_str());
|
||||
for (int i = 1; i < nargs; i++) {
|
||||
bw2->add(string(bws_result[1][i]).c_str());
|
||||
}
|
||||
bw2Label->redraw();
|
||||
bw2->activate();
|
||||
} else
|
||||
bw2->add("");
|
||||
} catch (XmlRpcException err) {
|
||||
bw2->deactivate();
|
||||
}
|
||||
bw1->redraw_label();
|
||||
bw1->redraw();
|
||||
bw2->redraw_label();
|
||||
bw2->redraw();
|
||||
*/
|
||||
|
||||
bws_posted = true;
|
||||
}
|
||||
|
||||
|
@ -502,9 +584,10 @@ void flrig_get_bws()
|
|||
posted_bw.clear();
|
||||
// guard_lock flrig_lock(&mutex_flrig_bws);
|
||||
Fl::awake(xmlrpc_rig_post_bws);
|
||||
if (XMLRPC_DEBUG) std::cout << "get bws\n";
|
||||
if (XMLRPC_DEBUG)
|
||||
LOG_INFO("%s", "get bws");
|
||||
} else {
|
||||
if (XMLRPC_DEBUG) std::cout << "get bws failed\n";
|
||||
LOG_ERROR("%s", "get bws failed");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -716,7 +799,7 @@ bool flrig_get_xcvr()
|
|||
// xmlrpc read polling thread
|
||||
//======================================================================
|
||||
bool run_flrig_thread = true;
|
||||
int poll_interval = 100; // milliseconds
|
||||
int poll_interval = 1000; // 100 // milliseconds
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Set QSY to true if xmlrpc client connection is OK
|
||||
|
@ -751,7 +834,7 @@ void flrig_connection()
|
|||
Fl::awake(flrig_setQSY);
|
||||
} else {
|
||||
connected_to_flrig = false;
|
||||
poll_interval = 500;
|
||||
poll_interval = 1000;//500;
|
||||
}
|
||||
} catch (...) {}
|
||||
}
|
||||
|
@ -778,7 +861,7 @@ void connect_to_flrig()
|
|||
void * flrig_thread_loop(void *d)
|
||||
{
|
||||
for(;;) {
|
||||
MilliSleep( poll_interval );//progStatus.poll_interval);
|
||||
MilliSleep(poll_interval );//progStatus.poll_interval);
|
||||
|
||||
if (!run_flrig_thread) break;
|
||||
|
||||
|
@ -806,7 +889,7 @@ void * flrig_thread_loop(void *d)
|
|||
void FLRIG_start_flrig_thread()
|
||||
{
|
||||
flrig_thread = new pthread_t;
|
||||
poll_interval = 500;
|
||||
poll_interval = 1000;
|
||||
if (pthread_create(flrig_thread, NULL, flrig_thread_loop, NULL)) {
|
||||
LOG_ERROR("%s", "flrig_thread create");
|
||||
exit(EXIT_FAILURE);
|
||||
|
|
Ładowanie…
Reference in New Issue