1
// ----------------------------------------------------------------------------
5
// This file is part of flrig.
7
// flrig is free software; you can redistribute it and/or modify
8
// it under the terms of the GNU General Public License as published by
9
// the Free Software Foundation; either version 3 of the License, or
10
// (at your option) any later version.
12
// flrig is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
// GNU General Public License for more details.
17
// You should have received a copy of the GNU General Public License
18
// along with this program. If not, see <http://www.gnu.org/licenses/>.
19
// ----------------------------------------------------------------------------
23
#include <FL/fl_draw.H>
34
#include "font_browser.h"
44
#include <sys/types.h>
48
#include <sys/ioctl.h>
55
#include "socket_io.h"
57
Fl_Double_Window *dlgDisplayConfig = NULL;
58
Fl_Double_Window *dlgXcvrConfig = NULL;
59
Fl_Double_Window *dlgMemoryDialog = NULL;
60
Fl_Double_Window *dlgControls = NULL;
62
Font_Browser *fntbrowser = NULL;
64
Fl_Color flrig_def_color(int);
66
//======================================================================
68
//======================================================================
72
selectCommPort->clear();
73
selectAuxPort->clear();
74
selectSepPTTPort->clear();
75
selectCommPort->add("NONE");
76
selectAuxPort->add("NONE");
77
selectSepPTTPort->add("NONE");
80
void add_combos(char *port)
82
selectCommPort->add(port);
83
selectAuxPort->add(port);
84
selectSepPTTPort->add(port);
87
//======================================================================
88
// WIN32 init_port_combos
89
//======================================================================
92
static bool open_serial(const char* dev)
95
HANDLE fd = CreateFile(dev, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
96
if (fd != INVALID_HANDLE_VALUE) {
104
void init_port_combos()
109
const char tty_fmt[] = "//./COM%u";
111
for (unsigned j = 0; j < TTY_MAX; j++) {
112
snprintf(ttyname, sizeof(ttyname), tty_fmt, j);
113
if (!open_serial(ttyname))
115
snprintf(ttyname, sizeof(ttyname), "COM%u", j);
116
LOG_WARN("Found serial port %s", ttyname);
122
//======================================================================
123
// Linux init_port_combos
124
//======================================================================
128
# define PATH_MAX 1024
132
void init_port_combos()
135
char ttyname[PATH_MAX + 1];
139
char cwd[PATH_MAX] = { '.', '\0' };
143
LOG_QUIET("%s","Search for serial ports");
146
glob("/dev/serial/by-id/*", 0, NULL, &gbuf);
147
for (size_t j = 0; j < gbuf.gl_pathc; j++) {
148
if ( !(stat(gbuf.gl_pathv[j], &st) == 0 && S_ISCHR(st.st_mode)) ||
149
strstr(gbuf.gl_pathv[j], "modem") )
151
LOG_QUIET("Found serial port %s", gbuf.gl_pathv[j]);
152
add_combos(gbuf.gl_pathv[j]);
156
if (getcwd(cwd, sizeof(cwd)) == NULL) goto out;
158
if (chdir("/sys/class/tty") == -1) goto check_cuse;
159
if ((sys = opendir(".")) == NULL) goto check_cuse;
164
LOG_QUIET("%s", "Searching /sys/class/tty/");
166
while ((dp = readdir(sys))) {
167
# ifdef _DIRENT_HAVE_D_TYPE
168
if (dp->d_type != DT_LNK)
171
if ((len = readlink(dp->d_name, ttyname, sizeof(ttyname)-1)) == -1)
174
if (!strstr(ttyname, "/devices/virtual/")) {
175
snprintf(ttyname, sizeof(ttyname), "/dev/%s", dp->d_name);
176
if (stat(ttyname, &st) == -1 || !S_ISCHR(st.st_mode))
178
LOG_QUIET("Found serial port %s", ttyname);
189
if (chdir("/sys/class/cuse") == -1) goto out;
190
if ((sys = opendir(".")) == NULL) goto out;
192
LOG_QUIET("%s", "Searching /sys/class/cuse/");
194
while ((dp = readdir(sys))) {
195
# ifdef _DIRENT_HAVE_D_TYPE
196
if (dp->d_type != DT_LNK)
199
if ((len = readlink(dp->d_name, ttyname, sizeof(ttyname)-1)) == -1)
202
if (strstr(ttyname, "/devices/virtual/") && !strncmp(dp->d_name, "mhuxd", 5)) {
203
char *name = strdup(dp->d_name);
206
char *p = strchr(name, '!');
209
snprintf(ttyname, sizeof(ttyname), "/dev/%s", name);
211
if (stat(ttyname, &st) == -1 || !S_ISCHR(st.st_mode))
213
LOG_QUIET("Found serial port %s", ttyname);
220
std::string tty_virtual = HomeDir;
221
tty_virtual.append("vdev");
223
LOG_QUIET("Searching %s", tty_virtual.c_str());
225
tty_virtual.append("/ttyS%u");
226
for (unsigned j = 0; j < TTY_MAX; j++) {
227
snprintf(ttyname, sizeof(ttyname), tty_virtual.c_str(), j);
228
if ( !(stat(ttyname, &st) == 0 && S_ISCHR(st.st_mode)) )
230
LOG_QUIET("Found serial port %s", ttyname);
234
if (sys) closedir(sys);
235
if (chdir(cwd) == -1) return;
236
if (ret) // do we need to fall back to the probe code below?
239
const char* tty_fmt[] = {
244
LOG_QUIET("%s", "Serial port discovery via 'stat'");
245
for (size_t i = 0; i < sizeof(tty_fmt)/sizeof(*tty_fmt); i++) {
246
for (unsigned j = 0; j < TTY_MAX; j++) {
247
snprintf(ttyname, sizeof(ttyname), tty_fmt[i], j);
248
if ( !(stat(ttyname, &st) == 0 && S_ISCHR(st.st_mode)) )
251
LOG_WARN("Found serial port %s", ttyname);
259
//======================================================================
260
// APPLE init_port_combos
261
//======================================================================
265
# define PATH_MAX 1024
268
void init_port_combos()
274
const char* tty_fmt[] = {
281
for (size_t i = 0; i < sizeof(tty_fmt)/sizeof(*tty_fmt); i++) {
282
glob(tty_fmt[i], 0, NULL, &gbuf);
283
for (size_t j = 0; j < gbuf.gl_pathc; j++) {
284
if ( !(stat(gbuf.gl_pathv[j], &st) == 0 && S_ISCHR(st.st_mode)) ||
285
strstr(gbuf.gl_pathv[j], "modem") )
287
LOG_WARN("Found serial port %s", gbuf.gl_pathv[j]);
288
add_combos(gbuf.gl_pathv[j]);
295
//======================================================================
296
// FreeBSD init_port_combos
297
//======================================================================
301
# define PATH_MAX 1024
305
void init_port_combos()
309
char ttyname[PATH_MAX + 1];
310
const char* tty_fmt[] = {
316
for (size_t i = 0; i < sizeof(tty_fmt)/sizeof(*tty_fmt); i++) {
317
for (unsigned j = 0; j < TTY_MAX; j++) {
318
snprintf(ttyname, sizeof(ttyname), tty_fmt[i], j);
319
if ( !(stat(ttyname, &st) == 0 && S_ISCHR(st.st_mode)) )
321
LOG_WARN("Found serial port %s", ttyname);
331
int picked = selectRig->index();
332
rigbase *srig = rigs[picked];
333
snprintf(hexstr, sizeof(hexstr), "0x%2X", srig->defaultCIV);
334
txtCIV->value(hexstr);
335
progStatus.CIV = srig->defaultCIV;
336
srig->adjustCIV(progStatus.CIV);
341
int picked = selectRig->index();
343
rigbase *srig = rigs[picked];
344
sscanf(txtCIV->value(), "0x%2X", &adr);
345
progStatus.CIV = adr;
346
srig->adjustCIV(progStatus.CIV);
351
progStatus.USBaudio = btnUSBaudio->value();
354
void cbCancelXcvrDialog()
356
btnOkXcvrDialog->labelcolor(FL_BLACK);
357
dlgXcvrConfig->hide();
360
void cbOkXcvrDialog()
362
if (progStatus.UIsize == wide_ui) {
363
btn_show_controls->label("@-22->");
364
btn_show_controls->redraw_label();
366
mainwindow->resizable(grpTABS);
367
mainwindow->size(mainwindow->w(), 150);
368
mainwindow->size_range(735, 150, 0, 150);
371
// close the current rig control
372
closeRig(); // local serial comm connection
373
close_rig_xmlrpc(); // fldigi connection
374
// disconnect_from_remote(); // remote tcpip connection
376
{ guard_lock gl_serial(&mutex_serial, 200);
377
RigSerial.ClosePort();
378
AuxSerial.ClosePort();
379
SepSerial.ClosePort();
380
bypass_serial_thread_loop = true;
383
string p1 = selectCommPort->value();
384
string p2 = selectAuxPort->value();
385
string p3 = selectSepPTTPort->value();
387
if (p1.compare("NONE") != 0)
388
if (p1 == p2 || p1 == p3) {
389
fl_message("Select separate ports");
393
if (p2.compare("NONE") != 0)
395
fl_message("Select separate ports");
399
if (rig_nbr != selectRig->index()) {
402
rig_nbr = selectRig->index();
403
selrig = rigs[rig_nbr];
406
progStatus.rig_nbr = rig_nbr;
408
progStatus.xcvr_serial_port = selectCommPort->value();
409
progStatus.aux_serial_port = selectAuxPort->value();
410
progStatus.sep_serial_port = selectSepPTTPort->value();
412
progStatus.comm_baudrate = mnuBaudrate->index();
413
progStatus.stopbits = btnOneStopBit->value() ? 1 : 2;
414
progStatus.comm_retries = (int)cntRigCatRetries->value();
415
progStatus.comm_timeout = (int)cntRigCatTimeout->value();
416
progStatus.comm_wait = (int)cntRigCatWait->value();
417
progStatus.comm_echo = btnRigCatEcho->value();
418
progStatus.comm_rtsptt = btnrtsptt->value();
419
progStatus.comm_catptt = btncatptt->value();
420
progStatus.comm_dtrptt = btndtrptt->value();
421
progStatus.comm_rtscts = chkrtscts->value();
422
progStatus.comm_rtsplus = btnrtsplus->value();
423
progStatus.comm_dtrplus = btndtrplus->value();
425
progStatus.sep_dtrplus = btnSepDTRplus->value();
426
progStatus.sep_dtrptt = btnSepDTRptt->value();
427
progStatus.sep_rtsplus = btnSepRTSplus->value();
428
progStatus.sep_rtsptt = btnSepRTSptt->value();
430
progStatus.imode_B = progStatus.imode_A = selrig->def_mode;
431
progStatus.iBW_B = progStatus.iBW_A = selrig->def_bw;
432
progStatus.freq_B = progStatus.freq_A = selrig->def_freq;
436
if (!startXcvrSerial()) {
437
if (progStatus.xcvr_serial_port.compare("NONE") == 0) {
438
LOG_WARN("No comm port ... test mode");
440
progStatus.xcvr_serial_port = "NONE";
441
selectCommPort->value(progStatus.xcvr_serial_port.c_str());
444
if (!startAuxSerial()) {
445
if (progStatus.aux_serial_port.compare("NONE") != 0) {
446
progStatus.aux_serial_port = "NONE";
447
selectAuxPort->value(progStatus.aux_serial_port.c_str());
450
if (!startSepSerial()) {
451
if (progStatus.sep_serial_port.compare("NONE") != 0) {
452
progStatus.sep_serial_port = "NONE";
453
selectSepPTTPort->value(progStatus.sep_serial_port.c_str());
461
mainwindow->redraw();
463
btnOkXcvrDialog->labelcolor(FL_BLACK);
469
selectCommPort->value(progStatus.xcvr_serial_port.c_str());
470
selectAuxPort->value(progStatus.aux_serial_port.c_str());
471
selectSepPTTPort->value(progStatus.sep_serial_port.c_str());
473
if (rig_nbr >= IC703 && rig_nbr <= IC910H) {
475
snprintf(hexstr, sizeof(hexstr), "0x%2X", selrig->CIV);
476
txtCIV->value(hexstr);
478
btnCIVdefault->activate();
479
if (rig_nbr == IC7200 || rig_nbr == IC7600) {
480
btnUSBaudio->value(progStatus.USBaudio);
481
btnUSBaudio->activate();
483
btnUSBaudio->deactivate();
486
txtCIV->deactivate();
487
btnCIVdefault->deactivate();
488
btnUSBaudio->value(0);
489
btnUSBaudio->deactivate();
492
dlgXcvrConfig->show();
493
tabsConfig->value(tabPrimary);
498
dlgXcvrConfig->show();
499
tabsConfig->value(tabPolling);
502
void open_send_command_tab()
504
dlgXcvrConfig->show();
505
tabsConfig->value(tabSndCmd);
508
void open_tcpip_tab()
510
dlgXcvrConfig->show();
511
tabsConfig->value(tabTCPIP);
516
dlgXcvrConfig->show();
517
tabsConfig->value(tabPTT);
522
dlgXcvrConfig->show();
523
tabsConfig->value(tabAux);
526
void createXcvrDialog()
528
dlgXcvrConfig = XcvrDialog();
532
mnuBaudrate->clear();
533
for (int i = 0; szBaudRates[i] != NULL; i++)
534
mnuBaudrate->add(szBaudRates[i]);
536
cbo_agc_level->clear();
537
cbo_agc_level->add("slow");
538
cbo_agc_level->add("med");
539
cbo_agc_level->add("fast");
540
cbo_agc_level->index(progStatus.agc_level);
542
cbo_tt550_agc_level->add("slow");
543
cbo_tt550_agc_level->add("med");
544
cbo_tt550_agc_level->add("fast");
545
cbo_tt550_agc_level->index(progStatus.tt550_agc_level);
547
cbo_tt550_nb_level->add("NONE");
548
cbo_tt550_nb_level->add("1");
549
cbo_tt550_nb_level->add("2");
550
cbo_tt550_nb_level->add("3");
551
cbo_tt550_nb_level->add("4");
552
cbo_tt550_nb_level->add("5");
553
cbo_tt550_nb_level->add("6");
554
cbo_tt550_nb_level->add("7");
555
cbo_tt550_nb_level->index(progStatus.tt550_nb_level);
560
// Frequency display font / colors
563
void cbFreqControlFontBrowser(Fl_Widget*, void*) {
564
selfont = fntbrowser->fontNumber();
565
lblTest->labelfont(selfont);
566
dlgDisplayConfig->redraw();
572
fntbrowser->fontNumber(progStatus.fontnbr);
573
fntbrowser->fontFilter(Font_Browser::FIXED_WIDTH);
574
fntbrowser->fontFilter(Font_Browser::ALL_TYPES);
575
fntbrowser->callback(cbFreqControlFontBrowser);
579
uchar fg_red, fg_green, fg_blue;
580
uchar bg_red, bg_green, bg_blue;
581
uchar smeterRed, smeterGreen, smeterBlue;
582
uchar peakRed, peakGreen, peakBlue;
583
uchar pwrRed, pwrGreen, pwrBlue;
584
uchar swrRed, swrGreen, swrBlue;
590
static uchar fg_sys_red, fg_sys_green, fg_sys_blue;
593
static uchar bg_sys_red, bg_sys_green, bg_sys_blue;
596
static uchar bg2_sys_red, bg2_sys_green, bg2_sys_blue;
599
static uchar bg_slider_red, bg_slider_green, bg_slider_blue;
602
static uchar btn_slider_red, btn_slider_green, btn_slider_blue;
604
Fl_Color btn_lt_color;
605
static uchar btn_lt_color_red, btn_lt_color_green, btn_lt_color_blue;
607
void cb_lighted_button()
609
uchar r = btn_lt_color_red, g = btn_lt_color_green, b = btn_lt_color_blue;
610
if (fl_color_chooser("Foreground color", r, g, b)) {
611
btn_lt_color_red = r; btn_lt_color_green = g; btn_lt_color_blue = b;
612
btn_lt_color = fl_rgb_color(r, g, b);
613
btn_lighted->selection_color(btn_lt_color);
614
btn_lighted->value(1);
615
btn_lighted->redraw();
619
void cb_lighted_default()
621
btn_lt_color = flrig_def_color(FL_YELLOW);
622
btn_lt_color_red = ((btn_lt_color >> 24) & 0xFF);
623
btn_lt_color_green = ((btn_lt_color >> 16) & 0xFF);
624
btn_lt_color_blue = ((btn_lt_color >> 8) & 0xFF);
625
btn_lighted->selection_color(btn_lt_color);
626
btn_lighted->value(1);
627
btn_lighted->redraw();
630
void cb_change_hrd_button()
632
progStatus.hrd_buttons = !progStatus.hrd_buttons;
633
FreqDispA->set_hrd(progStatus.hrd_buttons);
634
FreqDispB->set_hrd(progStatus.hrd_buttons);
637
void cb_slider_defaults()
640
bg_slider_green = 255;
641
bg_slider_blue = 232;
644
btn_slider_green = 0;
645
btn_slider_blue = 128;
647
bg_slider = fl_rgb_color( 232, 255, 232);
648
btn_slider = fl_rgb_color( 0, 0, 128);
650
sldrColors->color(bg_slider);
651
sldrColors->selection_color(btn_slider);
652
sldrColors->redraw();
655
void cb_slider_background()
657
uchar r = bg_slider_red, g = bg_slider_green, b = bg_slider_blue;
658
if (fl_color_chooser("Foreground color", r, g, b)) {
659
bg_slider_red = r; bg_slider_green = g; bg_slider_blue = b;
660
bg_slider = fl_rgb_color(r, g, b);
661
sldrColors->color(bg_slider);
662
sldrColors->selection_color(btn_slider);
663
sldrColors->redraw();
667
void cb_slider_select()
669
uchar r = btn_slider_red, g = btn_slider_green, b = btn_slider_blue;
670
if (fl_color_chooser("Foreground color", r, g, b)) {
671
btn_slider_red = r; btn_slider_green = g; btn_slider_blue = b;
672
btn_slider = fl_rgb_color(r, g, b);
673
sldrColors->color(bg_slider);
674
sldrColors->selection_color(btn_slider);
675
sldrColors->redraw();
679
void cb_sys_defaults()
681
bgsys = flrig_def_color(FL_BACKGROUND_COLOR);
682
bg_sys_red = ((bgsys >> 24) & 0xFF);
683
bg_sys_green = ((bgsys >> 16) & 0xFF);
684
bg_sys_blue = ((bgsys >> 8) & 0xFF);
686
bg2sys = flrig_def_color(FL_BACKGROUND2_COLOR);
687
bg2_sys_red = ((bg2sys) >> 24 & 0xFF);
688
bg2_sys_green = ((bg2sys) >> 16 & 0xFF);
689
bg2_sys_blue = ((bg2sys) >> 8 & 0xFF);
691
fgsys = flrig_def_color(FL_FOREGROUND_COLOR);
692
fg_sys_red = (fgsys >> 24) & 0xFF;
693
fg_sys_green = (fgsys >> 16) & 0xFF;
694
fg_sys_blue = (fgsys >> 8) & 0xFF;
696
Fl::background(bg_sys_red, bg_sys_green, bg_sys_blue);
697
Fl::background2(bg2_sys_red, bg2_sys_green, bg2_sys_blue);
698
Fl::foreground(fg_sys_red, fg_sys_green, fg_sys_blue);
700
dlgDisplayConfig->redraw();
701
mainwindow->redraw();
704
void cb_sys_foreground()
706
uchar r = fg_sys_red, g = fg_sys_green, b = fg_sys_blue;
707
if (fl_color_chooser("Foreground color", r, g, b)) {
708
fg_sys_red = r; fg_sys_green = g; fg_sys_blue = b;
709
fgsys = fl_rgb_color(r, g, b);
710
Fl::foreground(r, g, b);
711
dlgDisplayConfig->redraw();
712
mainwindow->redraw();
716
void cb_sys_background()
718
uchar r = bg_sys_red, g = bg_sys_green, b = bg_sys_blue;
719
if (fl_color_chooser("Background color", r, g, b)) {
720
bg_sys_red = r; bg_sys_green = g; bg_sys_blue = b;
721
bgsys = fl_rgb_color(r, g, b);
722
Fl::background(r, g, b);
723
dlgDisplayConfig->redraw();
724
mainwindow->redraw();
728
void cb_sys_background2()
730
uchar r = bg2_sys_red, g = bg2_sys_green, b = bg2_sys_blue;
731
if (fl_color_chooser("Background2 color", r, g, b)) {
732
bg2_sys_red = r; bg2_sys_green = g; bg2_sys_blue = b;
733
bg2sys = fl_rgb_color(r, g, b);
734
Fl::background2(r, g, b);
735
dlgDisplayConfig->redraw();
736
mainwindow->redraw();
740
void cbBacklightColor()
742
uchar r = bg_red, g = bg_green, b = bg_blue;
743
if (fl_color_chooser("Background color", r, g, b)) {
744
bg_red = r; bg_green = g; bg_blue = b;
745
bgclr = fl_rgb_color(r, g, b);
746
lblTest->color(bgclr);
747
sldrRcvSignalColor->color( fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr );
748
sldrPWRcolor->color(fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr);
749
sldrSWRcolor->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr);
750
scaleSmeterColor->color(bgclr);
751
scalePWRcolor->color(bgclr);
752
scaleSWRcolor->color(bgclr);
753
grpMeterColor->color(bgclr);
754
dlgDisplayConfig->redraw();
758
void cbPrefForeground()
760
uchar r = fg_red, g = fg_green, b = fg_blue;
761
if (fl_color_chooser("Foreground color", r, g, b)) {
762
fg_red = r; fg_green = g; fg_blue = b;
763
fgclr = fl_rgb_color(r, g, b);
764
lblTest->labelcolor(fgclr);
765
scaleSmeterColor->labelcolor(fgclr);
766
scalePWRcolor->labelcolor(fgclr);
767
scaleSWRcolor->labelcolor(fgclr);
768
grpMeterColor->labelcolor(fgclr);
769
dlgDisplayConfig->redraw();
773
void default_meters()
776
bg_red = 232; bg_green = 255; bg_blue = 232;
777
bgclr = fl_rgb_color( bg_red, bg_green, bg_blue);
778
lblTest->color(bgclr);
779
sldrRcvSignalColor->color( fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr );
780
sldrPWRcolor->color(fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr);
781
sldrSWRcolor->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr);
782
scaleSmeterColor->color(bgclr);
783
scalePWRcolor->color(bgclr);
784
scaleSWRcolor->color(bgclr);
785
grpMeterColor->color(bgclr);
786
fg_red = 0; fg_green = 0; fg_blue = 0;
788
lblTest->labelcolor(fgclr);
789
scaleSmeterColor->labelcolor(fgclr);
790
scalePWRcolor->labelcolor(fgclr);
791
scaleSWRcolor->labelcolor(fgclr);
792
grpMeterColor->labelcolor(fgclr);
793
smeterRed = 0; smeterGreen = 180; smeterBlue = 0;
794
c = fl_rgb_color (smeterRed, smeterGreen, smeterBlue);
795
sldrRcvSignalColor->color(c, bgclr );
796
peakRed = 255; peakGreen = 0; peakBlue = 0;
797
c = fl_rgb_color( peakRed, peakGreen, peakBlue );
798
sldrRcvSignalColor->PeakColor(c);
799
sldrPWRcolor->PeakColor(c);
800
sldrSWRcolor->PeakColor(c);
801
pwrRed = 180; pwrGreen = 0; pwrBlue = 0;
802
c = fl_rgb_color( pwrRed, pwrGreen, pwrBlue );
803
sldrPWRcolor->color(c, bgclr);
804
swrRed = 148; swrGreen = 0; swrBlue = 148;
805
c = fl_rgb_color(swrRed, swrGreen, swrBlue);
806
sldrSWRcolor->color(c, bgclr);
807
dlgDisplayConfig->redraw();
812
uchar r = smeterRed, g = smeterGreen, b = smeterBlue;
813
if (fl_color_chooser("S Meter color", r, g, b)) {
814
smeterRed = r; smeterGreen = g; smeterBlue = b;
815
sldrRcvSignalColor->color(
816
fl_rgb_color (r, g, b),
818
dlgDisplayConfig->redraw();
822
void cbPeakMeterColor()
824
uchar r = peakRed, g = peakGreen, b = peakBlue;
825
if (fl_color_chooser("Peak value color", r, g, b)) {
826
peakRed = r; peakGreen = g; peakBlue = b;
827
sldrRcvSignalColor->PeakColor(fl_rgb_color (r, g, b));
828
sldrPWRcolor->PeakColor(fl_rgb_color (r, g, b));
829
sldrSWRcolor->PeakColor(fl_rgb_color (r, g, b));
830
dlgDisplayConfig->redraw();
834
void cbPwrMeterColor()
836
uchar r = pwrRed, g = pwrGreen, b = pwrBlue;
837
if (fl_color_chooser("Power color", r, g, b)) {
838
pwrRed = r; pwrGreen = g; pwrBlue = b;
840
fl_rgb_color (r, g, b),
842
dlgDisplayConfig->redraw();
846
void cbSWRMeterColor()
848
uchar r = swrRed, g = swrGreen, b = swrBlue;
849
if (fl_color_chooser("Power color", r, g, b)) {
850
swrRed = r; swrGreen = g; swrBlue = b;
852
fl_rgb_color (swrRed, swrGreen, swrBlue),
854
dlgDisplayConfig->redraw();
860
progStatus.swrRed = swrRed;
861
progStatus.swrGreen = swrGreen;
862
progStatus.swrBlue = swrBlue;
864
progStatus.pwrRed = pwrRed;
865
progStatus.pwrGreen = pwrGreen;
866
progStatus.pwrBlue = pwrBlue;
868
progStatus.smeterRed = smeterRed;
869
progStatus.smeterGreen = smeterGreen;
870
progStatus.smeterBlue = smeterBlue;
872
progStatus.peakRed = peakRed;
873
progStatus.peakGreen = peakGreen;
874
progStatus.peakBlue = peakBlue;
876
progStatus.fg_red = fg_red;
877
progStatus.fg_green = fg_green;
878
progStatus.fg_blue = fg_blue;
880
progStatus.bg_red = bg_red;
881
progStatus.bg_green = bg_green;
882
progStatus.bg_blue = bg_blue;
884
progStatus.fontnbr = selfont;
885
FreqDispA->font(selfont);
886
FreqDispB->font(selfont);
888
progStatus.fg_sys_red = fg_sys_red;
889
progStatus.fg_sys_green = fg_sys_green;
890
progStatus.fg_sys_blue = fg_sys_blue;
892
progStatus.bg_sys_red = bg_sys_red;
893
progStatus.bg_sys_green = bg_sys_green;
894
progStatus.bg_sys_blue = bg_sys_blue;
896
progStatus.bg2_sys_red = bg2_sys_red;
897
progStatus.bg2_sys_green = bg2_sys_green;
898
progStatus.bg2_sys_blue = bg2_sys_blue;
900
progStatus.slider_red = bg_slider_red;
901
progStatus.slider_green = bg_slider_green;
902
progStatus.slider_blue = bg_slider_blue;
904
progStatus.slider_btn_red = btn_slider_red;
905
progStatus.slider_btn_green = btn_slider_green;
906
progStatus.slider_btn_blue = btn_slider_blue;
908
progStatus.lighted_btn_red = btn_lt_color_red;
909
progStatus.lighted_btn_green = btn_lt_color_green;
910
progStatus.lighted_btn_blue = btn_lt_color_blue;
913
FreqDispB->SetONOFFCOLOR( fl_rgb_color(fg_red, fg_green, fg_blue), bgclr);
914
FreqDispA->SetONOFFCOLOR(
915
fl_rgb_color(fg_red, fg_green, fg_blue),
916
fl_color_average(bgclr, FL_BLACK, 0.87));
918
FreqDispA->SetONOFFCOLOR( fl_rgb_color(fg_red, fg_green, fg_blue), bgclr);
919
FreqDispB->SetONOFFCOLOR(
920
fl_rgb_color(fg_red, fg_green, fg_blue),
921
fl_color_average(bgclr, FL_BLACK, 0.87));
924
grpMeters->color(bgclr);
926
meter_fill_box->color(bgclr);
928
scaleSmeter->color(bgclr);
929
scaleSmeter->labelcolor(fgclr);
931
scalePower->color(bgclr);
932
scalePower->labelcolor(fgclr);
934
btnALC_SWR->color(bgclr);
935
btnALC_SWR->labelcolor(fgclr);
936
btnALC_SWR->redraw();
938
sldrFwdPwr->color(fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr);
939
sldrFwdPwr->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue));
941
sldrRcvSignal->color(fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr);
942
sldrRcvSignal->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue));
944
sldrALC->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr);
945
sldrALC->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue));
947
sldrSWR->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr);
948
sldrSWR->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue));
952
if (btnVol) btnVol->selection_color(btn_lt_color);
953
if (btnNR) btnNR->selection_color(btn_lt_color);
954
if (btnIFsh) btnIFsh->selection_color(btn_lt_color);
955
if (btnNotch) btnNotch->selection_color(btn_lt_color);
956
if (btnA) btnA->selection_color(btn_lt_color);
957
if (btnB) btnB->selection_color(btn_lt_color);
958
if (btnSplit) btnSplit->selection_color(btn_lt_color);
959
if (btnAttenuator) btnAttenuator->selection_color(btn_lt_color);
960
if (btnPreamp) btnPreamp->selection_color(btn_lt_color);
961
if (btnNOISE) btnNOISE->selection_color(btn_lt_color);
962
if (btnAutoNotch) btnAutoNotch->selection_color(btn_lt_color);
963
if (btnTune) btnTune->selection_color(btn_lt_color);
964
if (btnPTT) btnPTT->selection_color(btn_lt_color);
965
if (btnAuxRTS) btnAuxRTS->selection_color(btn_lt_color);
966
if (btnAuxDTR) btnAuxDTR->selection_color(btn_lt_color);
967
if (btnSpot) btnSpot->selection_color(btn_lt_color);
968
if (btn_vox) btn_vox->selection_color(btn_lt_color);
969
if (btnCompON) btnCompON->selection_color(btn_lt_color);
970
// if (btnSpecial) btnSpecial->selection_color(btn_lt_color);
971
if (btn_tt550_vox) btn_tt550_vox->selection_color(btn_lt_color);
972
if (btn_tt550_CompON) btn_tt550_CompON->selection_color(btn_lt_color);
974
if (sldrVOLUME) sldrVOLUME->color(bg_slider);
975
if (sldrVOLUME) sldrVOLUME->selection_color(btn_slider);
976
if (sldrRFGAIN) sldrRFGAIN->color(bg_slider);
977
if (sldrRFGAIN) sldrRFGAIN->selection_color(btn_slider);
978
if (sldrSQUELCH) sldrSQUELCH->color(bg_slider);
979
if (sldrSQUELCH) sldrSQUELCH->selection_color(btn_slider);
980
if (sldrNR) sldrNR->color(bg_slider);
981
if (sldrNR) sldrNR->selection_color(btn_slider);
982
if (sldrIFSHIFT) sldrIFSHIFT->color(bg_slider);
983
if (sldrIFSHIFT) sldrIFSHIFT->selection_color(btn_slider);
984
if (sldrNOTCH) sldrNOTCH->color(bg_slider);
985
if (sldrNOTCH) sldrNOTCH->selection_color(btn_slider);
986
if (sldrMICGAIN) sldrMICGAIN->color(bg_slider);
987
if (sldrMICGAIN) sldrMICGAIN->selection_color(btn_slider);
988
if (sldrPOWER) sldrPOWER->color(bg_slider);
989
if (sldrPOWER) sldrPOWER->selection_color(btn_slider);
991
if (spnrPOWER) spnrPOWER->color(bg_slider);
992
if (spnrVOLUME) spnrVOLUME->color(bg_slider);
993
// if (spnrPOWER) spnrPOWER->selection_color(btn_slider);
995
mainwindow->redraw();
998
void cb_reset_display_dialog()
1001
cb_lighted_default();
1002
cb_slider_defaults();
1007
void cbOkDisplayDialog()
1010
dlgDisplayConfig->hide();
1013
void cbCancelDisplayDialog()
1015
dlgDisplayConfig->hide();
1018
void setDisplayColors()
1020
if (dlgDisplayConfig == NULL)
1023
swrRed = progStatus.swrRed;
1024
swrGreen = progStatus.swrGreen;
1025
swrBlue = progStatus.swrBlue;
1027
pwrRed = progStatus.pwrRed;
1028
pwrGreen = progStatus.pwrGreen;
1029
pwrBlue = progStatus.pwrBlue;
1031
smeterRed = progStatus.smeterRed;
1032
smeterGreen = progStatus.smeterGreen;
1033
smeterBlue = progStatus.smeterBlue;
1035
peakRed = progStatus.peakRed;
1036
peakGreen = progStatus.peakGreen;
1037
peakBlue = progStatus.peakBlue;
1039
fg_red = progStatus.fg_red;
1040
fg_green = progStatus.fg_green;
1041
fg_blue = progStatus.fg_blue;
1043
bg_red = progStatus.bg_red;
1044
bg_green = progStatus.bg_green;
1045
bg_blue = progStatus.bg_blue;
1047
bgclr = fl_rgb_color(bg_red, bg_green, bg_blue);
1048
fgclr = fl_rgb_color(fg_red, fg_green, fg_blue);
1050
fg_sys_red = progStatus.fg_sys_red;
1051
fg_sys_green = progStatus.fg_sys_green;
1052
fg_sys_blue = progStatus.fg_sys_blue;
1054
bg_sys_red = progStatus.bg_sys_red;
1055
bg_sys_green = progStatus.bg_sys_green;
1056
bg_sys_blue = progStatus.bg_sys_blue;
1058
bg2_sys_red = progStatus.bg2_sys_red;
1059
bg2_sys_green = progStatus.bg2_sys_green;
1060
bg2_sys_blue = progStatus.bg2_sys_blue;
1062
bg_slider_red = progStatus.slider_red;
1063
bg_slider_green = progStatus.slider_green;
1064
bg_slider_blue = progStatus.slider_blue;
1066
btn_slider_red = progStatus.slider_btn_red;
1067
btn_slider_green = progStatus.slider_btn_green;
1068
btn_slider_blue = progStatus.slider_btn_blue;
1070
sldrColors->color(fl_rgb_color(bg_slider_red, bg_slider_green, bg_slider_blue));
1071
sldrColors->selection_color(fl_rgb_color(btn_slider_red, btn_slider_green, btn_slider_blue));
1073
btn_lt_color_red = progStatus.lighted_btn_red;
1074
btn_lt_color_green = progStatus.lighted_btn_green;
1075
btn_lt_color_blue = progStatus.lighted_btn_blue;
1077
lblTest->labelcolor(fl_rgb_color(fg_red, fg_green, fg_blue));
1078
lblTest->color(bgclr);
1080
scaleSmeterColor->color(bgclr);
1081
scaleSmeterColor->labelcolor(fgclr);
1082
scalePWRcolor->color(bgclr);
1083
scalePWRcolor->labelcolor(fgclr);
1084
scaleSWRcolor->color(bgclr);
1085
scaleSWRcolor->labelcolor(fgclr);
1086
grpMeterColor->color(bgclr);
1087
grpMeterColor->labelcolor(fgclr);
1089
sldrRcvSignalColor->color(
1090
fl_rgb_color (smeterRed, smeterGreen, smeterBlue),
1092
sldrPWRcolor->color(
1093
fl_rgb_color (pwrRed, pwrGreen, pwrBlue),
1095
sldrSWRcolor->color(
1096
fl_rgb_color (swrRed, swrGreen, swrBlue),
1099
sldrRcvSignalColor->minimum(0);
1100
sldrRcvSignalColor->maximum(100);
1101
sldrRcvSignalColor->value(25);
1103
sldrPWRcolor->minimum(0);
1104
sldrPWRcolor->maximum(100);
1105
sldrPWRcolor->value(25);
1107
sldrSWRcolor->minimum(0);
1108
sldrSWRcolor->maximum(100);
1109
sldrSWRcolor->value(25);
1111
btn_lt_color = fl_rgb_color( btn_lt_color_red, btn_lt_color_green, btn_lt_color_blue);
1112
btn_slider = fl_rgb_color( btn_slider_red, btn_slider_green, btn_slider_blue);
1113
bg_slider = fl_rgb_color(bg_slider_red, bg_slider_green, bg_slider_blue);
1115
btn_lighted->value(1);
1116
btn_lighted->selection_color(btn_lt_color);
1118
sldrColors->color(bg_slider);
1119
sldrColors->selection_color(btn_slider);
1121
mnuScheme->value(mnuScheme->find_item(progStatus.ui_scheme.c_str()));
1123
dlgDisplayConfig->show();
1126
void cbCloseMemory()
1128
dlgMemoryDialog->hide();
1131
void openMemoryDialog()
1133
if (dlgMemoryDialog == NULL)
1135
dlgMemoryDialog->show();
1138
void show_controls()
1140
if (!(selrig->has_extras || rig_nbr == TT550) && progStatus.aux_serial_port == "NONE")
1142
switch (progStatus.UIsize) {
1144
if (mainwindow->h() > 150) {
1145
btn_show_controls->label("@-22->");
1146
btn_show_controls->redraw_label();
1148
mainwindow->resizable(grpTABS);
1149
mainwindow->size(mainwindow->w(), 150);
1150
mainwindow->size_range(735, 150, 0, 150);
1152
btn_show_controls->label("@-28->");
1153
btn_show_controls->redraw_label();
1154
mainwindow->resizable(grpTABS);
1155
mainwindow->size(mainwindow->w(), 218);
1156
mainwindow->size_range(735, 218, 0, 218);
1159
mainwindow->redraw();
1162
if (rig_nbr == TT550) {
1164
tabsGeneric->hide();
1167
tabsGeneric->show();
1170
tabsGeneric->redraw();
1171
mainwindow->redraw();
1174
if (rig_nbr == TT550) {
1175
tabsGeneric->hide();
1176
if (tabs550->visible()) {
1178
btn_show_controls->label("@-22->");
1179
btn_show_controls->redraw_label();
1180
mainwindow->size( mainwindow->w(), mainwindow->h() - 70);
1183
btn_show_controls->label("@-28->");
1184
btn_show_controls->redraw_label();
1185
mainwindow->size( mainwindow->w(), mainwindow->h() + 70);
1187
mainwindow->redraw();
1190
if (tabsGeneric->visible()) {
1191
tabsGeneric->hide();
1192
btn_show_controls->label("@-22->");
1193
btn_show_controls->redraw_label();
1194
mainwindow->size( mainwindow->w(), mainwindow->h() - 70);
1196
tabsGeneric->show();
1197
btn_show_controls->label("@-28->");
1198
btn_show_controls->redraw_label();
1199
mainwindow->size( mainwindow->w(), mainwindow->h() + 70);
1201
mainwindow->redraw();
1209
// a replica of the default color map used by Fltk
1211
static unsigned flrig_cmap[256] = {
1470
Fl_Color flrig_def_color(int n)
1472
if ( n > 255 ) n = 255;
1474
return (Fl_Color)flrig_cmap[n];
1478
void cb_send_command()
1480
bool usehex = false;
1481
string command = txt_command->value();
1482
if (command.empty()) return;
1484
if (command.find("x") != string::npos) { // hex strings
1488
while (( p = command.find("x", p)) != string::npos) {
1489
sscanf(&command[p+1], "%x", &val);
1490
cmd += (unsigned char) val;
1495
// lock out polling loops until done
1496
guard_lock gl_serial(&mutex_serial, 201);
1497
guard_lock gl_xml(&mutex_xmlrpc, 202);
1499
sendCommand(cmd, 0);
1502
while (timeout > 0) {
1503
if (timeout > 10) MilliSleep(10);
1504
else MilliSleep(timeout);
1510
txt_response->value(
1511
usehex ? str2hex(replystr.c_str(), replystr.length()) :